1.流程变量

1.1 流程图

流程变量在整个工作流中扮演很重要的作用。例如:请假流程中有请假天数、请假原因等一些参数都为流程变量的范围。流程变量的作用域范围是只对应一个流程实例。也就是说各个流程实例的流程变量是不相互影响的。流程实例结束完成以后流程变量还保存在数据库中(存放到流程变量的历史表中)。

流程变量的作用:

1.用来传递业务参数

2.指定连线完成任务(同意和拒绝)

3.动态指定任务的办理人

1.2 输入流加载资源文件的3种方式

1.3.设置和获取流程变量

/**
* 设置流程变量
*/
@Test
public void setVariables() {
/**与任务相关(正在执行)**/
TaskService taskService = processEngine.getTaskService();
//任务ID
String taskId = "2304";
//设置流程变量,使用基本数据类型
taskService.setVariableLocal(taskId , "请假天数", 5);//与任务id绑定
taskService.setVariable(taskId , "请假日期", new Date());
taskService.setVariable(taskId , "请假原因","回家探亲,一起吃个饭");
/**使用javabean设置流程变量**/
/**
* 当一个javabean(实现序列化)放置到流程变量中,要求javabean的属性不能在发生变化
* 如果发生变化,在获取时会抛出异常
* 解决办法:在javabean序列化时,固定序列化版本 private static final long serialVersionUID = 1L;
*/
Person p = new Person();
p.setId(10);
p.setName("翠花");
taskService.setVariable(taskId, "人员信息", p);
System.out.println("设置流程变量成功!");
}
/**
* 获取流程变量
*/
@Test
public void getVariables() {
/**与任务相关(正在执行)**/
TaskService taskService = processEngine.getTaskService();
//任务ID
String taskId = "2304";
/*Integer days = (Integer) taskService.getVariable(taskId, "请假天数");
Date date = (Date) taskService.getVariable(taskId, "请假日期");
String reson = (String) taskService.getVariable(taskId, "请假原因"); System.out.println("请假天数:"+days);
System.out.println("请假日期:"+date);
System.out.println("请假原因:"+reson);*/
/**使用javabean获取流程变量**/
Person person = (Person) taskService.getVariable(taskId, "人员信息");
System.out.println(person.getId()+":"+person.getName());
}

说明:

1) 流程变量的获取针对流程实例(即1个流程),每个流程实例获取的流程变量时不同的

2) 使用基本类型获取流程变量,在taskService中使用任务ID,流程变量的名称,获取流程变量的值。

3) Javabean类型设置获取流程变量,除了需要这个javabean实现了Serializable接口外,还要求流程变量对象的属性不能发生变化,否则抛出异常。解决方案,固定序列化ID(private static final long serialVersionUID = 1L)

1.4 模拟流程变量的设置和获取的场景

/**
* 模拟设置和获取流程变量的场景
*/
@Test
public void setAndGetVariables() {
/**与流程实例,执行对象(正在执行)**/
RuntimeService runtimeService = processEngine.getRuntimeService();
/**与任务相关(正在执行)**/
TaskService taskService = processEngine.getTaskService(); /**设置流程变量**/
// runtimeService.setVariable(executionId, variableName, value);//表示使用执行对象id,和流程变量的名称,设置流程变量的值(一次只能设置一次)
// runtimeService.setVariables(executionId, variables);//表示使用执行对象id和map集合设置流程变量,map集合的key是流程变量的名称,map集合的value是流程变量的值 // taskService.setVariable(executionId, variableName, value);//表示使用执行任务id,和流程变量的名称,设置流程变量的值(一次只能设置一次)
// taskService.setVariables(executionId, variables);//表示使用执行任务id和map集合设置流程变量,map集合的key是流程变量的名称,map集合的value是流程变量的值 // runtimeService.startProcessInstanceByKey(processDefinitionKey, variables);//启动流程实例的同时,可以设置流程变量,用map集合
// taskService.complete(taskId, variables);//完成任务的同时,可以设置流程变量,用map集合
/**获取流程变量**/
// runtimeService.getVariable(executionId, variableName)//执行对象的id和名称,获取流程变量的值
// runtimeService.getVariables(executionId);//使用执行对象id,获取所欲的流程变量,将流程变量放入map集合中,map集合的key是流程变量的名称,map集合的value是流程变量的值
// runtimeService.getVariables(executionId, variableNames);//使用执行对象id,获取流程变量的值,可以通过设置流程变量的名称存放在集合中,获取指定流程变量名称的流程变量的值,并存放在map中 // taskService.getVariable(executionId, variableName)//执行任务的id和名称,获取流程变量的值
// taskService.getVariables(executionId);//使用执行任务id,获取所有的流程变量,将流程变量放入map集合中,map集合的key是流程变量的名称,map集合的value是流程变量的值
// taskService.getVariables(executionId, variableNames);//使用执行任务id,获取流程变量的值,可以通过设置流程变量的名称存放在集合中,获取指定流程变量名称的流程变量的值,并存放在map中 }

说明:

1) RuntimeService对象可以设置流程变量和获取流程变量

2) TaskService对象可以设置流程变量和获取流程变量

3) 流程实例启动的时候可以设置流程变量

4) 任务办理完成的时候可以设置流程变量

5) 流程变量可以通过名称/值的形式设置单个流程变量

6) 流程变量可以通过Map集合,同时设置多个流程变量

Map集合的key表示流程变量的名称

Map集合的value表示流程变量的值

2 总结

  • 1:流程变量

在流程执行或者任务执行的过程中,用于设置和获取变量,使用流程变量在流程传递的过程中传递业务参数。

对应的表:

act_ru_variable:正在执行的流程变量表

act_hi_varinst:流程变量历史表

  • 2:扩展知识:setVariable和setVariableLocal的区别

setVariable:设置流程变量的时候,流程变量名称相同的时候,后一次的值替换前一次的值,而且可以看到TASK_ID的字段不会存放任务ID的值

setVariableLocal:

1:设置流程变量的时候,针对当前活动的节点设置流程变量,如果一个流程中存在2个活动节点,对每个活动节点都设置流程变量,即使流程变量的名称相同,后一次的版本的值也不会替换前一次版本的值,它会使用不同的任务ID作为标识,存放2个流程变量值,而且可以看到TASK_ID的字段会存放任务ID的值

例如act_hi_varinst 表的数据:不同的任务节点,即使流程变量名称相同,存放的值也是不同的。

如图:

2:还有,使用setVariableLocal说明流程变量绑定了当前的任务,当流程继续执行时,下个任务获取不到这个流程变量(因为正在执行的流程变量中没有这个数据),所有查询正在执行的任务时不能查询到我们需要的数据,此时需要查询历史的流程变量。

Activiti学习记录(三)的更多相关文章

  1. JavaScript学习记录三

    title: JavaScript学习记录三 toc: true date: 2018-09-14 23:51:22 --<JavaScript高级程序设计(第2版)>学习笔记 要多查阅M ...

  2. 3.VUE前端框架学习记录三:Vue组件化编码1

    VUE前端框架学习记录三:Vue组件化编码1文字信息没办法描述清楚,主要看编码Demo里面,有附带完整的代码下载地址,有需要的同学到脑图里面自取.脑图地址http://naotu.baidu.com/ ...

  3. leveldb 学习记录(三) MemTable 与 Immutable Memtable

    前文: leveldb 学习记录(一) skiplist leveldb 学习记录(二) Slice 存储格式: leveldb数据在内存中以 Memtable存储(核心结构是skiplist 已介绍 ...

  4. Activiti学习记录(二)

    1.初始化数据库 使用工作流引擎创建23张表 public class TestActiviti { /** * 使用代码创建工作流需要的23张表 */ @Test public void creat ...

  5. Activiti学习记录(一)

    1.工作流的概念 工作流(Workflow),就是“业务过程的部分或整体在计算机应用环境下的自动化”,它主要解决的是“使在多个参与者之间按照某种预定义的规则传递文档.信息或任务的过程自动进行,从而实现 ...

  6. webrtc学习———记录三:mediaStreamTrack

    参考: https://developer.mozilla.org/en-US/docs/Web/API/MediaStreamTrack 转自http://c.tieba.baidu.com/p/3 ...

  7. 下页小希学MVC5+EF6.2 学习记录三

      目的:1 学习mvc+ef 2  写下日记也是对自己的督促 期待已久的EF终于来了. 学完本篇文章,你将会掌握基于EF数据模型的完整开发流程. 本次将会完成EF数据模型的搭建和使用. 基于这个模型 ...

  8. ES6深入学习记录(三)编程风格

    今天学习阮一峰ES6编程风格,其中探讨了如何将ES6的新语法,运用到编码实践之中,与传统的JavaScript语法结合在一起,写出合理的.易于阅读和维护的代码. 1.块级作用域 (1)let 取代 v ...

  9. activiti 学习( 三 ) 之 流程启动者

    在启动一个流程时,我们会有将当前用户启动的流程保存起来,作为流程发起人(启动人.申请人.提交人) 而在保存这个流程启动者信息,api 没有明确规范该怎么存.所以这里我总结下我学到的保存流程启动者信息的 ...

随机推荐

  1. IO模式和IO多路复用详解

    网络编程里常听到阻塞IO.非阻塞IO.同步IO.异步IO等概念,总听别人装13不如自己下来钻研一下.不过,搞清楚这些概念之前,还得先回顾一些基础的概念. 1 基础知识回顾 注意:咱们下面说的都是Lin ...

  2. [USACO09FEB]庙会班车Fair Shuttle 线段树维护maxx&&贪心

    题目描述 Although Farmer John has no problems walking around the fair to collect prizes or see the shows ...

  3. HDU2050 折线分割平面

    题目:acm.hdu.edu.cn/showproblem.php?pid=2050 递推: 从直线入手,第n条直线,最多和平面上的直线有n-1个交点,多出(n-1)+1个部分 序号 1 2 3 .. ...

  4. day10函数作业详解

    1.day10题目 2,写函数,接收n个数字,求这些参数数字的和.(动态传参) 3,读代码,回答:代码中,打印出来的值a,b,c分别是什么?为什么? a=10 b=20 def test5(a,b): ...

  5. chrome安装文件点击没有反应(收藏用)

    备份Chrome浏览器用户数据 关闭Chrome浏览器,用Windows资源管理器打开%LOCALAPPDATA%\Google,复制Chrome文件夹到其它目录.   打开程序和功能管理功能 按下W ...

  6. vue项目中将后台返回的创建时间(时间戳格式)转换成日期格式

    第一步:下载安装依赖包 npm install -save moment 第二步: 在main.js文件引入 1. import moment from 'moment' 其中还包含 2. //全局过 ...

  7. 练习十八:求这样的一组数据和,s=a+aa+aaa+aaaa+aa...a,其中a为一个数字

    例如:2+22+222+2222+22222(此时共有5个数字相加),这里具体几个数字由键盘控制 方法一:普通做法 a = int(input("计算要加的数(1-9之间数):") ...

  8. 一,JVM 自带命令行工具之JPS

    jps:虚拟机进程状况工具 可以列出正在运行的虚拟机进程,并显示虚拟机执行主类(main class,class()函数所在的类)的名称,以及这些进程的本地虚拟机的唯一ID. jps命令格式: jps ...

  9. Spring4.x、SpringMVC和DButils整合

    tomcat 8.Spring 4.X.JDK1.8 需要jar包: 1)日志组件:log4j # debug < info < warn < error log4j.rootLog ...

  10. jquery--实现类似淘宝星星评分功能

    -   不正之处,欢迎指正.^-^.好绕的话 贴码.html <body> <div id="div"> <ul> <li>☆< ...