Php Salesforce API:出现错误->;更新();无效的“U类型:必须发送具体的实体类型。”;

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

基于我对如何更新SObject中的记录的理解,我一直在研究这个问题,并尝试了许多变体,但我一直得到以下错误:

SoapFault异常:[sf:无效的\u类型]无效的\u类型:必须发送具体的实体类型。在/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,但无法找到这个错误的根源。此外,我正在沙箱模式下使用企业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切换到合作伙伴客户端也为我解决了这个问题。谢谢。有人能告诉我投票反对的理由吗