osworkflow
调用接口中的参数和方法详解
Input Map
workflow的initialize、doAction,还有wf.getAvailableActions(id, map)方法都有一个HashMap类型的参数,是用来传递工作流中所需要的数据或者对象的,其有效范围只包括当前步骤或者下一步的 pre-function。可应用在function,condition,validator等当中。
Workflow接口里面的主要方法
getAvailableActions(id, null)
得到当前工作流实例所有有效动作.
第一个参数:工作流实例ID
第二个参数:要传递的对象
getCurrentSteps(id)
根据工作流实例ID得到所有当前步骤.
getEntryState(id)
根据工作流实例ID得到所有当前实例状态.
getHistorySteps(id)
根据工作流实例ID得到所有历史步骤.
getPropertySet(id)
根据工作流实例ID得到PropertySet对象.
getSecurityPermissions(id)
根据工作流实例ID得到当前状态权限列表.
getWorkflowDescriptor(id)
根据工作流实例ID得到工作流XML描述文件对象.
getWorkflowName(id)
根据工作流实例ID得到当前实例名称.
getWorkflowNames()
得到所有的工作流程名称
WorkflowDescriptor对象里面的主要方法
getAction(id)
根据动作ID得到当前动作描述信息.有三种类型:初始化动作;全局动作;步骤中的一般动作。
getCommonActions()
得到通用动作列表.
getGlobalActions()
得到全局动作列表.3
getGlobalConditions()
得到全局条件列表.
getInitialAction(id)
根据初始动作ID得到初始动作描述信息.
getInitialActions()
得到所有初始动作描述信息.
getJoin(id)
根据Join ID得到相应Join描述信息.
getJoins()
得到所有Join描述信息.
getName()
得到工作流程描述文件名称.
getRegisters()
得到所有的注册器.
getSplit(id)
根据Split ID得到相应Split描述信息.
getSplits()
得到所有Split描述信息.
getStep(id)
根据Step ID得到相应Step描述信息.
getSteps()
得到所有Step描述信息.
getTriggerFunction(id)
根据TriggerFunction ID得到相应TriggerFunction描述信息.
getTriggerFunctions()
得到所有TriggerFunction描述信息.
的位置没有先后顺序,可以放在其前,也可放在其后,也可放在中间。
<common-actions>
<action id="1001" name="发布通知">
<results>
<unconditional-result old-status="Finished" status="Underway" step="-1">
<post-functions>
<function type="beanshell">
<arg name="script"> 47
System.out.println("发布通知。。。");
OSWorkflow 开发指南 Version 1.0
October 15, 2007 So many open source projects. Why not Open your Documents?
</arg>
</function>
</post-functions>
</unconditional-result>
</results>
</action>
</common-actions>
………………………………………..
<actions>
<common-action id="1001"/>
……………………………………….
</actions>
自动动作
只要满足条件,动作将会自动执行(auto action)。如果有两个自动动作都符合条件,优先执行配置在前面的自动动作;如果说上下两个相连的步骤里都有符合条件的自动动作,且上一步骤里面自动动作的结果指向下一步骤,将连续执行;如果自动动作执行以后步骤不发生改变,可以手动执行其它未执行的非自动动作;如果自动动作执行以后步骤发生改变,将直接跳到结果里所指向的相应步骤。
以下是一个典型的例子:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE workflow PUBLIC "-//OpenSymphony Group//DTD OSWorkflow 2.6//EN" "http://www.opensymphony.com/osworkflow/workflow_2_6.dtd">
<workflow>
<initial-actions>
<action id="100" name="Start Workflow">
<pre-functions>
<function type="class">
<arg name="class.name">
com.opensymphony.workflow.util.Caller
</arg>
</function>
</pre-functions>
<results>
<unconditional-result old-status="Finished" status="Underway" step="1" owner="${caller}"/>
</results>
</action>
</initial-actions>
<steps>
<step id="1" name="First Step">
<actions> 48
<action id="1" name="The first action">
OSWorkflow 开发指南 Version 1.0
October 15, 2007 So many open source projects. Why not Open your Documents?
<results>
<unconditional-result old-status="Finished" status="Queued" step="2"/>
</results>
</action>
<action id="2" name="The second action" auto="true">
<restrict-to>
<conditions type="AND">
<condition type="class">
<arg name="status">Underway</arg>
<arg name="class.name">
com.opensymphony.workflow.util.StatusCondition
</arg>
</condition>
</conditions>
</restrict-to>
<results>
<unconditional-result old-status="Finished" status="Queued" step="1"/>
</results>
</action>
</actions>
</step>
<step id="2" name="Sencond Step">
<actions>
<action id="3" name="The third action">
<restrict-to>
<conditions type="AND">
<condition type="class">
<arg name="status">Queued</arg>
<arg name="class.name">
com.opensymphony.workflow.util.StatusCondition
</arg>
</condition>
</conditions>
</restrict-to>
<results>
<unconditional-result old-status="Finished" status="Finished" step="2"/>
</results>
</action>
</actions>
</step> 49
</steps>
</workflow>