Zeep Dokumentation Beispiel:Wie behandelt man complexType Argumente in Python-Soap-Modul Zeep?
from zeep import Client
client = Client('http://my-enterprise-endpoint.com')
client.service.submit_order(user_id=1, order={
'number': '1234',
'price': 99,
})
Mein Anwendungsfall:
Ich möchte einen Webservice nennen, die einen Parameter
Beispiel 'Findcriteria' benötigt:
findcriteria = {
'Criteria' : [{
'ColumnName' : 'Closed',
'Value' : 0
},
{
'ColumnName' : 'AssignToQueueID',
'Value' : queueid
},
{
'ColumnName' : 'SupportCallType',
'Value' : 'I'
}
]
}
den Dienst aufrufen :
drucken clien t.service.GetCount (Findcriteria = Findcriteria)
Dies ist der XML, die erstellt wird:
<soap-env:Body>
<ns1:GetCount>
<ns1:findCriteria/>
</ns1:GetCount>
</soap-env:Body>
</soap-env:Envelope>
Problem:
Obwohl der Dienst die Anzahl zurückgibt, die Kriterien nicht angewandt.
Wenn ich den Dienst eine rohe XML-Payload füttere, sind die Ergebnisse in Ordnung.
Das Problem ist in der <ns1:findCriteria/>
Teil.
Für jede Spalte sollte ein Kriterium-Element erstellt werden.
Ergebnisse von grep GetCount auf WSDL:
<s:element name="GetCount">
<s:element name="GetCountResponse">
<s:element minOccurs="1" maxOccurs="1" name="GetCountResult" type="s:int" />
<wsdl:message name="GetCountSoapIn">
<wsdl:part name="parameters" element="tns:GetCount" />
<wsdl:message name="GetCountSoapOut">
<wsdl:part name="parameters" element="tns:GetCountResponse" />
<wsdl:operation name="GetCount">
<wsdl:input message="tns:GetCountSoapIn" />
<wsdl:output message="tns:GetCountSoapOut" />
<wsdl:operation name="GetCount">
<soap:operation soapAction="http://<server>/webservices/SupportCall/GetCount" style="document" />
<wsdl:operation name="GetCount">
<soap12:operation soapAction="http://<server>/webservices/SupportCall/GetCount" style="document" />
Ihre Vorschläge Gefolgt aber noch kein Ergebnis. Problem ist in ('ns1: findCriteria.Dies ist kein gültiger Typ. Danke für Ihre Bemühungen. – Peter
kann die Ausgabe des Befehls 'python -mzeep | grep GetCount'? –
Dieser Befehl hilft mir nicht, weil meine WSDL hinter der Authentifizierung ist. Ich habe das wsdl lokal platziert, aber dann versucht es, andere Schemas einzuschließen, die hinter der Authentifizierung stehen. – Peter