Я пытаюсь найти флаг, чтобы определить, есть ли у клиента QuickBooks новые счета. Я синхронизирую счета-фактуры, и в следующий раз, когда я пытаюсь выполнить синхронизацию, я хочу проверить, есть ли новые счета-фактуры ИЛИ обновлены один раз.
Eсть syncToken
в записи клиента, но он показывает только обновления для объекта клиента.
Есть ли способ проверить наличие обновленных счетов-фактур ИЛИ новых элементов, кроме синхронизации всех?
Заранее спасибо.
То, как мы справились с этим, заключается в хранении время последней синхронизации. Добавить время последней синхронизации в качестве фильтра к объекту запроса QuickBooks SDK. В первый раз все счета синхронизируются. Во время следующей синхронизации те, которые были созданы или изменены после время последней синхронизации синхронизируются. Вот пример кода C # из службы Windows, которую мы используем:
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
}
}
}
Надеюсь это поможет.
Я понял это после ответа @ Навина.
В основном 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 за ваш совет