SuiteScript 2.0: существуют ли какие-либо ограничения на результаты поиска при выполнении сохраненного поиска через этап «getInputData» сценария отображения / уменьшения?

#mapreduce #netsuite #suitescript #suitescript2.0

#mapreduce #netsuite #suitescript #suitescript2.0

Вопрос:

В настоящее время я создаю сценарий сопоставления / сокращения в NetSuite, который передает результаты сохраненного поиска со стадии getInputData на этап map. Это делается путем первого запуска цикла WHILE на этапе getInputData для получения внутренних идентификаторов каждой записи, вставки в массив, а затем перехода к этапу map. Вот так:

            // run saved search - unlimited rows from saved search.
        do {
            var subresults = invoiceSearch.run().getRange({  start: start,  end: start   pageSize  });
            results = results.concat(subresults);
            count = subresults.length;
            start  = pageSize   1;
        } while (count == pageSize);
        
        var invSearchArray = [];
        
        if(invoiceSearch){
            //NOTE: .run().each has a limit of 4,000 results, hence the do-while loop above.
            for (var i = 0; i < results.length; i  ){ 
                var invObj = new Object();
                invObj['invID'] = results[i].getValue({name: 'internalid'}); 
                invSearchArray.push(invObj);
            }
        }

        return invSearchArray;
  

Я реализовал это таким образом, потому что боялся, что будут ограничения на результаты, так же, как и у функции «.run ().each» (ограничено 4000 результатами).

Я предположил, что передача объекта поиска непосредственно из getInputData в Map также ограничила бы результаты 4000. Может ли кто-нибудь внести ясность в вопрос о том, существуют ли такие ограничения? Правильно ли я опасаюсь преждевременного закрытия скрипта, потому что результаты поиска не могут быть обработаны за пределами 4000 на этапе getInputData скрипта map / reduce?

Любой пример, который поможет мне понять, как объект поиска обрабатывается в скрипте map / reduce, был бы очень признателен.

Спасибо

Ответ №1:

Если вы просто вернете Search экземпляр, все результаты будут переданы в map , за пределы 1000 или 4000 пределов методов getRange and each .

Если поиск имеет 8500 результатов, все 8500 будут переданы map .

 function getInputData() {
  return search.load(...); // alternatively search.create(...)
}