• 开始节点
  • 结束节点
  • 活动说明
  • 等待活动说明
  • 不等待活动说明

  • 个人任务

  • 组任务
  • 任务认领
  • 任务归还
  • 监听器使用
  • 角色组使用

节点介绍

image.png

开始节点

image.png
常用的有默认启动,定时启动,信号启动

结束节点

image.png

用户任务(TaskService)

  1. TaskService camunda的任务服务类,可以从这个服务类中执行任务相关操作。
  2. 实现类TaskServiceImpl.
  3. 提供了一系列根据自身业务场景操作任务的API

任务说明

在camunda任务中,主要分两大类查询任务(个人任务和组任务)

  • 明确指定办理者的任务,这个任务将成为指定者的私有任务,即个人任务。其他人是看不到这个任务
  • 无法指定具体的某一个人来办理任务,可以把任务分配给几个人或者一到多个小组,让这个范围内的用户可以选择性来办理这类任务,即组任务

在实际开发项目中,不要将办理人直接放在xml中,因为这样不灵活

任务定义

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

image.png

使用变量

image.png

image.png

使用监听器

image.pngimage.png

  1. public class TaskListenerTest implements TaskListener {
  2. @Override
  3. public void notify(DelegateTask delegateTask) {
  4. System.out.println("################");
  5. String eventName = delegateTask.getEventName();
  6. System.out.println("eventName:" + eventName);
  7. int priority = delegateTask.getPriority();
  8. System.out.println("priority:" + priority);
  9. delegateTask.setAssignee("张三");
  10. System.out.println("#########################");
  11. }
  12. }
  • 任务监听器只能在任务节点中进行实现。
  • 执行监听器可以在所有的节点中进行使用,包括任务节点
  • 执行监听器可以获取执行实例对象,任务监听器可以获取到当前的任务对象

任务转让

任务转让也会进入监听,EventType 为assignment

  1. @Test
  2. public void setAssignee() {
  3. String taskId = "708";
  4. String assignee = "诸葛亮";
  5. taskService.setAssignee(taskId, assignee);
  6. }

image.png

image.png

组任务(Candidate Users)

组任务代办(候选人)

image.png

  1. /**
  2. * select distinct RES.REV_, RES.ID_, RES.NAME_, RES.PARENT_TASK_ID_, RES.DESCRIPTION_, RES.PRIORITY_,
  3. * RES.CREATE_TIME_, RES.OWNER_, RES.ASSIGNEE_, RES.DELEGATION_, RES.EXECUTION_ID_, RES.PROC_INST_ID_,
  4. * RES.PROC_DEF_ID_, RES.CASE_EXECUTION_ID_, RES.CASE_INST_ID_, RES.CASE_DEF_ID_, RES.TASK_DEF_KEY_,
  5. * RES.DUE_DATE_, RES.FOLLOW_UP_DATE_, RES.SUSPENSION_STATE_, RES.TENANT_ID_
  6. * from ACT_RU_TASK RES inner join ACT_RU_IDENTITYLINK I on I.TASK_ID_ = RES.ID_
  7. * WHERE ( 1 = 1 and ( RES.ASSIGNEE_ is null and I.TYPE_ = 'candidate' and ( I.USER_ID_ = ? ) ) )
  8. * order by RES.ID_ asc LIMIT ? OFFSET ?
  9. */
  10. @Test
  11. public void queryGroup() {
  12. String user = "zhangsan";
  13. List<Task> taskList = taskService.createTaskQuery()
  14. .taskCandidateUser(user)
  15. .list();
  16. }

查询任务的处理人

  1. /**
  2. * select * from ACT_RU_IDENTITYLINK where TASK_ID_ = ?
  3. */
  4. @Test
  5. public void getIdentityLinksForTask() {
  6. String taskId = "1904";
  7. List<IdentityLink> links = taskService.getIdentityLinksForTask(taskId);
  8. }

查询历史

  1. List<HistoricIdentityLinkLog> historicIdentityLinkLogs = historyService.createHistoricIdentityLinkLogQuery()
  2. .list();

组任务处理三种方式

签收

image.png

  1. @Test
  2. public void claim() {
  3. String taskId = "1904";
  4. String userId = "zhangsan";
  5. taskService.claim(taskId, userId);
  6. }

image.png
组任务被个人签收之后,则表示指定的人已经明确要处理当前的任务了,组成员的人已经查不到这个任务了

签收步骤
image.png

image.png

退还

  1. taskService.claim(taskId, userId);

完成

  1. taskService.complete(taskId);

image.png

个人任务和组任务区别

image.png

任务处理动态添加及移除

添加

image.png

移除

image.png
image.png

角色(CandidateGroups)

使用candidate groups 属性指定任务负责组

  1. <bpmn:userTask id="Task_1s7rly2" name="申请" camunda:candidateGroups="普通员工">

初始化数据

image.png

查询组任务列表

image.png

image.png

人员相关表说明

  • act_id_group 角色组表
  • act_id_user 用户表
  • act_id_membership 用户角色表