Salesforce错误:元素{}项在此位置无效


Salesforce error: Element {}item invalid at this location

我使用以下代码使用php连接到salesforce

 require_once ('SforcePartnerClient.php');
require_once ('SforceHeaderOptions.php');  
require_once ('SforceMetadataClient.php'); 
$mySforceConnection = new SforcePartnerClient(); 
$mySforceConnection->createConnection("cniRegistration.wsdl");
$loginResult = $mySforceConnection->login("username", "password.token");
$queryOptions = new QueryOptions(200);
try {
  $sObject = new stdclass();
  $sObject->Name = 'Smith';
  $sObject->Phone = '510-555-5555';
  $sObject->fieldsToNull = NULL;

  echo "**** Creating the following:'r'n";
  $createResponse = $mySforceConnection->create($sObject, 'Account');
  $ids = array();
  foreach ($createResponse as $createResult) {
    print_r($createResult);
    array_push($ids, $createResult->id);
  }
} catch (Exception $e) {
  echo $e->faultstring;
}

但上面的代码是连接到salesforce数据库的。但没有执行create命令。它给了我下面的错误信息

正在创建以下内容:元素{}项在此位置无效

有人能建议我克服以上问题吗?

MAK,在您的示例代码SessionHeader和Endpoint设置调用中缺少

$mySforceConnection->setEndpoint($location);
$mySforceConnection->setSessionHeader($sessionId);

设置完这些之后,如果您仍然看到问题,请检查名称空间urn

$mySforceConnection->getNamespace

它应该与wsdl 中的targetNamespace值匹配

$mySforceConnection的值应该指向partner.wsdl.xml的xml文件。例如$SoapClient=$sfdc->createConnection("SoapClient/partner.wsdl.xml")

尝试添加下面的代码片段来引用WSDL。

$sfdc = new SforcePartnerClient();
                // create a connection using the partner wsdl
                $SoapClient = $sfdc->createConnection("soapclient/partner.wsdl.xml");
                $loginResult = false;
                try {
                    // log in with username, password and security token if required
                    $loginResult = $sfdc->login($sfdcUsername, $sfdcPassword.$sfdcToken);
                } 
                catch (Exception $e) {
                    global $errors;
                    $errors = $e->faultstring;
                    echo "Fatal Login Error <b>" . $errors . "</b>";
                    die;
                }           
                // setup the SOAP client modify the headers
                $parsedURL = parse_url($sfdc->getLocation());
                define ("_SFDC_SERVER_", substr($parsedURL['host'],0,strpos($parsedURL['host'], '.')));
                define ("_SALESFORCE_URL_", "https://test.salesforce.com");
                define ("_WS_NAME_", "WebService_WDSL_Name_Here");
                define ("_WS_WSDL_", "soapclient/" . _WS_NAME_ . ".wsdl");
                define ("_WS_ENDPOINT_", 'https://' . _SFDC_SERVER_ . '.salesforce.com/services/wsdl/class/' . _WS_NAME_);
                define ("_WS_NAMESPACE_", 'http://soap.sforce.com/schemas/class/' . _WS_NAME_);
                $urlLink = '';
                try {
                    $client = new SoapClient(_WS_WSDL_);
                    $sforce_header = new SoapHeader(_WS_NAMESPACE_, "SessionHeader", array("sessionId" => $sfdc->getSessionId()));
                    $client->__setSoapHeaders(array($sforce_header));
                } catch ( Exception $e ) {
                    die( 'Error<br/>' . $e->__toString() );
                }

请查看Tech Thought上的链接,了解有关该错误的更多详细信息。