SuiteScript子列表文本字段无法更新问题求助
SuiteScript中Suitelet子列表文本字段无法设置的问题解决
你的问题核心是Suitelet中创建的LIST类型子列表,字段默认处于只读状态,只有显式开启可编辑属性后,文本字段才能被客户端脚本修改。复选框能生效是因为LIST子列表的复选框属于常用选择控件,默认允许交互,但文本字段无此特殊处理。
解决步骤:
给文本字段添加
isEditable: true属性
在Suitelet代码中,为需要修改的文本字段明确设置可编辑权限:修改后的Suitelet代码片段:
function onRequest(context){ var form = ui.createForm({ title: 'Batch Printing' }); form.clientScriptModulePath = "./PrintSuiteletClient.js" var sublist = form.addSublist({ id: 'custpage_itemfulfillments', type: ui.SublistType.LIST, label: 'Item Fulfillments' }); // 给ID字段添加可编辑属性(如需修改) var field = sublist.addField({ id: 'custpage_internalid', label: 'ID', type: ui.FieldType.TEXT, isEditable: true // 新增:开启编辑权限 }); sublist.addField({ id: 'custpage_rec_print', label: 'PRINT', type: ui.FieldType.CHECKBOX }); sublist.addField({ id : 'custpage_type', type : ui.FieldType.TEXT, label : 'Type', isEditable: true // 新增:开启编辑权限 }); // 后续绑定客户端onPrintSelected逻辑 }修复客户端脚本的变量错误
你的客户端脚本函数参数为scriptContext,但内部误用了未定义的pageContext,这会导致潜在报错,需修正:修改后的客户端脚本片段:
function onPrintSelected(scriptContext) { console.log("on mark all") // 替换pageContext为scriptContext var sourceLineCount = scriptContext.currentRecord.getLineCount({sublistId:'custpage_itemfulfillments'}); var curRec = scriptContext.currentRecord try { for (let x = 0; x < sourceLineCount; x++) { // 用let声明变量,避免全局污染 curRec.selectLine({ sublistId: 'custpage_itemfulfillments', line: x }); curRec.setCurrentSublistValue({ sublistId: 'custpage_itemfulfillments', fieldId: 'custpage_rec_print', value: true, ignoreFieldChange: true }); curRec.setCurrentSublistValue({ sublistId: 'custpage_itemfulfillments', fieldId: 'custpage_type', value: "TEST", ignoreFieldChange: false }); curRec.commitLine({ sublistId: 'custpage_itemfulfillments' }); } } catch (ex) { console.log('error:', ex.message); // 打印错误详情,方便排查 } }
原理说明:
NetSuite的ui.SublistType.LIST类型子列表默认是展示用的只读列表,所有字段默认不可编辑。只有通过isEditable: true显式开启字段的编辑权限,客户端脚本才能成功修改其值。
内容的提问来源于stack exchange,提问作者jvoigt
相关产品推荐
相关产品推荐

