我是python开发人员,而不是QB用户,所以请原谅我使用不好的术语。
我们有一个内部网络应用程序,财务人员使用它来识别特定收款人的小型支付请求。然后,他们使用QB生成支票以支付该收款人。然后他们手动输入支票号码和日期回到网络应用程序。我正在修改Web应用程序,以便财务人员可以使用该应用程序将付款请求捆绑在一起 - 我希望 - 向QB发送请求,每个收款人一个。要发送的数据将是收款人信息,支票金额以及其他所需的数据。从QB(稍后)返回的数据将是支票号和支票日期以及我可用于将其与之前发送的请求进行匹配的一些标识符。
与QB实现此通信的最佳方式是什么?
答案 0 :(得分:2)
我使用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>
标记来限制回复大小,并极大地加快搜索速度。
答案 1 :(得分:1)
由于您的应用不是SaaS应用,因此您可以将qbsdk用于此用例。 sdk下载链接 - https://developer.intuit.com/docs/0025_quickbooksapi/0055_devkits
不再支持IIF文件。 IIF文件可以直接导入QB,但它会绕过所有业务逻辑。