深入osworkflow的function
fantasy
2009-11-08
1.基本概念
osworkflow里使用自定义的function来执行业务代码,如步骤“拟稿”,当你执行提交操作的时候,可以自定义一个funciton用来保存稿件到业务数据库。 function分为pre-function(前置方法)和post-function(后置方法),前置函数在step和action之前执行, 后置方法在step和action之后执行。 2.如何使用 2.1 定义前置function 前置方法,放在action里results之前。 <action id="100" name="启动工作流"> <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> 2.2 定义后置function 后置方法,放在action里results之后。 <action id="100" name="启动工作流"> <results> <unconditional-result old-status="Finished" status="Underway" step="1" owner="${caller}"/> </results> <post-functions> <function type="class"> <arg name="class.name">com.opensymphony.workflow.util.Caller</arg> </function> </post-functions> </action> 2.3 执行benshell osworkflow支持在function里执行beanshell脚本。 <post-functions> <function type="beanshell"> <arg name="script"> System.out.println("step is success!!!"); </arg> </function> </post-functions> 2.4 自定义function 实现FunctionProvider接口来自定义自己的function.如下: public class MyFunction implements FunctionProvider { @SuppressWarnings("unchecked") public void execute(Map transientVars, Map args, PropertySet ps) throws WorkflowException { } } 在function里你能够得到caller(调用者的名字),workflowID(工作流ID),actionId(操作ID)。 WorkflowEntry workflowEntry = (WorkflowEntry) transientVars.get("entry"); long workflowId = workflowEntry.getId(); BasicWorkflowContext context = (BasicWorkflowContext) transientVars.get("context"); String caller = context.getCaller(); int actionId = (Integer) transientVars.get("actionId"); 3.使用spring来管理function osworkflow支持使用spring来管理function和condition的生命周期。 3.1 让spring来管理function 在bean.xml做如下配置 <!-- 将工作流的function和condition交给spring管理 --> <bean id="resolver" class="com.opensymphony.workflow.util.SpringTypeResolver"> </bean> 这样通过byName的注入方式,注入到你的AbstractWorkflow的bean里。 或者 AbstractWorkflow workflow = new BasicWorkflow(userName); workflow.setResolver(workflowTypeResolver); workflow.setConfiguration(osworkflowConfiguration); 3.2定义myFunction的bean <bean id="myFunction" class="MyFunction" /> 3.2配置bean的function <post-functions> <function type="spring"> <arg name="bean.name">myFunction</arg> </function> </post-functions> arg的name为bean.name 注意:<arg name="bean.name">myFunction</arg>必须放在同一行,因为myFunction旁边有空格的话,会找不到myFunction bean。 更多osworkflow讨论,请进入osworkflow组:[url]http://osworkflow.group.iteye.com/ [/url] |
|
yp2085
2009-11-27
|
|
guozheng
2010-11-04
学习了!
|
|
zhjb_javaeye
2011-03-16
学习了,请问下spring管理的function bean 需要继承osworkflow的类不?
os的function都必须继承os的function接口的。 |
|
wsamuel007
2011-03-18
总结的不错。
|
|
stevenjohn
2012-03-05
挺好的,只是内容有点少,最好给提供一个源代码,参考一下
|