如何使用NetSuite高级PDF模板将Suitelet设计导出为PDF?
在销售订单高级PDF模板中调用Suitelet生成PDF的实现方法
完全可以通过调用Suitelet URL的方式,将Suitelet的设计内容嵌入到销售订单的高级PDF模板中,具体实现步骤如下:
1. 配置Suitelet以返回PDF内容
首先需要修改你的Suitelet代码,使其能够接收销售订单ID参数,并返回对应的PDF格式内容:
- 设置Suitelet的返回类型为PDF,在
onRequest函数中使用NetSuite的render模块生成PDF,或者直接输出符合PDF格式的字节流。 - 示例代码:
/** * @NApiVersion 2.x * @NScriptType Suitelet */ define(['N/render', 'N/record'], function(render, record) { function onRequest(context) { var request = context.request; var response = context.response; // 获取传入的销售订单ID var soId = request.parameters.salesorderid; if (!soId) { response.write('Missing sales order ID'); return; } // 加载销售订单记录(按需处理数据) var soRecord = record.load({type: record.Type.SALES_ORDER, id: soId}); // 生成PDF内容(这里可以用自定义模板或Suitelet的HTML渲染后转PDF) var pdfFile = render.createPdf({ xmlString: '<!DOCTYPE html><html><body><h1>销售订单:' + soRecord.getValue('tranid') + '</h1></body></html>' }); // 设置响应头并返回PDF response.setHeader({name: 'Content-Type', value: 'application/pdf'}); response.setHeader({name: 'Content-Disposition', value: 'inline; filename=so_' + soId + '.pdf'}); response.writeFile(pdfFile); } return { onRequest: onRequest }; });
2. 在高级PDF模板中调用Suitelet URL
在销售订单的高级PDF模板中,使用NetSuite提供的nlapiRequestURL函数请求Suitelet的URL,并将返回的PDF内容嵌入到当前PDF中:
- 首先构造Suitelet的完整URL,替换其中的
<accountID>、<scriptID>、<deployID>为你实际的账号ID、脚本ID和部署ID,同时传递当前销售订单的ID作为参数。 - 在模板中添加如下代码(使用Freemarker语法):
<% var suiteletUrl = "https://<accountID>.app.netsuite.com/app/site/hosting/scriptlet.nl?script=<scriptID>&deploy=<deployID>&salesorderid=" + record.id; var suiteletPdf = nlapiRequestURL(suiteletUrl); %> ${suiteletPdf}
- 注意:如果Suitelet返回的是完整的PDF文件内容,直接输出即可;如果是HTML内容,也可以在Suitelet中先转成PDF再返回,确保嵌入后格式正确。
3. 配置权限与测试
- 确保部署Suitelet时,给需要生成销售订单PDF的角色分配访问该Suitelet的权限。
- 测试时,打开销售订单页面,点击“打印”选择对应的高级PDF模板,检查是否成功加载Suitelet生成的PDF内容。
内容的提问来源于stack exchange,提问作者Maira S
相关产品推荐
相关产品推荐

