使用 ResultSet.getRange 方法
为了使用 getRange 处理大量结果,我们必须考虑以下事项:
- getRange 有 2 个参数: start 和 end 。总是积极的,总是(开始<结束)
- start 是要返回的第一个结果的包含索引
- end 是返回的最后一个结果的唯一索引
- 如果可用结果少于请求的结果,则该数组将包含少于 end-start 条目。例如,如果只有 25 个搜索结果,则 getRange(20,30)将返回 5 个 search.Result 对象的数组。
- 虽然上面的帮助句子没有直接说明,但是开始和结束都可能超出了可用结果的范围。在同一个例子中 - 如果只有 25 个搜索结果,getRange(100,200)将返回一个空数组[]
- 一次最多 1000 行。 (结束 - 开始)<= 1000
// Assume that 'N/search' module is included as 'search'
// this search will return a lot of results (not having any filters)
var s = search.create({
type: search.Type.TRANSACTION,
columns : ['entity','amount'],
filters: []
});
var resultSet = s.run();
// now take the first portion of data.
var currentRange = resultSet.getRange({
start : 0,
end : 1000
});
var i = 0; // iterator for all search results
var j = 0; // iterator for current result range 0..999
while ( j < currentRange.length ) {
// take the result row
var result = currentRange[j];
// and use it like this....
var transId = result.id;
var entityId = result.getValue('entity');
var entityName = result.getText('entity');
var amount = result.getValue('amount');
// finally:
i++; j++;
if( j==1000 ) { // check if it reaches 1000
j=0; // reset j an reload the next portion
currentRange = resultSet.getRange({
start : i,
end : i+1000
});
}
}
让我们计算治理。我们有 1 + count / 1000 个 getRange 调用,每个调用 10 个单位,所以:
G =(1 + count / 1000)* 10
示例:9500 行将占用 100 个单位