2016-06-22 92 views
1

我試圖找到一個標誌來確定QuickBooks客戶是否有新的發票。我正在同步發票,下次嘗試同步時,我想檢查是否有任何新的發票或更新過一次。QuickBooks - 檢查客戶有新發票

客戶記錄中有一個syncToken但它只顯示客戶對象的更新。

有沒有辦法檢查更新的發票或新的一次,而不是同步所有?

在此先感謝。

回答

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的提示

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 
     } 
    } 
} 

希望這有助於您。

+0

感謝您的回覆@Naveen。我沒有得到代碼,但我得到了邏輯。它工作... !!!謝謝 – masterFly

相關問題