У меня были проблемы с выяснением, как добавлять типы элементов с помощью фабрики Suds.Мой код ниже:
from xml.etree import cElementTree as ElementTree
from suds.client import Client
from suds.wsse import *
from suds.sax.text import Raw
import logging
logging.basicConfig(level=logging.INFO)
logging.getLogger('suds.client').setLevel(logging.DEBUG)
username = 'username@tenant'
password = 'password'
url = 'https://wd2-impl-
services1.workday.com/ccx/service/[tenant]/Revenue_Management/v31.1?wsdl'
client = Client(url, username = username, password = password, faults = False)
CustomerObjectType = client.factory.create('ns0:CustomerObjectType')
CustomerObjectType.ID = 'CUS3466'
FinancialsBusinessProcess = client.factory.create('ns0:Financials_Business_Process_ParametersType')
FinancialsBusinessProcess.Auto_Complete = 'true'
CustomerData = client.factory.create('ns0:Customer_WWS_DataType')
CustomerData.Customer_Name = 'Test'
CustomerData.Worktag_Only = 'false'
CustomerData.Submit = 'true'
CustomerData.Payment_Terms_Reference.ID = ['NET30', 'Customer_ID']
CustomerData.Default_Payment_Type_Reference.ID = ['PTY_CHECK', 'Payment_Terms_ID']
CustomerData.Included_Children_Reference = ['CUS3029', 'Customer_ID']
CustomerData.Business_Entity_Data.Business_Entity_Name = 'Test'
security = Security()
token = UsernameToken(username, password)
security.tokens.append(token)
client.set_options(wsse=security)
client.service.Submit_Customer('true', CustomerObjectType, FinancialsBusinessProcess, CustomerData)
Я получаю ошибку:
ERROR:suds.client:<suds.sax.document.Document instance at 0x10eb0e488>
С выводом:
DEBUG:suds.client:headers = {'SOAPAction': '""', 'Content-Type': 'text/xml; charset=utf-8'}
DEBUG:suds.client:HTTP failed - 500 - Internal Server Error:
<?xml version="1.0" encoding="utf-8"?>
<SOAP-ENV:Envelope xmlns:SOAP ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Body>
<SOAP-ENV:Fault xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:wd="urn:com.workday/bsvc">
<faultcode>SOAP-ENV:Client.validationError</faultcode>
<faultstring>Validation error occurred. Element 'ID' is missing attribute 'type'</faultstring>
<detail>
<wd:Validation_Fault>
<wd:Validation_Error>
<wd:Message>Element 'ID' is missing attribute 'type'</wd:Message>
<wd:Detail_Message>Element 'ID' is missing attribute 'type'</wd:Detail_Message>
<wd:Xpath>/ns0:Submit_Customer_Request[1]/ns0:Customer_Data[1]/ns0:Payment_Terms_Reference[1]/ns0:ID[2]</wd:Xpath>
</wd:Validation_Error>
</wd:Validation_Fault>
</detail>
</SOAP-ENV:Fault>
форматирование, возвращаемое фабрикой suds для элемента "Payment_Terms_Reference", выглядит следующим образом:
Payment_Terms_Reference =
(Payment_TermsObjectType){
ID[] =
"NET30",
"Customer_ID",
_Descriptor = ""
}
Меня смущает то, что похоже, что он использует индекс
Payment_Terms_Reference[1]/ns0:ID[2]
длянайти тип элемента, но когда я добавляю больше данных в список в виде сложного объекта, это не решает проблему.
Текущий XML-код, который выпадает для Payment_Terms_Reference при запуске этого кода, выглядит как:
<ns0:Payment_Terms_Reference>
<ns0:ID>PTY_CHECK</ns0:ID>
<ns0:ID>Payment_Terms_ID</ns0:ID>
</ns0:Payment_Terms_Reference>
Но я думаю, мне нужно отформатировать его следующим образом:
<ns0:Payment_Terms_Reference>
<ns0:ID ns0:type="Payment_Terms_ID">ID</ns0:ID>
</ns0:Payment_Terms_Reference>
Если кто-нибудь знает, что может помочь мне решить эту проблему, это было бы очень полезно.
Спасибо!