SuiteScript 2.0:addressbookaddress子记录调用setValue报错求助
解决NetSuite ClientScript中CurrentSubrecord.setValue不支持的问题
这个报错的核心原因是:你通过getCurrentSublistSubrecord获取到的addressbookaddress子记录是只读实例,这类实例只支持读取操作(比如getValue),不允许修改字段值。
在NetSuite 2.x ClientScript中,要修改子记录的内容,你需要使用editCurrentSublistSubrecord方法来获取可编辑的子记录实例。下面是修改后的代码:
/** *@NApiVersion 2.0 *@NScriptType ClientScript */ define(["N/currentRecord"], function(currentRecord){ /* Copy phone number from vendor to address, when creating a new sublist entry */ var lineInit = function(context) { var record = context.currentRecord; var sublistId = context.sublistId; // 使用editCurrentSublistSubrecord获取可编辑的子记录 var subrecord = record.editCurrentSublistSubrecord({ sublistId: sublistId, fieldId: 'addressbookaddress' }); if (!subrecord) { return; } var address = subrecord.getValue({ fieldId: 'addr1' }); // 现在可以正常调用setValue修改字段值 subrecord.setValue({ fieldId: 'addr1', value: 'test' }); return; } return { lineInit: lineInit, } });
额外说明:
getCurrentSublistSubrecord返回的是子记录的只读快照,适合仅需读取数据的场景;而editCurrentSublistSubrecord会打开子记录的编辑会话,允许你修改字段值。- 在ClientScript中操作可编辑子记录时,无需手动调用
beginEdit或commit方法,修改后的内容会自动同步到主记录的子列表行中。 - 确保你的脚本在正确的上下文下运行:
lineInit事件是在子列表行初始化时触发,此时使用editCurrentSublistSubrecord是合法的,不会有上下文权限问题。
内容的提问来源于stack exchange,提问作者J Net
相关产品推荐
相关产品推荐

