Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
继续查询Quickbooks数据的最佳方法_Quickbooks - Fatal编程技术网

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

继续查询Quickbooks数据的最佳方法,quickbooks,Quickbooks,我对qbxml有一个问题 我正在尝试将qb客户、项目等迁移到zohobooks。 我想先从quickbooks抓取50个客户,然后调用zohobooks API在那里创建联系人。还有另外50位客户,他们来自quickbooks和zohobooks 问题是我确定在调用zohobooks API之后如何继续查询 当我试图使用来自第一个查询响应的相同迭代器ID时,我从QB中什么也没有得到 我正在使用.net构建桌面应用程序,请告诉我跟踪迁移的最佳选项以及我的位置 假设我有150个客户,并且由于某种原因

我对qbxml有一个问题

我正在尝试将qb客户、项目等迁移到zohobooks。 我想先从quickbooks抓取50个客户,然后调用zohobooks API在那里创建联系人。还有另外50位客户,他们来自quickbooks和zohobooks

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

当我试图使用来自第一个查询响应的相同迭代器ID时,我从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;
}
编辑: 我注意到我必须在同一个请求中使用迭代器ID。顺便说一下,我对qbxml本身没有问题。 我的问题是如何继续查询客户、项目或其他请求

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

迭代器必须在单个
会话中使用。e、 g.这将起作用:

  • 连接到QuickBooks(建立会话)
  • 请求创建迭代器并获取第一页记录
  • 执行另一个请求以继续迭代器
  • 执行另一个请求以继续迭代器
虽然这不起作用,QuickBooks也不支持:

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

迭代器是处理此问题的正常方法。如果您对它们有问题,您应该将qbXML请求和响应发布到QuickBooks或从QuickBooks发布,这样我们就可以看到您在做什么。@KeithPalmerJr。我只是想知道如何继续查询其他客户的请求。请检查我编辑的问题您的意思是,我不能在另一个会话上继续查询,对吗?我检查了您编写的php devkit,似乎您使用了日期作为筛选器来继续。正确,您不能在不同会话上继续查询,而不是在其他会话上开始查询。如果我使用一个日期作为筛选器继续,那么这是一个错误(您应该在这里删除一个链接,这样它可以被修复)。例如,在这个文件中,对于FromModifiedDate字段,您使用了$last。我认为这是跟踪新添加的交易数据或项目等的最佳方式。这是错误的吗?是的,这是跟踪新添加数据的最佳方式。但是,请注意,这与继续现有查询是分开的。e、 g.您可以使用筛选器而不继续查询。您可以继续查询而不使用筛选器。或者,您可以使用筛选器继续查询。它们是两个独立的东西,您可以选择一起使用,但继续查询并不一定与使用过滤器有关。