You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 10:58:16