2012-11-06 46 views
0

這是我第一次使用肥皂。SOAP和陣列+ SUDS

我設法按照教程的第一步,但現在我卡住了。我試圖與螳螂(mantisbt.org)合作。我試圖發佈這樣的數據到服務器:

<xsd:complexType name="IssueData"> 
<xsd:all> 
<xsd:element name="id" type="xsd:integer" minOccurs="0"/> 
<xsd:element name="view_state" type="tns:ObjectRef" minOccurs="0"/> 
<xsd:element name="last_updated" type="xsd:dateTime" minOccurs="0"/> 
<xsd:element name="project" type="tns:ObjectRef" minOccurs="0"/> 
<xsd:element name="category" type="xsd:string" minOccurs="0"/> 
<xsd:element name="priority" type="tns:ObjectRef" minOccurs="0"/> 
<xsd:element name="severity" type="tns:ObjectRef" minOccurs="0"/> 
<xsd:element name="status" type="tns:ObjectRef" minOccurs="0"/> 
<xsd:element name="reporter" type="tns:AccountData" minOccurs="0"/> 
<xsd:element name="summary" type="xsd:string" minOccurs="0"/> 
<xsd:element name="version" type="xsd:string" minOccurs="0"/> 
<xsd:element name="build" type="xsd:string" minOccurs="0"/> 
<xsd:element name="platform" type="xsd:string" minOccurs="0"/> 
<xsd:element name="os" type="xsd:string" minOccurs="0"/> 
<xsd:element name="os_build" type="xsd:string" minOccurs="0"/> 
<xsd:element name="reproducibility" type="tns:ObjectRef" minOccurs="0"/> 
<xsd:element name="date_submitted" type="xsd:dateTime" minOccurs="0"/> 
<xsd:element name="sponsorship_total" type="xsd:integer" minOccurs="0"/> 
<xsd:element name="handler" type="tns:AccountData" minOccurs="0"/> 
<xsd:element name="projection" type="tns:ObjectRef" minOccurs="0"/> 
<xsd:element name="eta" type="tns:ObjectRef" minOccurs="0"/> 
<xsd:element name="resolution" type="tns:ObjectRef" minOccurs="0"/> 
<xsd:element name="fixed_in_version" type="xsd:string" minOccurs="0"/> 
<xsd:element name="target_version" type="xsd:string" minOccurs="0"/> 
<xsd:element name="description" type="xsd:string" minOccurs="0"/> 
<xsd:element name="steps_to_reproduce" type="xsd:string" minOccurs="0"/> 
<xsd:element name="additional_information" type="xsd:string" minOccurs="0"/> 
<xsd:element name="attachments" type="tns:AttachmentDataArray" minOccurs="0"/> 
<xsd:element name="relationships" type="tns:RelationshipDataArray" minOccurs="0"/> 
<xsd:element name="notes" type="tns:IssueNoteDataArray" minOccurs="0"/> 
<xsd:element name="custom_fields" type="tns:CustomFieldValueForIssueDataArray" minOccurs="0"/> 
<xsd:element name="due_date" type="xsd:dateTime" minOccurs="0"/> 
<xsd:element name="monitors" type="tns:AccountDataArray" minOccurs="0"/> 
<xsd:element name="sticky" type="xsd:boolean" minOccurs="0"/> 
<xsd:element name="tags" type="tns:ObjectRefArray" minOccurs="0"/> 
</xsd:all> 
</xsd:complexType> 

它工作得很好。但後來我發現我還需要填寫一些custom_fields。它們被描述爲tns:CustomFieldValueForIssueDataArray。

<xsd:complexType name="CustomFieldValueForIssueDataArray"> 
<xsd:complexContent> 
<xsd:restriction base="SOAP-ENC:Array"> 
<xsd:attribute ref="SOAP-ENC:arrayType" wsdl:arrayType="tns:CustomFieldValueForIssueData[]"/> 
</xsd:restriction> 
</xsd:complexContent> 
</xsd:complexType> 

我讀到,它應該由CustomFieldValueForIssueData對象組成。

所以我創建具有相關的兩個數據:

contact_data = client.factory.create('CustomFieldValueForIssueData') 
contact_data.field = contact_field 
contact_data.value = '[email protected]' 
client_data = client.factory.create('CustomFieldValueForIssueData') 
client_data.field = client_field 
client_data.value = u'alan, alan kesselmann' 

但如何添加/添加/推/不管這些值現在陣列?如果我嘗試做這樣的事情:

issue.custom_fields = [client_field, contact_field] 

,然後用它張貼:

client.service.mc_issue_add(user, pwd, issue) 

然後我得到的是一個錯誤。沒有custom_fields這個ms_issue_add的作品。

艾倫

回答

1

想通了自己...

什麼,我要做的就是:

customfields = client.factory.create('CustomFieldValueForIssueDataArray') #had done it before too 
customfields.items = [client_data, contact_data] # the new stuff that i didnt know 
issue.custom_fields = customfields 
client.service.mc_issue_add(user, pwd, issue) 

艾倫