How to use nlapiXMLToPDF within a suitelet(如何在Suitlet中使用nlip iXMLToPDF)
本文介绍了如何在Suitlet中使用nlip iXMLToPDF的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
当前使用Suitescript 1.0创建邮件合并pdf生成器。这就是我构建它的方式--有4个脚本(1个用户事件、1个客户端脚本和2个Suitlet)。 用户事件脚本生成一个下拉菜单,显示它部署到的任何记录上的所有可用模板。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))
}
}
}
客户端脚本的用途是充当两个Suitlet和部署它的记录之间的调解器。
function verifyList(types, name, linenum){
if(name == 'custpage_mail_merge_dropdown'){
var field = nlapiGetField(name);
var fileName = nlapiGetFieldText(name);
var suiteletUrl = nlapiResolveURL("SUITELET", script_id_1, 1);
var response = nlapiRequestURL(suiteletUrl+"&fileName="+fileName);
var fileContent = "";
if(response.getBody()){
fileContent = response.getBody();
nlapiLogExecution('DEBUG', 'STATUS', 'Client script activated '+ JSON.stringify(fileContent));
var renderedFile = ejs.render(fileContent, {});
var suiteletPdfUrl = nlapiResolveURL("SUITELET", script_id_2, 1);
var response2 = nlapiRequestURL(suiteletPdfUrl+"&ejsCompiled="+renderedFile);
nlapiLogExecution('DEBUG', 'STATUS', 'Client script activated '+ JSON.stringify(renderedFile));
}
}
}
第一个Suitlet的目的是加载从下拉列表中选择的模板并将其返回到客户端,在客户端使用ejs.render()
进行转换套件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);
}
}
第二个Suitlet(应该)有助于基于传递给客户端脚本的第一个Suitlet的转换内容创建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))
}
}
从下拉列表中选择一个选项时,系统会显示以下消息:
在此页面上运行的脚本中出现意外错误(&Q)...意外错误&
这是用于测试的模板。这正是nlate iXMLToPDF将作为参数使用的字符串。
<pdf>
<head>
</head>
<body>
<h1>Template One</h1>
</body>
</pdf>
这就是让我困惑的地方,字符串对我来说似乎完全没有问题,但我总是收到这个奇怪的错误。如果你们中的任何人能提供任何关于问题可能是什么的见解,将不胜感激。请原谅我冗长的帖子,我认为张贴用于解决问题的大部分代码会很有用。
推荐答案
您的模板似乎缺少BFO模板引擎所需的xml和DOCTYPE声明(请参见BFO User Guide的第8页)。
尝试在模板字符串的乞求处添加以下内容:
<?xml version="1.0"?>
<!DOCTYPE pdf PUBLIC "-//big.faceless.org//report" "report-1.1.dtd">
这篇关于如何在Suitlet中使用nlip iXMLToPDF的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:如何在Suitlet中使用nlip iXMLToPDF


猜你喜欢
- 如何使用 JSON 格式的 jQuery AJAX 从 .cfm 页面输出查 2022-01-01
- addEventListener 在 IE 11 中不起作用 2022-01-01
- Flexslider 箭头未正确显示 2022-01-01
- Css:将嵌套元素定位在父元素边界之外一点 2022-09-07
- 使用RSelum从网站(报纸档案)中抓取多个网页 2022-09-06
- 失败的 Canvas 360 jquery 插件 2022-01-01
- CSS媒体查询(最大高度)不起作用,但为什么? 2022-01-01
- Quasar 2+Apollo:错误:找不到ID为默认的Apollo客户端。如果您在组件设置之外,请使用ProvideApolloClient() 2022-01-01
- Fetch API 如何获取响应体? 2022-01-01
- 400或500级别的HTTP响应 2022-01-01