SuiteScript 2.0保存记录时如何避免触发用户事件脚本?
在SuiteScript 2.0中保存记录时禁用用户事件脚本
没问题,SuiteScript 2.0里确实提供了对应SS1.0 disabletriggers: true的功能,刚好能解决你在Map/Reduce脚本中遇到的用户事件触发导致的RCRD_HAS_BEEN_CHANGED错误。
具体用法
当你使用N/record模块加载或创建供应商记录后,调用save()方法时,只需要在配置选项里加入disableTriggers: true(注意驼峰命名,和SS1.0的下划线区分开),就能阻止所有用户事件脚本触发:
// 示例:加载供应商记录并禁用用户事件保存 const vendorRecord = record.load({ type: record.Type.VENDOR, id: 123 // 替换为你的目标供应商ID }); // 执行你需要的前置修改操作 const savedVendorId = vendorRecord.save({ enableSourcing: false, // 根据你的业务需求调整,可选 ignoreMandatoryFields: false, // 可选,按需设置 disableTriggers: true // 核心参数:禁用所有用户事件脚本 });
针对你的场景的解释
你遇到的RCRD_HAS_BEEN_CHANGED错误,本质是因为保存供应商记录时触发的用户事件脚本修改了记录,导致后续你添加地址和联系人时,记录的版本号已经发生变化,系统判定记录被其他操作修改了。通过设置disableTriggers: true,可以直接阻止这些用户事件脚本运行,避免记录被意外篡改,从根源上解决版本冲突问题。
一些需要注意的点
disableTriggers会禁用所有用户事件脚本(包括beforeLoad、beforeSubmit、afterSubmit),如果有某些用户事件逻辑是必须执行的,你需要考虑在保存后手动调用对应的逻辑,或者拆分操作。- 如果你的业务场景中还有工作流会被触发,可能需要同时在save选项里添加
disableWorkflows: true,但这要根据你的实际需求来决定。 - 确保你的脚本角色有足够权限使用这个参数:通常管理员角色或者拥有对应记录完全权限的角色可以正常使用,部分受限角色可能会被限制。
内容的提问来源于stack exchange,提问作者SnakeMan2058
相关产品推荐
相关产品推荐

