Note
В статье указаны произвольные пользователи и группы.
Добавьте пользователей, как описано в статье :ref:`Создание пользователей для ecos-community-demo<demo_user>`
Создайте группы, как описано в :ref:`Создание группы<new_group>`
Создадим простой бизнес-процесс для проверки назначения динамической роли с использованием таблицы DMN при согласовании закупки мебели.
В зависимости от условий закупки прописанных в таблице DMN, роль согласующего будет вычисляться автоматически.
Для этого:
- Создаем таблицу принятия решения (DMN)
- Создаем Тип данных, указываем в нем динамическую роль DMN
- Создаем простой бизнес-процесс
- Создаем Заказ мебели и проверяем назначенного в бизнес-процессе согласующего
Для таблицы требуется определить критерии, по которым будет приниматься решение.
Основные критерии - наименование мебели и согласующий.
Для создания таблицы принятия решений перейдите левом меню в пункт «Моделирование – Методы принятия решения»:
Далее создайте DMN модель:
Заполните поля:
1 | Идентификатор | approve-furniture |
2 | Имя | Согласование заявки мебель |
Нажмите «Сохранить».
Для перехода к редактору разверните раздел «По умолчанию», наведите курсор на созданную модель и нажмите:
Откроется решение:
В правой части в модели необходимо определить входные данные для вычисления роли на основе DMN.
По ключу модели будут доступны вычисленные данные в контексте DMN.
Зададим сопоставление ключ и значение:
Ключ | name | входной элемент для решения, который далее необходимо указать в expression. |
Значение | name | атрибут типа данных. То самое условие, по которому будет вычисляться роль. |
Note
Ключ-значений (условий) может быть несколько, а для каждого условия будет вычисляться необходимая роль.
Для ввода данных в таблицу кликните:
Двойным кликом по наименованию решения (1) перейдите в режим редактирования и назовите решение Decision_furniture.
Hit policy (2) - :ref:`политика выбора<dmn_hit_policy>` Определим ее как Unique (по умолчанию).
(3) – входные элементы, (4) – выходные элементы.
Совокупность входных элементов и выходного формируют решение.
Для установки наименования входного элемента, дважды кликните поле под «When» и введите «Наименование»:
В свойствах укажите:
Поле | Значение | Пояснение |
---|---|---|
expression | name | Ключ из модели |
Type | string | Соответствует типу атрибута name из типа данных |
Наименование выходного элемента, дважды кликните поле под «Then» и введите «Согласующий»:
В свойствах укажите:
Поле | Значение | Пояснение |
---|---|---|
Type | string | Чтобы решение DMN вернуло String с именами реципиентов. |
Выберем 3 наименования мебели. Укажем для каждого наименования соответствующего согласующего.
Добавьте первое правило, указывающее, что для наименования «Стол» — согласующий с системным именем «entdirgorbunkov» и группа «GROUP_it».
Note
Если указывать группу, то перед именем группы необходимо добавить GROUP_
Наименование и Согласующий string, поэтому обязательно элементы указываем в кавычках.
Несколько значений добавляется через запятую без пробелов в одних кавычках.
Нажмите кнопку 88 внизу таблицы или просто нажмите в любом месте последней строки.
Добавьте второе правило, указывающее, что для наименования «Шкаф» — согласующий с логином «entbuhgorbunkov».
Финальная таблица:
Наименование | Согласующий |
---|---|
"Стол" | "entdirgorbunkov,GROUP_it" |
"Шкаф" | "entbuhgorbunkov" |
"Стул" | "accountant" |
Решение DMN должно вернуть String с именами реципиентов.
Теперь таблицу принятия решения можно сохранить и опубликовать, нажав:
Создаем тип данных. Аналогично как в разделе :ref:`Процесс запроса на закупку оборудования<data_type_sample>`
Сразу приведем примеры заполненных вкладок:
1 | id | furniture-order |
2 | Имя | Заказ мебели |
3 | Родитель | Кейс |
4 | Форма | Оставить по умолчанию (система автоматически сгенерирует форму по тем атрибутам, которые мы укажем далее, но автоматически сгенерированные формы нельзя редактировать) |
5 | Журнал | Оставить по умолчанию (система автоматически сгенерирует журнал по тем атрибутам, которые мы укажем далее, но автоматически сгенерированные журналы нельзя редактировать) |
Id (1) | Имя (2) | Тип (3) |
---|---|---|
name | Наименование | Text |
price | Цена | Number |
Id (1) | Имя (2) |
---|---|
approver | Согласующий |
Назначим согласующему динамическую роль. В форме выберите тип DMN, решение – Decision_furniture:
Нажмите Подтвердить.
Id (1) | Имя (2) |
---|---|
to_approve | На согласовании |
approve | Согласован |
reject | Отказано |
Поскольку из прошлых примеров вы знаете, как создать процесс пошагово, какие элементы могут в нем быть, отобразим процесс и поэлементно его опишем.
Подробно о :ref:`создании бизнес-процесса <bp_sample>`
Данные для создания процесса:
1 | Идентификатор | furniture-order-bpmn |
2 | Имя | Заказ мебели |
3 | Тип данных | Заказ мебели |
4 | Включен | True. Отметка об активности процесса. |
5 | Автоматический старт процесса. | True, чтобы старт процесса осуществлялся автоматически. Подробно о :ref:`запуске процесса<new_bp_start>` |
Рассмотрим поэлементно:
1 | Имя | На согласовании |
2 | Статус | На согласовании |
1 | Имя | Согласование |
2 | Реципиенты | Согласующий |
3 | Форма задачи | К задаче необходимо создать форму.
Создание формы :ref:`подробно описано<approve_form_bpmn>`
Заполните поля следующими данными:
|
4 | Приоритет | Средний |
5 | Результаты задачи | Средний
|
Простой эксклюзивный шлюз.
1 | Имя | Согласован |
2 | Статус | Согласован |
1 | Имя | Отказ |
2 | Статус | Отказано |
1 | Имя | Согласован |
2 | Тип условия | Исходящий |
3 | Исходящий | Согласование – согласовать |
1 | Имя | Отказ |
2 | Тип условия | Исходящий |
3 | Исходящий | Согласование – отказать |
Конечное событие (заканчивающее бизнес-процесс).
Добавьте в меню журнал type$furniture-order.
Подробно о :ref:`добавлении журнала<journal_to_menu>`
Перейдите в журнал, создайте новый элемент, заполните карточку, нажмите «Сохранить»:
Статус изменится на «На согласовании». Исполнитель – entDir (аккаунт entdirgorbunkov) и ИТ-отдел (группа it)
Назначенную роль можно проверить через консоль браузера командой:
await Citeck.Records.get('emodel/type-id@local-id').load('_roles.assigneesOf.approver []?str', true)
где
approver
- id роли из типа данных
emodel/type-id@local-id
– можно взять из строки браузера:
Система выдаст кому назначена данная задача согласования.