前言:工作流系统通常是作为中间组件嵌入到企业业务系统应用中去,作为业务流程构造和重整的重要工具,工作流系统的实现主要要考虑以下几点要素:1. 工作流模型要符合一些标准化模型的定义;2. 工作流管理系统的功能是否能够满足特定应用的需求,而同时不阻碍业务应用的整体性;3. 工作流技术是否跟SOA技术融合,可以作为服务总线的方式供外部调用。
Slickflow 在开发工作流系统期间,选取BPMN模型作为工作流模型的语义表达,BPMN模型消除技术和业务之间的隔阂,注重业务人员对流程的需求和理解,而不是以技术为本位,相对来说,更近一步体现技术服务于业务需求的概念。其次,由于工作流模型跟业务需求的紧密结合,还有新技术的出现,认为有必要构建新的工作流系统;鉴于以上认识,总结了在构建独立工作流系统的关键模型和算法,实现了Wf5 工作流引擎,作为.NET平台上的开源工作流引擎,希望能够为企业应用开发人员提供借鉴和学习,也欢迎提出修改建议。
Slickflow 博客园开发系列技术文档资料介绍:
http://www.cnblogs.com/slickflow
一:功能介绍:
-
参考BPMN标准的流程定义解析;
-
递归解析实现的工作流引擎;
2.1 顺序流转;
2.2 分支/合并;
2.3 条件表达式;
2.4 自身循环;
2.5 撤销/退回/返签;
2.6 角色资源;
-
集成嵌入Dapper MicroORMapping 框架;
-
流程定义BPMN文件的缓存读取;
-
异常日志记录Wflog;
-
工作流服务WebApi 接口示例;
-
Test 代码示例。
二:工作流技术介绍
1. 工作流模式
工作流引擎中已经提供了串行,分支等基本模式,目前需要做的工作是对这些模式进行抽象,为后续的图形化定义界面上提供代码支持。
1.1 串行
是指工作流流程中的任务是依照次序顺序执行,没有分支选择,循环等路由功能。
1.2 分支/合并
分支模式是指对工作流流程中的任务执行条件进行限定,在执行过程中,根据条件判断执行路径。
1.2.1分支情况
AndSplit : 并行分支,所有连线都可以执行后续节点;
OrSplit:或分支,满足条件的连线,可行执行后续节点
XOrSplit: 异或分支,有第一个满足条件的连线,即可执行后续节点。
ComplexSplit:复杂情况的分支,未明确给定。
1.2.2合并情况:
AndJoin:并行合并,所有连线上的条件必须都满足,才可以执行该Gateway节点。
OrJoin:或合并,有条件定义的连线,如果条件都满足,才可以执行该Gateway节点。
XOrJoin:异或合并,只要有第一个连线的条件满足,不用再做其他连线的条件判断,直接执行该Gateway节点。
ComplexJoin:复杂情况的合并,未明确给定。
1.2.3 分支的图形元素示例
gatewaySplitJoinType |
gatewayDirection |
bPMN Graph |
description |
Split(分支) |
AndSplit (并行分支) |
Transition的属性包括: 1. Condition 2. parallelOption: (necessary, optional) 解析所有必需类型连线上的条件是否都满足,如果满足,则执行AndSplit节点的所有后续节点。 |
|
OrSplit (多选分支) |
解析满足条件的分支连线,如果条件为真,则执行这些连线上的后续节点。 |
||
XOrSplit (互斥分支) |
Transition的属性包括: 1. Condition 2. priority: [1,..n] 根据优先级,解析出第一个满足条件的连线,然后执行该连线的后续节点,其它分支上的节点不再执行。 |
||
Join(合并) |
AndJoin (并行合并) |
Transition的属性包括: 1. Condition 2. parallelOption: (necessary, optional) 当所有必需连线上的条件都满足时候,才能执行AndJoin节点的后续节点。 |
|
OrJoin (选择合并) |
根据连线上的条件定义,解析条件,如果满足,则OrJoin节点之后的节点可以被执行;此时,其它前驱分支节点可以继续执行,但不再实例化XOrJoin节点。 |
||
XOrJoin (互斥合并) |
Transition的属性包括: 1. Condition 2. priority: [1,..n] 根据优先级解析第一个满足条件的连线,如果有,XOrJoin节点的后续节点可以被执行,其它前驱分支节点不能再执行。 |
1.2.4 多实例
节点执行有多个实例后,才可以继续向下执行。
2. 工作流节点UML图
3. 获取流程下一步的算法
4. 总结
Wf5已经用于实际项目生产环境,为不断完善和创新,已经提供100%开放源代码版本,方便大家下载使用;此外考虑后期建立社区或在线交流群,供.NET平台工作流开发人员和有兴趣的同学一起交流学习,深入探讨工作流的发展趋势,也欢迎大家提出后期开发的建议。
Slickflow .NET开源工作流引擎:
http://github.com/besley/slickflow
Slickflow .NET 交流群
QQ: 233248778