Формирование печатной формы
Для формирования печатных форм можно использовать метод utils.processTemplate
Шаблон печатной формы можно также настроить в 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, на печатную форму необходимо вывести список в таблице из двух колонок.
- Создайте параметр personList в карте входных значений, который ссылается на список объектов.
- Создайте таблицы с двумя колонками и одной строкой в документе.docx.
- $[@person.name] введите в первую ячейку; $[@person.address] — во вторую.
- Список 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)
Описание настройки пользовательского действия по событию, см. Скриптовое действие по событию.