2

おそらく非常に基本的なものが欠けていますが、SalesforceAPIへのSOQLクエリから得られる結果に非常に混乱しています(そしてイライラしています)。

私の質問:

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」が配列である理由です。奇妙な癖ですが、回避策はそれほど難しくありません。

ただし、2番目のことは私を際限なく悩ませます。FirstNameとLastNameを選択すると、それらが連結され、「any」というフィールドの単一の文字列値として返されます。同僚からすでに受け取った「大文字で分割する」というアドバイスを避けるために、2つの大文字の名と2つの大文字の姓の両方を使用した例を示しましたが、実際にはもっと多くの(そしてもっと多くの)必要があります正式には予測不可能な)フィールドであり、これらはすべてこの「任意の」プロパティに追加されます。

誰かが私が間違っていることを見ていますか?それがそれほどひどく書かれたAPIではないと仮定すると、それは?

編集:

この開発者は、PHP Toolkitの最新バージョンをチェックしなかったことを悔やんで、数時間コーナーに座ります。私は11.0を使用していたようですが、バージョン20.0はすでに存在します。私に恥をかかせなさい、確かに私に恥をかかせなさい。時間を無駄にしてすみません。

4

1 に答える 1

0

表示されている動作は、ほとんどの場合、PHPSoapClientが API からの結果をどのように解釈するかによるものです。getLastResponse()上記の呼び出しを行った後に API 接続を呼び出すquery()と、Salesforce から返される実際の SOAP メッセージがどのように見えるかがわかります。

配列に関してIdは、実際には配列ではありませんが、レコードごとに 2 回 (レコード自体に対して 1 回、フィールドとして 1 回) リストされますが、PHP はそれを 2 回見るため配列に変換します。に関する限り、anyPHP が名前空間フィールド タグを正しく理解していないために発生しています。

お気づきのように、PHP ツールキットを使用すると、これらの奇妙な点を解決し、作業に適したオブジェクトを返すことができます。また、Salesforce の REST API を調べることも検討してください。この API の結果は で直接使用できますjson_decode()。Salesfore への HTTP 呼び出しを行うために、私のプロジェクトのこの単純な (ほとんどスタンドアロンの) REST クライアントに興味があるかもしれません。

于 2011-11-22T07:53:03.817 に答える