流程变量

流程变量的作用域

设置流程定义的key为myEvection2

使用流程变量
定义好流程变量后,就可以在整个流程定义中使用这些流程变量了。例如可以在某些任务属性如
assignee上使用${assignee},或者在某些连线上使用${day<3}。



Activiti中可以使用UEL表达式来使用这些流程变量。UEL表达式可以直接获取一个变量的值,可以
计算一个Boolean结果的表达式,还可以直接使用某些对象的属性。例如对于之前创建的请假流
程,如果要实现3天以内部门经理审核,3天以上增加总经理审核,可以做如下调整:
1.出差天数大于等于3天连线条件,必须总经理审批

2.出差天数小于3天连线条件,直接部门经理就可以审批

设置Global流程变量
在流程定义中使用到了流程变量,就需要在后台JAVA代码中设置对应的流程变量。
实际上在流程执行的很多过程中都可以设计自流程变量。






设置一个3天的实例:

设置一个2天的实例:

查询整体的任务:
备注:taskAssignee(assingee)是单独查某个的任务

李四完成任务:

由于2天和3天的请假都是李四发起的,是list,改下代码,需要李四完成多个任务

查询整体的任务:

王经理完成任务:

结果报错,估计是num不能识别,修改下

改完后要重新走一遍了






王经理审批:


杨总经理审批:

审批完查询,所有流程结束:

以上测试通过!!!
参考:
设置Local流程变量
比较简单,不测试了



代码参考:
package com.nanjing;
import com.nanjing.pojo.Evection;
import org.activiti.engine.*;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.task.Task;
import org.junit.Test;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* 测试流程变量
*/
public class TestVariables {
/**
* 流程部署
*/
@Test
public void testDeployment(){
// 1、创建ProcessEngine
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
// 2、获取RepositoryServcie
RepositoryService repositoryService = processEngine.getRepositoryService();
// 3、使用service进行流程的部署,定义一个流程的名字,把bpmn和png部署到数据中
Deployment deploy = repositoryService.createDeployment()
.name("员工请假-variables")
.addClasspathResource("leave8.bpmn20.xml")
.deploy();
// 4、输出部署信息
System.out.println("流程部署id="+deploy.getId());
System.out.println("流程部署名字="+deploy.getName());
}
/**
* 启动流程的时候设置流程变量
* 设置流程变量num
* 设置任务负责人
*/
@Test
public void testStartProcess(){
// 获取流程引擎
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
// 获取RunTimeService
RuntimeService runtimeService = processEngine.getRuntimeService();
// 流程定义的Key
String key = "myEvection8";
// 流程变量的map
Map<String,Object> variables = new HashMap<>();
// 设置流程变量
Evection evection = new Evection();
// 设置出差日期(请假天数)
evection.setNum(3d);
// 把流程变量的pojo放入map
variables.put("evection",evection);
// 设定任务的负责人
variables.put("assignee0","李四");
variables.put("assignee1","王经理");
variables.put("assignee2","杨总经理");
// 启动流程
runtimeService.startProcessInstanceByKey(key,variables);
}
@Test
public void queryTask(){
// 流程定义的Key
String key = "myEvection8";
// 任务负责人
String assingee = "李四";
//String assingee = "张财务";
// 获取流程引擎
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
// 获取taskservice
TaskService taskService = processEngine.getTaskService();
// 查询任务
final List<Task> tasks = taskService.createTaskQuery()
.processDefinitionKey(key)
// .taskAssignee(assingee)
.list();
for(Task task:tasks){
// 根据任务id来 完成任务
System.out.println(task.getId());
System.out.println(task.getName());
System.out.println(task.getAssignee());
}
}
/**
* 完成个人任务
*/
@Test
public void completTask(){
// 流程定义的Key
String key = "myEvection8";
// 任务负责人
String assingee = "杨总经理";
// String assingee = "张财务";
// 获取流程引擎
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
// 获取taskservice
TaskService taskService = processEngine.getTaskService();
// 查询任务
List<Task> tasks = taskService.createTaskQuery()
.processDefinitionKey(key)
.taskAssignee(assingee).list();
// 根据任务id来 完成任务
for(Task task:tasks){
taskService.complete(task.getId());
}
}
}
本文介绍了Activiti工作流引擎中流程变量的使用,包括全局和局部变量的设置,以及如何在流程定义中利用UEL表达式进行条件判断。通过示例展示了如何根据出差天数决定审批流程,演示了不同天数请假流程的实例,并展示了任务查询与审批过程。此外,提到了流程变量在后台JAVA代码中的设置和使用。
1866

被折叠的 条评论
为什么被折叠?



