在QuickBooks QBXML上使用defMacro和useMacro

时间:2016-04-01 11:19:10

标签: quickbooks

我想知道如何在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"."

该网站指出&#34; defMacro是随SDK 2.0引入的,因此它仅适用于2.0及更高版本的请求。&#34;所以我怀疑我可能有版本问题,但是搜索哪些QuickbooksWebConnector版本支持,我什么都没有。

我不知道出了什么问题,我使用的是QuickbooksWebConnector 2.1.0.30和QuickBooks Premier - 会计版2014.

非常感谢任何信息。

1 个答案:

答案 0 :(得分:1)

宏只能在给定的qbXML请求中使用 。他们跨请求工作。

e.g。这样的事情会起作用:

<?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>

另外,对此:

  

该网站指出&#34; defMacro是随SDK 2.0引入的,因此它仅适用于2.0及更高版本的请求。&#34;

您使用的是SDK版本:

<?qbxml version="7.0"?>