【问题标题】:In the qbXML ItemQuery request , how do I get the description for a service item?在 qbXML ItemQuery request 中,如何获取服务项目的描述?
【发布时间】:2015-11-18 21:52:29
【问题描述】:

我正在创建一个工具,它将我们的生产数据库与 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. &lt;IncludeRetElement&gt;ORSalesPurchase:SalesOrPurchase:Desc&lt;/IncludeRetElement&gt;
  2. &lt;IncludeRetElement&gt;ORSalesPurchase.SalesOrPurchase.Desc&lt;/IncludeRetElement&gt;
  3. &lt;IncludeRetElement&gt;ORSalesPurchase_SalesOrPurchase_Desc&lt;/IncludeRetElement&gt;
  4. &lt;IncludeRetElement&gt;SalesOrPurchase:Desc&lt;/IncludeRetElement&gt;
  5. &lt;IncludeRetElement&gt;SalesOrPurchase.Desc&lt;/IncludeRetElement&gt;
  6. &lt;IncludeRetElement&gt;SalesOrPurchase_Desc&lt;/IncludeRetElement&gt;
  7. &lt;IncludeRetElement&gt;Desc&lt;/IncludeRetElement&gt;

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

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

作为说明,我转而使用 QBFC10Lib 而不是自己创建 XML,希望它能帮助我解决这个问题,但它没有。我仍然有完全相同的问题。我猜一个答案将解决 qbXML 和 QBFC。

【问题讨论】:

    标签: qbxml qbfc


    【解决方案1】:

    我想通了。您必须像这样单独添加每个级别...

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

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

    【讨论】:

    • 如果不包含任何 IncludeRetElement,则将返回整个响应,并且不会仅过滤到特定元素。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-02
    • 1970-01-01
    相关资源
    最近更新 更多