2012-04-26 27 views
3

我一直在研究這個,並試圖關閉基於許多變化我如何更新一個的sObject創紀錄的理解,但我不斷收到以下錯誤:Salesforce API:錯誤 - > update(),「INVALID_TYPE:必須發送具體的實體類型。」

SoapFault exception: [sf:INVALID_TYPE] INVALID_TYPE: Must send a concrete entity type. in /home/public_html/soapclient/SforceBaseClient.php:509

我能夠成功登錄到頁面,但是當我執行下面的代碼時,我得到上面列出的錯誤。

$fieldsToUpdate = array (
     "Name"=>$_POST['Name'] 
    ); 

    $sObject = new SObject(); 
    $sObject->Id = $_POST['prospectID']; // this is the Id of the record 
    $sObject->fields = $fieldsToUpdate; 
    $sObject->type = 'Prospect__c'; // this is the API name of custom object 

    try { 
     $response = $mySforceConnection->update($sObject); 
    } catch (Exception $e) { 
     echo $e; 
    } 

我使用Force.com開發人員文檔中的PHP Toolkit 13.0,但無法找到此錯誤的底部。另外,我在沙盒模式下使用Enterprise WSDL,並且分配了適當的wsdl xml。

謝謝。

回答

1

sObject是可以更新的所有其他Salesforce對象的基類型。在使用企業API(SOAP)時,您需要傳遞從sObject派生的實例。 (鉛,聯繫人和帳戶都是示例)

以下是update()方法的文檔。

+0

我怎麼會那麼去創建表Prospect__c作爲的sObject?語法明智的。 – 2012-04-26 15:40:43

+0

我根據您收到的錯誤消息給出了我的答案,但是我還應該補充一點,我並不太熟悉用於使用企業API的PHP庫。如果Prospect__c是您的自定義對象,那麼您的綁定是否允許您創建新的Prospect__c()而不是新的sObject()?創建此自定義對象後,您是否重新導入了wsdl? – 2012-04-26 17:20:50

+0

我不太熟悉PHP庫for Enterprise,並且一直在摸索他們的PHP示例。我已經嘗試過'$ sObject = new Prospect__c();'但該代碼根本不編譯。在文檔中,C#示例似乎暗示格式應該是'Prospect__c sObject = new Prospect__c();' 在PHP中沒有任何運氣。 – 2012-04-26 17:38:58

1

您需要提供一個對象類型作爲第二個update()參數。此外,update()方法的第一個參數必須是你想要的對象數組更新:

$response = $mySforceConnection->update(array($object), 'Prospect__c'); 

而且,你不需要使用工具包提供的任何對象類,簡單的一個StdClass應工作:

$prospect = new StdClass(); 
$prospect->Id = '006....'; 
$prospect->Name 'Foobar'; 
$response = $mySforceConnection->update(array($prospect), 'Prospect__c'); 

僅供參考,我從來沒有找到一種方法來一次更新多個對象類型,但你可以更新一批同類型的對象,因此爲什麼第一個參數必須是一個數組。 Salesforce工具箱不會自動爲某個對象傳遞一個對象(即,它不會爲您包裝它)。我一直在我的應用程序邏輯和Salesforce的SOAP工具箱之間使用一個抽象層,它提供了像我剛纔描述的那樣的便利。

-1

如果您正在使用合作伙伴WSDL

<?php 
    // SOAP_CLIENT_BASEDIR - folder that contains the PHP Toolkit and your WSDL 
    // $USERNAME - variable that contains your Salesforce.com username (must be in the form of an email) 
    // $PASSWORD - variable that contains your Salesforce.com password 

    define("SOAP_CLIENT_BASEDIR", "../../soapclient"); 
    require_once (SOAP_CLIENT_BASEDIR.'/SforcePartnerClient.php'); 
    require_once ('../userAuth.php'); 

    try { 
     $mySforceConnection = new SforcePartnerClient(); 
     $mySoapClient = $mySforceConnection->createConnection(SOAP_CLIENT_BASEDIR.'/partner.wsdl.xml'); 
     $mylogin = $mySforceConnection->login($USERNAME, $PASSWORD); 

    /*--------------------------------------------------------\ 
    | Please manage the values for OBJECT ID from file 
    | userAuth.php 
    \--------------------------------------------------------*/ 

     $fieldsToUpdate = array (
     'FirstName' => 'testupdate', 
     'City' => 'testupdateCity', 
     'Country' => 'US' 
    ); 
     $sObject1 = new SObject(); 
     $sObject1->fields = $fieldsToUpdate; 
     $sObject1->type = 'Lead'; 
     $sObject1->Id = $UPDATEOBJECTID1; 

     $fieldsToUpdate = array (
     'FirstName' => 'testupdate', 
     'City' => 'testupdate', 
     'State' => 'testupdate', 
     'Country' => 'US' 
    ); 
     $sObject2 = new SObject(); 
     $sObject2->fields = $fieldsToUpdate; 
     $sObject2->type = 'Lead'; 
     $sObject2->Id = $UPDATEOBJECTID2; 
     $sObject2->fieldsToNull = array('Fax', 'Email'); 

     $response = $mySforceConnection->update(array ($sObject1, $sObject2)); 

     print_r($response); 

    } catch (Exception $e) { 
     print_r($mySforceConnection->getLastRequest()); 
     echo $e->faultstring; 
    } 
?> 

其他企業使用WSDL

<?php 
// SOAP_CLIENT_BASEDIR - folder that contains the PHP Toolkit and your WSDL 
// $USERNAME - variable that contains your Salesforce.com username (must be in the form of an email) 
// $PASSWORD - variable that contains your Salesforce.com password 

define("SOAP_CLIENT_BASEDIR", "../../soapclient"); 
require_once (SOAP_CLIENT_BASEDIR.'/SforceEnterpriseClient.php'); 
require_once ('../userAuth.php'); 

try { 
    $mySforceConnection = new SforceEnterpriseClient(); 
    $mySoapClient = $mySforceConnection->createConnection(SOAP_CLIENT_BASEDIR.'/enterprise.wsdl.xml'); 
    $mylogin = $mySforceConnection->login($USERNAME, $PASSWORD); 

/*--------------------------------------------------------\ 
| Please manage the values for OBJECT ID from file 
| userAuth.php 
\--------------------------------------------------------*/ 

    $sObject1 = new stdclass(); 
    $sObject1->Id = $UPDATEOBJECTID1; 
    $sObject1->FirstName = 'testupdate'; 
    $sObject1->City = 'testupdateCity'; 
    $sObject1->Country = 'US'; 

    $sObject2 = new stdclass(); 
    $sObject2->Id = $UPDATEOBJECTID2; 
    $sObject2->FirstName = 'testupdate'; 
    $sObject2->City = 'testupdate'; 
    $sObject2->State = 'testupdate'; 
    $sObject2->Country = 'US'; 
    $sObject2->fieldsToNull = array('Fax', 'Email'); 

    $response = $mySforceConnection->update(array ($sObject1, $sObject2), 'Lead'); 

    print_r($response); 

} catch (Exception $e) { 
    print_r($mySforceConnection->getLastRequest()); 
    echo $e->faultstring; 
} 
?> 
+0

有人會給我投下的理由 – 2014-09-04 08:06:55

相關問題