Php Salesforce API:出现错误->;更新();无效的“U类型:必须发送具体的实体类型。”;
基于我对如何更新SObject中的记录的理解,我一直在研究这个问题,并尝试了许多变体,但我一直得到以下错误: SoapFault异常:[sf:无效的\u类型]无效的\u类型:必须发送具体的实体类型。在/home/public_html/soapclient/SforceBaseClient.php:509中 我能够成功登录到页面,但是当我执行下面的代码时,我得到上面列出的错误Php Salesforce API:出现错误->;更新();无效的“U类型:必须发送具体的实体类型。”;,php,salesforce,Php,Salesforce,基于我对如何更新SObject中的记录的理解,我一直在研究这个问题,并尝试了许多变体,但我一直得到以下错误: SoapFault异常:[sf:无效的\u类型]无效的\u类型:必须发送具体的实体类型。在/home/public_html/soapclient/SforceBaseClient.php:509中 我能够成功登录到页面,但是当我执行下面的代码时,我得到上面列出的错误 $fieldsToUpdate = array ( "Name"=>$_POST['Nam
$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,但无法找到这个错误的根源。此外,我正在沙箱模式下使用企业WSDL,并分配了适当的WSDL xml
谢谢。sObject是所有其他可以更新的Salesforce对象的基本类型。使用企业API(SOAP)时,需要传递从sObject派生的实例。(Lead、Contact和Account是示例)
下面是该方法的文档。您需要提供一个对象类型作为第二个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 toolkit不会自动解释传递单个对象的人(即,它不会为您将其封装在数组中)。我总是在我的应用程序逻辑和Salesforce的SOAP工具包之间使用一个抽象层,它提供了我刚才描述的便利 如果您正在使用合作伙伴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;
}
?>
然后如何将表Prospect\uu\c创建为一个sObject?语法方面。我根据您收到的错误消息给出了答案,但是我还应该补充一点,我对PHP库不太熟悉,无法使用企业API。如果Prospect\uuu c是您的自定义对象,那么绑定是否允许您创建新的Prospect\uu c()而不是新的sObject()?在创建这个自定义对象之后,您是否重新导入了wsdl?我对企业版PHP库也不太熟悉,并且一直在摸索他们的PHP示例。我试过$sObject=newprospect_uuc()代码>但该代码根本无法编译。在文档中,C#示例似乎暗示了格式应该是Prospect__csobject=new Prospect__C()代码>在PHP中使用这种格式没有任何运气。我切换到使用PartnerClient,并且没有任何问题(作为对此的更新)。仍然不知道企业客户端发生了什么。@pXdty切换到合作伙伴客户端也为我解决了这个问题。谢谢。有人能告诉我投票反对的理由吗