Javascript 自定义打印发票按钮出现问题时,记录中的数据会被拖到表单中,但公司徽标会丢失
长话短说,我对添加到销售订单中的按钮有一些困难。该按钮是通过beforeLoad上的UE脚本添加的,该脚本与客户端脚本中的一个函数相关联,该脚本使用由记录数据填充的高级pdf/html模板单击打开suitelet 通常,如果要在销售订单上输入“编辑”,则可以选择表单,保存表单,然后单击“打印”时,将打开一个新窗口选项卡,其中包含填充的模板和公司徽标。我们有多个子公司和地点,模板使用if逻辑查找正确的徽标。按钮是一种更快、更有效的解决方案,但存在一个问题 当您单击该按钮时,它将打开一个选项卡以下载suitelet,然后当您打开它时,您会看到包含所有数据但没有徽标的发票。有时我也会遇到XML解析器错误。以下位是正在使用的套件脚本代码:Javascript 自定义打印发票按钮出现问题时,记录中的数据会被拖到表单中,但公司徽标会丢失,javascript,netsuite,suitescript,suitescript2.0,Javascript,Netsuite,Suitescript,Suitescript2.0,长话短说,我对添加到销售订单中的按钮有一些困难。该按钮是通过beforeLoad上的UE脚本添加的,该脚本与客户端脚本中的一个函数相关联,该脚本使用由记录数据填充的高级pdf/html模板单击打开suitelet 通常,如果要在销售订单上输入“编辑”,则可以选择表单,保存表单,然后单击“打印”时,将打开一个新窗口选项卡,其中包含填充的模板和公司徽标。我们有多个子公司和地点,模板使用if逻辑查找正确的徽标。按钮是一种更快、更有效的解决方案,但存在一个问题 当您单击该按钮时,它将打开一个选项卡以下载
ProFormaButtonAdd.js ( user event script)
define([],
function() {
function beforeLoad(context) {
if(context.type != context.UserEventType.VIEW){
return;
};
context.form.addButton({
id: "custpage_pfi",
label: "Pro Forma Invoice",
functionName: "onButtonClick"
});
context.form.clientScriptModulePath = "SuiteScripts/ProFormaButtonOnClick.js";
}
return {
beforeLoad: beforeLoad
};
});
ProFormaButtonOnClick.js (client script)
define(['N/url', 'N/currentRecord'],
function(url, currentRecord) {
function onButtonClick() {
var soRec = currentRecord.get();
var suiteletUrl = url.resolveScript({
scriptId: 'customscript_pro_forma_button_suitelet',
deploymentId: 'customdeploy_pro_forma_button_suitelet',
returnExternalUrl: false,
params: {
custom_id: soRec.id
},
});
window.open(suiteletUrl);
};
function pageInit(){}; // this needs to be here in order to use the client script
return {
onButtonClick: onButtonClick,
pageInit: pageInit
};
});
ProFormaButtonSuitelet.js (the suitelet script)
define(['N/render', 'N/record', 'N/xml'],
function(render, record, xml){
function onRequest(context){
var custom_id = context.request.parameters.custom_id;
var pdfFileName = "Pro Forma Invoice";
var renderer = render.create();
var content = renderer.addRecord({ // this is a concern area
templateName: 'record',
record: record.load({
type: record.Type.SALES_ORDER,
id: custom_id
})
});
renderer.setTemplateByScriptId("CUSTTMPL_131_4828307_SB1_226");
context.response.setHeader({
name: 'content-disposition',
value: 'inline; filename="' + pdfFileName + '_' + custom_id + '.pdf"'
});
context.response.writeFile(renderer.renderAsPdf()); // this is a concern area
};
return {
onRequest: onRequest
};
});
我认为可以肯定地说,问题在于suitelet脚本部分,要么是添加到渲染器中的记录中的数据,要么是writeFile(renderer.renderAsPdf())中的数据。我没有找到context.request和context.response语法的API文档
我尝试过在suitelet脚本中使用其他策略,但没有成功。这是我能到达的最近的一次。另一个想法是,可能高级PDF/HTML模板需要更新,但是,正如我前面提到的,当您更改表单并正常打印时,一切正常
我遇到的另一个小问题是,当你点击它想下载为“report.pdf”的按钮时,下一个问题是report(1.pdf),然后是report(2.pdf)等等,但目前公司的徽标是一个大问题
超级感谢任何我能得到的反馈,你们都棒极了 更新:在NS 2021.1中,
无需处理下面的“&”
如果在模板中使用徽标的url作为图像源,请尝试如下方式转义url中的“&”:
img src="${companyInformation.logoUrl?replace('&', '&', 'r')}"
事实上…&打破aptsa中的FreeMarker尽管这个答案不是直接的解决方案,但我们确实发现我们的问题在模板中。非常感谢你的帮助!