Прочтение модели

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