首页 > 解决方案 > 使用 Netsuite SuiteScripts 2.0 中的高级 PDF 模板将打印按钮添加到供应商信用(查看模式)

问题描述

由于我自己在创建打印按钮时遇到了一些问题,因此我想在此处提供我的脚本来创建打印按钮。我希望它会有所帮助:-)

您只需要集成三个脚本并更改各自脚本中的 ID。

Suitelet 脚本 (vc_print_button_suitelet.js):

    define(['N/render', 'N/record', 'N/xml'], function(render, record, xml) 
   {

  function onRequest(context) {

    var custom_id = context.request.parameters.custom_id;
    var pdfFileName = "vendorcredit";
    var renderer = render.create();
    var content = renderer.addRecord({
      templateName: 'record',
      record: record.load({
        type: record.Type.VENDOR_CREDIT,
        id: custom_id
      })
    });
    renderer.setTemplateByScriptId("CUSTTMPL_112_5298640_SB1_621");
    context.response.setHeader({
      name: 'content-disposition',
      value: 'inline; filename="' + pdfFileName + '_' + custom_id + '.pdf"'
    });
    context.response.writeFile(renderer.renderAsPdf());
  }
  return {
    onRequest: onRequest
  }
  })

客户端脚本(vc_print_button_client.js):

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

  var exports = {};

  function pageInit(context) {
    // TODO
  }

  function onButtonClick() {
    var suiteletUrl = url.resolveScript({
      scriptId: 'customscript_vc_print_button_suitelet',
      deploymentId: 'customdeploy_vc_print_button_suitelet',
      returnExternalUrl: false,
      params: {
        custom_id: currentRecord.get().id,
      },
    });

    window.open(suiteletUrl);
  }

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

事件脚本(vc_print_button_event.js):

define([], function() {

  var exports = {};

  function beforeLoad(context) {
    context.form.addButton({
      id: "custpage_vcpb",
      label: "Print",
      functionName: "onButtonClick"
    });
    context.form.clientScriptModulePath = "SuiteScripts/vcPrintButton/vc_print_button_client.js";
  }

  exports.beforeLoad = beforeLoad;
  return exports;
});

标签: pdfnetsuitesuitescript

解决方案


  1. 在浏览器中显示 PDF 取决于几件事。一个是您的浏览器是如何设置来处理 PDF 的,而您对此无能为力。另一个是确保您设置了内容处置标头:

    response.setHeader({name:'content-disposition', value: 'inline; filename="'+ pdfFileName +'"'});

  2. 您的 PDF 正在生成,但未从记录中获取值。根据提供的代码,您的模板应该引用字段${vendorcredit.tranid}<#list vendorcredit.apply as item>...</#list>如果它正确执行,那么您可能希望将您的模板代码添加到问题中。


推荐阅读