一、流程变量

  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. Linux fdisk命令创建扩展分区过程

    [root@localhost ~]# fdisk /dev/sdb …省略部分输出… Command (m for help): n #新建立分区 Command action e extended ...

  2. macbook配置homebrew

    打开homebrew官网,https://brew.sh/将安装脚本复制到命令行中,执行即可 命令正在运行,下载应用,如果在安装应用时,下载速度很慢,可以参考https://blog.csdn.net ...

  3. nrm切换npm包源

    nrm可以随时切换npm包的源 npm install -g nrm 安装nrm完成 查看nrm源 nrm ls 切换源 npm use npm #也可以切换成其他源 

  4. 寻找丢失的微服务-HAProxy热加载问题的发现与分析 原创: 单既喜 一点大数据技术团队 4月8日 在一点资讯的容器计算平台中,我们通过HAProxy进行Marathon服务发现。本文记录HAProxy服务热加载后某微服务50%概率失效的问题。设计3组对比实验,验证了陈旧配置的HAProxy在Reload时没有退出进而导致微服务丢失,并给出了解决方案. Keywords:HAProxy热加

    寻找丢失的微服务-HAProxy热加载问题的发现与分析 原创: 单既喜 一点大数据技术团队 4月8日 在一点资讯的容器计算平台中,我们通过HAProxy进行Marathon服务发现.本文记录HAPro ...

  5. OO ALV事件里使用E消息,下一步会退出到系统初始界面

    在OO ALV  data_change事件时(选中行),锁定KEY值, 继续,取消选择,退出到系统初始界面 改成 pv_status = 'E'. pv_msg = '采购订单' && ...

  6. rm -rf 误删后该怎么办?

    Google有一个开源的包 叫ext3grep工具他可以回复删除的文件,甚至是drop database,想什么呢,数据库啦!这个工具需要在ext3或者ext4 的文件系统上才可以实现,因为ext3文 ...

  7. laravel门面DB返回数组配置

    在数据库配置文件中添加 'fetch' => PDO::FETCH_ASSOC, //但是这个配置好像是全局的,不能针对单个数据库连接进行配置 也可以在方法内使用php内置函数get_objec ...

  8. html设置多个div并排显示

    我这里以4个div为例,html代码如下: <body> <div id="column1" style="background-color: blue ...

  9. Spring mvc +ajax 发送邮件

    1.前端页面--form表单提交,通过发送按钮的id=“send”定位DOM,触发ajax请求 <form class="form-horizontal" id=" ...

  10. PPM / PGM / PBM 图像文件格式

    PPM / PGM / PBM 图像文件格式 声明:引用请注明出处http://blog.csdn.net/lg1259156776/ 说明:在进行图像压缩后传输,然后解压缩显示的过程中,通常会用到P ...