Формирование печатной формы

Для формирования печатных форм можно использовать метод utils.processTemplate, см. api.utils Работа с шаблонами Groovy. Метод обрабатывает шаблон Groovy, записанный в документ.docx.

Шаблон печатной формы можно также настроить в Pentaho Report Designer, см. Настройка печатной формы "Заказ-наряд".

Шаблон печатной формы

Скачать шаблон печатной формы.docx

Синтаксис

В шаблоне .docx можно использовать скрипты с помощью конструкции <% *скрипт* %>.

<% def cleanDiscr = api.string.htmlToText(subject?.descriptionRTF) %> <% def clientT = subject?.clientEmployee?.title + “/” + subject?.clientOU?.title %> <% def regDate = utils.formatters.formatDateTime(subject?.registrationDate) %> <% def dlDate = utils.formatters.formatDateTime(subject?.deadLineTime) %> <% def desDate = utils.formatters.formatDateTime(subject?.dateDecision) %> <% def resp = subject?.responsibleEmployee?.title + “/” + subject?.responsibleTeam?.title %> <% def state = api.metainfo.getStateTitle(subject) %> <% def servP = subject?.service?.parent ? subject?.service?.parent?.title + “/” : ‘’ %> <% def servS = subject?.service?.title %><% def cat = subject?.baseCategory ? “/” + subject?.baseCategory?.title : ‘’ %> <% def allServ = servP + servS + cat %> <% def report = api.string.htmlToText(subject?.resultDescr) %>

Используется стандартный для шаблонов Groovy синтаксис:

${example} // Обычная переменная

<%=example%> // Обычная переменная

Для заполнения переменных передаем ассоциативный массив входных значений ['example' : значение]:

${employee?.name}

Для заполнения передаем объект класса employee, у которого есть поле name:

class Employee
{
def name;
}
def employee = new Employee(name : 'Ivan')
def bindings = ['employee' : employee]

Выполнение кода внутри шаблона:

<% любой_код %>

<% if (cond) { %>

Этот текст будет вставлен, если "cond == true"

<% } else { %>

Этот текст будет вставлен, если "cond != true"

<% } %>

Аналогично, передаем cond ['cond':значение]

$[ @listVar.field ]

Пример вывода списков в виде таблицы

Вывод списков объектов в таблицу внутри документа.docx. Должен использоваться внутри ячейки таблицы. Например, список объектов Person, каждый объект имеет два поля: name и address, на печатную форму необходимо вывести список в таблице из двух колонок.

  1. Создайте параметр personList в карте входных значений, который ссылается на список объектов.
  2. Создайте таблицы с двумя колонками и одной строкой в документе.docx.
  3. $[@person.name] введите в первую ячейку; $[@person.address] — во вторую.
  4. Список personList будет распечатан в таблице.

Действие по событию для формирования печатной формы

В системе создается действие по событию с параметрами:

  • Событие: "Пользовательское событие";
  • Синхронное: "да";
  • Скрипт:

    def file = utils.get('root$101')?.scPrintForm?.UUID //атрибут для хранения шаблона
    def TEMPLATE = utils.get(file)
    def bindings = [:]
    bindings.subject = subject
    bindings.commentList = utils.comments(subject) //в commentList хранится список комментариев
    def data = utils.processTemplate(TEMPLATE, bindings)
    utils.attachFile(subject, 'Заявка.docx', 'unknown', 'шаблон', data)

Описание настройки пользовательского действия по событию, см. Скриптовое действие по событию.

Пример печатной формы