1.候选人
给UserTask设置候选人呢,就是创建任务的时候,不确定是谁去审批。也就是act_ru_task的数据里,assignee字段为空,如下:
需要候选人手动进行抓取操作的时候,才会去设置assignee,退还的时候,assignee又会被设置成null。废话不多说,上代码:
抓取操作:
Task task = taskService.createTaskQuery().taskCandidateUser("10").active().singleResult();
taskService.claim(task.getId(), "10");
效果如下:
退还操作:
taskService.unclaim(task.getId());
小结:创建任务不设置处理人,候选人自行抓取,先到先得。抓取后,其他候选人不能再抓取。
2.候选人组
候选人组呢需要先将分组和用户关联起来,这里会涉及到flowable的三个表
ACT_ID_USER(用户),ACT_ID_GROUP(分组),ACT_ID_MEMBERSHIP(用户分组关联表)
说白了就是,使用候选人组就是这个分组内的用户都是候选人。
User user = identityService.newUser("10");
user.setFirstName("dev2");
user.setLastName("loper3");
identityService.saveUser(user);
User user1 = identityService.newUser("33");
user1.setFirstName("dev");
user1.setLastName("loper");
identityService.saveUser(user1);
User user3 = identityService.newUser("34");
user3.setFirstName("dev1");
user3.setLastName("loper1");
identityService.saveUser(user1);
Group group = identityService.newGroup("1");
group.setName("it");
identityService.saveGroup(group);
identityService.createMembership("10","1");
identityService.createMembership("33","1");
identityService.createMembership("34","1");
初始数据:
当候选组内的用户执行完抓取后:
小结:其实候选人组就是先绑定好分组内的用户,然后按组来设置,跟候选人差不多,都是需要手动抓取。
3.xml如下
<userTask id="Activity_17vvb7g" name="候选人节点" flowable:candidateUsers="${candidateUsers}" flowable:userType="candidateUsers" flowable:dataType="fixed">
<incoming>Flow_1sh9pzm</incoming>
<outgoing>Flow_0gk4ms2</outgoing>
</userTask>
<sequenceFlow id="Flow_1sh9pzm" sourceRef="start_event" targetRef="Activity_17vvb7g" />
<userTask id="Activity_1lw7tez" name="候选组节点" flowable:candidateGroups="${candidateGroups}" flowable:userType="candidateGroups" flowable:dataType="fixed">
<incoming>Flow_0gk4ms2</incoming>
<outgoing>Flow_1hvs8mf</outgoing>
</userTask>