Лучший способ продолжить запрашивать данные Quickbooks - PullRequest
0 голосов
/ 20 марта 2019

У меня проблема с qbxml.

Я пытаюсь перенести клиентов, предметы и т. Д. В zohobooks.Я хочу сначала собрать 50 клиентов с помощью быстрых книг и вызова zohobooks apis, чтобы создать там контакты.и снова еще 50 клиентов от QuickBooks и Zohobooks.

Проблема в том, что я уверен, как я могу продолжать запрашивать после вызова apis zohobooks?

Когда я пытался использовать тот же iteratorID из первого ответа на запрос, я ничего не получил от QB.

Я создаю настольное приложение, используя .net, посоветуйте, пожалуйста, лучший вариант для отслеживания миграции и где я нахожусь.

Предположим, что у меня 150 клиентов, и по какой-то причине я прекратил миграцию после 100 клиентов, в этом случае как я могу получить последних 50 клиентов в следующий раз?

public string customerQueryXml()
{
    XmlDocument inputXMLDoc = new XmlDocument();
    inputXMLDoc.AppendChild(inputXMLDoc.CreateXmlDeclaration("1.0", null, null));
    inputXMLDoc.AppendChild(inputXMLDoc.CreateProcessingInstruction("qbposxml", "version=\"1.0\""));

    XmlElement qbXML = inputXMLDoc.CreateElement("QBPOSXML");
    inputXMLDoc.AppendChild(qbXML);

    XmlElement qbXMLMsgsRq = inputXMLDoc.CreateElement("QBPOSXMLMsgsRq");
    qbXML.AppendChild(qbXMLMsgsRq);
    qbXMLMsgsRq.SetAttribute("onError", "stopOnError");

    XmlElement customerQueryRq = inputXMLDoc.CreateElement("CustomerQueryRq");
    qbXMLMsgsRq.AppendChild(customerQueryRq);
    //customerQueryRq.SetAttribute("requestID", "1");
    //customerQueryRq.SetAttribute("iterator", "Start");
    customerQueryRq.SetAttribute("requestID", "2");
    customerQueryRq.SetAttribute("iterator", "Continue");
    customerQueryRq.SetAttribute("iteratorID", "{A1601C19-C6DC-43C0-AE43-6F45088C39F2}");


    // for test only, read 10 customers
    XmlElement MaxReturned = inputXMLDoc.CreateElement("MaxReturned");
    customerQueryRq.AppendChild(MaxReturned).InnerText = "50";

    XmlElement ownerID = inputXMLDoc.CreateElement("OwnerID");
    customerQueryRq.AppendChild(ownerID).InnerText = "0";

    XmlElement timeModifiedRangeFilter = inputXMLDoc.CreateElement("TimeModifiedRangeFilter");
    customerQueryRq.AppendChild(timeModifiedRangeFilter);

    XmlElement fromTimeModified = inputXMLDoc.CreateElement("FromTimeModified");
    timeModifiedRangeFilter.AppendChild(fromTimeModified).InnerText = "1980-01-01T00:00:00";

    XmlElement toTimeModified = inputXMLDoc.CreateElement("ToTimeModified");
    timeModifiedRangeFilter.AppendChild(toTimeModified).InnerText = DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ss");

    return inputXMLDoc.OuterXml;
}

РЕДАКТИРОВАТЬ: Я заметил, что должен использовать iteratorID в том же запросе.Кстати, у меня нет проблем с самим qbxml.У меня вопрос: как я могу продолжать запрашивать клиентов, товары или что-то еще по другому запросу?

  • ProcessRequest (первый раз)
  • перенес XML-данные в другую систему
  • и после этого по какой-либо причине я остановил запрос
  • здесь, могу ли я продолжать запрашивать другой ProcessRequest?

1 Ответ

1 голос
/ 22 марта 2019

Итераторы должны использоваться внутри одного Session. например это будет работать:

  • Подключение к QuickBooks (установить сеанс)
  • Сделать запрос на создание итератора и получить первую страницу записей
  • Сделайте еще один запрос на продолжение итератора
  • Сделайте еще один запрос на продолжение итератора

Хотя это будет не работать, а не то, что поддерживается QuickBooks:

  • Подключение к QuickBooks (установить сеанс)
  • Сделать запрос на создание итератора и получить первую страницу записей
  • Disconnect
  • Сделать запрос на создание итератора и получить первую страницу записей
...