我正在尝试找一个标志来确定QuickBooks客户是否有新的发票。我正在同步发票,下次当我尝试同步时,我想检查是否有任何新的发票或更新一次。
Customer记录中有syncToken
,但它只显示Customer对象的更新。
除了同步所有内容之外,还有办法检查更新的发票或新内容吗?
提前致谢。
答案 0 :(得分: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
}
}
}
希望这有帮助。
答案 1 :(得分: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的提示