NetSuite开发/管理员咨询:如何通过脚本/工作流集成PDF合并工具合并发票PDF
NetSuite集成第三方PDF合并工具实现选中发票PDF合并
可行性确认
完全可行,主流实现分为两种方向:前端列表页/已保存搜索集成(快速实现)和后端脚本+第三方API(稳定自动化),以下针对你的问题给出具体解决方法。
解决已保存搜索按钮失效问题
你之前尝试的HTML公式无法生效,核心原因是NetSuite已保存搜索的公式列不支持原生JavaScript语法(如map函数),只能使用NetSuite内置公式函数或纯字符串拼接,以下是修正方案:
单条记录合并按钮(已保存搜索快速实现)
编辑目标发票已保存搜索,添加一个**公式(文本)**列,使用以下公式:
'<a href="https://smallpdf.com/merge-pdf#r=organize-merge&print=' || {print} || '" target="_blank"><input type="button" value="PDF Merge" /></a>'
该公式会为每条发票生成一个按钮,点击后将对应发票的打印URL传递到Smallpdf合并页面。
批量选中合并(进阶方案)
如果需要批量合并选中的发票,需通过客户端脚本实现:
- 创建客户端脚本,代码如下:
function mergeSelectedPDFs() { var selectedRecords = nlapiGetSelectedRecords(); var printParams = []; if (selectedRecords.length === 0) { alert('请至少选中一条发票记录'); return; } // 遍历选中记录,构造打印参数 for (var i = 0; i < selectedRecords.length; i++) { var recId = selectedRecords[i].getId(); // 生成发票打印URL,可替换为指定打印模板ID var printUrl = nlapiResolveURL('PRINT', 'invoice', recId, 'DEFAULT'); printParams.push('print[]=' + encodeURIComponent(printUrl)); } // 拼接合并URL并打开 var mergeUrl = 'https://smallpdf.com/merge-pdf#r=organize-merge&' + printParams.join('&'); window.open(mergeUrl, '_blank'); }
- 部署脚本:在NetSuite中创建脚本部署,将该客户端脚本绑定到发票记录列表页或指定的已保存搜索结果页面,设置按钮标签为「批量合并PDF」。
后端API集成方案(自动化场景)
如果需要更稳定的自动化合并(如定时合并、自动存档到文件柜),可通过SuiteScript调用第三方PDF合并API(如Smallpdf官方API):
- 申请第三方API密钥(以Smallpdf为例),获取调用权限。
- 创建RESTlet或计划脚本,核心逻辑如下:
function mergePDFsViaAPI() { // 可替换为已保存搜索获取的发票ID,或前端选中的ID集合 var invoiceIds = [1001, 1002, 1003]; var pdfContents = []; // 批量获取发票PDF二进制内容 for (var i = 0; i < invoiceIds.length; i++) { var pdfData = nlapiPrintRecord('invoice', invoiceIds[i], 'PDF', null); pdfContents.push({ filename: `Invoice_${invoiceIds[i]}.pdf`, content: pdfData }); } // 调用第三方合并API,替换为官方接口及认证信息 var requestHeaders = { 'Authorization': 'Bearer YOUR_API_KEY', 'Content-Type': 'application/json' }; var mergeResponse = nlapiRequestURL( 'https://api.smallpdf.com/v1/merge', JSON.stringify({ files: pdfContents }), requestHeaders, 'POST' ); // 处理合并结果,保存到NetSuite文件柜 if (mergeResponse.getCode() === 200) { var mergedPdf = mergeResponse.getBody(); nlapiCreateFile('Merged_Invoices.pdf', 'PDF', mergedPdf); } }
常见问题解答
- 为什么之前的脚本无法在已保存搜索运行?
已保存搜索的公式列仅支持NetSuite内置公式函数,无法执行原生JavaScript;客户端脚本需通过脚本部署绑定到记录列表页,而非直接嵌入已保存搜索。 - 如何创建触发脚本的按钮?
通过「脚本部署」页面,设置脚本应用的记录类型、页面(如列表页),并配置按钮标签和位置即可。
内容的提问来源于stack exchange,提问作者Caos
相关产品推荐
相关产品推荐

