Поля объединяются в результате нежелательного запроса Salesforce SOQL. Разработчик почти теряет это - PullRequest
2 голосов
/ 17 ноября 2011

Я, вероятно, упускаю что-то довольно простое, но я очень запутался (и разочарован) результатами, полученными от моих запросов 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, то есть?

Edit:

Указанный разработчик теперь будет сидеть в углу несколько часов, раскаявшись в том, что не проверил более свежие версии PHP Toolkit. Кажется, я использовал 11.0, тогда как уже есть версия 20.0. Позор мне, позор мне действительно. Извините, что потратил ваше время.

1 Ответ

0 голосов
/ 22 ноября 2011

Поведение, которое вы видите, в основном из-за того, что PHP SoapClient интерпретирует результаты API.Если вы позвоните getLastResponse() через ваше соединение API после выполнения вызовов query() выше, вы увидите, как выглядят реальные сообщения SOAP, возвращаемые из Salesforce.

Что касается массива Id - это не совсем массив, но он указан дважды для каждой записи (один раз для самой записи и один раз как поле), но PHP превращает его в массив, потому чтоон видит это дважды.Что касается any, это происходит потому, что PHP неправильно понимает теги пространства имен.

Похоже, вы нашли, что использование PHP Toolkit может помочь справиться с этими странностями и вернуть разумные объекты для работы с вами.Вы также можете рассмотреть использование REST API Salesforce, результаты которого могут быть напрямую использованы json_decode().Для выполнения HTTP-вызовов в Salesfore вас может заинтересовать этот простой (почти автономный) REST-клиент в моем проекте.

...