Форма - графическое представление объекта в виде набора элементов интерфейса для манипуляции данными объекта. Элементы интерфейса ссылаются на атрибуты, заданные в :ref:`типе данных<data_types_main>`.
- Формы ECOS реализованы на базе движка formio.js.
- Функция :ref:`редактора форм<form_builder>` доступна только в ECOS Enterprise.
- Формы описываются в json-формате.
- Формы используются для редактирования записей из Records Service см. :ref:`ECOS Records<Records_API>`. На бэкэнде редактирование записи может восприниматься как создание новой (например если не указан ID редактируемой записи).
Для просмотра существующих форм и их редактирования создан журнал Формы (Раздел администратора - Конфигурация UI - Формы):
Форму можно создать или загрузить уже созданный в систему.
Подробнее см. раздел ниже
Для создания журнала необходимо нажать + - Создать форму:
Откроется форма создания формы:
Для загрузки созданного журнала необходимо нажать + - Форма:
Файл формата .json
{ "id": "vacation-request", "formKey": "", "title": { "ru": "Заявление на отпуск" }, "description": {}, "customModule": "", "typeRef": "", "width": "m", "system": false, "i18n": {}, "definition": { "components": [ { "type": "datetime", "input": true, "enableTime": false, "key": "from", "label": { "ru": "Начинается с" }, "suffix": true, "format": "yyyy-MM-dd" }, { "type": "datetime", "input": true, "enableTime": false, "key": "to", "label": { "ru": "Заканчивается" }, "suffix": true, "format": "yyyy-MM-dd" }, { "label": { "ru": "Инициатор" }, "key": "initiator", "allowedAuthorityType": "USER", "currentUserByDefault": true, "refreshOn": [], "optionalWhenDisabled": false, "type": "selectOrgstruct", "input": true, "defaultValue": "" }, { "type": "columns", "key": "buttons-columns", "columns": [ { "md": 3, "type": "column", "input": false, "index": 0, "components": [], "key": "column" }, { "md": 3, "type": "column", "input": false, "index": 1, "key": "column", "components": [] }, { "md": 3, "type": "column", "input": false, "index": 2, "components": [ { "type": "button", "key": "cancel", "label": { "ru": "Отменить", "en": "Cancel" }, "action": "event", "event": "cancel", "block": true, "input": true } ], "key": "column" }, { "md": 3, "type": "column", "input": false, "index": 3, "components": [ { "type": "button", "theme": "primary", "key": "submit", "label": { "ru": "Сохранить", "en": "Save" }, "block": true, "input": true } ], "key": "column" } ], "input": false } ], "formId": "vacation-request" }, "attributes": {} }
В журнале администратору с каждой записью доступен стандартный набор действий:
- скачать в виде json-файла;
- удалить;
- открыть на редактирование;
- редактировать json-файл;
- копировать;
- открыть карточку в соседней вкладке. Карточка представляет собой :ref:`дашборд<dashboard>`:
п/п | Наименование | Описание | Пример заполнения |
---|---|---|---|
1 | Идентификатор формы* | уникальный идентификатор формы (обязательное) | test-form (kebab-case) |
2 | Название формы | имя формы (обязательное) | Test form |
3 | Ключ формы | ключ формы. Используется для связи между формой и сущностью, которую трудно привязать к типам ECOS или напрямую связать. Обычно это старые задачи (flowable/activiti). | test-form |
4 | Редактируемый тип данных | из списка выбрать :ref:тип данных <data_types_main>, созданный ранее | выбирается из списка предлагаемых |
5 | Ширина формы | выбор варианта ширины формы | выбирается из списка предлагаемых |
6 | Описание формы | поля для ввода описания формы | Форма создана для... |
Нажать кнопку «Редактировать форму». Откроется :ref:`конструктор форм<form_builder>`
В типе ECOS предусмотрено поле formRef
, которое определяет связь типа с формой. В большинстве случаев этого поля достаточно, но если для одного типа требуется несколько форм (например, для отображения на дашборде), то в конгфигурации формы предусмотрено поле typeRef
.
Если запись не может быть привязана к определенному типу ECOS, можно воспользоваться привязкой по ключам.
Запись должна отдавать атрибут _formKey
и по полученным ключам идет поиск формы до первого совпадения.
Если записи принадлежат одному типу или тип отсутствует, но для некоторых записей должна использоваться определенная форма,
можно реализовать атрибут _formRef
. Если этот атрибут вернул ссылку на форму, то она имеет наибольший приоритет.
Для простых полей мы можем во вкладке Базовые выставить Имя свойства в соответствии со свойством записи:
но если нужно связать с атрибутом, в котором есть спец символы (например ":"), то во вкладке API следует добавить в Пользовательские свойства свойство (2) с ключом attribute и значением - именем атрибута.
Так же добавлена возможность настраивать имя полей в одном месте - в типе данных, и не дублировать данную информацию в форме и в журнале.
Название поля (Label) загружается из типа. Если Название поля (Label) выставлен равный атрибуту или если атрибут не задан, то идет проверка на равенство Имя свойства (Property Name) и Название поля (Label).
В json описании формы можно добавить поле customModule
, в котором записать путь до javascript
модуля, который будет создан вместе с формой. В этом модуле можно разместить сложную логику, которую в последствии вызывать из скриптов формы. Для примера см. ecos-eform-repo/src/main/resources/alfresco/module/ecos-eform-repo/ecos-forms\ecos-form.json
Если в customModule
будет метод init
, то он будет вызван с текущей формой в аргументах.