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

如何在用户事件脚本抛出错误后保留发票行项目值?

问题描述

我开发了行级金额校验的用户事件脚本,当金额无效时抛出错误。但用户输入无效金额并看到错误后返回,发票上的对应行项目会消失。请问是否可以保留这些行项目?

附上原脚本:

function beforeSubmit(context) {
    // Loop through each line item
    for (var i = 0; i < lineCount; i++) {
        var lineAmount = invoiceRecord.getSublistValue({
            sublistId: "item",
            fieldId: "amount",
            line: i,
        });

        if(lineAmount==0)
        {
            throw("invalid amount");
        }
      
    }
}
解决方案

问题根源在于你用了服务器端beforeSubmit事件抛错——NetSuite的服务器端事件抛出错误会触发整个提交事务回滚,用户当前未保存的行项目会被重置,自然就消失了。要保留行项目,得换校验方式:

方案1:改用客户端脚本做实时校验

客户端脚本在浏览器端运行,校验不通过时只阻止保存,不会重置页面内容,完美保留用户输入的行项目。示例代码如下:

// 客户端脚本的saveRecord事件
function saveRecord(context) {
    var currentRecord = context.currentRecord;
    var lineCount = currentRecord.getLineCount({ sublistId: "item" });

    for (var i = 0; i < lineCount; i++) {
        var lineAmount = currentRecord.getSublistValue({
            sublistId: "item",
            fieldId: "amount",
            line: i
        });

        // 校验金额,可根据需求调整判断逻辑
        if (lineAmount === 0 || isNaN(lineAmount)) {
            alert(`第${i+1}行金额无效,不能为0或非数字`);
            return false; // 返回false阻止保存,页面内容完全保留
        }
    }
    return true; // 校验通过,允许提交
}

配置这个客户端脚本时,记得绑定到发票记录的saveRecord事件,同时设置适用的表单。

方案2:服务器端脚本不抛错,改用页面错误提示(备选)

如果必须依赖服务器端数据做校验(比如需要查询其他系统数据),可以在beforeSubmit事件里不抛出错误,而是用context.form.setError()给对应行的金额字段标记错误,这样不会触发回滚,用户输入的行项目会保留。示例:

function beforeSubmit(context) {
    var invoiceRecord = context.newRecord;
    var lineCount = invoiceRecord.getLineCount({ sublistId: "item" });
    var form = context.form;

    for (var i = 0; i < lineCount; i++) {
        var lineAmount = invoiceRecord.getSublistValue({
            sublistId: "item",
            fieldId: "amount",
            line: i,
        });

        if(lineAmount == 0) {
            // 给对应行的金额字段设置错误提示
            form.setSublistError({
                sublistId: "item",
                fieldId: "amount",
                line: i,
                message: "金额无效,不能为0"
            });
            // 可继续校验其他行,NetSuite会自动阻止提交并显示所有错误
        }
    }
}

注意:这种方式需要确保脚本运行在beforeSubmit的create或edit上下文,且form对象可用(批量提交等场景可能无法获取form),所以优先推荐方案1。

内容的提问来源于stack exchange,提问作者Maira S

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 16:25:09