Netsuite问题通过Suitelet 2.0使用当前记录数据呈现高级PDF

时间:2019-03-01 20:10:44

标签: netsuite suitescript2.0

问题:我需要根据公开销售订单为空运客户创建一个虚拟包装单。

步骤1:我创建了一个用户事件按钮,该按钮调用了此客户端脚本点击处理程序:

define(['N/url', 'N/currentRecord'], function (url, currentRecord) {
    function pageInit(context) {
    }

 function onButtonClick() {
    var suiteletUrl = url.resolveScript({
        scriptId: 'customscript_zg_drop_packingslip_pdf', // my suitelet script id
        deploymentId: 'customdeploy_zg_drop_packingslip_pdf', // my suitelet deployment id
        returnExternalUrl: false,
      params: {
            custom_id: currentRecord.get().id,
        },
    });

    window.open(suiteletUrl);
}

    exports.onButtonClick = onButtonClick;
    exports.pageInit = pageInit;
    return exports;
});

第2步:我被困在套件中。我希望它从当前记录中提取数据,并将其通过Advanced PDF模板传递,以在新窗口中创建我的托运装箱单。

define(['N/render', 'N/record', 'N/xml'],
function(render, record, xml) {
  function onRequest(context) {
    var id = context.request.parameters.custom_id;
    if (!id) {
        context.response.write('The parameter "custom_id" is required');
        return;
    }
        var renderer = render.create(id);
        renderer.setTemplateByScriptId("CUSTTMPL_128_3768700_732"); // The ID of my Packing Slip Advanced PDF Template
        var myPdf = context.response.write(renderer.templateContent);
    }
    return {
      onRequest:onRequest
    }
})

当前输出未显示为pdf,它随浏览器窗口扩展和缩放。而且,我没有获得当前的记录数据,而是获得了架构浏览器令牌ID。当前看起来像这样:

Fig 1

但是我希望它看起来像这样(实际上是我的高级PDF模板),带有来自当前销售订单的真实数据,以及一个浏览器内pdf,可以保存,打印和通过电子邮件发送。我不需要在文件柜中创建或存储这些文件:

Fig2 如何获得我的套件,以提取未结订单数据并将其从我的模板中转换为pdf?

2 个答案:

答案 0 :(得分:2)

要生成PDF文件时,必须使用:

context.response.writeFile(renderer.renderAsPdf());

renderer.create函数也不接受“ id”:您将在此处找到有关如何生成PDF文件的良好示例:https://system.netsuite.com/app/help/helpcenter.nl?fid=section_4412042824.html

一个例子是:

var renderer = render.create();
renderer.addRecord('saleorder', record.load({
    type: record.Type.SALES_ORDER,
    id: context.request.parameters.custom_id
}));
renderer.setTemplateByScriptId("CUSTTMPL_128_3768700_732");
context.response.writeFile(renderer.renderAsPdf());

答案 1 :(得分:0)

基于帮助文档,render.create不需要id参数。

尝试以下

var renderer = render.create();
renderer.addRecord({
    templateName: 'record',
    record: record.load({
        type: <recordtype>,
        id: <recordid>
        });
    });

var invoicePdf = renderer.renderAsPdf();