NetSuite求助:Item Receipt表单Landed Cost Per Line复选框脚本问题排查
问题分析与解决方案
第一个脚本的错误
你的第一个脚本能取消勾选但报错,核心问题是if语句缺少代码块包裹:
if (context.mode == 'create' || context.mode == 'edit') var currentRec = context.currentRecord; currentRec.setValue({...}); // 这里的currentRec在mode不匹配时会是undefined
当页面mode不是create/edit时,currentRec没有被定义,执行currentRec.setValue就会抛出Cannot read properties of undefined错误,同时错误会中断后续脚本执行,导致子标签切换受影响。
另外,设置复选框值时,用布尔值false比字符串'F'更适配客户端脚本的规范(两种写法NetSuite都支持,但布尔值更不易出错)。
修正后的第一个脚本:
/** *@NApiVersion 2.x *@NScriptType ClientScript */ define(['N/error', 'N/record'], function(error, record){ function pageInit(context){ // 用花括号包裹if内的所有代码 if (context.mode == 'create' || context.mode == 'edit') { var currentRec = context.currentRecord; currentRec.setValue({ fieldId: 'landedcostperline', value: false // 改用布尔值 }); } } return{ pageInit : pageInit }; });
第二个脚本的错误
第二个脚本完全无效,是因为你误用了API:submitFields()是服务器端专用方法(属于N/record模块的静态方法,需要传入记录ID才能调用),而客户端的context.currentRecord是当前页面的记录实例,不能直接调用这个方法。客户端修改当前记录字段必须用setValue()。
额外注意事项
- 确认脚本已正确部署到Item Receipt记录类型,且部署状态为已启用
- 检查脚本的权限设置,确保部署的角色有足够权限修改Item Receipt的
landedcostperline字段
内容的提问来源于stack exchange,提问作者Zarah
相关产品推荐
相关产品推荐

