第七篇flowable核心内容之任务分配(代码片段)

波波烤鸭 波波烤鸭     2022-11-30     119

关键词:

Flowable的任务分配

1.任务分配

1.1 固定分配

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

1.2 表达式分配

  Flowable使用UEL进行表达式解析。UEL代表Unified Expression Language,是EE6规范的一部分.Flowable支持两种UEL表达式: UEL-value 和UEL-method

1.2.1 值表达式

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

$myVar
$myBean.myProperty

案例讲解:

可以看到通过表达式处理的效果

先部署流程,然后在启动流程实例的时候绑定表达式对应的值

/**
     * 启动流程实例
     */
    @Test
    public void testRunProcess()

        // 获取流程引擎对象
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        // 启动流程实例通过 RuntimeService 对象
        RuntimeService runtimeService = processEngine.getRuntimeService();
        // 设置 assignee 的取值
        Map<String,Object> variables = new HashMap<>();
        variables.put("assignee0","张三") ;
        variables.put("assignee1","李四"); 
        // 启动流程实例,第一个参数是流程定义的id
        ProcessInstance processInstance = runtimeService
                .startProcessInstanceById("MyHolidayUI:1:4", variables);// 启动流程实例
        // 输出相关的流程实例信息
        System.out.println("流程定义的ID:" + processInstance.getProcessDefinitionId());
        System.out.println("流程实例的ID:" + processInstance.getId());
        System.out.println("当前活动的ID:" + processInstance.getActivityId());
    

在流程变量表中我们可以看到对应的流程变量信息

同时在Task表中,可以看到流程当前的分配人是张三,说明UEL表达式被解析了

1.2.2 方法表达式

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

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

  myBean是Spring容器中的个Bean对象,表示调用的是bean的addNewOrder方法

1.3 监听器分配

可以使用监听器来完成很多Flowable的流程业务。

我们在此处使用监听器来完成负责人的指定,那么我们在流程设计的时候就不需要指定assignee

创建自定义监听器:

/**
 * 自定义的监听器
 */
public class MyTaskListener implements TaskListener 
    @Override
    public void notify(DelegateTask delegateTask) 
        System.out.println("监听器触发了:" + delegateTask.getName());
        if("提交请假流程".equals(delegateTask.getName()) &&
                "create".equals(delegateTask.getEventName()))
            // 指定任务的负责人
            delegateTask.setAssignee("小明");
        else 
            delegateTask.setAssignee("小张");
        
    

然后在FlowableUI中关联对应的监听器

create:任务创建后触发
assignment:任务分配后触发
Delete:任务完成后触发
All:所有事件都触发

然后我们先部署流程,然后执行查看效果:

然后在Task表中我们可以看到对应的分配人为小明说明通过监听也完成了任务分配的工作了

到这儿就搞定了~

第七篇camunda系列-身份服务(代码片段)

身份服务  在流程定义中在任务结点的assignee固定设置任务负责人,在流程定义时将参与者固定设置在.bpmn文件中,如果临时任务负责人变更则需要修改流程定义,系统可扩展性差。针对这种情况可以给任务设置多个候选人或... 查看详情

第七篇camunda系列-身份服务(代码片段)

身份服务  在流程定义中在任务结点的assignee固定设置任务负责人,在流程定义时将参与者固定设置在.bpmn文件中,如果临时任务负责人变更则需要修改流程定义,系统可扩展性差。针对这种情况可以给任务设置多... 查看详情

r语言学习第七篇:列表(代码片段)

列表(List)是R中最复杂的数据类型,一般来说,列表是数据对象的有序集合,但是,列表的各个元素(item)的数据类型可以不同,每个元素的长度可以不同,是R中最灵活的数据类型。列表项可以是列表类型,因此,列表被认... 查看详情

测开之函数进阶篇・第七篇《装饰器》(代码片段)

目录装饰器开放封闭原则装饰器的作用装饰器的应用场景实现一个装饰器装饰器原理阐述带参数的装饰器装饰器装饰类定义一个时间装饰器装饰器开放封闭原则软件实体应该是可扩展、而不可修改的。也就是说,对扩展是开... 查看详情

设计模式从青铜到王者第七篇:创建型模式之抽象工厂模式(abstractfactory)(代码片段)

系列文章目录文章目录系列文章目录前言1.抽象工厂模式简介2.抽象工厂模式结构3.抽象工厂模式代码实例3.1.定义产品类3.1.1.产品类Ball3.1.2.产品类Shirt3.2.定义工厂类3.3.客户端使用方法示例3.4.效果4.抽象工厂模式总结优点:缺... 查看详情

flask初识,第七篇,flask中的路由(代码片段)

 Flask中的路由系统其实我们并不陌生了,从一开始到现在都一直在应用@app.route("/",methods=["GET","POST"])为什么要这么用?其中的工作原理我们知道多少?请关注跟DragonFire学Flask之路由系统,这里有你想要的答案 1.@app.route()装饰器... 查看详情

flowable按角色分配任务(代码片段)

文章目录1.用户与用户组1.1添加组1.2修改组1.3删除组1.4查询组2.设置候选组3.根据用户组查询任务前面松哥和大家分享的都是给UserTask设置处理人或者是候选用户,不过小伙伴们也知道,在我们为UserTask设置处理人的时候... 查看详情

第七篇:react-hooks设计动机与工作模式(下)(代码片段)

经过第6课时的学习,相信你已经清楚了React-Hooks的来头,并理解了其背后的“设计动机”。本课时我们的任务是构建对React-Hooks的整体认知。在本课时的主体部分,我将通过一系列的编码实例来帮助你认识useState、useEf... 查看详情

第七周.02.treelstm代码讲解(代码片段)

...入请参考:在线Latex公式之前的论文带读看这里:第七周.直播.TreeL 查看详情

cocos2d-x3.0游戏实例之《别救我》第七篇——物理世界的碰撞检測

事实上我也非常吃惊…居然写到第七篇了,我估计也就是四篇的内容,感觉非常奇妙,我也不会非常唠叨什么吖(小若:32个喷!),怎么都到第七篇了。 笨木头花心贡献,啥?花心?不呢,是用心~转载请注明,原文地址:... 查看详情

构建之法——第七篇

本周我对于软件的设计与实现和用户体验进行了一个深度的学习。我们写软件就是要解决用户的需求,我们需要表达和传递一些信息:在“需求分析”阶段,我们要搞清楚,在问题领域的现实世界里,都有哪些实体,如何抽象出... 查看详情

第十七篇flowable整合springboot环境(代码片段)

一、Flowable整合SpringBoot  Flowable在Java项目中开发我们更多的还是会在SpringBoot环境中来使用,所以整合SpringBoot环境还是必不可少的。具体我们来看看如何实现1.添加相关依赖  首先需要添加必要的依赖<dependency><group... 查看详情

java基础第七篇之接口

1.什么是接口: *接口是方法的集合,而且接口中的方法全是抽象的 *你可以把接口看成一个特殊的"抽象类",接口中的方法全是抽象的 * * *2.java中怎么定义接口: *定义类的关键字:class *定义接口的关键字:inter... 查看详情

flowable中task的相关操作(代码片段)

1获取任务列表1)获取候选人的任务列表TaskServicetaskService=processEngine.getTaskService();List<Task>tasks=taskService.createTaskQuery().taskCandidateUser("kermit").list();2)如果任务分配给了某一组,查询某一组的任务列表TaskServicetaskS 查看详情

数据分析第七篇:相关分析(代码片段)

相关分析是数据分析的一个基本方法,可以用于发现不同变量之间的关联性,关联是指数据之间变化的相似性,这可以通过相关系数来描述。发现相关性可以帮助你预测未来,而发现因果关系意味着你可以改变世界。 一,协... 查看详情

go语言第七篇:go函数

Go语言函数函数是基本的代码块,用于执行某个任务。Go语言最少有个main()函数,可以通过函数来划分不同功能,逻辑上每个函数执行的是指定的任务。函数声明告诉了编译器函数的名称,返回类型和参数。Go语言标准库提供了多... 查看详情

flowable入门系列文章42-用户任务(代码片段)

1、描述一个用户任务被用来模拟需要由人来完成的工作。当进程执行到达这样的用户任务时,在分配给该任务的任何用户或组的任务列表中创建新的任务。2、图形表示法用户任务可视化为一个典型的任务(圆角矩形࿰... 查看详情

love2d从青铜到王者第七篇:love2d之对象(代码片段)

系列文章目录文章目录系列文章目录前言🍇一、Tables表格1️⃣.Tables表格🍈二、再来一次(Onemoretime)🍉三、函数(Functions)🍑四、总结🍋总结前言🍇一、Tables表格1️⃣.Tables表格在上一篇文章中,我们使... 查看详情