2016-11-23 9 views
1

Параллельно запускаются две задачи: ManagerReviewTask и DirectorReviewTask.Как завершить вторую задачу с помощью activiti bpmn?

Когда:

  • DirectorReviewTask закончил первый, ManagerReviewTask должна быть закончена слишком (программно).
  • ManagerReviewTask закончен первым, рабочий процесс должен подождать, пока DirectorReviewTask не будет завершен назначенным пользователем.

Как это сделать? Не могли бы вы привести пример с activiti xml?

ответ

1

Вот как я бы добавил слушателя к DirectorReviewTask и закончил ManagerReviewTask.

<userTask id="DirectorReviewTask" name="DirectorReviewTask"> 
    <extensionElements> 
     <activiti:taskListener event="complete" class="listeners.DirectorReviewTaskListener"/> 
    </extensionElements> 
</userTask> 

Здесь класс у слушателя:

public class DirectorReviewTaskListener implements TaskListener { 

    @Override 
    public void notify(DelegateTask delegateTask) { 
     if (TaskListener.EVENTNAME_COMPLETE.equals(delegateTask.getEventName())) { 
      String executionId = delegateTask.getExecutionId(); 
      Task managerReviewTask = taskService.createTaskQuery().executionId(executionId).taskName("ManagerReviewTask").singleResult(); 
      if (managerReviewTask != null) { 
       taskService.complete(managerReviewTask.getId()); 
      } 
     } 
    } 
} 

Я думаю, вы должны в конечном итоге с параллельным шлюзом:

<parallelGateway id="fork" /> 
<sequenceFlow sourceRef="fork" targetRef="ManagerReviewTask" /> 
<sequenceFlow sourceRef="fork" targetRef="DirectorReviewTask" /> 

<userTask id="ManagerReviewTask" name="ManagerReviewTask" /> 
<sequenceFlow sourceRef="ManagerReviewTask" targetRef="join" /> 

<userTask id="DirectorReviewTask" name="DirectorReviewTask"> 
    <extensionElements> 
     <activiti:taskListener event="complete" class="listeners.DirectorReviewTaskListener"/> 
    </extensionElements> 
</userTask> 
<sequenceFlow sourceRef="DirectorReviewTask" targetRef="join" /> 

<parallelGateway id="join" /> 
<sequenceFlow sourceRef="join" targetRef="GO_FROM_HERE" /> 
1

С BPMN точки зрения вы должны возможности выбрать из:

  1. После того, как DirectorReviewTask (или как завершение событие для него) добавить сигнал отправки (скажем stopManagerReviewTask). На ManagerReviewTask вам нужно добавить обработку stopManagerReviewTask в качестве события прерывания прерывания.
  2. Если DirectorReviewTask является последним действием в этом процессе, завершите поток, содержащий DirectorReviewTask с событием завершения окончания.

В случае 1 вам нужно только подумать о том, как принудительно активировать, чтобы остановить только один экземпляр DirectorReviewTask из одного и того же процесса, а не всех экземпляров, работающих параллельно.

2

довольно стандартный шаблон. Стандартный включенный шлюз и сигнал для отмены.

enter image description here

+0

Не могли бы вы также добавить представление xml? – Cherry

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

  • Нет связанных вопросов^_^