下面是一個使用迭代器查詢客戶的例子,每次獲取五(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>