SuiteScript 2.1:如何用Try-Catch错误填充M/R字段?选submitFields还是setValue?
SuiteScript 2.1 错误信息填充至物料字段的实现方案
一、错误信息填充的代码实现
根据脚本上下文的不同,有两种实现方式:
1. 已加载目标物料记录时(用setValue)
如果你的脚本已经通过record.load或上下文(如用户事件脚本的newRecord)获取了物料记录对象,直接用setValue修改字段再保存即可:
try{ // 你的业务逻辑代码 } catch (e) { const errorDetail = JSON.stringify(e); log.error('捕获到异常', errorDetail); // 假设itemRecord是已加载的物料记录对象 itemRecord.setValue({ fieldId: 'custitem_mr_field', value: errorDetail.substring(0, 4000) // 截断适配NetSuite字段长度限制 }); itemRecord.save(); // 如需终止流程则保留throw,否则可移除 throw e.message; }
2. 未加载记录时(用submitFields)
如果无需加载完整记录,直接用submitFields更新字段,性能更优:
try{ // 你的业务逻辑代码 } catch (e) { const errorDetail = JSON.stringify(e); log.error('捕获到异常', errorDetail); record.submitFields({ type: record.Type.INVENTORY_ITEM, // 根据物料类型调整,如NON_INVENTORY_ITEM id: targetItemInternalId, // 替换为目标物料的内部ID values: { custitem_mr_field: errorDetail.substring(0, 4000) }, options: { ignoreMandatoryFields: true // 无需校验必填字段时开启 } }); throw e.message; }
二、submitFields与setValue的选择标准
优先用
setValue的场景:- 脚本上下文已提供现成的记录对象(如用户事件脚本的
newRecord) - 需要同时修改多个字段,一次性保存更高效
- 需要触发字段级验证、源数据拉取或关联工作流(
setValue会触发完整的记录逻辑)
- 脚本上下文已提供现成的记录对象(如用户事件脚本的
优先用
submitFields的场景:- 仅需更新单个/少数字段,避免加载完整记录的性能损耗
- 不需要触发字段级规则或工作流(默认跳过部分校验,可通过参数调整)
- Map/Reduce等对性能敏感的脚本场景
内容的提问来源于stack exchange,提问作者apple
相关产品推荐
相关产品推荐

