Сервис решений в движке управления процессами
|
Этот раздел перенесён из документации 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