Avoiding the “SSS_SEARCH_FOR_EACH_LIMIT_EXCEEDED” Error in NetSuite SuiteScript

NetSuite developers frequently run into the SSS_SEARCH_FOR_EACH_LIMIT_EXCEEDED error when using forEachResult() to iterate large search result sets. 

What Causes the Error?

NetSuite SuiteScript has a limitation: you can’t return more than 4,000 records using .forEachResult(callback) or .each(callback).

The error looks like this:

SSS_SEARCH_FOR_EACH_LIMIT_EXCEEDED:

No more than 4000 search results may be returned at one time from nlobjSearchResultSet.forEachResult(callback)

Using getRange(start, end) in a loop lets you retrieve results in batches of 1,000, avoiding the 4,000 limit.

define([‘N/search’], function(search) {

  function getAllResults() {

    var allResults = [];

    var pageSize = 1000;

    var start = 0;

    var resultSet;

    var mySearch = search.create({

      type: search.Type.SALES_ORDER,

      filters: [[‘status’, ‘anyof’, ‘SalesOrd:A’]],

      columns: [‘internalid’, ‘tranid’, ‘entity’]

    });

    do {

      resultSet = mySearch.run().getRange({

        start: start,

        end: start + pageSize

      });

      if (resultSet && resultSet.length > 0) {

        allResults = allResults.concat(resultSet);

        start += pageSize;

      }

    } while (resultSet.length === pageSize);

    log.debug(‘Total Results Retrieved’, allResults.length);

    return allResults;

  }

  return { execute: getAllResults };

});

Alternate Solution :

var pagedResults = mySearch.runPaged({ pageSize: 1000 });

pagedResults.pageRanges.forEach(function(pageRange) {

  var page = pagedResults.fetch({ index: pageRange.index });

  page.data.forEach(function(result) {

    log.debug(‘Result ID’, result.id);

  });

});

Leave a comment

Your email address will not be published. Required fields are marked *