- 开始节点
- 结束节点
- 活动说明
- 等待活动说明
不等待活动说明
个人任务
- 组任务
- 任务认领
- 任务归还
- 监听器使用
- 角色组使用
节点介绍

开始节点

常用的有默认启动,定时启动,信号启动
结束节点

用户任务(TaskService)
TaskService 是camunda的任务服务类,可以从这个服务类中执行任务相关操作。实现类TaskServiceImpl.提供了一系列根据自身业务场景操作任务的API
任务说明
在camunda任务中,主要分两大类查询任务(个人任务和组任务)
- 明确指定办理者的任务,这个任务将成为指定者的私有任务,即个人任务。其他人是看不到这个任务
- 无法指定具体的某一个人来办理任务,可以把任务分配给几个人或者一到多个小组,让这个范围内的用户可以选择性来办理这类任务,即组任务。
在实际开发项目中,不要将办理人直接放在xml中,因为这样不灵活
任务定义

完成请假申请节点,则将请假申请的数据会从act_ru_task表中删除,下一个节点的数据回继续插入进来。

使用变量


使用监听器


public class TaskListenerTest implements TaskListener {@Overridepublic void notify(DelegateTask delegateTask) {System.out.println("################");String eventName = delegateTask.getEventName();System.out.println("eventName:" + eventName);int priority = delegateTask.getPriority();System.out.println("priority:" + priority);delegateTask.setAssignee("张三");System.out.println("#########################");}}
- 任务监听器只能在任务节点中进行实现。
- 执行监听器可以在所有的节点中进行使用,包括任务节点
- 执行监听器可以获取执行实例对象,任务监听器可以获取到当前的任务对象
任务转让
任务转让也会进入监听,EventType 为assignment
@Testpublic void setAssignee() {String taskId = "708";String assignee = "诸葛亮";taskService.setAssignee(taskId, assignee);}


组任务(Candidate Users)
组任务代办(候选人)

/*** select distinct RES.REV_, RES.ID_, RES.NAME_, RES.PARENT_TASK_ID_, RES.DESCRIPTION_, RES.PRIORITY_,* RES.CREATE_TIME_, RES.OWNER_, RES.ASSIGNEE_, RES.DELEGATION_, RES.EXECUTION_ID_, RES.PROC_INST_ID_,* RES.PROC_DEF_ID_, RES.CASE_EXECUTION_ID_, RES.CASE_INST_ID_, RES.CASE_DEF_ID_, RES.TASK_DEF_KEY_,* RES.DUE_DATE_, RES.FOLLOW_UP_DATE_, RES.SUSPENSION_STATE_, RES.TENANT_ID_* from ACT_RU_TASK RES inner join ACT_RU_IDENTITYLINK I on I.TASK_ID_ = RES.ID_* WHERE ( 1 = 1 and ( RES.ASSIGNEE_ is null and I.TYPE_ = 'candidate' and ( I.USER_ID_ = ? ) ) )* order by RES.ID_ asc LIMIT ? OFFSET ?*/@Testpublic void queryGroup() {String user = "zhangsan";List<Task> taskList = taskService.createTaskQuery().taskCandidateUser(user).list();}
查询任务的处理人
/*** select * from ACT_RU_IDENTITYLINK where TASK_ID_ = ?*/@Testpublic void getIdentityLinksForTask() {String taskId = "1904";List<IdentityLink> links = taskService.getIdentityLinksForTask(taskId);}
查询历史
List<HistoricIdentityLinkLog> historicIdentityLinkLogs = historyService.createHistoricIdentityLinkLogQuery().list();
组任务处理三种方式
签收

@Testpublic void claim() {String taskId = "1904";String userId = "zhangsan";taskService.claim(taskId, userId);}

组任务被个人签收之后,则表示指定的人已经明确要处理当前的任务了,组成员的人已经查不到这个任务了。
签收步骤
退还
taskService.claim(taskId, userId);
完成
taskService.complete(taskId);

个人任务和组任务区别
任务处理动态添加及移除
添加
移除


角色(CandidateGroups)
使用candidate groups 属性指定任务负责组
<bpmn:userTask id="Task_1s7rly2" name="申请" camunda:candidateGroups="普通员工">
初始化数据
查询组任务列表

人员相关表说明
- act_id_group 角色组表
- act_id_user 用户表
- act_id_membership 用户角色表

