工作流引擎,主要是实现业务流程的规则抽象,模型的建立,解释,以及为流程实例提供运行环境,并解释执行流程实例。
      工作流引擎必须要包含一个工作流模型的设计,工作流模型就是对业务流程抽象的一个模型,是整个工作流引擎的基础。所以模型设计的好坏决定引擎的功能是否灵活,也决定了工作流管理系统从设计实现到运行实施等诸多环节。
 
  在信息管理自动化的环境下,工作流模型必须采用简单、直观、又具有较强描述能力的模型。我们公司的自定义工作流系统采用了有限状态机的数学模型来实现工作流模型,有限状态机(FSM)又称为有限状态自动机或简称状态机,是表示有限个状态以及这些状态之间的转移和动作等行为的数学模型。
状态转换图:

上图左数第一个图:为初始状态,用粗线圈表示;
                             SX,S0,S01,S011,S0110 为状态名称
                             U=0表示处于该状态的输入
                             连线箭头上的0或1表示导入状态转换时的输入

工作流模型正是利用这种状态和动作,动作的结果导致状态的转移来达到流程的流转。

工作流引擎的每一种状态(state)被描述成为一个步骤(step)和步骤的状态(status)。工作流实例从一种状态(state)升迁到另外一种状态是通过执行动作(action)来达到的,动作的结果(result)导向另外一种状态(state),这样达到流程的流转。在一个工作流实例的生命周期内通常有一个或者多个活动的状态(state)。这些简单的思想表现在工作流引擎的核心包里面,并且通过一个简单的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)
子流程,动作的结果可以指向一个子流程,子流程是一个独立的流程,可以单独启动也可以嵌套在另外的流程中启动,和主流程有同步或异步衔接的属性。

自由流 (free transtion)
自由流是指当一个步骤的动作执行完成后,需要跳转到任务的步骤。任意步骤,是指整个流程范围内的任意步骤,包含执行过的或未执行过的。

回退流(return transtion)
 回退指当流程实例运行到某个步骤的时候,由于某些特殊原因需要回退到已经执行过的某个步骤上。回退是一种特殊的过程,只有在运行过程中才会明确指导要回退到那个步骤,回退往往需要执行业务补偿。回退和自由流不一样,会退会摸掉当前步骤到回退步骤之间的运行轨迹,就像初次运行到回退的步骤一样,同时需要辅助业务补偿来到达业务数据的回退。

工作流引擎核心包内,对这些基本元素做解释,并提供流程实例启动,动作执行,任务完成等等API,达到对业务流程的抽象。业务系统集成工作流后,做好业务流程建模,然后利用自定义表单做好相应业务数据的处理,将表单挂接到流程上。启动工作流系统,就可以实现业务系统了。

工作流管理系统开发之二 工作流引擎相关推荐

  1. 工作流管理系统开发之二十 动态创建流程多分支节点

    在工作流系统的实际应用中,经常会有根据流程实例的运行,动态的生成N个分支的情况,且每个分支又是一序列流程化的操作,待每个分支运行完成后,再汇集到一起,继续原来的主流程. 例如,当一个单据填写完成后,提 ...

  2. web工作流管理系统开发之十六 主子流程参数传递的实现

    在设计流程的时候,如果涉及到子流程,就会有主子流程间传递参数的过程. 例如,将主流程的执行人,传递给子流程,子流程根据主流程的执行人不同,会有不同的处理方式: 又例如,采购流程中,卖方备货处理时,发现 ...

  3. web工作流管理系统开发之三 可视化流程设计器

    原文地址为: web工作流管理系统开发之三 可视化流程设计器 在工作流管理系统中,引擎的所有的活动,驱动,和流转,都是以流程定义为基础而展开的.流程定义文件是流程能运行的先决条件,同时流程定义文件又是 ...

  4. 视频教程-python项目之学员CRM管理系统开发阶段二-Python

    python项目之学员CRM管理系统开发阶段二 TriAquae开源运维软件创始人,混迹IT运维领域多年,曾就职于松下.国政通.飞信.中金.NOKIA等公司,维护过少至几十台,多至数万台设备的IT系统 ...

  5. python项目之学员CRM管理系统开发阶段二-李杰-专题视频课程

    python项目之学员CRM管理系统开发阶段二-3394人已学习 课程介绍         面向初级开发一套含有角色,权限,内容为一体的学员管理,抛弃传统的每个页面繁琐的增删改查,开发公共组件,使得开 ...

  6. 工作流系统开发之二十二 dotnet版工作流引擎

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

  7. web工作流管理系统开发之四 自定义表单

    在开发工作流管理系统时,很多人只重视流程引擎,流程模型的建立,而忽略了自定义表单工具.自定义表单工具是实现独立业务模块的可视化编辑工具,业务模块可以通过这种工具编辑生成.如果单纯从流程实现来说,确实自 ...

  8. 工作流管理系统开发之一 工作流概念

    工作流软件,顾名思义,就是业务信息数据在多个环节模块之间的流转.按照工作流管理联盟的定义,工作流指的是"业务过程的部分或全部在计算机应用环境下的自动化".在实际应用过程中,为了实现 ...

  9. 工作流管理系统开发之四 自定义表单

    在开发工作流管理系统时,很多人只重视流程引擎,流程模型的建立,而忽略了自定义表单工具.自定义表单工具是实现独立业务模块的可视化编辑工具,业务模块可以通过这种工具编辑生成.如果单纯从流程实现来说,确实自 ...

最新文章

  1. k86跟mysql_MySQL【基础架构】
  2. vue 实现无限轮播_用vue写一个轮播图效果
  3. Linux常用命令(整理)
  4. Extjs4:改变Grid单元格背景色(转载)
  5. 对于计算机网络的整体框架的概括(转载)
  6. android 微信支付,body为中文字符,签名错误
  7. jqery获取每个月天数_三年级《年、月、日》单元重要知识点整理汇总,以及难点题型解析...
  8. 透过 In-memory Channel 看 Knative Eventing 中 Broker/Trigger 工作机制
  9. Makefile学习(一)[第二版]
  10. html img设置最底层,在HTML片段中设置img标签的baseUrl
  11. 一万块是存入支付宝里的余额宝好还是存在微信的零钱通里好?
  12. SQL SERVER 2008 恢复远程备份文件
  13. 如何在Arduino上使用OV7670摄像头模块
  14. MinGW安装及介绍
  15. python关于二手房的课程论文_用python分析链家二手房信息
  16. 2022-2028中国智能窃听检测系统市场现状研究分析与发展前景预测报告
  17. 怎样自己制作一个小程序?新手必知流程!
  18. 为何要重建索引 index
  19. 领导圈子里流传的10个小故事
  20. start.spring.io网站访问不到

热门文章

  1. Tamura texture C++实现
  2. fclose()函数
  3. 解决IDEA中java文件左边变成一个黄色的J
  4. vite打包类库的时候,总包和子包区分打包,怎么打包出来的都是总包的内容
  5. 启用Active Directory回收站恢复帐户
  6. 永不放弃―――向生命致意!
  7. 基于MATLAB的数字PID直流电机调速系统
  8. frida-dexdump Frida 脱壳
  9. 我差点去当高中老师了
  10. Ec MARKETS平台是投资者安全交易的基础