osworkflow概念

作者在 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触发。
  • 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>
 
   这里使用beanshell, 需要提到里面有一个特殊变量:"jn", 代表JoinPoint,通过JoinPoint可以获得整个workflow instance的数据,从而进行条件的判断。
Java | 阅读 1538 次
文章评论,共0条
游客请输入验证码
浏览28366次