QuickBooks — проверьте, есть ли у клиента новые счета

Я пытаюсь найти флаг, чтобы определить, есть ли у клиента QuickBooks новые счета. Я синхронизирую счета-фактуры, и в следующий раз, когда я пытаюсь выполнить синхронизацию, я хочу проверить, есть ли новые счета-фактуры ИЛИ обновлены один раз.

Eсть syncToken в записи клиента, но он показывает только обновления для объекта клиента.

Есть ли способ проверить наличие обновленных счетов-фактур ИЛИ новых элементов, кроме синхронизации всех?

Заранее спасибо.

1

Решение

То, как мы справились с этим, заключается в хранении время последней синхронизации. Добавить время последней синхронизации в качестве фильтра к объекту запроса 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
}
}
}

Надеюсь это поможет.

1

Другие решения

Я понял это после ответа @ Навина.

В основном 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 за ваш совет

0