以下是使用迭代器查询客户的示例,一次获取五 (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>