1

我试图找到一个标志来确定 QuickBooks 客户是否有新发票。我正在同步发票,下次尝试同步时,我想检查是否有任何新发票或更新过一次。

客户记录中有一个syncToken,但它只显示客户对象的更新。

有没有办法检查更新的发票或新的一次,而不是同步所有?

提前致谢。

4

2 回答 2

1

我们处理这个问题的方法是存储最后一次同步时间。将上次同步时间作为过滤器添加到 QuickBooks SDK 查询对象。第一次,所有发票都同步。在下一次同步期间,将同步上次同步时间之后创建或修改的那些。这是我们正在使用的 Windows 服务的 C# 代码示例:

using QBXMLRP2Lib;
using Interop.QBFC13;

public void SyncTransactions(QBSessionManager sessionMgr, DateTime? fromModifiedDate)
{
    IMsgSetRequest msgset = sessionMgr.CreateMsgSetRequest("US", 13, 0);
    IInvoiceQuery invoiceQuery = msgset.AppendInvoiceQueryRq();
    invoiceQuery.IncludeLineItems.SetValue(true); // true if line items from a transaction have to included in the result set
    if (fromModifiedDate != null)
    {           
        invoiceQuery.ORInvoiceQuery.InvoiceFilter.ORDateRangeFilter.ModifiedDateRangeFilter.FromModifiedDate.SetValue(fromModifiedDate.Value, false);
        invoiceQuery.ORInvoiceQuery.InvoiceFilter.ORDateRangeFilter.ModifiedDateRangeFilter.FromModifiedDate.SetTimeZone(0, 0); // UTC, since we keep the last sync time in UTC

        IMsgSetResponse msgRes = sessionMgr.DoRequests(msgset);
        IResponseList responseList = msgRes.ResponseList;
        if (responseList.Count > 0)
        {
            // process the results here
        }
    }
}

希望这可以帮助。

于 2016-06-22T05:27:58.800 回答
0

我在@Naveen 的回答之后弄清楚了。

基本上,syncToken当我们一次处理单个记录时,它很好用。我们可以保存syncToken在我们的数据库中,下次对照 QuickBooks 进行检查。

但是当涉及到批量记录时,它很好用LastUpdatedTime

要过滤发票,我所做的是查询 QuickBooks,如下所示,

$InvoiceService = new QuickBooks_IPP_Service_Invoice();
$invoices = $InvoiceService->query($Context, $realm, "SELECT * FROM Invoice where MetaData.LastUpdatedTime > <date>";  

注意:<date>应该是长日期格式。例如:2004-02-12T15:19:21+00:00。我们可以通过date('c', mySql date);

干杯..!!!再次感谢@Naveen 的提示

于 2016-06-22T11:23:37.043 回答