Ruby on rails 3.2 选中自动运行的WebConnector,使用Rails 3.2.9将重复发票插入QuickBooks

Ruby on rails 3.2 选中自动运行的WebConnector,使用Rails 3.2.9将重复发票插入QuickBooks,ruby-on-rails-3.2,quickbooks,autorun,duplicates,Ruby On Rails 3.2,Quickbooks,Autorun,Duplicates,我正在使用web连接器将发票添加到QuickBooks v13。如果发票尚未添加到QuickBooks中,我还添加了您提供的添加发票的逻辑 当我设置了web连接器的自动运行选项,以便它将自动调用API时。如果我只需要添加一张发票,那么第一次运行就可以了。但是对于webconnector的第二次调用,QuickBooks中发票的搜索结果会发送statusCode=“0”的记录,这意味着该记录已经存在,但仍然会再次将相同的发票添加到QuickBooks中。我无法限制多次添加同一发票 以下是将发票插入

我正在使用web连接器将发票添加到QuickBooks v13。如果发票尚未添加到QuickBooks中,我还添加了您提供的添加发票的逻辑

当我设置了web连接器的自动运行选项,以便它将自动调用API时。如果我只需要添加一张发票,那么第一次运行就可以了。但是对于webconnector的第二次调用,QuickBooks中发票的搜索结果会发送statusCode=“0”的记录,这意味着该记录已经存在,但仍然会再次将相同的发票添加到QuickBooks中。我无法限制多次添加同一发票

以下是将发票插入QuickBooks的Rails代码。我在Rails应用程序中使用qbwc gem发送QBXML请求并解析响应

def api

  if request.get?

    render :nothing => true

    return

  end

  if params["Envelope"]["Body"].keys.first =="authenticate"

    add_invoice #add invoice method will be called to search/add invoice

  end

  req = request

  Rails.logger.info "=== #{ params["Envelope"]["Body"].keys.first}  ==="

  res = QBWC::SoapWrapper.route_request(req)

  Rails.logger.info render :xml => res, :content_type => 'text/xml'

end
#搜索/添加发票的操作

def add_invoice

  #searching the invoice from QuickBooks

  QBWC.add_job('search_invoice') do

   '<QBXML>

      <QBXMLMsgsRq onError="continueOnError">

        <InvoiceQueryRq requestID="1">

          <RefNumber>58869</RefNumber>

        </InvoiceQueryRq>

      </QBXMLMsgsRq>

    </QBXML>'

  end



  #response of the search result

  QBWC.jobs['search_invoice'].set_response_proc do |r|

    if r["xml_attributes"]["statusCode"] == "500" || r["xml_attributes"]["statusCode"] == "1"

      #Add the invoice

      QBWC.add_job('add_invoice') do

        '<QBXML>

       <QBXMLMsgsRq onError="continueOnError">

       <InvoiceAddRq requestID="58869">

       <InvoiceAdd>

       <CustomerRef>

       <ListID>8000000D-1365397507</ListID>

       <FullName>john.doe@test.com</FullName>

       </CustomerRef>

       <TxnDate>2013-04-08</TxnDate>

       <RefNumber>58869</RefNumber>

       <BillAddress>

         <Addr1>N Dallas Parkway</Addr1>

         <City>Addison</City>

         <State>TX</State>

         <PostalCode>75001</PostalCode>

         <Country>United States</Country>

       </BillAddress>    

           <ShipAddress>

         <Addr1>N Dallas Parkway</Addr1>

         <City>Addison</City>

         <State>TX</State>

         <PostalCode>75001</PostalCode>

         <Country>United States</Country>

       </ShipAddress>

         <IsPending>true</IsPending>

         <PONumber>Test QB</PONumber>

         <TermsRef>

                  <FullName>VISA</FullName>

                </TermsRef>

         <ShipDate>2013-04-15</ShipDate>

         <InvoiceLineAdd>

         <ItemRef>

         <FullName>test Invoice</FullName>

         </ItemRef>

         <Desc>test Description</Desc>

         <Quantity>1</Quantity>

         <Rate>1000</Rate>

         </InvoiceLineAdd>

       </InvoiceAdd>

       </InvoiceAddRq>

       </QBXMLMsgsRq>

        </QBXML>'

      end

    end

  end  

end
def添加发票
#从QuickBooks中搜索发票
QBWC.添加作业(“搜索发票”)执行
'
58869
'
结束
#搜索结果的响应
QBWC.jobs['search_invoice'].set_response_proc do|r|
如果r[“xml_属性”][“状态代码”]=“500”| | r[“xml_属性”][“状态代码”]=“1”
#添加发票
QBWC.添加作业(“添加发票”)执行
'
80000000D-1365397507
厕所。doe@test.com
2013-04-08
58869
达拉斯公园路
艾迪生
德克萨斯州
75001
美国
达拉斯公园路
艾迪生
德克萨斯州
75001
美国
真的
测试QB
签证
2013-04-15
测试发票
测试描述
1.
1000
'
结束
结束
结束
结束
我已经将web连接器的自动运行选项设置为5分钟,这样它将以5分钟的间隔自动运行并调用API

假设参考号为#58869的发票是新的,并且未出现在QuickBooks中

当WebConnector调用API时,搜索参考号为#58869的发票的QBXML请求将发送到QuickBooks。它给出了以下回应

<?xml version=\"1.0\" ?>\n<QBXML>\n<QBXMLMsgsRs>\n<InvoiceQueryRs requestID=\"1\" statusCode=\"500\" statusSeverity=\"Warn\" statusMessage=\"The query request has not been fully completed. There was a required element ("58869" that could not be found in QuickBooks.\" />\n</QBXMLMsgsRs>\n</QBXML>\n"
<?xml version=\"1.0\" ?>\n<QBXML>\n<QBXMLMsgsRs>\n<InvoiceQueryRs requestID=\"1\" statusCode=\"0\" statusSeverity=\"Info\" statusMessage=\"Status OK\">\n<InvoiceRet>\n<TxnID>15F-1365397789</TxnID>\n<TimeCreated>2013-04-08T10:39:49+05:30</TimeCreated>\n<TimeModified>2013-04-08T10:39:49+05:30</TimeModified>\n<EditSequence>1365397789</EditSequence>\n<TxnNumber>62</TxnNumber>\n<CustomerRef>\n<ListID>8000000D-1365397507</ListID>\n<FullName>john.doe@test.com</FullName>\n</CustomerRef>\n<ARAccountRef>\n<ListID>8000001E-1364292331</ListID>\n<FullName>John Doe</FullName>\n</ARAccountRef>\n<TemplateRef>\n<ListID>80000001-1364291996</ListID>\n<FullName>Intuit Product Invoice</FullName>\n</TemplateRef>\n<TxnDate>2013-04-08</TxnDate>\n<RefNumber>58869</RefNumber>\n<BillAddress>\n<Addr1>16001 N Dallas Parkway</Addr1>\n<City>Addison</City>\n<State>TX</State>\n<PostalCode>75001</PostalCode>\n<Country>USA</Country>\n</BillAddress>\n<BillAddressBlock>\n<Addr1>16001 N Dallas Parkway</Addr1>\n<Addr2>Addison, TX 75001</Addr2>\n<Addr3>United States</Addr3>\n</BillAddressBlock>\n<ShipAddress>\n<Addr1>16001 N Dallas Parkway</Addr1>\n<City>Addison</City>\n<State>TX</State>\n<PostalCode>75001</PostalCode>\n<Country>USA</Country>\n</ShipAddress>\n<ShipAddressBlock>\n<Addr1>16001 N Dallas Parkway</Addr1>\n<Addr2>Addison, TX 75001</Addr2>\n<Addr3>United States</Addr3>\n</ShipAddressBlock>\n<IsPending>true</IsPending>\n<IsFinanceCharge>false</IsFinanceCharge>\n<PONumber>United Way</PONumber>\n<TermsRef>\n<ListID>8000000C-1364361757</ListID>\n<FullName>Visa</FullName>\n</TermsRef>\n<DueDate>2013-04-08</DueDate>\n<ShipDate>2013-04-15</ShipDate>\n<Subtotal>67.24</Subtotal>\n<ItemSalesTaxRef>\n<ListID>80000012-1364967363</ListID>\n<FullName>Sales Tax</FullName>\n</ItemSalesTaxRef>\n<SalesTaxPercentage>0.00</SalesTaxPercentage>\n<SalesTaxTotal>0.00</SalesTaxTotal>\n<AppliedAmount>0.00</AppliedAmount>\n<BalanceRemaining>67.24</BalanceRemaining>\n<IsPaid>false</IsPaid>\n<IsToBePrinted>true</IsToBePrinted>\n<IsToBeEmailed>false</IsToBeEmailed>\n<CustomerSalesTaxCodeRef>\n<ListID>80000001-1364291997</ListID>\n<FullName>Tax</FullName>\n</CustomerSalesTaxCodeRef>\n</InvoiceQueryRs>\n</QBXMLMsgsRs>\n</QBXML>\n
\n\n\n\n\n\n
然后将发票成功添加到QuickBooks

当webconnector在5分钟间隔后调用api时,搜索参考号为#58869的发票的QBXML请求将发送到QuickBooks。它给出以下响应

<?xml version=\"1.0\" ?>\n<QBXML>\n<QBXMLMsgsRs>\n<InvoiceQueryRs requestID=\"1\" statusCode=\"500\" statusSeverity=\"Warn\" statusMessage=\"The query request has not been fully completed. There was a required element ("58869" that could not be found in QuickBooks.\" />\n</QBXMLMsgsRs>\n</QBXML>\n"
<?xml version=\"1.0\" ?>\n<QBXML>\n<QBXMLMsgsRs>\n<InvoiceQueryRs requestID=\"1\" statusCode=\"0\" statusSeverity=\"Info\" statusMessage=\"Status OK\">\n<InvoiceRet>\n<TxnID>15F-1365397789</TxnID>\n<TimeCreated>2013-04-08T10:39:49+05:30</TimeCreated>\n<TimeModified>2013-04-08T10:39:49+05:30</TimeModified>\n<EditSequence>1365397789</EditSequence>\n<TxnNumber>62</TxnNumber>\n<CustomerRef>\n<ListID>8000000D-1365397507</ListID>\n<FullName>john.doe@test.com</FullName>\n</CustomerRef>\n<ARAccountRef>\n<ListID>8000001E-1364292331</ListID>\n<FullName>John Doe</FullName>\n</ARAccountRef>\n<TemplateRef>\n<ListID>80000001-1364291996</ListID>\n<FullName>Intuit Product Invoice</FullName>\n</TemplateRef>\n<TxnDate>2013-04-08</TxnDate>\n<RefNumber>58869</RefNumber>\n<BillAddress>\n<Addr1>16001 N Dallas Parkway</Addr1>\n<City>Addison</City>\n<State>TX</State>\n<PostalCode>75001</PostalCode>\n<Country>USA</Country>\n</BillAddress>\n<BillAddressBlock>\n<Addr1>16001 N Dallas Parkway</Addr1>\n<Addr2>Addison, TX 75001</Addr2>\n<Addr3>United States</Addr3>\n</BillAddressBlock>\n<ShipAddress>\n<Addr1>16001 N Dallas Parkway</Addr1>\n<City>Addison</City>\n<State>TX</State>\n<PostalCode>75001</PostalCode>\n<Country>USA</Country>\n</ShipAddress>\n<ShipAddressBlock>\n<Addr1>16001 N Dallas Parkway</Addr1>\n<Addr2>Addison, TX 75001</Addr2>\n<Addr3>United States</Addr3>\n</ShipAddressBlock>\n<IsPending>true</IsPending>\n<IsFinanceCharge>false</IsFinanceCharge>\n<PONumber>United Way</PONumber>\n<TermsRef>\n<ListID>8000000C-1364361757</ListID>\n<FullName>Visa</FullName>\n</TermsRef>\n<DueDate>2013-04-08</DueDate>\n<ShipDate>2013-04-15</ShipDate>\n<Subtotal>67.24</Subtotal>\n<ItemSalesTaxRef>\n<ListID>80000012-1364967363</ListID>\n<FullName>Sales Tax</FullName>\n</ItemSalesTaxRef>\n<SalesTaxPercentage>0.00</SalesTaxPercentage>\n<SalesTaxTotal>0.00</SalesTaxTotal>\n<AppliedAmount>0.00</AppliedAmount>\n<BalanceRemaining>67.24</BalanceRemaining>\n<IsPaid>false</IsPaid>\n<IsToBePrinted>true</IsToBePrinted>\n<IsToBeEmailed>false</IsToBeEmailed>\n<CustomerSalesTaxCodeRef>\n<ListID>80000001-1364291997</ListID>\n<FullName>Tax</FullName>\n</CustomerSalesTaxCodeRef>\n</InvoiceQueryRs>\n</QBXMLMsgsRs>\n</QBXML>\n
\n\n\n\n15F-1365397789\n2013-04-08T10:39:49+05:30\n2013-04-08T10:39:49+05:30\n1365397789\n62\n\n8000000D-1365397507\njohn。doe@test.com\n\n\n8000001E-1364292331\nJohn Doe\n\n\n80000001-1364291996\n电路产品发票\n\n2013-04-08\n58869\n\n16001 n达拉斯公园路\nAddison\nTX\n75001\nUSA\n\n\n16001 n达拉斯公园路\nAddison,TX 75001\n美国德克萨斯州达拉斯公园路北侧16001\n\n\n16001\nADISON\nNTX\n75001\nUSA\n\n\n16001\nADISON\nADISON,TX 75001\nITED States\n\ntrue\nfalse\nITED Way\n\n8000000C-1364361757\nVisa\n\n2013-04-08\n2013-04-15\n67.24\n\n\n8000012-1364967363\n销售税
此处的“statusCode”为“0”,表示响应表示发票已存在于QuickBooks中

但仍然是相同的发票再次添加到QuickBooks。我无法找到任何解决方案来限制多次添加相同的发票


我跟踪了“状态码”“并发现QuickBooks正在发送正确的状态代码。我还在订单表中维护一个标记,以跟踪是否已将订单的发票添加到QuickBooks。我想我的问题是网络连接。当WebConnector的“自动运行”选项处于活动状态时,如果没有订单可添加到QuickBooks中,它会一次又一次地添加上一个订单的发票

发布代码的其余部分。Web连接器只执行您告诉它的操作,因此您的代码中一定有一些逻辑错误。除非你发布其余的代码,否则任何人都无法帮助你。网络连接没有问题。如果数据已经在qbwc gem的帮助下添加到QuickBooks中,我已经通过从会话中删除数据修复了这个问题。