使用Python zeep,我正在與Salesforce的SOAP(特別是元數據)API進行交互。SOAP - 必須指定元素的類型屬性值
試圖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
guy?)使用zeep
?
UPDATE:
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
。任何想法是什麼?
我不明白。你在暗示什麼? – tscizzle
啊,我明白了。你說的xsi:類型必須是CustomObject或CustomField,或者是來自可接受值的正確集合中的東西,其中元數據不是一個。 – tscizzle
我只是在發佈我的答案後才意識到你的意思,但我還包括瞭解釋(我最初沒有從你的簡短回答中收集)以及示例'zeep'代碼,以使它更加完整。 – tscizzle