SpringBoot整合Activiti7——代理/候选人/候选组(四)

news/2024/5/18 23:25:06 标签: spring boot, java, 流程图

文章目录

  • 一、代理人
  • 二、候选人
  • 三、候选组
  • 四、组任务办理流程
  • 五、UEL表达式
    • UEL-value
    • UEL-method
    • UEL method结合value


一、代理人

一个用户任务只允许有一个代理人。为一个任务分配代理人后act_ru_task表的ASSIGNEE_字段会被设置为响应的值。

审批任务设置assignee变量,表示是该任务的负责人:

<userTask id="sid-9253B2C0-D7CF-49C9-BE00-3B68D87413D4" name="审批" activiti:assignee="${assignee}"></userTask>

启动流程分配代理人:

java">// 启动流程分配代理人
Map<String,Object> map = new HashMap<>();
map.put("assignee", "zhangsan");
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("leave", map);

查询任务指定代理人:

java">// 可通过代理人查询任务列表
List<Task> list = taskService.createTaskQuery().taskAssignee("zhangsan").list();

二、候选人

一个任务可以设置多个候选人,候选人在业务上指的是有权对该任务进行操作的群体。
某个候选人签收后,其他候选人就看不到该任务。

可以使用activiti:candiateUsers=”用户 1,用户 2,用户 3”的这种方式来实现设置一组候选人

直接赋值多个候选人示例:

<userTask activiti:candidateUsers="zhangsan,lisi,wangwu" activiti:exclusive="true" id="_3" name="审批"/>

动态设置候选人变量 candidateUsers

java"><userTask id="sid-31845D76-A308-4442-AE19-4AA4238DB39A" name="审批" activiti:candidateUsers="${candidateUsers}"></userTask>

这里的candidateUsers是一个流程变量,以list的形式存放了候选人列表。

注意任务和候选人的关系存储在act_ru_identitylink表中

启动流程分配候选人:

java">// 启动流程分配候选人
List<String> candidateUsers = new ArrayList<>();
candidateUsers.add("zhangsan");
candidateUsers.add("lisi");
Map<String,Object> variableMap = new HashMap<>();
variableMap.put("candidateUsers", candidateUsers);
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("leave", variableMap);

三、候选组

用来把一个群体的人指定为一个任务的权限人,对应的是activiti中的用户组,分配一个用户组id到某个任务上,可以指定整个组的人为该任务的候选人。
属于该候选组的用户就可以签收然后办理该任务。

如果候选组中存在多个用户,那么只有其中的某个用户签收了任务,那么其它用户就看不到该任务。
只要任务还未被签收,候选组内的任意用户都可以签收该任务;一旦任务被签收,候选组内的其他用户就无法查看与签收该任务咯。

可以使用activiti:candidateGroups=”用户组1,用户组2,用户组3”的这种方式来实现设置一组候选人

动态设置候选组变量candidateGroup

 <userTask id="juel-candidateGroup" name="审批" activiti:candidateGroups="${candidateGroup}"></userTask>

这里的candidateGroup也是一个流程变量,其中存放了用户组id的lsit集合。

注意任务和候选组的关系存储在act_ru_identitylink表中

启动流程分配候选组:

java">// 启动流程分配候选组
Map<String,Object> map = new HashMap<>();
List<String> groupList = new ArrayList<>();
groupList.add("项目经理");
groupList.add("测试");
map.put("candidateGroup",groupList);
runtimeService.startProcessInstanceByKey("leave", map);

四、组任务办理流程

办理流程:

  1. 指定候选人,查询该候选人当前的待办任务
  2. 候选人不能立即办理任务,要先拾取
  3. 候选人拾取,将候选人的组任务,变成个人任务,原来候选人就变成了该任务的负责人,其他候选人就看不到该任务
  4. 候选人完成任务
  5. 如果个人不想办理该组任务,可以归还组任务,归还后该用户不再是该任务的负责人
    1. 查询该候选人个人任务
    2. taskService.setAssignee(taskId, null); // 设置为null,归还组任务
  6. 也可以将任务委托给其他人(委托的用户可以不是候选人)
    1. 查询该候选人个人任务
    2. taskService.setAssignee(taskId, “其他人”);

五、UEL表达式

表达式支持解析基础类型、 bean、 list、 array 和 map,也可作为条件判断。
如下:${order.price > 100 && order.price < 250}

UEL-value

  • ${applyUserId}:applyUserId这个变量是 activiti 的一个流程变量
java">Map<String, Object> map = new HashMap<>();
map.put("applyUserId", "zhangsan");
  • ${user.applyUserId}:表示通过调用 user 的 getter 方法获取 applyUserId 值
java">User user = new User();
Map<String, Object> map = new HashMap<>();
map.put("user", user);

UEL-method

  • ${User.getApplyUserId()}:userBean 是 spring 容器中的一个 bean,调用该 bean 的 getApplyUserId()方法

UEL method结合value

  • ${IUserService.findManagerForEmployee(emp)}:IUserService是 spring 容器的一个 bean,findManagerForEmployee 是该 bean 的一个方法,emp 是 activiti流程变量, emp 作为参数传到 IUserService.findManagerForEmployee 方法中

http://www.niftyadmin.cn/n/5035274.html

相关文章

Python算法练习 9.18

leetcode 1657 确定两个字符串是否相似 如果可以使用以下操作从一个字符串得到另一个字符串&#xff0c;则认为两个字符串 接近 &#xff1a; 操作 1&#xff1a;交换任意两个 现有 字符。 例如&#xff0c;abcde -> aecdb操作 2&#xff1a;将一个 现有 字符的每次出现转…

Python 人工智能编程指南:基础、库和工具大全解析

Python 已成为人工智能 (AI) 和机器学习领域的通用语言。其广泛的应用、强大的库生态系统和用户友好的语法使其成为人工智能爱好者、数据科学家和研究人员的理想选择。在这份综合指南中&#xff0c;我们将探讨用于 AI 编程的 Python 基础知识&#xff0c;深入研究关键库&#x…

前端开发工作中可能会遇到的问题及解决方法

一、uni-app小程序中xxx代码依赖分析忽略二、uni-app弹窗列表滚动, 弹框下面的内容也跟随滚动三、uni-app小程序正常自定义组件不生效 四、uni-app popup 弹出层底部空隙问题 五、uni-app小程序自定义导航栏后iOS页面可上下滑动问题解决方案 六. uni-app中的分享二维码以及…

​ 生产者消费者问题(条件变量 互斥锁)

本篇文章对生产者消费者&#xff08;模型&#xff09;问题进行了详解。其中给出了基于阻塞队列的生产者消费者模型demo代码和对涉及到的条件变量与互斥锁的操作也进行了详细解释。解释了条件变量等待时&#xff0c;为什么还需要一把锁的问题。对生产者消费者&#xff08;模型&a…

笔记本开启WiFi

笔记本开启WiFi 为了节省流量&#xff1a;笔记本开启WiFi 条件 支持热点的电脑&#xff1b;我的是华硕飞行堡垒7。 注意事项 笔记本连接公司网络&#xff0c;公司网络通常都在监管下的&#xff0c;手机连接wifi后&#xff0c;刷抖音、购物网站&#xff0c;公司后台会捕获你…

让Pegasus天马座开发板吃上STM8S标准库

WeCanStudio官方仓库的示例工程,只提供基于STM8S003寄存器方式来开发Pegasus天马座开发板。在此,我将基于官方的工程示例&#xff0c;将STM8S标准库移植到工程中。 先上图&#xff0c;看运行结果: main.c文件 #include "config.h" #include "delay.h"#de…

AI究竟能提升多少效率?哈佛已揭秘量化结果

在工作中使用AI可以带来工作效率的显着的改善。使用AI的被测试者比没有使用AI的被测试者平均多完成了 12.2% 的任务&#xff0c;完成任务的速度提高了 25.1%&#xff0c;并且产生的结果质量提高了 40%。大型语言模型&#xff08;LLM&#xff09;的公开发布引发了人们对人工智能…

docker中安装redis详解

docker中安装redis详解 1、拉取redis镜像 以redis 6.2.7版本为例 docker pull redis:6.2.72、运行redis(简单但无持久化) docker run -d -p 6379:6379 redis:6.2.73、修改redis的配置文件 先复制一份宿主机上的redis配置文件 到/app/redis/redis.conf 注释掉&#xff1a;bind…