驰骋工作流引擎设计系列04 流程引擎表结构的设计
第1节. 关键字
驰骋工作流引擎 流程快速开发平台 workflow ccflow jflow
第1节. 流程引擎表结构的设计
流程引擎表是流程引擎控制流程运转的数据存储表,是整个流程引擎的核心表。理解表结构,掌握状态字段,相关字段变化的规律,就掌握的整个流程引擎运转的规律了。
1.1.1: 流程引擎表的作用
流程引擎表,是用来存储流程运行中信息的表。
流程在运行过程中,需要把中间数据写入到该表中。
一个流程启动后,就创建一个workid,就在流程引擎注册表里注册一条数据,有一个字段wfstate来表示该流程的运行状态,一个fk_node标识该流程运行到的节点。
流程启动发送到下一个节点,系统就会产生下一个节点的工作人员,每个人员都有一条记录写入到wf_generworkerlist。 在这个wf_generworkerlist表里,有fk_emp,workid,fk_node三个字段作为联合主键。
wf_generworkerlist的字段isread标明该 待办该文件是否读取, ispass标识该待办的状态,是否通过/处理过,关于这两张表大详细信息请参考下一章节。
当一个流程结束之后,wf_generworkerlist这个表关于该流程实例的workid数据被全部清除掉,这个workid的流程在这个表的使命已经完成。在wf_generworkflow表里的状态字段(wfstate) 标记已经完成状态,可以供历史流程查询。
工作流程引擎的待办列表是通过这两个表联合组成一个视图实现的。
1.1.2: 流程状态设计
流程在整个生命周期中有不同的状态,合理的设计流程状态,正确的划分是系统协调一致稳定运行的基础。
我们把流程分为如下状态。
流程状态变化的概要说明:
操作员启动一个流程,创建一个workid,这个时候的状态是空白状态,也叫站位状态,如果在启动之前已经有了这个站位状态,它就不在创建新的workid而是取出来这个workid作为当前流程的实例。
如果启用了草稿规则,并且允许有草稿的模式下:
这个时间,如果用户点击保存该状态从空白状态转化为草稿状态,如果用户执行发送当前节点就运行到下一个节点上去了,当前状态变为运行中的状态。如果用户直接关闭了,这个时间的状态就是草稿状态,可以在草稿里找到这条实例记录。
如果不启用草稿,在这种模式下:
这个时间,如果用户点击保存,仍然是空白状态。用户点击发送后,由空白状态转化为运行中状态,当前节点运动到下一个节点上去,下一个节点的工作人员就产生了待办。
如果上一个节点退回了,执行了退回操作,当前的流程状态就变成为退回状态,上一个节点人被退回人就有了待办工作,被退回人打开后,就可以看到退回消息,他点击发送后又变成了运行中的状态,发送到下一个节点上去了。
流程走到最后一个节点,点击发送,整个流程就结束了,状态变为流程完成状态。
1.1.3: 流程引擎表结构
每个字段的详细意思,请参考数据表结构如下图:
流程注册表
流程工作人员表
重要字段解析:
wf_generwokflow
字段名 | 中文名 | 解释 |
workid | 工作id | 唯一的主键,该表不能重复。 |
wfstate | 状态 | 流程运行状态: 请参考流程状态设计 |
title | 标题 | 流程的标题 |
fk_flow | 流程模版编号 | |
fk_node | 停留节点 | 停留到那个节点上去了。 |
starter | 发起人 | |
rdt | 发起日期 |
工作人员列表: wf_generwokerlist
字段名 | 中文名 | 解释 |
workid | 工作id | 主键 |
fk_emp | 状态 | 主键 |
fk_node | 标题 | 主键 |
ispass | 是否通过? | 0=未通过,1=通过 |
isread | 是否读取? | 0=未读,1=已读 |
sdt | 应完成日期 | |
rdt | 到达日期 | |
cdt | 实际完成日期 |
流程运行完毕后,根据当前的工作id,把数据删除掉。
第2节. 流程业务数据表设计
流程业务数据表是指,一个流程在运转过程中的数据存储的相关表,它包含了流程业务表与流程轨迹表两部分。
1.1.4: 流程业务表
该表名可以被自定义,默认为”nd”+int.prease(流程编号)+”rpt”为业务表名,该表必须有一个oid作为主键的字段,整个oid字段存储的是workid,与流程的workid关联在一起。
该业务表的字段由两部分组成:系统字段+业务字段。
系统字段有:
业务字段,就是表单信息的字段,比如:请假人,请假时间,请假类型等。
字段名称 | 类型 | 说明 |
oid | int | oid主键-与流程的workid一致 |
rdt | nvarchar | 记录日期 |
title | nvarchar | 流程标题 |
fid | int | fid分合流用到 |
cdt | nvarchar | 完成日期 |
rec | nvarchar | 记录人 |
emps | nvarchar | 操作员,多个用逗号分开。 |
fk_dept | nvarchar | 所在部门 |
fk_ny | nvarchar | 年月,比如:2018-01,统计分析用. |
mynum | int | 个数,统计分析用 |
pnodeid | int | 父子流程所用 |
prjname | nvarchar | 工程名称 |
prjno | nvarchar | 工程编号,工程流程所用 |
pemp | nvarchar | 父子流程所用 |
atpara | nvarchar | 参数属性 |
billno | nvarchar | 单据编号 |
flownote | nvarchar | 流程备注 |
guid | nvarchar | 唯一标识符 |
wfsta | int | 简易状态 |
flowstartrdt | nvarchar | 发起日期 |
flowenderrdt | nvarchar | 最后节点处理日期 |
flowendnode | int | 最后停留的节点 |
flowdayspan | float | 流程跨度天数 |
pworkid | int | 父子流程所用 |
pflowno | nvarchar | 父子流程所用 |
flowemps | nvarchar | 流程参与人 |
flowender | nvarchar | 最后处理人 |
flowstarter | nvarchar | 流程发起人 |
wfstate | int | 流程状态 |
1.1.5: 轨迹表
流程轨迹表也叫流程日志表,他是记录流程在整个过程中执行的动作操作,如下图就是流程日志表。
流程日志表的作用可是生成流程轨迹图,流程时间轴信息。可以用他来追溯整个流程的运行过程,也可以用该表的数据回滚流程。
下一篇: 本人有怀旧的习惯