使用Python zeep,我正在与 Salesforce 的 SOAP(特别是元数据)API 进行交互。
试图createMetadata
我得到这个错误:
Fault: Must specify a {http://www.w3.org/2001/XMLSchema-instance}type attribute value for the {http://soap.sforce.com/2006/04/metadata}metadata element
我已经收集到这与传递给方法的参数无关(这种方式createMetadata
需要一个metadata
参数,它本身是一个带有fullName
字段的对象),而是关于xsi:type
某处缺少的属性。
这是我的zeep
电话:
resp = service['createMetadata'](_soapheaders=soap_headers,
metadata=[{'fullName': 'SomeCustomObject'}])
这是生成的 XML:
<soap-env:Envelope xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/">
<soap-env:Body>
<ns0:createMetadata xmlns:ns0="http://soap.sforce.com/2006/04/metadata">
<ns0:metadata>
<ns0:fullName>SomeCustomObject</ns0:fullName>
</ns0:metadata>
</ns0:createMetadata>
</soap-env:Body>
</soap-env:Envelope>
我的问题是:我怎样才能将xsi:type
它设置在需要设置的任何东西上(那ns0:metadata
个人?)使用zeep
?
更新:
我没有使用字典来表示元数据对象,而是将其替换为:
metadata_type = client.get_type('{http://soap.sforce.com/2006/04/metadata}Metadata')
metadata = metadata_type(fullName='SomeCustomObject')
resp = service['createMetadata'](_soapheaders=soap_headers, metadata=[metadata])
新生成的 XML 是:
<soap-env:Envelope xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/">
<soap-env:Body>
<ns0:createMetadata xmlns:ns0="http://soap.sforce.com/2006/04/metadata">
<ns0:metadata xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="ns0:Metadata">
<ns0:fullName>SomeCustomObject</ns0:fullName>
</ns0:metadata>
</ns0:createMetadata>
</soap-env:Body>
</soap-env:Envelope>
它具有标签xsi:type
上的属性ns0:metadata
,但我得到与以前相同的错误。所以我想这不是关于失踪的xsi:type
。关于它是什么的任何想法?