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

如何在NetSuite报价单表单中添加自定义按钮?

在NetSuite报价单表单添加自定义按钮的规范方法

核心思路

N/ui/serverWidget是服务器端专属模块,客户端脚本无法调用。规范做法是用用户事件脚本(服务器端)在表单加载前添加按钮,搭配客户端脚本处理按钮点击逻辑,绝对不要直接修改DOM(易随NetSuite版本更新失效,且不被官方支持)。

详细步骤

1. 创建并部署用户事件脚本(负责添加按钮)

用户事件脚本的beforeLoad阶段在服务器端执行,可合法调用N/ui/serverWidget操作表单:

  • 新建用户事件脚本,代码示例:
/**
 * @NApiVersion 2.x
 * @NScriptType UserEventScript
 */
define(['N/ui/serverWidget', 'N/url'], function(serverWidget, url) {
    function beforeLoad(context) {
        // 仅在查看/编辑模式下添加按钮(按需调整适用场景)
        if (context.type === context.UserEventType.VIEW || context.type === context.UserEventType.EDIT) {
            var form = context.form;
            // 添加自定义按钮:参数依次为按钮ID、显示标签、触发的客户端函数名
            form.addButton({
                id: 'custpage_custom_estimate_btn',
                label: '我的自定义按钮',
                functionName: 'handleCustomBtnClick'
            });
            // 关联对应的客户端脚本(也可在表单设置中手动关联)
            form.clientScriptModulePath = './custom_estimate_btn_client.js';
        }
    }

    return {
        beforeLoad: beforeLoad
    };
});
  • 部署脚本:将该脚本部署到**报价单(Estimate)**记录类型,部署时勾选Before Load事件,并设置适用的角色权限。

2. 创建客户端脚本(处理按钮点击逻辑)

客户端脚本负责实现按钮点击后的具体功能,代码示例:

/**
 * @NApiVersion 2.x
 * @NScriptType ClientScript
 */
define(['N/ui/dialog', 'N/record'], function(dialog, record) {
    function handleCustomBtnClick() {
        // 示例1:弹出提示框
        dialog.alert({
            title: '操作提示',
            message: '自定义按钮已触发!'
        });

        // 示例2:获取当前报价单ID并执行逻辑
        var currentRecId = record.id;
        console.log('当前报价单ID:', currentRecId);
        // 可继续添加创建记录、调用接口等业务逻辑
    }

    return {
        onCustomButtonClick: handleCustomBtnClick
    };
});
  • 上传客户端脚本到NetSuite,确保用户事件脚本中的clientScriptModulePath指向正确的脚本文件路径,也可直接在报价单的自定义表单设置中关联该脚本。

3. 验证效果

打开任意报价单的查看/编辑页面,就能看到自定义按钮,点击后会执行客户端脚本中定义的逻辑。

可选简化方式(无需客户端脚本)

如果按钮仅需跳转功能(比如跳转到Suitelet、报表),可直接在用户事件脚本中指定url参数,无需客户端脚本:

form.addButton({
    id: 'custpage_jump_to_suitelet',
    label: '跳转到自定义页面',
    url: url.resolveScript({
        scriptId: 'customscript_my_suitelet',
        deploymentId: 'customdeploy_my_suitelet'
    })
});

注意事项

  • 权限控制:确保部署脚本的角色拥有相关脚本、记录的访问权限;
  • 场景适配:可根据需求调整beforeLoad中判断的表单模式(比如新增模式也显示按钮)。

内容的提问来源于stack exchange,提问作者d.k

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 12:43:08