OSWorkFlow概论:function(函数)
function(函数),在OSWorkFlow中是用来定义(引用)并执行外部的商业逻辑和服务,实现OSWorkFlow与外部具体的应用之间交互。
function有二种类型:
pre function(预处理函数)和post function(后处理函数)
pre function在工作流的一个转变操作执行之前调用,例如:在执行Action的一个结果之前,设置这个结果将导致状态改变的Owner
<action id="0" name="启动工作流">
<results>
<unconditional-result id="2" old-status="Finished" status="Queued" step="1" owner="${caller}">
<pre-functions>
<function name="set.caller" type="class">
<arg name="class.name">com.opensymphony.workflow.util.Caller</arg>
</function>
</pre-functions>
</unconditional-result>
</results>
</action>
pre function(预处理函数)和post function(后处理函数)
pre function在工作流的一个转变操作执行之前调用,例如:在执行Action的一个结果之前,设置这个结果将导致状态改变的Owner
<action id="0" name="启动工作流">
<results>
<unconditional-result id="2" old-status="Finished" status="Queued" step="1" owner="${caller}">
<pre-functions>
<function name="set.caller" type="class">
<arg name="class.name">com.opensymphony.workflow.util.Caller</arg>
</function>
</pre-functions>
</unconditional-result>
</results>
</action>
post function在工作流的一个转变操作执行完之后调用:例如在设备申请工作流中,部门经理审核步骤完成之后可以给申请的员工发email通知
等。
function将被应用在step、Action、Result中
具体见workflow_2_7.dtd:
..
<!ELEMENT step (meta*, pre-functions?, external-permissions?, actions?, post-functions?)>
<!ELEMENT action (meta*, restrict-to? , validators?, pre-functions?, results, post-functions?)>
<!ELEMENT result (conditions, validators?, pre-functions?, post-functions?)>
..
function在action级别的应用:在执行某一步骤的的Action时,它会首先执行当前Action级别的pre-function,再去寻找Action里的result。
result执行完成之后再调用Action级别的post-function,于是Action的执行结束。
如下图:
function在result级别的应用:类似action级别
function在step级别的应用:上一个步骤执行结束,运转到当前步骤,执行当前步骤的pre-function。当前步骤执行完成,在未运转到下一步骤
之前,执行post-function
如下图:
注意:OSWorkFlow里的Action和我们具体业务操作中的Action(比如:xwork中的Action)的区别:
OSWorkFlow的Action是个更粗粒度的操作,它是指OSWorkFlow某一步骤可以执行的操作。在我们经常用的action(比如:xwork中的Action),是业务相关的一个操作,在OSWorkFlow相当于一个具体的function。
OSWorkFlow的基本概念见:
gigix的
OSWorkflow基本概念>>