复习步骤13-BPMN事件(4)边界事件

边界事件(是捕获事件)

  • 定时器边界事件
  • 错误边界事件
  • 信号边界事件
  • 补偿边界事件

 

边界事件被触发,那么当前流程会被终止,改走触发后的流程

本章节需掌握前三种

事件的学习掌握两点:什么时候会被触发,触发后有什么后果

一、定时器边界事件

测试当正常流程节点初级工程师如果1分钟没有搞定(即定时器延时执行标签-- <timeDuration>PT1M</timeDuration>

一分钟后会执行定时器边界事件),就触发定时器边界事件让中级工程师节点进行处理

   1.1 新建 timer- boundary-event-test.bpmn

1.2 修改 timer- boundary-event-test.bpmn

设置初级工程师 触发定时器边界事件 设为1分钟

 

1.3 修改 activiti.cfg.xml 因为定时器事件需异步

 

3.5 测试代码

//测试 定时器边界事件

    public static void timerBoundaryEventTest(){

       ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();

        // 存储服务

        RepositoryService rs = engine.getRepositoryService();

        // 运行时服务

        RuntimeService runService = engine.getRuntimeService();

       

        TaskService taskService = engine.getTaskService();

       

        Deployment dep = rs.createDeployment().addClasspathResource("timer- boundary-event-test.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());

       

        //线程睡眠70秒,这样 在第60秒的时候,就会触发初级工程师的 定时器边界事件(<timeDuration>PT1M</timeDuration>),跳到中级工程师处理节点

        try {

           Thread.sleep(70*1000);

       } catch (InterruptedException e) {

           // TODO Auto-generated catch block

           e.printStackTrace();

       }

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

        System.out.println("当前任务是 "+task.getName());

           /*

            输出  当前任务是 初级工程师

            当前任务是 中级工程师*/

    }

 

 

二、错误边界事件

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

的错误结束事件   --  往往和错误边界事件或错误开始事件一起使用 例子

 

 

三、信号边界事件

测试当 为合同确认节点时 信号边界事件接受信号捕捉 改变流程,走合同变更节点,然后在回到

签订查看节点 ---类似于流程回退

 

3.1 参照上图新建流程  signal-boundary-event-test.bpmn

 

3.2 修改 signal-boundary-event-test.bpmn  定义信号边界事件,并在绑定事件中引入,

 

3.2 测试代码-- 在合同确认 节点时信号边界事件接受信号捕捉 改变流程,然后走合同变更流程

//测试 信号边界事件

    public static void signalBoundaryEventTest(){

       ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();

       // 存储服务

       RepositoryService rs = engine.getRepositoryService();

       // 运行时服务

       RuntimeService runService = engine.getRuntimeService();

      

       TaskService taskService = engine.getTaskService();

      

       Deployment dep = rs.createDeployment().addClasspathResource("signal-boundary-event-test.bpmn").deploy();

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

      

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

      

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

       if("签订查看".equals(task.getName())){//启动流程开始节点 自动走到签订查看 节点 ,让其完成节点走下一个节点

           System.out.println("签订查看-当前节点是 "+task.getName());

           taskService.complete(task.getId());

       }

      

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

       if("合同确认".equals(task.getName())){//合同确认节点 -- 发信号 让信号边界事件捕捉改变流程,走合同变更节点

           System.out.println("合同确认-当前节点是 "+task.getName());

           /*百度 RuntimeService API

            * signalEventReceived(String signalName)

           通知流程引擎已收到名称为“signalName”的信号事件

           signal-boundary-event-test.bpmn  <signal id="contractChangeSignal" name="合同改变信号"></signal>

           */

           runService.signalEventReceived("合同改变信号");

           System.out.println("当前节点是 "+task.getName());

       }

      

       /*

            输出  签订查看-当前节点是 签订查看

       合同确认-当前节点是 合同确认

       当前节点是 合同确认

            */

    }

 

BoundaryEventTest.java

package com.xiangshuai.act.c16;

 

 

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\复习步骤13-BPMN事件(4)边界事件

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

 */

public class BoundaryEventTest {

    public static void main(String[] args) {

             //timerBoundaryEventTest();

             signalBoundaryEventTest();

         }

   

   

    //测试 定时器边界事件

    public static void timerBoundaryEventTest(){

             ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();

        // 存储服务

        RepositoryService rs = engine.getRepositoryService();

        // 运行时服务

        RuntimeService runService = engine.getRuntimeService();

       

        TaskService taskService = engine.getTaskService();

       

        Deployment dep = rs.createDeployment().addClasspathResource("timer- boundary-event-test.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());

       

        //线程睡眠70秒,这样 在第60秒的时候,就会触发初级工程师的 定时器边界事件(<timeDuration>PT1M</timeDuration>),跳到中级工程师处理节点

        try {

                          Thread.sleep(70*1000);

                  } catch (InterruptedException e) {

                          // TODO Auto-generated catch block

                          e.printStackTrace();

                  }

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

        System.out.println("当前任务是 "+task.getName());

                /*

                 输出  当前任务是 初级工程师

                 当前任务是 中级工程师*/

    }

   

    //测试 信号边界事件

    public static void signalBoundaryEventTest(){

             ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();

             // 存储服务

             RepositoryService rs = engine.getRepositoryService();

             // 运行时服务

             RuntimeService runService = engine.getRuntimeService();

            

             TaskService taskService = engine.getTaskService();

            

             Deployment dep = rs.createDeployment().addClasspathResource("signal-boundary-event-test.bpmn").deploy();

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

            

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

            

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

             if("签订查看".equals(task.getName())){//启动流程开始节点 自动走到签订查看 节点 ,让其完成节点走下一个节点

                     System.out.println("签订查看-当前节点是 "+task.getName());

                     taskService.complete(task.getId());

             }

            

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

             if("合同确认".equals(task.getName())){//合同确认节点 -- 发信号 让信号边界事件捕捉改变流程,走合同变更节点

                     System.out.println("合同确认-当前节点是 "+task.getName());

                     /*百度 RuntimeService API

                      * signalEventReceived(String signalName)

                     通知流程引擎已收到名称为“signalName”的信号事件

                     signal-boundary-event-test.bpmn  <signal id="contractChangeSignal" name="合同改变信号"></signal>

                     */

                     runService.signalEventReceived("合同改变信号");

                     System.out.println("当前节点是 "+task.getName());

             }

            

             /*

                 输出  签订查看-当前节点是 签订查看

                  合同确认-当前节点是 合同确认

                  当前节点是 合同确认

                 */

    }

   

   

   

   

   

   

   

   

   

   

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Vue-BPMN-Element是一个基于Vue.js框架开发的业务流程建模工具。它提供了一套丰富的组件和功能,帮助开发人员快速搭建并定制化业务流程设计器。 Vue-BPMN-Element的主要特点包括: 1. 强大的可扩展性:Vue-BPMN-Element提供了丰富的组件和插件,允许开发人员根据项目需求进行定制化开发。这些组件和插件可实现诸如拖拽、连接线、节点属性编辑等功能,满足各种业务流程的建模需求。 2. 可视化编辑:Vue-BPMN-Element提供了直观的界面,允许用户通过拖拽和连接线的方式创建和编辑业务流程。用户可以通过可视化的界面来管理和优化业务流程,极大地提高了开发效率和用户体验。 3. 高度定制化:Vue-BPMN-Element提供了丰富的配置选项和事件钩子,可以完全适应不同的业务需求。开发人员可以根据具体项目需求,灵活地定制展示样式、交互方式等,实现个性化的业务流程建模工具。 4. 良好的兼容性:Vue-BPMN-Element基于Vue.js框架开发,具有良好的兼容性和扩展性。它可以与其他Vue.js插件和工具库无缝集成,为项目提供更加全面和高效的解决方案。 总之,Vue-BPMN-Element是一个强大、可定制化和易用的业务流程建模工具,通过它可以快速搭建和管理业务流程,提高开发效率和项目质量。无论是小型项目还是大型企业应用,Vue-BPMN-Element都是一个值得考虑的选择。 ### 回答2: vue-bpmn-element是一个基于Vue.js框架的BPMN(Business Process Model and Notation)流程图绘制组件库。BPMN是一种用于描述业务流程的图形化标准,可以方便地表示和分析企业的各个流程。 vue-bpmn-element提供了一系列可复用的组件,用户可以在自己的Vue应用中轻松地集成和使用这些组件。这个库的设计目标是提供一个简洁、易用且高度可定制的BPMN流程图绘制解决方案。 使用vue-bpmn-element,用户可以创建自定义的BPMN流程图,包括各种元素如任务、网关、事件等。这些元素可以通过拖拽、缩放和连接等操作进行编辑和布局。用户还可以为每个元素设置相关属性和约束条件,以便更好地描述和分析业务流程。 在vue-bpmn-element中,还提供了一些实用的功能,如历史记录、撤销恢复、导入导出等。这些功能可以帮助用户方便地管理和操作流程图,提高工作效率。 总之,vue-bpmn-element是一个功能丰富且易于使用的BPMN流程图绘制组件库,通过它,用户可以轻松地创建、编辑和管理自定义的业务流程,帮助企业提高业务流程的可视化管理水平,提高工作效率。 ### 回答3: vue-bpmn-element是一个基于Vue.js的开源项目,它提供了一组可在业务流程管理界面中使用的BPMN(Business Process Model and Notation)元素和功能。 首先,vue-bpmn-element具有良好的可定制性。它提供了一系列可自定义的BPMN元素,如任务、网关、边界事件等,使用户能够根据自己的需求进行灵活的配置和设计。此外,它还支持自定义样式和图标,让用户能够根据自己的品牌或用户界面的要求对BPMN流程进行个性化的呈现。 其次,vue-bpmn-element提供了丰富的交互功能。用户可以通过拖拽、缩放等操作来创建、修改和连接BPMN元素,实现业务流程的设计和调整。同时,它还支持多种事件,如点击、双击、鼠标悬停等,使用户能够对BPMN流程进行更加直观和便捷的操作。 此外,vue-bpmn-element还提供了一些实用的功能和工具。例如,它允许用户导入/导出BPMN文件,从而方便地与其他系统或工具进行集成。它还支持撤销/重做操作,保证用户在编辑过程中的操作精确和安全。另外,它也提供了一些常用的扩展,如条件流程、消息传递等,使用户能够更加灵活地定义和管理业务流程。 总之,vue-bpmn-element是一个功能强大且易于使用的BPMN元素集合,它为用户提供了一套完整的工具和功能,帮助用户进行业务流程的设计、管理和优化。无论是初学者还是有经验的开发者,都可以通过vue-bpmn-element轻松地搭建出高效和可扩展的业务流程管理系统。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值