2011-03-13 45 views
1

我有一段艱難的時間,並花了4小時試圖調試。我是PHP新手,但沒想到這會很難。php salesforce新手INVALID_FIELD:實體'聯繫'上沒有這樣的'字段'

這是代碼,我正在嘗試更新聯繫人表。我試圖更新插入和更新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} 

回答

1

看你跟蹤你似乎是使用企業客戶,我可以承擔企業WSDL。這是強類型的,你應該使用特定於你的Salesforce組織的WSDL。如果你沒有使用從你的組織中下載的WSDL,它將不會有正確的對象和字段中定義的內容

我會建議使用合作伙伴客戶端和合作夥伴WSDL,這是鬆散的類型,並且更加靈活,使用部分會更容易特別是如果你不熟悉PHP或Web服務。

以下應做你的更新中...

$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的財產,而不是字段數組中的值。也不需要在更新調用中指定'Contact',因爲它已經在$ sObject的type屬性中設置了它。

1

使用企業WSDL時,不要創建new SObject,只需創建一個new stdClass。請參閱PHP Getting Started Guide中的示例; SObjects只能用於合作伙伴的WSDL。

+0

+1,這是比改變WSDL更好的解決方案。 – hudolejev 2012-02-20 18:28:37

0

我在使用企業客戶端時遇到了同樣的問題更新。在更新Account對象上的自定義字段時遇到同樣的問題。

我與SObject的問題是它試圖在更新期間更新一個名爲'fields'的參數。使用不包含該字段的企業WSDL,我使用unset()從SObject中刪除'fields'屬性。

我很欣賞這是一個有點破解的解決方案,但它可能會對其他遇到此問題的人有用。

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

$updateResponse = $mySforceConnection->update(array($sUpdateObject), 'Account'); 
print_r($upsertResponse); 
相關問題