Javascript 自定义打印发票按钮出现问题时,记录中的数据会被拖到表单中,但公司徽标会丢失

Javascript 自定义打印发票按钮出现问题时,记录中的数据会被拖到表单中,但公司徽标会丢失,javascript,netsuite,suitescript,suitescript2.0,Javascript,Netsuite,Suitescript,Suitescript2.0,长话短说,我对添加到销售订单中的按钮有一些困难。该按钮是通过beforeLoad上的UE脚本添加的,该脚本与客户端脚本中的一个函数相关联,该脚本使用由记录数据填充的高级pdf/html模板单击打开suitelet 通常,如果要在销售订单上输入“编辑”,则可以选择表单,保存表单,然后单击“打印”时,将打开一个新窗口选项卡,其中包含填充的模板和公司徽标。我们有多个子公司和地点,模板使用if逻辑查找正确的徽标。按钮是一种更快、更有效的解决方案,但存在一个问题 当您单击该按钮时,它将打开一个选项卡以下载

长话短说,我对添加到销售订单中的按钮有一些困难。该按钮是通过beforeLoad上的UE脚本添加的,该脚本与客户端脚本中的一个函数相关联,该脚本使用由记录数据填充的高级pdf/html模板单击打开suitelet

通常,如果要在销售订单上输入“编辑”,则可以选择表单,保存表单,然后单击“打印”时,将打开一个新窗口选项卡,其中包含填充的模板和公司徽标。我们有多个子公司和地点,模板使用if逻辑查找正确的徽标。按钮是一种更快、更有效的解决方案,但存在一个问题

当您单击该按钮时,它将打开一个选项卡以下载suitelet,然后当您打开它时,您会看到包含所有数据但没有徽标的发票。有时我也会遇到XML解析器错误。以下位是正在使用的套件脚本代码:


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尽管这个答案不是直接的解决方案,但我们确实发现我们的问题在模板中。非常感谢你的帮助!