You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NetSuite UserEvent中Form.addField添加的字段值无法保存求助

解决Price Level自定义复选框无法保存值的问题

问题根源

你使用的custpage_syncbox是临时页面字段(以custpage_为前缀),这类字段仅在当前页面会话中有效,不会被持久化存储到Price Level实体记录里,所以提交后值必然丢失。

可行解决方法

方法1:创建真正的自定义实体字段(推荐方案)

这是最直接的解决方式,让字段和Price Level记录绑定,自动实现值的存储:

  1. 在NetSuite后台创建一个属于Price Level实体的自定义复选框字段(示例ID设为custentity_price_sync)
  2. 修改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脚本实现值的传递:

  1. 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();
}
  1. 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 11:06:16