Netsuite проблема рендеринга Advanced PDF с текущими данными записи через Suitelet 2.0 - PullRequest
0 голосов
/ 01 марта 2019

Проблема: Мне нужно создать фиктивную упаковочную накладную из открытого заказа на продажу для клиентов, выполняющих прямые поставки.

Шаг 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: Я застрял в суллете.Я хочу, чтобы он извлекал данные из текущей записи и передавал их через расширенный шаблон 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, он растягивается и масштабируется с окном браузера.И вместо того, чтобы передавать через него данные моей текущей записи, я получаю только идентификаторы токена схемы браузера.В настоящее время это выглядит так:

Fig 1

Но я хочу, чтобы это выглядело так (как на самом деле выглядит мой Расширенный шаблон PDF), с реальными данными изтекущий заказ на продажу, а также в виде PDF-файла в браузере, который я могу сохранить, распечатать и отправить по электронной почте.Мне не нужно создавать или хранить эти файлы в картотеке:

Fig2 Как мне заставить мой сиклет получить данные об открытом заказе и отобразить их в формате pdf из моегошаблон?

Ответы [ 2 ]

0 голосов
/ 03 марта 2019

Когда вы хотите сгенерировать файл 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());
0 голосов
/ 02 марта 2019

На основании справочной документации, render.create не ожидает параметр id.

Попробуйте следующее

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

var invoicePdf = renderer.renderAsPdf();
...