工作流管理系统为实现流程的自动化,必须包含一个工作流引擎,工作流引擎负责流程的定义,解释和运转。流程引擎是对业务流程的一个抽象,因此工作流引擎的设计模型是决定流程功能的重中之重,将直接影像流程的各个环节。

一套工作流管理系统还包含很多个必须要实现的部分,如:事件处理,任务处理,组织机构的适配,自定义表单等等。以及很多中国式的“动态会签,回退,自由流”等等变态需求。但抛开这些,只关注每个流程的最基本的部分,即解决一个过程运转的问题,从一个环节到另一个环节,使得流程能够运转起来。这应该就是流程引擎要实现要关注的基本问题,即流程引擎的抽象。

工作流引擎模型有很多种,FSM、PetriNet、EPC、Activity Diagram等等,不论采用那种流程引擎模型,最终都需要能将业务流程用流程引擎的符号或元素表述出来。

我们公司的eworkflow自定义工作流系统dotnet版,流程引擎采用C#语言实现了FSM有限状态机的流程引擎模型。有限状态机是一种数学模型,广泛应用于流程引擎,rpg游戏等领域。是表示有限个状态以及通过执行动作使得状态发生转移的数学模型。

状态转换图:

工作流引擎的模型正是利用这种定义的有限个状态和动作,动作的结果导向另外一个状态来达到流程的流转。

工作流引擎的每一个状态 = 一个业务环节 + 业务环节的状态

业务环节:即为一个虚拟的业务操作场所
业务环节的状态:即为一个具体的流程运转到此业务环节的实际状态。

流程引擎对流程的描述通常是采用xml格式的文档来描述,xml文档中的每个节点都赋予了一定意义,各节点作为流程定义的基本元素,流程引擎能够定义、解释和应用它们来描述尽可能多的业务流程。

一个简单的流程描述xml文件:

上图xml流程的图解状态过程如下:

开始节点-》初始化动作--》步骤节点-》动作节点--》结束

xml文件中基本元素即工作流引擎的基本元素:
步骤(step)
    一个step描述的是工作流所处的位置。可能从一个step transtion到另外一个step,或者也可以在同一个step内流转(因为step可以通Status来细分,形成多个state)。一个流程里面可以有多个step。

状态(status)
    状态status 是用来描述工作流程中具体step(步骤)状态的字符串。eWorkFlow中预置了三种步骤的状态 Underway(进行中)、Queued(等候处理中)、Finished(完成),用户可以任意扩展自己的状态。而工作流的状态state则是由step(步骤)+status(步骤的状态)组成的。工作流状态state的升迁来达到工作流实例的推进。

流转(transtion)
    一个工作流实例状态state到另一个状态state的转移。

动作(action)
    action 触发了发生在 step 内或 step 间的流转,或者说是基于 state 的流转。一个 step 里面可以有多个action。action 和step 之间的关系是,step 说明“在哪里”,action 说明“去哪里”。 一个 action 典型地由两部分组成:可以执行此action(动作)的condition(条件),以及执行此动作后的 result(结果)。

任务(task)
  任务是当工作流状态发生转移的时候,产生的任务。任务可以指定为一个具体的角色,人,或者群组。任务具体,待办,已办,竞争办理,代理待办等多种功能。

条件(condition)
类似于逻辑判断,可包含“AND”和“OR”逻辑。比如一个请假流程中的“本部门审批阶段”,该阶段利用“AND”逻辑,判断流程状态是否为等候处理中,以及审批者是否为本部门主管。

结果(result)
Result 代表执行action(动作)后的结果,指向新的 step 及其 step status,也可能进入 split 或者 join。result 分为两种, contidional-result (有条件结果),只有条件为真时才使用该结果,和 unconditional-result(无条件结果),当条件不满足或没有条件时使用该结果。

分支/合并(split/join)
流程的分支和合并。分支是指流程下一步可以同时分发给多个步骤,分支split 提供多个unconditional-result(无条件结果);join 则判断多个current step 的状态提供一个 result(结果)。

子流程(subflow)
子流程,动作的结果可以指向一个子流程,子流程是一个独立的流程,可以单独启动也可以嵌套在另外的流程中启动,和主流程有同步或异步衔接的属性。

工作流程引擎利用这些基本的元素,能够实现各种类型的路由。
 1、串行:就是一个步骤流向下一个步骤的基本路由方式。
 2、并行:一个步骤下可以执行多个动作,动作的结果可以流向不同的步骤,这是并行路由的一种方式。
 3、条件:步骤的动作结果可以设置条件,满足条件的则流向条件结果。
 4、分支:动作结果可以流向一个分支,分支可以同时流向多个不同的结果步骤,这也是并行路由的一种方式。
 5、合并:多个结果流向一个合并节点,合并节点满足一定条件后,就可以流向下一步骤。
 6、循环:动作的结果指向本步骤或上一步骤,形成循环路由。
 7、子流程嵌套:在工作流中嵌套执行另一工作流,叫子流程嵌套路由,子流程可以是同步执行和异步执行两种属性,主子流程可设置输入输出参数来达到信息的传递。
 8、自由跳转:流程实例运行当中,正常的流程是按照流程定义的节点往下执行,自由跳转就是可以跳转到任意的步骤,执行过和未执行过的步骤。
 9、回退:回退是指当流程实例运行过程中,由于某些原因回退到已经执行过的某个步骤,并辅助执行业务补偿,使得业务数据也回退到已经执行过的步骤状态。

要了解一个工作流系统,必须要先理解流程引擎的模型,理解了流程引擎的原理,模型,就如同掌握这套工作流系统的灵魂,然后再去理解它的全部。否则,一套工作流系统对你来说,可能只是一些复杂的结构,丰富多彩的示例,眼花缭乱的功能 等等。

工作流系统开发之二十二 dotnet版工作流引擎相关推荐

  1. 工作流系统之二十五 .net工作流系统开发体会

    .net工作流系统开发体会 公司的eworkflow自定义工作流系统,最初是开发了java版的.待java版的功能稳定后,就开始开发.net版的. java版的eworkflow工作流系统,我们没有依 ...

  2. Android开发笔记(一百二十二)循环器视图RecyclerView

    RecyclerView RecyclerView是Android在support-v7库中新推出控件,中文别名为循环器视图,它的功能非常强大,可分别实现ListView.GridView,以及瀑布流 ...

  3. 20189200余超 2018-2019-2 移动平台应用开发实践第十二周作业

    20189200余超 2018-2019-2 移动平台应用开发实践第十二周作业 服务 Service的声明 Service是Android中的四大组件,使用它一定要在AndroidManifest.x ...

  4. 【Visual C++】游戏开发五十五 浅墨DirectX教程二十二 水乳交融的美学:alpha混合技术

    本系列文章由zhmxy555(毛星云)编写,转载请注明出处. 文章链接: http://blog.csdn.net/poem_qianmo/article/details/15026917 作者:毛星 ...

  5. 【转载】 javaweb学习总结(二十二)——基于Servlet+JSP+JavaBean开发模式的用户登录注册 - 孤傲苍狼 - 博 http://www.cnblogs.com/xdp-gacl/

    javaweb学习总结(二十二)--基于Servlet+JSP+JavaBean开发模式的用户登录注册 一.Servlet+JSP+JavaBean开发模式(MVC)介绍 Servlet+JSP+Ja ...

  6. iOS 11开发教程(二十二)iOS11应用视图实现按钮的响应(2)

    iOS 11开发教程(二十二)iOS11应用视图实现按钮的响应(2) 此时,当用户轻拍按钮后,一个叫tapButton()的方法就会被触发. 注意:以上这一种方式是动作声明和关联一起进行的,还有一种先 ...

  7. iOS 11开发教程(十二)iOS11应用视图始祖——UIView

    iOS 11开发教程(十二)iOS11应用视图始祖--UIView 在Swift中,NSObject是所有类的根类.同样在UIKit框架(UIKit框架为iOS应用程序提供界面对象和控制器)中,也存在 ...

  8. SAP UI5 应用开发教程之六十二 - 基于 OData V4 的 SAP UI5 表格控件使用方法介绍试读版

    一套适合 SAP UI5 初学者循序渐进的学习教程 教程目录 SAP UI5 本地开发环境的搭建 SAP UI5 应用开发教程之一:Hello World SAP UI5 应用开发教程之二:SAP U ...

  9. SAP UI5 应用开发教程之四十二 - SAP UI5 自带的 Diagnostics 诊断工具使用方法介绍

    一套适合 SAP UI5 初学者循序渐进的学习教程 教程目录 SAP UI5 本地开发环境的搭建 SAP UI5 应用开发教程之一:Hello World SAP UI5 应用开发教程之二:SAP U ...

  10. SAP UI5 应用开发教程之三十二 - 如何创建一个自定义 SAP UI5 控件试读版

    一套适合 SAP UI5 初学者循序渐进的学习教程 教程目录 SAP UI5 本地开发环境的搭建 SAP UI5 应用开发教程之一:Hello World SAP UI5 应用开发教程之二:SAP U ...

最新文章

  1. H3C Boot升级 Serial模式
  2. mysql indentify by_测试工作中常用到的sql命令!!!
  3. 关于sendmail报错“did not issue MAIL/EXPN/VRFY/ETRN during connection to
  4. DL之GoogleNet:GoogleNet(InceptionV1)算法的简介(论文介绍)、架构详解、案例应用等配图集合之详细攻略
  5. FIR数字滤波器设计_窗函数法
  6. 呆萌的图模型学习——使用networkx计算node2vec,得到节点与边的embedding(三)
  7. 威纶触摸屏使用说明书_「西门子1200PLC教程」20.PLC变量表的使用
  8. linux shell for循环使用命令中读取到的值实例
  9. sql crud_使用适用于SQL Server的Python SQL库执行CRUD操作
  10. python list append 相关知识点
  11. 如何使用Affinity Designer for mac编辑矢量曲线和形状
  12. win10下安装Vm15添加虚拟机的总结
  13. 获取ADSL上网帐号密码并自动保存到D盘
  14. 各种炫酷的特效html代码,网页样式——各种炫酷效果及实现代码
  15. Office Visio 2013、Office Project Pro 2013 简体中文大客户版32位、64位下载
  16. 计算机网络——tcpdump/Wireshark抓包实战
  17. 换发型特效怎么制作?这些方法值得收藏
  18. 计算机课评课意见,计算机中心:开展听课评课力推信息化教学
  19. 简易版购物车案例(vue)
  20. 用python抠图方便还是ps方便_我会Python之后都不屑用PS了,Python抠图太方便了!...

热门文章

  1. 如何解决Steam连不上社区问题
  2. 中国铁物等3公司撤销IPO今年共16家终止审查
  3. Android技术分享| 视频通话开发流程(二)
  4. LSTM模型结构讲解
  5. matlab散点图+趋势线+评价指标(科研制图)
  6. 目标检测:RFCN算法原理一
  7. 35岁以10亿美元身价登上《财富》杂志亿万富豪榜的电商传奇谢家华
  8. nodeJS入门(五)之socket介绍
  9. 号码保护AXB功能!(精华)
  10. 成为理事 | 零数科技正式加入可信区块链推进计划(TBI)成为理事成员