作者在 2007-08-28 03:12:00 发布以下内容
OSWorkflow的一些基本概念:
- Steps, Status, and Actions
- Step
一个流程由多个步骤组成,每个活动的流程都有一个或者多个当前步骤(current steps) - Status
从一个step到另外一个step的过程被认为是一个transition,一个transition会导致step的status改变。我们需要在项目开始的时候制定统一的Status,比如结束叫Finished,处理中叫Underway, 待处理叫Queued等等。 - Action
Action会开始一个transition,导致从某个step移到另外一个step。Action的触发有可能是用户人工行为,也可能是由于系统的event触发。
- Step
- Results, Joins, and Splits
- Result
一个Action的执行结果,会由于workflow instance context的不同,产生不同的结果,流转到不同的step。 比如同样一个approve order的Action,可能会有库存充足或不足的情况,流转到出货或者补充库存的step。Result分为Unconditional Result (无条件结果)和Conditional Results(有条件结果)2种,一个Action必须要有一个Unconditional Result,用来确保在没有满足任何条件的情况下面,使流程继续下去。 - Splits
一个Action的结果可能导致流程分裂成为多个step,比如在一个产品的生产流程中,经过必需的原材料准备这个step以后,会split成为零件A和零件B的生产这2个step。 - Joins
对应到Splits,必然要有合并。如在Splits提到的生成流程,是在A零件和B零件的生产都完成以后才能开始组装的步骤。Join是osworkflow里面稍微复杂一点的概念,举代码说明:<!-- for step id 1, 零件A的生产 -> <unconditional-result join="1"/> ... <!-- for step id 2, 零件B的生产 -> <unconditional-result join="1"/> ... <joins> <join id="1"> <conditions type="AND"> <condition type="beanshell"> <arg name="script"> "Finished".equals(jn.getStep(1).getStatus() && "Finished".equals(jn.getStep(2).getStatus()) </arg> </condition> </conditions> <!-- for step id 3, 组装步骤 --> <unconditional-result old-status="Finished" status="Underway" owner="组装机" step="3"/> </join> </joins>
- Result
这里使用beanshell, 需要提到里面有一个特殊变量:"jn", 代表JoinPoint,通过JoinPoint可以获得整个workflow instance的数据,从而进行条件的判断。