Javascript 如何在suitelet中使用nlapiXMLToPDF
目前正在使用Suitescript 1.0创建邮件合并pdf生成器。这就是我构建它的方式——有4个脚本(1个用户事件、1个客户端脚本和2个Suitelet)。 用户事件脚本生成一个下拉菜单,显示它部署到的任何记录上的所有可用模板Javascript 如何在suitelet中使用nlapiXMLToPDF,javascript,netsuite,suitescript,Javascript,Netsuite,Suitescript,目前正在使用Suitescript 1.0创建邮件合并pdf生成器。这就是我构建它的方式——有4个脚本(1个用户事件、1个客户端脚本和2个Suitelet)。 用户事件脚本生成一个下拉菜单,显示它部署到的任何记录上的所有可用模板 function beforeLoad(type, form){ var folderId = "folderId"; var filters = new Array(); filters[0] = new nlobjSearchFil
function beforeLoad(type, form){
var folderId = "folderId";
var filters = new Array();
filters[0] = new nlobjSearchFilter('internalid', null, 'is', folderId);
var columns = new Array();
var filename = new nlobjSearchColumn('name', 'file');
var file_id = new nlobjSearchColumn('internalid', 'file');
var fieldId = "custpage_mail_merge_dropdown";
var fieldLabel = "Mail Merge Dropdown";
var select = form.addField(fieldId, 'select', fieldLabel);
columns[0] = filename;
columns[1] = file_id;
var searchResults = nlapiSearchRecord('folder', null, filters, columns);
if(searchResults){
for(var i = 0; i < searchResults.length; i++){
var f = searchResults[i];
//add values to the dropdown field created earlier in the UI
select.addSelectOption(f.getValue(file_id), f.getValue(filename))
}
}
}
第一个suitelet的目的是加载从下拉列表中选择的模板并将其返回到客户端,在客户端使用ejs.render()进行转换
SUITELET 1
function mail_merge(req, res){
var fileName = req.getParameter('fileName');
if(fileName){
var fileId = "Templates__/"+fileName;
var load_file = nlapiLoadFile(fileId);
var fileContent = load_file.getValue();
res.write(fileContent);
nlapiLogExecution("DEBUG", "STATUS", "Suitelet script activated : "+fileName);
}
}
第二个suitelet(应该是)根据传递给客户端脚本的第一个suitelet转换后的内容,帮助创建PDF文档。
SUITELET 2
function pdf_mail_merge(req, res){
var ejsCompiled = req.getParameter('ejsCompiled');
//Split by </pdf> due to unexpected string tagging along with file content
ejsCompiled = ejsCompiled.split("</pdf>")[0];
ejsCompiled +="</pdf>";
if(ejsCompiled){
nlapiLogExecution('DEBUG', 'STATUS', "EJS Compiled "+ejsCompiled);
try{
var pdf_file = nlapiXMLToPDF(ejsCompiled);
}catch(err){
nlapiLogExecution('DEBUG', 'STATUS', err);
}
res.setContentType("PDF", "somename.pdf");
res.write(pdf_file.getValue());
nlapiLogExecution('DEBUG', 'STATUS', "Second script activated "+JSON.stringify(pdf_file))
}
}
功能pdf\u邮件\u合并(req,res){
var ejsCompiled=req.getParameter('ejsCompiled');
//由于意外的字符串标记和文件内容,按拆分
ejsCompiled=ejsCompiled.split(“”[0];
ejsCompiled+=“”;
如果(ejsCompiled){
nlapiLogExecution('DEBUG','STATUS','EJS Compiled'+ejsCompiled);
试一试{
var pdf_file=nlapiXMLToPDF(ejsCompiled);
}捕捉(错误){
nlapiLogExecution('DEBUG','STATUS','err);
}
res.setContentType(“PDF”、“somename.PDF”);
res.write(pdf_file.getValue());
nlapiLogExecution('DEBUG','STATUS','Second script activated'+JSON.stringify(pdf_文件))
}
}
在从下拉列表中选择选项时,我收到以下消息:
“在此页上运行的脚本中发生意外错误…意外的\u错误”
这是用于测试的模板。这正是nlapiXMLToPDF将用作参数的字符串
<pdf>
<head>
</head>
<body>
<h1>Template One</h1>
</body>
</pdf>
模板一
这就是让我困惑的地方,这根弦对我来说似乎很好,但我一直在犯这个奇怪的错误。如果你们中的任何人能够提供任何关于问题可能是什么的见解,我们将不胜感激。请原谅我的长篇大论,我认为发布用于解决此问题的大部分代码会很有用。您的模板似乎缺少BFO模板引擎所需的XML和DOCTYPE声明(请参阅第8页) 尝试在模板字符串的末尾添加以下内容:
<?xml version="1.0"?>
<!DOCTYPE pdf PUBLIC "-//big.faceless.org//report" "report-1.1.dtd">
<?xml version="1.0"?>
<!DOCTYPE pdf PUBLIC "-//big.faceless.org//report" "report-1.1.dtd">