#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(...)
}