首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >继续查询Quickbook数据的最佳方法

继续查询Quickbook数据的最佳方法
EN

Stack Overflow用户
提问于 2019-03-20 17:30:36
回答 1查看 146关注 0票数 0

我对qbxml有一个问题。

我正试图把qb的客户,物品等转移到变焦本上。我想先从quickbooks获得50个客户,然后调用zohobooks在那里创建联系人。从quickbooks到zohobooks,又有50位客户。

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

当我尝试使用来自第一个查询响应的相同iteratorID时,我从QB中一无所获。

我正在使用.net构建桌面应用程序,请告诉我跟踪迁移和我在哪里的最佳选择。

假设我有150个客户,并且由于某种原因在100个客户之后停止迁移,那么在这种情况下,下次如何才能得到最后50个客户呢?

代码语言:javascript
复制
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吗?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-22 03:34:54

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

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

虽然这是行不通的,也不是QuickBooks所支持的:

  • 连接到QuickBooks (建立会话)
  • 执行创建迭代器的请求并获取记录的第一页。
  • 断开连接
  • 执行创建迭代器的请求并获取记录的第一页。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55266900

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档