Unter Verwendung von Python zeep interagiere ich mit der SOAP-API (speziell Metadaten) von Salesforce.SOAP - Geben Sie einen Typ-Attributwert für das Element
zu createMetadata
Versuch bekomme ich diesen Fehler:
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
Ich habe gesammelt, dass dies auf die Methode übergeben nicht über Parameter ist (die Art und Weise createMetadata
erfordert ein metadata
Argument, das selbst ein Objekt ist mit ein fullName
Feld), sondern eher über eine fehlende xsi:type
Attribut irgendwo.
Das ist mein zeep
Aufruf:
resp = service['createMetadata'](_soapheaders=soap_headers,
metadata=[{'fullName': 'SomeCustomObject'}])
Dies ist die erzeugte 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>
Meine Frage ist: Wie kann ich einstellen, dass xsi:type
auf, was es braucht eingestellt werden (das ns0:metadata
guy?) Mit zeep
?
UPDATE:
Statt ein Wörterbuch mit dem Metadatenobjekt darzustellen, habe ich es mit dieser Fassung:
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])
Der neue generierte XML ist:
<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>
, die das xsi:type
Attribut auf dem ns0:metadata
Tag, aber ich bekomme den gleichen Fehler wie zuvor. Also ich denke es ging nicht um eine fehlende xsi:type
. Irgendwelche Ideen, was es ist?
Ich verstehe nicht. Was schlägst du vor? – tscizzle
Ah, ich verstehe. Sie sagen, dass der xsi: type CustomObject oder CustomField oder etwas aus der richtigen Menge von akzeptierten Werten sein muss, von denen Metadaten nicht eins sind. – tscizzle
Ich erkannte erst, was du gesagt hast, nachdem ich meine Antwort gepostet habe, aber ich habe auch die Erklärung (die ich nicht zuerst aus deiner kurzen Antwort gesammelt habe), sowie den Beispielcode "Zeep" hinzugefügt, um es noch vollständiger zu machen. – tscizzle