Сервис печатных форм

Сервис печатных форм предназначен для быстрого формирования печатной формы документа в определенном офисном формате.

В Системе хранится специальным образом размеченный файл: шаблон для формирования образа данных документа в одном из офисных форматов. Пользователь Системы может редактировать содержимое шаблона без изменения ссылок на свойства объектов.

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

Для работы с шаблоном печатных форм используется класс объекта «Документ» с кодом класса «PrintFormTemplate», доступный в сервисе «Управление моделью данных» (см. п. Создание класса объекта «Документ»).

img

Для данного класса предусмотрен набор атрибутов «PrintFormTemplateProps». Набор атрибутов должен включать в себя описание шаблона печатных форм («printFormTemplateDescription») и глобальный код («printFormTemplateCode»). У данных атрибутов должны быть установлены текстовый тип данных и тип изменяемости «READ_WRITE».

Для вывода сформированной печатной формы необходимо в сервисе «Управление моделью данных» (см. п. Создание класса объекта «Документ») создать класс объекта «Документ» с кодом «PrintFormInstance» с обязательным прикреплением контента в формате DOCX.

Используя класс «PrintFormTemplate», необходимо создать документ в документном сервисе, прикрепить файл шаблона печатных форм, сохранить и опубликовать. Файл шаблона должен быть формата DOCX.

Пример шаблона информации о пользователе:

    Информация о пользователе {{%User%}}.

    Основная информация

    | Идентификатор | {{%User%.id}}        |
    | ------------- | -------------------- |
    | Логин         | {{%User%.username}}  |
    | Фамилия       | {{%User%.lastName}}  |
    | Имя           | {{%User%.firstName}} |
    | Email         | {{%User%.email}}     |

    Роли

    | 1.   | {{%User%.roles}} |
    | ---- | ---------------- |

    Группы

    | 1.   | {{%User%.groups}} |
    | ---- | ----------------- |

Шаблон информации о пользователе будет заполняться информацией об инициаторе вызова метода создания задания на формирование печатной формы. Источником в данном случае выступает сервис «Информация о пользователях» (ldm-users-info-service).

Пример шаблона файлов пользователя:

    Файлы пользователя {{User.username}}

    Основная информация

    | Идентификатор | {{User.id}}        |
    | ------------- | ------------------ |
    | Логин         | {{User.username}}  |
    | Фамилия       | {{User.lastname}}  |
    | Имя           | {{User.firstname}} |
    | Email         | {{User.email}}     |

    Созданные файлы

    | #    | Название  файла    | Дата и время  создания файла |
    | ---- | ------------------ | ---------------------------- |
    | 1.   | {{Files.filename}} | {{Files.creationdate:F}}     |
    |      |                    |                              |
    |      | [[Annotation]]     |                              |

    Текст

    {{Various.Text}}

    Статус подписания: {{Various.state}}

    Первый подписант :{{Various.signer1}}

    Второй подписант :{{Various.signer2}}

Пример шаблона атрибутивного состава объекта:

Атрибутивный состав объекта

{{name}}

| Идентификатор              | {{id}}               |
| -------------------------- | -------------------- |
| Идентификатор  версии      | {{versionId}}        |
| Наименование               | {{name}}             |
| Пользовательское  описание | {{description}}      |
| Класс  объекта             | {{className}}        |
| Создал                     | {{createdBy}}        |
| Дата создания              | {{creationDate]}     |
| Изменил                    | {{modifiedBy}}       |
| Дата изменения             | {{modificationDate}} |

Шаблон атрибутивного состава будет заполняться перечисленными атрибутами объекта по его идентификатору. Дополнительно можно использовать переменную «{[Various.className]}» для связывания текущего объекта с другим:

Издательство: [[Annotation]] (класс БО : {{Various.className}} )

Для работы данной переменной в запросе на формирование печатной формы необходимо передать массив «Various» с параметрами:

  • id – уникальный идентификатор связанного объекта.
  • classCode – код класса, к которому относится этот объект.
  • serviceName – наименование сервиса, который обрабатывает данные этого класса (например, «dh-documents-service»).

В качестве «id» можно использовать как конкретный идентификатор объекта, так и контекстную переменную «#CONTEXT.link_publ.id», которая позволяет динамически подставлять идентификатор связанного объекта из контекста текущей задачи или объекта. При отправке запроса Система будет искать в контексте поле link_publ.id и подставит его значение в параметр «id». Переменную «#CONTEXT.link_publ.id» рекомендуется применять, если шаблон используется в разных объектах, но с одинаковой структурой.

При отправке запроса Система найдет объект по явно указанному идентификатору и коду класса или в контексте, запросит его данные через указанный сервис и подставит значение в переменную «{[Various.className]}» в файле печатной формы:

Издательство: ЛДМ (класс БО : direct_publish)

Пример шаблона атрибутивного состава документа с системными и динамическими атрибутами и файлами:

Атрибутивный состав документа

{{name}}



Системный атрибут (код класса документа): {{className}}

Динамически атрибут (текстовый):  {{text_doc}}

Файл:

​    Наименование файла:

​                          {{Files.filename}}

​    Дата создания файла:

​                          {{Files.creationdate:F}}

Логин пользователя, переданного через идентификатор в запросе:

{{User.username}}

Текст, переданный через внешнюю переменную: 

 [[Annotation]]





Таблица файлов

| #    | Наименования  файлов | Размер  файлов    |
| ---- | -------------------- | ----------------- |
| 1.   | {{Tabs.filename}}    | {{Tabs.fileSize}} | 

Идентификатор созданного документа с прикрепленным шаблоном, по которому будет построена форма, можно использовать в методе создания задания на формирование печатной формы («POST {hostname}/ldm-print-forms-service/api/v1/print-form-jobs») как параметр «templateId». Также в запросе могут быть указаны дополнительные свойства:

  • mainObject;
  • objects;
  • namedObjects;
  • namedLists.

При выполнении метода сервис заполняет шаблон на основании переданных в методе параметров, формирует и публикует итоговой документ с файлом в разделе Документы.

img

img