流程管理

本文档详细介绍了Activiti工作流管理系统,包括基本概念、典型特点、核心服务及流程设计、执行、审批等方面。Activiti是一个轻量级的BPMN2.0流程引擎,支持Spring,提供流程建模工具,支持数据持久化。文章涵盖了流程的绘制、执行监听器、任务监听器、审批规则、动态审批人配置、自动审批、撤回管理、催办和督办管理等关键功能,以及与钉钉的集成。此外,还讨论了流程数据的管理策略和数据库表结构。
摘要由CSDN通过智能技术生成

文章目录

文章目录

基本概念

什么是工作流

  • 工作流:业务过程的部分或整体在计算机应用环境下的自动化
  • 工作流管理系统:工作流的定义和管理,按照在系统中预定义好的工作流规则进行工作流实例的执行。
  • 工作流管理系统的目标:管理工作流程以确保工作在正确的时间被期望的人员执行,在自动化进行的业务过程中插入人工的执行和干预。

什么是Activiti

Activiti是一个针对企业用户、开发人员、系统管理员的轻量级工作流业务管理平台,其核心是使用Java开发的快速、稳定的BPMN2.0流程引擎。LCP采用的是Activiti 6.0版本

典型特点

  • 数据持久化,底层使用MyBatis
  • 引擎Service接口
  • 原生支持Spring
  • 流程设计器
  • 分离运行时与历史数据

核心概念

英文 中文 描述
ProcessEngine 流程引擎 是Activiti工作的核心。负责生成流程运行时的各种实例及数据、监控和管理流程的运行。
ProcessDefinition 流程定义 基于bpmn2.0标准,使用Activiti提供流程建模工具,绘制的工作流程图。包含了流程属性,节点定义和判断分支
Activity/TaskDefine 活动/任务定义 流程定义中每一个任务节点的定义规范,包含名称,执行方式,表单变量等
ProcessInstance 流程实例 代表流程定义的执行实例,一个流程实例包括了所有的运行节点,表达了从刚开始到结束的最大流程分支。一个流程定义可以创建多个流程实例
Execution 流程执行 描述了流程执行的每一个节点。一个流程实例包含一个(串行)或多个(并行)流程执行
Task 流程任务 流程执行到某任务环节时生成的任务信息,一个流程执行可能生成零个或一个任务
Variable 流程变量 在流程执行或者任务执行的过程中传递的各类业务参数

核心服务

英文 中文 描述
RepositoryService 仓库服务类 管理流程定义。用于管理流程仓库,例如部署、删除、读取流程资源。仓库是指流程定义文档的两个文件:bpmn文件和流程图片。
IdentifyService 身份服务类 用户管理和查询用户、组之间的关系
RuntimeService 流程执行服务类 可以从这个服务类中获取很多关于流程执行相关的信息
TaskService 任务服务类 可以从这个类中获取任务的信息
FormService 表单服务类 用于读取流程、任务相关的表单数据
HistoryService 查询历史信息服务类 在一个流程执行完成后,这个对象为我们提供查询历史信息,例如流程实例、任务、活动、变量、附件。
ManagementService 引擎管理服务类 和具体业务无关,主要可以查询引擎配置、数据库、作业等

业界参考

Activiti v5.21用户手册

Activiti v5.22数据库结构参考

绘制流程

使用Activiti提供的流程建模工具Activiti Modeler,完成流程图的绘制
在这里插入图片描述

流程图例

流程定义

名称 描述 是否常用
流程定义 为流程定义提供绘制区域

任务图例

名称 描述 是否常用
人工任务 表示需要人工去执行的任务
服务任务 不需要任何的人工干涉的自动执行的任务
接收任务 当任务接收到信号的时开始执行的任务
手工任务 手动任务定义了 BPM引擎之外的任务。用来对那些需要人来完成的工作进行建模。手工任务就是一个自动执行的任务。且无法使用taskservice查询
脚本任务 通过指定脚本(script )和脚本格式(scriptFormat)定义一个脚本任务。多用于Java代码无法满足的场景,或者后期系统维护
邮件任务 系统自动发送邮件的任务
业务规则任务 调用Drool规则引擎来执行的任务
Camel任务 调用Camel规则引擎来执行的任务
Mule任务 调用Mule服务总线来执行的任务

事件图例

名称 描述 是否常用
开始事件(均为捕获事件)
开始事件(空) 必须要人工去启动一个流程
开始事件(触发器) 在给定的时间点创建流程实例
开始事件(信号) 使用具名信号启动流程实例
开始事件(消息) 使用具名消息启动流程实例
开始事件(错误) 使用建模业务异常启动流程实例
边界事件(均为捕获事件,需附属于某个流程元素)
边界出错事件 捕获子流程中抛出的错误,流程从本事件的外出连线继续执行
边界定时事件 当流程到达节点时,定时器启动,捕获定时器事件并从本事件的外出连线继续执行
边界信号事件 全局捕获同名信号,流程从本事件的外出连线继续执行
边界消息事件 全局捕获同名消息,流程从本事件的外出连线继续执行
边界取消事件 捕获子流程中的事务取消动作,并等待所有补偿事件完成后,流程从本事件的外出连线继续执行
边界补偿事件 获取子流程中因取消(或其它原因)触发的补偿事件,流程从本事件的外出连线继续执行
中间事件(可以单独作为流程元素存在于流程中的事件)
捕获中间定时器事件 定时器启动,捕获定时器事件并从本事件的外出连线继续执行
捕获中间信号事件 全局捕获同名信号,流程从本事件的外出连线继续执行
捕获中间消息事件 全局捕获同名消息,流程从本事件的外出连线继续执行
抛出中间信号事件 当流程到达该事件时,全局抛出命名信号,其他引用了同名信号的捕获事件将被触发
抛出无触发的中间事件 当流程到达该事件时,全局抛出无定义的事件。不会触发任何捕获。多用于改变流程状态
结束事件(均为抛出事件)
结束事件(空) 到达该节点时流程引擎自动结束该流程实例
结束事件(出错) 到达该节点时流程引擎自动结束该流程/子流程实例,并抛出出错事件
结束事件(取消) 到达该节点时流程引擎自动结束该流程/子流程实例,并抛出出错事件
结束事件(终止) 到达该节点时流程引擎自动结束该流程/子流程实例,并先后抛出取消事件与补偿事件

网关图例

名称 描述 是否常用
单一网关 将所有出口顺序流按照它们定义的顺序进行计算。第一个条件计算为true的顺序流(当没有设置条件时,认为顺序流定义为true)会被选择用于继续流程
并行网关 用于分支时,为每一个顺序流都创建一个并发分支;用于合并时,等待直到所有进入顺序流的分支都到达以后,流程通过本网关
包含网关 用于分支时,为每一个条件计算为true的顺序流都创建一个并发分支;用于合并时,等待直到所有进入顺序流的分支都到达以后,流程通过本网关
事件网关 为网关的每个外出顺序流连接一个中间捕获事件,基于事件判断选择第一个符合的进入后续的顺序流

结构图例

名称 描述 是否常用
子流程 一个包含了节点,网关,事件的流程,同时也是更大流程的一部份
子流程的事件 子流程所包含的各类事件
调用活动 在一个流程中调用另一个独立的流程

注释图例

名称 描述 是否常用
泳道
泳道 用于区分不同业务角色所承担的项目节点任务
区域 没有表头线的泳道
文档注释
文本关联 为界面各元素添加注释

连线图例

名称 描述 是否常用
顺序跳转线 不同活动节点执行的顺序
注释线 为元素关联文本说明

图例属性

公共属性

名称 描述 是否常用
ID 主键,全局唯一
名称 对象名称
事件监听器 在流程引擎执行的过程中触发某个事件时,事件监听器允许你去执行额外的java代码或者对指定的表达式求值。java代码需实现org.activiti.engine.delegate.event.ActivitiEventListener接口
执行监听器 在流程实例执行的过程中触发某个事件时,执行监听器允许你去执行额外的java代码或者对指定的表达式求值。java代码需实现org.activiti.engine.delegate.ExecutionListener接口
任务监听器 在流程任务执行的过程中触发某个事件时,任务监听器允许你去执行额外的java代码或者对指定的表达式求值。java代码需实现org.activiti.engine.delegate.TaskListener接口
表单URL 当前界面元素所关联的PC端页面地址
表单属性 为关联页面预定义的表单属性以及对应的值
异步 在单独的线程/事务去执行
排它性 确保同一个流程实例的异步任务在同一个独立的线程里执行

流程定义

名称 描述 是否常用
ID 流程Key值
名称
流程描述 流程的描述说明
流程作者 流程的创建者名称
流程版本字符 流程版本号
目标命名空间 生成xml描述文件的命名空间
执行监听器
事件监听器
信号定义 定义当前流程的信号类型
消息定义 定义当前流程的消息类型

开始事件(无)

名称 描述 是否常用
ID
名称
执行监听器
表单URL
表单属性

人工任务

经改造,人工任务默认为多实例模式,以支持各类审批方式。

名称 描述 是否常用
ID
名称
审批方式 判定节点审批通过或不通过的计算方式
审批方式变量 审批方式计算的边界值设定
审批规则 节点办理人的选择规则
加签 在当前节点临时添加审批人
转交 将当前任务转移给其它人办理
拒绝后通知审批人 当流程中途中止时,将相关信息通知已参与流程审批的所有人
允许撤回 当前节点审批人,可将流程从下一节点回收至本节点
表单URL
表单属性
到期的日期 当前级点的办理有效期
优先级 节点办理优先级
任务监听器
执行监听器

服务任务/接收任务

名称 描述
ID
名称
异步
排它性
执行监听器
多实例类型 重复执行当前环节。None:无,
Parallel:并行执行,Sequential:串行执行
基数(多实例) 重复执行的次数
集合(多实例) 循环的目标集合
元素的变量(多实例) 从循环取值使用的变量名
完成条件(多实例) 停止循环的条件计算表达式
作为补偿 配合补偿事件触发时执行的节点
类名(服务任务) 执行额外的java服务,java代码需实现
org.activiti.engine.delegate.JavaDelegate
org.activiti.engine.impl.delegate.ActivityBehavior接口
表达式(服务任务) 通过UEL方法表达式指定执行额外的java服务,java代码需实现
com.hand.hap.activiti.custom.IActivitiBean接口
代理的表达式(服务任务) 使用类表达式指定执行额外的java服务,java代码需实现
org.activiti.engine.delegate.JavaDelegate接口
类的字段(服务任务) 实现为代理类的属性注入数据
变量名结果(服务任务) 将服务执行结果分配给已经存在的或新的流程变量

网关

名称 描述 是否常用
ID
名称
异步
排它性
流程顺序 判断计算的先后顺序

结束事件(无)

名称 描述 是否常用
ID
名称
执行监听器

顺序跳转线

名称 描述 标例 是否常用
ID
名称
跳转条件 使用流程变量判断计算表达式 ${isFixation == ‘Y’}
执行监听器
默认跳线 默认选择的线路

执行监听器

节点每被创建一次生成一个执行监听器。当流程存在并行时,或一个节点存在多实例模式时,将同时生成多个执行监听器

监听事件

名称 描述 是否常用
start 进入节点时触发
end 离开节点时触发
take 连接下一个元素时触发

代码绑定

名称 描述 示例 是否常用
类名 执行额外的java服务,java代码需实现org.activiti.engine.delegate.ExecutionListener接口 com.fsl.ams.carrier.workflow.WorkFlowBaseListener
表达式 通过UEL方法表达式指定执行额外的java服务,java代码需实现com.hand.hap.activiti.custom.IActivitiBean接口,方法将传入org.activiti.engine.delegate.DelegateExecution类型参数 ${repairSubmitListener.submit(execution)}
代理的表达式 使用类表达式指定执行额外的java服务,java代码需实现org.activiti.engine.delegate.JavaDelegate接口 com.fsl.ams.carrier.workflow.WorkFlowBaseDelegate

属性注入

名称 描述 是否常用
字段名 注备执入注入的字段名称
字符串的值 静态单行字符串
字符串 静态多行字符串
表达式 从流程变量或者通过UEL方法表达式指定执行额外的java服务获取值

任务监听器

一个作业任务对应一个任务监听器。

监听事件

名称 描述 是否常用
create 创建任务时触发
assignment 分配任务时触发
complete 完成任务时触发
delete 删除任务时触发

代码绑定

名称 描述 示例 是否常用
类名 执行额外的java服务,java代码需实现org.activiti.engine.delegate.TaskListener接口 com.fsl.ams.carrier.workflow.WorkFlowBaseListener
表达式 通过UEL方法表达式指定执行额外的java服务,java代码需实现com.hand.hap.activiti.custom.IActivitiBean接口,方法将传入org.activiti.engine.delegate.DelegateTask类型参数 ${repairSubmitListener.submit(task)}
代理的表达式 使用类表达式指定执行额外的java服务,java代码需实现org.activiti.engine.delegate.JavaDelegate接口 com.fsl.ams.carrier.workflow.WorkFlowBaseDelegate

属性注入

名称 描述 是否常用
字段名 注备执入注入的字段名称
字符串的值 静态单行字符串
字符串 静态多行字符串
表达式 从流程变量或者通过UEL方法表达式指定执行额外的java服务获取值

表单属性

为关联页面预定义的表单属性以及对应的值,以表单变量的方式存储。

名称 描述 是否常用
Id 表单属性的识别码
表单名 表单属性的描述
类型 表单属性的数据类型,目前支持string、long、boolean、date、enum
表达式 过UEL方法表达式指定执行额外的java服务
变量 从流程变量中获取值
日期模式 当选择date类型时,显示的日期格式
Id(枚举) 当选择enum类型时,逐个设定的枚举项的Id
名称(枚举) 当选择enum类型时,逐个设定的枚举项的名称
必需 参数是否不可为空
可读 参数是否可读
可写 参数是否可写

人工任务

人工任务面板上的各类属性,大部份均以表单属性的方式存储

|表单变量Id|表单名|类型||
|:—|:—|:—|
|approveResult|approveResult|enum|审批按钮|
|APPROVAL_STRATEGY|参见审批方式|string|审批方式|
|WFL_NUM|实际值|string|审批方式变量|
|APPROVAL_CANDIDATE_RULE|参见审批规则|enum|审批规则|
|ACT_AUTO_CARBON_COPY|Y|string|拒绝后通知审批人|
|ACT_REVOKE_ENABLE_FLAG|Y|string|允许撤回|
|APPROVAL_ACTION| |enum|审批动作|
|枚举Id|枚举表单名|备注||
|ADD_SIGN_FLAG|Y|加签||
|DELEGATE_FLAG|Y|转交||

审批按钮

隶属于approveResult表单变量的枚举值

枚举Id 枚举表单名 备注
APPROVED 同意 默认内置,流程流转到下一节点
APPROVED 提交 功能和同意一致,可与APPROVED\_TO\_SUBMIT表单变量配合使用
REJECTED 拒绝 默认内置,流程直接结束
REJECTED 撤销 功能和拒绝一致,可与REJECTED\_TO\_CANCEL表单变量、hideCancelBtn流程变量配合使用名随意
REBUT_FIRST 驳回 驳回到第一节点
REBUT_SELECT 指定驳回 驳回到已审批节点(特定某节点/选择可驳回节点)
ADD_SIGN 加签 单独配置,将流程转交给指定人审批,通过后再自行审批
DELEGATE 转交 单独配置,将流程转交给指定人代替本人审批

审批按钮扩展

表单变量Id 表单名 类型 备注
APPROVED_TO_SUBMIT 任意指定 string 和提交按钮一起使用,将审批记录同步调整显示为提交
REJECTED_TO_CANCEL 任意指定 string 和撤销按钮一起使用,将审批记录同步调整显示为撤销
REBUT_TO 指定驳回的节点key string 和指定驳回一起使用,直接驳回到设置的节点
CANNOT_REBUTED 不允许被驳回 string 和指定驳回一起使用,表示该节点不可被选择驳回

审批方式

人工任务默认采用多实例的方式实现了会签。多实例变量如下

变量名 描述
nrOfApproved 同意的数量
nrOfRejected 拒绝的数量
nrOfInstances 总数量
WFLNUM 通过比例标准

审批方式如下

代码 描述 通过条件 备注
ONE_APPROVAL 任一人同意 ${nrOfApproved>0} 改名
ONE_APPROVAL_OR_REJECT 任一人同意或者拒绝 ${ nrOfApproved>0
ALL_APPROVAL 全部同意 ${nrOfRejected>0} 改名
ALL_APPROVAL_OR_REJECT 全部同意或者拒绝 ${nrOfApproved ==WFL_NUM
PROPORTION_PERSON 一定比例同意 ${nrOfApproved/nrOfInstances>=WFL_NUM
PROPORTION_PERSON_A_O_R 一定比例同意或者拒绝 ${nrOfApproved/nrOfInstances>=WFL_NUM
FEW_PERSON 一定人数同意 ${nrOfApproved >=WFL_NUM
FEW_PERSON_APPROVAL_OR_REJECT 一定人数同意或者拒绝 ${nrOfApproved >=WFL_NUM
WFL_CHAIN 外挂审批链 WFL_CHAIN

在这里插入图片描述

审批规则

通用规则

|代码|描述|表达式|是否传参|参数描述|
|:—|:—|:—|:—|
|逐级审批|||||
|SUBMITTER|申请者自己| i n i t i a t o r ∣ 否 ∣ 查 找 申 请 者 工 员 编 码 审 批 ∣ ∣ U N I T _ C H I E F ∣ 部 门 领 导 ∣ {initiator}|否|查找申请者工员编码审批| |UNIT\_CHIEF|部门领导| initiatorUNIT_CHIEF{empService.getDeptDirector(depEmpCode)}|是|传入指定员工编码,按序查找选择"派驻"、“挂职锻炼”、“借调”、“支援"的非主岗。如果以上都不存在,则查找其主岗。之后查找所选岗位对应的部门,如果存在主持人的,由主持人审核,否则由主要负责人审核|
|PARENT_UNIT_CHIEF|上级部门领导| e m p S e r v i c e . g e t P a r D e p t D i r e c t o r ( s u p E m p C o d e ) ∣ 是 ∣ 传 入 指 定 员 工 编 码 , 按 序 查 找 选 择 " 派 驻 " 、 " 挂 职 锻 炼 " 、 " 借 调 " 、 " 支 援 " 的 非 主 岗 。 如 果 以 上 都 不 存 在 , 则 查 找 其 主 岗 。 之 后 查 找 所 选 岗 位 对 应 部 门 的 上 级 部 门 , 如 果 存 在 主 持 人 的 , 由 主 持 人 审 核 , 否 则 由 主 要 负 责 人 审 核 ∣ ∣ A P P O I N T E D _ P A R T _ F I R S T ∣ 优 先 指 定 部 门 分 管 领 导 ∣ {empService.getParDeptDirector(supEmpCode)}|是|传入指定员工编码,按序查找选择"派驻"、"挂职锻炼"、"借调"、"支援"的非主岗。如果以上都不存在,则查找其主岗。之后查找所选岗位对应部门的上级部门,如果存在主持人的,由主持人审核,否则由主要负责人审核| |APPOINTED\_PART\_FIRST|优先指定部门分管领导| empService.getParDeptDirector(supEmpCode)""""""""APPOINTED_PART_FIRST{empService.queryPartPerson(empCode)}|是|传入指定员工编码,按序查找选择"派驻”、“挂职锻炼”、“借调”、"支援"的非主岗。如果以上都不存在,则查找其主岗。之后查找所选岗位对应部门,如果存在分管领导的,由分管领导审批,否则查找上级部门。如果存在主持人的,由主持人审核,否则由主要负责人审核|
|UNIT_CHIEF_DEPT|部门领导| e m p S e r v i c e . g e t D i r e c t o r B y D e p t ( d i r D e p t C o d e ) ∣ 是 ∣ 传 入 指 定 部 门 编 码 , 如 果 存 在 主 持 人 的 , 由 主 持 人 审 核 , 否 则 由 主 要 负 责 人 审 核 ∣ ∣ P A R E N T _ U N I T _ C H I E F _ D E P T ∣ 上 级 部 门 领 导 ∣ {empService.getDirectorByDept(dirDeptCode)}|是|传入指定部门编码,如果存在主持人的,由主持人审核,否则由主要负责人审核| |PARENT\_UNIT\_CHIEF\_DEPT|上级部门领导| empService.getDirectorByDept(

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值