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

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

添加流程变量

  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. 快速创建vuepress项目(使用vuepress写文档)

    vuepress的官方文档:https://vuepress.vuejs.org/zh/guide/ 参考:https://segmentfault.com/a/1190000016333850 ht ...

  2. asprise-ocr-api-sample 高价收破解版64 32位

    asprise-ocr-api-sample验证码 高价收破解版64 32位 Reflector 8.5 打开自己的C#代码  完全100%的反编译了

  3. leetcode-第10周双周赛-5080-查找两颗二叉搜索树之和

    题目描述: 自己的提交: class Solution: def twoSumBSTs(self, root1: TreeNode, root2: TreeNode, target: int) -&g ...

  4. QT安装以及使用(QT支持linux和windows,也支持C/C++代码的编译运行,比vs简洁多)

    Windows: 0. QT Versionqt-win-opensource-4.7.4-mingwqt-creator-win-opensource-2.4.1 1. 系统Windows 7 &a ...

  5. 20170702-变量说明,静态方法,类方法区别,断点调试,fork,yield协程,进程,动态添加属性等。。

    概念: 并行:同时运行 并发:看似同时运行  json后任然中文的问题 import json d = {"名字":"初恋这件小事"} new_d1 = jso ...

  6. thinkphp 默认值输出

    我们可以给变量输出提供默认值,例如: 大理石平台厂家 {$user.nickname|default="这家伙很懒,什么也没留下"} 对系统变量依然可以支持默认值输出,例如: {$ ...

  7. linux学习(五)-----组管理和权限管理

    Linux 组基本介绍 在 linux 中的每个用户必须属于一个组,不能独立于组外.在 linux 中每个文件有所有者.所在组.其它组的概念. 1)所有者 2)所在组 3)其它组 4)改变用户所在的组 ...

  8. iOS开发之SceneKit框架--SCNCamera.h

    1.SCNCamera简介 被称为照相机或者摄像机,可以附加到节点以提供显示场景的角度.其实就是用户视角和人的眼睛一样. 2.相关API简介 初始化 //懒加载 + (instancetype)cam ...

  9. Hibernate数据保存操作方法的原理对比

    Interface Session All Superinterfaces: Serializable All Known Subinterfaces: EventSource, Session Al ...

  10. 13_springmvc拦截器应用

    一.实现登录认证 1.需求: 用户请求url,拦截器进行拦截校验 如果请求的url是公开地址(无需登陆即可访问的url),让放行 如果用户session 不存在跳转到登陆页面 如果用户session存 ...