工作流动作中都至少包含一个无条件结果“unconditional-result”,意为指定在无条件的情况下工作流将要进行的下一步动作。
当需要指定条件时需指定conditional-result,当条件满足时则会执行该流转步骤。
condition 标签需要包含在conditions中,每个condition返回一个布尔值。当需要多个condition时,需要在conditions标签上加入 type属性,并指明AND或OR,分别为判断条件中的“与”和“或”的关系。
当遇到需要跳过下步工作流时,需要在result中加入condition条件。当有多个condition时需要使用conditions 标签的type属性指明判断方式,实例中注释部分有相关说明。
下面是工作流配置实例:
<step id="1" name="演示步骤">
<actions>
<action id="20" name="审核通过">
<restrict-to>
<conditions>
<condition type="spring">
<arg name="group">ROLE_ALL</arg>
<arg name="bean.name">userRoleCondition</arg>
</condition>
</conditions>
</restrict-to>
<pre-functions>
<function type="class">
<arg name="class.name">com.opensymphony.workflow.util.Caller</arg>
</function>
</pre-functions>
<results>
<result old-status="Finished" status="Underway" step="2">
<!-- type有两个值,AND/OR当又多个condition时作为判断条件 -->
<conditions type="AND">
<!-- 如果该返回值为false则不执行本result -->
<condition type="spring">
<arg name="bean.name">NewCondition</arg>
</condition>
</conditions>
<post-functions>
<function type="spring">
<arg name="subStatus">2</arg>
<arg name="bean.name">workflowStatusFunction</arg>
</function>
</post-functions>
</result>
<!-- 如果没有匹配的则执行该conditional-result -->
<unconditional-result old-status="Finished"
status="Underway" step="4">
<post-functions>
<function type="spring">
<arg name="subStatus">3</arg>
<arg name="bean.name">workflowStatusFunction</arg>
</function>
</post-functions>
</unconditional-result>
</results>
</action>
<!-- ...其他操作 -->
</actions>
</step>