部署NetSuite合并发票PDF脚本时遇类型转换错误求助
NetSuite SuiteScript 1.0 报错:无法将发票编号转换为Integer
错误信息
System UNEXPECTED_ERROR 8/22/2023 5:04 pm -System- Cannot convert INVH8437 to java.lang.Integer (SYSTEM_LIBS$NSAPI$sys#758); ID: llmso2pi1v9yvv4a21klp
INVH8437为搜索返回的首个发票编号
问题代码
function sendSevaredentEmails(){ var sResult = new Array(); sResult = nlapiSearchRecord('transaction','customsearch1899'); //load an existing transaction saved search or create a search var xml = "<?xml version=\"1.0\"?>\n<!DOCTYPE pdf PUBLIC \"-//big.faceless.org//report\" \"report-1.1.dtd\">\n"; xml += "<pdfset>"; for (var i = 0; sResult != null && i < sResult.length; i++) { var sColumns = sResult[i].getAllColumns(); //generate invoice printout var pdfFile = nlapiPrintRecord('TRANSACTION', sResult[i].getValue(sColumns[0]),'PDF'); //set target folder in file cabinet pdfFile.setFolder(483765); //Set Available without login to true pdfFile.setIsOnline(true); //store file in cabinet var fileID = nlapiSubmitFile(pdfFile); // load the file to get its URL var fileURL = nlapiLoadFile(fileID).getURL(); var pdf_fileURL = nlapiEscapeXML(fileURL); xml += "<pdf src='"+ pdf_fileURL +"'/'>"; } xml += "</pdfset>"; var consolidatedPDF = nlapiXMLToPDF(xml); nlapiSendEmail('-5', 'rspector@blackstoneind.com', "Subject", 'Body', null, null, null, consolidatedPDF); }
问题原因
nlapiPrintRecord的第二个参数要求传入交易的内部ID(整数类型),但当前代码中sResult[i].getValue(sColumns[0])获取的是发票编号(字符串类型,如INVH8437),导致类型转换失败。- 额外问题:XML拼接时的
<pdf>标签闭合错误,写成了'/'>,会导致后续nlapiXMLToPDF生成合并PDF失败。
解决方案
1. 替换内部ID获取方式
直接使用搜索结果对象的getId()方法获取交易内部ID,无需依赖搜索列顺序:
var transactionId = sResult[i].getId();
这个方法返回的是记录的内部ID(整数),完全符合nlapiPrintRecord的参数要求。
2. 修正XML标签错误
将错误的闭合标签'/'>改为正确的</pdf>:
xml += "<pdf src='"+ pdf_fileURL +"'></pdf>";
3. 可选:验证搜索结果字段
如果坚持使用搜索列获取内部ID,需确保已保存搜索customsearch1899中包含「内部ID」字段,且在代码中正确定位该列。
修正后的完整代码
function sendSevaredentEmails(){ var sResult = nlapiSearchRecord('transaction','customsearch1899'); //load an existing transaction saved search or create a search if (!sResult || sResult.length === 0) return; // 空结果直接退出,避免循环报错 var xml = "<?xml version=\"1.0\"?>\n<!DOCTYPE pdf PUBLIC \"-//big.faceless.org//report\" \"report-1.1.dtd\">\n"; xml += "<pdfset>"; for (var i = 0; i < sResult.length; i++) { // 获取交易内部ID(关键修正) var transactionId = sResult[i].getId(); // 生成发票PDF var pdfFile = nlapiPrintRecord('TRANSACTION', transactionId, 'PDF'); // 设置文件柜存储参数 pdfFile.setFolder(483765); pdfFile.setIsOnline(true); // 保存文件并获取URL var fileID = nlapiSubmitFile(pdfFile); var fileURL = nlapiLoadFile(fileID).getURL(); var pdf_fileURL = nlapiEscapeXML(fileURL); // 修正XML标签闭合 xml += "<pdf src='"+ pdf_fileURL +"'></pdf>"; } xml += "</pdfset>"; var consolidatedPDF = nlapiXMLToPDF(xml); nlapiSendEmail('-5', 'rspector@blackstoneind.com', "Consolidated Invoices", 'Please find attached consolidated invoices.', null, null, null, consolidatedPDF); }
内容的提问来源于stack exchange,提问作者Rob Spector
相关产品推荐
相关产品推荐

