复习步骤12- 16 BPMN事件(3)结束事件

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xiangshuai198807/article/details/89843098

结束事件: --按照事件的位置,开始事件一般都市捕获事件,结束时间一般都是抛出事件

  • 无指定结束事件 -- 什么都没指定直接就结束掉了
  • 错误结束事件   --  往往和错误边界事件或错误开始事件一起使用
  • 取消结束事件   --  往往和边界事件一起用,抛出一个错误,触发边界事件
  • 终止结束事件   --  终止流程

 

一. 测试错误结束事件

错误结束事件(抛出错误)-- 错误边界事件

错误结束事件(抛出错误)-- 错误开始事件(捕获别人抛出的错误开始流程)

   1.1 测试  错误结束事件 总会抛出错误 --  然后让错误开始事件 捕获到错误,开始执行错误捕获事件流程

    新建 end_event_error.bpmn(可直接将E:\学习文档子目录压缩\框架\工作流引擎\Activiti6.0\window\复习步骤11- BPMN事件(2)开始事件

 Start-event-test 项目下的start_event_error.bpmn COPY过来进行修改下即可) --一个正常流程(最后一个节点是错误结束事件而非普通结束事件)及处理正常流程错误信息的错误处理流程

1.2修改end_event_error.bpmn -- 给Count People和 Event sub Process 这两个Service Task节点加对应的处理类(全类名--下图的包名是有误的),及定义错误信息标签,并在错误结束事件流程节点上进行引用,如下图,

 

1.3 测试代码

//测试 错误开始事件

    public static void errorEndEventTest(){

       ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();

        // 存储服务

        RepositoryService rs = engine.getRepositoryService();

        // 运行时服务

        RuntimeService runService = engine.getRuntimeService();

       

        Deployment dep = rs.createDeployment().addClasspathResource("end_event_error.bpmn").deploy();

        ProcessDefinition pd = rs.createProcessDefinitionQuery().deploymentId(dep.getId()).singleResult();

       

        ProcessInstance pi = runService.startProcessInstanceById(pd.getId());

       

    /* 启动流程   输出结果

        清点人数,人数不对,要抛出错误信息,给错误子流程 --- CountDelegate execute方法

        收到正常流程的错误信息通知,人数不对,执行上报任务  --- ReportDelegate execute方法

       

        */

       

    }

 

 

二. 测试取消结束事件

取消结束事件 注意两点

  • 只能使用在事务子流程中

  

  • 与取消边界事件一起使用 (因为没有取消开始事件)

2.1 新建取消结束事件流程cancle_end_event.bpmn -- 取消结束事件在事务子流程中,并于取消边界事件一起使用

 

 

 

2.2  修改 cancle_end_event.bpmn

  注意 是补偿这个便签是 true 而不是如下图的ture

2.3 测试代码

//测试取消结束事件

    public static void cancleEndEventTest(){

          ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();

           // 存储服务

           RepositoryService rs = engine.getRepositoryService();

           // 运行时服务

           RuntimeService runService = engine.getRuntimeService();

           TaskService taskService = engine.getTaskService();

          

           Deployment dep = rs.createDeployment().addClasspathResource("cancle_end_event.bpmn").deploy();

           ProcessDefinition pd = rs.createProcessDefinitionQuery().deploymentId(dep.getId()).singleResult();

           ProcessInstance pi = runService.startProcessInstanceById(pd.getId());

          

           Task task = taskService.createTaskQuery().processInstanceId(pi.getId()).singleResult();

           System.out.println("当前流程任务:" + task.getName()); // Tran Task任务节点

          

           taskService.complete(task.getId());

           /*

            Tran Task任务节点 完成后会到 取消结束事件,取消结束事件会触发补偿边界事件,这样补偿边界的处理类CompenstaionDelegate

                       会执行execute()方法 输出进行补偿处理,同时会触发取消边界事件

           */

           task = taskService.createTaskQuery().processInstanceId(pi.getId()).singleResult();

           System.out.println("当前流程任务:" + task.getName()); //触发取消边界事件 所以在Cancle任务节点

    }

 

 

三. 测试 终止结束事件  --- 会将整个流程结束掉,不管并行网关还有多少流程没执行

3.1 新建 终止结束事件的流程图 terminal_end_event. bpmn

 

3.2测试方法

// 测试 终止结束事件  --- 会将整个流程结束掉,不管并行网关还有多少流程没执行

    public static void terminalEndEventTest(){

        ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();

         // 存储服务

         RepositoryService rs = engine.getRepositoryService();

         // 运行时服务

         RuntimeService runService = engine.getRuntimeService();

         TaskService taskService = engine.getTaskService();

        

         Deployment dep = rs.createDeployment().addClasspathResource("terminal_end_event.bpmn").deploy();

         ProcessDefinition pd = rs.createProcessDefinitionQuery().deploymentId(dep.getId()).singleResult();

         ProcessInstance pi = runService.startProcessInstanceById(pd.getId());

        

         long count = runService.createExecutionQuery().processInstanceId(pi.getId()).count();//执行流数据,三条,一条主执行流,两条子执行流

         System.out.println("终止前执行流数量 "+count);

        

         List<Task> list = taskService.createTaskQuery().processInstanceId(pi.getId()).list();

         list.forEach((task)->{

             if("task1".equals(task.getName())){//如果是task1 执行流程,好让其执行往终止结束事件

                 taskService.complete(task.getId());

             }

         });

         //终止结束事件  执行后

         count = runService.createExecutionQuery().processInstanceId(pi.getId()).count();;//目前有几条流程在跑

         System.out.println("终止后执行流数量 "+count);

        

    }

 

EndEventTest.java

package com.xiangshuai.act.c15;

 

 

import java.util.List;

 

import org.activiti.engine.ProcessEngine;

import org.activiti.engine.ProcessEngines;

import org.activiti.engine.RepositoryService;

import org.activiti.engine.RuntimeService;

import org.activiti.engine.TaskService;

import org.activiti.engine.repository.Deployment;

import org.activiti.engine.repository.ProcessDefinition;

import org.activiti.engine.runtime.ProcessInstance;

import org.activiti.engine.task.Task;

import org.activiti.engine.task.TaskQuery;

 

 

/**

 * @author lqx

 * 文件在 E:\学习文档子目录压缩\框架\工作流引擎\Activiti6.0\window\复习步骤12- 16 BPMN事件(3)结束事件

 * 或 我的网盘\我的笔记\学习文档子目录压缩\框架\工作流引擎\Activiti6.0\window\复习步骤12- 16 BPMN事件(3)结束事件

 */

public class EndEventTest {

    public static void main(String[] args) {

             //errorEndEventTest();

             //cancleEndEventTest();

             terminalEndEventTest();

         }

   

   

    //测试 错误开始事件

    public static void errorEndEventTest(){

             ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();

        // 存储服务

        RepositoryService rs = engine.getRepositoryService();

        // 运行时服务

        RuntimeService runService = engine.getRuntimeService();

       

        Deployment dep = rs.createDeployment().addClasspathResource("terminal_end_event.bpmn").deploy();

        ProcessDefinition pd = rs.createProcessDefinitionQuery().deploymentId(dep.getId()).singleResult();

       

        ProcessInstance pi = runService.startProcessInstanceById(pd.getId());

       

    /* 启动流程   输出结果

        清点人数,人数不对,要抛出错误信息,给错误子流程 --- CountDelegate execute方法

        收到正常流程的错误信息通知,人数不对,执行上报任务  --- ReportDelegate execute方法

       

        */

       

    }

   

   

   

   

    //测试取消结束事件

    public static void cancleEndEventTest(){

                ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();

           // 存储服务

           RepositoryService rs = engine.getRepositoryService();

           // 运行时服务

           RuntimeService runService = engine.getRuntimeService();

           TaskService taskService = engine.getTaskService();

          

           Deployment dep = rs.createDeployment().addClasspathResource("cancle_end_event.bpmn").deploy();

           ProcessDefinition pd = rs.createProcessDefinitionQuery().deploymentId(dep.getId()).singleResult();

           ProcessInstance pi = runService.startProcessInstanceById(pd.getId());

          

           Task task = taskService.createTaskQuery().processInstanceId(pi.getId()).singleResult();

           System.out.println("当前流程任务:" + task.getName()); // Tran Task任务节点

          

           taskService.complete(task.getId());

           /*

            Tran Task任务节点 完成后会到 取消结束事件,取消结束事件会触发补偿边界事件,这样补偿边界的处理类CompenstaionDelegate

                       会执行execute()方法 输出进行补偿处理,同时会触发取消边界事件

           */

           task = taskService.createTaskQuery().processInstanceId(pi.getId()).singleResult();

           System.out.println("当前流程任务:" + task.getName()); //触发取消边界事件 所以在Cancle任务节点

    }

   

   

    // 测试 终止结束事件  --- 会将整个流程结束掉,不管并行网关还有多少流程没执行

    public static void terminalEndEventTest(){

              ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();

         // 存储服务

         RepositoryService rs = engine.getRepositoryService();

         // 运行时服务

         RuntimeService runService = engine.getRuntimeService();

         TaskService taskService = engine.getTaskService();

         

         Deployment dep = rs.createDeployment().addClasspathResource("terminal_end_event.bpmn").deploy();

         ProcessDefinition pd = rs.createProcessDefinitionQuery().deploymentId(dep.getId()).singleResult();

         ProcessInstance pi = runService.startProcessInstanceById(pd.getId());

        

         long count = runService.createExecutionQuery().processInstanceId(pi.getId()).count();//执行流数据,三条,一条主执行流,两条子执行流

         System.out.println("终止前执行流数量 "+count);

        

         List<Task> list = taskService.createTaskQuery().processInstanceId(pi.getId()).list();

         list.forEach((task)->{

                  if("task1".equals(task.getName())){//如果是task1就 执行流程,好让其执行往终止结束事件

                           taskService.complete(task.getId());

                  }

         });

         //终止结束事件  执行后

         count = runService.createExecutionQuery().processInstanceId(pi.getId()).count();;//目前有几条流程在跑

         System.out.println("终止后执行流数量 "+count);

        

    }

   

   

   

}

猜你喜欢

转载自blog.csdn.net/xiangshuai198807/article/details/89843098