UEL分配任务
在任务节点设计的时候,assignce设置为${assigneeNum},在启动的时候,把这个变量带上,Activiti就可以动态地设置流程接收人。
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
RuntimeService runtimeService=processEngine.getRuntimeService();
//设置assignee的取值
Map<String,Object> map=new HashMap<>();
map.put("assignee0","xiaoyi");
map.put("assignee1","xiaoer");
map.put("assignee2","xiaosan");
ProcessInstance processInstance=runtimeService.startProcessInstanceByKey("holiday",map);
监听器分配任务
在流程设计的时候,指定监听器,在监听器中设置流程接收人,这样也可以动态的指定流程接收人。
流程变量+流程变量类型+作用域
在流程进行的过程可以附带一些数据,控制流程的走向。流程变量支持很多类型,包括Java实体类。作用域分为节点作用域和全流程作用域。
候选人处理任务
多个人都有权力处理某个单据,多个人处理的任务可以称为组任务。
查询候选人组任务
TaskService taskService = processEngine.getTaskService();
String key="myProcess5";
String candidateUser="zhangsan";
//查询
List<Task> list = taskService.createTaskQuery().processDefinitionKey(key).taskCandidateUser(candidateUser).list();
拾取组任务
TaskService taskService = processEngine.getTaskService();
//设置查询条件
String key="myProcess5";
String candidateUser="zhangsan";
//查询
Task task = taskService.createTaskQuery().processDefinitionKey(key).taskCandidateUser(candidateUser).singleResult();
if (task!=null){
taskService.claim(task.getId(),candidateUser);
System.out.println("任务拾取完毕!");
}
候选人查询自己任务,并完成
TaskService taskService = processEngine.getTaskService();
//设置查询条件
String key = "myProcess5";
String assignee = "zhangsan";
//查询
List<Task> list = taskService.createTaskQuery().processDefinitionKey(key).taskAssignee(assignee)//设置任务处理人
.list();
for (Task task : list) {
taskService.complete(task.getId());
System.out.println("任务执行完毕");
}
把当前任务归还组任务
//获取taskService
TaskService taskService = processEngine.getTaskService();
//设置查询条件
String key = "myProcess5";
String assignee = "zhangsan";
String candidateUser = "lishi";
//查询
Task task = taskService.createTaskQuery().processDefinitionKey(key).taskAssignee(assignee)//设置任务处理人
.singleResult();
if (task!=null){
taskService.setAssignee(task.getId(),null);//把任务归还,把任务执行人设置为null
//taskService.setAssignee(task.getId(),candidateUser); 张三把当前任务指定给lisi处理
System.out.println("任务归还完毕");
}
排他网关
当你的流程出现这样的场景:请假申请,三天以内,部门经理审批流程就结束了,三天以上需要总经理,这个时候就需要排他网关。
并行网关
当出现这样的场景:请假申请开始,需要项目经理和部门经理都审批,两者没有前后需要两个人全部审批才能进入下个节点。这个时候就需要并行网关。
包含网关
当出现这样的场景:你申请请假,如果是病假,找项目经理审批,如果不是找部门经理+项目经理审批。说白了就像是排他跟并行的合体。
全局监听器
全局监听器主要使用的场景就是监控这个流程的启动和结束。流程开始的时候可以监控,流程结束的时候可以监控,这里说的是流程实例启动结束的监控,并非是流程引擎的启动结束监控。
连线监听器
当节点结束的时候,经过连线的时候,我们可以在线上定义类,实现自己的业务逻辑。
节点监听器
在实际项目开发中,任务节点是经常用到的,所以我们必须要会使用节点监听器。