Прочтение модели
|
Этот раздел перенесён из документации Camunda 7 и в дальнейшем будет доработан с учётом особенностей OpenBPM Engine |
Если вы уже создали CMMN-модель и хотите обработать ее через API CMMN-моделей, вы можете импортировать ее, используя следующие методы:
// read a model from a file
File file = new File("PATH/TO/MODEL.cmmn");
CmmnModelInstance modelInstance = Cmmn.readModelFromFile(file);
// read a model from a stream
InputStream stream = [...]
CmmnModelInstance modelInstance = Cmmn.readModelFromStream(stream);
После того как вы импортировали вашу модель, вы можете искать элементы по их id или по типу элемента.
// find element instance by ID
HumanTask humanTask = (HumanTask) modelInstance.getModelElementById("HumanTask_1");
// find all elements of the type HumanTask
ModelElementType humanTaskType = modelInstance.getModel().getType(HumanTask.class);
Collection<ModelElementInstance> humanTaskInstances = modelInstance.getModelElementsByType(humanTaskType);
Для каждого экземпляра элемента вы теперь можете читать и редактировать значения атрибутов. Это можно сделать либо с использованием предоставленных вспомогательных методов, либо через API XML-моделей общего назначения. Если вы добавили кастомизированные атрибуты к CMMN элементам, вы всегда можете обращаться к ним через API XML-моделей общего назначения.
HumanTask humanTask = (HumanTask) modelInstance.getModelElementById("HumanTask_1");
// read attributes by helper methods
String id = humanTask.getId();
String name = humanTask.getName();
// edit attributes by helper methods
humanTask.setId("new-id");
humanTask.setName("new name");
// read attributes by generic XML model API (with optional namespace)
String custom1 = humanTask.getAttributeValue("custom-attribute");
String custom2 = humanTask.getAttributeValueNs("custom-attribute-2", "http://camunda.org/custom");
// edit attributes by generic XML model API (with optional namespace)
humanTask.setAttributeValue("custom-attribute", "new value");
humanTask.setAttributeValueNs("custom-attribute", "http://camunda.org/custom", "new value");
Вы также можете обращаться к дочерним элементам основного элемента или к ссылкам на другие элементы. Например, ссылки на плановый элемент ведут на элемент определения (задача для человека, процессная задача и т.д.like human task, process task, etc.), в то время как элемент определеня со ссылкой содержит элемент управления по умолчанию.
Рассмотрим следующую простую CMMN-модель:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<definitions targetNamespace="http://camunda.org/examples"
xmlns="http://www.omg.org/spec/CMMN/20151109/MODEL">
<case id="case-with-one-task">
<casePlanModel id="CasePlanModel_1">
<planItem id="PI_HumanTask_1" definitionRef="HumanTask_1" name="A Task" />
<humanTask id="HumanTask_1">
<defaultControl>
<manualActivationRule>
<condition>${false}</condition>
</manualActivationRule>
</defaultControl>
</humanTask>
</casePlanModel>
</case>
</definitions>
Теперь вы можете использовать API CMMN-моделей, чтобы получить определение планового элемента с ID равным PI_HumanTask_1.
// read cmmn model from file
File file = new File("PATH/TO/MODEL.cmmn");
CmmnModelInstance modelInstance = Cmmn.readModelFromFile(file);
// find plan item by id
PlanItem planItem = (PlanItem) modelInstance.getModelElementById("PI_HumanTask_1");
// get the definition element
PlanItemDefinition definition = planItem.getDefinition();
// get the default control
DefaultControl defaultControl = definition.getDefaultControl();
ManualActivationRule rule = defaultControl.getManualActivationRule();
Лицензия и атрибуция
Эта документация была создана на базе материала "Camunda 7 Docs" от Camunda, находится под лицензией Creative Commons Attribution-ShareAlike 3.0 Unported License .
Оригинал документации: https://docs.camunda.org