簡體   English   中英

如何使用activiti bpmn完成第二項任務?

[英]How to finish a second task with activiti bpmn?

有兩個並行啟動的任務: ManagerReviewTaskDirectorReviewTask

什么時候:

  • DirectorReviewTask首先完成, ManagerReviewTask也應完成(以編程方式)。
  • ManagerReviewTask首先完成,工作流應等待,直到分配的用戶完成DirectorReviewTask

我怎么做? 您能否提供一個帶有activiti xml的示例?

一個相當標准的模式。 標准的包含網關和取消信號。

在此處輸入圖片說明

這就是我將偵聽器添加到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" />

從BPMN的角度來看,您必須選擇以下幾種可能性:

  1. 在DirectorReviewTask之后(或作為其結束事件)添加發送信號(例如stopManagerReviewTask)。 在ManagerReviewTask上,您需要添加stopManagerReviewTask的處理作為邊界中斷信號事件。
  2. 如果DirectorReviewTask是流程中的最后一個動作,則以End Terminate事件結束包含DirectorReviewTask的流。

在情況1中,您只需要考慮如何強制激活程序才能停止同一進程中的一個DirectorReviewTask,而不是所有實例並行運行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM