如何在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
相关产品推荐
相关产品推荐

