Обвързване или опростяване на .net DataSet чрез nusoap

Използвам nusoap за използване на уеб услуги, предоставени от .net приложение, което извлича данни от Microsoft Dynamics CRM. Уеб услугата "среден софтуер" се пише за мен, за да предоставя бизнес-ориентирани уеб услуги, а не директен достъп до основните структури от данни.

Много от уеб услугите предоставят структурирани данни под формата на набори от данни. Всички те изглеждат добре в света на Microsoft, където могат да бъдат обвързани с таблици и други потребителски елементи и просто да работят.

Проблемът ми обаче е, че консумирането на тези DataSet обекти през SOAP интерфейса ми дава някои доста сложни структури (масиви, вложени на много нива дълбоко) изход от nusoap. Има ли PHP библиотека, която ще ми помогне да осмисля тези структури? В крайна сметка просто искам необработените данни в прости PHP структури (т.е. прости структурирани асоциативни масиви) и не искам да започвам да гадая какво трябва да изтегля от тези DataSet структури.

Съжалявам, това е малко неясно - наистина търся какво може да пренебрегвам при интерпретирането на тези сложни структури от данни, изпратени чрез SOAP от .net приложението, използващо PHP nusoap като клиент - може би тласък в правилната посока.

Редактирано:

В случай, че помогне, вложените масиви, които получавам обратно, включват данни от "diffgram", нещо, с което все още не съм запознат. Изглежда, че дифграмата е "стандартен" MS формат за представяне на набори от данни, но ми представя много сложна структура на масив, за да се опитам да анализирам. Може би има PHP библиотека за обработка на дифграми?


person Jason    schedule 10.01.2012    source източник
comment
Мисля, че просто трябва да разбера структурата на дифграмата, изплюта от nusoap. Изглежда, че е доста последователен по структура, със списък от записи в $result['GetFooBarsResult']['diffgram']['DocumentElement']['Foo'][0..n]... Тази публикация ми дава някои улики: stackoverflow.com/questions/5587911/   -  person Jason    schedule 11.01.2012


Отговори (1)


Мисля, че сега имам своя отговор, поне нещо, което работи за сега.

Всички функции на уеб услугата .Net връщат единичен набор от данни, съдържащ множество таблици. Това се връща от nusoap по последователен начин:

array(
    'ResultSetName => array(
        'schema' => array(...),
        'diffgram' => array(
            'DataSetName' => array(
                'Table1NameWithOneRow' => array(
                    'Column1' => 'Value1',
                    'Column2' => 'Value2',
                    ...
                ),
                'Table2NameWithManyRows' => array(
                    0 => array(
                       'Column1' => 'Value1',
                       'Column2' => 'Value2',
                       ...
                    ),
                    1 => array(
                       'Column1' => 'Value1',
                       'Column2' => 'Value2',
                       ...
                    ),
                    ...
                ),
                ...
            )
        )
)

Това е достатъчно лесно за анализиране: изхвърлете ResultSetName, за да оставите схемата и дифграмата. Изхвърлете схемата, за да оставите само дифграмата. Вземете само първия елемент от дифграмата (изхвърлете всичко освен първия DataSet). Изхвърлете DataSetName. Това ме оставя с масива от таблици.

Сега, ако се върне само един ред в таблица, данните са едно ниво по-високо, т.е. не се появяват в масив от елемент 0, както би бил първият ред в таблица с два реда, така че трябва да се отчете. В противен случай просто сканирам данните от таблицата и изхвърлям всички елементи с ключ, който започва с "!", тъй като това е някакъв вид метаданни.

Това след това ми оставя необработени данни във вложени масиви, които предавам за по-нататъшна обработка в моите PHP скриптове.

Нещата, за които трябва да внимавате, включват таблици с нула редове, които просто не се изпращат изобщо - дори празен масив. Датите могат лесно да бъдат разпознати и анализирани автоматично, в противен случай зависи от процеса на потребление да прави каквото си иска с данните.

Би било хубаво този анализ да бъде в библиотека "diffgram", която разбира много повече за структурата на diffgram от мен. Надявам се това да е полезно за някого.

person Jason    schedule 13.01.2012