【问题标题】:Iteration samples in Quick books using web connector使用 Web 连接器的快速书籍中的迭代示例
【发布时间】:2014-02-13 14:48:56
【问题描述】:

我在 QBSDK_ProGuid.pdf 文件(第 117 页)上看到了有关迭代的文档。我很困惑如何再次发出相同的查询并将迭代器值现在设置为继续,并将 IteratorID 字段设置为从返回的 IteratorID 值第一次查询迭代。

 <?xml version="1.0" ?>
<?qbxml version="5.0" ?>
<QBXML>
<QBXMLMsgsRq onError="stopOnError">
<CustomerQueryRq requestID="5001" iterator="Continue"
iteratorID="{D7355385-A17B-4f5d-B34D-F34C79C3E6FC}">
<MaxReturned>10</MaxReturned>
<IncludeRetElement>ListID</IncludeRetElement>
</
CustomerQueryRq>
</QBXMLMsgsRq>
</QBXML>

我正在关注 intuit 提供的 WCWebService 示例……并获取客户数据…… 任何人都可以提供一个使用迭代概念的样本。 谢谢!

【问题讨论】:

    标签: quickbooks qbxml


    【解决方案1】:

    以下是使用迭代器查询客户的示例,一次获取五 (5) 位客户。此查询使用以下条件获取客户:

    • 1984 年 1 月 29 日之后修改
    • OwnerID 为 0(这只是为了确保我们返回 GUI 中定义的 DataExt 值(自定义字段))

    您的初始请求将如下所示。请注意,我们声明了 iterator="Start" 属性来启动我们的迭代器:

    <?xml version="1.0" encoding="utf-8"?>
    <?qbxml version="5.0"?>
    <QBXML>
        <QBXMLMsgsRq onError="continueOnError">
            <CustomerQueryRq requestID="1" iterator="Start">
                <MaxReturned>5</MaxReturned>
                <FromModifiedDate>1984-01-29T22:03:19</FromModifiedDate>
                <OwnerID>0</OwnerID>
            </CustomerQueryRq>
        </QBXMLMsgsRq>
    </QBXML>
    

    QuickBooks 将向您发送回复,其中包含前五 (5) 位客户,如下所示。请注意,QuickBooks 已向我们返回一个 iteratorID="..." 属性和一个 iteratorRemainingCount="..." 属性,指示用于标识迭代器的 ID,以及迭代器中剩余的项目数。

    <?xml version="1.0" ?>
    <QBXML>
        <QBXMLMsgsRs>
            <CustomerQueryRs 
             requestID="1" 
             statusCode="0" 
             statusSeverity="Info" 
             statusMessage="Status OK" 
             iteratorRemainingCount="18"
             iteratorID="{eb05f701-e727-472f-8ade-6753c4f67a46}">
                <CustomerRet>
                    <ListID>110000-1232697602</ListID>
                    <TimeCreated>2009-01-23T03:00:02-05:00</TimeCreated>
                    <TimeModified>2009-01-23T03:00:02-05:00</TimeModified>
                    <EditSequence>1232697602</EditSequence>
                    <Name>10th Customer</Name>
                    <FullName>10th Customer</FullName>
                    <IsActive>true</IsActive>
                    <Sublevel>0</Sublevel>
                    <Balance>0.00</Balance>
                    <TotalBalance>0.00</TotalBalance>
                    <SalesTaxCodeRef>
                        <ListID>10000-1232327562</ListID>
                        <FullName>Tax</FullName>
                    </SalesTaxCodeRef>
                    <ItemSalesTaxRef>
                        <ListID>10000-1232327661</ListID>
                        <FullName>Out of State</FullName>
                    </ItemSalesTaxRef>
                    <JobStatus>None</JobStatus>
                </CustomerRet>
    
                 ... 4 more customer records will go here ...
    
            </CustomerQueryRs>
        </QBXMLMsgsRs>
    </QBXML>
    

    然后您将检查iteratorRemainingCount 属性,如果它大于0,则使用iteratorID 属性发送您的下一个请求。请记住,使用此迭代器的每个后续请求都必须使用相同的搜索条件,并且该搜索条件必须随每个请求一起发送。

    因此,在这种情况下,对迭代器下一部分的每个请求都将重新发送 &lt;MaxReturned&gt;&lt;FromModifiedDate&gt;&lt;OwnerID&gt; 元素。请注意,我们从上一个响应中发送了返回的 iteratorID="..." 属性,并声明了 iterator="Continue" 属性,表明我们要继续从现有迭代器中获取:

    <?xml version="1.0" encoding="utf-8"?>
    <?qbxml version="5.0"?>
    <QBXML>
        <QBXMLMsgsRq onError="continueOnError">
            <CustomerQueryRq
             requestID="2" 
             iterator="Continue" 
             iteratorID="{eb05f701-e727-472f-8ade-6753c4f67a46}">
                <MaxReturned>5</MaxReturned>
                <FromModifiedDate>1984-01-29T22:03:19</FromModifiedDate>
                <OwnerID>0</OwnerID>
            </CustomerQueryRq>
        </QBXMLMsgsRq>
    </QBXML>
    

    这个过程将重复,直到迭代器中没有更多的项目。在每个响应中,您将检查 iteratorRemainingCount 属性,如果它大于 0,您将发出另一个请求以获取迭代器的下一部分。

    最终,您会注意到 iteratorRemainingCount 属性将缩小到零 (0),此时您将停止发出请求,因为迭代器没有更多记录要返回。如果您确实发出另一个请求,您将收到一个错误,因为此时迭代器已过期。

    <?xml version=“1.0” ?>
    <QBXML>
    <QBXMLMsgsRs>
        <CustomerQueryRs 
         requestID="5"  
         statusCode="0"
         statusSeverity="Info" 
         statusMessage="Status OK" 
         iteratorRemainingCount="0"
         iteratorID="{eb05f701-e727-472f-8ade-6753c4f67a46}">
            <CustomerRet>
                <ListID>1B0000-1232697643</ListID>
                <TimeCreated>2009-01-23T03:00:43-05:00</TimeCreated>
                <TimeModified>2009-01-23T03:00:43-05:00</TimeModified>
                <EditSequence>1232697643</EditSequence>
                <Name>Pat Daniels</Name>
                <FullName>Pat Daniels</FullName>
                <IsActive>true</IsActive>
                <Sublevel>0</Sublevel>
                <Balance>0.00</Balance>
                <TotalBalance>0.00</TotalBalance>
                <SalesTaxCodeRef>
                    <ListID>10000-1232327562</ListID>
                    <FullName>Tax</FullName>
                </SalesTaxCodeRef>
                <ItemSalesTaxRef>
                    <ListID>10000-1232327661</ListID>
                    <FullName>Out of State</FullName>
                </ItemSalesTaxRef>
                <JobStatus>None</JobStatus>
            </CustomerRet>
    
            ... 4 more customer records will go here ...
    
        </CustomerQueryRs>
    </QBXMLMsgsRs>
    </QBXML>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-18
      • 1970-01-01
      • 1970-01-01
      • 2015-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多