首页 > 其他分享 >OSWorkflow观念探讨

OSWorkflow观念探讨

时间:2023-06-08 17:03:13浏览次数:39  
标签:设定 workflow 流程 探讨 观念 OSWorkflow FieldExpression new result


 

OSWorkflow观念探讨 -转自史蒂芬

--流程设定基础

(史帝芬, 2005/6/6,)

 

看完第一支程式,相信读者会有许多疑问,这里先就流程的设定做初步的介绍。首先,读者应该注意到了,第一支程式的用到三个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));

标签:设定,workflow,流程,探讨,观念,OSWorkflow,FieldExpression,new,result
From: https://blog.51cto.com/u_16085616/6441487

相关文章

  • 探讨B/S与C/S架构的区别
    前言这几天听课,听到关于B/S架构和C/S架构的东西,颇有感触。边查阅资料边写了这篇随笔。C/S架构C/S架构是比较早期出现的一种系统设计架构。曾经出现过两层C/S和三层C/S架构。我们一般常见的以两层C/S架构为主。我们大家在使用计算机软件过程中基本上一定会遇见C/S架构,例如我们玩......
  • 院士到访百度,共同探讨智慧水务及AI4S创新应用场景
    5月24日,美国国家工程院院士、中国工程院外籍院士、密歇根大学格伦·托马斯·戴格尔教授(Prof.GlenDaigger)和清华大学环境学院刘艳臣研究员到访百度,并与飞桨团队、智能云水务业务部和工业产品部专家进行了亲切交流。Prof.GlenDaigger教授是智慧水务创新公司OneWaterSoluti......
  • ESM风潮下企业服务的最佳实践探讨
    甄知科技孵化于中国领先的IT咨询服务提供商-上海汉得信息技术股份有限公司,主打产品“燕千云”于2019年正式发布,持续迭代版本至今,燕千云作为企业数字化服务平台,燕千云的愿景和现状是为了帮助企业服务团队快速解决问题、优化服务流程、提高服务效率和服务质量,全面满足企业业务运营......
  • XAF中XPO与EFCore的探讨
    前言首先抛出一个问题,在XAF项目中,我们现在可不可以选择EFCore?每个人可能都有自己的答案,这也没有什么标准答案。下面是我的个人看法,在刚接触XAF时,如何选择ORM,我也是犹豫了许久,最终选择了XPO,主要基于以下几点考虑1.XPO是DEV的产品,支持力度及倾向性要比EFCore高2.XPO是XAF最开始支......
  • 探讨AI技术如何辅助测试人员完成数据质量的测试
    (一)AI技术可以辅助测试人员完成数据质量的测试数据异常检测:利用机器学习等技术,对数据进行异常检测,自动发现数据中的异常值、缺失值、重复值等问题。数据匹配和去重:利用自然语言处理、模式识别等技术,对数据进行匹配和去重,自动发现重复的数据或者类似但不完全相同的数据。数......
  • 通用分页实现及其OO设计探讨
    本来是打算拿到it168投稿的!!那边的速度太慢了!先贴出来先!!分页是一种常用的页面数据显示技术,分页能够通过减少页面数据处理量从而提高了系统的性能。分页应该是做WEB开发必须掌握的一个小技术。而分页却是复杂的,倒不是它的技术有多复杂;而是有太多的重复代码,这些代码都难以重用。能不能......
  • 软件工程师能力模型探讨
    软件工程师能力模型探讨高级JAVA工程师通用技能ExpertJavaknowledge  JAVA知识专家级Object-OrientedDesignPatterns  面向对象与设计模式High-leveldesignskills  高层模块设计Designingforspecificrequirements(e.g.security,scalability,optimization) ......
  • 深入探讨源码--ArrayList
    持续推送技术干货目录深入探讨源码之ArrayListArrayList类图ArrayList的数据结构ArrayList的关键属性ArrayList构造方法ArrayList常用方法add方法ArrayList中的fast-fail机制add(i,o)方法set(i,o)方法get(i)方法remove(index)方法remove(Object)方法clear方法indexOf(o)方法深......
  • CentOS7再次探讨修改系统的启动模式(运行级别)
    1.查看当前运行级别:systemctlget-default或者runlevel或者who-r2.查看文件夹/lib/systemd/system/ll/lib/systemd/system|grepmulti-user.target ll/lib/systemd/system|grepgraphical.target ll/lib/systemd/system/default.target可以看到当前默认的runle......
  • [学术讨论] 植被覆盖相关术语与定义探讨
    关键词:植被、盖度、定义、术语作者:ludwig1860日期:2023.4.23最近我在植被覆盖度fCover及其相关量的估算方面的综述论文《Reviewofgroundandaerialmethodsforvegetationcoverfraction(fCover)andrelatedquantitiesestimation:definitions,advances,challenges,......