候选人:可以设置多个执行,但是真正执行的只有1个,只要有人签收之后,其他人的代签收任务将会没有这些任务:即只要有人签收任务,其他人的任务就直接被删除(隐式的删除)
流程设计
人事部审批节点候选人:zzz,xxx
部署流程后:流程定义ID:候选人:1:85004
查询节点执行人(包括候选人和候选组):act_hi_identitylink
启动流程:
public voidstartprocessByKey(String key){
Stringapplyuser ="zyq";
identityService.setAuthenticatedUserId(applyuser);
Map<String,Object>variables = new HashMap();//设置流程变量
variables.put("applyUserId","qwer");
variables.put("applyTitle","test_请假申请流程");
variables.put("applyTime","7天");
variables.put("applyCtreateTime",new Date());
variables.put("applyReason","休假");
//设置候选人:上级领导审批
Listlist =new ArrayList();
list.add("zzz");
list.add("xxx");
variables.put("managerIds",list);
ProcessInstanceprocessInstance = runtimeService.startProcessInstanceByKey(key,variables);
Tasktask = taskService.createTaskQuery().processInstanceId(processInstance.getId()).singleResult();
System.out.println(task.getAssignee());
}
这时流程表中:
正在运行的变量:
正在运行的任务:(历史表中也一样)
查询候选人任务:taskCandidateUser/taskCandidateOrAssigned
List<Task> list = taskService.createTaskQuery().taskCandidateUser(assignee).
orderByTaskCreateTime().desc().list();//查询所拥有的候选任务
List<Task> list =taskService.createTaskQuery().taskCandidateOrAssigned(assignee)
.orderByTaskCreateTime().desc().list();//查询所拥有的个人&候选任务
办理候选任务
首先要领取任务:
taskService.claim(taskId, assignee);
taskService.complete(taskId,variables);
例如:xxx 签收办理了
public void mytaskClaimAComplete(String taskId,String assignee){
taskService.claim(taskId, assignee);
Map<String,Object>variables = new HashMap();//设置流程变量
variables.put("managerCheckResult", "同意");
variables.put("managerCheckreason","可用年休假");
variables.put("managerTime",new Date());
taskService.complete(taskId,variables);
}
历史任务表:
上级领导审批人:assingee: xxx
在人事部审批节点也是要先签收后办理;
已办理任务查询没有什么特殊的,按常规查询即可