所谓工作流引擎是指 workflow 作为应用系统的一部分,并为之提供对各应用系统有决定作用的,根据角色、分工和条件的不同决定信息传递路由、内容等级 等核心解决方案。工作流引擎可以灵活地配置工作流程,并且可以自动化的根据配置进行状态变更和流程流转,包括流程的节点管理、流向管理、流程样例管理等重要功能。下面,介绍一个比较简单的工作流程,来演示一下工作流引擎到底是一个什么样的东西。
最简单流程
最简单的一个流程工单,申请人发起流程,每个节点审批人逐个审批,最终流程结束。
会签
在这个过程中,节点分成了两大类:简单节点和复杂节点。
简单节点处理逻辑不变,依然是处理完之后自动到下一个节点。
复杂节点比如说会签节点,则不同,需要其下的所有子节点都处理完成,才能到下一个节点。
并行
同样属于复杂节点,其任何一个子节点处理完成后,都可以进入到下一个节点。
条件判断
需要根据不同的表单内容进入不同的分支流程。
举一个例子,比如在进行休假申请时,请假一天需要直属领导审批,如果大于三天则需要部门领导审批。
动态审批人
审批节点的审批人需要动态获取,并且可配置。
审批人的获取方式可以分以下几种:
-
固定审批人
-
从申请表单中获取
-
根据组织架构,动态获取
-
从配置的角色组或者权限组中获取
撤销和驳回
节点状态变更可以有申请人撤回,审批人同意,审批人驳回等。那么在驳回时,可以直接驳回到开始节点,流程结束,也可以驳回到上一个节点。更复杂一些,甚至可以驳回到前面流程的任意一个节点。
以上便是简单工作流中的一些比较常见的需求点,还有像加签,代理,脚本执行等功能,如果都实现的话,应该会是一个庞大的工作量。这时,我们就需要用到一个开源的工作流引擎,来实现这些常用但开发起来却比较繁琐的流程功能。
目前,市场上比较有名的开源流程引擎有 Osworkflow、Jbpm、Activiti、Flowable、Camunda 等。其中:Jbpm、Activiti、Flowable、Camunda 四个框架同宗同源,祖先都是 Jbpm4,开发者只要用过其中一个框架,基本上就会用其它三个了。下面,我们就来了解下这些工作流引擎的一些特性和异同点。
工作流引擎对比
Osworkflow
Osworkflow 是一个轻量化的流程引擎,基于状态机机制,数据库表很少。Osworkflow 提供的工作流构成元素有:步骤(step)、条件(conditions)、循环(loops)、分支(spilts)、合并(joins)等,但不支持会签、跳转、退回、加签等这些操作,需要自己扩展开发,有一定难度。如果流程比较简单,Osworkflow 是一个很不错的选择。
Activiti
Activiti 由 Alfresco 软件开发,Activiti 的版本比较复杂,有 Activiti5、Activiti6、Activiti7 几个主流版本。Activiti5 和 Activiti6 的核心 leader 是 Tijs Rademakers,由于团队内部分歧,在 2017 年 Tijs Rademakers 离开团队,创建了后来的 Flowable。Activiti6 以及 Activiti5 代码已经交接给了 Salaboy 团队,Activiti6 以及 Activiti5 的代码官方已经暂停维护了。
Salaboy 团队目前在开发 Activiti7 框架,Activiti7 内核使用的还是 Activiti6,并没有为引擎注入更多的新特性,只是在 Activiti 之外的上层封装了一些应用。
Flowable
Flowable 是一个使用 Java 编写的轻量级业务流程引擎,使用 Apache V2 license 协议开源。2016 年 10 月,Activiti 工作流引擎的主要开发者离开 Alfresco 公司并在 Activiti 分支基础上开启了 Flowable 开源项目。基于 Activiti v6 beta4 发布的第一个 Flowable release 版本为 6.0。
Flowable 项目中包括 BPMN引擎、CMMN引擎、DMN引擎、表单引擎等模块。相对开源版,其商业版的功能会更强大。以 Flowable6.4.1 版本为分水岭,大力发展其商业版产品,开源版本维护不及时,部分功能已经不再开源版发布,比如表单生成器、历史数据同步至其他数据源、ES 等。
Camunda
Camunda 基于 Activiti5,所以其保留了 PVM,开发团队也是从 Activiti 中分裂出来的,发展轨迹与 Flowable 相似,同时也提供了商业版,不过对于一般企业应用,开源版本也足够了。
以上便是工作流引擎的一个大致设计思路,运用一些开源的工作流引擎,可以让我们的开发设计达到事半功倍的效果,更多详情了解可以看工作流引擎设计与应用https://www.jnpfsoft.com/?csdnjie