【问题标题】:How to finish a second task with activiti bpmn?如何用activiti bpmn完成第二个任务?
【发布时间】:2016-11-23 07:58:41
【问题描述】:

有 2 个任务并行启动:ManagerReviewTaskDirectorReviewTask

时间:

  • DirectorReviewTask 先完成,ManagerReviewTask 也应该完成(以编程方式)。
  • ManagerReviewTask 先完成,工作流应该等到分配的用户完成 DirectorReviewTask

我该怎么做?你能提供一个activiti xml的例子吗?

【问题讨论】:

    标签: java alfresco activiti bpmn


    【解决方案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" />
    

    【讨论】:

    • 如何在java中获取taskService服务?
    【解决方案2】:

    相当标准的模式。一个标准的包容性网关和一个取消信号。

    【讨论】:

    • 能否请您也添加 xml 表示形式?
    【解决方案3】:

    从 BPMN 的角度来看,您有多种选择:

    1. 在 DirectorReviewTask(或作为它的结束事件)之后添加发送信号(比如说 stopManagerReviewTask)。在 ManagerReviewTask 上,您需要将 stopManagerReviewTask 的处理添加为边界中断信号事件。
    2. 如果 DirectorReviewTask 是流程中的最后一个操作,则使用 E​​nd terminate 事件结束包含 DirectorReviewTask 的流程。

    在情况 1 中,您只需要考虑如何强制 activiti 仅停止同一进程中的一个 DirectorReviewTask,而不是所有实例并行运行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-24
      • 1970-01-01
      相关资源
      最近更新 更多