流程变量
流程变量的作用域
设置流程定义的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());
}
}
}