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

如何在NetSuite生成采购订单PDF并同步至Salesforce?求SuiteScript参考

在NetSuite生成采购订单PDF并导出至Salesforce商机附件

核心实现思路

  1. 生成采购订单PDF:利用NetSuite SuiteScript的render模块直接生成指定采购订单的PDF文件,获取其Base64编码内容。
  2. 上传至Salesforce:通过Salesforce REST API将Base64格式的PDF上传为指定商机的附件,需提前完成Salesforce OAuth2认证获取访问令牌。

SuiteScript 2.x 代码示例

以下示例为一个RESTlet脚本,可通过外部触发或NetSuite内部事件调用:

/**
 * @NApiVersion 2.x
 * @NScriptType Restlet
 * @NModuleScope SameAccount
 */
define(['N/render', 'N/https', 'N/log'], function(render, https, log) {
    function post(context) {
        // 验证输入参数:采购订单ID、Salesforce商机ID、Salesforce访问令牌、实例URL
        const poId = context.purchaseOrderId;
        const sfOpportunityId = context.salesforceOpportunityId;
        const sfAccessToken = context.salesforceAccessToken;
        const sfInstanceUrl = context.salesforceInstanceUrl; // 示例:"https://na123.salesforce.com"

        if (!poId || !sfOpportunityId || !sfAccessToken || !sfInstanceUrl) {
            log.error('参数缺失', '必须提供采购订单ID、Salesforce商机ID、访问令牌和实例URL');
            return { success: false, message: '参数不完整' };
        }

        try {
            // 生成采购订单PDF的Base64内容
            const pdfFile = render.transaction({
                entityId: poId,
                printMode: render.PrintMode.PDF,
                formId: -1 // 使用默认打印模板,如需自定义模板可传入对应ID
            });
            const pdfBase64 = pdfFile.getContents();

            // 构造Salesforce附件上传请求体
            const sfAttachmentPayload = {
                ParentId: sfOpportunityId,
                Name: `采购订单_${poId}.pdf`,
                Body: pdfBase64,
                ContentType: 'application/pdf'
            };

            // 调用Salesforce REST API上传附件
            const headers = {
                'Authorization': `Bearer ${sfAccessToken}`,
                'Content-Type': 'application/json'
            };
            const response = https.post({
                url: `${sfInstanceUrl}/services/data/v58.0/sobjects/Attachment`,
                headers: headers,
                body: JSON.stringify(sfAttachmentPayload)
            });

            // 处理Salesforce响应
            if (response.code === 201) {
                const responseBody = JSON.parse(response.body);
                log.debug('上传成功', `Salesforce附件ID:${responseBody.id}`);
                return { success: true, attachmentId: responseBody.id };
            } else {
                log.error('Salesforce API调用失败', `响应码:${response.code},响应内容:${response.body}`);
                return { success: false, message: '上传至Salesforce失败' };
            }
        } catch (e) {
            log.error('执行异常', e.message);
            return { success: false, message: e.message };
        }
    }

    return {
        post: post
    };
});

关键注意事项

  • NetSuite权限配置:
    • 给脚本分配采购订单的查看权限,以及HTTP请求的外部访问权限(路径:设置>公司>功能启用>SuiteCloud>SuiteScript>勾选"允许脚本执行HTTP请求")。
    • 若使用自定义打印模板,需确保脚本有权限访问该模板。
  • Salesforce配置:
    • 提前创建Connected App获取OAuth2认证信息(客户端ID、密钥),通过授权码流获取访问令牌和实例URL。
    • 确保执行API调用的Salesforce用户拥有商机查看权限和附件创建权限。
  • 安全提示:生产环境中请勿硬编码Salesforce访问令牌,建议将敏感信息存储在NetSuite的自定义加密字段中,通过N/keyManager模块读取。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 06:40:20