【大白话说flowable】候选人和候选人组

25 阅读1分钟

1.候选人

给UserTask设置候选人呢,就是创建任务的时候,不确定是谁去审批。也就是act_ru_task的数据里,assignee字段为空,如下:

image.png

需要候选人手动进行抓取操作的时候,才会去设置assignee,退还的时候,assignee又会被设置成null。废话不多说,上代码:

抓取操作:

Task task = taskService.createTaskQuery().taskCandidateUser("10").active().singleResult();
taskService.claim(task.getId(), "10");

效果如下:

image.png

退还操作:

taskService.unclaim(task.getId());

image.png

小结:创建任务不设置处理人,候选人自行抓取,先到先得。抓取后,其他候选人不能再抓取。

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");

初始数据: image.png

当候选组内的用户执行完抓取后:

image.png

小结:其实候选人组就是先绑定好分组内的用户,然后按组来设置,跟候选人差不多,都是需要手动抓取。

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>