工作流Activiti实现审批人灵活配置:

我主要采用的是使用监听器进行审批人员的添加,由于本次工程中使用了四种审批模式:
1. 组任务
2. 会签串行
3. 会签并行
4. 个人任务
其中会签串行和并行都是采用多实例方式,会签并行是相当于流程运行到这个任务,Activiti会自动创建多个实例任务,互不影响,类似物理学中电路的并行;而会签串行是流程运行到这个任务,Activiti会创建一个任务,等待这个任务完成,在创建一个新的任务,有多少审批人或者条件满足时,串行任务完成结束。
针对会签任务,其实就是多实例任务,由于在任务创建之前就需要确定任务数,与配置的审批人数相对应,我就选择在用户任务之前的线上加上监听器,将线的ID设置为下一任务节点的审批角色名称,这样就可以实现审批人灵活配置。
具体监听器代码如下:

import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.delegate.DelegateExecution;
import org.activiti.engine.delegate.ExecutionListener;
import org.activiti.engine.impl.persistence.entity.ExecutionEntity;
import org.activiti.engine.impl.pvm.PvmProcessElement;/*** 任务监听器* @author MuYi* @date 2017年11月15日下午6:51:43*/
public class ParallelTaskListener implements ExecutionListener {private static final long serialVersionUID = 1L;// 获取流程引擎ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();@Overridepublic void notify(DelegateExecution execution) throws Exception {// 获取下一任务节点的角色名ExecutionEntity s=(ExecutionEntity)execution;PvmProcessElement ss=s.getEventSource();String nextRoleName =ss.getId();String[] str = execution.getProcessBusinessKey().split("\\.");// 得到流程信息String flowEnglishName = str[0];String flowId = "";String flowIdsql = " select flowId from t_flow where flowEnglishName = '" + flowEnglishName + "'";ResultSet rst = DBHelper.select(flowIdsql);while (rst.next()) {flowId = rst.getString("flowId");}// 获得部门IDString flowDataId = str[1];String requestIdSql ="select requestId from "+flowEnglishName+" where id ='"+flowDataId+"'";String requestId = "";ResultSet rs = DBHelper.select(requestIdSql);while (rs.next()) {requestId = rs.getString("requestId");}String deptId = "";String deptIdSql ="select departmentId from t_sys_user where id = '"+requestId+"'";ResultSet rs1 = DBHelper.select(deptIdSql);while (rs1.next()) {deptId = rs1.getString("departmentId");}// 获取下一任务节点的人员IDString getUserSql ="select userId from t_sys_user_role where roleId =(select id from t_sys_role where roleName = '"+nextRoleName +"'and id in(select roleId from t_flow_of_roles where flowRolesConfigId =(select flowRolesConfigId from t_flow_config where deptId = '"+deptId+"' and flowId ='"+ flowId+"')))order by sort";List<String> assigneeList = new ArrayList<String>();try {ResultSet rs3 = DBHelper.select(getUserSql);while (rs3.next()) {assigneeList.add(rs3.getString("userId"));}} catch (Exception e) {e.printStackTrace();}// 作为流程参数传入流程//多实例任务所需参数execution.setVariable("assigneeList", assigneeList);execution.setVariable("assigneeListSize", assigneeList.size());execution.setVariable("num", 0);//组任务所需参数execution.setVariable("users", assigneeList);//个人任务参数execution.setVariable("user", requestId);}}

解释几点:

  • 其中DBHelper类是我写的数据库连接帮助类,可以去我的博客里面找C3P0那篇文章查看详细信息,
  • assigneeList 就是并行多实例任务的审批人集合
  • 幷签多实例具体bpmn图配置
  • 组任务具体bpmn图配置
  • 个人任务bpmn图配置

由于是初次了解activiti,有不详尽完善之处还望大家海涵…

工作流实现审批人灵活配置相关推荐

  1. silverlight 无法发布 如何灵活配置IP

    灵活配置IP可以有一个工具的 我为了比赛花了 两天工具做了一个配置Silverlight IP的小工具 可以参考 http://download.csdn.net/source/2714688

  2. 前端快闪三:多环境灵活配置react

    大前端快闪:package.json文件知多少? 大前端快闪二:react开发模式 一键启动多个服务 你已经使用Create React App[1] 脚手架搭建了React应用,现在该部署了. 一般 ...

  3. 【华为云技术分享】云小课 | 灵活配置权限,满足存储安全(OBS权限管理介绍上篇)

    很多朋友有这样的顾虑:将资源存储在OBS之后,我的数据足够安全吗?能够灵活配置权限吗? 比如,甲只想把存储在OBS中的资源留给自己访问:乙想把资源分享给自己的某个朋友:丙想把资源共享的权限控制在固定时 ...

  4. uniapp开发:瀑布流 灵活配置 简单易用 兼容vue2vue3小程序、H5、app等多端

    概要 支持的平台 使用方式 属性说明 事件说明 组件方法 refresh的使用示例 隐藏单项图片示例 完整示例 温馨提示 关注我,不迷路 概要 custom-waterfalls-flow是一个瀑布流 ...

  5. Spring数据源的灵活配置巧应用

    Spring数据源的灵活配置巧应用   环境: Java SE 1.5 Spring-2.5.1 mysql-connector-java-5.1.5.zip Mysql 5.x 为了从数据库中取得数 ...

  6. 微信支付宝H5收款码扫码转账个人通道,灵活配置,仿原生接口,带备注可回调成功率9成以上

    微信支付宝收款码转账H5免签高并发出码带备注可回调成功率99.9%支持重复支付多种轮询规则提高存活率         本收款系统,可使用支付宝个人码 企业支付宝收款码 微信个人码收款,可以完成即时到账 ...

  7. 【瑞萨MCU】e2 studio 灵活配置软件包 FSP 安装

    瑞萨电子灵活配置软件包 (FSP) 是一款增强型软件包,旨在为使用瑞萨电子 RA 系列 ARM 微控制器的嵌入式系统设计提供简单易用且可扩展的高质量软件. 在全新 Arm® TrustZone® 和其 ...

  8. Spring boot 集成工作流flowable去掉xml配置

    工作流Flowable和Spring集成时,有一个xml是用来配置ProcessEngine的信息,xml的内容如下所示: <?xml version="1.0" encod ...

  9. 参数(条件表)灵活配置GS01/GS02/GS03

    在开发中,某段代码运行可能需要满足某个条件,通常解决办法有两种: 一种是在代码中写死限制条件,此种方式当限制条件变化时需要修改代码: 另一种办法则是自定义数据表,将限制条件值保存在表中,当程序运行时, ...

最新文章

  1. 横州中学理科2021高考成绩查询,2021年横县高考状元名单资料,今年横县高考状元多少分...
  2. dell存储Linux配置,Dell MD3200远程存储的特殊配置
  3. 升技主板RAID磁盘阵列图解
  4. 关于测试用例的一些思考
  5. 关于程序组织和组织技巧的学习
  6. C++ 关于 main 函数的几点说明
  7. 0基础学python做什么工作好-写给0基础小白:Python能干什么?就业前景好不好?怎么开始学?...
  8. docker可用容量 查看_查看docker容器占用内存
  9. hive如何获取当前时间
  10. (转载)神级代码编辑器 Sublime Text 全程指南
  11. 星际争霸2-数据编辑器-菜鸟入门
  12. 【对称日】今天朋友圈对称日刷屏了,也来凑个热闹,用代码实力打脸
  13. cad线性标注样式修改在哪里_CAD标注样式如何设置?
  14. LeetCode每日一题打卡组队监督!刷题群!
  15. VS2005的include,library,src等路径自动设置
  16. 克劳特法matlab,经验模式分解matlab
  17. 休学证明格式【休学申请书标准通用】
  18. Halcon图像采集助手提示找不到指定DLL文件
  19. 《用python的话,一定要试着使用的函数》第九集。(CHW转HWC或任意格式,rgb转gbr或任意格式)
  20. Layer——弹出层

热门文章

  1. c语言如何增加编译宏,C中的预编译宏定义
  2. Android 关闭硬件加速功能
  3. 《炬丰科技-半导体工艺》半导体晶圆键合
  4. Python之父,26岁大学毕业,35岁发明Python,却差点因为沉迷编程被退学!
  5. 技术的本质是什么,它是如何进化的?
  6. 马丁策略-EA 外汇市场交易的引导者
  7. 在报复这件事上,为什么那么多人搂不住火?
  8. 时之歌 服务器维护,时之歌Project
  9. 27K测试老鸟6年经验的面试心得,四种公司、四种问题…
  10. 2023百度网盘免费扩容方法