Связывание или упрощение .net DataSet через nusoap - PullRequest
0 голосов
/ 11 января 2012

Я использую nusoap для использования веб-сервисов, предоставляемых приложением .net, которое получает данные из Microsoft Dynamics CRM.Веб-служба «промежуточного программного обеспечения» создается для того, чтобы я предоставлял ориентированные на бизнес веб-службы, а не прямой доступ к базовым структурам данных.

Многие из веб-служб предоставляют структурированные данные в форме наборов данных.Все это хорошо выглядит в мире Microsoft, где они могут быть связаны с таблицами и другими пользовательскими элементами и просто работают .

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

Извините, это немного расплывчато- Я действительно ищу то, что могу упустить при интерпретации этих сложных структур данных, отправляемых через SOAP приложением .net с использованием PHP nusoap в качестве клиента - возможно, толчок в правильном направлении.

Отредактировано:

В случае, если это помогает, вложенные массивы, которые я получаю, включают в себя данные "diffgram", с которыми я еще не знаком.Кажется, что diffgram - это «стандартный» формат MS для представления наборов данных, но он предоставляет мне очень сложную структуру массива для анализа.Возможно, есть PHP-библиотека для работы с дифграммами?

1 Ответ

1 голос
/ 13 января 2012

Я думаю, что у меня есть ответ, по крайней мере, что-то, что работает сейчас.

Все функции веб-службы .Net возвращают один DataSet, содержащий несколько таблиц.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, чтобы покинуть схему и диаграмму.Выбросьте схему, чтобы оставить только diffgram.Возьмите только первый элемент diffgram (отбросьте все что угодно, кроме первого DataSet).Выбросьте DataSetName.Это оставляет меня с массивом таблиц.

Теперь, если в таблице возвращается только одна строка, данные на один уровень выше, то есть не отображаются в массиве элемента 0, как первая строка в две таблицы строк, так что это необходимо учитывать.В противном случае я просто просматриваю данные таблицы и выбрасываю любые элементы с ключом, начинающимся с «!», Так как это некие метаданные.

Затем я оставляю необработанные данные во вложенных массивах, чтото, что я передаю для дальнейшей обработки в моих сценариях PHP.

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

Было бы хорошо иметь этот анализ в библиотеке "diffgram", которая понимает многобольше о структуре диграммы, чем я.Надеюсь, это кому-нибудь пригодится.

...