php salesforce новичок INVALID_FIELD: Нет такого столбца 'поля' на объекте 'Контакт' - PullRequest
1 голос
/ 13 марта 2011

У меня тяжелое время, и я потратил около 4 часов, пытаясь его отладить.Я новичок в PHP, но не ожидал, что это будет так сложно.

Это код, я пытаюсь обновить таблицу контактов.я пробовал upsert и обновить nothign, кажется, работает

это обновление "версия кода.

$id = '003A000000XRVFxIAP';
 $updateFields = array (
        'Id' => $id,
        'MailingCity' => 'New York',
        'MailingState' => 'NY'
        );      

        $sObject1 = new SObject();
       //$sObject1->fields = $updateFields;
       //$sObject1->MailingCity= 'New York';
       $sObject1->type = 'Contact';
        try{
           $updateResponse = $client->update(array($sObject1),'Contact'); 
         $myID = $updateResponse->id;

        }


Strict Standards: Creating default object from empty value in C:\xampp\htdocs\Proj1\ForceToolkit\soapclient\SforceEnterpriseClient.php on line 89 INVALID_FIELD: No such column 'fields' on entity 'Contact'. If you are attempting to use a custom field, be sure to append the '__c' after the custom field name. Please reference your WSDL or the describe call for the appropriate names. Error Info  SoapFault exception: [sf:INVALID_FIELD] INVALID_FIELD: No such column 'fields' on entity 'Contact'. If you are attempting to use a custom field, be sure to append the '__c' after the custom field name. Please reference your WSDL or the describe call for the appropriate names. in C:\xampp\htdocs\Proj1\ForceToolkit\soapclient\SforceBaseClient.php:508 Stack trace: #0 C:\xampp\htdocs\Proj1\ForceToolkit\soapclient\SforceBaseClient.php(508): SoapClient->__call('update', Array) #1 C:\xampp\htdocs\Proj1\ForceToolkit\soapclient\SforceBaseClient.php(508): SoapClient->update(Object(stdClass))
#2 C:\xampp\htdocs\Proj1\ForceToolkit\soapclient\SforceEnterpriseClient.php(90): SforceBaseClient->_update(Object(stdClass))
#3 C:\xampp\htdocs\Proj1\createAccount.php(95): SforceEnterpriseClient->update(Array, 'Contact') #4 {main}

Ответы [ 3 ]

1 голос
/ 10 ноября 2011

При использовании Enterprise WSDL не создавайте new SObject, просто создайте new stdClass. См. Примеры в Руководство по началу работы с PHP ; SObjects предназначены только для использования с партнером WSDL.

1 голос
/ 16 марта 2011

Глядя на свой след, вы, похоже, используете корпоративный клиент, и я могу предположить, что корпоративный WSDL.Это строго типизировано, и вы должны использовать WSDL, специфичный для вашей организации Salesforce.Если вы не используете WSDL, загруженный из вашей организации, в нем не будут определены правильные объекты и поля.

Я бы рекомендовал использовать партнерский клиент и партнерский WSDL.Это слабо напечатано и гораздо более гибко.Было бы легче работать, особенно если вы не знакомы с PHP или веб-сервисами.

Следующее должно сделать ваше обновление ...

$sObject1 = new stdClass();
$sObject1->type = 'Contact';
$sObject1->Id = $id;
$sObject1->fields['MailingCity'] = 'New York';
$sObject1->fields['MailingState'] = 'NY';

try
{
    $updateResponse = $client->update( array( $sObject1 ) );
}
catch( Exception $exception )
{
    // Do something
}

Обратите внимание, что идентификаторсвойство $ sObject, а не значение в массиве полей.Также нет необходимости указывать «Контакт» в вашем вызове обновления, так как он установлен в свойстве типа $ sObject.

0 голосов
/ 17 апреля 2015

Я столкнулся с той же проблемой обновления при использовании корпоративного клиента.У меня возникла та же проблема при обновлении настраиваемого поля в объекте Account.

Проблема, с которой я столкнулся с SObject, заключалась в том, что он пытался обновить параметр с именем 'fields' во время обновления.Поскольку Enterprise WSDL не включает это поле, я использовал unset() для удаления атрибута 'fields' из SObject.

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

$sUpdateObject = new SObject();
$sUpdateObject->id = $record->Id;
$sUpdateObject->MyCustomField__c = 0;
unset($sUpdateObject->fields);

$updateResponse = $mySforceConnection->update(array($sUpdateObject), 'Account');
print_r($upsertResponse);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...