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

相关文章

Security OAuth2 单点登录流程

单点登录(英语:Single sign-on,缩写为 SSO),又译为单一签入,一种对于许多相互关连,但是又是各自独立的软件系统,提供访问控制的属性。当拥有这项属性时,当用户登录时,就可以获取所有系统的访问权限,不用对每个单一系统都逐一登录。这项功能通常是以轻型目录访问协议(LDAP)来实现,在服务器上会将用户信息存储到LDAP数据库中。相同的,单一注销(single sign-off)就是指

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

Java进阶13讲__第12讲_1/2

多线程、线程池 1.  线程概念 1.1  什么是线程 1.2  线程的好处 2.   创建线程的三种方式 注意事项 2.1  继承Thread类 2.1.1 认识  2.1.2  编码实现  package cn.hdc.oop10.Thread;import org.slf4j.Logger;import org.slf4j.LoggerFactory

变量与命名

引言         在前两个课时中,我们已经了解了 Python 程序的基本结构,学习了如何正确地使用缩进来组织代码,并且知道了注释的重要性。现在我们将进一步深入到 Python 编程的核心——变量与命名。变量是我们存储数据的主要方式,而合理的命名则有助于提高代码的可读性和可维护性。 变量的概念与使用         在 Python 中,变量是一种用来存储数据值的标识符。创建变量很简单,

Android实现任意版本设置默认的锁屏壁纸和桌面壁纸(两张壁纸可不一致)

客户有些需求需要设置默认壁纸和锁屏壁纸  在默认情况下 这两个壁纸是相同的  如果需要默认的锁屏壁纸和桌面壁纸不一样 需要额外修改 Android13实现 替换默认桌面壁纸: 将图片文件替换frameworks/base/core/res/res/drawable-nodpi/default_wallpaper.*  (注意不能是bmp格式) 替换默认锁屏壁纸: 将图片资源放入vendo

[MySQL表的增删改查-进阶]

🌈个人主页:努力学编程’ ⛅个人推荐: c语言从初阶到进阶 JavaEE详解 数据结构 ⚡学好数据结构,刷题刻不容缓:点击一起刷题 🌙心灵鸡汤:总有人要赢,为什么不能是我呢 💻💻💻数据库约束 🔭🔭🔭约束类型 not null: 指示某列不能存储 NULL 值unique: 保证某列的每行必须有唯一的值default: 规定没有给列赋值时的默认值.primary key:

【Linux 从基础到进阶】Ansible自动化运维工具使用

Ansible自动化运维工具使用 Ansible 是一款开源的自动化运维工具,采用无代理架构(agentless),基于 SSH 连接进行管理,具有简单易用、灵活强大、可扩展性高等特点。它广泛用于服务器管理、应用部署、配置管理等任务。本文将介绍 Ansible 的安装、基本使用方法及一些实际运维场景中的应用,旨在帮助运维人员快速上手并熟练运用 Ansible。 1. Ansible的核心概念

Flutter 进阶:绘制加载动画

绘制加载动画:由小圆组成的大圆 1. 定义 LoadingScreen 类2. 实现 _LoadingScreenState 类3. 定义 LoadingPainter 类4. 总结 实现加载动画 我们需要定义两个类:LoadingScreen 和 LoadingPainter。LoadingScreen 负责控制动画的状态,而 LoadingPainter 则负责绘制动画。

从0到1,AI我来了- (7)AI应用-ComfyUI-II(进阶)

上篇comfyUI 入门 ,了解了TA是个啥,这篇,我们通过ComfyUI 及其相关Lora 模型,生成一些更惊艳的图片。这篇主要了解这些内容:         1、哪里获取模型?         2、实践如何画一个美女?         3、附录:               1)相关SD(稳定扩散模型的组成部分)               2)模型放置目录(重要)