`
friping
  • 浏览: 133900 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

OSWorkflow观念探讨 -转自史蒂芬

阅读更多
--流程设定基础
(史帝芬, 2005/6/6, hi.steven@gmail.com)
 
看完第一支程式,相信读者会有许多疑问,这里先就流程的设定做初步的介绍。首先,读者应该注意到了,第一支程式的用到三个xml设定档,这三个是设定流程的设定档,说明如下。

osworkflow.xml:这个档案是设定流程是否存在资料库或存在记忆体,前面的内容是存在MS SQL Server的写法。

leave.xml:请假流程写在这个档案,这也是osworkflow的重点之一。

workflows.xml:指定系统启动时要载入那些流程。


这里针对leave.xml做些说明…

initial-actions:每个流程都至少需定义一个initial-actions,这是流程的起点。

action:导致流程变动的动作,每个action都有个编号,且不能重复。

step:虽然它的名称是步骤,似乎它会有动作?其实将它视为流程位置可能比较恰当,osworkflow真正的动作在action发生。

result:执行动作后的结果,result有两种conditional-result和unconditional-result,每个result一定有unconditional-result,当conditional-result的条件都不满足时,就执行unconditional-result。

status:流程在某个action时的状态。

old-status:流程执行某个action后的状态。

caller:这是OSWorkflow的保留字,可取得呼叫此工作流的user,即Workflow workflow = new BasicWorkflow(caller);在资料库中会记录于Table OS_HISTORYSTEP如下:


記得在pre-functions加上如下設定…

<pre-functions>
  <function type="class">
    <arg name="class.name">com.opensymphony.workflow.util.Caller</arg>
  </function>
</pre-functions>
owner:這是傳工作流到此步驟的user。

--限制条件 转自史蒂芬
编辑
第二支程式只举AllowOwnerOnlyCondition为例,事实上OSWorkflow 2.7版提供了以下四种限制条件。

OSUserGroupCondition:限制由隶属某指定Group的人执行。

StatusCondition:限制step的status为某个值时才能执行。

AllowOwnerOnlyCondition:只允许Owner执行。

DenyOwnerCondition:只有Owner不能执行。

当同时要加上两个限制条件时,可以如下写。


<restrict-to>
  <conditions type="AND">
    <condition type="class">
      <arg name="class.name">
         com.opensymphony.workflow.util.StatusCondition
      </arg>
      <arg name="status">Queued</arg>
    </condition>
    <condition type="class">
      <arg name="class.name">
        com.opensymphony.workflow.util.OSUserGroupCondition
      </arg>
      <arg name="group">A0001</arg>
    </condition>
  </conditions>
</restrict-to>

--传值储值
Property sets:持续性变数,会将变数值存入Table OS_PROPERTYENTRY,在设定档中以propertySet来存取。

Transient Map:临时性变数,仅在workflow中有效,在设定档中以transientVars来存取。

外部函数:外部函数要实作FunctionProvider,如第三支程式的OutputPropertySet,在设定档中如下呼叫使用。
<function type="class">
  <arg name="class.name">
    tw.idv.idealist.OutputPropertySet
  </arg>
  <arg name="author">Steven Shi</arg>
</function>

--校验器
看完第四支程式应该多半的人已经知道怎么做校验器了!这里再大略讲解一下。首先写一个类别,这个类别要实作Validator,如前面程式的MyValidator,如有错误抛出exception。接下来在流程设定档中加入

<validators>
  <validator type="class">
    <arg name="class.name">
      tw.idv.idealist.MyValidator
    </arg>
  </validator>
</validators>

上面這一段設定應放在那裡? 這可以查一下DTD,就知道應放於那個位置了。
<!ELEMENT action (meta*, restrict-to? , validators?, pre-functions?, results, post-functions?)>


--查询API
要使用OSWorkflow提供的Query API,先继承AbstractWorkflow,透过AbstractWorkflow里的getPersistence method可连接资料做查询,其余的语法参考程式即可知道,这里针对几点做说明:

WorkflowExpressionQuery参数
这个类别建立时所需的四个参数,第二个对应到资料库的Table如下所示,第一个则对应到Table中的栏位,栏位如何对应由名称应可明了,不另作说明。

常數 Table
FieldExpression.ENTRY OS_WFENTRY
FieldExpression.CURRENT_STEPS OS_CURRENTSTEP
FieldExpression.HISTORY_STEPS OS_HISTORYSTEP

第三個參數為運算元,只有四種如下:
運算元 說明
FieldExpression.EQUALS 等於
FieldExpression.NOT_EQUALS 不等於
FieldExpression.GT 大於
FieldExpression.LT 小於


巢状运算
如果要比较的不只一个栏位,就需要用到巢状运算,使用class NestedExpression,底下是一个官方文件的范例:

// Get all finished workflow entries
//where the current owner is 'testuser'
Expression queryLeft = new FieldExpression(
  FieldExpression.OWNER,
  FieldExpression.CURRENT_STEPS,
  FieldExpression.EQUALS, 'testuser');
Expression queryRight = new FieldExpression(
  FieldExpression.STATUS,
  FieldExpression.CURRENT_STEPS,
  FieldExpression.EQUALS,
  "Finished",
  true);
WorkflowExpressionQuery query =
  new WorkflowExpressionQuery(
    new NestedExpression(
      new Expression[] {queryLeft, queryRight},
        NestedExpression.AND));



  • 大小: 14 KB
分享到:
评论

相关推荐

    osworkflow-2.8.0-example.war

    《osworkflow-2.8.0-example.war:工作流引擎的实战应用》 osworkflow-2.8.0-example.war 是一个基于OSWorkflow框架的示例应用,它为开发者提供了一个直观的理解和实践OSWorkflow工作流程引擎的机会。这个压缩包...

    OSWorkflow-chinese-manual-2.8.rar

    博文链接:https://yanwu.iteye.com/blog/195250

    osworkflow-chinese-manual.rar_manual_osworkflow

    这份osworkflow-chinese-manual.pdf是osWorkflow的中文手册,对于理解和使用osWorkflow具有极高的参考价值。 工作流管理系统(Workflow Management System,WfMS)是企业信息化建设中的关键组件,它通过定义、执行...

    osworkflow-canvas-master_nginx_源码.rar

    标题中的"osworkflow-canvas-master_nginx_源码.rar"表明这是一个关于osWorkflow Canvas与Nginx服务器相关的源代码压缩包。osWorkflow是一个开源的工作流管理系统,用于管理业务流程,而Nginx则是一款高性能的HTTP和...

    OSWorkflow-chinese-manual-2.8.rar_Java 8_osworkflow

    这个“OSWorkflow-chinese-manual-2.8.rar”压缩包包含的是OSWorkflow的中文版2.8版本的手册,对于理解和使用该框架非常有帮助。 首先,我们需要了解工作流的基本概念。工作流是指在组织中,一系列相互关联的任务...

    osworkflow-developer-guide(学习资料)

    《osworkflow-developer-guide》是关于OSWorkflow框架的开发者指南,它为理解、实施和定制OSWorkflow提供了详尽的指导。OSWorkflow是一个开源的工作流管理系统,用于管理应用程序中的业务流程。这个指南旨在帮助...

    osworkflow---提供osuser源碼

    标题中的“osworkflow---提供osuser源碼”指的是OSWorkflow框架的一个组成部分——osuser模块的源代码。OSWorkflow是一款开源的工作流引擎,它允许开发者在Java应用中实现复杂的业务流程。osuser模块则是该框架中...

    osworkflow-developer-guide.rar_OSWorkflow ebooks_OsWorkFlow.rar_

    这个压缩包"osworkflow-developer-guide.rar_OSWorkflow ebooks_OsWorkFlow.rar_"包含了关于OSWorkflow的开发者指南和相关资源,非常适合那些想要深入理解并使用OSWorkflow进行开发的人。 **OSWorkflow 概述** ...

    osworkflow-canvas-master_nginx.zip

    《深入解析osworkflow-canvas与Nginx在源码层面的整合应用》 osworkflow-canvas与Nginx,这两个看似不相关的技术在实际开发中却有着紧密的联系。osworkflow-canvas是一款流程设计工具,它是osWorkflow的一部分,...

    osworkflow-example-demo.rar_DEMO_com.example.demo_osworkflow e

    这个"osworkflow-example-demo.rar"是一个示例项目,包含了OSWorkflow的源代码和一个经典的实例,适用于初学者学习和理解工作流管理系统的工作原理。由于不包含数据库和流程设计器,因此可能需要用户自行配置和设计...

    OSWorkflow开发指南 - 中文

    OSWorkflow,全称为OpenSymphony Workflow,是一款开源的工作流管理系统,用于实现业务流程自动化和管理。这个开发指南是中文版的资源,旨在帮助中国的开发者更好地理解和应用OSWorkflow。以下是关于OSWorkflow的...

    OSWorkflow-chinese-manual-2.8.rar_Java 8_manual_osworkflow_工作流

    《OSWorkflow 中文手册 2.8》是一个针对Java 8环境下的工作流管理系统OSWorkflow的详细指南,专为初学者设计,旨在帮助用户理解和掌握工作流的配置和实际操作。OSWorkflow是一款开源的工作流引擎,它允许开发者定义...

    osworkflow入门范例

    使用方法:把mine压缩包解压,把osworkflow-2.8.0-example文件夹放入%TOMCAT_HOME%\webapp下。osworkflow-2.8.0-example.xml放在%TOMCAT_HOME%\conf\Catalina\localhost 当然数据库要配置连接池,名字为jdbc/...

    osworkflow-2.8.0.zip

    在osworkflow-2.8.0.zip这个压缩包中,包含了osWorkflow 2.8.0版本的所有核心组件和相关文档,让我们一起深入了解一下这些文件的用途和重要性。 1. **设计器:designer.jar** 设计器是osWorkflow的一个可视化工具...

    osworkflow

    OSWorkflow 是一个强大的开源工作流管理系统,用于在Java应用程序中实现复杂的业务流程自动化。这个系统提供了灵活的工作流定义、状态管理、任务分配以及流程审计功能。通过对工作流的精细控制,开发者可以创建出...

    osworkflow请假系统

    **osworkflow请假系统** osworkflow是一款开源的工作流引擎,它为开发者提供了强大的工作流管理和实现能力。这个系统是基于Oracle数据库构建的,搭配了Tomcat应用服务器,为用户提供了请假流程的完整DEMO,旨在帮助...

Global site tag (gtag.js) - Google Analytics