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

时间:2019-03-20 17:30:37

标签: quickbooks

我的qbxml有问题。

我正在尝试将qb客户,物品等迁移到zohobooks。 我想先从Quickbook吸引50个客户,然后调用zohobooks api在此创建联系人。再有50个客户,分别来自速记本和zohobooks。

问题是我确定调用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本身没有任何问题。 我的问题是如何继续查询客户,物品或其他要求的物品?

  • ProcessRequest(第一次)
  • 将xml数据迁移到另一个系统
  • 然后出于任何原因我停止了请求
  • 在这里,我可以继续查询另一个ProcessRequest吗?

1 个答案:

答案 0 :(得分:1)

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

  • 连接到QuickBooks(建立会话)
  • 请求创建迭代器并获取记录的第一页
  • 再次请求继续迭代器
  • 再次请求继续迭代器

尽管这将有效,并且不受QuickBooks支持:

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