如何在NetSuite Map/Reduce脚本中从getInputData传递Record ID与Script ID到Map阶段
NetSuite Map/Reduce 同时传递搜索结果、Record ID和Script ID到Map阶段
你当前代码里的return getMoreRecords(searchObj),scriptId;用了逗号运算符,实际只会返回scriptId,完全丢失了搜索结果,而且没法同时传递多个数据。要实现需求,得把scriptId和recordId附加到每个搜索结果对象上,再返回修改后的结果数组。
修改后的getInputData函数
function getInputData() { try { var scriptObj = runtime.getCurrentScript(); var scriptId = runtime.getCurrentScript().id; var recordId = runtime.getCurrentScript().getParameter({ name: 'custscript_record_id' }); log.debug("scriptId", scriptId); var searchObj; if (recordId) { var searchID = 'customsearch_je'; searchObj = search.load(searchID); searchObj.filters.push(search.createFilter({ name: 'internalidnumber', operator: search.Operator.EQUALTO, values: recordId })); } else { var errorSearchID = 'customsearch_je_error'; log.debug("errorSearchID", errorSearchID); searchObj = search.load(errorSearchID); } // 获取所有搜索结果并附加额外数据 var allResults = []; var results = searchObj.run().getRange({start: 0, end: 1000}); while (results.length > 0) { // 给每个结果添加scriptId和recordId属性 results.forEach(function(result) { result.scriptId = scriptId; result.recordId = recordId; allResults.push(result); }); // 处理分页,获取下一批结果 var nextStart = allResults.length; results = searchObj.run().getRange({start: nextStart, end: nextStart + 1000}); } // 返回带额外数据的结果数组 return allResults; } catch (error) { log.error("Error in getInputData", error); } }
Map阶段获取数据的方式
在Map函数里,直接从context.value中读取附加的属性即可,原有搜索字段的取值逻辑不受影响:
function map(context) { try { var searchResult = context.value; // 获取附加的scriptId和recordId var scriptId = searchResult.scriptId; var recordId = searchResult.recordId; // 原有搜索字段取值方式不变 var internalId = searchResult.getValue({name: 'internalid'}); var tranDate = searchResult.getText({name: 'trandate'}); // 后续业务逻辑... log.debug("Map阶段获取的数据", { scriptId: scriptId, recordId: recordId, internalId: internalId, tranDate: tranDate }); } catch (error) { log.error("Error in Map", error); } }
注意事项
- NetSuite搜索结果对象支持扩展自定义属性,直接添加不会有兼容性问题。
- 用
getRange循环获取结果是为了处理分页(单次getRange最多返回1000条数据),避免遗漏。如果你的getMoreRecords是自定义分页函数,也可以替换成对应逻辑,核心是遍历每个结果添加额外属性。
内容的提问来源于stack exchange,提问作者Maira S
相关产品推荐
相关产品推荐

