【发布时间】:2015-09-09 20:41:34
【问题描述】:
我的代码通过 SUDS 连接到 Autotask 服务。我得到一个方法列表,我必须调用其中一个。我是新手,所以我不确定如何正确执行此操作。这是我的代码,包括 Bodsda 的帮助:
import os, sys
import xml.etree.ElementTree as ET
from suds.client import Client
from suds.sax.element import Element
class Init():
def __init__(self):
#Search the app.config file for all data to be used
script_dir = os.path.dirname(__file__)
file_path = "app.config"
abs_file_path = os.path.join(script_dir, file_path)
tree = ET.parse(abs_file_path)
root = tree.getroot()
sites = root.iter('AutotaskUpdateTicketEstimatedHours.My.MySettings')
self.data = {}
for site in sites:
apps = site.findall('setting')
for app in apps:
self.data[app.get('name')] = app.find('value').text
class ConnectATWS():
def __init__(self):
#Connect to server with the credentials
app_config = Init()
self.username = app_config.data["Username"]
self.password = app_config.data["Password"]
self.login_id = app_config.data["LoginID"]
strQuery = """
<queryxml>
<entity>Ticket</entity>
<query>
<condition>
<field>Id
<expression op="GreaterThan">0</expression>
</field>
</condition>
<condition>
<field>Status
<expression op="NotEqual">5</expression>
</field>
</condition>
<condition>
<field>EstimatedHours
<expression op="IsNull"></expression>
</field>
</condition>
</query>
</queryxml>"""
new_url = 'https://webservices5.autotask.net/atservices/1.5/atws.wsdl'
client = Client(new_url, username=self.login_id, password=self.password)
response = client.service.query(strQuery)
if response.ReturnCode != 1:
print "Error code: %s" % response.ReturnCode
print "Error response: %s" % response.Errors
sys.exit(1)
else:
print "Query successful..."
print "============================="
print response.EntityResults
if __name__ == '__main__':
handler = ConnectATWS()
这是我的回应:
(ATWSResponse){
ReturnCode = 1
EntityResults = ""
EntityResultType = "ticket"
Errors = ""
EntityReturnInfoResults = ""
}
这是我通过客户端获得的方法和类型列表:
Suds ( https://fedorahosted.org/suds/ ) version: 0.4 GA build: R699-20100913
Service ( ATWS ) tns="http://autotask.net/ATWS/v1_5/"
Prefixes (1)
ns0 = "http://autotask.net/ATWS/v1_5/"
Ports (1):
(ATWSSoap)
Methods (14):
CreateAttachment(Attachment attachment, )
DeleteAttachment(xs:long attachmentId, )
GetAttachment(xs:long attachmentId, )
GetFieldInfo(xs:string psObjectType, )
GetInvoiceMarkup(xs:int InvoiceId, xs:string Format, )
GetWsdlVersion()
create(ArrayOfEntity Entities, )
delete(ArrayOfEntity Entities, )
getEntityInfo()
getThresholdAndUsageInfo()
getUDFInfo(xs:string psTable, )
getZoneInfo(xs:string UserName, )
query(xs:string sXML, )
update(ArrayOfEntity Entities, )
Types (108):
ATWSError
ATWSResponse
ATWSZoneInfo
Account
AccountLocation
AccountNote
AccountTeam
AccountToDo
ActionType
AdditionalInvoiceFieldValue
AllocationCode
Appointment
ArrayOfATWSError
ArrayOfEntity
ArrayOfEntityInfo
ArrayOfEntityReturnInfo
ArrayOfField
ArrayOfPickListValue
ArrayOfUserDefinedField
Attachment
AttachmentInfo
AutotaskIntegrations
BillingItem
BillingItemApprovalLevel
ChangeRequestLink
ClientPortalUser
Contact
Contract
ContractBlock
ContractCost
ContractFactor
ContractMilestone
ContractNote
ContractRate
ContractRetainer
ContractService
ContractServiceAdjustment
ContractServiceBundle
ContractServiceBundleAdjustment
ContractServiceBundleUnit
ContractServiceUnit
ContractTicketPurchase
Country
Department
Entity
EntityDuplicateStatus
EntityInfo
EntityReturnInfo
EntityReturnInfoDatabaseAction
ExpenseItem
ExpenseReport
Field
InstalledProduct
InstalledProductType
InstalledProductTypeUdfAssociation
InternalLocation
InventoryItem
InventoryItemSerialNumber
InventoryLocation
InventoryTransfer
Invoice
InvoiceTemplate
Opportunity
PaymentTerm
Phase
PickListValue
Product
ProductVendor
Project
ProjectCost
ProjectNote
PurchaseOrder
PurchaseOrderItem
PurchaseOrderReceive
Quote
QuoteItem
QuoteLocation
Resource
ResourceRole
ResourceSkill
Role
SalesOrder
Service
ServiceBundle
ServiceBundleService
ServiceCall
ServiceCallTask
ServiceCallTaskResource
ServiceCallTicket
ServiceCallTicketResource
ShippingType
Skill
Task
TaskNote
TaskPredecessor
TaskSecondaryResource
Tax
TaxCategory
TaxRegion
Ticket
TicketChangeRequestApproval
TicketCost
TicketNote
TicketSecondaryResource
TimeEntry
UserDefinedField
UserDefinedFieldDefinition
UserDefinedFieldListItem
我需要使用 ATWSResponse 类型,但我不太了解如何执行此操作。此外,我正在尝试模拟这个 vb.net 代码部分,它可以完成我在 Python 中尝试做的事情:
Sub ProcessTicket()
Dim boolQueryFinished = False
Dim strCurrentID As String = "0"
Dim strQuery As String
Dim strCriteria As String = ""
Dim TicketArray(0) As Ticket
While (Not (boolQueryFinished))
If LCase(Trim(varIgnoreTicketStatus)) = "true" Then
WriteToLog("Updating All Tickets Where EstimatedHours Is Null")
Else
WriteToLog("Updating Ticket Where Status <> Complete And EstimatedHours Is Null")
' 5 - Complete
strCriteria = "<condition><field>Status<expression op=""NotEqual"">5</expression></field></condition>"
End If
strQuery = "<queryxml><entity>Ticket</entity><query>" & _
"<condition><field>id<expression op=""greaterthan"">" & strCurrentID & "</expression></field></condition>" & strCriteria & _
"<condition><field>EstimatedHours<expression op=""isnull""></expression></field></condition>" & _
"</query></queryxml>"
Dim r As ATWSResponse
Dim strLog As String
r = ATWSService.query(strQuery)
WriteToLog("Found " & r.EntityResults.Length & " Tickets begining at " & strCurrentID)
If r.EntityResults.Length > 0 Then
For Each ent As Entity In r.EntityResults
CType(ent, Ticket).EstimatedHours = EstHoursDefault
TicketArray(0) = CType(ent, Ticket)
Dim sResponse As ATWSResponse
Dim entityArray() As Entity = CType(TicketArray, Entity())
sResponse = ATWSService.update(entityArray)
我的问题是如何使用我的 Python 代码成功查询 QueryXML 并返回像 vb.net 代码中的实体?
【问题讨论】:
-
尝试后:
response = client.service.query(strQuery)我得到了这个:Exception: (307, u'Temporary Redirect') -
如何将 ATWSResponse 类型与此方法“查询”一起使用?
-
查询失败后,能否打印出如下信息:stackoverflow.com/a/6069053/369450
标签: python vb.net python-2.7 wsdl suds