当前位置 博文首页 > qi95719的博客:activiti 候选人:(候选组)流程设计:
候选人:可以设置多个执行,但是真正执行的只有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
在人事部审批节点也是要先签收后办理;
已办理任务查询没有什么特殊的,按常规查询即可