L中
3.存储在URL中.
4.存储在资源文件中
该示例是存储在XML中,XML的名称为workflows.xml,下面看一下workflows.xml:
<workflows>
<workflow name="example" type="resource" location="example1.xml"/>
<workflow name="example" type="resource" location="example2.xml"/>
</workflows>
这里定义了两个工作流定义example1.xml和example2.xml.
和权限系统的整合
流程定义详细过程,这里先不列出,这里的重点是如何与Osworkflow其它的权限系统进行整合.流程定义中每个Action的restrict-to节点都会有condition的定义,如下:
<condition type="class">
<arg name="class.name">os.TestCondition</arg>
<arg name="group">foos</arg>
</condition>
其中的os.TestCondition既是我们需要实现的,osworkflow系统实现了一个简单的权限系统osuser,基于osuser它实现了一套简单的约束条件.如果想实现自己的工作流参与人的约束条件,必须实现OSWorkflow提供的com.opensymphony.workflow.Condition接口.改接口定义如下:
/*
* Copyright (c) 2002-2003 by OpenSymphony
* All rights reserved.
*/
package com.opensymphony.workflow;
import com.opensymphony.module.propertyset.PropertySet;
import java.util.Map;
/**
* Interface that must be implemented to define a java-based condition in your workflow definition.
*
* @author <a href="mailto:plightbo@hotmail.com">Patrick Lightbody</a>
* @version $Revision: 1.7 $
*/
public interface Condition {
public boolean passesCondition(Map transientVars, Map args, PropertySet ps) throws WorkflowException;
}
该接口有一个方法需要实现passesCondition,下面对它的几个参数加以阐述:
1.transientVars :存放了当前流程运转的所有信息,比如,流程的上下文信息,流程的定义,流程的存储,在我们的实现里我们可以得到一下信息:
WorkflowContext context = (WorkflowContext) transientVars.get("context");
WorkflowEntry entry = (WorkflowEntry) transientVars.get("entry");
WorkflowStore store = (WorkflowStore) transientVars.get("store");
//取得当前登陆操作员
String caller = context.getCaller();
2.args里存储了流程定义里的参数.在该示例里是:
<arg name="group">foos</arg>
3.是PropertySet对象,记录了流程实例所需要保存的数据,可以理解成osworkflow所描述的流程相关数据
OsWorkflow初探(3)
时间:2011-01-15 csdn博客 鹿鸣山居
3.如果我们想该Action必须是group为foos组里的成员,那么我们可以这样实现我们的os.TestCondition.下面是示例代码:
public class TestCondtion implements Condition {
//~ Methods ////////////////////////////////////////////////////////////////
public boolean passesCondition(Map transientVars, Map args, PropertySet ps) {
try {
//得到工作流上下文
WorkflowContext context = (WorkflowContext) transientVars.get("context");
//得到当前操作员
String caller = context.getCaller();
//得到当前操作员信息.
User user = UserManager.getInstance().getUser(caller);
//得到允许操作的组
|