一、流程变量

  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. CentOS7 修改设置静态IP和DNS

    最近因为学习Puppet,用虚拟机装了个CentOS,使用的NAT的网络模式,为了防止再次启动系统的时候网络IP发生变化,因此设置静态IP和DNS. 由于CentOS是最小化安装,没有ifconfig ...

  2. css 文本省略号设置

    本文推荐2种方法. 1. css tip:只兼容chrome内核的浏览器.ff不支持. .box { overflow: hidden; /* 溢出时不显示溢出的内容 */ text-overflow ...

  3. Java 中清空map

    本文链接:https://blog.csdn.net/TsuiXh/article/details/87879004在开发中在使用Map时,如果需要将Map作为临时的数据存储和处理,可以不用每次都去新 ...

  4. raid卷性能测试

    #RAID卷 独立磁盘冗余阵列RAID是一种把多块独立的硬盘(物理硬盘)按不同的方式组合起来形成一个硬盘组(逻辑硬盘),从而提供比单个硬盘更高的存储性能和提供数据备份技术.组成磁盘阵列的不同方式成为R ...

  5. python开发-实现redis中的发布订阅功能

    Python3学习(二十七):python实现Redis的订阅与发布(sub-pub机制) 先介绍一下redis的pub/sub功能: Pub/Sub功能(means Publish, Subscri ...

  6. spark简单文件配置

    cd /usr/local/spark/spark-2.2.1-bin-hadoop2.7/conf cp slaves.template slaves cp spark-env.sh.templat ...

  7. 一百四十三:CMS系统之评论布局和功能一

    模型 class CommentModel(db.Model): """ 评论 """ __tablename__ = 'comment' ...

  8. asp.net怎样实现批量下载文件(非打包形式下载)

    问题: 我想实现的是一个一个的下载. 比如我有一个文件列表.通过checkbox选择.通过单击下载按钮下载选中文件. 百度到都是用打包形式实现批量下载. 这是我自己写的代码,但是点击下载后只能下载一个 ...

  9. windows 10 enterprize LTSC

    to avtivate the windows 10 enterprize LTSC version, do the following command every 6 months. slmgr - ...

  10. (十四)Centos之安装vsftp服务

    一.为什么要安装vsftp服务 我们需要向centos操作系统的服务器上上传文件或者下载文件,这时候,ftp有必要安装下,我们选择主流的vsftp 二.安装 第一步:安装vsftp yum insta ...