【发布时间】:2016-04-20 04:06:06
【问题描述】:
编辑,看我最后的评论。我注释了将 fullName 添加到元数据数组的代码。
我在使用 PHP Soap 客户端创建以下 XML Soap 请求时遇到问题。我遇到的问题是将 fullName 元素作为子节点添加到 sObjects。
<?xml version="1.0" encoding="UTF-8"?>
<x:Envelope xmlns:x="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn1="urn:tooling.soap.sforce.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<x:Header>
<urn1:SessionHeader>
<urn1:sessionId>a sessionid</urn1:sessionId>
</urn1:SessionHeader>
<urn1:MetadataWarningsHeader>
<urn1:ignoreSaveWarnings>false</urn1:ignoreSaveWarnings>
</urn1:MetadataWarningsHeader>
<urn1:AllOrNoneHeader>
<urn1:allOrNone>false</urn1:allOrNone>
</urn1:AllOrNoneHeader>
<urn1:CallOptions>
<urn1:client/>
</urn1:CallOptions>
</x:Header>
<x:Body>
<urn1:create>
<urn1:sObjects xsi:type="WorkflowFieldUpdate">
<fullName>Lead.Tooling</fullName>
<metadata>
<field>Test_Field_Update__c</field>
<name>Tooling</name>
<notifyAssignee>false</notifyAssignee>
<operation>Null</operation>
<protected>false</protected>
</metadata>
</urn1:sObjects>
</urn1:create>
</x:Body>
这是我在创建函数中使用的代码。我得到了一切,但全名。我尝试将其添加为具有元数据节点的数组的一部分,但它被插入为伪造的。
$field = new SoapVar('Test_Field_Update__c', XSD_STRING, null, null, 'field', null);
$name = new SoapVar('ToolingSample', XSD_STRING, null, null, 'name', null);
$notifyAssignee = new SoapVar(false, XSD_BOOLEAN, null, null, 'notifyAssignee');
$protected = new SoapVar(false, XSD_BOOLEAN, null, null, 'protected');
$operation = new SoapVar('Null', XSD_STRING, null, null, 'operation');
$fullname = new SoapVar('Lead.ToolingSample', XSD_STRING, null, null, 'fullName', null);
$metadata = new SoapVar(
array($field, $name, $notifyAssignee, $protected, $operation),
SOAP_ENC_OBJECT,
null,
null,
'Metadata'
);
// I needed change this line SoapVar
$metadataList = new SoapVar(array($metadata), SOAP_ENC_OBJECT);
// Fix: Is adding the fullName var to the $metadata array
$metadataList = SoapVar(array($metadata, $fullname), SOAP_ENC_OBJECT);
$sObject = new SoapVar($metadataList, SOAP_ENC_OBJECT, 'WorkflowFieldUpdate', null, 'sObjects');
$sObjects = new SoapVar(array($sObject), SOAP_ENC_OBJECT, null, null, null);
$response = $soapClient->create(new SoapVar($sObjects, SOAP_ENC_OBJECT));
$ReturnArray = array('success' => true, 'data' => $response, 'types' => $metadataList, 'request' => $soapClient->__getLastRequest());
echo $_REQUEST['callback'] . '(' . json_encode($ReturnArray) . ')';
我尝试将 sObject Soapvar 更改为此,但不行。我不太相信它会起作用。
$sObject = new SoapVar(array($fullName, $metadataList), SOAP_ENC_OBJECT, 'WorkflowFieldUpdate', null, 'sObjects')
【问题讨论】:
-
我明白了。我把 $full name 放在了错误的地方。我在这个 SoapVar 下添加了它。 $metadataList = new SoapVar(array($metadata, $fullname), SOAP_ENC_OBJECT);
标签: php xml soap xml-parsing salesforce