数据库:

流程定义与运转

业务逻辑关系:
约定:
库所某种程度称为节点。
流程状态分为:初始,准备运行(某条件为满足),运行中,挂起,结束,终止。
库所的状态为:未开始,等待,运行中,完成,挂起,终止,等待同步。
注:挂起、终止操作要在监控器中进行(可以对流程和库所进行操作)。

以下所有库所是实例
当流程被激活时,此动作为流程初始化,流程状态为初始
同时本流程中所有库所状态置为未开始状态。
如果条件满足流程跨过准备运行状态直接进入运行中状态
找到过程中第一个库所(类型为开始),把此库所状态置为完成,通过变迁找到后继库所置为等待
本任务中的user打开待批任务,进行操作,本库所状态有等待状态跨过运行中状态直接变成完成状态
(以上最基本流程)
关于在流程监控器中的操作:
流程管理员可以在流程监控器中将流程强制从运行中状态改变为挂起终止
流程运行中——>挂起:本流程中所有任务实例都置为挂起状态(待定)。
流程挂起——>运行中:挂起前需要记录每一个库所的状态,或加个字段?或和流程状态联合判断?(待定)恢复时要判断此节点为运行中状态还是等待状态。
流程运行中——>终止:删除本流程中所有库所实例,过程实例不删除。

库所运行中——>挂起:挂起为可恢复操作,不改变变迁的前驱后继,如果此节点为发散节点或聚合节点,情况比较复杂,1、在数据库中改变后继节点类型(star、and-split、and-join etc.),2、在流程控制中后继节点继承挂起节点的类型。3、不允许对and-splitand-joinor-splitor-join进行挂起操作。(可能2好些,更容易恢复数据
库所运行中——> 终止:终止为不可恢复操作,将此节点删除,处理方式基本同挂起。

用户任务列表

1、  遍历库所表中某角色状态为等待的节点,可得到任务列表

2、  选择任务:根据当前库所实例ID遍历变迁表,

a)         如果有判断条件,库所的状态置为进行中状态,通过自定义的条件和库所中的token比较决定路由,如果有满足的条件,把此库所的状态置为完成状态(未判断后续节点的状态)。如果没有满足的条件??

b)        如果没有条件变迁,该库所实例直接跳过运行中状态进入完成状态。

3、  根据当前库所实例ID,遍历所有库所实例的后续实例ID,得到实例状态

a)         如果是and-join,需要检查是否所有分支都为完成状态,如果都已经完成,此节点为等待状态,否则为等待同步状态。

b)        如果是其他类型,直接把当前库所实例状态置为完成,后续节点状态为等待状态。

4、  用户不能直接修改节点状态,只能在流程监控器中修改节点状态。



本文参考《基于关系数据库的工作流系统设计与实现http://www.itpub.net/436682.html
转载请说明
posted on 2006-05-16 17:39  元本如此  阅读(472)  评论(1编辑  收藏  举报