继续查询Quickbooks数据的最佳方式

Best way to continue to query Quickbooks data

我对 qbxml 有疑问。

我正在尝试将 qb 客户、项目等迁移到 zohobooks。 我想先从 quickbooks 获取 50 个客户,然后调用 zohobooks api 在那里创建联系人。以及来自 quickbooks 和 zohobooks 的另外 50 名客户。

问题是我确定在调用 zohobooks api 后如何继续查询?

当我尝试使用与第一个查询响应相同的 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 本身没有任何问题。 我的问题是如何根据另一个请求继续查询客户、物品或其他内容?

必须在单个 Session 中使用迭代器。例如这将起作用:

  • 连接到 QuickBooks(建立会话)
  • 请求创建迭代器并获取第一页记录
  • 执行另一个请求以继续迭代器
  • 执行另一个请求以继续迭代器

虽然这 不会 工作,并且 不会 QuickBooks 支持的东西:

  • 连接到 QuickBooks(建立会话)
  • 请求创建迭代器并获取第一页记录
  • 断开连接
  • 请求创建迭代器并获取第一页记录