首页 > 其他分享 >【第五篇】Camunda系列-任务分配

【第五篇】Camunda系列-任务分配

时间:2022-10-15 23:03:26浏览次数:59  
标签:流程 任务分配 对应 public 第五篇 监听器 Camunda 我们 表达式


【第五篇】Camunda系列-任务分配_监听器

任务分配

1.固定分配

  在指派​​用户任务​​的审批人时。我们是直接指派的固定账号。但是为了保证流程设计审批的灵活性。我们需要各种不同的分配方式,所以这节我们就详细的来介绍先在Camunda中我们可以使用的相关的分配方式

  固定分配就是我们前面介绍的,在绘制流程图或者直接在流程文件中通过Assignee来指定的方式.

【第五篇】Camunda系列-任务分配_启动流程_02

  这种方式就非常简单。不再过多赘述。

2.值表达式

  值表达式 Value expression: 解析为一个值。默认情况下,所有流程变量都可以使用。(若使用Spring)所有的Spring bean也可以用在表达式里。例如:

${myVar}
${myBean.myProperty}

【第五篇】Camunda系列-任务分配_启动流程_03

  然后可以演示下这个案例,先部署该流程。

/**
* 完成流程的部署操作
*/
@Test
public void deploy(){
Deployment deploy = repositoryService.createDeployment()
.name("请假流程")
.addClasspathResource("flow/1-01-任务分配.bpmn")
.deploy();
System.out.println("deploy.getId() = " + deploy.getId());
}

  然后在启动流程实例。启动流程实例后会进入到​​人事审批​​​这个节点,有​​值表达式​​的存在,我们需要在启动的过程中就给其赋值。

【第五篇】Camunda系列-任务分配_启动流程_04

绑定流程变量的操作

/**
* 启动流程实例
*/
@Test
public void startFlow(){
String processInstanceId = "Process_0uiy3j1:1:712d273a-31f0-11ed-9e27-c03c59ad2248";
// 定义一个Map集合,存储相关的流程变量信息
Map<String,Object> map = new HashMap<>();
map.put("user1","demo");
// 通过 RuntimeService 启动一个流程实例,同时绑定了对应的流程变量信息
runtimeService.startProcessInstanceById(processInstanceId,map);
}

通过后台查看数据我们可以发现​​act_ru_task​​​中有了一条​​人事审批​​​的任务,而且对于的审批人就是​​demo​​也就是我们给对应的流程变量的赋值

【第五篇】Camunda系列-任务分配_监听器_05

而对应的流程变量信息存储在​​act_ru_variable​​中。

【第五篇】Camunda系列-任务分配_监听器_06

3.方法表达式

  方法表达式 Method expression: 调用一个方法,可以带或不带参数。**当调用不带参数的方法时,要确保在方法名后添加空括号(以避免与值表达式混淆)。**传递的参数可以是字面值(literal value),也可以是表达式,它们会被自动解析。例如: boge3306

${printer.print()}
${myBean.getAssignee()}
${myBean.addNewOrder('orderName')}
${myBean.doSomething(myVar, execution)}

  myBean是Spring容器中的个Bean对象,表示调用的是bean的addNewOrder方法.我们通过案例来演示下。我们先定义对应的Service

@Service
public class MyBean {

public String getAssignee(){
System.out.println("getAssignee 方法执行了....");
return "demo";
}
}

  然后我们在对应的流程图中来定义。

【第五篇】Camunda系列-任务分配_启动流程_07

  然后通过部署启动操作来看看。

【第五篇】Camunda系列-任务分配_监听器_08

【第五篇】Camunda系列-任务分配_监听器_09

  通过这块的演示,我们就可以基于我们的外部条件来结合我们的逻辑实现动态的来指定对应的处理人。

4.监听器配置

  可以使用监听器来完成很多Camunda的流程业务。我们在此处使用监听器来完成负责人的指定,那么我们在流程设计的时候就不需要指定assignee。创建自定义监听器:

/**
* 自定义的一个 Task 监听器
* 我们需要在监听器中完成 处理人的动态指派
*/
public class MyFirstTaskListener implements TaskListener {
@Override
public void notify(DelegateTask delegateTask) {
System.out.println("MyFirstTaskListener --- > 执行了");
// 针对 是创建Task节点的事件
if(EVENTNAME_CREATE.equals(delegateTask.getEventName())){
// 指派对应的处理人
delegateTask.setAssignee("demo");
}
}
}

  然后在流程图中绑定对应的监听器

【第五篇】Camunda系列-任务分配_启动流程_10

  然后我们部署和启动流程后,可以看到对应的触发效果

【第五篇】Camunda系列-任务分配_启动流程_11

表结构中也可以看到相关的信息

【第五篇】Camunda系列-任务分配_流程图_12

说明这块的处理是完全可行的。


标签:流程,任务分配,对应,public,第五篇,监听器,Camunda,我们,表达式
From: https://blog.51cto.com/u_15494758/5759373

相关文章

  • 分库分表之第五篇
    分库分表之第五篇​​9.案例​​​​9.1.需求描述​​​​9.2.数据库设计​​​​9.3.环境说明​​​​9.4.环境准备​​​​9.4.1.mysql主从同步(windows)​​​​9.4.2.初始......
  • camunda_20_rest_client
    restclient是什么除了内置流程引擎应用,有时候我们其他应用也需要访问camundaplatform,这时候可以通过camundarestAPI实现,为了简化restapi的调用,开源社区......
  • camunda_19_api
    本文内容转载,下面内容转载自使用Camunda流程引擎开发,【取回】、【撤销】代码实现-a周周-博客园camunda驳回到第一个任务节点示例-李兵~-博客园流程打回到起......
  • camunda_18_user_task_assignment
    Camunda后台数据库内建有几个人员/组织数据表,但在Usertaskassignment方便,并不强制我们要将自己的人员/组织数据导入到这些table中.举例讲,我们需要将某个usertas......
  • camunda_temp
    camunda-bpmn-用户任务(UserTask)dafengyiba0.2112020.10.1216:02:25字数2,724阅读8,065用户任务被用作给哪些需要人去完成的工作建模。当流程执行到用......
  • camunda_17_listener
    Java调用方式对于内置流程引擎的应用,可以在流程流转时调用Java逻辑,最主要有三种形式的Java调用方式:JavaDelegate:ServiceTask组件如选择Javaclass,即......
  • camunda_15_oracle
    按照Camunda官方文档,生产环境优先推荐Oracle和Postgresql,当然MySQL和SQLServer也是支持的.官方参考架构文档前面博文已经介绍了使用Postgresql作为数据库,camund......
  • camunda_14_swagger
    预编译软件包支持Swagger命令行启动官方预编译,缺省情况下就已经启动了swaggerui.PSC:\my_program\camunda-bpm-run-7.17.0>.\start.batSettingJAVA......
  • camunda_13_postgresql
    前面都是使用H2数据库,体验功能非常方便,但分析table数据就比较麻烦了,下面介绍如何使用postgresql作为后台数据库.按照Camunda官方文档,生产环境优先推荐Oracle和P......
  • camunda_12_forms
    Usertask和Startevent的form类型Camundaforms:使用Modeler创建的外部form文件,CamundaTaskList应用能自动渲染该form.EmbededorExternalTaskforms:手......