Advanced PDF NetSuite - Группировка таблиц элементов по общему значению поля - PullRequest
0 голосов
/ 06 апреля 2020

Можно ли разделить одну большую таблицу элементов на более мелкие таблицы элементов, группируя их по общему значению указанного поля c?

Например, если запись элемента имела поле с именем ' Категория 'и список вариантов был' Категория A ',' Категория B 'и' Категория C ', таблицу можно разделить на 3 меньшие таблицы?

1 Ответ

1 голос
/ 06 апреля 2020

В расширенном механизме шаблонов PDF есть синтаксис, подобный следующему:

<#iftrue>
  <table></table>
<#else>
  <table></table>

Я бы порекомендовал найти PDF-файл, в котором есть что-то похожее на то, что вы хотите, и скопировать / отредактировать код, чтобы он работал на вас.

Однако, немного потренировавшись, я думаю, вам будет гораздо проще создавать PDF с JavaScript и XML. Я делаю это с макушки головы, поэтому некоторые из них могут быть отключены. Если вам нужна помощь, или я допустил ошибку, пожалуйста, не стесняйтесь обратиться.

Установкой является пользовательское событие, пакет и файл XML.

  1. Сценарий пользовательских событий для отображения кнопки в режиме просмотра, которая при щелчке открывает Suitelet:
/**
 * @NScriptType UserEvent
 * @NApiVersion 2.0 // 2.1 if you can
 */

define(["N/anyLibrariesYouNeed"), function(anyLibrariesYouNeed) {
  function beforeLoad(context){
    if (context.type === "view") {
      context.form.addButton({
        id: "custpage_print_pdf",
        label: "Print PDF",
        functionName: 'window.open("link_to_suitelet")'
  }

  return {beforeLoad: beforeLoad}
})
Suitelet, который открывается из указанного выше пользовательского события и заменяет текст заполнителя в файле XML условным текстом:
/**
 * @NScriptType Suitelet
 * @NApiVersion 2.0 // 2.1 if you can
 */

define(["N/file", "N/search", "N/anyLibrariesYouNeed"], function(file, search, anyLibrariesYouNeed) {
  function onRequest(context) {
    // Load the PDF, which is just an XML file
    var myPDF = file.load("path_to_your PDF").getContents();

    // Load the search
    var mySearch = search.load({id: "mySearchId"});

    // Do some stuff with the results ...
    var myResults = [];
    mySearch.run.each(function(result){
      // ... like generate a </table> or group results with Lodash
    })

    //Just make sure all the placeholder text in your XML (PDF) file is replaced. If it's not do ... 
    myPDF = myPDF.replace("Placeholder", "With this");

    //Finally, render the PDF from XML using the bigfaceless engine provided by NetSuite. The setup for bigfaceless is in the XML file.
    context.response.renderPdf(myPDF);
  }
  return {onRequest: onRequest}
})
Заполнитель XML файл, который отображается как PDF с использованием context.response.renderPdf(myPDF)
//big_face_less_tag_goes_here and something like DOCTYPE XML
<pdf>
  <head>
    <style>
      table tr th td {
        border: 1px solid black
      }
    </style>

    <body>
      Placeholder
    </body>
</pdf>

Надеюсь, что это поможет. Если вам нужна помощь, просто кричите!

...