`

OSWorkflow观念探讨

阅读更多

 

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));

分享到:
评论

相关推荐

    OSWorkflow

    OSWorkflow

    OSWorkFlow

    OSWorkFlow是一个基于Java的工作流引擎,用于在企业级应用中实现复杂的业务流程自动化。它提供了灵活的流程定义和执行模型,使得开发者可以方便地设计、实施和管理各种工作流。下面将详细介绍OSWorkFlow的核心概念、...

    osworkflow中文入门指南,osworkflow+hibernate+spring集成配置,osworkflow-2.8.0.jar

    在本入门指南中,我们将深入探讨如何使用osworkflow,并将其与流行的数据持久化框架Hibernate和依赖注入容器Spring进行集成。 **工作流管理系统** 是一种软件工具,它允许开发者定义、执行和管理业务流程。...

    OSWorkflow中文手册 OSWorkflow中文手册

    OSWorkflow是一款开源的工作流引擎,主要用于管理应用程序中的复杂业务流程。这款工具提供了强大的工作流建模、执行和跟踪功能,让开发者能够灵活地定义和控制应用程序的流程逻辑。本手册是OSWorkflow的中文版,旨在...

    osworkflow

    **osWorkflow 概述** osWorkflow 是一个开源的工作流管理系统,专为 Java 应用程序设计,用于处理复杂的业务流程。这个系统的核心功能是管理、跟踪和执行一系列步骤,这些步骤构成了一个工作流程。osWorkflow 提供...

    OsWorkflow工作流实例

    在本实例中,我们将深入探讨OsWorkflow的核心概念、主要功能以及如何创建和测试一个工作流实例。 工作流引擎是软件系统中用于自动化业务流程的关键组件。OsWorkflow,全称为OpenSymphony Workflow,是由...

    osworkflow2.8

    下面我们将深入探讨这个工作流引擎的关键特性和使用方法。 1. **工作流引擎概念** 工作流引擎是自动化业务流程的核心组件,它负责执行预定义的流程规则,如任务分配、审批流程等。OSWorkflow 就是这样一个引擎,它...

    osworkflow学习笔记

    通过osworkflow项目的学习和实践,总结出的一套osworkflow工作流引擎的学习笔记,供需要使用osworkflow系统的同学们借鉴,谢谢!

    Osworkflow10份资料

    OSWorkflow中文手册OSWorkflow-chinese-manual-2.8.pdf Packt.Publishing.OSWorkflow.A.Guide.for.Java.Developers.and.Architects.Aug.2007.pdf 工作流普及风暴—基础概念.doc 用osworkflow写一个请假例子.rar

    osworkflow_bundle2

    OSWorkflow 是一个开源的工作流引擎,它允许开发者在应用程序中实现复杂的业务流程。"osworkflow_bundle2" 是一个专门用于学习 OSWorkflow 的示例集合,它包含了一系列的资源和实例,帮助用户理解并掌握如何使用这个...

    工作流 osworkflow 例子和原理

    本篇文章将深入探讨OSWorkflow的工作原理及其应用实例。 OSWorkflow的核心概念包括工作流定义、状态、步骤、参与者、条件和动作。工作流定义是整个流程的蓝图,包含了流程的所有步骤和它们之间的流转规则。状态代表...

    OSWorkflow2.8 API文档

    OSWorkflow 2.8 API 文档

    OSWorkflow源码及电子书

    OSWorkflow,全称为OpenSymphony Workflow,是一款轻量级、高度灵活的开源工作流引擎,专为满足各类组织和企业的工作流程管理需求而设计。它提供了丰富的API和配置选项,使得开发者可以轻松地将工作流集成到自己的...

    osworkflow指导文档 + 源码

    **osWorkflow 指导文档 + 源码详解** osWorkflow 是一款开源的工作流引擎,主要用于处理业务流程中的各种工作流逻辑。它提供了一种灵活的方式来定义、控制和执行复杂的业务流程,允许开发者在不修改代码的情况下...

    osworkflow2.8.pdf

    ### OSWorkflow 2.8 知识点概览 #### 一、OSWorkflow 简介与特性 **OSWorkflow** 是一款灵活的工作流管理工具,适用于需要高度定制化流程的应用场景。它与大多数商用或开源工作流软件的不同之处在于其高度的灵活性...

    osworkflow2.8基于Spring+Hibernate

    本篇文章将深入探讨如何在Spring和Hibernate的环境下集成osworkflow2.8,以及在此基础上实现高效的工作流管理。 首先,我们需要了解osworkflow的基本概念。osworkflow的核心是工作流实例和步骤,通过定义流程图,...

    osworkflow 简单实例

    在这个“osworkflow 简单实例”中,我们将探讨如何使用 OSWorkflow 实现一个基础的请假系统。这个系统包括两个主要步骤:员工发起请假请求,然后由经理进行审批,审批结果分为 reject 和 approve 两种。 首先,我们...

    Osworkflow 入门级例子

    Osworkflow 是一个开源的工作流引擎,它为应用程序提供了一种灵活的方式来管理业务流程。这个入门级的例子将带你了解 Osworkflow2.8 的基本概念和如何在项目中简单地实现工作流。 Osworkflow 提供了一个强大的框架...

    目前osworkflow最新最全的资料合集

    **osworkflow** 是一个强大的开源工作流引擎,主要用于在Java应用程序中实现业务流程管理。它提供了灵活的工作流定义,使得开发者能够轻松地设计和实施复杂的业务流程。osworkflow的最新和最全的资料集合,包括了...

Global site tag (gtag.js) - Google Analytics