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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 14:30:53