一个应用MIS的系统的架构离不开工作流引擎,具有流程引擎思维的架构人员设计系统的时候就有流程的思维,他区别于过程思维,过程思维开发出来的系统,用户面对的是菜单、模块。而流程思维设计出来的系统就是发起、待办、在途、查询、近期等菜单,用户使用起来比较清爽、容易培训、学习成本低。比如:我们做一个工单系统,如果采用流程思维则创建通过创建一个工单流程,然后设计表单即可,如下图:
(流程引擎:流程设计器)
(表单引擎:表单设计器)
所有说软件系统的架构需要一个工作流引擎支撑系统的开发,您设计的系统就是面向流程的系统,在业务变化的时候,您可以随时调整,使用较小的成本来开发您的系统。
但随着同类需求不断增多,于是开始了工作流引擎的开发之路。查找了一些资料之后,开发了现阶段的工作流引擎,文章后面会有介绍。
虽然现在基本上能满足日常的需求,但感觉还不够智能,还有很多的优化空间,所以正好借此机会,详细了解了一些完善的工作流引擎框架,以及在架构设计上需要注意的点,形成了这篇文章,分享给大家。
-
什么是工作流
先看一下维基百科对于工作流的定义:
工作流(Workflow),是对工作流程及其各操作步骤之间业务规则的抽象、概括描述。工作流建模,即将工作流程中的工作如何前后组织在一起的逻辑和规则,在计算机中以恰当的模型表达并对其实施计算。
工作流要解决的主要问题是:为实现某个业务目标,利用计算机在多个参与者之间按某种预定规则自动传递文档、信息或者任务。
简单来说,工作流就是对业务的流程化抽象。WFMC(工作流程管理联盟) 给出了工作流参考模型如下:
举一个例子,比如公司办公的 OA 系统,就存在大量的申请审批流程。而在处理这些流程时,如果每一个流程都对应一套代码,显然是不现实的,这样会造成很大程度上的代码冗余,而且开发工作量也会骤增。
这个时候就需要一个业务无关的,高度抽象和封装的引擎来统一处理。通过这个引擎,可以灵活配置工作流程,并且可以自动化的根据配置进行状态变更和流程流转,这就是工作流引擎。
-
简单的工作流
那么,一个工作流引擎需要支持哪些功能呢?
这个问题并没有一个标准答案,需要根据实际的业务场景和需求来分析。在这里,我通过一个工单流程的演进,从简单到复杂,循序渐进地介绍一下都需要包含哪些基础功能。
- 最简单流程:
最简单的一个流程工单,申请人发起流程,每个节点审批人逐个审批,最终流程结束, 在ccflow看来,属于线性流程,每个节点都是线性节点,他是一条线。流程启动后,在一个时间点上,只有一个节点是活跃的。
-
会签定义
在这个过程中,节点分成了两大类:简单节点和复杂节点。简单节点处理逻辑不变,依然是处理完之后自动到下一个节点。复杂节点比如说会签节点,则不同,需要其下的所有子节点都处理完成,才能到下一个节点,在ccflow的概念里,属于同表单分合流、或者异表单分合流。
-
并行定义
如下并行流程图:
同样属于复杂节点,其任何一个子节点处理完成后,都可以进入到下一个节点。在ccflow概念中节点上多人处理规则中的协作模式,当前节点所有的人都完成后,由最后一个人发送到下一个节点上去,我们称为会签节点。
-
条件判断定义
需要根据不同的表单内容进入不同的分支流程,举一个例子,比如在进行休假申请时,请假一天需要直属领导审批,如果大于三天则需要部门领导审批。
在ccflow的概念中,方向条件分为表单字段、用户身份、用户部门、API、流程系统参数等,一个灵活高可配置的系统,需要支持多中场景,才能减少代码的开发。
-
动态审批人定义
审批节点的审批人需要动态获取,并且可配置。
审批人的获取方式可以分以下几种:
- 固定审批人
- 从申请表单中获取
- 根据组织架构,动态获取
- 从配置的角色组或者权限组中获取
- 撤销和驳回
节点状态变更可以有申请人撤回,审批人同意,审批人驳回。那么在驳回时,可以直接驳回到开始节点,流程结束,也可以到上一个节点。更复杂一些,甚至可以到前面流程的任意一个节点。在ccflow的概念中,撤销是发送人主动执行的动作,驳回责任处理人退回的动作。
-
自动化节点
有一些节点是不需要人工参与的,比如说联动其他系统自动处理,或者审批节点有时间限制,超时自动失效,自动化节点需要服务来支持,在ccflow的概念中,可以在节点属性的谁执行它,可以设置机器执行节点。
-
个性化通知
节点审批之后,可以配置不同的通知方式来通知相关人。
以上是我列举的一些比较常见的需求点,还有像加签,代理,脚本执行等功能,如果都实现的话,应该会是一个庞大的工作量。当然了,如果目标是做一个商业化产品的话,功能还是需要更丰富一些的。但把这些常见需求点都实现的话,应该基本可以满足大部分的需求了,至少对于我们系统的工单流程来说,目前是可以满足的。
-
工作流引擎对比
既然这是一个常见的需求,那么需要我们自己来开发吗?市面上有开源项目可以使用吗?答案是肯定的,目前,市场上比较有名的开源流程引擎有 Osworkflow、Jbpm、Activiti、Flowable、Camunda, CCFlow,JFlow 等等。其中:Jbpm、Activiti、Flowable、Camunda 四个框架同宗同源,属于国外的工作流引擎。CCFlow,JFlow是国产的工作流引擎,它集成的自己研发的表单引擎,融合了MIS系统开发中,业务流程、公文流程、工业流程下的多种业务规则,让其设计更具有适应性。流程引擎、表单引擎、数据、用户之间的关系,类似于车的控制系统、车厢、数据、操作员,如下图所示。
(图:流程引擎、表单引擎、业务数据、操作员的关系)