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

SuiteScript 2.1中dialog.confirm().then报错问题求助

问题原因
  • NetSuite的UserEvent脚本(beforeSubmit阶段)属于服务器端脚本,运行在NetSuite服务器环境中,而非用户浏览器里。
  • N/ui/dialog模块在服务器端的实现是同步逻辑,dialog.confirm()直接返回布尔值,而非官方文档中针对客户端脚本场景描述的Promise对象。
  • 你在服务器端脚本中尝试对非Promise对象调用.then(),因此触发TypeError报错。
修复方案

要实现编辑已打印拣货单的销售订单时弹出确认对话框,必须改用客户端脚本(Client Script),利用saveRecord事件拦截保存操作,在用户浏览器中弹出确认框。以下是修改后的代码:

define(['N/ui/dialog', 'N/log'], function(dialog, log) {
    /**
    * @NApiVersion 2.1
    * @NScriptType ClientScript
    */

    function saveRecord(context) {
        var currentRecord = context.currentRecord;
        var orderStatus = currentRecord.getValue({fieldId: 'status'});
        
        // 仅处理未结账的订单
        if (orderStatus !== 'Billed') {
            var hasPrintedPickTicket = currentRecord.getValue({fieldId: 'printedpickingticket'});
            
            // 直接读取订单内置的打印状态字段,替代系统笔记查询,提升性能
            if (hasPrintedPickTicket === true) {
                var options = {
                    title: 'WARNING: Pick Ticket Printed',
                    message: 'The pick ticket has already been printed for this sales order. Are you sure you want to edit?'
                };
                
                // 客户端环境下dialog.confirm返回Promise,通过.then()处理用户选择
                return dialog.confirm(options)
                    .then(function(confirmResult) {
                        return confirmResult; // 用户确认则返回true允许保存,取消则返回false阻止保存
                    })
                    .catch(function(error) {
                        log.error('Dialog Error', error);
                        return false; // 出错时阻止保存
                    });
            }
        }
        
        return true; // 无需确认时直接允许保存
    }

    return {
        saveRecord: saveRecord
    };
});
关键优化说明
  • 切换为客户端脚本的saveRecord事件:该事件运行在用户浏览器中,完全支持dialog.confirm()的Promise返回值。
  • 替换系统笔记查询:直接读取销售订单的printedpickingticket字段,避免高开销的系统笔记搜索,大幅提升脚本效率。
  • 利用事件返回值控制保存:saveRecord事件返回true则允许保存,返回false则阻止保存,完美匹配需求逻辑。
部署步骤
  1. 将脚本类型设置为Client Script。
  2. 部署到目标销售订单表单,勾选Save Record事件。
  3. 确保用户角色拥有printedpickingticket字段的读取权限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 11:21:03