Quickbooks SDK RequestProcessor重复调用?

时间:2014-03-28 19:23:36

标签: sdk quickbooks intuit-partner-platform qbxml

我使用QuickBooks SDK 13.0通过QBXML与我们的QuickBooks Enterprise 14.0连接。由于文档很差,在网上缺乏好的例子,它还不是一条简单的道路,但我已经完成了我的项目,即将自己开发的库存系统集成到QuickBooks Advanced Inventory。但是,我现在无法找到解决问题的痕迹:

任务:从QuickBooks中检索库存物品清单

方法:我正在使用QBXMLRP2.IRequestProcessor5.ProcessRequest()来处理ItemInventoryQueryRq请求文件。

如果我只对所有5,033个库存物品发出一个请求,那么一切都运行正常,但是单个请求需要一段时间才能完成并返回。所以我实现了一个"迭代器"一次获得100个产品,并给予应用时间"呼吸"请求之间。第一个调用工作正常,看起来像这样:

<?xml version="1.0"?>
<?qbxml version="13.0"?>
<QBXML>
  <QBXMLMsgsRq onError="stopOnError">
    <ItemInventoryQueryRq requestID="1" iterator="Start">
      <MaxReturned>100</MaxReturned>
      <OwnerID>0</OwnerID>
    </ItemInventoryQueryRq>
  </QBXMLMsgsRq>
</QBXML>

当我处理此请求时,我得到前100个项目,剩下的计数是4933,这是正确的:

...
<ItemInventoryQueryRs requestID="1" statusCode="0" statusSeverity="Info" 
 statusMessage="Status OK" iteratorRemainingCount="4933" 
 iteratorID="{ea9ae5fa-d1b5-4719-9f77-dd4ac27e1eed}">
...

从这一点开始,问题就发生了......

下一个请求如下:

<?xml version="1.0"?>
<?qbxml version="13.0"?>
<QBXML>
  <QBXMLMsgsRq onError="stopOnError">
    <ItemInventoryQueryRq requestID="2" iterator="Continue" 
     iteratorID="{ea9ae5fa-d1b5-4719-9f77-dd4ac27e1eed}">
      <MaxReturned>100</MaxReturned>
      <OwnerID>0</OwnerID>
    </ItemInventoryQueryRq>
  </QBXMLMsgsRq>
</QBXML>

此时我预计接下来的100个项目,剩余的数量为4833.但是,处理器跳过了100个项目,给了我下一个100项,并返回了剩余的4733个数:

...
<ItemInventoryQueryRs requestID="2" statusCode="0" statusSeverity="Info" 
 statusMessage="Status OK" iteratorRemainingCount="4733" 
 iteratorID="{ea9ae5fa-d1b5-4719-9f77-dd4ac27e1eed}">
...

后续调用也是如此:跳过100,返回下一个100,计数器减少200:

...
<ItemInventoryQueryRs requestID="3" statusCode="0" statusSeverity="Info" 
 statusMessage="Status OK" iteratorRemainingCount="4533" 
 iteratorID="{ea9ae5fa-d1b5-4719-9f77-dd4ac27e1eed}">
...
<ItemInventoryQueryRs requestID="4" statusCode="0" statusSeverity="Info" 
 statusMessage="Status OK" iteratorRemainingCount="4333" 
 iteratorID="{ea9ae5fa-d1b5-4719-9f77-dd4ac27e1eed}">
...
<ItemInventoryQueryRs requestID="4" statusCode="0" statusSeverity="Info" 
 statusMessage="Status OK" iteratorRemainingCount="4133" 
 iteratorID="{ea9ae5fa-d1b5-4719-9f77-dd4ac27e1eed}">
...

等等。看起来处理器每次都发送两次请求,而我只得到最后一次调用的结果。

在解决问题时,我发现每次调用处理器时都会更新以下日志文​​件:%AppData%\ Local \ Intuit \ QuickBooks \ Log \ 14.0 \ QBWin.log

对于每次对处理器的调用,此文件显示以下两行:

oasdkrequestprocessor.cpp (397) :  CHECKPOINT: 5024: Fri Mar 28 13:39:56 returning from ProcessXMLRequest, result = 0
oasdkrequestprocessor.cpp (397) :  CHECKPOINT: 5024: Fri Mar 28 13:39:57 returning from ProcessXMLRequest, result = 0

这加强了我对ProcessRequest导致发出重复调用的怀疑。

我在通话中做错了什么或丢失了什么?任何帮助表示赞赏。

====&GT;更新(2014年4月1日):事实证明我测试的第二台机器上没有这种行为,所以我从我的开发PC卸载了所有Intuit产品,使用清理工具来摆脱旧的注册表项和相关的DLL,然后重新安装QuickBooks Enterprise 14.0和SDK 13.0。应用了最新的更新,现在一切都很好。太糟糕了,我失去了生命中的一天,试图弄清楚发生了什么......

0 个答案:

没有答案