Activiti进阶(四)——流程变量的设置和获取

2024-06-22 03:18

本文主要是介绍Activiti进阶(四)——流程变量的设置和获取,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 流程变量在整个工作流中扮演很重要的作用。例如:请假流程中有请假天数、请假原因等一些参数都为流程变量的范围。流程变量的作用域范围是只对应一个流程实例。也就是说各个流程实例的流程变量是不相互影响的。这篇博文就简单的为大家介绍下流程变量的设置和获取。


     一、设置流程变量


     流程变量的设置方式有两种,一是通过基本类型设置,第二种是通过JavaBean类型设置。

     1.基本类型


[java]  view plain copy
  1. /**设置流程变量*/  
  2. @Test  
  3. public void setProcessVariables(){  
  4.     String processInstanceId = "1301";//流程实例ID  
  5.     String assignee = "张三";//任务办理人  
  6.     TaskService taskService = processEngine.getTaskService();//获取任务的Service,设置和获取流程变量  
  7.       
  8.     //查询当前办理人的任务ID  
  9.     Task task = taskService.createTaskQuery()  
  10.             .processInstanceId(processInstanceId)//使用流程实例ID  
  11.             .taskAssignee(assignee)//任务办理人  
  12.             .singleResult();  
  13.       
  14.     //设置流程变量【基本类型】  
  15.     taskService.setVariable(task.getId(), "请假人", assignee);  
  16.     taskService.setVariableLocal(task.getId(), "请假天数",3);  
  17.     taskService.setVariable(task.getId(), "请假日期"new Date());  
  18.       
  19.       
  20. }  

     

     对应数据库表:act_ru_variable

     


             2.JavaBean类型


     首先,定义JavaBean类。

[java]  view plain copy
  1. package cn.gome.d_processVariables;  
  2.   
  3. public class Person implements java.io.Serializable{  
  4.       
  5.     private static final long serialVersionUID = 8379071759772449529L;  
  6.       
  7.     private Integer id;  
  8.     private String name;  
  9.     private String education;  
  10.       
  11.     public Integer getId() {  
  12.         return id;  
  13.     }  
  14.     public void setId(Integer id) {  
  15.         this.id = id;  
  16.     }  
  17.     public String getName() {  
  18.         return name;  
  19.     }  
  20.     public void setName(String name) {  
  21.         this.name = name;  
  22.     }  
  23.       
  24. }  

             然后,通过JavaBean设置流程变量。这里要注意的是, Javabean类型设置获取流程变量,除了需要这个javabean实现了Serializable接口外,还要求流程变量对象的属性不能发生编号,否则抛出异常。

[java]  view plain copy
  1. /**设置流程变量?去哪个表里查*/  
  2. @Test  
  3. public void setProcessVariables(){  
  4.     String processInstanceId = "1301";//流程实例ID  
  5.     String assignee = "张三";//任务办理人  
  6.     TaskService taskService = processEngine.getTaskService();//获取任务的Service,设置和获取流程变量  
  7.       
  8.     //查询当前办理人的任务ID  
  9.     Task task = taskService.createTaskQuery()  
  10.             .processInstanceId(processInstanceId)//使用流程实例ID  
  11.             .taskAssignee(assignee)//任务办理人  
  12.             .singleResult();  
  13.       
  14.     //设置流程变量【javabean类型】  
  15.     Person p = new Person();  
  16.     p.setId(1);  
  17.     p.setName("周江霄");  
  18.     taskService.setVariable(task.getId(), "人员信息", p);  
  19.     System.out.println("流程变量设置成功~~");  
  20. }  


     数据库对应表:act_ru_variable,细心的你可以看到,通过JavaBean设置的流程变量,在act_ru_variable中存储的类型为serializable,变量真正存储的地方在act_ge_bytearray中。




     数据库对应表:act_ge_bytearray


   


     二、获取流程变量


     1.基本类型


[java]  view plain copy
  1. /**获取流程变量*/  
  2. @Test  
  3. public void getProcessVariables(){  
  4.     String processInstanceId = "1301";//流程实例ID  
  5.     String assignee = "张三";//任务办理人  
  6.     TaskService taskService = processEngine.getTaskService();  
  7.     //获取当前办理人的任务ID  
  8.     Task task = taskService.createTaskQuery()  
  9.             .processInstanceId(processInstanceId)  
  10.             .taskAssignee(assignee)  
  11.             .singleResult();  
  12.       
  13.     //获取流程变量【基本类型】  
  14.     String person = (String) taskService.getVariable(task.getId(), "请假人");  
  15.     Integer day = (Integer) taskService.getVariableLocal(task.getId(), "请假天数");  
  16.     Date date = (Date) taskService.getVariable(task.getId(), "请假日期");  
  17.     System.out.println(person+"  "+day+"   "+date);  
  18.       
  19. }  


            2. JavaBean类型


[java]  view plain copy
  1. /**获取流程变量*/  
  2. @Test  
  3. public void getProcessVariables(){  
  4.     String processInstanceId = "1301";//流程实例ID  
  5.     String assignee = "张三";//任务办理人  
  6.     TaskService taskService = processEngine.getTaskService();  
  7.     //获取当前办理人的任务ID  
  8.     Task task = taskService.createTaskQuery()  
  9.             .processInstanceId(processInstanceId)  
  10.             .taskAssignee(assignee)  
  11.             .singleResult();  
  12.       
  13.     //获取流程变量【javaBean类型】  
  14.     Person p = (Person) taskService.getVariable(task.getId(), "人员信息");  
  15.     System.out.println(p.getId()+"  "+p.getName());  
  16.     System.out.println("获取成功~~");  
  17. }  


      三、查询历史流程变量


[java]  view plain copy
  1. /**查询历史的流程变量*/  
  2. @Test  
  3. public void getHistoryProcessVariables(){  
  4.     List<HistoricVariableInstance> list = processEngine.getHistoryService()  
  5.             .createHistoricVariableInstanceQuery()//创建一个历史的流程变量查询  
  6.             .variableName("请假天数")  
  7.             .list();  
  8.       
  9.     if(list != null && list.size()>0){  
  10.         for(HistoricVariableInstance hiv : list){  
  11.             System.out.println(hiv.getTaskId()+"  "+hiv.getVariableName()+"     "+hiv.getValue()+"      "+hiv.getVariableTypeName());  
  12.         }  
  13.     }                 
  14. }  


        对应数据库表:act_ru_execution




这篇关于Activiti进阶(四)——流程变量的设置和获取的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1083139

相关文章

Nginx分布式部署流程分析

《Nginx分布式部署流程分析》文章介绍Nginx在分布式部署中的反向代理和负载均衡作用,用于分发请求、减轻服务器压力及解决session共享问题,涵盖配置方法、策略及Java项目应用,并提及分布式事... 目录分布式部署NginxJava中的代理代理分为正向代理和反向代理正向代理反向代理Nginx应用场景

Python版本信息获取方法详解与实战

《Python版本信息获取方法详解与实战》在Python开发中,获取Python版本号是调试、兼容性检查和版本控制的重要基础操作,本文详细介绍了如何使用sys和platform模块获取Python的主... 目录1. python版本号获取基础2. 使用sys模块获取版本信息2.1 sys模块概述2.1.1

Spring Boot分层架构详解之从Controller到Service再到Mapper的完整流程(用户管理系统为例)

《SpringBoot分层架构详解之从Controller到Service再到Mapper的完整流程(用户管理系统为例)》本文将以一个实际案例(用户管理系统)为例,详细解析SpringBoot中Co... 目录引言:为什么学习Spring Boot分层架构?第一部分:Spring Boot的整体架构1.1

Python之变量命名规则详解

《Python之变量命名规则详解》Python变量命名需遵守语法规范(字母开头、不使用关键字),遵循三要(自解释、明确功能)和三不要(避免缩写、语法错误、滥用下划线)原则,确保代码易读易维护... 目录1. 硬性规则2. “三要” 原则2.1. 要体现变量的 “实际作用”,拒绝 “无意义命名”2.2. 要让

Java发送SNMP至交换机获取交换机状态实现方式

《Java发送SNMP至交换机获取交换机状态实现方式》文章介绍使用SNMP4J库(2.7.0)通过RCF1213-MIB协议获取交换机单/多路状态,需开启SNMP支持,重点对比SNMPv1、v2c、v... 目录交换机协议SNMP库获取交换机单路状态获取交换机多路状态总结交换机协议这里使用的交换机协议为常

nodejs打包作为公共包使用的完整流程

《nodejs打包作为公共包使用的完整流程》在Node.js项目中,打包和部署是发布应用的关键步骤,:本文主要介绍nodejs打包作为公共包使用的相关资料,文中通过代码介绍的非常详细,需要的朋友可... 目录前言一、前置准备二、创建与编码三、一键构建四、本地“白嫖”测试(可选)五、发布公共包六、常见踩坑提醒

Java实现为PDF设置背景色和背景图片

《Java实现为PDF设置背景色和背景图片》在日常的文档处理中,PDF格式因其稳定性和跨平台兼容性而广受欢迎,本文将深入探讨如何利用Spire.PDFforJava库,以简洁高效的方式为你的PDF文档... 目录库介绍与安装步骤Java 给 PDF 设置背景颜色Java 给 PDF 设置背景图片总结在日常的

Ubuntu向多台主机批量传输文件的流程步骤

《Ubuntu向多台主机批量传输文件的流程步骤》:本文主要介绍在Ubuntu中批量传输文件到多台主机的方法,需确保主机互通、用户名密码统一及端口开放,通过安装sshpass工具,准备包含目标主机信... 目录Ubuntu 向多台主机批量传输文件1.安装 sshpass2.准备主机列表文件3.创建一个批处理脚

C#中通过Response.Headers设置自定义参数的代码示例

《C#中通过Response.Headers设置自定义参数的代码示例》:本文主要介绍C#中通过Response.Headers设置自定义响应头的方法,涵盖基础添加、安全校验、生产实践及调试技巧,强... 目录一、基础设置方法1. 直接添加自定义头2. 批量设置模式二、高级配置技巧1. 安全校验机制2. 类型

MyBatis/MyBatis-Plus同事务循环调用存储过程获取主键重复问题分析及解决

《MyBatis/MyBatis-Plus同事务循环调用存储过程获取主键重复问题分析及解决》MyBatis默认开启一级缓存,同一事务中循环调用查询方法时会重复使用缓存数据,导致获取的序列主键值均为1,... 目录问题原因解决办法如果是存储过程总结问题myBATis有如下代码获取序列作为主键IdMappe