上传SuiteScript 2.x至NetSuite时报错求助
SuiteScript 2.0定时脚本错误排查与修复
第一个错误:语法缺失(missing } after property list)
这个错误是JSON语法不完整,大概率是你在define方法的配置或导出对象里犯了小错:
- 检查
define第二个参数(导出的对象)里,最后一个属性后面是不是多打了逗号 - 确认所有大括号
{}都配对,比如导出对象有没有写闭合的}
举个常见错误例子:
define(['N/search'], function(search) { return { execute: function(context) { // 你的代码 }, // 这里多了个逗号,直接触发语法错误 }; });
把多余的逗号删掉就能解决。
第二个错误:未实现入口函数
SuiteScript 2.x的定时脚本(ScheduledScript)必须导出**execute函数**——这是NetSuite识别脚本类型的核心要求,没写这个函数或者导出格式不对,就会报这个错。
比如错误写法:
define(['N/search'], function(search) { // 直接写逻辑,没返回包含execute的对象 var searchObj = search.load({id: 'xxx'}); });
符合要求的完整示例脚本
结合你的需求(遍历保存搜索结果、更新缺货商品预期日期),给你写个标准模板:
/** * @NApiVersion 2.x * @NScriptType ScheduledScript */ define(['N/search', 'N/record'], function(search, record) { // 定时脚本唯一入口函数 function execute(context) { // 1. 加载你的缺货商品保存搜索 var outOfStockSearch = search.load({ id: 'customsearch_your_out_of_stock_search' // 替换成你自己的保存搜索ID }); // 2. 遍历搜索结果 outOfStockSearch.run().each(function(result) { var itemId = result.getValue({name: 'internalid'}); // 这里替换成你计算预期日期的逻辑,示例设为14天后 var newExpectedDate = new Date(); newExpectedDate.setDate(newExpectedDate.getDate() + 14); // 3. 更新商品记录 try { var itemRec = record.load({ type: record.Type.INVENTORY_ITEM, id: itemId, isDynamic: false }); itemRec.setValue({ fieldId: 'expectedreceiptdate', // 替换成实际的预期日期字段ID value: newExpectedDate }); itemRec.save({ enableSourcing: false, ignoreMandatoryFields: true }); log.debug('更新成功', '商品ID: ' + itemId); return true; // 返回true继续遍历下一条 } catch (e) { log.error('更新失败', '商品ID: ' + itemId + ' | 错误: ' + e.message); return true; // 出错也继续遍历,想终止就改成false } }); } // 必须导出execute函数,NetSuite才能识别 return { execute: execute }; });
核心注意点
- 脚本开头的
@NApiVersion 2.x和@NScriptType ScheduledScript标签不能少,NetSuite靠这个判断脚本类型 - 用到的模块(比如
N/search、N/record)必须在define的第一个数组里声明 - 一定要返回包含
execute的对象,这是定时脚本的唯一入口 - 遍历搜索结果时,
each的回调函数必须返回true继续遍历,返回false就会终止
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

