如何让 QuickBooks 在 InvoiceQuery 中发送已删除的行项目?

How can I have QuickBooks send deleted line items in an InvoiceQuery?

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

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

这让我可以获取我正在导入的所有发票的所有行项目——这正是我想要的,因为我报告了这些发票、它们的项目和数量(以及描述)。

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

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

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

Thus, my core question is, is there a way to also include deleted line items on an invoice query?

不,没有。

但是,如果您在应用中缓存此数据,比较从 QuickBooks 返回的 TxnLineID 值与您在您的数据库,然后从您的应用程序中删除您从 QuickBooks 返回的内容中不存在的所有内容。

类似的伪代码如下:

// 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) . " ) ");