activiti操作之流程状态、任务分配及流程变量
⼀、流程状态的挂起与激活与业务标记
业务标记
// 在流程开始时添加业务id,5555是业务标记的id
runtimeService.startProcessInstanceByKey("work_over_time","5555");
流程的挂起与激活
单个挂起:针对流程实例。使⽤的服务:TaskServiceImpl
@Test
void processInstanceSuspend(){
// 查询当前运⾏流程实例
ProcessInstance processInstance = ateProcessInstanceQuery().processDefinitionKey("work_over_time").singleResult();
// 流程实例为挂起状态,激活流程,为激活状态,挂起流程
if(processInstance.isSuspended()){
runtimeService.ProcessInstanceId());
System.out.println("激活当前流程");
}else{
runtimeService.ProcessInstanceId());
System.out.println("挂起当前流程");
}
}
全部挂起:针对流程定义及当前定义的所有流程实例。使⽤的服务: RepositoryServiceImpl
@Test
void processDefinitionSuspend(){
// 测试流程定义挂起
// 1. 查询改流程定义
List<ProcessDefinition> processDefinitionList = ateProcessDefinitionQuery()
.processDefinitionKey("work_over_time")
.list();
// 挂起,激活流程定义
processDefinitionList.forEach(processDefinition ->{
// 判断是否被挂起
boolean processDefinitionSuspended = repositoryService.Id());
if(processDefinitionSuspended){
// 挂起状态进⾏激活
repositoryService.Id());
System.out.println("流程:"+ Name()+"版本:"+ Version()+"已被激活");
}else{
// 激活状态进⾏挂起
repositoryService.Id());
System.out.println("流程:"+ Name()+"版本:"+ Version()+"已被挂起");
}
});
}
挂起后完成任务或者新增实例的时候会抛⼀个任务挂起的异常。
⼆、个⼈任务分配
分配任务负责⼈
固定分配
直接在assignee中指定分配⼈
表达式分配
在bpmn流程定义中的assignee 中使⽤表达式${deptManager},deptManager是变量名,如图
在启动流程时传⼊表达式的参数
在数据库中查询当前任务的指定⼈为deptManager-a
数据库中查询到流程变量名与变量值的对应
分配
的配置类型
事件(all create assiginement delete)
类别(class ,expression – 表达式,delegateExpression)
值(具体的值,类名,或者具体表达式)
在任务流程开启时指定负责⼈(部门经理指定⼈为 deptManager-a,总经理指定⼈为 generalManager-b)
public class MyTaskListener implements TaskListener {
@Override
public void notify(DelegateTask delegateTask){
/**
createprocessa* (部门经理指定⼈为 deptManager-a,总经理指定⼈为 generalManager-b)
*/
// 判断是否在申请创建时期
if("create".EventName())){
if("部门经理审批".Name())){
delegateTask.setAssignee("deptManager-a");
}
if("总经理审批".Name())){
delegateTask.setAssignee("generalManager-b");
}
}
}
}
查询任务
查询任务与以前查询代码⼀样
@Test
void taskQuery(){
// 任务查询
List<Task> taskList = ateTaskQuery().taskAssignee("deptManager-a").list();
taskList.forEach(task ->{
System.out.println("任务名称"+ Name());
System.out.println("拥有者"+ Assignee());
System.out.println("任务流程定义id"+ ProcessDefinitionId());
System.out.println("任务实例id"+ ProcessInstanceId());
System.out.println("-------------");
});
}
办理任务
完成任务
@Test
void completeTask(){
// 完成任务
// 1.查询请假流程任务(通过流程实例与当前处理者查询)
Task task = ateTaskQuery()
.processDefinitionKey("myTaskListener")
.taskAssignee("deptManager-a")
.singleResult();
// 2.完成任务
Id());
}
此时,任务通过监听流转到generalManager-b去了
三、流程变量
定义
流程变量是activiti在管理流程中需要设置的变量,例如在请假流程中,请假3天及以内需要主管审批,3天以上需要总经理审批,请假时间就可以是⼀个流程变量。
作⽤域
global变量
默认是流程实例,全局变量。后设置变量值会覆盖前值。
local变量: 作⽤域⼩,名称可以与global重复,不互相影响。
使⽤⽅式
流程变量两种使⽤⽅式
属性上使⽤uel表达式
${assignee}
连线上使⽤uel表达式
${item.day>3}
流程变量⽀持类型
这是强调⼀下⾃定义的类对象需要实现serializable接⼝。例如
public class Holiday implements Serializable {
/**
* 假期开始时间
*/
private Date createTime;
/**
* 假期时长
*/
private Double day;
/**
* 假期单名称
*/
private String name;
}
实例
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论