Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【第九篇】Flowable中的候选人讲解

【第九篇】Flowable中的候选人讲解

作者头像
用户4919348
发布于 2022-04-13 07:38:01
发布于 2022-04-13 07:38:01
2.9K00
代码可运行
举报
文章被收录于专栏:波波烤鸭波波烤鸭
运行总次数:0
代码可运行

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

候选人

1. 定义流程图

  定义流程图,同时指定候选人,多个候选人会通过,连接

2.部署和启动流程实例

  部署流程,并且在启动流程实例的时候对UEL表达式赋值

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    /**
     * 部署流程
     */
    @Test
    public void deploy(){
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        RepositoryService repositoryService = processEngine.getRepositoryService();

        Deployment deploy = repositoryService.createDeployment()
                .addClasspathResource("请假流程-候选人.bpmn20.xml")
                .name("请求流程-候选人")
                .deploy();
        System.out.println("deploy.getId() = " + deploy.getId());
        System.out.println(deploy.getName());
    }

    /**
     * 启动流程实例
     */
    @Test
    public void runProcess(){
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        RuntimeService runtimeService = processEngine.getRuntimeService();
        // 给流程定义中的UEL表达式赋值
        Map<String,Object> variables = new HashMap<>();
        variables.put("candidate1","张三");
        variables.put("candidate2","李四");
        variables.put("candidate3","王五");
        runtimeService.startProcessInstanceById("holiday-candidate:1:4",variables);
    }

  在对应的表结构中我们可以看到流程变量已经有了,但是对于的Task的Assignee还是为空。

3.任务的查询

  根据当前登录的用户,查询对应的候选任务

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
   /**
     * 根据登录的用户查询对应的可以拾取的任务
     *
     */
    @Test
    public void queryTaskCandidate(){
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        TaskService taskService = processEngine.getTaskService();
        List<Task> list = taskService.createTaskQuery()
                //.processInstanceId("2501")
                .processDefinitionId("holiday-candidate:1:4")
                .taskCandidateUser("李四") # 注意
                .list();
        for (Task task : list) {
            System.out.println("task.getId() = " + task.getId());
            System.out.println("task.getName() = " + task.getName());
        }
    }

4. 任务的拾取

  知道了我有可拾取的任务后,拾取任务。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
     * 拾取任务
     *    一个候选人拾取了这个任务之后其他的用户就没有办法拾取这个任务了
     *    所以如果一个用户拾取了任务之后又不想处理了,那么可以退还
     */
    @Test
    public void claimTaskCandidate(){
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        TaskService taskService = processEngine.getTaskService();
        Task task = taskService.createTaskQuery()
                //.processInstanceId("2501")
                .processDefinitionId("holiday-candidate:1:4")
                .taskCandidateUser("李四")
                .singleResult();
        if(task != null){
            // 拾取对应的任务
            taskService.claim(task.getId(),"李四");
            System.out.println("任务拾取成功");
        }
    }

5. 任务的归还

  拾取任务后不想操作那么就归还任务

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    /**
     * 退还任务
     *    一个候选人拾取了这个任务之后其他的用户就没有办法拾取这个任务了
     *    所以如果一个用户拾取了任务之后又不想处理了,那么可以退还
     */
    @Test
    public void unclaimTaskCandidate(){
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        TaskService taskService = processEngine.getTaskService();
        Task task = taskService.createTaskQuery()
                //.processInstanceId("2501")
                .processDefinitionId("holiday-candidate:1:4")
                .taskAssignee("张三")
                .singleResult();
        if(task != null){
            // 拾取对应的任务
            taskService.unclaim(task.getId());
            System.out.println("归还拾取成功");
        }
    }

6. 任务的交接

  拾取任务后如果不想操作也不想归还可以直接交接给另外一个人来处理

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
   /**
     * 任务的交接
     *    如果我获取了任务,但是不想执行,那么我可以把这个任务交接给其他的用户
     */
    @Test
    public void taskCandidate(){
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        TaskService taskService = processEngine.getTaskService();
        Task task = taskService.createTaskQuery()
                //.processInstanceId("2501")
                .processDefinitionId("holiday-candidate:1:4")
                .taskAssignee("李四")
                .singleResult();
        if(task != null){
            // 任务的交接
            taskService.setAssignee(task.getId(),"王五");
            System.out.println("任务交接给了王五");
        }
    }

7. 任务的完成

  正常的任务处理

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
   /**
     * 完成任务
     */
    @Test
    public void completeTask(){
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        TaskService taskService = processEngine.getTaskService();
        Task task = taskService.createTaskQuery()
                //.processInstanceId("2501")
                .processDefinitionId("holiday-candidate:1:4")
                .taskAssignee("王五")
                .singleResult();
        if(task != null){
            // 完成任务
            taskService.complete(task.getId());
            System.out.println("完成Task");
        }
    }
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022/04/01 ,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【第十篇】Flowable中的候选人组
  当候选人很多的情况下,我们可以分组来处理。先创建组,然后把用户分配到这个组中。
用户4919348
2022/04/13
2.6K0
【第十篇】Flowable中的候选人组
2023最新版本Activiti7系列-身份服务
  在流程定义中在任务结点的 assignee 固定设置任务负责人,在流程定义时将参与者固定设置在.bpmn 文件中,如果临时任务负责人变更则需要修改流程定义,系统可扩展性差。针对这种情况可以给任务设置多个候选人或者候选人组,可以从候选人中选择参与者来完成任务。
用户4919348
2023/07/24
3300
2023最新版本Activiti7系列-身份服务
2021全网最全Activiti7教程04(Activiti7进阶篇-欢迎收藏)
  本篇重点给大家介绍下Activiti中的高级内容,比如流程实例,个人任务,流程变量,组任务及网关。
用户4919348
2021/06/17
3.7K1
2021全网最全Activiti7教程04(Activiti7进阶篇-欢迎收藏)
搭建单体SpringBoot项目 集成Activiti7 进阶
一个流程实例包括了所有的运行节点。我们可以利用这个对象来了解当前流程实例的进度等信息。
郭顺发
2023/07/17
6940
搭建单体SpringBoot项目 集成Activiti7 进阶
【第十一篇】Flowable中的各种网关
  排他网关(exclusive gateway)(也叫异或网关 XOR gateway,或者更专业的,基于数据的排他网关 exclusive data-based gateway),用于对流程中的决策建模。当执行到达这个网关时,会按照所有出口顺序流定义的顺序对它们进行计算。选择第一个条件计算为true的顺序流(当没有设置条件时,认为顺序流为true)继续流程。
用户4919348
2022/04/13
3.2K0
【第十一篇】Flowable中的各种网关
【第六篇】Flowable核心流程操作的本质
业务流程定义数据表。此表和ACT_RE_DEPLOYMENT是多对一的关系,即,一个部署的bar包里可能包含多个流程定义文件,每个流程定义文件都会有一条记录在ACT_REPROCDEF表内,每个流程定义的数据,都会对于ACT_GE_BYTEARRAY表内的一个资源文件和PNG图片文件。和ACT_GE_BYTEARRAY的关联是通过程序用ACT_GE_BYTEARRAY.NAME与ACT_RE_PROCDEF.NAME_完成的
用户4919348
2022/04/13
1.5K0
【第六篇】Flowable核心流程操作的本质
【第八篇】Flowable之流程变量
  流程实例按步骤执行时,需要使用一些数据。在Flowable中,这些数据称作变量(variable),并会存储在数据库中。变量可以用在表达式中(例如在排他网关中用于选择正确的出口路径),也可以在Java服务任务(service task)中用于调用外部服务(例如为服务调用提供输入或结果存储),等等。
用户4919348
2022/04/13
3.7K0
【第八篇】Flowable之流程变量
Activiti7 组任务
需求:在流程定义中在任务节点的assignee固定设置任务负责人,这种情况不是很好,如果有天任务负责人请假了,你想请假,等着吧..没人审批,针对这种情况,可以给任务设置多个候选人,可以从候选中选择参与者来完成任务
彼岸舞
2020/09/30
1K0
activiti6.0工作流引擎深度解析_自定义工作流引擎
工作流(Workflow),就是通过计算机对业务流程自动化执行管理。它主要解决的是“使在多个参与者之间按照某种预定义的规则自动进行传递文档、信息或任务的过程,从而实现某个预期的业务目标,或者促使此目标的实现”。
全栈程序员站长
2022/09/27
3K0
activiti6.0工作流引擎深度解析_自定义工作流引擎
七万字掌握热门工作流引擎框架Activiti7,附带视频讲解哦
  工作流(Workflow),就是通过计算机对业务流程自动化执行管理。它主要解决的是“使在多个参与者之间按照某种预定义的规则自动进行传递文档、信息或任务的过程,从而实现某个预期的业务目标,或者促使此目标的实现”。文章中涉及的相关软件资料扫左侧哦。
用户4919348
2022/01/07
1.5K0
七万字掌握热门工作流引擎框架Activiti7,附带视频讲解哦
第七节:Activiti6.0——Task的变量使用
介绍: 在任务的执行过程中,会有很多的变量参数(比如请假任务需要天数等)。变量从作用域来分:本地变量和全局变量。 从类型区分:基本变量、自定义变量和BPMN自带变量。
凡人飞
2020/09/21
2.1K0
第七节:Activiti6.0——Task的变量使用
项目实践工作流之Activiti学习(三十六)
用户1289394
2023/11/18
1270
项目实践工作流之Activiti学习(三十六)
【第七篇】Camunda系列-身份服务
  在流程定义中在任务结点的 assignee 固定设置任务负责人,在流程定义时将参与者固定设置在.bpmn 文件中,如果临时任务负责人变更则需要修改流程定义,系统可扩展性差。针对这种情况可以给任务设置多个候选人或者候选人组,可以从候选人中选择参与者来完成任务。
用户4919348
2022/10/28
2.8K0
【第七篇】Camunda系列-身份服务
第十二节:Activiti6.0——四种边界事件:定时器、错误、信号、补偿
边界事件:边界事件属于一种特殊的中间事件。区别是: 中间事件 可以单独作为流程元素存在于流程中,而 边界事件 必须附属于某个流程元素(如任务、子流程等)。边界事件是Catching事件。
凡人飞
2020/09/21
3.9K0
第十二节:Activiti6.0——四种边界事件:定时器、错误、信号、补偿
Activiti7的api查询(实时更新)
学习activiti,就是学习使用java代码操作25张表; java代码中我们调用Activiti的工具类;
一写代码就开心
2022/05/27
3K0
Activiti7的api查询(实时更新)
工作流引擎之activiti入门
在解释activiti之前我们看一下什么是工作流。 工作流(Workflow),就是“业务过程的部分或整体在计算机应用环境下的自动化”,它主要解决的是“使在多个参与者之间按照某种预定义的规则传递文档、信息或任务的过程自动进行,从而实现某个预期的业务目标,或者促使此目标的实现”。 我的理解是,工作流将一套大的业务逻辑分解成业务逻辑段, 并统一控制这些业务逻辑段的执行条件,执行顺序以及相互通信。 实现业务逻辑的分解和解耦。 Activiti是一个开源的工作流引擎,它实现了BPMN 2.0规范,可以发布设计好的流程定义,并通过api进行流程调度。 BPMN即业务流程建模与标注(Business Process Model and Notation,BPMN) ,描述流程的基本符号,包括这些图元如何组合成一个业务流程图(Business Process Diagram)。
lyb-geek
2018/07/26
9.4K0
工作流引擎之activiti入门
activiti(十)组任务Group
部署流程 开启流程 查看当前人的组任务 组任务拾取个人任务 完成任务(组任务最后也要个人来完成)
周杰伦本人
2023/10/12
2940
activiti(十)组任务Group
java工作流activity_activity 工作流学习(一)
什么是流程实例?根据一个流程定义具体的一次执行过程就是一个流程实例,一个流程定义对应多个流程实例(一对多关系)
全栈程序员站长
2022/06/27
8780
java工作流activity_activity 工作流学习(一)
第一节:实现Activiti6.0的第一个demo
lib:存放需要使用的jar包,可从下面链接直接下载解压,记得加入将包加入项目中,如下: jar包提取码:c0zq
凡人飞
2020/09/20
7660
项目实践工作流之Activiti学习(三十七)
也可以通过 setAssignee 方法将任务委托给其它用户负责,注意被委托的用户可以不是候选人(建议不要这样使用)
用户1289394
2023/11/19
1910
项目实践工作流之Activiti学习(三十七)
相关推荐
【第十篇】Flowable中的候选人组
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验