如何让QuickBooks在发票查询中发送已删除的订单项?

时间:2015-01-26 16:04:00

标签: php quickbooks qbxml

在通过qbXML发出请求以导入发票时,我使用以下代码段:

<InvoiceQueryRq requestID="1">
  <IncludeLineItems>true</IncludeLineItems>
  <OwnerID>0</OwnerID>
</InvoiceQueryRq>

这允许我获取我正在导入的所有发票的所有订单项 - 这正是我想要的,因为我报告了这些发票,它们的项目和数量(以及描述)。

但是,我的问题是当quickbooks用户删除其中一个订单项时,我无法告诉我收到的回复。我将获得更新,例如更新的数量或说明,当然我会获得所有新的订单项。

据我所知,一种解决方案是简单地清除已知发票上的任何数据并重新插入新数据,但我希望避免进一步的数据操作开销。

因此,我的核心问题是,是否有办法在发票查询中包含已删除的订单项?

1 个答案:

答案 0 :(得分:1)

  

因此,我的核心问题是,是否有办法在发票查询中包含已删除的订单项?

不,没有。

但是,如果您在应用中缓存此数据,那么将从QuickBooks返回的TxnLineID值与您拥有的缓存TxnLineID值进行比较应该非常简单。您的数据库,只需从您的应用程序中删除您从QuickBooks返回的内容中没有的内容。

Psuedocode就像这样:

// the main TxnID of the invoice itself
$TxnID = ... 

// this will store the current TxnLineIDs for existing lines
$list_of_current_TxnLineIDs = array();

// loop through the invoice lines that were returned from QuickBooks
foreach ($InvoiceLineRet as $InvoiceLine) 
{
  $list_of_current_TxnLineIDs[] = $InvoiceLine->TxnLineID;
}

// delete anything we have already cached that isn't needed anymore
db_query("DELETE FROM invoice_line WHERE TxnID = $TxnID AND TxnLineID NOT IN ( " . implode(", ", $list_of_current_TxnLineIDs) . " ) ");