我試圖找到一個標誌來確定QuickBooks客戶是否有新的發票。我正在同步發票,下次嘗試同步時,我想檢查是否有任何新的發票或更新過一次。QuickBooks - 檢查客戶有新發票
客戶記錄中有一個syncToken
但它只顯示客戶對象的更新。
有沒有辦法檢查更新的發票或新的一次,而不是同步所有?
在此先感謝。
我試圖找到一個標誌來確定QuickBooks客戶是否有新的發票。我正在同步發票,下次嘗試同步時,我想檢查是否有任何新的發票或更新過一次。QuickBooks - 檢查客戶有新發票
客戶記錄中有一個syncToken
但它只顯示客戶對象的更新。
有沒有辦法檢查更新的發票或新的一次,而不是同步所有?
在此先感謝。
我在@ 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的提示
我們處理這個問題的方式是通過存儲上次同步時間。將上次同步時間作爲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
}
}
}
希望這有助於您。
感謝您的回覆@Naveen。我沒有得到代碼,但我得到了邏輯。它工作... !!!謝謝 – masterFly