2014-10-15 1 views
2

У меня есть активность вызова, которая используется в разных полосах моей диаграммы BPMN. В деятельности вызова есть задача. Можно ли определить полосу активности вызова из задачи?Как определить полосу вызова?

Это выглядит примерно так в изображениях здесь:

Process Diagram

Call Activity

Я хочу, чтобы определить "MyLane1" соответственно "MyLane2" внутри задач "Получить родительский Лейн".

ответ

5

Вы можете использовать модель API BPMN, чтобы определить полосу, которая ссылается на деятельность:

ProcessDefinition procDef = repositoryService.createProcessDefinitionQuery().processDefinitionKey("idOfProcess").singleResult(); 
BpmnModelInstance bpmnModelInstance = repositoryService.getBpmnModelInstance(procDef.getId()); 

CallActivity callActivity = null; 

Collection<Lane> lanes = bpmnModelInstance.getModelElementsByType(Lane.class); 
// iterate the lanes 
for (Lane lane : lanes) { 
    // iterate the flownodes referenced by the lane: 
    for (FlowNode flowNode : lane.getFlowNodeRefs()) { 
    if("idOfCallactivity".equals(flowNode.getId())) { 
     callActivity = (CallActivity) flowNode; 
     break; 
    } 
    } 
} 


if(callActivity != null) { 
    // work with callactivity 
} 
+0

Спасибо за быстрый ответ. Похоже, я мог бы попробовать что-то вроде этого. Я дам ему попробовать завтра и дам вам знать, как это получилось. – Denson

+0

Хорошо, я играл с вашим кодом, но есть проблема, что я не могу найти идентификатор активности вызова изнутри службы «Get parent lane». Родитель переменной «исполнение» в моем классе, реализующий интерфейс JavaDelegate, имеет значение null. – Denson

1

Использование внутреннего API вы можете также сделать

public void execute(DelegateExecution e) { 

    ((ExecutionEntity)e).getProcessInstance() 
    .getSuperExecution() 
    .getActivityId() 
} 
+0

Спасибо, что это было именно то, что мне нужно в дополнение к вашему предыдущему ответу. Вы сделали мой день :) – Denson

Смежные вопросы