很久没写点东西了,现在有点时间来分享下工作流引擎设计的一点体会。希望能帮助各位园友。
前段时间接手一OA系统项目,经过一段时间的需求调研,总共十多个功能模块,但系统主要功能是应付一堆堆审批流程,各流程千差万别,而且流程变动也大,这无疑是需要设计一个工作流引擎才能解决。这个引擎主要做到流程可配置,可视化编辑,可视化的流程图展示,且需要保留审批处理的历史快照......
经过一段时间的资料查阅(感谢园子的大虾们),并且经合自身的经历(曾经用过,但未曾开发过工作流引擎),终于想出了一套方案:
以下是相关的网络资料:
http://www.cnblogs.com/f2flow/p/3659685.html
http://cqroad.cn/
链接一主要是可借鉴下流程的运转模型,连接二主要是可借鉴下流程图设计
标准参考模型图:
以我的理解,工作流引擎分两大部分:流程模板库和流程实例库。
流程模板库是各流程配置的地方,可看作是工厂生产仓库中的机模,里面包含了流程制作的处理步骤,各步骤的运转方式,发起权限,提醒处理,处理人设置等,当流程模板装配完毕后就可批量生产,上市销售了。
流程实例就好比如上述已上市销售的流程产品了,经过用户的选择购买。按照相关说明进行使用。
其组成可理解如下:
一个流程模板可生成多个实例(如对象实例化一样),每个实例中包含多个处理步骤,每个处理步骤中蕴含了所指定的表单(数据呈现)、处理动作、运转规则、提醒处理等。
其中处理动作主要是:草稿,提交,驳回,作废,暂存,转办,转阅。
处理规则就是根据流程的运转模型而定,顺序模式,单选模式,并行分支模式,汇聚模式,转办模式,驳回模式等
而表单,则是流程步骤处理时的数据展现形式,可理解为页面。里面的数据及呈现需根据自身业务情况而定。流程与表单的结合是一个难点。
经过我的理解,梳理出一个适合自己设计时的流程引擎模型
模型中分成三个库,这主要都是为了体现在数据存储上。模板管理与表单库有机地结合(模板管理负责流转规则的配置,表单库负责数据呈现)制作成模板,最终被用户所使用,激活成一个个实例至运行库中。如运行库中的实例出现异常,则需要流程监控模块进行调整。
不过表单的设计是一个难点,需要进行多种格式化的处理,由于时间和人力都有限,没有具体实现此功能。目前是使用硬编码设计表单的形式来应付。
分享一下数据结构:
流程配置图:
步骤配置:
目前的流程引擎还未考虑到支持多平台调用,只局限于自身系统。各们有见解的可留言分享,感谢。
有很多实现细节未能详细讲述,日后有时间再分享。