工作流实现审批人灵活配置
工作流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,有不详尽完善之处还望大家海涵…
工作流实现审批人灵活配置相关推荐
- silverlight 无法发布 如何灵活配置IP
灵活配置IP可以有一个工具的 我为了比赛花了 两天工具做了一个配置Silverlight IP的小工具 可以参考 http://download.csdn.net/source/2714688
- 前端快闪三:多环境灵活配置react
大前端快闪:package.json文件知多少? 大前端快闪二:react开发模式 一键启动多个服务 你已经使用Create React App[1] 脚手架搭建了React应用,现在该部署了. 一般 ...
- 【华为云技术分享】云小课 | 灵活配置权限,满足存储安全(OBS权限管理介绍上篇)
很多朋友有这样的顾虑:将资源存储在OBS之后,我的数据足够安全吗?能够灵活配置权限吗? 比如,甲只想把存储在OBS中的资源留给自己访问:乙想把资源分享给自己的某个朋友:丙想把资源共享的权限控制在固定时 ...
- uniapp开发:瀑布流 灵活配置 简单易用 兼容vue2vue3小程序、H5、app等多端
概要 支持的平台 使用方式 属性说明 事件说明 组件方法 refresh的使用示例 隐藏单项图片示例 完整示例 温馨提示 关注我,不迷路 概要 custom-waterfalls-flow是一个瀑布流 ...
- Spring数据源的灵活配置巧应用
Spring数据源的灵活配置巧应用 环境: Java SE 1.5 Spring-2.5.1 mysql-connector-java-5.1.5.zip Mysql 5.x 为了从数据库中取得数 ...
- 微信支付宝H5收款码扫码转账个人通道,灵活配置,仿原生接口,带备注可回调成功率9成以上
微信支付宝收款码转账H5免签高并发出码带备注可回调成功率99.9%支持重复支付多种轮询规则提高存活率 本收款系统,可使用支付宝个人码 企业支付宝收款码 微信个人码收款,可以完成即时到账 ...
- 【瑞萨MCU】e2 studio 灵活配置软件包 FSP 安装
瑞萨电子灵活配置软件包 (FSP) 是一款增强型软件包,旨在为使用瑞萨电子 RA 系列 ARM 微控制器的嵌入式系统设计提供简单易用且可扩展的高质量软件. 在全新 Arm® TrustZone® 和其 ...
- Spring boot 集成工作流flowable去掉xml配置
工作流Flowable和Spring集成时,有一个xml是用来配置ProcessEngine的信息,xml的内容如下所示: <?xml version="1.0" encod ...
- 参数(条件表)灵活配置GS01/GS02/GS03
在开发中,某段代码运行可能需要满足某个条件,通常解决办法有两种: 一种是在代码中写死限制条件,此种方式当限制条件变化时需要修改代码: 另一种办法则是自定义数据表,将限制条件值保存在表中,当程序运行时, ...
最新文章
- 横州中学理科2021高考成绩查询,2021年横县高考状元名单资料,今年横县高考状元多少分...
- dell存储Linux配置,Dell MD3200远程存储的特殊配置
- 升技主板RAID磁盘阵列图解
- 关于测试用例的一些思考
- 关于程序组织和组织技巧的学习
- C++ 关于 main 函数的几点说明
- 0基础学python做什么工作好-写给0基础小白:Python能干什么?就业前景好不好?怎么开始学?...
- docker可用容量 查看_查看docker容器占用内存
- hive如何获取当前时间
- (转载)神级代码编辑器 Sublime Text 全程指南
- 星际争霸2-数据编辑器-菜鸟入门
- 【对称日】今天朋友圈对称日刷屏了,也来凑个热闹,用代码实力打脸
- cad线性标注样式修改在哪里_CAD标注样式如何设置?
- LeetCode每日一题打卡组队监督!刷题群!
- VS2005的include,library,src等路径自动设置
- 克劳特法matlab,经验模式分解matlab
- 休学证明格式【休学申请书标准通用】
- Halcon图像采集助手提示找不到指定DLL文件
- 《用python的话,一定要试着使用的函数》第九集。(CHW转HWC或任意格式,rgb转gbr或任意格式)
- Layer——弹出层