OSWorkflow中的函数[原]

原创 2004年09月06日 17:50:00

二、工作流中的函数

OSWorkflow支持下面的函数:

1. Java-based Functions(基于Java的函数)

基于Java的函数必须要实现com.opensymphony.workflow.FunctionProvider接口。这个接口只有一个函数——execute,这个函数有三个参数

--transientVars Map <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

transientVars Map:是客户端代码调用Workflow.doAction()时传进来的。这个参数可以基于用户的不同的输入使函数有不同的行为。

这个参数也包含了一些特别变量,这些变量对于访问workflow的信息是很有帮助的。它也包含了所有的在Registers中配置的变量和下面两种特别的变量:entry (com.opensymphony.workflow.spi.WorkflowEntry) and context (com.opensymphony.workflow.WorkflowContext)

--The args Map

args Map是一个包含在所有的<function/>标签中的<arg/>标签的Map。这些参数都是String类型的。这意味着<arg name="foo">this is ${someVar}</arg> 标签中定义的参数将在arg Map中通过"foo",可以映射到"this is [contents of someVar]"字串。

--propertySet

propertySet包含所有的在workflow实例中持久化的变量。

Java-based的函数适用于以下类型:

(1) class

对于一个类的函数,类加载器一定得知道你的函数所属的类的名字。这可以通过class.name参数来完成:

       <function type="class">

              <arg name="class.name">com.acme.FooFunction</arg>

              <arg name="message">The message is ${message}</arg>

       </function>

(2) jndi

JNDI函数就象类函数一样,唯一的不同是JNDI函数的对象一定是已经在JNDI树中存在了,这里需要jndi.location参数:

       <function type="jndi">

              <arg name="jndi.location">java:/FooFunction</arg>

              <arg name="message">The message is ${message}</arg>

       </function>

(3) remote-ejb   

远程EJBs可以在OSWorkflow中作为一个函数使用。EJB的远程接口一定要扩展com.opensymphony.workflow.FunctionProviderRemote,这里需要ejb.location参数:

       <function type="remote-ejb">

              <arg name="ejb.location">java:/comp/env/FooEJB</arg>

              <arg name="message">The message is ${message}</arg>

       </function>

(4) local-ejb

本地EJBs与远程EJBs的不同在于,本地EJBs要扩展com.opensymphony.workflow.FunctionProvider接口,例如:

       <function type="local-ejb">

              <arg name="ejb.location">java:/comp/env/FooEJB</arg>

              <arg name="message">The message is ${message}</arg>

       </function>

 

2. BeanShell Functions

OSWorkflow支持BeanShell作为一个scripting语言。到http://www.beanshell.org/上,你可以获得更多的BeanShell的信息。

BeanShell函数的类型一定要指定为beanshell,还需要一个参数,名字叫script。这个参数的值实际上就是要执行的script,例如:

<function type="beanshell">

       <arg name="script">      

              System.out.println("Hello, World!");

       </arg>

</function>

在表达式中始终存在三个变量,entrycontextstoreentry变量是一个实现了com.opensymphony.workflow.spi.WorkflowEntry接口的对象,它代表workflow实例。context变量是com.opensymphony.workflow.WorkflowContext类型的对象,它允许BeanShell函数回滚事务或决定调用者的名字。store变量是com.opensymphony.workflow.WorkflowStore类型的对象,它允许函数访问workflow的持久化存储区。

和上面Java-based函数一样,也要使用三个变量transientVars, argspropertySet,例如:

<function type="beanshell">

       <arg name="script">      

              propertySet.setString("world", "Earth");

       </arg>

</function>

<function type="beanshell">

       <arg name="script">      

              System.out.println("Hello,"+propertySet.getString("world"));

       </arg>

</function>

这两个scripts的输出是"Hello,Earth"。这是因为任何存储在propertySet中的变量都会被持久化,以便在后面的该workflow中的函数使用。

3. BSF Functions (perlscript, vbscript, javascript)

OSWorkflow还支持一种Bean Scripting Framework的函数。BSFIBM AlphaWorks小组的项目,它允许通用的Script语言,如VBScript, Perlscript, Python, and JavaScript在通用的环境中运行。这意味着,在OSWorkflow中你可以使用BSF支持的任何一种语言来编写你的函数:

<function type="bsf">

       <arg name="source">foo.pl</arg>

       <arg name="row">0</arg>

       <arg name="col">0</arg>

       <arg name="script">

              print $bsf->lookupBean("propertySet").getString("foo");

       </arg>

</function>

上面的代码将获得propertySet,然后打印出keyfoo的对象的值。在BeanShell函数中的缺省范围的相同的变量,可以在你的BSF script代码中获得。关于如何在你所选择的语言中获取变量,请阅读BSF用户手册。

4. Utility Functions

OSWorkflow本身附带一些很实用的工具函数,这些函数都实现了com.opensymphony.workflow.FunctionProvider接口。要获取更详细的信息,请阅读这些工具函数的javadoc文档。下面是每个函数的简单描述,你在com.opensymphony.workflow.util包中可以找到所有的类。

(1) Caller

用当前动作的执行者名字设置持久化变量caller

(2) WebWorkExecutor

执行一个WebWork函数并且在动作结束时存储旧的ActionContext

(3) EJBInvoker

调用一个EJBsession bean方法。

(4) JMSMessage

发送一个TextMessage给一个JMStopic queue

(5) MostRecentOwner

用最近指定的步骤的所有者的名字来设置持久化变量mostRecentOwner。可选特性可以在有所有者时将变量设置为nothing,或者返回一个内部错误。

(6) ScheduleJob

可以调度一个Trigger函数在某时执行。同时支持cron表达式和简单的repeat/delay counts

(7) UnschduleJob

删除一个ScheduleJob和所有与之联系的triggers函数。在workflow的状态发生变化而且你不再希望ScheduleJob再执行的时候是很有用的。

(8) SendEmail

给一个或多个用户发送邮件。

王志东说嘴打嘴

几天来,王志东离开新浪几乎成了IT界最大的热门事件。想不到王志东的口碑是这样好,看来,这位遭受不幸的创业者拥有着最广泛的同情和怜惜。确实,曾被人根据体形戏称为“肥而不腻”的王志东,正是一位凭自己的不懈...
  • stanely
  • stanely
  • 2001-06-07 15:12:00
  • 650

osworkflow 自带表结构分析

先说点题外话:如果各位哪位转载我的文章,非常欢迎,但请把出处写上!谢谢!欢迎讨论:msn:yun15291li@hotmail.comOsworkflow内置表结构(以mysql的表结构为例),具体需...
  • yun15291li
  • yun15291li
  • 2005-08-19 14:05:00
  • 2403

osworkflow简单教程

osworkflow 基础api 接口选择:  osworkflow提供几种实现com.opensymphony.workflow.Workflow。     BasicWorkflow:  不提供事...
  • joliny
  • joliny
  • 2008-01-16 17:12:00
  • 1626

OSWorkflow 收集

OSWorkflow基本概念>> http://www.blogdriver.com/showBlog....
  • luobo525
  • luobo525
  • 2007-07-16 22:13:00
  • 2432

利用osworkflow实现业务流程

 Osworkflow是完全用java语言编写的开放源代码的工作流引擎,具有显著的灵活性及完全面向有技术背景的用户的特点。用户可以根据自身的需求利用这款开源软件设计简单或是复杂的工作流。通过使用,用户...
  • Elmer
  • Elmer
  • 2007-08-09 10:56:00
  • 869

osworkflow入门篇

所有相关的osworkflow的文档大家可以到http://wiki.opensymphony.com/space/OSWorkflow处得到,我这里就我的理解,以及对osworkflow文档阅读的心...
  • yun15291li
  • yun15291li
  • 2005-07-18 02:55:00
  • 3077

用OSWorkFlow和JBPM开发工作流异同

一、用OSWorkFlow和JBPM开发工作流,首先要做的都是编写工作流描述文件,在此基础上再进一步做相关的配置和调用。二、编写流程描述文件方式1、  JBPM是通过图形化的编辑工具(JBPM自带的E...
  • victor16345
  • victor16345
  • 2010-05-21 17:10:00
  • 13321

osworkflow与spring的整合

    经过两天的辛勤努力,一个简单Spring+osworkflow结构的代码框架终于搭建好了,用Spring来管理bean和实现页面的跳转,osworkflow来实现业务流程,在页面上显示,使得按...
  • zh417
  • zh417
  • 2007-08-12 21:54:00
  • 5207

OSWorkFlow深入浅出(2)---配置

1、配置描述 在开始编写第一个OSWorkFlow之前,我们先来看看OSWorkFlow的配置,OSWorkFlow的最基本配置有,OSWorkFlow的最基本配置有三个,第一个用来配置OSWorkF...
  • wangwenjun69
  • wangwenjun69
  • 2013-07-28 16:01:10
  • 1890

osworkflow工作流引擎学习笔记

本指导资料假定你已经部署OSWorkflow的范例应用在你的container上。范例应用部署是使用基于内存的数据存储,这样你不需要担心如何配置其他持久化的例子。范例应用的目的是为了说明如何应用OSW...
  • wacky
  • wacky
  • 2016-08-12 10:55:30
  • 2181
收藏助手
不良信息举报
您举报文章:OSWorkflow中的函数[原]
举报原因:
原因补充:

(最多只允许输入30个字)