我使用 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>
标签限制回复大小,并极大地加快搜索速度。