更多的流程定义描述符概念
2008-02-23 09:45:03来源:互联网 阅读 ()
h3 定义条件和函数
你也许已经注意到,到目前为止,我们定义的条件和函数类型都是“class”。这种类型的条件和函数接受一个参数:“class.name”,以此来指明一个实现FunctionProvider或Condition接口的完整类名。在osworkflow里面也有一些其他内置的类型,包括beanshell,无状态的session bean,JNDI树上的函数等。我们在下面的例子里使用beanshell类型。
h3 Property sets我们可能需要在工作流的任意步骤持久化一些少量数据。在osworkflow里,这是通过OpenSymphony的PropertySet library来实现。一个PropertySet基本上是一个可以持久化的类型安全map,你可以添加任意的数据到propertyset(一个工作流实例对应一个propertyset),并在以后的流程中再读取这些数据。除非你特别指定操作,否则propertyset中的数据不会被清空或者被删除。任意的函数和条件都可以和propertyset交互,以beanshell script来说,可以在脚本上下文中用“propertyset”这个名字来获取。下面来看具体写法是怎么样的,让我们增加如下的代码在“Start First Draft”动作的pre-functions里面:
<function type="beanshell"> <arg name="script">propertySet.setString("foo", "bar")</arg> </function>
这样我们就添加了一个持久化的属性“foo”,它的值是“bar”。这样在以后的流程中,我们就可以获得这个值了。
h3 Transient Map 临时变量另外一个和propertyset变量相对的概念是临时变量:“transientVars”。临时变量是一个简单的map,只是在当前的工作流调用的上下文内有效。它包括当前的工作流实例,工作流定义等对应值的引用。你可以通过FunctionProvider的Javadoc来查看这个map有那些可用的key。
还记得我们在教程的第2部分传入的那个null吗?如果我们不传入null的话,那么这些输入数据将会被添加到临时变量的map里。h3 inputs 输入
每次调用workflow的动作时可以输入一个可选的map,可以在这个map里面包含供函数和条件使用的任何数据,它不会被持久化,只是一个简单的数据传递。h3 Validators 校验器
为了让工作流能够校验输入的数据,引入了校验器的概念。一个校验器和函数,条件的实现方式非常类似(比如,它可以是一个class,脚本,或者EJB)。在这个教程里面,我们将会定义一个校验器,在“finish first draft”这个步骤,校验用户输入的数据“working.title”不能超过30个字符。这个校验器看起来是这样的:package com.mycompany.validators; public class TitleValidator implements Validator { public void validate(Map transientVars, Map args, PropertySet ps) throws InvalidInputException, WorkflowException { String title = (String)transientVars.get("working.title"); if(title == null) throw new InvalidInputException("Missing working.title"); if(title.length() > 30) throw new InvalidInputException("Working title too long"); } }
然后通过在流程定义文件添加validators元素,就可以登记这个校验器了:
<validators> <validator type="class"> <arg name="class.name"> com.mycompany.validators.TitleValidator </arg> </validator> </validators>
这样,当我们执行动作2的时候,这个校验器将会被调用,并且检验我们的输入。这样在测试代码里面,如果加上:
Map inputs = new HashMap(); inputs.put("working.title", "the quick brown fox jumped over the lazy dog," " thus making this a very long title"); workflow.doAction(workflowId, 2, inputs);
我们将会得到一个InvalidInputException,这个动作将不会被执行。减少输入的title字符,将会让这个动作成功执行。
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash