Решения в репозитории движка управления процессами
|
Этот раздел перенесён из документации Camunda 7 и в дальнейшем будет доработан с учётом особенностей OpenBPM Engine |
Чтобы оценить DMN-решение в Camunda 7, оно должно быть частью деплоймента. После того, как решение задеплоено, на него можно ссылаться по ключу и версии. Платформа поддерживает XML файлы DMN 1.3.
Как задеплоить решение
Чтобы задеплоить DMN-решение, вы можете либо использовать Repository Service (службу репозитория), либо добавить процессное приложение. Платформа распознает все файлы с расширением .dmn или .dmn11.xml как DMN ресурсы.
Как задеплоить решение с использованием Repository Service
Вы можете использовать Repository Service, чтобы создать новый деплоймент и добавить к нему DMN ресурсы. Следующий код, например, создаст деплоймент для DMN файла в classpath.
String resourceName = "MyDecision.dmn11.xml";
Deploymnet deployment = processEngine
.getRepositoryService()
.createDeployment()
.addClasspathResource(resourceName)
.deploy();
Как задеплоить решение с использованием процессного приложения
Если вы деплоите процессное приложение, вы можете добавить DMN файл к вашему архиву как другой ресурс, так же, как в случае с BPMN процессами. DMN файлы должны иметь расширение .dmn или .dmn11.xml, чтобы их опознали как DMN ресурс.
Если ваш архив процессов настроен таким образом, чтобы сканировать определения процесса, он автоматически задеплоит также и DMN определения. Это поведение по умолчанию.
<process-archive name="loan-approval">
<properties>
<property name="isScanForProcessDefinitions">true</property>
</properties>
</process-archive>
В противном случае вам придется задать DMN ресурсы в явном виде в [архиве процессов].
<process-archive name="loan-approval">
<resource>bpmn/invoice.bpmn</resource>
<resource>dmn/assign-approver.dmn</resource>
<properties>
<property name="isScanForProcessDefinitions">false</property>
</properties>
</process-archive>
Версионирование решений
Когда DMN ресурс деплоится на платформу, каждое поддерживаемое DMN решение превращается в определение решения. Определение решения представляет одно DMN решение в рамках платформы. Помимо прочего, оно имеет следующие атрибуты:
-
id: уникальный идентификатор определения решения, сгенерированный платформой. -
key:id-атрибут DMN решения из XML файла. -
name:name-атрибут DMN решения из XML файла. -
version: Версия определения решения, сгенерированная платформой.
Ключ определения решения
Ключ определения решения эквивалентен атрибуту id DMN решения в DMN XML.
<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="https://www.omg.org/spec/DMN/20191111/MODEL/" id="definitions" name="definitions" namespace="http://camunda.org/schema/1.0/dmn">
<decision id="my-decision" name="My Decision">
<decisionTable>
<output id="output1"/>
</decisionTable>
</decision>
</definitions>
При деплойменте вышеприведенного DMN XML файла создается определение решения со следующими свойствами:
-
id: GENERATED -
key:my-decision -
name:My Decision -
version: 1
Версия определения решения
При деплойменте решения проверяется, не задеплоено ли уже решение с таким же ключом. Если нет, тогда определению решения назначается версия 1 для данного ключа. Если определение решения с таким же ключом уже существует, вновь задеплоенное определение решения станет новой версией существующего, увеличиваясь на единицу.
Такое версионирование определений решения позволяет пользователю обновлять решения, но при этом сохранять возможность использовать предыдущие версии решений, если это необходимо.
Id определения решения
Значение id определения решения не является эквивалентным значению атрибута id у DMN XML решения. Оно генерируется платформой как уникальный идентификатор. Это означает, что id определения решения напрямую соответствует комбинации ключа и версии у определения решения.
Как ссылаться на определение решения
Чтобы сослаться на задеплоенное определение решения в контексте платформы, используется либо id определения решения или ключ и версия определения решения. Если используется ключ определения решения, но не задана версия, по умолчанию применяется последняя версия определения решения.
Версионирование графа требований к решению
В дополнение к определениям решений, граф требований к решению (то есть элемент definitions в XML) задеплоенного DMN ремурса превращается в определение требований к решению. Помимо прочего, у него есть следующие атрибуты:
-
id: Уникальный идентификатор определения требований к решению, сгенерированный платформой. -
key: Атрибутidдля определения из XML файла. -
name: Атрибутnameдля определения из XML файла. -
version: Версия определения требований к решению, сгенерированная платформой.
Обратите внимание, что определение требований к решению создается только когда DMN ресурс содержит более одного решения.
Ключ определения требований к решению
Ключ определения требований к решению эквивалентен атрибуту id элемента definitions в DMN XML.
<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="https://www.omg.org/spec/DMN/20191111/MODEL/"
id="my-drg"
name="My DRG"
namespace="http://camunda.org/schema/1.0/dmn">
<!-- ... -->
</definitions>
Когда мы деплоим вышеприведенный DMN XML файл, создается определение требований к решению со следующими свойствами:
-
id: GENERATED -
key:my-drg -
name:My DRG -
version: 1
Версия определения требований к решению
Когда деплоится граф требований к решению, идет проверка на то, не задеплоено ли уже определение с таким же ключом. Если нет, определению требований к решению назначается версия 1 для этого ключа. Если определение требований к решению с таким же ключом уже существует, вновь задеплоенное определение будет новой версией существующего, и номер версии увеличится на единицу.
Обратите внимание, что версии определений требований к решениям в контейнере могут отличаться от определения требований к решению, если оно также задеплоено внутри других DMN ресурсов, как единственное решение внутри DMN ресурса или добавлено позднее.
Отправка запросов к репозиторию решений
Все задеплоенные определения решений и требований к решениям можно опрашивать через API сервиса репозитория.
Отправка запросов к определениям решений
Получение определения решения с id равным decisionDefinitionId:
DecisionDefinition decisionDefinition = processEngine
.getRepositoryService()
.getDecisionDefinition("decisionDefinitionId");
Запрос на определение решения с ключом "decisionDefinitionKey" и версией 1:
DecisionDefinition decisionDefinition = processEngine
.getRepositoryService()
.createDecisionDefinitionQuery()
.decisionDefinitionKey("decisionDefinitionKey")
.decisionDefinitionVersion(1)
.singleResult();
Запрос на последнюю версию определения решения с ключом "decisionDefinitionKey":
DecisionDefinition decisionDefinition = processEngine
.getRepositoryService()
.createDecisionDefinitionQuery()
.decisionDefinitionKey("decisionDefinitionKey")
.latestVersion()
.singleResult();
Запрос на все версии определений решений для ключа "decisionDefinitionKey":
List<DecisionDefinition> decisionDefinitions = processEngine
.getRepositoryService()
.createDecisionDefinitionQuery()
.decisionDefinitionKey("decisionDefinitionKey")
.list();
Дополнительно сервис репозитория может использоваться для получения DMN XML файла, экземпляра DMN модели или образов задеплоенных диаграмм .
RepositoryService repositoryService = processEngine.getRepositoryService();
DmnModelInstance dmnModelInstance = repositoryService
.getDmnModelInstance("decisionDefinitionId");
InputStream modelInputStream = repositoryService
.getDecisionModel("decisionDefinitionId");
InputStream diagramInputStream = repositoryService
.getDecisionDiagram("decisionDefinitionId");
Отправка запросов к определениям требований к решениям
Запросы к определениям требований к решениям похожи на запросы к определениям решений.
// query for the latest version of a decision requirements definition by key
DecisionRequirementsDefinition decisionRequirementsDefinition = processEngine
.getRepositoryService()
.createDecisionRequirementsDefinitionQuery()
.decisionRequirementsDefinitionKey(key)
.latestVersion()
.singleResult();
// query for all versions of decision requirements definitions by name
List<DecisionRequirementsDefinition> decisionRequirementsDefinitions = processEngine
.getRepositoryService()
.createDecisionRequirementsDefinitionQuery()
.decisionRequirementsDefinitionName(name)
.list();
Авторизации для отправки запросов к репозиторию решений
Чтобы отправлять запросы к определениям решений, пользователю необходимо разрешение уровня READ на ресурсе DECISION_DEFINITION. Это разрешение необходимо также для извлечения определений решений, моделей решений и диаграмм решений из репозитория. Значение resource id для авторизации равно ключу определения решения.
Чтобы отправлять запросы к оределениям требований к решениям, пользователю необходимо разрешение уровня READ на ресурсе DECISION_REQUIREMENTS_DEFINITION. Значение
resource id авторизации равно ключу определения требований к решению.
Больше информации об авторизациях можно найти в разделе please refer to the Сервис авторизаций.
Cockpit
Задеплоенные определения решений можно просматривать в веб-приложении Cockpit.
Лицензия и атрибуция
Эта документация была создана на базе материала "Camunda 7 Docs" от Camunda, находится под лицензией Creative Commons Attribution-ShareAlike 3.0 Unported License .
Оригинал документации: https://docs.camunda.org