NetSuite:通过SuiteScript开发发票PDF发送按钮
解决方案
1. 给发票添加仅管理员可见的查看模式按钮(SuiteScript 2.x)
使用User Event脚本在发票记录加载时判断角色和模式,动态添加按钮:
/** * @NApiVersion 2.x * @NScriptType UserEventScript */ define(['N/runtime', 'N/ui/serverWidget'], (runtime, serverWidget) => { const beforeLoad = (context) => { const currentUser = runtime.getCurrentUser(); const recordMode = context.mode; // 仅管理员角色 + 查看模式下显示按钮 if (currentUser.roleId === '3' && recordMode === context.UserEventType.VIEW) { const form = context.form; form.addButton({ id: 'custpage_send_email_btn', label: 'SEND EMAIL', functionName: 'sendInvoiceEmail()' }); // 关联客户端脚本 form.clientScriptModulePath = './invoice_send_email_cs.js'; } }; return { beforeLoad }; });
2. 点击按钮发送带PDF附件的邮件
需要配合Client Script触发请求,以及Suitelet处理PDF生成和邮件发送:
客户端脚本(invoice_send_email_cs.js)
/** * @NApiVersion 2.x * @NScriptType ClientScript */ define(['N/url', 'N/currentRecord'], (url, currentRecord) => { const sendInvoiceEmail = () => { const invoiceRec = currentRecord.get(); const invoiceId = invoiceRec.id; // 构建Suitelet请求地址 const suiteletUrl = url.resolveScript({ scriptId: 'customscript_invoice_email_suitelet', deploymentId: 'customdeploy_invoice_email_suitelet', params: { 'invoice_id': invoiceId } }); // 发起请求 window.location.href = suiteletUrl; }; return { sendInvoiceEmail }; });
Suitelet脚本(处理PDF生成与邮件发送)
/** * @NApiVersion 2.x * @NScriptType Suitelet */ define(['N/record', 'N/email', 'N/render', 'N/runtime'], (record, email, render, runtime) => { const onRequest = (context) => { const invoiceId = context.request.parameters.invoice_id; if (!invoiceId) return; // 生成发票PDF附件 const pdfFile = render.transaction({ entityId: invoiceId, printMode: render.PrintMode.PDF }); // 获取发票关联信息 const invoiceRec = record.load({ type: record.Type.INVOICE, id: invoiceId }); const customerEmail = invoiceRec.getValue({ fieldId: 'email' }); const invoiceNumber = invoiceRec.getValue({ fieldId: 'tranid' }); // 发送邮件 email.send({ author: runtime.getCurrentUser().id, recipients: customerEmail, subject: `Invoice ${invoiceNumber} Attached`, body: 'Please find your invoice attached below.', attachments: [pdfFile] }); // 返回操作结果 context.response.write('Email sent successfully!'); }; return { onRequest }; });
关键注意点
- 默认管理员角色ID为
3,若使用自定义管理员角色,需替换为对应角色ID - 部署脚本时需确保分配了发票查看、邮件发送、PDF生成的权限
- 可根据业务需求调整邮件收件人、主题、正文内容
内容的提问来源于stack exchange,提问作者nexiv
相关产品推荐
相关产品推荐

