快速书籍中的迭代样本使用Web连接器

时间:2014-02-13 14:48:57

标签: quickbooks qbxml

我在QBSDK_ProGuid.pdf文件(第117页)上看到了有关iterration的文档。我很困惑如何再次发出相同的查询并将迭代器值设置为Continue,并将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示例...并获取客户数据。 任何人都可以提供一个使用迭代概念的样本。 谢谢!

1 个答案:

答案 0 :(得分:3)

下面是使用迭代器查询客户的示例,一次获取五(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属性发送您的下一个请求。请记住,使用此迭代器的每个后续请求请求必须使用相同的搜索条件,并且必须随每个请求一起发送搜索条件。

因此,在这种情况下,对迭代器的下一部分的每个请求都将重新发送<MaxReturned><FromModifiedDate><OwnerID>元素。请注意,我们从先前的响应中发送返回的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>