基于UML活动图的工作流模型的基本组成如下(图二):
(注意:UML2。0里的活动图没有状态节点这个东东。至于它源自哪里,待考。)
“带标识的有向边”上的e[g]意为:事件e发生而警戒条件g为真。
等待状态节点:表示系统处于等待时的情况。
而WFMC定义的结构路由有四:
所有,基于上面的知识可以进行建模。
为了更好的建模,定义下列建模规则:
对节点的要求
:
(1)
每个活动图只能有一个起始节点和一个结束节点
,
这保证了工作流实例只有一个入口
(
开始节点
)
和一个出口
(
结束节点
) ;(2)
除了起始节点和结束节点外
,
每个节点必须至少有
一个输入边和一个输出边
,
这使活动图的每个节点都是可达
的
,
即不存在孤立节点
;(3)
对于每个与分支
/
或分支节点只有一个输入边
,
而与
连接
/
或连接节点只有一个输出边
,
这一点在没有限制活动图
表达能力的基础上增强了可读性。
对有向边的规则:
对任意活动图
AD = (Node ,Edge ,Event ,Condition)
都有
:
(1) (
P
e
∈
Edge)
∧
( source (e) = Initial)
]
( event ( e) =
NULL)
∧
(condition(e) = True)
即离开起始节点的边不能有事
件
e ,
而且其守卫条件为永真
True
。
这样保证了工作流实例一
被初始化就可以离开起始节点而进入具体的执行过程
;
(2) ( Pe ∈Edge) ∧(source (e) ∈AS) ] event (e) = NULL 即
离开活动状态节点的边不能有事件e
。这表示处于活动状态
的原子活动不会被其它事件的到来而中断执行;
(3) ( Pe ∈Edge) ∧( source (e) ∈WS) ] event (e) ≠NULL
即离开等待状态节点的边要有事件e。
这与上面第二条不同
的原因是处于活动状态的活动执行完后会触发相应的外部事
件来告诉WFES 活动完成,而工作流实例处于等待状态时自
己不会触发事件,必须要有事件(外部事件或时间事件) 来触
发
WFES 进行下一步的路由。
(4) ({e1 , e2 , ⋯,en} AEdge) ∧(source (e1) = source (e2) =
⋯= source (en) ∈OR2Split) ] ( ∑
n
i =1
∨condition (ei ) = true) 即离
开或分支节点的所有边上所有条件的析取为永真
。
(5) ({e1 ,e2 , ⋯,en} AEdge) ∧( source (e1 ) = source (e2) =
⋯= source (en) ∈AND2Split) ] (event (e1 ) = event (e2 ) = ⋯=
event(en) = NULL) ∧( ∏
n
i =1
condition (ei ) = True) 即离开与分支
节点所有边上不能有e 且条件都为True。
(4) 和(5) 两条规则
是为了预防某些死锁的发生。如果离开与分支的边有外部事
件到来或者路由条件为false ,则系统将无法路由发生死锁;在
离开或分支节点所有边上的条件中必有一个成立,保证了路
由能继续下去。
下面是一个建模实例:
该图可以看出一个问题:还差一个对子流程的支持。
所以,下图引入一个描述子流程的活动。(登记,分配值机柜台等都是子流程。)
待解决的问题:
1活动图中的等待状态节点的使用?何时使用?所代表的意义?
2带标识的有向边及其上的事件的具体意义?深入了解之!
3子流程与活动集的关系?
为了解决上述问题,先学习:
属于状态图:
事件:某个时刻发生的事情。
信号事件(signal event):发送或接受信号的事件,通常我们更关注接受事件,因为它会在接受对象中产生影响。(信号:从A对象到B对象的明确的单向信息流动,与具有返回值的子过程调用不同,A发出信号,B的答复也是一个信号。)我们将信号组织成信号类,用属性来表示改信号所携带的数据等。如一个名为MouseButtonPushed的信号类,有button,location属性。
变更事件(change event):由满足布尔表达式而引起的事件。如when (room temprature < heating set point)...。要不断检查表达式,才可能有变更事件的发生。当然,连续不断的检查是不现实的,但是高频度的检查是可以的,这样,从外部“看上去”是在连续不断的检查。
时间事件(time event):在绝对时间或某个时间间隔内发生的事情引起的事件。如:when (date = January 1,2000),after(10 secends)。
迁移和状态:
状态:根据对象的总体行为,将取值和链接(?)的集合组成一个状态。
迁移(transition):从A状态到B状态的瞬时变化。
当事件发生,会触发迁移(除非有可选的警戒条件会忽略事件)。
警戒条件(guard condition):为了让迁移发生而必须为真的布尔表达式。
表达为:
事件[警戒条件]
A--------------------------->B
属于活动图:
警戒条件:活动图中的转移也是以警戒条件为标识。
警戒条件还可以用于说明一组并行线程中的某个线程是有条件的。
泳道:可以使用垂直实线将活动图划分为泳道。每条泳道代表整个工作流程的某个部分的职责,该职责由组织的某个部门来执行。泳道最终可以由组织单元或者业务对象模型中的一组类来实施。
嵌套活动:可以显示活动中的子图或是让活动
引用另一个图。
下面是一些工作流定义工具的实现细节及思路:
(未完)