深入osworkflow的function

本文介绍了osworkflow中自定义Function的方法,包括前置与后置Function的定义与使用,以及如何利用Beanshell脚本增强Function的功能。此外,还详细讲解了如何通过Spring管理Function的生命周期。
[b]作者:kiral 原文地址:http://kiral.iteye.com/blog/190253[/b]

[b]1.基本概念[/b]
osworkflow里使用自定义的function来执行业务代码,如步骤“拟稿”,当你执行提交操作的时候,可以自定义一个funciton用来保存稿件到业务数据库。

function分为pre-function(前置方法)和post-function(后置方法),前置函数在step和action之前执行, 后置方法在step和action之后执行。

[b]2.如何使用[/b]
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");


[b]3.使用spring来管理function[/b]
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]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值