NetSuite UserEvent中Form.addField添加的字段值无法保存求助
解决Price Level自定义复选框无法保存值的问题
问题根源
你使用的custpage_syncbox是临时页面字段(以custpage_为前缀),这类字段仅在当前页面会话中有效,不会被持久化存储到Price Level实体记录里,所以提交后值必然丢失。
可行解决方法
方法1:创建真正的自定义实体字段(推荐方案)
这是最直接的解决方式,让字段和Price Level记录绑定,自动实现值的存储:
- 在NetSuite后台创建一个属于Price Level实体的自定义复选框字段(示例ID设为
custentity_price_sync) - 修改
beforeLoad脚本,直接操作这个实体字段:
function beforeLoad(scriptContext) { let objPriceLevel = scriptContext.newRecord; let form = scriptContext.form; try { // 如果字段已添加到Price Level表单,直接获取;未添加则用addField添加(注意用实体字段ID,不是custpage_前缀) let fldSyncBox = form.getField({ id: "custentity_price_sync" }); // 若需动态添加字段,取消下方注释 // let fldSyncBox = form.addField({ // id: "custentity_price_sync", // label: "Sync", // type: serverWidget.FieldType.CHECKBOX, // }); let bolPriceSync = objPriceLevel.getValue("custentity_price_sync"); log.debug("bolPriceSync", bolPriceSync); fldSyncBox.defaultValue = bolPriceSync; } catch (err) { log.error("beforeLoad", err.message || err.name || JSON.stringify(err)); } }
修改后,字段值会和Price Level记录一同保存,无需额外处理。
方法2:脚本临时存储值(仅适用于无法创建实体字段的场景)
如果受限于权限或系统配置无法创建实体字段,可通过自定义记录存储值,结合afterSubmit和beforeLoad脚本实现值的传递:
- afterSubmit脚本:提交时把复选框值存入自定义记录(关联当前Price Level的ID)
function afterSubmit(scriptContext) { let objPriceLevel = scriptContext.newRecord; let syncValue = objPriceLevel.getValue("custpage_syncbox"); let priceLevelId = objPriceLevel.id; // 创建或更新自定义记录(需提前创建名为customrecord_price_sync_setting的自定义记录,包含关联Price Level的字段和存储同步值的复选框字段) let search = search.create({ type: "customrecord_price_sync_setting", filters: [["custrecord_price_level_id", "anyof", priceLevelId]] }).run().getRange({start:0, end:1}); let recCustom; if (search.length > 0) { recCustom = record.load({ type: "customrecord_price_sync_setting", id: search[0].id, isDynamic: true }); } else { recCustom = record.create({ type: "customrecord_price_sync_setting", isDynamic: true }); recCustom.setValue({fieldId: "custrecord_price_level_id", value: priceLevelId}); } recCustom.setValue({fieldId: "custrecord_sync_value", value: syncValue}); recCustom.save(); }
- beforeLoad脚本:加载页面时查询自定义记录,设置复选框默认值
function beforeLoad(scriptContext) { let objPriceLevel = scriptContext.newRecord; let form = scriptContext.form; let priceLevelId = objPriceLevel.id; try { let fldSyncBox = form.addField({ id: "custpage_syncbox", label: "Sync", type: serverWidget.FieldType.CHECKBOX, }); // 查询对应Price Level的存储值 let searchResults = search.create({ type: "customrecord_price_sync_setting", filters: [["custrecord_price_level_id", "anyof", priceLevelId]], columns: ["custrecord_sync_value"] }).run().getRange({start:0, end:1}); let bolPriceSync = false; if(searchResults.length > 0){ bolPriceSync = searchResults[0].getValue("custrecord_sync_value") === "T"; } fldSyncBox.defaultValue = bolPriceSync; } catch (err) { log.error("beforeLoad", err.message || err.name || JSON.stringify(err)); } }
内容的提问来源于stack exchange,提问作者Mil
相关产品推荐
相关产品推荐

