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

相关文章

0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型的操作流程

《0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeekR1模型的操作流程》DeepSeekR1模型凭借其强大的自然语言处理能力,在未来具有广阔的应用前景,有望在多个领域发... 目录0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型,3步搞定一个应

如何利用Java获取当天的开始和结束时间

《如何利用Java获取当天的开始和结束时间》:本文主要介绍如何使用Java8的LocalDate和LocalDateTime类获取指定日期的开始和结束时间,展示了如何通过这些类进行日期和时间的处... 目录前言1. Java日期时间API概述2. 获取当天的开始和结束时间代码解析运行结果3. 总结前言在J

CSS弹性布局常用设置方式

《CSS弹性布局常用设置方式》文章总结了CSS布局与样式的常用属性和技巧,包括视口单位、弹性盒子布局、浮动元素、背景和边框样式、文本和阴影效果、溢出隐藏、定位以及背景渐变等,通过这些技巧,可以实现复杂... 一、单位元素vm 1vm 为视口的1%vh 视口高的1%vmin 参照长边vmax 参照长边re

java获取图片的大小、宽度、高度方式

《java获取图片的大小、宽度、高度方式》文章介绍了如何将File对象转换为MultipartFile对象的过程,并分享了个人经验,希望能为读者提供参考... 目China编程录Java获取图片的大小、宽度、高度File对象(该对象里面是图片)MultipartFile对象(该对象里面是图片)总结java获取图片

Java通过反射获取方法参数名的方式小结

《Java通过反射获取方法参数名的方式小结》这篇文章主要为大家详细介绍了Java如何通过反射获取方法参数名的方式,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1、前言2、解决方式方式2.1: 添加编译参数配置 -parameters方式2.2: 使用Spring的内部工具类 -

Java如何获取视频文件的视频时长

《Java如何获取视频文件的视频时长》文章介绍了如何使用Java获取视频文件的视频时长,包括导入maven依赖和代码案例,同时,也讨论了在运行过程中遇到的SLF4J加载问题,并给出了解决方案... 目录Java获取视频文件的视频时长1、导入maven依赖2、代码案例3、SLF4J: Failed to lo

Windows设置nginx启动端口的方法

《Windows设置nginx启动端口的方法》在服务器配置与开发过程中,nginx作为一款高效的HTTP和反向代理服务器,被广泛应用,而在Windows系统中,合理设置nginx的启动端口,是确保其正... 目录一、为什么要设置 nginx 启动端口二、设置步骤三、常见问题及解决一、为什么要设置 nginx

springboot启动流程过程

《springboot启动流程过程》SpringBoot简化了Spring框架的使用,通过创建`SpringApplication`对象,判断应用类型并设置初始化器和监听器,在`run`方法中,读取配... 目录springboot启动流程springboot程序启动入口1.创建SpringApplicat

使用Java实现获取客户端IP地址

《使用Java实现获取客户端IP地址》这篇文章主要为大家详细介绍了如何使用Java实现获取客户端IP地址,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 首先是获取 IP,直接上代码import org.springframework.web.context.request.Requ

通过prometheus监控Tomcat运行状态的操作流程

《通过prometheus监控Tomcat运行状态的操作流程》文章介绍了如何安装和配置Tomcat,并使用Prometheus和TomcatExporter来监控Tomcat的运行状态,文章详细讲解了... 目录Tomcat安装配置以及prometheus监控Tomcat一. 安装并配置tomcat1、安装