2014-02-13 25 views
1

我在QBSDK_ProGuid.pdf文件(第117頁)上看到了有關iterration的文檔。我很困惑如何再次發出相同的查詢並將iterator值設置爲Continue,並且IteratorID字段設置爲從第一個查詢迭代返回的IteratorID值。使用Web連接器的快速書籍中的迭代示例

<?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樣品......並獲得客戶數據.. 任何一個可以請提供使用迭代概念的樣本。 謝謝!

回答

3

下面是一個使用迭代器查詢客戶的例子,每次獲取五(5)個客戶。此查詢獲取客戶提供以下標準:

  • 1月29日之後修改,1984年
  • OWNERID爲0(這只是確保我們回去在GUI中定義DataExt值(自定義字段))

您的初始請求將如下所示。我們聲明迭代器=「開始」屬性的通知,開始我們的迭代器:

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