Решение

Решение - узел, в котором один или несколько входных элементов определяют выход на основе бизнес-логики принятия решения, определенной в виде выражения или таблицы.

При создании новой модели по умолчанию добавлен элемент решение:

../../../../../_images/decision_1.png

Кликнув на решение, в правой части становятся доступны свойства элемента:

../../../../../_images/decision_2.png

Кликнув дважды на элемент, его можно переименовать или наименование можно поменять в свойствах.

Для ввода данных в таблицу кликните:

../../../../../_images/decision_3.png

Откроется таблица для заполнения:

../../../../../_images/decision_4.png

По клику правой кнопки мыши на ячейку шапки таблицы становится доступно меню:

../../../../../_images/decision_17.png

Используя меню, можно добавить, скопировать/вставить, или удалить ячейки.

По клику на View DRD осуществляется переход назад к модели принятия решения.

Далее рассмотрим элементы таблицы принятия решения.

Описание элементов таблицы принятия решений

Таблица решений представляет собой логику принятия решений, которая может быть представлена в виде таблицы. Логика состоит из входов, выходов и правил.

../../../../../_images/decision_5.png
  1. Наименование таблицы решений

  2. Политика выбора

  3. Входной элемент

  4. Выходной элемент

  5. Правило

По клику правой кнопки мыши на строку решения становится доступно меню:

../../../../../_images/decision_16.png

Используя меню, можно добавить, скопировать/вставить, или удалить строки решений, изменить язык выражения.

Политика выбора

../../../../../_images/decision_6.png

Таблица решений имеет политику выбора, которая указывает, из чего состоят результаты оценки таблицы решений.

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

Политики выбора Unique, Any и First всегда будут возвращать не более одного удовлетворяемого правила.

Политики выбора Rule Order и Collect могут возвращать несколько удовлетворенных правил.

Политика

Описание

Unique (Уникальная)

Может быть выполнено только одно правило или вообще не может быть выполнено правило. Результат таблицы решений содержит выходные записи удовлетворенного правила.
Если выполняется более одного правила, нарушается политика уникального выбора.
Является политикой выбора по умолчанию.

First (Политика первого совпадения)

Можно удовлетворить несколько правил. Результат таблицы решений содержит только вывод первого выполненного правила.

Priority

Выходные данные правил имеют приоритет.
Правила могут перекрываться, но учитывается только совпадение с наивысшим выходным приоритетом.Пока не реализовано.
Пока не реалтзовано.

Any (Любая)

Можно удовлетворить несколько правил. Однако все удовлетворяемые правила должны генерировать один и тот же результат.
Результат таблицы решений содержит только вывод одного из удовлетворенных правил.
Если выполняются несколько правил, которые генерируют разные выходные данные, политика выбора нарушается.

Collect (Сбор)

Можно удовлетворить несколько правил. Результат таблицы решений содержит вывод всех удовлетворяемых правил в произвольном порядке в виде списка.
Кроме того, для политики выбора Collect можно указать агрегатор.
Если указан агрегатор, результат таблицы решений будет содержать только одну выходную запись. Агрегатор сгенерирует выходную запись из всех удовлетворенных правил.
Для политики выбора Collect доступны следующие операторы

Rule order (Порядок применения правил)

Можно удовлетворить несколько правил.
Результат таблицы решений содержит выходные данные всех удовлетворяемых правил в порядке следования правил в таблице решений.

Output order

Результатом всех сопоставленнях правил является список выходов, упорядоченных по их (убывающему) приоритету выхода.

Операторы для политики выбора Collect:

SUM

Агрегатор SUM суммирует все выходные данные выполненных правил.

MIN

Агрегатор MIN можно использовать для возврата наименьшего выходного значения всех удовлетворяемых правил.

MAX

Агрегатор MAX можно использовать для возврата наибольшего выходного значения всех удовлетворяемых правил.

COUNT

Агрегатор COUNT можно использовать для возврата количества выполненных правил.

Входной элемент

../../../../../_images/decision_7.png

Таблица решений может иметь один или несколько входных элементов. Входной элемент определяет идентификатор, метку, выражение и тип ввода таблицы решений.

Ввод можно редактировать, дважды кликнув заголовок соответствующего столбца в таблице решений.

1

Наименование входного элемента

Краткое описание. Обратите внимание, что наименование не обязательно, но рекомендуется, поскольку она помогает понять суть решения.

2

Expression

Входное выражение указывает, как генерируется значение входного предложения.
Это выражение будет оцениваться механизмом DMN. Обычно это просто ссылка на переменную, которая доступна во время оценки.

3

Expression language

Язык входного выражения. Поддерживаемые языки выражений:
  • JUEL

  • FEEL

4

Input variable

Имя входной переменной. Когда входное выражение оценивается, возвращаемое значение сохраняется в переменной.
Переменная может использоваться в выражении входной записи.

5

Type

Тип входного предложения. После того как входное выражение оценивается механизмом DMN, он преобразует результат в указанный тип.
Поддерживаемые типы:
  • string

  • boolean

  • integer

  • long

  • double

  • date

Выходной элемент

../../../../../_images/decision_8.png

Таблица решений может иметь один или несколько выходных элементов.

Выходной элемент определяет идентификатор, метку, имя и тип вывода таблицы решений.

1

Наименование выходного элемента

Краткое описание. Обратите внимание, что наименование не обязательно, но рекомендуется, поскольку она помогает понять суть решения.

2

Output name

Имя выхода используется для ссылки на значение выхода в результате таблицы решений.
Если таблица решений имеет более одного выхода, то все выходы должны иметь уникальное имя.

3

Type

После того, как выходная запись оценивается механизмом DMN, он преобразует результат в указанный тип.
Поддерживаемые типы:
  • string

  • boolean

  • integer

  • long

  • double

  • date

Правило

../../../../../_images/decision_9.png

Таблица решений может иметь одно или несколько правил. Каждое правило содержит входные и выходные элементы.

Входные элементы являются условием, а выходные элементы — заключением правила. Если каждый входной элемент (условие) выполняется, то правило выполняется и результат решения содержит выходные элементы (заключение) этого правила.

../../../../../_images/decision_10.png

1. Входной элемент

Если входной элемент не имеет отношения к правилу, то выражение пусто.

Если в качестве языка выражений используется FEEL, то пустой входной элемент представлен как - . В противном случае выражение пусто.

Если глобальный язык выражений не установлен, вместо него используется язык выражений по умолчанию. Язык выражений по умолчанию для входных записей — FEEL

2. Выходной элемент

Правило может иметь один или несколько выходных элементов, которые являются выводами правила.

Если выходной элемент пустой, то выходные данные игнорируются и не являются частью результата таблицы решений.

Если глобальный язык выражений не установлен, вместо него используется язык выражений по умолчанию. Язык выражений по умолчанию для выходных записей — JUEL.

3. Описание:

В правило может быть добавлено описание, содержащее дополнительную информацию.

Типы решения

Для решения в свойствах достуны доступны:

../../../../../_images/decision_11.png

По нажатию на Empty (1) у элемента удаляется таблица решения.

../../../../../_images/decision_12.png

Для добавления таблицы выберите:

../../../../../_images/decision_13.png

По нажатию на Literal Expression (2) доступен ввод литерального выражения.

../../../../../_images/decision_14.png ../../../../../_images/decision_15.png

Литеральное выражение решения представляет собой логику решения, которая может быть представлена в виде выражения в DMN 1.3. Он состоит из буквенного выражения и переменной .

Буквенное выражение указывает, как генерируется значение решения. Это выражение будет оцениваться механизмом DMN. Его можно использовать для выполнения сложных вычислений, для вызова bean-компонента, обеспечивающего логику принятия решений, или для объединения выходных значений решений .

Литеральное выражение решения должно иметь переменную, которая определяет имя и тип результата решения.

Пример создания таблицы принятия решений

Кликните дважды на поле и установите название решения «Решение по закупке». Далее перейдите к таблице решений, кликнув значок таблицы в верхней части решения:

../../../../../_images/sample_1.png

Для установки наименования входного элемента, дважды кликните поле под «When» и введите «Группа товаров» (1) в самом верхнем поле.

Для установки наименования выходного элемента, дважды кликните поле под «Then» и введите «Согласование» (2) в самом верхнем поле.

../../../../../_images/sample_2.png

Предполагая, что входное значение для «Группа товаров» представляется переменной с именем «type», входное выражение должно быть «type» c типом string.

Дважды кликните поле «Группа товаров». В появившемся модальном меню установите «type» в качестве выражения, и тип string, и закройте его.

../../../../../_images/sample_3.png

Затем дважды щелкните поле «Согласование» и установите «agreement» в качестве названия выходного элемента и тип string.

../../../../../_images/sample_4.png

Далее добавьте первое правило, указывающее, что для «Канцелярские товары» — «Разрешить».

Нажмите кнопку «+» внизу таблицы или просто нажмите в любом месте последней строки.

В добавленной строке введите «Канцелярские товары» в столбце ввода и «Разрешить» в столбце вывода.

../../../../../_images/sample_5.png

«Канцелярские товары» — это условие (т. е. входной элемент) правила. Это выражение в FEEL , которое применяется, а затем проверяет, равно ли входное значение (т. е. переменная «type») «Канцелярские товары».

«Разрешить» — это вывод (т. е. выходной элемент) правила. Это простое выражение в JUEL возвращает строку «Канцелярские товары».

Затем добавьте второй входной элемент «Стоимость» с входным выражением «cost» и типом «integer». Заполните таблицу дополнительными правилами для оставшихся Групп товаров.

../../../../../_images/sample_6.png

Установите для политики выбора значение «Unique» , которое указывает, что может совпадать только одно правило. Убедитесь, что таблица решений содержит только одно правило, которое может соответствовать входным данным.

Кликните раскрывающийся список «Политика выбора» и выберите политику «Unique».

../../../../../_images/sample_7.png

Реализация DMN для динамической роли

Динамическая роль назначается в типе данных на вкладке Роли и устанавливает гибкую логику, по которой будет произведено вычисление состава пользователей роли.

Входными данными для вычисления DMN является заполненная Модель на основе рекорда. Рекорд - сущность с набором атрибутов и идентификатором записи (RecordRef), см. подробно о Records API).

В модели могут быть использованы системные атрибуты.

По ключу модели будут доступны вычисленные данные рекорда в контексте DMN.

Модель заполняется в Описании DMN:

../../../../../_images/dmn_role_1.png

Решение DMN должно вернуть String с именами реципиентов. Если в одной строке DMN необходимо перечислить несколько реципиентов, то их можно разделить запятой:

../../../../../_images/dmn_role_2.png
  • Hit policy указывается на ваше усмотрение, в зависимости от необходимого результата.

  • Конечный Output variable name значения не имеет, можно оставить пустым. Главное указать тип String

    ../../../../../_images/dmn_role_3.png
  • При вычислении всегда используется последняя опубликованная версия DMN

См. пример использования DMN для динамической роли