簡體   English   中英

如何將QueryXML與SUDS和AutotaskAPI一起使用

[英]How to use QueryXML with SUDS and AutotaskAPI

我一直在嘗試使用使用QueryXML的AutotaskAPI的query()方法。 為此,我知道我必須使用ATWSResponse類型才能接收結果。 這是我的代碼:

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"]
        self.url = app_config.data["AutotaskUpdateTicketEstimatedHours_net_autotask_webservices5_ATWS"]
        strCurrentID = "0"
        strCriteria = "<condition><field>Status<expression op=""NotEqual"">5</expression></field></condition>"
        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>"

        client = Client(self.url + "?WSDL", username=self.login_id, password=self.password)
        response = client.service.query(strQuery)

嘗試此操作將返回以下錯誤:

No handlers could be found for logger "suds.client"
Traceback (most recent call last):
  File "/Users/AAAA/Documents/Aptana/AutotaskUpdateTicketEstimatedHours/Main.py", line 46, in <module>
    handler = ConnectATWS()
  File "/Users/AAAA/Documents/Aptana/AutotaskUpdateTicketEstimatedHours/Main.py", line 40, in __init__
    response = client.service.query(strQuery)
  File "/Library/Python/2.7/site-packages/suds/client.py", line 542, in __call__
    return client.invoke(args, kwargs)
  File "/Library/Python/2.7/site-packages/suds/client.py", line 602, in invoke
    result = self.send(soapenv)
  File "/Library/Python/2.7/site-packages/suds/client.py", line 649, in send
    result = self.failed(binding, e)
  File "/Library/Python/2.7/site-packages/suds/client.py", line 708, in failed
    raise Exception((status, reason))
Exception: (307, u'Temporary Redirect')

我知道我沒有正確調用該方法。 如何使用QueryXML和ATWSResponse類型調用AutotaskAPI?

作為參考,這是AutotaskAPI文檔: https : //support.netserve365.com/help/Content/Userguides/T_WebServicesAPIv1_5.pdf

更新:

使用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"]
        self.url = app_config.data["AutotaskUpdateTicketEstimatedHours_net_autotask_webservices5_ATWS"]
        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>"""

        client = Client(self.url + "?WSDL", username=self.login_id, password=self.password)
        #obj = client.factory.create('ATWSResponse')
        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:
            os.system("clear")
            print "Query successful..."
            print "============================="
            print response.EntityResults



if __name__ == '__main__':
    handler = ConnectATWS() 

您是否粘貼了所有代碼? 我不知道它是如何工作的,因為一開始您就沒有定義Init(),因此當您嘗試實例化類時它應該會出錯。 我也看不到將信息添加到appconfig.data詞典的位置。

無論如何,這是我今天一直在使用的一些示例代碼

#! /usr/bin/env python

import sys
import os
from suds.client import Client

at_username = "foo@bar.com"
at_password = "foobar"

at_url = "https://webservices4.autotask.net/atservices/1.5/atws.wsdl"

def main():
    client = Client(at_url, username=at_username, password=at_password)           # Instatiate a suds.client.Client instance and connect to webservices URL

    q = """
    <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>"""

    # Status value '5' == Complete

    response = client.service.query(q)

    if response.ReturnCode != 1:
        print "Error code: %s" % response.ReturnCode
        print "Error response: %s" % response.Errors
        sys.exit(1)
    else:
        os.system("clear")
        print "Query successful..."
        print "============================="
        print response.EntityResults


main()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM