Сервис решений в движке управления процессами

Этот раздел перенесён из документации Camunda 7 и в дальнейшем будет доработан с учётом особенностей OpenBPM Engine

Сервис решений является частью сервисных API двидка управления процессами. Он позволяет оценивать определение задеплоенного решения независимо от BPMN и CMMN.

Оценка решения

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

DecisionService decisionService = processEngine.getDecisionService();

VariableMap variables = Variables.createVariables()
  .putValue("status", "bronze")
  .putValue("sum", 1000);

DmnDecisionResult decisionResult = decisionService
  .evaluateDecisionByKey("decision-key")
  .variables(variables)
  .evaluate();

// alternatively for decision tables only
DmnDecisionTableResult decisionResult = decisionService
  .evaluateDecisionTableByKey("decision-key")
  .variables(variables)
  .evaluate();

Ключ решения

Ключ определения решения задается атрибутом id элемента decision в DMN XML. Разная система именования относится к версионированию решений. Поскольку ключ может ссылаться на несколько версий определения решения, id задает в точности одну версию.

Передача данных

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

Чтобы получить больше информации по различным выражениям, см. Справочник по DMN 1.3.

Авторизации с целью оценки решений

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

Чтобы получить больше информации по авторизациям, см. раздел Сервис авторизации.

Работа с результатом решения

Результат оценки называется результатом решения. Результат решения — это комплексный объект типа DmnDecisionResult. Вам следует воспринимать его как список пар ключ-значение.

Если решение реализовано как [таблица решения], то каждое вхождение в списке представляет одно выполненное правило. Элементы входных данных для этого правила представлены парами ключ-значение. Ключ в паре задан именем элемента выходных данных.

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

Результат решения предоставляет методы из интерфейса List<Map<String, Object>> и некоторые методы для удобства.

DmnDecisionResult decisionResult = ...;

// get the value of the single entry of the only matched rule
String singleEntry = decisionResult.getSingleResult().getSingleEntry();

// get the value of the result entry with name 'result' of the only matched rule
String result = decisionResult.getSingleResult().getEntry("result");

// get the value of the first entry of the second matched rule
String firstValue = decisionResult.get(1).getFirstEntry();

// get a list of all entries with the output name 'result' of all matched rules
List<String> results = decisionResult.collectEntries("result");

// shortcut to get the single output entry of the single rule result
// - combine getSingleResult() and getSingleEntry()
String result = decisionResult.getSingleEntry();

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

Если решение реализовано как таблица, тогда его тоже можно оценить, используя один из методов evaluateDecisionTable. В этом случае оценка возвращает DmnDecisionTableResult, который семантически тождественен и предоставляет те же методы, что и DmnDecisionResult.

История оцененных решений

Когда решение прошло оценку, появляется новое вхождение в историю типа HistoricDecisionInstance, содержащее входные и выходные данные решения. К истории можно посылать запросы из сервиса истории.

List<HistoricDecisionInstance> historicDecisions = processEngine
  .getHistoryService()
  .createHistoricDecisionInstanceQuery()
  .decisionDefinitionKey("decision-key")
  .includeInputs()
  .includeOutputs()
  .list();

Чтобы получить больше информации по этому вопросу, см. История для DMN решений.

Лицензия и атрибуция

Эта документация была создана на базе материала "Camunda 7 Docs" от Camunda, находится под лицензией Creative Commons Attribution-ShareAlike 3.0 Unported License .

Оригинал документации: https://docs.camunda.org