netsuite - 为什么此高级 PDF 模板没有填充我传递给它的对象中的术语?
问题描述
因此,基本上我正在尝试获取 PDF 的 XML 模板,并且我计划在使模板以这种方式工作后最终在代码中添加一些额外的 XML。但是,当我尝试将数据源对象传递给 PDF 时,它不起作用。有谁知道这个问题的原因,以及我在这里做错了什么?
XML 模板(除去表中的变量以外的所有内容进行测试):
<?xml version="1.0"?><!DOCTYPE pdf PUBLIC "-//big.faceless.org//report" "report-1.1.dtd">
<pdf>
<!--removed lengthy head to make code more readable-->
<body footer="nlfooter" footer-height="20pt" padding="0.5in 0.5in 0.5in 0.5in" size="Letter">
<table class="body" style="width: 100%; margin-top: 10px;">
<tr>
<td>${jsonObj.terms}</td>
</tr></table>
</body>
</pdf>
脚本:
/**
* @NApiVersion 2.x
* @NScriptType UserEventScript
* @NModuleScope SameAccount
*/
define(['N/error','N/render','N/file','N/record','N/log'],
/**
* @param {error} error
*/
function(error, render, file, record, log) {
function beforeSubmit(context) {
log.debug('After submitting invoice, create advanced PDF detail layout', context);
var isInvoice = context.newRecord.type == 'invoice';
// Create advanced PDF
if (isInvoice){
log.audit('Creating invoice');
renderRecordToPdfWithTemplate(context.newRecord);
}
else{
error.create({
name: 'ERROR_RECEIVED',
message: 'Cannot create advanced PDF from this record type'
});
log.audit(error.name,error.message);
}
}
return {
beforeSubmit: beforeSubmit
};
function renderRecordToPdfWithTemplate(context) {
var jsonObj = {
terms: "test terms"
};
var templateId = '7959'; // ID of the XML
var templateFile = file.load({id: templateId});
var renderer = render.create();
renderer.templateContent = templateFile.getContents();
/*
renderer.addRecord({
type: record.Type.INVOICE,
record: context
});
*/
renderer.addCustomDataSource({
format: render.DataSource.OBJECT,
alias: "jsonObj",
data: jsonObj
});
log.debug('Rendering as PDF');
var renderXmlAsString = renderer.renderAsString();
log.debug('Added record to PDF', context);
var invoicePdf = render.xmlToPdf({
xmlString: renderXmlAsString
});
invoicePdf.name = 'Testpdf2.pdf';
invoicePdf.folder = -15;
try{
var fileId = invoicePdf.save();
log.debug('Saved PDF to file '+fileId);
}
catch(e){
alert('Error saving file');
log.debug('Error saving file');
debugger;
}
}
});
解决方案
您不需要,renderer.renderAsString();
因为您已经从文件柜加载 XML。
function renderRecordToPdfWithTemplate(context) {
var jsonObj = {
terms: "test terms"
};
var templateId = '7959'; // ID of the XML
var templateFile = file.load({id: templateId});
var renderer = render.create();
renderer.templateContent = templateFile.getContents();
renderer.addCustomDataSource({
format: render.DataSource.OBJECT,
alias: "jsonObj",
data: jsonObj
});
log.debug('Rendering as PDF');
var invoicePdf = renderer.renderAsPdf();
invoicePdf.name = 'Testpdf2.pdf';
invoicePdf.folder = -15;
try{
var fileId = invoicePdf.save();
log.debug('Saved PDF to file '+fileId);
}
catch(e){
alert('Error saving file');
log.debug('Error saving file');
debugger;
}
}
推荐阅读
- jquery - Data-toggle 禁用里面的 a 标签
- c# - Visual-Studio 2017 中的自动格式化 lambda 函数
- sql - 来自 MS Access 的 SQL 复制查询
- node.js - React-Router vs Node.js
- latex - Pandoc 在重新定义 \part 时从 .tex 到 .docx 产生错误
- typescript - 在 TypeScript 类型中使一些属性可选
- angular - 如何在 Angular 应用程序中使用片段向锚滚动添加平滑(或任何过渡)?
- ssis - 使用脚本任务组件中的自定义代码将数据导出到 Azure Data Lake Store
- salesforce - 使用 sObject 动态更改字段值
- amazon-ec2 - 在队列中的消息数量增加时创建新的 EC2 实例