在qbXML ItemQuery请求中,如何获取服务项的描述?

时间:2015-11-18 21:52:30

标签: qbxml qbfc

我正在创建一个工具,将生产数据库与QuickBooks(QB)同步。我想使用ItemQuery获取QB中所有项目的列表,我也希望获得每个项目的描述。但是,似乎不同类型的项目具有指定描述的不同方式。使用IncludeRetElement,我能够获得ItemInventoryRet的SalesDesc,但是我很难获得ItemServiceRet的描述(以及其他一些,但我想如果我能想出这个,我将能够找出其他的)

这是我的要求......

worldmap([48 56],[12 27]);
land = shaperead('landareas','UseGeocoords',true);
geoshow(land,'facecolor',[0.8 0.8 0.8]);
northarrow('latitude', 54.5, 'longitude', 24.5,'scaleratio', .17);
h = handlem('NorthArrow');
set(h,'FaceColor',[0 0 0],'EdgeColor',[0.8 0.8 0.8])

scaleruler('units','km');
setm(handlem('scaleruler'),'XLoc',-4.8e5,'YLoc',5.4e6,'MajorTick',0:100:400,'MinorTick',0,'FontName','Times New Roman','FontSize',10,'FontWeight','light',...
    'LineWidth',2,'MajorTickLength',20,'ruler','patches','TickMode','manual');  

以下是我得到的答复(为了清晰起见缩短了......)

<?qbxml version="12.0"?>
<QBXML>
  <QBXMLMsgsRq onError="stopOnError">
    <ItemQueryRq requestID="2">
      <IncludeRetElement>ListID</IncludeRetElement>
      <IncludeRetElement>Name</IncludeRetElement>
      <IncludeRetElement>FullName</IncludeRetElement>
      <IncludeRetElement>ParentRef</IncludeRetElement>
      <IncludeRetElement>SalesAndPurchase_SalesDesc</IncludeRetElement>
      <IncludeRetElement>SalesOrPurchase_Desc</IncludeRetElement>
      <IncludeRetElement>ItemDesc</IncludeRetElement>
      <IncludeRetElement>SalesDesc</IncludeRetElement>
    </ItemQueryRq>
  </QBXMLMsgsRq>
</QBXML>

根据documentation(从下拉列表中选择ItemQuery),我认为我想要的描述是ItemServiceRet&gt; ORSalePurchase&gt; SaleOrPurchase&gt;说明。请求包括我尝试过的一种方式,但我也尝试过其他一些方法......

  1. <QBXML> <QBXMLMsgsRs> <ItemQueryRs requestID="2" statusCode="0" statusSeverity="Info" statusMessage="Status OK"> <ItemServiceRet> <ListID>240000-1071531214</ListID> <Name>Delivery</Name> <FullName>Delivery</FullName> </ItemServiceRet> <ItemInventoryRet> <ListID>270000-1071524193</ListID> <Name>1/2" Line</Name> <FullName>Irrigation Hose:1/2" Line</FullName> <SalesDesc>1/2" Vinyl Irrigation Line</SalesDesc> </ItemInventoryRet> <ItemGroupRet> <ListID>1E0000-934380927</ListID> <Name>Walkway</Name> <ItemDesc>Walkway lighting</ItemDesc> </ItemGroupRet> </ItemQueryRs> </QBXMLMsgsRs> </QBXML>
  2. <IncludeRetElement>ORSalesPurchase:SalesOrPurchase:Desc</IncludeRetElement>
  3. <IncludeRetElement>ORSalesPurchase.SalesOrPurchase.Desc</IncludeRetElement>
  4. <IncludeRetElement>ORSalesPurchase_SalesOrPurchase_Desc</IncludeRetElement>
  5. <IncludeRetElement>SalesOrPurchase:Desc</IncludeRetElement>
  6. <IncludeRetElement>SalesOrPurchase.Desc</IncludeRetElement>
  7. <IncludeRetElement>SalesOrPurchase_Desc</IncludeRetElement>
  8. 所以问题是,如何在qbXML查询中检索子元素?

    我发现如果删除所有IncludeRetElements,我会得到值。但我想学习如何只获取我关心的数据。我们有一个巨大的QB数据库,所以如果我必须得到所有东西,这可能是一个主要的性能问题。

    作为一个注释,我转而使用QBFC10Lib而不是自己创建XML,希望它能帮助我解决这个问题,但事实并非如此。我仍然有完全相同的问题。我猜测一个人的答案将解决qbXML和QBFC。

1 个答案:

答案 0 :(得分:2)

我明白了。您必须单独添加每个级别,如此...

<?qbxml version="12.0"?>
<QBXML>
  <QBXMLMsgsRq onError="stopOnError">
    <ItemQueryRq requestID="2">
      <IncludeRetElement>ListID</IncludeRetElement>
      <IncludeRetElement>Name</IncludeRetElement>
      <IncludeRetElement>FullName</IncludeRetElement>
      <IncludeRetElement>ItemDesc</IncludeRetElement>
      <IncludeRetElement>SalesDesc</IncludeRetElement>
      <IncludeRetElement>ORSalesPurchase</IncludeRetElement>
      <IncludeRetElement>SalesOrPurchase</IncludeRetElement>
      <IncludeRetElement>SalesAndPurchase</IncludeRetElement>
      <IncludeRetElement>Desc</IncludeRetElement>
    </ItemQueryRq>
  </QBXMLMsgsRq>
</QBXML>

我之前尝试过这个,但我想我错过了一个级别。无论如何,希望这个答案可以帮助其他人浪费一半的时间:)。