JWFD v0.96 开源 工作流 引擎设计
----数据库 结构说明
注:这篇文章中所使用的“函数”就是指JAVA语言中的方法
注: 请参考 “JWFDv0.96 工作流系统开发包简易说明.doc”中的引擎API说明来理解JWFD工作流引擎的原理
V0.94版本介绍 : 本项目是一个利用JGRAPH 和 SWING 实现的工作流程设计与运行管理程序 , 其数据结构和流程算法均是自己设计的 , 没有使用 XPDL 等工作流 规范 文件 ,而是使用的 最简单的 XML(GXL)格式 ,没有 状态机 的 概念 而是使用的自定义 图形遍历 算法来 驱动 这个流程 … 主要的操作是在数据库方面, 这样做仅仅是降低了工作流管理系统的技术门槛 , 便于初学者入门并从感性上理解什么是工作流技术,但是 在 实际应用 上和真正的 商业 工作流 产品 还有较大的差距
V0.96版本介绍
JWFD是由我在 04 年下半年开始设计并开发的一套包括基于 J graph开源软件 的流程设计器和建立在图形自定义数据结构基础上面的流程引擎的工作流软件系统,在随后的几年中,由于工作和其它一些技术原因,对JWFD 的更新一直都停留在局部 BUG 的修正上面,对核心引擎算法没有进行什么大的改进,这几年国内的流程产品层出不穷,技术水平不断提高,为适应这种发展的情况,我利用在 08 和 09 年在完成某项目的机会,对 JWFD 在面对各种实际项目中所体现出来的缺陷进行了修改,对引擎算法进行了大幅度的修正,新增加了增强流程引擎功能的算法,加入了自定义嵌入式脚本解析工具 ( 基于 ANTLR3.0 开发 , 脚本功能可能要少些 ) ,增加了流程设计器的流程代码编辑功能,增加了简易流程引擎调试工具,对数据库的表结构 也做了一定的调整,精简了几张不需要的表,同时增加了主控制结构表的字段,为方便流程设计的初学者,我在不删除旧数据结构说明的基础上面,从新添加新版本 数据结构的说明,这样可以使朋友们很容易的从简单的结构入手,再深入到新版本的结构中去。。。。
数据库结构总览 ( JWFD v0.94-v0.96数据库结构 ) :
(下面这两段话是描述的 jwfdV0.94 之前的数据结构,用户可以跳过不看 )
JWFD曾经使用 表 一共 1 2 张 , 分别是 :
用户权限部门管理类一共三张表 : ' department', 'department_level', 'departmentmember '
用户表类两张 : user 和 user_group (以上的表都不是核心结构 , 可要可不要 , 但是做为一个完整的程序 , 还是应该考虑的 … 这些表是用户和权限控制的基础数据结构)
(上面的六张表由于和实际应用项目开发关系过于密切,在 JWFD 的新版本中已经完全被放弃不用了, JWFD 只是一个用于学习的工作流系统,我只关心流程核心的运行控制和处理问题,对于项目和产品应用的外围数据结构,比如说表单等数据结构,我在这里暂时不关心,这些工作是交给项目实施者和商业产品开发者考虑的工作 )
流程运行控制表一共五张表 : 'edge_control', flow_manager', 'route_control', 'step_detail', 'step_main',
文档管理类 : 一张表 :document
(下面的内容是描述 jwfdv0.96 的数据库结构 )
目前所有的表, 其中只有 4 张表 对于流程引擎来讲 比较重要
(它们分别是 edge_control', flow_manager', 'route_control', 'step_main ' ) ,也需要 重点 说明,其它的 表在系统中使用率不高,甚至根本没有使用,只是用于给用户进行自定义扩展的时候使用的, 大家一看就懂 。
最新的v0.96 版本中,一共有 5 张表都已经废弃了,原因是由于在jwfd 的设计过程中,会出现各种不同的应用,作为 JWFD的设计者,我无法完全掌握用户自定义的需求,所以只给用户提供了扩展的接口,具体的应用还是需要用户自己去设计和实现的。。。
流程图数据结构 -- 实际 流程建模 数据 是 由 XML 文件导入数据库, 请看 下例 文章了解 XML数据结构 ,
JWFDv0.96工作流系统开发包简要说明 .doc
JWFDv0.96 工作流 XML 结构说明 .doc
表名: step_main ( 流程图 节 点属性主表 )
该表和 edge_control 表共同在数据库中表示了流程图拓扑数据结构 ,( 在数据库中采用顶点和弧的方式来表示图的拓扑结构是一种最流行的, 最方便的解决方法 , 当然.. 这里也不例外 ,我已经在设计基于矩阵的流程拓扑数据结构,希望在 JWFDv0.98以后的版本推出基于矩阵流程数据结构的新引擎 )
step_main 表的一条记录就代表在流程图中的一个顶点的拓扑数据 , 具体结构如下 :
上图是 jwfdv0.94 之前版本的数据结构
上图是 jwfdv0.96 版本的新数据结构,增加了 5 个字段 , 减少了 3 个字段 ( 下面做补充说明 )
字段 1 : id ( 排序ID 号 , 非空, 短整型 ) 功能: 该条记录的唯一性标识
字段 2: step_name ( ( 节 ) 顶点标识名, 非空 , 字符型 ) 功能: 标识流程图节点的名称, 中文或者英文 , 在流程图定义或者运行控制过程中标识或者代表该节点 , 和表中的 step_id 字段相对应 , 字段 3: graph_id ( 流程图标识字段 , 非空, 字符型 ) 功能: 用于区分不同的流程图, 使用中文或者英文 , 是该表的 INDEX 字段 , 查询各流程图的关键字段
字段 4: is_active ( 流程运行状态标识字段 , 非空, 短整型 , 默认值 0 ) 功能 : 通过该字段来标识一个已经处在运行状态中的流程的各个节点的状态,0 代表非活动 ,1 代表已经开始活动 ,2 代表异常状态 ,( 流程节点是否活动就是通过该字段来表示的 ,朋友们可以对这个字段进行自定义扩展,以便扩展引擎的控制功能 )
字段 5: step_id (流程图顶点的内部标识字段 , 非空 , 字符型 ) 功能 : 在数据库和 X M L文件中标识一个节点 , 不对外显示 , 只是在内部程序中用来代表节点的字段 , 与 step_name 相对应 , 其重要性主要体现在数据SQL 语句中作为 where 子句的查询条件字段 , 该字段和XML 数据结构中的 node_id 属性相对照
字段 6: is_routed ( 流程图路由节点标识字段 , 可空, 短整型 ) 功能 : 功能扩展字段
字段 7: visited ( 流程访问状态标识字段 , 非空 , 短整型 ) 功能: 标识流程运行阶段该顶点被运行控制模块访问次数的统计 , 该字段是程序中图形算法模块需要的重要字段 , 在有分支节点的流程图中, 通过该字段来分辨哪些后驱点被访问 , 哪些没有被访问
字段 8: allow_toback ( 流程运转回退标识字段 , 可空, 短整型 , 默认0 ) 功能 : 表示该节点可回退,0 代表 容许回退(在 v0.96版本中,该字段已经被删除 )
----------------------------------------------------------------------------------------------------------------------
JWFD V0.96 版本的增加字段补充说明(要深入认识这几个字段的功能和作用,请大家参考“ JWFDv0.96 工作流系统开发包简易说明 .doc ”文档中的流程引擎基础API 调用说明)
字段9: cond ( 嵌入式公式数据字段 ,长字符串型, 可为空,默认 "" ) 功能: 作为节点嵌入式脚本( 公式 ) 数据的数据库保存字段 , 用于流程条件表达式的逻辑判断和相应处理
字段10: actioned_time ( 流程节点处理次数计数器字段,可为空,短整型,默认0 ) 功能: 记录流程节点在运行过程中的被处理次数,属于功能计数器字段
字段11: jap_num ( 条件表达式汇聚逻辑控制字段,可为空,短整型,默认0 ) 功能: 记录流程汇聚节点的汇聚控制次数,属于功能计数器字段
字段12: rollback_status ( 流程节点回退状态字段,可为空,短整型,默认0 ) 功能: 记录流程节点回退状态,尚未使用,备用字段
字段 13: rollback_time ( 流程节点回退次数计数器字段,可为空,短整形,默认0 ) 功能: 记录流程节点的回退次数,属于功能计数器字段
字段 14: startup_time ( 流程引擎时间控制字段,可为空,字符串型,默认“” )功能: 记录该流程节点的起始运行时刻值,属于流程时间控制参数字段
字段 15: end_time ( 流程引擎时间控制字段,可为空,字符串型,默认“” )功能: 记录该流程节点的终止运行时刻值,属于流程时间控制参数字段
请 大家注意,在v0.96版本中增加的上面的几个字段,实际上根据数据库设计的一般原理,应该是要放在step_detail表中作为节点的数据流转控制字 段(step_main表和step_detail表互为主从表,step_main作为主表仅仅存储节点的拓扑结构,而step_detail作为从表 需要存储节点操作和控制的具体参数,而我在这里并没有这样设计),因为我做这个新版本设计的时候,仅考虑到代码效率的问题,没有考虑到数据库结构的合理 性,所以请大家在学习的时候,注意这个问题
-----------------------------------------------------------------------------------------------------
表名: step_detail ( 流程节点属性明细表 , 作为主表 step_main 的 附属 表 , 存储节点的 详细 活动属性 ) 在v0.94 和 v0.96 版本中,该表均未被引擎所使用,用户可以自行扩展该表,以使系统能够处理更加复杂的嵌入数据,比如说表单和公文流转等信息
设计本表的目的是为了让一个流程中的节点能够通过一些简单的数据处理变成一个活动点, 同时最大限度的分离流程图拓扑数据和业务活动处理数据流
该表目前的对应程序里面的公文处理流程和一般企业流程中的大部分用户节点操作
(action 表示该节点的活动属性 )
字段 1: id 记录ID
字段 2: flow_id 流程图ID
字段 3: step_id 顶点ID
字段 4: user_id 对应处理用户ID
字段 5: action_type 活动类型
字段 6: action_result 活动处理结构状态
字段 9: action_status 活动当前状态
字段 10: time_limit 活动处理时间期限
字段 11: startup_time 活动开始时间
字段 12: end_time 活动结束时间
用户 可以在这个表的基础上进行修改, 以方便自己的应用程序中对流程 节点 活动的处理
---------------------------------------------------------------- ------------------------------------------------------
表名: EDGE_CONTROL ( 流程图边( 弧 ) 关系表 )
字段 1 : id ( 排序ID 号 , 非空, 短整型 ) 功能: 该条记录的唯一性标识,
字段 2: edge_id ( 流程拓扑边标识ID, 非空 , 字符型 ) 功能 : 标识流程图连接边的名称 ,SQL 语言中查询的条件值, 作为该条记录的唯一主键字段 ,该字段和 XML连接边数据结构中的 <edge from =" node2 " id=" edge0 " to = "node1 ">数据段中的 id 字段数据值相对应
字段 3: from_step( 起始顶点连接属性 , 非空, 字符型 ) 功能 : 该边所连接的起始顶点的标识ID , 该字段和 XML连接边数据结构中的 <edge from =" node2 " id=" edge0 " to = "node1 ">数据段中的 from 字段数据值相对应
字段 4: to_step ( 终结顶点连接属性, 非空 , 字符型 ) 功能 : 该边所连接的终结顶点的标识ID , 该字段和 XML连接边数据结构中的 <edge from =" node2 " id=" edge0 " to = "node1 ">数据段中的 to 字段数据值相对应
字段 5: flow_master_id ( 保留字段 ) 功能: 保留
字段 6: graph_id ( 同 step_main 表中同名字段 ) 功能 : 同 step_main 表中同名字段相同
这张 表和 step_main 表共同组成了流程图的 基础 拓扑数据结构表 .. 实际上大多数对图的遍历 和控制的 操作算法都是在这两张表的数据结构基础上进行的
----------------------------------------------------------------------------------------------------------
完整的内容请下载 JWFDv0.96 工作流系统-数据库结构说明.doc
欢迎下载 :http://www.cnblogs.com/comsci/favorite/260690.html