我遇到了与NetSuite SuiteTalk API 集成的问题。他们提供 SOAP API 以管理 ERP 的记录/实体。search
我们通过调用和后续调用导入一些记录(库存项目)searchMoreWithId
。
我们提供了search
呼叫和接收search_id
响应的条件。搜索结果可能很大,因此我们使用单独的searchMoreWithId
调用来获取结果的每一页,同时指定searchId
和pageIndex
。NetSuite SuiteTalk API 文档 -
https://docs.oracle.com/cloud/latest/netsuitecs_gs/NSTWP/NSTWP.pdf。
问题是一些searchMoreWithId
返回空记录列表的调用。
带有空白页面的此类响应示例:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Header>
<platformMsgs:documentInfo xmlns:platformMsgs="urn:messages_2016_2.platform.webservices.netsuite.com">
<platformMsgs:nsId>WEBSERVICES...</platformMsgs:nsId>
</platformMsgs:documentInfo>
</soapenv:Header>
<soapenv:Body>
<searchMoreWithIdResponse xmlns="urn:messages_2016_2.platform.webservices.netsuite.com">
<platformCore:searchResult xmlns:platformCore="urn:core_2016_2.platform.webservices.netsuite.com">
<platformCore:status isSuccess="true"/>
<platformCore:totalRecords>98852</platformCore:totalRecords>
<platformCore:pageSize>10</platformCore:pageSize>
<platformCore:totalPages>9886</platformCore:totalPages>
<platformCore:pageIndex>66</platformCore:pageIndex>
<platformCore:searchId>WEBSERVICES_...</platformCore:searchId>
<platformCore:recordList/>
</platformCore:searchResult>
</searchMoreWithIdResponse>
</soapenv:Body>
</soapenv:Envelope>
请注意platformCore:recordList
响应文档中的 XML 标记为空。
我注意到一个不变的模式——在空页面之前没有完整的页面。例如,我们设置页面大小 = 10 并收到以下记录计数作为响应:
page 1496 - 10
page 1497 - 5
page 1498 - 0
page 1499 - 0
page 1500 - 0
page 1501 - 10
我发现只有在官方文档中提到减小页面大小(在上面提供的同一个 PDF 文档中):
在返回大型数据集的 Web 服务或 SuiteScript 中执行搜索时,请考虑以下可能的问题。
如果最初符合搜索条件的记录被更新并且不再符合条件,则搜索将跳过该记录。在这种情况下,可能不会返回一些原本包含在搜索结果中的记录,并且返回的记录总数可能会小于原来的结果总数。
如果创建了符合搜索条件的新记录,它们也会被返回。翻阅结果后返回的记录总数可能会高于
原来的结果总数
,并且可能返回重复的结果。结果可能会丢失。例如,如果第一个结果页面中的一条记录已更新,但它不再符合条件,则另一条
记录现在适合第一页。
但是,由于在浏览搜索结果的后续页面时会跳过较早的页面,因此
不会返回此记录。在 Web 服务中,在您翻阅搜索结果后,返回的记录数可能比最初符合搜索条件的记录数多或少。
结果集的第二页和后续页面可能包含比指定页面大小更少的记录。
但不确定是否与我们的案例有关。
所以问题是:这是正常情况吗?它不需要一些额外的处理或重试吗?