Note
Данная статья является продолжение работы с созданным ранее бизнес-процессом :ref:`Запрос на закупку оборудования<sample_request>`
Закупку оборудования всегда согласовывают, и если заявка по каким-то критериям не проходит – отклоняют.
В зависимости от условий согласование/отказ в покупке некоторых видов оборудования можно автоматизировать. Для рассмотрения данного варианта подходит использование DMN, а в частности :ref:`таблицы принятия решений<dmn_decision>`
DMN служит для сортировки входящих данных процесса или уменьшение их количества.
Данная функциональность, основываясь на входящих данных, помогает принять конечные или промежуточные решения по бизнес-процессу.
Для начала работы необходимо создать саму таблицу.
Для таблицы требуется определить критерии, по которым будет приниматься решение. Основные критерии - наименование оборудования и его стоимость.
Для создания таблицы принятия решений перейдите левом меню в пункт «Моделирование – Методы принятия решения»:
Далее создайте DMN модель:
Заполните поля:
1 | Идентификатор | equipment-desicion |
2 | Имя | Решение по заявке на покупку оборудования |
Нажмите «Сохранить».
Для перехода к редактору разверните раздел «По умолчанию», наведите курсор на созданную модель и нажмите:
Откроется решение:
Для ввода данных в таблицу кликните:
Двойным кликом по наименованию решения (1) перейдите в режим редактирования и назовите решение Комп техника.
Hit policy (2) - :ref:`политика выбора<dmn_hit_policy>` Определим ее как Unique (по умолчанию).
(3) – входные элементы, (4) – выходные элементы.
Совокупность входных элементов и выходного формируют решение.
Note
Указанные ниже переменные входных и выходных элементов выбраны не случайно. Они потребуются для настройки компонента business rule task в целевом бизнес-процессе.
Для установки наименования входного элемента, дважды кликните поле под «When» и введите Наименование:
В свойствах укажите:
Поле | Значение | Пояснение |
---|---|---|
Input Variable | name | Соответствует атрибуту name из :ref:`типа данных<sample_request_attributes>`. Значение будет передаваться как переменная в бизнес-процесс. |
Type | string | Типу string соответствует text в :ref:`типе данных<sample_request_attributes>`. |
Нажмите + для добавления второго входного элемента:
Для установки наименования входного элемента, дважды кликните поле под «When» и введите Стоимость:
В свойствах укажите:
Поле | Значение | Пояснение |
---|---|---|
Input Variable | price | Соответствует атрибуту price из :ref:`типа данных<sample_request_attributes>`. Значение будет передаваться как переменная в бизнес-процесс. |
Type | integer | Типу integer соответствует number в :ref:`типе данных<sample_request_attributes>`. |
Для установки наименования выходного элемента, дважды кликните поле под «Then» и введите Решение:
В свойствах укажите:
Поле | Значение | Пояснение |
---|---|---|
Output Name | decision | Значение будет передаваться в бизнес-процесс как переменная результата. |
Type | integer |
Согласована / не согласована покупка автоматически, или необходимо согласование конкретного сотрудника зависит от оборудования и его стоимости.
Для примера выберем 3 товара: Монитор, Мышь, Ноутбук. Укажем для каждого товара лимит/ диапазон стоимости и соответствующее возможное решение:
"Approve" | Согласовано автоматически |
"Reject" | Отказано автоматически |
"Assign approver" | Согласование конкретным сотрудником |
В зависимости от решения процесс по соответствующему потоку управления.
Добавьте первое правило, указывающее, что для «Монитора» стоимостью 15 000 или менее — решение «Approve».
Note
Наименование и Решение типа string, поэтому элементы обязательно указывать в кавычках.
Нажмите кнопку «+» внизу таблицы или просто нажмите в любом месте последней строки.
Добавьте второе правило, указывающее, что для «Монитора» стоимостью больше 15 000 - решение «Reject».
Финальная таблица:
Наименование | Цена | Решение |
---|---|---|
"Монитор" | <=15000 | "Approve" |
"Монитор" | >15000 | "Reject" |
"Мышь" | <=1500 | "Approve" |
"Мышь" | >1500 | "Reject" |
"Ноутбук" | <=60000 | "Approve" |
"Ноутбук" | >250000 | "Reject" |
"Ноутбук" | [60000..249999] | "Assign approver" |
Теперь таблицу принятия решения можно сохранить и опубликовать, нажав:
Далее необходимо добавить модель в существующий бизнес-процесс. Для этого необходимо:
- Настроить переменные процесса (1), чтобы модель и бизнес-процесс могли взаимодействовать друг с другом;
- Добавить компонент Business rule task (2) – чтобы встроить в процесс модель;
- Настроить шлюз и потоки управления (3) – чтобы объяснить системе по какому направлению необходимо идти
Между элементами Статус «Заявка создана» и пользовательская задача «На согласование» необходимо добавить :ref:`скриптовую задачу<script_task>`.
Для этого сначала удалите стрелку между элементами Set status и User task:
Далее в контекстном меню нажмите на компонент «Task»:
Измените его тип на Script task:
Чтобы данные входных элементов решения стали доступны в бизнес-процессе, их необходимо ввести в виде переменных.
Укажите в форме:
- Имя - «Стоимость и наименование»,
- в Скрипте указать:
execution.setVariable('price', document.load("price?num")); execution.setVariable('name', document.load("name"));
Следующим элементом необходимо добавить :ref:`Business rule task<business_rule_task>`.
В контекстном меню нажмите на компонент «Task», измените его тип на Business Rule Task:
Укажите в форме:
- Имя – Решение по заявке.
- Решение – выбрать из журнала созданное ранее решение.
- Связь – Актуальное (всегда последняя версия решения).
- Переменная результата - decision (заданная при создании Выходного элемента).
- Сопоставление результатов решения – Один объект (TypedValue) – так как у нас на выходе одно значение.
Шлюзы и потоки управления рассмотрим на финальной схеме:
Следующий компонент - шлюз с 3 выходами в соответствии с :ref:`правилами<sample_request_dmn_rules>`:
- 1 - "Assign approver" (Согласование согласующим)
- 2 - "Approve" (Авт. согласование)
- 3 - "Reject" (Авт. отказ)
Обратите внимание на потоки (4) и (5). Они были настроены в базовом процессе:
Процесс можно сохранить и опубликовать, нажав:
Проверим, как работает таблица принятия решения.
Note
Чтобы решение принималось автоматически, название оборудования в форме завки должно четкое соответствовать (включая регистр) наименованию в таблице принятия решений.
Будьте внимательны при сравнении строк и использовании символов в unicode.
В журнале создадим заявку с данными:
- Название оборудование – Мышь
- Стоимость - 500
- Инициатор – текущий пользователь
- Согласующий – текущий пользователь
И нажмите «Сохранить». Заявка создается успешно и ее статус автоматически становится «Согласовано»:
В журнале создадим заявку с данными:
- Название оборудование – Монитор
- Стоимость - 250001
- Инициатор – текущий пользователь
- Согласующий – текущий пользователь
И нажмите «Сохранить». Заявка создается успешно и ее статус автоматически становится «Отказано»:
Если указать любое другое название оборудования, не указанное в таблице, или указать:
- Название оборудование – Ноутбук
- Стоимость - 65000
- Инициатор – текущий пользователь
- Согласующий – текущий пользователь
то процесс пойдет стандартным способом, как в первоначальном :ref:`Запросе на закупку оборудования<sample_request>`: