流程变量在整个工作流中扮演很重要的作用

  例如:请假流程中有请假天数、请假原因等一些参数都为流程变量的范围。流程变量的作用域范围是流程实例。也就是说各个流程实例的流程变量是不相互影响的。

添加流程变量

  1、在启动流程实例时,可以添加流程变量。  

public void startProcess() throws Exception {
String processDefinitionKey ="varTest";
// 创建流程变量
Map<String,Object> variables = new HashMap<String,Object>();
variables.put("请假人", "冯小刚");
// 在启动时设置流程变量
ProcessInstance pi = processEngine.getRuntimeService().startProcessInstanceByKey(processDefinitionKey , variables );
System.out.println("pid:" + pi.getId());
}

说明:

  1)     在启动流程实例时,通过重载startProcessInstanceByKey的方法可以加载流程变量。

  2)     第二个参数要求是Map<String ,Object>类型,意味着可以添加多个流程变量。

  3)     当这段代码执行完以后,会在数据库表act_ru_variable中添加两行记录。

  2、在办理任务时

    在办理任务时,有时候任务办理完成以后,要传递一些信息到系统中。这个时候可以利用TaskService这个类来添加流程实例。

public void setVar() throws Exception {
String processInstanceId = "1901";
Task task =taskService.createTaskQuery().taskAssignee("manager").processInstanceId(processInstanceId ).singleResult();
// String taskId
/**
* 在办理过程中设置流程变量
*/
// taskService.setVariable(taskId, variableName, value) // 设置一个流程变量
Map<String, Object> variables = new HashMap<>();
// variables.put("请假时间", "2013-11-22");
// variables.put("请假天数", "3");
variables.put("请假天数", 3);
taskService.setVariables(task.getId(), variables );
/**
* 在任务完成时设置流程变量
*/
// taskService.complete(taskId)
// Map<String, Object> variables = new HashMap<>();
// variables.put("请假原因", "约会!!");
// taskService.complete(task.getId(), variables); }

说明:

  1)     利用setVariables方法在任务办理过程中添加一批流程变量。

  2)     利用setVariable方法在任务办理过程中添加一个流程变量。

  3)     TaskService有一个重载 complete方法

  3、执行流程实例时直接在Execution上设置流程变量 

    因为流程变量的作用域就是流程实例,所以只要设置就行了,不用管在哪个阶段

public void setVarByExecution() throws Exception {
String processInstanceId = "1901";
Task task =taskService.createTaskQuery().taskAssignee("manager").processInstanceId(processInstanceId ).singleResult();
// String taskId
/**
* 在办理过程中设置流程变量
*/
// taskService.setVariable(taskId, variableName, value) // 设置一个流程变量
Map<String, Object> variables = new HashMap<>();
variables.put("批注", "好好约会,注意安全!!");
runtimeService.setVariables(task.getExecutionId(), variables);
/**
* 在任务完成时设置流程变量
*/
// taskService.complete(taskId)
// Map<String, Object> variables = new HashMap<>();
// variables.put("请假原因", "约会!!");
// taskService.complete(task.getId(), variables); }

另一种设置变量的方法:

public void setVarByObj() throws Exception {
String processInstanceId = "1901";
Task task =taskService.createTaskQuery().taskAssignee("manager").processInstanceId(processInstanceId ).singleResult();
Form form = new Form();//这个javabean实现了Serializable接口
  
    form.setName("表单名称");
        form.setContent("我是张三,我要请假3天");
taskService.setVariable(task.getId(), "form", form);
}

获取流程变量

  可以通过runTimeService的方法来获取流程变量。

public void viewVar() throws Exception {
String processInstanceId = "1901";
Task task =taskService.createTaskQuery().taskAssignee("user").processInstanceId(processInstanceId ).singleResult();
System.out.println("taskName:" + task.getName());
// String variableName = "请假人";
// String val = (String)taskService.getVariable(task.getId(), variableName );
Map<String,Object> vars = taskService.getVariables(task.getId());
for (String variableName : vars.keySet()) {
String val = (String) vars.get(variableName);
System.out.println(variableName + " = " +val);
}
}

  说明:这些流程变量是从act_ru_variable这个表中读出来的。

Activiti流程变量的更多相关文章

  1. 工作流学习——Activiti流程变量五步曲 (zhuan)

    http://blog.csdn.net/zwk626542417/article/details/46648139 ***************************************** ...

  2. Activiti流程变量五步曲 ——by fightingKing

    http://blog.csdn.net/zwk626542417/article/details/46648139 一.前言 上一篇文章我们将流程实例的启动与查询,任务的办理查询都进行了介绍,我们这 ...

  3. 工作流学习——Activiti流程变量五步曲

    一.前言 上一篇文章我们将流程实例的启动与查询,任务的办理查询都进行了介绍,我们这篇文章来介绍activiti中的流程变量. 二.正文 流程变量与我们寻常理解的变量是一样的,仅仅只是是用在了我们act ...

  4. Activiti第二篇【管理流程定义、执行任务和流程实例、流程变量】

    上篇Activiti只是一个快速入门案例,这篇就讲定义.部署.查看任务等等的一些细节[涉及到的数据库表.对象等等]- 管理流程定义 管理流程定义主要涉及到以下的4张表: -- 流程部署相关的表 SEL ...

  5. Activiti工作流(三)——流程变量

    流程变量可以是流程中一系列参数,比如办理人(Assignee),消息(message)等.这些流程变量使得activiti能够应用于更为复杂的业务中,使得流程变得更加灵活可控. 场景(一) 图一:没有 ...

  6. activiti设置流程变量

    public static void mian(String args[]){ ProcessEngine processEngine  = ProcessEngine.getDefaultProce ...

  7. (八)Activiti之流程变量和局部流程变量

    一.流程变量 1.1 概念 如果,当流程走到"学生请假"这个任务节点的时候,此时可以用TaskService设置流程变量,变量值包含请假人.请假时间.请假理由等信息,这些信息存在表 ...

  8. 关于activiti流程通过、驳回、会签、转办、中止、挂起等核心操作功能的封装

    http://blog.csdn.net/aochuanguying/article/details/7594197 package com.famousPro.process.service.imp ...

  9. 从零开始学习和改造activiti流程引擎的13天,自己记录一下

    day#1(11.13) 尝试通过spring boot 集成最新版activiti 7,但是苦于官方的文档基本为空,无法完成spring boot的配置,最终按照activiti 6的文档,手工初始 ...

随机推荐

  1. Windows Server 2003服务器清理C盘空间的资料多个解决方法

    一.关闭IIS HTTPRERR日志功能 默认情况下,2003服务器会把所有IIS访问错误的记录写入 C:WINDOWSsystem32LogFilesHTTPERR 下的 log 文件中,如果访问量 ...

  2. leetcode-157周赛-5214-最长定差子序列

    题目描述: class Solution: def longestSubsequence(self, arr: List[int], difference: int) -> int: dp = ...

  3. [ZJOI 2018]历史

    题意:给定一棵树和点的\(Access\)次数,求切换链的最大值. 考虑修改时实边与虚边的贡献,用\(LCT\)维护此树. // luogu-judger-enable-o2 #include< ...

  4. Java笔记 – JDBC编程

    JDBC通过分层技术实现了跨数据库编程.为不同的数据库开发了统一的编程接口,为不同的数据库提供了不同的JAR类库. 一.JDBC基础 1.开发环境 (1)下载对应的Jar包 Oracle的本地Jar包 ...

  5. ORM(Object/Relation Mapping)框架简介

    ORM 框架简介 对象-关系映射(Object/Relation Mapping,简称ORM),是随着面向对象的软件开发方法发展而产生的.面向对象的开发方法是当今企业级应用开发环境中的主流开发方法,关 ...

  6. HTML基本案列

    <html> <head> <!-- meta :告诉浏览器,如何翻译汉字 http-equiv :content-type 内容类型 详细内容有后面的值指定 conte ...

  7. 字段username没有默认值查询(设计数据库一定要养成好习惯,不是主键最好设置为可以为空)

    今天创建了一个表,但是username作为外键(不是主键)没有设置为可以为空,结果提交表单时忘记写username就报错了

  8. java-day05

    数组概念 是一种容器,能够存放多个数据值 特点 多个数据值类型必须统一 是一种引用数据类型 程序运行时,数组长度不可改变 数组初始化 动态初始化格式 数据类型[] 数组名称 = new 数据类型[数组 ...

  9. dedecms 调用英文标题和栏目描述

    调用英文标题: 参考文献 http://www.dedecms51.com/dedecmsjiaocheng/chengxukaifa/149476.html 增加 dede/templets/cat ...

  10. 2019-8-30-WPF-一个性能比较好的-gif-解析库

    title author date CreateTime categories WPF 一个性能比较好的 gif 解析库 lindexi 2019-08-30 08:59:45 +0800 2018- ...