3

私はこれを調査し、SObject のレコードを更新する方法の理解に基づいて多くのバリエーションを試してきましたが、次のエラーが発生し続けます。

SoapFault 例外: [sf:INVALID_TYPE] INVALID_TYPE: 具体的なエンティティ タイプを送信する必要があります。/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 が割り当てられています。

ありがとう。

4

3 に答える 3

1

sObject は、更新可能な他のすべての Salesforce オブジェクトの基本型です。エンタープライズ API (SOAP) を使用する場合、sObject から派生したインスタンスを渡す必要があります。(リード、連絡先、およびアカウントは例です)

update()メソッドのドキュメントもここにあります。

于 2012-04-26T15:25:02.227 に答える
1

2 番目の 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 ツールキットの間に抽象化レイヤーを使用してきました。

于 2014-01-11T21:26:23.657 に答える
0

Partner 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;
}
?>
于 2014-06-05T14:23:18.797 に答える