一、流程图

二、演示代码

package ExclusiveGateWayTest;import java.io.InputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map;import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
import org.junit.Test;public class ExclusiveGateWayTest {ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();/** 部署流程定义(从inputStream) */@Testpublic void deploymentProcessDefinition_inputStream() {InputStream inputStreamBpmn = this.getClass().getResourceAsStream("exclusiveGateWay.bpmn");InputStream inputStreamPng = this.getClass().getResourceAsStream("exclusiveGateWay.png");Deployment deployment = processEngine.getRepositoryService()// 与流程定义和部署对象相关的Service.createDeployment()// 创建一个部署对象.name("排他网关")// 添加部署的名称.addInputStream("exclusiveGateWay.bpmn", inputStreamBpmn)//.addInputStream("exclusiveGateWay.png", inputStreamPng)//.deploy();// 完成部署System.out.println("部署ID:" + deployment.getId());//System.out.println("部署名称:" + deployment.getName());//}/** 启动流程实例 */@Testpublic void startProcessInstance() {// 流程定义的keyString processDefinitionKey = "exclusiveGateWay";ProcessInstance pi = processEngine.getRuntimeService()// 与正在执行的流程实例和执行对象相关的Service.startProcessInstanceByKey(processDefinitionKey);// 使用流程定义的key启动流程实例,key对应helloworld.bpmn文件中id的属性值,使用key值启动,默认是按照最新版本的流程定义启动System.out.println("流程实例ID:" + pi.getId());// 流程实例ID 101System.out.println("流程定义ID:" + pi.getProcessDefinitionId());// 流程定义ID// helloworld:1:4}/** 查询当前人的个人任务 */@Testpublic void findMyPersonalTask() {String assignee = "王小五";List<Task> list = processEngine.getTaskService()// 与正在执行的任务管理相关的Service.createTaskQuery()// 创建任务查询对象/** 查询条件(where部分) */.taskAssignee(assignee)// 指定个人任务查询,指定办理人// .taskCandidateUser(candidateUser)//组任务的办理人查询// .processDefinitionId(processDefinitionId)//使用流程定义ID查询// .processInstanceId(processInstanceId)//使用流程实例ID查询// .executionId(executionId)//使用执行对象ID查询/** 排序 */.orderByTaskCreateTime().asc()// 使用创建时间的升序排列/** 返回结果集 */// .singleResult()//返回惟一结果集// .count()//返回结果集的数量// .listPage(firstResult, maxResults);//分页查询.list();// 返回列表if (list != null && list.size() > 0) {for (Task task : list) {System.out.println("任务ID:" + task.getId());System.out.println("任务名称:" + task.getName());System.out.println("任务的创建时间:" + task.getCreateTime());System.out.println("任务的办理人:" + task.getAssignee());System.out.println("流程实例ID:" + task.getProcessInstanceId());System.out.println("执行对象ID:" + task.getExecutionId());System.out.println("流程定义ID:" + task.getProcessDefinitionId());System.out.println("########################################################");}}}/** 完成我的任务 */@Testpublic void completeMyPersonalTask() {// 任务IDString taskId = "3904";// 完成任务的同时,设置流程变量,使用流程变量用来指定完成任务后,下一个连线,对应exclusiveGateWay.bpmn文件中${money>1000}Map<String, Object> variables = new HashMap<String, Object>();variables.put("money", 200);processEngine.getTaskService()// 与正在执行的任务管理相关的Service.complete(taskId, variables);System.out.println("完成任务:任务ID:" + taskId);}
}

三、小结

1) 一个排他网关对应一个以上的顺序流
2) 由排他网关流出的顺序流都有个conditionExpression元素,在内部维护返回boolean类型的决策结果。
3) 决策网关只会返回一条结果。当流程执行到排他网关时,流程引擎会自动检索网关出口,从上到下检索如果发现第一条决策结果为true或者没有设置条件的(默认为成立),则流出。
4) 如果没有任何一个出口符合条件,则抛出异常
5) 使用流程变量,设置连线的条件,并按照连线的条件执行工作流,如果没有条件符合的条件,则以默认的连线离开。例如:

则执行连线:

如果使用流程变量设置:

Map<String, Object> variables = new HashMap<String, Object>();variables.put("money", 800);processEngine.getTaskService()// 与正在执行的任务管理相关的Service.complete(taskId, variables);

则执行连线:

演示代码及流程图下载:http://download.csdn.net/detail/xunzaosiyecao/9625679

本文部分内容整理自itcast讲义,在此表示感谢。
作者:jiankunking 出处:http://blog.csdn.net/jiankunking

Activiti 学习笔记八:排他网关(ExclusiveGateWay)相关推荐

  1. ReactJS学习笔记八:动画

    ReactJS学习笔记八:动画 分类: react学习笔记 javascript2015-07-06 20:27 321人阅读 评论(0) 收藏 举报 react动画 目录(?)[+] 这里只讨论Re ...

  2. 【opencv学习笔记八】创建TrackBar轨迹条

    createTrackbar这个函数我们以后会经常用到,它创建一个可以调整数值的轨迹条,并将轨迹条附加到指定的窗口上,使用起来很方便.首先大家要记住,它往往会和一个回调函数配合起来使用.先看下他的函数 ...

  3. python3.4学习笔记(八) Python第三方库安装与使用,包管理工具解惑

    python3.4学习笔记(八) Python第三方库安装与使用,包管理工具解惑 许多人在安装Python第三方库的时候, 经常会为一个问题困扰:到底应该下载什么格式的文件? 当我们点开下载页时, 一 ...

  4. Activiti 学习笔记记录(2016-8-31)

    上一篇:Activiti 学习笔记记录(二) 导读:上一篇学习了bpmn 画图的常用图形标记.那如何用它们组成一个可用文件呢? 我们知道 bpmn 其实是一个xml 文件 转载于:https://ww ...

  5. ROS学习笔记八:创建ROS msg和srv

    ROS学习笔记八:创建ROS msg和srv 本节主要讲述了如何创建和建立ROS msg和srv,同时使用命令行工具rosmsg.rossrv和roscp. msg和srv简介 msg:描述ROS m ...

  6. Halcon 学习笔记八:颜色识别

    Halcon 学习笔记八:颜色识别 一.图像处理需要的知识 二.图像处理的预处理和分割过程 二.颜色识别的方法 三.例子一 四.例子二 五.例子三 一.图像处理需要的知识 1.图像处理基础(rgb(h ...

  7. ZooKeeper学习笔记(八):ZooKeeper集群写数据原理

    写数据原理 写流程直接请求发送给Leader节点 这里假设集群中有三个zookeeper服务端 ACK (Acknowledge character)即是确认字符,在数据通信中,接收站发给发送站的一种 ...

  8. MongoDB 学习笔记八 复制、分片、备份与恢复、监控

    MongoDB 学习笔记八 复制.分片.备份与恢复.监控 MongoDB复制(副本集) 什么是复制? MongoDB 复制原理 MongoDB 副本集设置 副本集添加成员 MongoDB 分片 分片 ...

  9. python3第三方库手册_python3.4学习笔记(八) Python第三方库安装与使用,包管理工具解惑...

    python3.4学习笔记(八) Python第三方库安装与使用,包管理工具解惑 许多人在安装Python第三方库的时候, 经常会为一个问题困扰:到底应该下载什么格式的文件? 当我们点开下载页时, 一 ...

最新文章

  1. 零点起飞学mysql视频_零点起飞学MySQL
  2. wordpress图片水印插件DX-Watermark
  3. Java SPI 源码解析及 demo 讲解
  4. 删除文件夹时需要SYSTEM权限,简单解决
  5. HelloWorld实例(springmvc版)
  6. 分布式事务、cloud、boot、常规队列MQ、elk、kafuka
  7. sql delete删除两个表_超强干货!SQL语法大合集
  8. 三、Eclipse快捷键
  9. 向量距离计算 java_在机器学习中扮演着极为重要角色的向量
  10. html语言中强调的ddr,DDR基础知识
  11. linux i o端口编程,linux 操作 I/O 端口
  12. 【VirtualBox打开出错】创建COM对象失败(XP3系统)
  13. 给3D打印机升级的记录( i3 Mega S)
  14. win7 开wifi 关wifi
  15. 科学研究设计六:有效性威胁
  16. 老毛桃 固态硬盘 系统迁移
  17. Android 开发都有哪些好书值得一读?
  18. 【图像处理】漫水填充函数的使用(flags的用法)
  19. C语言 半加器与全加器 详解
  20. 铿锵玫瑰回来了 男足还是臭脚吗

热门文章

  1. Chapter 5 (Eigenvalues and Eigenvectors): The characteristic equation (特征方程)
  2. ⭐算法入门⭐《动态规划 - 串匹配》困难02 —— LeetCode 72. 编辑距离
  3. 什么是搜索引擎蜘蛛机器人?是如何工作的
  4. 软件经验|使用消费级无人机干测绘(四)ContexCapture软件介绍
  5. 高数——定积分计算大法之换元法
  6. 腾讯云服务器增加网卡,腾讯云服务器(CVM主机)绑定多个弹性网卡和IP地址的方法...
  7. UI设计中最重要的元素和原则是什么
  8. 南柯服务器压力,性能测试中AIX服务器资源监控与瓶颈分析-2
  9. Spark 列转行操作
  10. Activity真正“可见”的时间点