我使用python3構造qbXML查詢,並使用Elementree來解析響應。 我也使用非Windows機器進行開發。我發現我真的需要在Windows VM中共同使用QB和Python來取得進展。 QB和COM都需要它。
這裏是在Python 3.1幾個片段,顯示我如何做到這一點:
首先,使用COM來從QuickBooks連接到的QuickBooks和斷開。
import win32com.client
def start(external_application_name):
"""Connect a QuickBooks instance using COM. Start QB if needed"""
SessionManager = win32com.client.Dispatch("QBXMLRP2.RequestProcessor")
# Example only - insecure!
SessionManager.OpenConnection('', external_application_name)
return SessionManager
def stop(SessionManager):
"""Disconnect from the existing Quickbooks instance."""
SessionManager.CloseConnection()
return
接下來,我使用python來執行邏輯,構造qbXML查詢,並將響應解析到ElementTree中。
import xml.etree.ElementTree as etree
def xml_query(QB_SessionManager, company_file_path, qbXML_query_string):
"""
Do a QuickBooks QBXML query.
The query must be valid - this function doesn't do error checking.
Return an ElementTree of the XML response.
"""
ticket = QB_SessionManager.BeginSession(company_file_path, 0)
response_string = QB_SessionManager.ProcessRequest(ticket, qbXML_query_string)
#print(response_string) # Debug tool
SessionManager.EndSession(ticket)
QBXML = etree.fromstring(response_string)
response_tree = QBXML.find('QBXMLMsgsRs')
#etree.dump(QBXML) # Debug tool
return response_tree
實際qbXML查詢字符串和響應字符串進行了檢查查詢現於https://member.developer.intuit.com/qbSDK-current/Common/newOSR/index.html 那裏qbXML參考,你會看到,你可以下載由收款人,日期範圍過濾檢查數據,支票號碼範圍,等等。
您可以將多個XML查詢或事務鏈接到一個大的XML文件中。分配每個唯一的請求號碼(例如:<CustomerQueryRq requestID="1">
),以便您找到正確的響應。
使用<IncludeRetElement>
標記來限制回覆大小,並加快搜索速度。
更新:現在我們已經實現了一個解決方案,使用iif文件從我們的應用程序導出並導入事務數據(一個文件用於請求檢查,另一個用於創建發票),我們知道只有QB管理員可以導入iif文件。此外,財務部門問我們爲什麼不能只使用Transaction Pro。 – marlacparker