【问题标题】:Binding or simplying a .net DataSet through nusoap通过 nusoap 绑定或简化 .net 数据集
【发布时间】:2012-01-10 23:27:10
【问题描述】:

我正在使用 nusoap 使用 .net 应用程序提供的 Web 服务,该应用程序从 Microsoft Dynamics CRM 获取数据。正在为我编写“中间件”Web 服务以提供面向业务的 Web 服务,而不是直接访问底层数据结构。

许多 Web 服务都以 DataSet 的形式提供结构化数据。这些在 Microsoft 世界中看起来都不错,它们可以绑定到表格和其他用户元素并且正常工作

但是,我的问题是,通过 SOAP 接口使用这些 DataSet 对象给了我一些非常复杂的结构(嵌套了许多层深的数组)从 nusoap 输出。是否有 PHP 库可以帮助我理解这些结构?最后,我只想要简单的 PHP 结构(即简单的结构化关联数组)中的原始数据,并且不想开始猜测我需要从这些 DataSet 结构中提取什么。

抱歉,这有点含糊 - 我真的在寻找我在解释这些使用 PHP nusoap 作为客户端的 .net 应用程序通过 SOAP 发送的复杂数据结构时可能忽略的内容 - 也许是朝着正确的方向轻推。

已编辑:

如果有帮助,我返回的嵌套数组包括“diffgram”数据,这是我还不熟悉的。似乎 diffgram 是表示数据集的“标准”MS 格式,但确实为我提供了一个非常复杂的数组结构来尝试和解析。也许有一个 PHP 库来处理 diffgrams?

【问题讨论】:

  • 我想我只需要了解 nusoap 吐出的 diffgram 的结构。它的结构似乎相当一致,记录列表位于 $result['GetFooBarsResult']['diffgram']['DocumentElement']['Foo'][0..n]... 这篇文章给了我一些线索:stackoverflow.com/questions/5587911/…

标签: .net dataset nusoap


【解决方案1】:

我想我现在有我的答案了,至少现在可行。

.Net Web 服务函数都返回一个包含多个表的 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。只取 diffgram 的第一个元素(丢弃除第一个 DataSet 之外的任何内容)。丢弃 DataSetName。这些给我留下了表格数组。

现在,如果在表中只返回一行,则数据会高一级,即不会出现在元素 0 的数组中,因为 two 行表中的第一行会,所以需要考虑。否则我只是扫描表数据并丢弃任何以“!”开头的键的元素,因为那是某种元数据。

这让我得到了嵌套数组中的原始数据,我将这些数据传递给我的 PHP 脚本进行进一步处理。

需要注意的事项包括根本不发送的零行表 - 甚至是空数组。日期可以很容易地被自动识别和解析,否则由消费进程来做它喜欢的数据。

如果能在比我更了解 diffgram 结构的“diffgram”库中进行这种解析,那就太好了。我希望这对某人有用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-02
    • 1970-01-01
    • 1970-01-01
    • 2018-11-26
    • 2018-02-04
    • 2020-03-09
    相关资源
    最近更新 更多