2016-11-23 5 views
1

병렬로 시작되는 작업은 ManagerReviewTaskDirectorReviewTask입니다.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> 

청취자 클래스 :

<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의 관점에서 당신이 선택할 수있는 가능성을 가지고 : 당신이 병렬 게이트웨이와 끝까지해야한다고 생각

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()); 
      } 
     } 
    } 
} 

  1. DirectorReviewTask (또는 끝 전자 그것을위한 통풍구) 신호를 보내십시오 (말하자면 stopManagerReviewTask). ManagerReviewTask에서 경계 신호 신호 이벤트로 stopManagerReviewTask의 처리를 추가해야합니다.
  2. DirectorReviewTask가 프로세스의 마지막 작업 인 경우 DirectorReviewTask 및 종료 종료 이벤트가 포함 된 흐름을 종료하십시오.

경우 1의 경우 모든 인스턴스가 병렬로 실행되는 것은 아니며 동일한 프로세스에서 하나의 DirectorReviewTask 만 중지하도록 activiti를 강제 실행하는 방법을 고려해야합니다.

2

오히려 표준 패턴. 표준 포함 게이트웨이 및 취소 할 신호.

enter image description here

+0

xml 표현도 추가 할 수 있습니까? – Cherry

관련 문제