- 开始节点
- 结束节点
- 活动说明
- 等待活动说明
不等待活动说明
个人任务
- 组任务
- 任务认领
- 任务归还
- 监听器使用
- 角色组使用
节点介绍
开始节点
常用的有默认启动,定时启动,信号启动
结束节点
用户任务(TaskService)
TaskService 是camunda的任务服务类,可以从这个服务类中执行任务相关操作。
实现类TaskServiceImpl.
提供了一系列根据自身业务场景操作任务的API
任务说明
在camunda任务中,主要分两大类查询任务(个人任务和组任务)
- 明确指定办理者的任务,这个任务将成为指定者的私有任务,即个人任务。其他人是看不到这个任务
- 无法指定具体的某一个人来办理任务,可以把任务分配给几个人或者一到多个小组,让这个范围内的用户可以选择性来办理这类任务,即组任务。
在实际开发项目中,不要将办理人直接放在xml中,因为这样不灵活
任务定义
完成请假申请节点,则将请假申请的数据会从act_ru_task表中删除,下一个节点的数据回继续插入进来。
使用变量
使用监听器
public class TaskListenerTest implements TaskListener {
@Override
public 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
@Test
public 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 ?
*/
@Test
public void queryGroup() {
String user = "zhangsan";
List<Task> taskList = taskService.createTaskQuery()
.taskCandidateUser(user)
.list();
}
查询任务的处理人
/**
* select * from ACT_RU_IDENTITYLINK where TASK_ID_ = ?
*/
@Test
public void getIdentityLinksForTask() {
String taskId = "1904";
List<IdentityLink> links = taskService.getIdentityLinksForTask(taskId);
}
查询历史
List<HistoricIdentityLinkLog> historicIdentityLinkLogs = historyService.createHistoricIdentityLinkLogQuery()
.list();
组任务处理三种方式
签收
@Test
public 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 用户角色表