Детали задачи
-
История
-
Решение: Won't Do
-
Medium
-
Не заполнено
-
Не заполнено
-
Не заполнено
Описание
- Добавить новую сущность в системе - “DecisionTable” (таблица принятия решений). Модель:
decision-table { "id": String, // идентификатор таблицы "lineTypeRef": RecordRef, // тип строки в таблице "conditions": Condition[] // условия для успешного сопоставления со строкой в таблице } Condition { id: String, name: MLText, predicate: Predicate }
В conditions будет список предикатов, которые объединяются по И и проверяются в некотором контексте. Контекстом может быть любая запись или произвольный объект, у которого можно загрузить атрибуты через RecordsAPI. Пример предиката:
{ "t": "ge", //тип предиката "a": "ecos:totalAmount", // значение в поле "a" (или "att") загружаются из контекста проверки "v": "${maxTotalAmount}" // значение в ${...} загружаются из строки таблицы }
2. Добавить новый тип ECOS - “decision-table-line“ с атрибутами:
[ { "id": "order", // порядок строк "name": {"ru": "Порядок"}, "type": "NUMBER" } ]
Этот тип будет абстрактным и предполагается, что для его использования нужно создать новый, который будет унаследован от decision-table-line
3. Добавить в ecos-model-lib сервис для вычисления соответствия между таблицей и текущим контекстом.
Общая логика работы
Схематично:
{контекст} <условия> {строки_таблицы} = значения_для_которых_выполнились_условия
Т.е. мы последовательно для каждой строки таблицы проверяем условия для [контекст + строка] и для первого (или для всех. зависит от требований) совпадения возвращаем значение строки или true если значение не задано.
Инфраструктурно:
Область применения
Предоставление бизнес пользователям возможности настраивать поведение следующих аспектов системы без участия системного администратора:
- Вычисление представителей ролей (например настраиваемый по условиям список согласующих)
- Вычисление условий (да/нет).
- Проверка соблюдения условий при переходах в бизнес-процессах
- Отправка уведомлений через определенный sender по условию - https://citeck.atlassian.net/browse/ECOSCOM-4679
- Вычисляемые атрибуты у сущностей
- _список_можно_продолжать_
Способ вызова таблиц решений:
- Из бизнес-процесса
- Подписка на событие (как транзакционные события с возможностью отката транзакции, так и не транзакционные)
- Вручную в коде
Список атрибутов на вход в таблицу:
- Администратор выбирает атрибуты из типа данных, указанного для таблицы (включая вычисляемые атрибуты)
- Администратор передает на вход переменные из бизнес-процесса
- Произвольное поле с указанием атрибута (например, для глобальных mixin, в том числе роли пользователя)
Низкоуровневая постановка:
Библиотека ecos-model-lib
- Добавить в интерфейс EcosModelAppApi методы
- getAttsForDecisionTable(tableRef: RecordRef): Set<String>
- calculateDecisionTable(tableRef: RecordRef, attributes: ObjectData): List<DataValue>
- Добавить интерфейс EcosDecisionTableService с методом getBool(context: Any?, tableRef: RecordRef?): Boolean
- Добавить реализацию интерфейса из п.2 EcosDecisionTableServiceImpl в которой мы в методе getBool
- Если RecordRef.isEmpty(tableRef) вернуло true, то возвращаем false
- вызываем getAttsForDecisionTable, получаем атрибуты у context через recordsService
- вызываем calculateDecisionTable и преобразуем результат в boolean следующим образом:
- Если лист пустой, то возвращаем false
- Если лист не пустой, то возвращаем первый элемент вызвав на нем asBoolean
- Добавить команды для методов getAttsForDecisionTable и calculateDecisionTable
Микросервис ecos-model
- Добавить новую сущность DecisionTable и для неё repo/entity/records dao/service + form/journal/type
- Добавить реализацию command executor'ов из п.4 предыдущего раздела
Вложенные файлы
Вложенные файлы
Связи запроса
- blocks
-
ECOSCOM-4718 Add decision table support for notifications sender
-
- New
-