如何在NetSuite SuiteScript中压缩PDF与XML文件并存入文件柜?
NetSuite Suitelet 实现PDF+XML文件压缩为ZIP并存储到文件柜
你可以借助NetSuite的N/compress模块,直接将生成的PDF和XML文件打包成ZIP后存入文件柜,无需单独保存两个原文件(如果业务需要保留原文件,也可以保留原保存逻辑,再从文件柜获取文件对象添加到压缩包)。以下是修改后的完整脚本:
/** *@NApiVersion 2.1 *@NScriptType Suitelet */ define(['N/file', 'N/redirect', 'N/record', 'N/runtime', 'N/search', 'SuiteScripts/invoice_module_refactored', 'N/compress'], function (file, redirect, record, runtime, search, pdfModule, compress) { function onRequest(context) { // 获取请求参数中的记录ID和类型 var recordId = context.request.parameters.recordId; log.debug("recordId", recordId); var recordType = 'invoice'; // 生成PDF文件对象 var pdfFile = pdfModule.getPDF(recordType, recordId); log.debug("pdfFile", pdfFile); // 注:若无需单独保留原PDF,可跳过单独保存步骤,直接用于压缩 // 生成XML文件对象 // 请确保xmlContent变量已通过业务逻辑正确生成XML内容 var xmlFile = file.create({ name: 'E-Invoice_' + recordId + '.xml', fileType: file.Type.PLAINTEXT, contents: xmlContent }); log.debug("xmlFile", xmlFile); // 注:若无需单独保留原XML,可跳过单独保存步骤,直接用于压缩 // 创建ZIP归档对象 var zipArchive = compress.createArchive({ type: compress.Type.ZIP }); // 将PDF和XML文件添加到ZIP包 zipArchive.addFile({file: pdfFile}); zipArchive.addFile({file: xmlFile}); // 将ZIP归档转为可保存的文件对象 var zipFile = file.create({ name: 'E-Invoice_Package_' + recordId + '.zip', fileType: file.Type.ZIP, contents: zipArchive.toByteArray() }); // 指定存储的目标文件夹ID zipFile.folder = 12823; // 保存ZIP文件到文件柜 var zipFileId = zipFile.save(); log.debug("zipFileId", zipFileId); } return { onRequest: onRequest }; });
关键说明:
- 压缩核心逻辑:通过
compress.createArchive()创建ZIP类型的归档对象,再用addFile()方法将生成的PDF、XML文件对象添加进压缩包 - 存储优化:如果不需要单独保留PDF和XML原文件,可删除原脚本中的
pdfFile.save()和xmlFile.save()步骤,直接用未保存的文件对象打包,减少文件柜冗余存储 - 变量检查:请确认
xmlContent变量已通过你的业务逻辑正确生成XML内容,否则XML文件会为空 - 文件夹ID:请确认
12823是目标存储文件夹的正确ID,按需修改即可
内容的提问来源于stack exchange,提问作者Maira S
相关产品推荐
相关产品推荐

