Activiti第三篇【连接、排他网关、指定任务处理人、组任务】
连线
上面我们已将学过了流程变量了,可以在【任务服务、运行时服务、流程开始、完成某个任务时设置流程变量】,而我们的连接就是流程变量的实际应用了….
定义流程图
我们并不是所有的流程都是按一条的路径来走的,我们有的时候会根据条件来走不同的路。当然了,最终该流程是会一步步走完….
例子:
重要的信息交由老板来处理,不重要的信息交由经理来处理
表达式的结果必须是布尔型
- #{variable==’value’}
- ${variable==value}
测试
我在任务完成时设置流程变量为不重要,那么跳到下一个流程时就是经理来进行处理
当我设置为重要的时候,那么就是交由老板来处理
排他网关
上面我们使用连线的时候用了两个条件 : 要么条件是“重要”,要么条件是“不重要”….如果有另一种情况呢???就是用户把条件输入错了,写成“不知道重不重要”,那么我们的流程怎么走???岂不是奔溃了???
因此,我们要有一条默认的路来走,就是当该变量不符合任何的条件时,我们也有一条默认的路
值得注意的是:如果是在Eclipse中使用插件的BPMN流程图,如果使用了排他网关,那么在Idea下是解析不了的…
解决:
我们只要重新定义BPMN流程图的排他网关就行了,idea中的Activiti插件是不用制定默认流程的,只要我们不设置条件,那就是默认的连接线
测试
public class ExclusiveGetWay {
private ProcessEngine processEngine = ProcessEngines
.getDefaultProcessEngine();
// 部署流程定义,资源来在bpmn格式
@Test
public void deployProcessDefi() {
Deployment deploy = processEngine.getRepositoryService()
.createDeployment().name("排他网关流程")
.addClasspathResource("ExclusiveGateway.bpmn")
.deploy();
System.out.println("部署名称:" + deploy.getName());
System.out.println("部署id:" + deploy.getId());
}
// 执行流程,开始跑流程
@Test
public void startProcess() {
String processDefiKey = "bankBill";// bpmn 的 process id属性
ProcessInstance pi = processEngine.getRuntimeService()
.startProcessInstanceByKey(processDefiKey);
System.out.println("流程执行对象的id:" + pi.getId());// Execution 对象
System.out.println("流程实例的id:" + pi.getProcessInstanceId());// ProcessInstance
// 对象
System.out.println("流程定义的id:" + pi.getProcessDefinitionId());// 默认执行的是最新版本的流程定义
}
// 查询正在运行任务
@Test
public void queryTask() {
// 取得任务服务
TaskService taskService = processEngine.getTaskService();
// 创建一个任务查询对象
TaskQuery taskQuery = taskService.createTaskQuery();
// 办理人的任务列表
List<Task> list = taskQuery.list();
// 遍历任务列表
if (list != null && list.size() > 0) {
for (Task task : list) {
System.out.println("任务的办理人:" + task.getAssignee());
System.out.println("任务的id:" + task.getId());
System.out.println("任务的名称:" + task.getName());
}
}
}
// 完成任务
@Test
public void compileTask() {
String taskId = "2404";
Map<String,Object> params=new HashMap<String, Object>();
params.put("visitor", 6);
// taskId:任务id
processEngine.getTaskService().complete(taskId, params);
// processEngine.getTaskService().complete(taskId);
System.out.println("当前任务执行完毕");
}
}
我们指定的值并不是VIP也不是后台,那么就会自动去普通窗口中处理
并行网关
等待活动
用户任务
使用流程变量指定处理人
我们在快速入门的例子中,是在定义流程图中硬性指定处理人,其实这么干是不够灵活的,我们学了流程变量之后,我们是可以灵活地指定处理人的….
@Test
public void deployProcessDefi() {
Deployment deploy = processEngine.getRepositoryService()
.createDeployment().name("用户任务指定流程")
.addClasspathResource("AppayBill.bpmn")
.deploy();
System.out.println("部署名称:" + deploy.getName());
System.out.println("部署id:" + deploy.getId());
}
// 执行流程,开始跑流程
@Test
public void startProcess() {
String processDefiKey = "appayBill";// bpmn 的 process id属性
Map<String,Object> params=new HashMap<String, Object>();
params.put("userID", "王某某");
ProcessInstance pi = processEngine.getRuntimeService()
.startProcessInstanceByKey(processDefiKey, params);
System.out.println("流程执行对象的id:" + pi.getId());// Execution 对象
System.out.println("流程实例的id:" + pi.getProcessInstanceId());// ProcessInstance
// 对象
System.out.println("流程定义的id:" + pi.getProcessDefinitionId());// 默认执行的是最新版本的流程定义
}
// 查询正在运行任务
@Test
public void queryTask() {
String assignee="王某某";//指定任务处理人
// 取得任务服务
TaskService taskService = processEngine.getTaskService();
// 创建一个任务查询对象
TaskQuery taskQuery = taskService.createTaskQuery();
// 办理人的任务列表
List<Task> list = taskQuery
.taskAssignee(assignee)
.list();
// 遍历任务列表
if (list != null && list.size() > 0) {
for (Task task : list) {
System.out.println("任务的办理人:" + task.getAssignee());
System.out.println("任务的id:" + task.getId());
System.out.println("任务的名称:" + task.getName());
}
}
}
使用类指定
组任务
直接指定办理人
使用流程变量
使用类
Activiti第三篇【连接、排他网关、指定任务处理人、组任务】的更多相关文章
- 一年三篇IF大于7的牛人告诉你怎么写SCI
一年三篇IF大于7的牛人告诉你怎么写SCI 1 研究生必备四本 俗话说好记性不如烂笔头,所以一定要首先养成做笔记的好习惯!作为研究生下面这几个本子是必不可少的: 1.实验记录本(包括试验准备本),这当 ...
- activiti入门3排他网关,并行网管,包含网关,事件网关(转)
网关用来控制流程的流向 网关可以消费也可以生成token. 网关显示成菱形图形,内部有有一个小图标. 图标表示网关的类型. 基本分支 首先 利用 流程变量 写个带有分支的一个基本流程 流程图: 部署 ...
- activiti入门3排他网关,并行网管,包括网关,事件网关
网关用来控制流程的流向 网关能够消费也能够生成token. 网关显示成菱形图形,内部有有一个小图标. 图标表示网关的类型. 基本分支 首先 利用 流程变量 写个带有分支的一个基本流程 流程图: wa ...
- java中activiti框架中的排他网关使用方法,多条件判断
当排他网关的判断条件中出现多个条件时,需要注意,设置判断条件时,可能遇到,流向相同的任务,而判断条件的变量个数不同 那么,必须在后面的运行任务时,将所有的涉及到的变量都设置进任务中,只不过,如果这个任 ...
- Activiti网关--排他网关
排他网关 1.什么是排他网关 排他网关(也叫异或(XOR)网关,或叫基于数据的排他网关),用来在流程中实现决策. 当流程执行到这个网关,所有分支都会判断条件是否为true,如果为 true 则执行该分 ...
- 学习如何看懂SQL Server执行计划(三)——连接查询篇
三.连接查询部分 --------------------嵌套循环-------------------- /* UserInfo表数据少.Coupon表数据多嵌套循环可以理解为就是两层For循环,外 ...
- activiti实战系列 排他网关(ExclusiveGateWay)
流程图 12.2:部署流程定义+启动流程实例 12.3:查询我的个人任务 12.4:完成我的个人任务 说明: 1) 一个排他网关对应一个以上的顺序流 2) 由排他网关流出的顺序流都有个 ...
- Linux基石【第二篇】虚拟网络三种连接方式(转载)
在虚拟机上安装完Centos系统后,开始配置静态IP,以方便在本宿主机上可以访问虚拟机,在曲折的配置中,了解到虚拟机还有三种连接方式:Bridged,NAT和Host-only,于是,我又一轮新的各种 ...
- 从0开始搭建SQL Server AlwaysOn 第三篇(配置AlwaysOn)
从0开始搭建SQL Server AlwaysOn 第三篇(配置AlwaysOn) 第一篇http://www.cnblogs.com/lyhabc/p/4678330.html第二篇http://w ...
随机推荐
- MarkdownPad2之安装破解
MarkdownPad2之安装破解 一.下载破解版 1.地址链接:http://pan.baidu.com/s/1i5JzG13 密码: 4jgw 2.按步骤安装后,进行汉化:[Tool]--> ...
- SQL语句查询某字段不同数据的个数(DISTINCT 的使用)
今天做了一个题,学到了一个知识点: 有一个高速收费表VF,如下: 统计收费涉及的车辆有多少: SQL语句: SELECT COUNT(DISTINCT VchReg) from VF ; 其中 ...
- Bash中的测试——test, [], [[]], (())
转自: http://blog.csdn.net/u013961718 https://www.shiyanlou.com/courses/running test 和 [ ] test是一条内置命令 ...
- sizeof求类的大小
用sizeof求类的大小,http://blog.csdn.net/szchtx/article/details/10254007(sizeof浅析(三)——求类的大小),这篇博文给出了非常详尽的举例 ...
- 【Centos】yum安装MySQL
安装步骤 1. 点击此处下载MySQL的YUM源 -- [ MySQL RPM] 选择适合你平台的rpm,我的是centos7 2. 安装MySQL的yum源,即RPM sudo yum locali ...
- Python数据类型-布尔/数字/字符串/列表/元组/字典/集合
代码 bol = True # 布尔 num = 100000000; # 数字 str = "fangbei"; # 字符串 str_cn = u"你好,方倍" ...
- CSS:a:link;visited;hover;active解释及正确顺序
a:link 选择器设置指向普通的.未被访问页面的链接的样式, a:visited 选择器用于设置指向已被访问的页面的链接, a:active 选择器用于活动链接, a:hover 选择器用于选择鼠标 ...
- sql primary key 约束
PRIMARY KEY 约束唯一标识数据库表中的每条记录. 主键必须包含唯一的值. 主键列不能包含 NULL 值. 每个表都应该有一个主键,并且每个表只能有一个主键. SQL PRIMARY KEY ...
- JDK安装与配置详细图文教程
目的:本人健忘,以后难免会重装系统啥的,软件卸了装是常有的事,特此写此详细教程,一是方便自己以后重装的时候可以看看:二是如果有某位初学者有幸光临,也可以给一点参照.下面我会从JDK的下载.安装.环境变 ...
- TC358749XBG:HDMI转MIPI CSI芯片简介
TC358749XBG是一颗HDMI转MIPI CSI功能的视频转换芯片,分辨率:1920*1080,电源3.3/1.8/1.2,通信方式:IIC,封装形式BGA80