前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【第五篇】Camunda系列-任务分配

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

作者头像
用户4919348
发布2022-10-27 15:09:37
3.3K1
发布2022-10-27 15:09:37
举报
文章被收录于专栏:波波烤鸭波波烤鸭
在这里插入图片描述
在这里插入图片描述

任务分配

1.固定分配

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

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

在这里插入图片描述
在这里插入图片描述

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

2.值表达式

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

代码语言:javascript
复制
${myVar}
${myBean.myProperty}
在这里插入图片描述
在这里插入图片描述

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

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

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

在这里插入图片描述
在这里插入图片描述

绑定流程变量的操作

代码语言:javascript
复制
    /**
     * 启动流程实例
     */
    @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也就是我们给对应的流程变量的赋值

在这里插入图片描述
在这里插入图片描述

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

在这里插入图片描述
在这里插入图片描述

3.方法表达式

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

代码语言:javascript
复制
${printer.print()}
${myBean.getAssignee()}
${myBean.addNewOrder('orderName')}
${myBean.doSomething(myVar, execution)}

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

代码语言:javascript
复制
@Service
public class MyBean {

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

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

在这里插入图片描述
在这里插入图片描述

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

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

4.监听器配置

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

代码语言:javascript
复制
/**
 * 自定义的一个 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");
        }
    }
}

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

在这里插入图片描述
在这里插入图片描述

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

在这里插入图片描述
在这里插入图片描述

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

在这里插入图片描述
在这里插入图片描述

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-10-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 任务分配
    • 1.固定分配
      • 2.值表达式
        • 3.方法表达式
          • 4.监听器配置
          相关产品与服务
          容器服务
          腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档