F2工作流引擎这工作流引擎体系架构(二)
为了能更好的了解F2工作流引擎的架构体系,花了些时间画了整个架构的体系图。F2工作流引擎遵循参考WFCM规范,目标是实现轻量级的工作流引擎,支持多种数据库及快速应用到任何基于.net管理系统,实现工作流审批、业务流(BPM)的智能性、灵活性、简单实用性,具有强大的扩张性、集成性、独立性、开放性和稳定性,实现了可视化的流程设计或优化,流程的定制完全是通过鼠标拖、拉、拽的方式来完成,常见的串行、并行、分支、聚合都可以非常方便快捷地实现,依托于工作流强大的自定义,管理员还可以随时根据企业的情况调整流程,真正做到企业流程的不断优化。图形化、可视化设计流程定义通过Web端纯JS流程设计器无需编程的“拖、拉”式图形用户流程设计环境,支持通用流程条件,多节点,多流向。
关于轻量级:易集成、真可嵌入式架构决定其是否为真正轻量级,所谓轻量级就是易用易集成,没有臃肿的第三方框架,大量使用第三方的框架会使使用者的门槛很高,大量的应用第三方框架不仅集成时非常困难,而且要解决各种版本冲突问题,最终导致自称轻量级的工作流却无法达到真正嵌入式集成或者要做嵌入式集成时要花费大量的时间和人力成本来解决种种版本冲突问题,百度搜索到的几乎都自称轻量级,但是决多数都是为了自称轻量级而叫轻量级,但实际应用还是依然是重型工作流,整合嵌入非常困难,各种DLL或Jar包冲突。
从我的理解,首先为什么要做到轻量级呢,原因就是你是要为别的系统服务的,做为工作流引擎是要面对各种业务系统,被业务系统集成整合进去的,由于这样的应用就决定了工作流引擎自身必须是一个非常纯净的代码环境。所以最极致轻量级的就是C#或Java的原生代码,整个引擎最多使用一种行业最常用的架构,比如Java的SpringMVC,.net的asp.net MVC,除此以外不使用任何第三个架构,这样你的引擎代码将十分纯洁,而且可以只编译成一个DLL或一个Jar包。这样不仅整合时没有任何冲突,而且也不会导致因为过多的引用使原来的业务系统环境就得更加杂锁复杂进而会导致将来的维护成本直线上升。
F2BPM工作流引擎的架构设计就是基于极致轻量级的设计,真正做到轻量级这个称呼。实务做好事情,比漂亮的宣传带来实实在在的成就。

上图:F2BPM工作流引擎微内核技术架构

上图:F2BPM流程引擎五大接口
l Web建模工具:也叫“流程设计器” 即基于浏览器纯JS流程设计器无需编程的“拖、拉”式图形用户流程设计器工具。
l 流程引擎:调度,推进工作流过程和活动。
l 任务管理器:维护活动,为外部系统调用参与者任务列表提供数据
l 组织模型:流程任务最终是应用到人,达到人机交互的效果,为流程运转提供参与者。
l 支持多数据库的ORM:工作流引擎需要应用到各个系统中去,需要有自己的ORM数据库访问层,同时支持多种数据库类型。
l 流程数据:即模型库数据,流程定义相关数据。
l 相关数据:即运动库数据,相关待办事项任务,活动实例等运动数据,流程上下文数据等。
l 流程实例:流程实例工单数据。
l 任务数据:待办工作项数据。
l 形参数据:外部Tools,Apps中规定的参数类型数据。
l 控制数据:迁移的前驱ID,后续活动ID,工作流对象状态等数据。
l 业务表单数据:工作任务活动界面的数据,即表单展现
l 外部组织模型数据:外部系统的用户组织角色数据
l 外部应用数据:外部数据执行所需要的数据
工作流:Workflow
工作流定义:WorkflowDefinition
活动Activity:活动即是步骤的意思。
参与者Actor:参与者是直接或间接参与执行工作的人、机器或组织单元。
任务Task:用户待办任务实例,是工作的最小单位,即工作项。
迁移:流转转向,即带剑头的线所表示。即Petri网中的变迁
SplitXOR:异或散发,即后续步骤只能选择一条分支。
SplitOR:或散发,即后续步骤可选择大于等于1的分支
JoinXOR:异或汇聚,即前继步骤只要有一条分支聚合就满足
JoinOR:聚合,根据规则需要聚合1条或多条分支
WorkFlowEnactmntService(工作流执行服务)这个组件就是我们平常说的工作流执行服务或工作流引擎包含了多个工作流机,主要功能是读取工作流定义、根据工作流定义驱动工作流的流转,分为三个阶段:
1、模型建立阶段:利用工作流建模工具设计,并把XPDL文件解析导入到模型库。
2、模型实例化阶段:模型库数据库导入到运动库,并做好状态初始化,并分配每个活动执行所需要的资源参数等。
3、模型执行阶段:根据运行库的状态,条件判定,推动流程状态的迁移,并完成相关任务,同时提供注程实例运转过程的监控跟跟踪。
F2工作流引擎这工作流引擎体系架构(二)的更多相关文章
- GPU体系架构(二):GPU存储体系
GPU是一个外围设备,本来是专门作为图形渲染使用的,但是随着其功能的越来越强大,GPU也逐渐成为继CPU之后的又一计算核心.但不同于CPU的架构设计,GPU的架构从一开始就更倾向于图形渲染和大规模数据 ...
- .net之工作流工程展示及代码分享(二)工作流引擎
在介绍完表单类的时候,接下来介绍工作流引擎,主要由四个类组成,分别是流程.流程步骤.流程实例.流程步骤实例类. 流程类: [Serializable] public class Flow { [Xml ...
- InnoDB引擎体系架构
InnoDB引擎架构介绍 innodb存储引擎的体系架构,可简单划分成三层: 数据文件 :磁盘上的数据文件 内存池:缓存磁盘上的数据,方便读取,同时在对磁盘文件数据修改之前在这里缓存,然后按一定规刷新 ...
- Java工作流引擎表单引擎之JS表单字段输入脚本验证
关键字: 表单设计器, 字段验证. workflow,ccform, ccBPM. 工作流快速开发平台 工作流流设计 业务流程管理 asp.net 开源工作流bpm工作流系统 java工作流 ...
- MySQL InnoDB存储引擎体系架构 —— 索引高级
转载地址:https://mp.weixin.qq.com/s/HNnzAgUtBoDhhJpsA0fjKQ 世界上只两件东西能震撼人们的心灵:一件是我们心中崇高的道德标准:另一件是我们头顶上灿烂的星 ...
- 逻辑引擎、工作流、CMDB小感
工作流是啥? 在界面上画画点点就能生成代码,这是很吸引人的事情,也是很多自动化工具追求的目标.工作流就是这么一个东西,通过定义流程和输入,就能实现你想要的东西,不需要编写代码. 工作流的实现 通过解析 ...
- mysql的体系架构和存储引擎
定义数据库和实例 数据库:物理操作系统的文件或其他形式文件类型的集合.在mysql数据库中,数据库文件可以是frm.MYD.MYI.ibd结尾的文件. 实例:MySQL数据库由后台线程以及一个共享内存 ...
- 《BI那点儿事》SQL Server 2008体系架构
Microsoft SQL Server是一个提供了联机事务处理.数据仓库.电子商务应用的数据库和数据分析的平台.体系架构是描述系统组成要素和要素之间关系的方式.Microsoft SQL Serve ...
- 面向服务体系架构(SOA)和数据仓库(DW)的思考基于 IBM 产品体系搭建基于 SOA 和 DW 的企业基础架构平台
面向服务体系架构(SOA)和数据仓库(DW)的思考 基于 IBM 产品体系搭建基于 SOA 和 DW 的企业基础架构平台 当前业界对面向服务体系架构(SOA)和数据仓库(Data Warehouse, ...
随机推荐
- 系统服务监视、系统服务守护 ServiceMonitor
源码及版权来自易语言论坛邓学彬,本人只是稍微修改了一下. 下载链接: https://pan.baidu.com/s/1i4Aja4l 密码: 8fuv
- String高效编程优化(Java)
1, substring截取超大字符串可能造成的“内存泄漏” 2,+ 操作符的优化和局限 3,StringBuilder和StringBuffer 4,split和StringTokenizer做简单 ...
- 关于 OJ1575的参考题解
#include <stdio.h>int main(){ int a,b; scanf("%d",&a); b=0; while(a) { b+=a%10; ...
- 通过js引用外部脚本(嘿嘿,方便直接在浏览器上调试抓取代码)
最近折腾爬虫,后端使用jQuery进行数据采集,一般都是先从浏览器中将采集代码调试好后直接放到后端跑了. 有些网址没有引用jQuery,那调试起来就不方便了,可以用以下代码动态添加script标签,将 ...
- C#的四种Timer介绍
一.Timer的几个类别 1.System.Threading.Timer 2.System.Timers.Timer 3.System.Windows.Forms.Timer 4.System.Wi ...
- My first python script for work
I write it yesterday to watch the NE process(rcpfd,cfgd) automatically, then i will write a window t ...
- 《与小卡特一起学Python》 Code5 for循环
import time for i in range(10,0,-1): print i time.sleep(1) print "Blast off!" 以上代码循环意思为: 从 ...
- ajax局部刷新
//5秒刷新一次 $(function () { setInterval(Refresh, 5000); }); //ajax局部刷新 function Refresh() { $.ajax({ ty ...
- angularjs指令系统系列课程(2):优先级priority,模板template,模板页templateUrl
今天我们先对 priority,template,templateUrl进行学习 1.priority 可取值:int 作用:优先级 一般priority默认为0,数值越大,优先级越高.当一个dom元 ...
- javascript中的窗口和框架
框架: 在网络上我们可以看到很多WEB应用程序都是使用框架(frame)来分隔浏览器窗口的,就想一块块玻璃隔板把窗口分隔成好几个小窗口,并且可以在不同的小窗口中加载显示不同的页面,这样在我们看来好像是 ...