快速业务通道

OsWorkflow初探 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-21
     String group = (String) args.get("group");        //判断该操作员是否在运行的组中.        return user.inGroup(group);      } catch (EntityNotFoundException e) {        return false;      }    }

工作项的获得

OSWorkflow本身没有工作项的概念,,但它提供了灵活的机制,使开发者能够实现自己的工作项,我们可以在steps里定义一个<pre-functions>来实现这一功能.如果开发自己的function必须实现OSWorkflow提供的接口: com.opensymphony.workflow.FunctionProvider,该接口的定义如下:

package com.opensymphony.workflow; import com.opensymphony.module.propertyset.PropertySet; import java.util.Map; /** * Interface to be implemented by any class that are to be called from within a workflow as a function, * either as a pre-function or a post-function.The args nested elements within the function xml call * will be mapped to the properties parameter. * * @author <a href="mailto:plightbo@hotmail.com">Pat Lightbody</a> * @version $Revision: 1.5 $ */ public interface FunctionProvider {    //~ Methods ////////////////////////////////////////////////////////////////    public void execute(Map transientVars, Map args, PropertySet ps) throws WorkflowException; }

该接口也只有一个方法,方法的参数同Condition.

我们首先要定义一个workitem表,用来存放我们的工作项列表.这里列出该表的一些必须的字段.

Create table workitem ( Id      number, --主键 Entry_ID   number, --流程实例ID Step_ID   number, --step id Type     char(1), --参与者的类型 0 为某员工,某个角色,某个group, --某个前step的执行者. Value  number, -- 参与者的实际值,可以是员工的ID,角色的ID,group的ID )

在数据库里创建该表后,修改我们的流程定义.举个例子来说:

<step id=”6” name=”approve”>   <pre_functions>     <function type=”class”>     <arg name=”class.name”>os.TestFunctionProvider</args>     <arg name=”type”>group</arg>     <arg name=”value”>zte</arg>     </function>   </pre_functions>   <actions>   …   <actions> </step>

下面是我们需要实现的os.TestFunctionProvider伪码:

public class TestFunctionProvider implements FunctionProvider {    //~ Methods //////////////////////////////////////////////////////////////// public void execute(Map transientVars, Map args, PropertySet ps) { WorkflowEntry entry = (WorkflowEntry) transientVars.get("entry"); //得到流程实例ID String entry_id = entry.getId (); //得到当前的stepId    String stepIdVal = (String) args.get("stepId");    //得到流程参与者的类型      String type = (String)args.get (“type”);      //得到流程参与者的值.      String value = (String)args.get(“value”);      //执行sql操作,把相关值存到数据库的workitem中      transientVars.put("caller", context.getCaller());    } }

通过查询workitem表,就可以得到工作项了.

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号