flowable工作流设置审批人为指定角色+部门的实现方式

本文主要是介绍flowable工作流设置审批人为指定角色+部门的实现方式,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、绘制流程图页面配置

 

1、指定固定审批角色+组织的实现

如上图红框部分,需要修改此处为需求对应。比如此时红框不支持指定某个部门下的指定角色这种组合判断的审批人。则需要修改页面变成选完角色同时也选择上部门统一生成一个group标识。

修改完后,生成类似 ROLE001DEPT130000 的group标识。

在xml中设置 CandidateGroup时,设置为固定值就可以。

2、指定审批人为发起人所在部门的指定角色

此时,用方式1显然不支持,因为发起人是变化的,dept也会跟着变,只能在发起审批流程时读取到传入发起人信息后进行设置。

在xml中设置 CandidateGroup时,需要指定为可变参数,类似下图这种

 设置这个参数有几种方式:

2.1直接基于框架进行表单设置

 

 2.2 在后端代码中发起流程这个步骤时,通过setVariable()的方式设置deptId这个参数

二、流程查询时找到对应审批人

我们设置好对应审批人后,还需要在该查到的时候查到,比如 有一个部门d1,里面有 张三-员工 李四-部门领导 两个人。张三发起了一个审批,审批人设置的是本部门领导角色。此时,在李四登录时应该在待办列表里看到这条审批。

查询这块包含了发起中所有情况,因为查的时候要遵循宁可把可能的群组都查,也不能漏掉。

直接上代码吧:

// 定义的一些标识
public class TaskConstants {/*** 流程发起人*/public static final String PROCESS_INITIATOR = "initiator";/*** 角色候选组前缀*/public static final String ROLE_GROUP_PREFIX = "ROLE";/*** 部门候选组前缀*/public static final String DEPT_GROUP_PREFIX = "DEPT";/*** 分割符*/public static final String SPLIT = "-";
}
    /*** 获取用户组信息,包含了当前所有组合:role、dept、role+dept作为群组** @return candidateGroup*/public static List<String> getCandidateGroup() {List<String> list = new ArrayList<>();
// 获取当前登录人信息,不同框架有不同的获取方法,适当修改LoginUser user = LoginHelper.getLoginUser();if (ObjectUtil.isNotNull(user)) {if (ObjectUtil.isNotEmpty(user.getRoles())) {user.getRoles().forEach(role -> {list.add(TaskConstants.ROLE_GROUP_PREFIX + role.getRoleId());list.add(TaskConstants.ROLE_GROUP_PREFIX + role.getRoleId() + TaskConstants.SPLIT+ TaskConstants.DEPT_GROUP_PREFIX + user.getDeptId());});}if (ObjectUtil.isNotNull(user.getDeptId())) {list.add(TaskConstants.DEPT_GROUP_PREFIX + user.getDeptId());}}return list;}
// 查询待办事项列表        
TaskQuery taskQuery = taskService.createTaskQuery().active().includeProcessVariables().taskCandidateOrAssigned(TaskUtils.getUserId()).taskCandidateGroupIn(TaskUtils.getCandidateGroup()).orderByTaskCreateTime().desc();

这篇关于flowable工作流设置审批人为指定角色+部门的实现方式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/991975

相关文章

Linux线程之线程的创建、属性、回收、退出、取消方式

《Linux线程之线程的创建、属性、回收、退出、取消方式》文章总结了线程管理核心知识:线程号唯一、创建方式、属性设置(如分离状态与栈大小)、回收机制(join/detach)、退出方法(返回/pthr... 目录1. 线程号2. 线程的创建3. 线程属性4. 线程的回收5. 线程的退出6. 线程的取消7.

golang程序打包成脚本部署到Linux系统方式

《golang程序打包成脚本部署到Linux系统方式》Golang程序通过本地编译(设置GOOS为linux生成无后缀二进制文件),上传至Linux服务器后赋权执行,使用nohup命令实现后台运行,完... 目录本地编译golang程序上传Golang二进制文件到linux服务器总结本地编译Golang程序

Linux下删除乱码文件和目录的实现方式

《Linux下删除乱码文件和目录的实现方式》:本文主要介绍Linux下删除乱码文件和目录的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux下删除乱码文件和目录方法1方法2总结Linux下删除乱码文件和目录方法1使用ls -i命令找到文件或目录

SpringBoot+EasyExcel实现自定义复杂样式导入导出

《SpringBoot+EasyExcel实现自定义复杂样式导入导出》这篇文章主要为大家详细介绍了SpringBoot如何结果EasyExcel实现自定义复杂样式导入导出功能,文中的示例代码讲解详细,... 目录安装处理自定义导出复杂场景1、列不固定,动态列2、动态下拉3、自定义锁定行/列,添加密码4、合并

mybatis执行insert返回id实现详解

《mybatis执行insert返回id实现详解》MyBatis插入操作默认返回受影响行数,需通过useGeneratedKeys+keyProperty或selectKey获取主键ID,确保主键为自... 目录 两种方式获取自增 ID:1. ​​useGeneratedKeys+keyProperty(推

Spring Boot集成Druid实现数据源管理与监控的详细步骤

《SpringBoot集成Druid实现数据源管理与监控的详细步骤》本文介绍如何在SpringBoot项目中集成Druid数据库连接池,包括环境搭建、Maven依赖配置、SpringBoot配置文件... 目录1. 引言1.1 环境准备1.2 Druid介绍2. 配置Druid连接池3. 查看Druid监控

Linux在线解压jar包的实现方式

《Linux在线解压jar包的实现方式》:本文主要介绍Linux在线解压jar包的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux在线解压jar包解压 jar包的步骤总结Linux在线解压jar包在 Centos 中解压 jar 包可以使用 u

Jenkins分布式集群配置方式

《Jenkins分布式集群配置方式》:本文主要介绍Jenkins分布式集群配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1.安装jenkins2.配置集群总结Jenkins是一个开源项目,它提供了一个容易使用的持续集成系统,并且提供了大量的plugin满

c++ 类成员变量默认初始值的实现

《c++类成员变量默认初始值的实现》本文主要介绍了c++类成员变量默认初始值,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录C++类成员变量初始化c++类的变量的初始化在C++中,如果使用类成员变量时未给定其初始值,那么它将被

Java通过驱动包(jar包)连接MySQL数据库的步骤总结及验证方式

《Java通过驱动包(jar包)连接MySQL数据库的步骤总结及验证方式》本文详细介绍如何使用Java通过JDBC连接MySQL数据库,包括下载驱动、配置Eclipse环境、检测数据库连接等关键步骤,... 目录一、下载驱动包二、放jar包三、检测数据库连接JavaJava 如何使用 JDBC 连接 mys