一、工作流的概念
1. 步骤、状态和动作
2. Results, Joins, and Splits
(1)Unconditional Result
(2) conditionalResult
(3)
--一个新的、单一的步骤和状态的组合。
--一个分裂成两个或多个步骤和状态的组合。
--将这个和其他的切换组合成一个新的单一的步骤和状态的组合。
每种不同的
注意:通常,一个
①单一步骤和状态的结果可以这样描述:
<unconditional-resultold-status="Finished" step="2" status="Underway"owner="${someOwner}"/>
如果状态不是
②从一个状态分裂成多个状态可以这样描述:
<unconditional-resultsplit="1"/>
...
<splits>
<split id="1">
<unconditional-resultold-status="Finished" step="2"
status="Underway" owner="${someOwner}"/>
<unconditional-resultold-status="Finished" step="2"
status="Underway" owner="${someOtherOwner}"/>
</split>
</splits>
③将多个状态合并为一个状态可以这样描述:
<!-- for stepid 6 ->
<unconditional-resultjoin="1"/>
...
<!- for step id8 ->
<unconditional-resultjoin="1"/>
...
<joins>
<join id="1">
<conditionstype="AND">
<conditiontype="beanshell">
<arg name="script">
"Finished".equals(jn.getStep(6).getStatus()
&&"Finished".equals(jn.getStep(8).getStatus())
</arg>
</condition>
</conditions>
<unconditional-resultold-status="Finished" status="Underway"owner="test" step="2"/>
</join>
</joins>
上面的描述也许有点含糊,但是你最应该关注的是
3. 外部函数
的函数。注意:这些函数将被应用到这个步骤的所有的切换,即使是由于这个步骤本身发起的切换,例如:在同一个步骤内,由
4. Trigger Functions
5. Validators
6. Registers
下面是一个
<registers>
<registername="doc" class="com.acme.DocumentRegister"/>
</registers>
...
<results>
<resultcondition="doc.priority == 1" step="1" status="Underway"
owner="${someManager}"/>
<unconditional-resultstep="1" status="Queued"/>
</results>
...
7. Conditions
8. Variable Interpolation
<argname="foo">${someDate}</arg>
<argname="bar"> ${someDate} </arg> <!--
9. Permissions and Restrictions
10. Auto actions
11. Integrating with Abstract Entities
12. Workflow Instance State
然而,当工作流处于 ACTIVATED状态的时候,调用者可以终止或挂起这个工作流(设置工作流的状态为 KILLED 或 SUSPENDED)。一个终止了的工作流将不能再执行任何动作,而且将永远保持着终止状态。一个被挂起了的工作流会被冻结,他也不能执行任何的动作,除非它的状态再变成ACTIVATED