defMacro 和 useMacro 在 QuickBooks QBXML 上的用法
defMacro and useMacro usage on QuickBooks QBXML
我正在研究如何在 qbxml 上使用 defMacro 和 useMacro。正如我在 https://developer-static.intuit.com/qbSDK-current/Common/newOSR/index.html 上读到的那样;我可以使用 defMacro 属性为 TxnID 分配一个名称,然后通过在另一个事务中使用 useMacro 使用分配的名称来引用该事务。
我尝试在 BillAdd 和 BillPaymentCheckAdd 请求上执行此操作
BillAdd 请求:
<?xml version="1.0" encoding="UTF-8"?>
<?qbxml version="7.0"?>
<QBXML>
<QBXMLMsgsRq onError="continueOnError">
<BillAddRq requestID="0">
<BillAdd defMacro="TxnID:1258">
<VendorRef>
<FullName>Sample</FullName>
</VendorRef>
<TxnDate>2012-12-22</TxnDate>
<DueDate>2013-01-21</DueDate>
<RefNumber>1258</RefNumber>
<TermsRef>
<FullName>Net 30</FullName>
</TermsRef>
<ExpenseLineAdd>
<AccountRef>
<FullName>Crop Sales</FullName>
</AccountRef>
<Amount>400.00</Amount>
</ExpenseLineAdd>
<ExpenseLineAdd>
<AccountRef>
<FullName>Utilities</FullName>
</AccountRef>
<Amount>1000.00</Amount>
</ExpenseLineAdd>
</BillAdd>
</BillAddRq>
</QBXMLMsgsRq>
</QBXML>
这个数据被 QuickBooks 接收得很好,
并将其作为响应发送:
<?xml version="1.0" encoding="UTF-8"?>
<QBXML>
<QBXMLMsgsRs>
<BillAddRs requestID="0" statusCode="0" statusSeverity="Info" statusMessage="Status OK">
<BillRet>
<TxnID>371-1459505632</TxnID>
<TimeCreated>2016-04-01T18:13:52+08:00</TimeCreated>
<TimeModified>2016-04-01T18:13:52+08:00</TimeModified>
<EditSequence>1459505632</EditSequence>
<TxnNumber>218</TxnNumber>
<VendorRef>
<ListID>80000001-1448596175</ListID>
<FullName>Sample</FullName>
</VendorRef>
<APAccountRef>
<ListID>80000031-1458630264</ListID>
<FullName>Accounts Payable</FullName>
</APAccountRef>
<TxnDate>2012-12-22</TxnDate>
<DueDate>2013-01-21</DueDate>
<AmountDue>1400.00</AmountDue>
<RefNumber>1258</RefNumber>
<TermsRef>
<ListID>80000006-1448593319</ListID>
<FullName>Net 30</FullName>
</TermsRef>
<IsPaid>false</IsPaid>
<ExpenseLineRet>
<TxnLineID>373-1459505632</TxnLineID>
<AccountRef>
<ListID>8000000A-1448593319</ListID>
<FullName>Crop Sales</FullName>
</AccountRef>
<Amount>400.00</Amount>
</ExpenseLineRet>
<ExpenseLineRet>
<TxnLineID>374-1459505632</TxnLineID>
<AccountRef>
<ListID>8000001E-1448593319</ListID>
<FullName>Utilities</FullName>
</AccountRef>
<Amount>1000.00</Amount>
</ExpenseLineRet>
</BillRet>
</BillAddRs>
</QBXMLMsgsRs>
</QBXML>
然后我发送账单支付请求:
<?xml version="1.0" encoding="UTF-8"?>
<?qbxml version="7.0"?>
<QBXML>
<QBXMLMsgsRq onError="continueOnError">
<BillPaymentCheckAddRq requestID="2">
<BillPaymentCheckAdd>
<PayeeEntityRef>
<FullName>Sample</FullName>
</PayeeEntityRef>
<APAccountRef>
<FullName>Accounts Payable</FullName>
</APAccountRef>
<TxnDate>2016-03-16</TxnDate>
<BankAccountRef>
<FullName>Sample Bank</FullName>
</BankAccountRef>
<RefNumber>3500</RefNumber>
<Memo>Sample Memo</Memo>
<AppliedToTxnAdd>
<TxnID useMacro="TxnID:1258">1258</TxnID>
<PaymentAmount>100.00</PaymentAmount>
</AppliedToTxnAdd>
</BillPaymentCheckAdd>
</BillPaymentCheckAddRq>
</QBXMLMsgsRq>
</QBXML>
QuickBooks 回复错误 The given object ID "1258" in the field "transaction id" is invalid.
我尝试删除 useMacro 属性上的 TxnID,所以我得到了 <TxnID useMacro="1258">1258</TxnID>
但我仍然遇到相同的错误
我也尝试删除 TxnID 节点内的文本,它变成了 <TxnID useMacro="1258"></TxnID>
但后来我得到 "There is a missing element: "TxnID"."
该网站指出 "defMacro was introduced with SDK 2.0, so it only works with 2.0 and higher requests." 所以我怀疑我可能有版本问题,但搜索哪个 QuickbooksWebConnector 版本支持那个,我一无所获。
我不知道出了什么问题,我使用的是 QuickbooksWebConnector 2.1.0.30 和 QuickBooks Premier - Accountant Edition 2014。
如有任何信息,我们将不胜感激。
宏仅在给定的 qbXML 请求内有效。他们不跨请求工作。
例如这样的事情会起作用:
<?xml version="1.0" encoding="UTF-8"?>
<?qbxml version="7.0"?>
<QBXML>
<QBXMLMsgsRq>
<CustomerAddRq>
... define your macro in here ...
</CustomerAddRq>
<InvoiceAddRq>
... use your macro in here ...
</InvoiceAddRq>
</QBXMLMsgsRq>
</QBXML>
但是如果你把它分成两个请求,它 将不起作用:
<?xml version="1.0" encoding="UTF-8"?>
<?qbxml version="7.0"?>
<QBXML>
<QBXMLMsgsRq>
<CustomerAddRq>
... define your macro in here ...
</CustomerAddRq>
</QBXMLMsgsRq>
</QBXML>
和:
<?xml version="1.0" encoding="UTF-8"?>
<?qbxml version="7.0"?>
<QBXML>
<QBXMLMsgsRq>
<InvoiceAddRq>
... use your macro in here ...
</InvoiceAddRq>
</QBXMLMsgsRq>
</QBXML>
另外,关于这个:
the site notes that "defMacro was introduced with SDK 2.0, so it only works with 2.0 and higher requests."
您使用的SDK版本:
<?qbxml version="7.0"?>
我正在研究如何在 qbxml 上使用 defMacro 和 useMacro。正如我在 https://developer-static.intuit.com/qbSDK-current/Common/newOSR/index.html 上读到的那样;我可以使用 defMacro 属性为 TxnID 分配一个名称,然后通过在另一个事务中使用 useMacro 使用分配的名称来引用该事务。
我尝试在 BillAdd 和 BillPaymentCheckAdd 请求上执行此操作
BillAdd 请求:
<?xml version="1.0" encoding="UTF-8"?>
<?qbxml version="7.0"?>
<QBXML>
<QBXMLMsgsRq onError="continueOnError">
<BillAddRq requestID="0">
<BillAdd defMacro="TxnID:1258">
<VendorRef>
<FullName>Sample</FullName>
</VendorRef>
<TxnDate>2012-12-22</TxnDate>
<DueDate>2013-01-21</DueDate>
<RefNumber>1258</RefNumber>
<TermsRef>
<FullName>Net 30</FullName>
</TermsRef>
<ExpenseLineAdd>
<AccountRef>
<FullName>Crop Sales</FullName>
</AccountRef>
<Amount>400.00</Amount>
</ExpenseLineAdd>
<ExpenseLineAdd>
<AccountRef>
<FullName>Utilities</FullName>
</AccountRef>
<Amount>1000.00</Amount>
</ExpenseLineAdd>
</BillAdd>
</BillAddRq>
</QBXMLMsgsRq>
</QBXML>
这个数据被 QuickBooks 接收得很好, 并将其作为响应发送:
<?xml version="1.0" encoding="UTF-8"?>
<QBXML>
<QBXMLMsgsRs>
<BillAddRs requestID="0" statusCode="0" statusSeverity="Info" statusMessage="Status OK">
<BillRet>
<TxnID>371-1459505632</TxnID>
<TimeCreated>2016-04-01T18:13:52+08:00</TimeCreated>
<TimeModified>2016-04-01T18:13:52+08:00</TimeModified>
<EditSequence>1459505632</EditSequence>
<TxnNumber>218</TxnNumber>
<VendorRef>
<ListID>80000001-1448596175</ListID>
<FullName>Sample</FullName>
</VendorRef>
<APAccountRef>
<ListID>80000031-1458630264</ListID>
<FullName>Accounts Payable</FullName>
</APAccountRef>
<TxnDate>2012-12-22</TxnDate>
<DueDate>2013-01-21</DueDate>
<AmountDue>1400.00</AmountDue>
<RefNumber>1258</RefNumber>
<TermsRef>
<ListID>80000006-1448593319</ListID>
<FullName>Net 30</FullName>
</TermsRef>
<IsPaid>false</IsPaid>
<ExpenseLineRet>
<TxnLineID>373-1459505632</TxnLineID>
<AccountRef>
<ListID>8000000A-1448593319</ListID>
<FullName>Crop Sales</FullName>
</AccountRef>
<Amount>400.00</Amount>
</ExpenseLineRet>
<ExpenseLineRet>
<TxnLineID>374-1459505632</TxnLineID>
<AccountRef>
<ListID>8000001E-1448593319</ListID>
<FullName>Utilities</FullName>
</AccountRef>
<Amount>1000.00</Amount>
</ExpenseLineRet>
</BillRet>
</BillAddRs>
</QBXMLMsgsRs>
</QBXML>
然后我发送账单支付请求:
<?xml version="1.0" encoding="UTF-8"?>
<?qbxml version="7.0"?>
<QBXML>
<QBXMLMsgsRq onError="continueOnError">
<BillPaymentCheckAddRq requestID="2">
<BillPaymentCheckAdd>
<PayeeEntityRef>
<FullName>Sample</FullName>
</PayeeEntityRef>
<APAccountRef>
<FullName>Accounts Payable</FullName>
</APAccountRef>
<TxnDate>2016-03-16</TxnDate>
<BankAccountRef>
<FullName>Sample Bank</FullName>
</BankAccountRef>
<RefNumber>3500</RefNumber>
<Memo>Sample Memo</Memo>
<AppliedToTxnAdd>
<TxnID useMacro="TxnID:1258">1258</TxnID>
<PaymentAmount>100.00</PaymentAmount>
</AppliedToTxnAdd>
</BillPaymentCheckAdd>
</BillPaymentCheckAddRq>
</QBXMLMsgsRq>
</QBXML>
QuickBooks 回复错误 The given object ID "1258" in the field "transaction id" is invalid.
我尝试删除 useMacro 属性上的 TxnID,所以我得到了 <TxnID useMacro="1258">1258</TxnID>
但我仍然遇到相同的错误
我也尝试删除 TxnID 节点内的文本,它变成了 <TxnID useMacro="1258"></TxnID>
但后来我得到 "There is a missing element: "TxnID"."
该网站指出 "defMacro was introduced with SDK 2.0, so it only works with 2.0 and higher requests." 所以我怀疑我可能有版本问题,但搜索哪个 QuickbooksWebConnector 版本支持那个,我一无所获。
我不知道出了什么问题,我使用的是 QuickbooksWebConnector 2.1.0.30 和 QuickBooks Premier - Accountant Edition 2014。
如有任何信息,我们将不胜感激。
宏仅在给定的 qbXML 请求内有效。他们不跨请求工作。
例如这样的事情会起作用:
<?xml version="1.0" encoding="UTF-8"?>
<?qbxml version="7.0"?>
<QBXML>
<QBXMLMsgsRq>
<CustomerAddRq>
... define your macro in here ...
</CustomerAddRq>
<InvoiceAddRq>
... use your macro in here ...
</InvoiceAddRq>
</QBXMLMsgsRq>
</QBXML>
但是如果你把它分成两个请求,它 将不起作用:
<?xml version="1.0" encoding="UTF-8"?>
<?qbxml version="7.0"?>
<QBXML>
<QBXMLMsgsRq>
<CustomerAddRq>
... define your macro in here ...
</CustomerAddRq>
</QBXMLMsgsRq>
</QBXML>
和:
<?xml version="1.0" encoding="UTF-8"?>
<?qbxml version="7.0"?>
<QBXML>
<QBXMLMsgsRq>
<InvoiceAddRq>
... use your macro in here ...
</InvoiceAddRq>
</QBXMLMsgsRq>
</QBXML>
另外,关于这个:
the site notes that "defMacro was introduced with SDK 2.0, so it only works with 2.0 and higher requests."
您使用的SDK版本:
<?qbxml version="7.0"?>