论坛首页 Java版 企业应用

深入osworkflow的function

浏览 209 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (6) :: 隐藏帖 (0)
作者 正文
时间:2008-05-06
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组:http://osworkflow.group.javaeye.com/
   
时间:2008-05-07
恩,不错,osworkflow与其他业务模块交互就靠funciton了
   
0 请登录后投票
时间:2008-05-07
可以找这本书来看看
OSWorkflow: A guide for Java developers and architects to integrating open-source Business Process Management (Paperback)

http://www.amazon.com/OSWorkflow-developers-architects-integrating-open-source/dp/1847191525
   
2 请登录后投票
时间:2008-05-08
最近一直在研究osworkflow,
很想看看lllyq说的这本书。
   
0 请登录后投票
论坛首页 Java版 企业应用

跳转论坛:
JavaEye推荐
    快速回复 引用上一条消息 (Alt+S)