Step
大致相当于流程所在的位置。譬如企业年检,年检报告书在企业端算一个
step
,在工商局算第二个
step
,在复核窗口算第三个
step
。每个
step
可以有多种状态(
status
)和多个动作(
action
),用
Workflow.getCurrentSteps()
可以获得所有当前的
step
(如果有并列流程,则可能同时有多个
step
,例如一次年检可能同时位于
“
初审
”step
和
“
广告经营资格审查
”step
)。
Status
流程在某个
step
中的状态
。很容易理解,譬如
“
待认领
”
、
“
审核不通过
”
之类的。
OSWorkflow
中的状态完全是由开发者自定义的,状态判别纯粹是字符串比对,灵活性相当强,而且可以把定义文件做得很好看。
Action
导致流程状态变迁的动作
。一个
action
典型地由两部分组成:可以执行此动作的条件(
conditions
),以及执行此动作的结果(
results
)。条件可以用
BeanShell
脚本来判断,因此具有很大的灵活性,几乎任何与流程相关的东西都可以用来做判断。
Result
执行动作后的结果
。这是个比较重要的概念。
result
分为两种,
conditional-result
和
unconditional-result
。执行一个动作之后,首先判断所有
conditional-result
的条件是否满足,满足则使用该结果;如果没有任何
contidional-result
满足条件,则使用
unconditional-result
。
unconditional-result
需要指定两部分信息:
old-status
,表示
“
当前
step
的状态变成什么
”
;后续状态,可能是用
step+status
指定一个新状态,也可能进入
split
或者
join
。
conditional-result
非常有用。还是以年检为例,同样是提交年检报告书,
“
未提交
”
和
“
被退回
”
是不同的状态,在这两个状态基础上执行
“
提交
”
动作,结果分别是
“
初次提交
”
和
“
退回之后再次提交
”
。这时可以考虑在
“
提交
”
动作上用
conditional-result
。
Split/Join
流程的切分和融合
。很简单的概念,
split
提供多个
result
;
join
则判断多个
current step
的状态,提供一个
result
。
* * *