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

NetSuite MapReduce SuiteScript执行报错求助:语句缺失分号

NetSuite MapReduce脚本执行失败排查与修复

问题概述

在NetSuite中调用已保存搜索执行销售订单MapReduce处理时,脚本执行失败,报错信息:

Fail to evaluate script: {"type":"error.SuiteScriptModuleLoaderError","name":"UNEXPECTED_ERROR","message":"missing ; before statement (SS_SCRIPT_FOR_METADATA#73)","stack":[]}

错误原因分析

  • define语法错误:define(['N/record']), 多了一个右括号,违反SuiteScript 2.x模块定义语法,这是触发当前报错的直接原因。
  • 已保存搜索加载方式错误:用record.load()加载已保存搜索是错误的,该方法用于加载业务记录,已保存搜索需使用N/search模块的search.load()。
  • getInputData无返回值:MapReduce的getInputData函数必须返回搜索对象、结果数组等合法数据源,原代码未返回任何内容,导致Map阶段无数据可处理。
  • 变量混淆与未定义:Map函数中使用了未定义的recordId变量,应使用导入的record模块;context.write中的context应为mapContext,且write方法需同时传入key和value。
  • Summarize函数无效调用:存在无参数的log.audit()调用,且输出内容逻辑混乱,无实际诊断意义。

修正后的完整代码

/**
*@NApiVersion 2.x
*@NScriptType MapReduceScript
*@NModuleScope SameAccount
*/
define(['N/record', 'N/search', 'N/log'], function(record, search, log) {

    function getInputData() {
        try {
            // 用search.load加载已保存搜索
            var mySearch = search.load({
                id: 'customsearch_my_so_search'
            });
            // 返回搜索对象,MapReduce自动迭代结果
            return mySearch;
        } catch(e) {
            log.debug('Error in GET INPUT DATA', e);
            // 异常时返回空数组避免脚本中断
            return [];
        }
    }

    function map(mapContext) {
        try {
            var searchResult = JSON.parse(mapContext.value);
            var salesOrderId = searchResult.id;
            
            // 用record模块加载销售订单,修正变量错误
            var objRecord = record.load({
                type: record.Type.SALES_ORDER,
                id: salesOrderId,
                isDynamic: true
            });
            
            // 此处添加需要对销售订单执行的业务逻辑(示例:修改字段)
            // objRecord.setValue({fieldId: 'status', value: 'Pending Approval'});
            
            // 保存记录,修正变量命名
            var savedRecordId = objRecord.save({
                enableSourcing: true,
                ignoreMandatoryFields: true
            });
            
            // 正确调用mapContext.write,传入key和value
            mapContext.write({
                key: salesOrderId,
                value: savedRecordId
            });
        } catch(e) {
            log.error('Exception in MAP', e);
        }
    }

    function summarize(summary) {
        try {
            // 输出脚本总使用量
            log.audit('Script Usage', 'Total Usage: ' + summary.usage);
            
            // 遍历Map阶段的错误日志
            summary.mapSummary.errors.iterator().each(function(key, error) {
                log.error('Map Error for Key: ' + key, error);
                return true;
            });
        } catch(e) {
            log.error("Exception in SUMMARIZE", e);
        }
    }

    return {
        getInputData: getInputData,
        map: map,
        summarize: summarize
    };
});

关键修复说明

  1. 修正模块定义语法:移除define调用后多余的右括号,符合SuiteScript 2.x模块规范。
  2. 导入必要模块:添加N/search用于加载已保存搜索,N/log用于规范日志输出。
  3. 修复输入数据逻辑:getInputData返回加载后的搜索对象,让MapReduce自动处理结果;异常时返回空数组避免脚本中断。
  4. Map函数变量修正:替换错误变量名,完善write方法参数,确保逻辑合法。
  5. 优化Summarize函数:移除无效日志调用,改为输出脚本使用量和Map阶段错误,便于问题排查。

内容的提问来源于stack exchange,提问作者Kayle Davis

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 10:27:04