2

我可能遗漏了一些非常基本的东西,但我对从 SOQL 查询到 Salesforce API 的结果感到非常困惑(和沮丧)。

我的查询:

Select Id, FirstName, LastName FROM contact

结果对象(由 print_r 呈现):

stdClass Object
(
    [done] => 1
    [queryLocator] => 
    [records] => Array
        (
            [0] => stdClass Object
                (
                    [type] => Contact
                    [Id] => Array
                        (
                            [0] => 0032000000cPd7uAAC
                            [1] => 0032000000cPd7uAAC
                        )
                    [any] => BuzzAldrin
                )
            [1] => stdClass Object
                (
                    [type] => Contact
                    [Id] => Array
                        (
                            [0] => 0032000000cPt1zABC
                            [1] => 0032000000cPt1zABC
                        )
                    [any] => RonnieVanZant
                )
            [2] => stdClass Object
                (
                    [type] => Contact
                    [Id] => Array
                        (
                            [0] => 0032000000cPb60AA
                            [1] => 0032000000cPb60AA
                        )

                    [any] => PollyJeanHarvey
                )
        )
    [size] => 3
)

我不明白的第一件事是为什么“Id”是一个数组。一个奇怪的怪癖,但解决方法并不难。

不过,第二件事让我无休止地困扰着:我选择 FirstName 和 LastName,发生的情况是它们被连接起来并作为名为“any”的字段的单个字符串值返回。为了避免我已经从同事那里得到的“用大写字母拆分”的建议,我提供了一个包含两个大写名字和一个两个大写姓氏的示例,无论如何,实际上我需要更多(以及更多)形式上不可预测的)字段,它们都被添加到这个“任何”属性中。

有谁看到我做错了什么?假设它不是一个写得很糟糕的API,那是什么?

编辑:

所述开发人员现在将在角落里坐几个小时,为没有检查更新版本的 PHP Toolkit 而后悔。似乎我使用的是 11.0,而已经有 20.0 版本。真丢人,真丢人。很抱歉浪费您的时间。

4

1 回答 1

0

您看到的行为主要是因为 PHP 如何SoapClient解释 API 的结果。如果getLastResponse()在进行上述调用后调用 API 连接query(),您将看到从 Salesforce 返回的实际 SOAP 消息的样子。

至于Id数组——它并不是一个真正的数组,但它在每条记录中列出两次(一次用于记录本身,一次作为字段),但 PHP 将其转换为数组,因为它看到了两次。至于any,这是因为 PHP 没有正确理解命名空间字段标签。

正如您发现的那样,使用 PHP 工具包可以帮助解决这些奇怪的问题并返回合理的对象供您使用。您可能还想考虑查看 Salesforce 的 REST API,其结果可以直接由json_decode(). 为了对 Salesfore 进行 HTTP 调用,您可能对我的项目中的这个简单(几乎独立)的 REST 客户端感兴趣。

于 2011-11-22T07:53:03.817 回答