使用 ResultSet.getRange 方法

为了使用 getRange 处理大量结果,我们必须考虑以下事项:

  1. getRange 有 2 个参数: startend 。总是积极的,总是(开始<结束)
  2. start 是要返回的第一个结果的包含索引
  3. end 是返回的最后一个结果的唯一索引
  4. 如果可用结果少于请求的结果,则该数组将包含少于 end-start 条目。例如,如果只有 25 个搜索结果,则 getRange(20,30)将返回 5 个 search.Result 对象的数组。
  5. 虽然上面的帮助句子没有直接说明,但是开始结束都可能超出了可用结果的范围。在同一个例子中 - 如果只有 25 个搜索结果,getRange(100,200)将返回一个空数组[]
  6. 一次最多 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 个单位