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

In the qbXML ItemQuery request , how do I get the description for a service item?

我正在创建一个工具,将我们的生产数据库与 QuickBooks (QB) 同步。我正在尝试使用 ItemQuery 获取 QB 中所有项目的列表,并且我还想获​​取每个项目的描述。但是,似乎不同类型的项目有不同的指定描述方式。使用 IncludeRetElement,我能够获得 ItemInventoryRet 的 SalesDesc,但我正在努力获取 ItemServiceRet 的描述(以及其他一些,但我想如果我能弄清楚这个,我就能弄清楚其他的) .

这是我的要求...

<?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>

这是我收到的回复(为清楚起见已缩短)...

<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>

根据 documentation(从下拉列表中选择 ItemQuery),我想我想要的描述是 ItemServiceRet > ORSalePurchase > SaleOrPurchase > Desc。该请求包括我尝试过的一种方式,但我也尝试过很多其他方式...

  1. <IncludeRetElement>ORSalesPurchase:SalesOrPurchase:Desc</IncludeRetElement>
  2. <IncludeRetElement>ORSalesPurchase.SalesOrPurchase.Desc</IncludeRetElement>
  3. <IncludeRetElement>ORSalesPurchase_SalesOrPurchase_Desc</IncludeRetElement>
  4. <IncludeRetElement>SalesOrPurchase:Desc</IncludeRetElement>
  5. <IncludeRetElement>SalesOrPurchase.Desc</IncludeRetElement>
  6. <IncludeRetElement>SalesOrPurchase_Desc</IncludeRetElement>
  7. <IncludeRetElement>Desc</IncludeRetElement>

所以问题是,如何在 qbXML 查询中检索子元素?

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

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

我明白了。您必须分别添加每个级别,就像这样...

<?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>

我之前试过这个,但我想我错过了一个关卡。无论如何,希望这个答案能帮助其他人避免浪费他们一半的时间:)。