-
Assignment:办理人,指定唯一一个。
-
Candidate users:候选人,可以指定多个人。
-
Candidate groups:候选组,可以指定多个组。
单个用户方式
1. 在流程图中对任务节点进行配置,直接指定接收任务用户
直接在bpmn文件中显式指定
启动流程查看userTask任务的指定人为张三丰
act_ru_task表
缺点:硬式编码,将任务分配的用户写死了
2. 在流程图中对任务节点进行配置,通过流程变量方式指定接收任务的用户
可以在流程启动或者其他时候指定该任务的处理用户
//启动流程
ProcessEngine processEngine = getProcessEngine();
RuntimeService runtimeService = processEngine.getRuntimeService();
//流程启动时设置流程变量
Map<String,Object> variables = new HashMap<String, Object>();
variables.put(“userId”,“周芷若”);
runtimeService.startProcessInstanceByKey(“testUserAssignee”,variables);
查看数据库中任务节点的assignee
act_ru_task表
3. 在流程定义中,userTask节点的assignee什么也不配,通过指定一个任务监听器,在监听器中动态指定
- 任务监听器需要实现TaskListener接口
bpmn流程配置
<activiti:taskListener class=“cn.cf.activiti.atguigu.AssigneeTaskUser” event=“create”/>
监听类
public class AssigneeTaskUser implements TaskListener {
public void notify(DelegateTask delegateTask) {
delegateTask.setAssignee(“金毛狮王”);
}
}
启动流程,查看数据库中任务节点的处理人
act_ru_task.png
可以在任务已经分配给指定用户的情况下,通过taskService.setAssignee(taskId,userId);重新指定办理人
会有个签收任务的概念。只要任务还未被签收,候选组内的任意用户都可以签收该任务;一旦任务被签收,候选组内的其他用户就无法查看与签收该任务咯。
一、多人任务分配方式
所谓组任务,也就是任务的候选人,候选人中的用户有权认领该任务并且完成该任务,当任务被领取之后,其他候选人即无法再看到此任务。
当用户认领任务时,就算该用户不在候选人列表中,依然可以认领任务
涉及的数据库表有:
-
act_ru_identitylink 表存放任务的办理人,包括个人任务和组任务,表示正在执行的任务
-
act_hi_identitylink 表存放任务的办理人,包括个人任务和组任务,表示历史任务
通过表中的TYPE_字段进行区分用户是办理人还是候选人。在个人任务中(即通过assignee指定),该字段的值为participant(参与者),如果是组任务(即通过candidateUser or candidateGroup指定),TYPE_可以是participant也可以是candidate(候选人)
- 分配方式同上三种配置方式
1. 在bpmn流程定义文件中直接写 candidate-users=“小A,小B,小C,小D"
2. 在bpmn流程定义文件中写 candidate-users =“#{userIDs}”,变量的值要是String的。使用流程变量指定办理人
Map<String, Object> variables = new HashMap<String, Object>();
variables.put(“userIDs”, “大大,小小,中中”);
3. 使用TaskListener接口,使用类实现该接口
//为用户任务添加候选人(可以连续添加多个)
delegateTask.addCandidateUser(userId1);
delegateTask.addCandidateUser(userId2);
二、组任务分配方式
使用 candidate groups
属性指定 任务组,其中部门经理表示一个用户组的角色
先建立人员组关系
设置组任务的办理人,向Activity表中存放组和用户的信息
IdentityService identityService = processEngine.getIdentityService();//认证:保存组和用户信息
identityService.saveGroup(new GroupEntity(“部门经理”));//建立组
identityService.saveGroup(new GroupEntity(“总经理”));//建立组
identityService.saveUser(new UserEntity(“小张”));
identityService.saveUser(new UserEntity(“小李”));
identityService.saveUser(new UserEntity(“小王”));
identityService.createMembership(“小张”, “部门经理”);//建立组和用户关系
identityService.createMembership(“小李”, “部门经理”);//建立组和用户关系
identityService.createMembership(“小王”, “总经理”);//建立组和用户关系
表结构介绍
act_id_group:角色组表
act_id_user:用户表
act_id_membership:用户角色表
- 创建用户
User user = identityService.newUser(userId);
user.setFirstName(“Deniro”);
user.setLastName(“Lee”);
user.setEmail(“xxx@163.com”);
identityService.saveUser(user);
- 创建组
//新建组对象
Group group = identityService.newGroup(groupId);
group.setName(“部门领导”);
group.setType(“assignment”);
//保存
identityService.saveGroup(group);
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Java)
最后
我还为大家准备了一套体系化的架构师学习资料包以及BAT面试资料,供大家参考及学习
已经将知识体系整理好(源码,笔记,PPT,学习视频)
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
助,可以扫码获取!!(备注:Java)**
[外链图片转存中…(img-zZ2IUycx-1713808470227)]
最后
我还为大家准备了一套体系化的架构师学习资料包以及BAT面试资料,供大家参考及学习
已经将知识体系整理好(源码,笔记,PPT,学习视频)
[外链图片转存中…(img-z54HG3Xl-1713808470227)]
[外链图片转存中…(img-IipyAzSZ-1713808470227)]
[外链图片转存中…(img-sX4K8f9b-1713808470228)]
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!