一、流程变量

  1.1  概念

  • 如果,当流程走到"学生请假"这个任务节点的时候,此时可以用TaskService设置流程变量,变量值包含请假人、请假时间、请假理由等信息,这些信息存在表act_ru_variable中,当"学生请假"这个任务节点完成之后,“班长审批”这个任务节点可以看到"学生请假"任务节点设置的所有流程变量值(请假人等信息),“班主任审批”这个任务节点也可以看到"学生请假"任务节点设置的所有流程变量值。 但是当整个流程走完的时候,运行时的表(以act_ru开头的表)数据清空,自然也就读取不到。

  1.2  设置流程变量

  • 本章案例是执行完学生请假流程中的 1.2  启动流程实例之后在执行,此时流程走到下图红圈这个任务节点,设置请假人信息。

    /**
* 设置流程变量数据
*/
@Test
public void setVariableValues(){
TaskService taskService=processEngine.getTaskService(); // 任务Service
String taskId="15004";
taskService.setVariable(taskId, "days", 2);
taskService.setVariable(taskId, "date", new Date());
taskService.setVariable(taskId, "reason", "发烧");
Student student=new Student();
student.setId(1);
student.setName("张三");
taskService.setVariable(taskId, "student", student); // 存序列化对象
}
  • taskId="15004"; 是由“学生请假”这个任务节点的id
  • 注意:Student 必须序列化。
  • 结果如下图,说明流程变量的值已经存入表中:

  1.3  获取流程变量

  • 上述步骤在“学生请假”任务节点设置流程变量之后,接着运行学生请假流程中的 1.4  张三完成学生请假任务,即流程走到下图,获取流程变量值。

    /**
* 获取流程变量数据
*/
@Test
public void getVariableValues(){
TaskService taskService=processEngine.getTaskService(); // 任务Service
String taskId="20002";
Integer days=(Integer) taskService.getVariable(taskId, "days");
Date date=(Date) taskService.getVariable(taskId, "date");
String reason=(String) taskService.getVariable(taskId, "reason");
Student student=(Student) taskService.getVariable(taskId, "student");
System.out.println("请假天数:"+days);
System.out.println("请假日期:"+date);
System.out.println("请假原因:"+reason);
System.out.println("请假对象:"+student.getId()+","+student.getName());
}
  • taskId="20002";  20002是“班长审批”任务的id
  • 结果如下图,成功获取到流程变量。

  1.4  另一种方法(将数据存在map中)设置流程变量

    /**
* 设置流程变量数据
*/
@Test
public void setVariableValues2(){
TaskService taskService=processEngine.getTaskService(); // 任务Service
String taskId="15004";
Student student=new Student();
student.setId(1);
student.setName("张三"); Map<String, Object> variables=new HashMap<String,Object>();
variables.put("days", 2);
variables.put("date", new Date());
variables.put("reason", "发烧");
variables.put("student", student);
taskService.setVariables(taskId, variables);
}
/**
* 获取流程变量数据
*/
@Test
public void getVariableValues2(){
TaskService taskService=processEngine.getTaskService(); // 任务Service
String taskId="20002";
Map<String,Object> variables=taskService.getVariables(taskId);
Integer days=(Integer) variables.get("days");
Date date=(Date) variables.get("date");
String reason=(String) variables.get("reason");
Student student=(Student)variables.get("student");
System.out.println("请假天数:"+days);
System.out.println("请假日期:"+date);
System.out.println("请假原因:"+reason);
System.out.println("请假对象:"+student.getId()+","+student.getName());
}

二、流程局部变量

  • 局部流程变量只能在该任务节点中设置和获取。如下图,“学生请假”任务节点设置的流程局部变量只能在该“学生请假”节点获取,“班长审批”节点或者"班主任审批"节点获取就为空。

  • 设置局部流程变量
    TaskService taskService=processEngine.getTaskService(); // 任务Service
String taskId="72504";
taskService.setVariableLocal(taskId,"date", new Date());
  • 获取局部流程变量
    TaskService taskService=processEngine.getTaskService(); // 任务Service
String taskId="80002";
Date date=(Date) taskService.getVariableLocal(taskId, "date");

(八)Activiti之流程变量和局部流程变量的更多相关文章

  1. C# 中的局部static变量

    其实这问题没什么可讨论的,C#不支持局部静态变量. 但还是想了一下C#为什么不支持局部静态变量,以下均是个人想法. C++和C支持局部静态变量,也就是在一个函数的内部声明一个静态变量,这种变量的特定如 ...

  2. C++中的局部变量、全局变量、局部静态变量、全局静态变量的区别

    局部变量(Local variables)与 全局变量: 在子程序或代码块中定义的变量称为局部变量,在程序的一开始定义的变量称为全局变量. 全局变量作用域是整个程序,局部变量作用域是定义该变量的子程序 ...

  3. Linux编程 13 (系统环境变量位置, 环境变量持久化)

    一.系统环境变量位置 在上章中,知道了如何修改系统环境变量,如PATH变量,以及创建自己的全局环境变量和局部环境变量.这篇学习怎么让环境变量的作用持久化.在此之前,先了解下系统环境变量文件会在哪些位置 ...

  4. Activiti工作流学习(二)流程实例、执行对象、任务

    一.前言 前面说明了基本的流程部署.定义,启动流程实例等基本操作,下面我们继续来学习流程实例.执行对象.任务. 二.流程实例.执行对象说明 整个Activiti的生命周期经过了如下的几个步骤: 1.流 ...

  5. 用activiti实现类似钉钉审批流程-附整个系统源码

    前言 目前市场上有很多开源平台没有整合工作流,即使有,也是价格不菲的商业版,来看这篇文章的估计也了解了行情,肯定不便宜.我这个快速开发平台在系统基础功能(用户管理,部门管理-)上整合了工作流,你可以直 ...

  6. awk(流程控制、内置变量、内置函数、数组)

    摘自:http://bbs.51cto.com/thread-883948-1-1.html awk(流程控制.内置变量.内置函数.数组) ... 参考其他的资料,给大家看看.一.awk流程控制语句 ...

  7. J2EE进阶(十八)基于留言板分析SSH工作流程

    J2EE进阶(十八)基于留言板分析SSH工作流程   留言板采用SSH(Struts1.2 + Spring3.0 + Hibernate3.0)架构.   工作流程(以用户登录为例):   首先是用 ...

  8. C#基础课程之二变量常量及流程控制

    课堂练习:.一个四位整数 输出它的千位,百位,十位,个位 数字. ; ; % ; % ; ; Console.WriteLine("千位数" + b+" 百位数" ...

  9. 【Activiti学习之七】BPMN子流程、顺序流、流程关口

    环境 JDK 1.8 MySQL 5.6 Tomcat 7 Eclipse-Luna activiti 6.0 一.子流程 1.嵌入子流程2.调用子流程3.事件子流程4.事务子流程 二.顺序流1.条件 ...

随机推荐

  1. Python日志库logging总结-可能是目前为止将logging库总结的最好的一篇文章

    在部署项目时,不可能直接将所有的信息都输出到控制台中,我们可以将这些信息记录到日志文件中,这样不仅方便我们查看程序运行时的情况,也可以在项目出现故障时根据运行时产生的日志快速定位问题出现的位置. 1. ...

  2. 使用oid2name列出数据库和对应的oid

    [postgres@postgre base]$ ll total 172 drwx------ 2 postgres postgres 12288 Dec 6 09:21 1 drwx------ ...

  3. 编译grub时报告"grub_script.yy.c:19:22: error: statement with no effect [-Werror=unused-value]"怎么处理?

    答: 在configure时加--disable-werror选项,如下: ./configure --target=aarch64-linux-gnu --disable-werror

  4. LC 516. Longest Palindromic Subsequence

    Given a string s, find the longest palindromic subsequence's length in s. You may assume that the ma ...

  5. ARM程序的RO段、RW段和ZI段 --Image

    Limit 含义了解RO,RW和ZI需要首先了解以下知识:ARM程序的组成此处所说的“ARM程序”是指在ARM系统中正在执行的程序,而非保存在ROM中的bin映像(image)文件,这一点清注意区别. ...

  6. 123457123456---com.threeObj3.BabyShizi02--- 宝宝识字02

    com.threeObj3.BabyShizi02--- 宝宝识字02

  7. sehll变量比较

    1.比较符号解释 $# 表示提供到shell脚本或者函数的参数总数: $1 表示第一个参数. -ne 表示 不等于 $?是shell变量,表示"最后一次执行命令"的退出状态.0为成 ...

  8. python:一行代码实现局域网共享文件

    其实就是使用python内置的一个模块http server 在python2中是下面这样的 python -m SimpleHTTPServer 80 解释下上面的参数,-m表示让python使用一 ...

  9. 學校 iPad 使用學校google帳號登入Google Drive 提示"裝置政策提醒"的解決方法

    因爲學校iPad 是給學生和老師使用,大多數是不需要設置鎖屏密碼的,然後 Gsuite 默認是開啓 “行動管理服務” 的策略為基本,就是需要設備設置鎖屏密碼以保障資料安全,不那麽容易被竊取. 然後就出 ...

  10. (CVE-2016-5195)脏牛本地提权

    简要分析 该漏洞具体为,get_user_page内核函数在处理Copy-on-Write(以下使用COW表示)的过程中,可能产出竞态条件造成COW过程被破坏, 导致出现写数据到进程地址空间内只读内存 ...