首页 > 其他分享 >camunda_18_user_task_assignment

camunda_18_user_task_assignment

时间:2022-10-16 22:38:18浏览次数:70  
标签:设定 task demo123 18 流程 tasks taskService camunda

Camunda 后台数据库内建有几个人员/组织数据表, 但在User task assignment方便, 并不强制我们要将自己的人员/组织数据导入到这些table中. 举例讲, 我们需要将某个user task指派给 demo123 这个用户, 直接在该user task设定 assignee 为 demo123 即可, 就这么简单.

指定 Assignment 的几种形式:

  • Assignee: 直接指派到人.
  • Candidate Users, 指派多个人, 按逗号分隔.
  • Candidate Groups, 指派到多个组, 按逗号分隔.
    说明: 在TaskList应用中, 对于后两种形式的指派, 操作人员在执行user task之前, 还需要先做任务认领, 谁认领任务, 谁就获得执行权.
    但如果是自己的流程引擎的应用, 其实可以设计认领过程, 也可以省略认领步骤.

Assignment 的设定时机

  • 流程设计时设定. 在流程设计时即使用固定值指定任务执行人, 比如设定 demo123.
  • 流程启动时设定. Assignee/CandidateUsers/CandidateGroups, 都支持表达式设定, 我们可以在流程设计时, 指定user task的执行人为 ${user} , 在流程启动时间, 设定这些流程变量, 即完成人员指派.
  • 流程流转过程中设定. 流程设计时通过变量设定执行人, 然后在流程流转时, 在前置节点代码指定后续节点的执行人, 或者在本user task的 executionListener的 start 事件或 taskListener 的 create 事件中动态设定执行人. 下图executionListener 和 taskListener 常用event的执行顺序图:
  • camunda_18_user_task_assignment_spring

通过create TaskListener 指派人员的示例代码

public class MyUserTaskListener implements TaskListener {

@Override
public void notify(DelegateTask delegateTask) {
if (delegateTask.getEventName().equals("create")) {
//直接指派人
delegateTask.setAssignee("demo123");
//或者, 设定流程变量userId
delegateTask.setVariable("userId","demo123");
}
}
}

User task 任务处理

SpringBoot 的引擎项目, DI 容器可以直接注入 TaskService 实例, 然后就可以按照process 和当前用户UserId/group 遍历到要 todo 清单, 进而完成业务处理.
下面是一个简单的代码示例:

@SpringBootApplication
@EnableProcessApplication
public class WebappExampleProcessApplication {
@Autowired
TaskService taskService;

public static void main(String... args) {
SpringApplication.run(WebappExampleProcessApplication.class, args);
}

public void doTask() {
List<Task> tasks = null;
tasks = taskService.createTaskQuery().taskAssignee("demo123").processInstanceBusinessKey("procKey").list();
tasks = taskService.createTaskQuery().taskCandidateUser("demo123").processInstanceBusinessKey("procKey").includeAssignedTasks().list();
tasks = taskService.createTaskQuery().taskCandidateGroup("Group1").processInstanceBusinessKey("procKey").includeAssignedTasks().list();
if (tasks != null && tasks.size() > 0) {
Task task= tasks.get(0) ;
String taskId = task.getId();

// 业务处理代码省略


// 如果原来分配到group或candidateUsers, 可设定具体执行人
taskService.setAssignee(taskId, "demo123");

// 提交task
taskService.complete(taskId);
taskService.handleBpmnError(taskId, "some error"); // 抛出 Bpmn 异常

}
}

}

参考



标签:设定,task,demo123,18,流程,tasks,taskService,camunda
From: https://blog.51cto.com/u_15585381/5760727

相关文章

  • camunda_15_oracle
    按照Camunda官方文档,生产环境优先推荐Oracle和Postgresql,当然MySQL和SQLServer也是支持的.​​​官方参考架构文档​​前面博文已经介绍了使用Postgresql作为数据库,......
  • camunda_02_installation
    CamundaPlatform7Run的下载和使用Camunda8的重点是SaaS,对于一般的工作流项目,还是传统的集成模式更好,所以仍然选择版本7,最新的是7.17版.注意事项java必须是1......
  • LiveGBS流媒体服务平台国标GB28181级联上级如何抓包分析windows抓包和Linux抓包
    LiveGBS流媒体服务平台国标GB28181级联上级如何抓包分析windows抓包和Linux抓包​​1、第一步:抓包工具准备​​​​1.1、Linux​​​​1.2、windows​​​​2、第二步:找到级......
  • task
    #include<stdio.h>intmain(){printf("o\n");printf("<H>\n");printf("II\n");printf("\n");printf("o\n");printf("<H>\n");pr......
  • Android平台GB28181接入端语音广播和语音对讲规范解读和技术实现
    我在之前的blog,有提到过Android端GB28181接入端的语音广播和语音对讲,今天主要从GB/T28181-2016官方规范和交互流程,大概介绍下Android平GB28181接入端的语音广播和语音对讲。......
  • 18.Redis常见的面试题
    参考1:https://lebron.blog.csdn.net/article/details/121456167参考2:https://lebron.blog.csdn.net/article/details/120817994......
  • CF1188A2
    首先题目中每条边权值互不相同,于是A1的结论依旧适用:有解当且仅当树中不存在度数为\(2\)的点。必要性很好证,度数为二的点不会是叶子,那么每条经过该点修改的路径一定同......
  • taskk
    task5#include<stdio.h> intmain(){intage1,age2;chargender1,gender2;scanf("%d%c%d%c",&age1,&ge......
  • [网鼎杯 2018]Fakebook 1
    考点:sql联合注入dirsearch目录扫描反序列化代码审计解题过程:初始页面点击join注册一个账号点进刚注册的账号,发现php?no=1,可能存在sql注入。尝试手动注入,order......
  • 【第八篇】Camunda系列-网关服务
    网关篇  网关用来控制流程的流向1.排他网关  ​​排他网关​​(exclusivegateway)(也叫异或网关XORgateway,或者更专业的,基于数据的排他网关exclusivedata-basedgate......