如何在NetSuite生成采购订单PDF并同步至Salesforce?求SuiteScript参考
在NetSuite生成采购订单PDF并导出至Salesforce商机附件
核心实现思路
- 生成采购订单PDF:利用NetSuite SuiteScript的
render模块直接生成指定采购订单的PDF文件,获取其Base64编码内容。 - 上传至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
相关产品推荐
相关产品推荐

