原文地址:http://hutianci.iteye.com/blog/1023363
1概述... 2
1.1工作流的概念... 2
1.2工作流的目的... 2
1.3工作流体系结构:... 2
1.4工作流开发工具安装... 2
2工作流的组成及创建... 2
2.1单据类型(Item Type)... 3
2.2属性(Attribute)... 4
2.2.1定义一个URL属性... 6
2.2.2定义一个Form属性... 6
2.2.3定义一个Document属性... 7
2.3流程(Process)... 7
2.3.1在你画流程图之前,你必须先定义一个流程活动来表达流程图:... 7
2.3.2画流程图... 8
2.4消息(Message)... 10
2.5函数(Function)... 12
2.6通知(Notification)... 13
2.7查找类型(Lookup Type)... 14
3工作流引擎... 15
3.1概览... 15
3.2启动工作流流程... 16
3.3活动的状态... 16
3.4通知工作流引擎... 16
3.5工作流引擎的数据库包... 16
3.6工作流相关的主要表结构... 17
1.1工作流的概念
Workflow是EBS的基础架构技术之一,系统中大部分流程性的通知和审批控制、账户按规则自动生成都是通过Workflow实现的
1.2工作流的目的
1.3工作流体系结构:
1.4工作流开发工具安装
在http://www.oracle.com/technology ... workflow/index.html下载页面上找到workflow client并下载下来,即为所要安装的Workflow Builder。
WorkflowBuilder介绍:
用来定义和修改工作流的图形化工具,运行在Windows操作系统上。可以将一个或几个工作流的定义保存到数据库中或保存成一个文件。
WorkflowBuilder由‘对象浏览器'和‘流程图表' 两种窗口构成。‘对象浏览器'以树状结构显示了工作流的对象构成,最上面一层是一个数据库连接或一个wft文件,下面一层显示的是在数据库或文件中包含的工作流定义,更下面一层的是构成一个完整的工作流定义的对象(例如:属性、流程、功能、通知、消息和快速编码)。‘流程图表'窗口使用‘对象浏览器'窗口中的对象来创建和修改工作流中的流程。
工作流的流程是由活动(活动可以是功能、通知或另一个工作流流程)和各活动之间的连线构成的。在应用中可以通过工作流引擎的API来调用一个工作流的流程。一个工作流的流程开始于一个‘开始'的活动。工作流引擎会自动地一个接一个地运行流程中的活动,直到遇到一个通知或一个暂停工作流流程的活动。当工作流引擎遇到一个通知时,它会调用通知程序来发送信息给某个角色,当用户或角色对通知作了回应,工作流引擎会接着运行后面的活动,直到遇到一个‘结束'活动。
在工作流的流程中可以使用循环、分支和平行结构以及使用子流程来实现复杂的业务规则。
2工作流的组成及创建
在Workflow Builder的对象浏览器窗口中以树状的方式显示了工作流的对象的组成,在树状结构的第三层(也就是项目类型的下面一层),包含以下这些分支:属性(Attribute)、流程(或子流程Process)、功能(Function)、通知(Notification)、信息(Message)和快速编码(Lookup Types);一个完整的工作流的定义就是由这些对象构成的。
2.1单据类型(Item Type)
组成工作流的对象的集合,在工作流流程中的每一个对象都必须从属于一个项目类型。企业的业务有很多类别,同一种业务对应有不同的业务流程,同时在业务流转的过程中处理不同的业务信息。单据类型其实就相当于一个业务类型。
单据类型属性主要是定义业务信息,另外还包含一些在其它对象需要引用的信息,例如通知里的接收人就可以作为单据类型的属性。单据类型的另外一项功能就是对工作流程进行分类 ,所有工作流里的其它对象都属于一个单据类型。
Item Type是个抽象的概念,为方便理解,可以看作就是一个工作流。
创建一个Item Type:
2.2属性(Attribute)
就好像PL/SQL中的全局变量,它可以全局地被工作流流程中的活动引用(例如:在审批采购订单的工作流流程中,采购订单的编号就是一个项目类型属性,在审批流程的活动中可以随时获得这个属性的值,也就是采购订单的编号)。
单据类型属性是和单据类型联系在一起的,它通常充当一个全局变量,可以被流程里的活动引用或者修改。单据类型属性包含流程完成所必需的单据信息。对于活动需要引用的信息或者通知消息里包含的信息,你通常需要定义一个单据类型属性。
创建一个Attribute:
属性具有10种类型,下面给出每种类型的说明:
你创建的任何Attributes类型会出现在浏览树的"Attributes"分支下,所有的函数属性出现在对应的函数下面,你可以从浏览树里双击一个属性浏览或修改属性的定义。
2.2.1定义一个URL属性
2.2.2定义一个Form属性
2.2.3定义一个Document属性
2.3流程(Process)
流程就是业务流程的流转规则。流程包括两部分:流程里包含的活动和各个活动在不同条件下的流转关系。在定义流程的时候,因为流程里的活动可能有不同的返回结果,我们需要把不同结果的处理活动和结果联系起来,另外在OracleERP里还定义了一些标准的返回结果(例如超时),你在定义流程的时候,也可以对这些内嵌的返回结果进行处理。在流程实例流转的时候,流程里的活动有自己相应的状态,工作流引擎得到活动的状态改变信息或活动返回结果之后,按照你定义的流程流转规则控制流程的流转。流程必须属于一个单据类型。
流程定义里有一个标志属性"是否可运行标志",如果一个流程是可运行的,则可以在窗体上可以直接调用,否则该流程只能作为一个子流程包含在其它的流程里面,工作流引擎在碰到流程活动的时候,会自动激活子流程,让子流程流转。
2.3.1在你画流程图之前,你必须先定义一个流程活动来表达流程图:
2.3.2画流程图
在Oracle Workflow Builder里,流程图采用一种图形化的方式来显示流程里的活动以及活动之间的转移。在流程图里用一个图标来表示活动,用一个箭头来表示活动之间的转移。你可以从浏览树里把一个活动拖拽到流程图里,也可以直接在流程图里创建一个活动,在流程图里双击一个活动节点可以查看或修改节点的信息。通过在两个活动之间画一个箭头来表示活动之间的转移。
转移在流程图里使用一个箭头表示的,它表示一个活动的结束以及另外一个活动的激活。如果一个活动的结果类型是None,则转移表现为一个指向另外一个活动的箭头,表示只要初始的活动一结束,就流向下一个活动。如果一个活动有返回结果类型,则你必须把转移和活动的一个结果联系起来,你也可以为定义了返回结果的活动定义下面的转移类型:Default,Any,Timeout。在没有任何转移匹配完成结果时,工作流引擎执行默认的转移;如果定义了一个人以的转移,则不论活动的返回结果是什么,工作流引擎就执行这个转移,这样可以保证你除了在工作流里执行和放返回结果对应的活动外,还可以执行一个通用的活动。如果一个活动在完成之前已经超时,则工作流引擎执行超时转移。一个活动的返回结果可以有多个转移来进行并行处理。
(1)增加一个节点
(2)定义一个节点
如果这个节点是一个子流程,则一个子流程的标识会出现在子流程节点图标上。
活动属性值主要是别PL/SQL存储过程服务的,这个存储过程被函数或通知活动调用。
2.4消息(Message)
消息主要是为通知服务的,可以把消息当作通知的内容和类型。消息也属于一个单据类型,通知只能和同一个单据类型里的消息相关联。
每个消息可以有一个或多个属性和自己相联系,消息的属性既可以是独立的属性,也可以是对单据类型属性的一个引用。在消息体内可以对消息的属性进行引用,这样在流程的实例里,如果已经对消息的属性赋值,则在引用消息属性的地方会自动的用消息属性的值替换。我们就可以在消息体内显示必要的信息。
你可以对一个消息定义自动流转规则,这样在工作流的实例里,当流转到和该消息对应的通知活动的时候,工作流引擎就会根据用户定义的自动流转规则自动向下流转,用户就不需要参与了。
消息时工作流程里通知活动发送给角色的内容,消息可以提示户对通知进行回复或者让用户采取一个动作决定下一个活动,在工作流里一个消息的接收者被称作"Performer";每个消息都和一个单据类型联系在一起,这样可以允许消息引用单据类型属性,在运行时进行标记替换。
当你定义消息的时候,可以指定接收者回复的值,然后工作流引擎根据用户的返回值决定流程的下一个活动,你也可以在消息的主题和消息体内包括消息属性使消息成为一个上下文环境敏感的消息。你可以从浏览树里直接把一个消息直接拖拽到通知分支下面创建一个发送该消息的通知,也可以把消息拖拽到一个已存在的通知活动上更新通知发送的消息。
当你为通知活动创建一个通知的时候,你需要注意通知是否规定了一个结果类型,如果有结果类型的话,你创建的通知需要提示通知接收者一些特定的响应用来解释通知的结果类型,工作流引擎使用这些结果决定流程需要流到哪些活动。要想创建一个对特殊响应进行提示的消息,你需要完成消息页面的"Result"页,你输入的信息创建了一个特殊的"Response"消息属性,它有一个内部名称"RESULT",结果消息属性的数据类型是一个查找类型,并且必须和通知的结果查找类型一致,这可以保证通知活动的执行者从一个通知活动期望的结果值列表里选择一个值。
一旦你创建了一个消息,你可以为消息定义需要的所有属性,在浏览树里消息的属性存放在消息的下面。消息属性的来源(Send or Respond)决定了消息属性的使用方式,你可以使用"Send"类型的消息属性进行标记替换或者和消息一块发送。每个消息类型都有一个数据类型,"Send"类型的消息属性可以是一个常量或者是一个对单据类型属性的引用。"Response"类型的消息属性组成了消息的响应部分,响应消息属性为接收者的响应提供了指令。如果你定义了一个响应消息属性,你必须给它指定数据类型,你也可以给它指定一个默认值,默认值可以是一个常量,也可以是对相同数据类型单据类型属性的引用。
创建一个消息:
2.5函数(Function)
函数就是一个可以自动执行的活动,该活动可以完成一定的功能,函数活动通常和一个PL/SQL存储过程或者一个Oracle内部的过程联系在一起,在定义函数活动的时候必须定义该函数对应的过程名称。
函数类型的活动有自己的参数定义,函数活动的参数主要是为对应的过程服务的。在运行的时候通过给函数活动的参数赋值,经过相应的处理之后,工作流引擎就会把函数活动的参数值传给相应的过程,这样就能保证函数的正确执行。如果对应的过程没有参数的话,可以不定义参数。
创建一个Function:
2.6通知(Notification)
通知活动对一个人或一个角色发送一个通知,通知必须和一个消息联系在一起。通知活动有自己的结果类型,返回的结果一般是根据用户的交互产生的,除非你在消息里定义了自动流转规则。
创建一个Notification:
2.7查找类型(Lookup Type)
查找类型是你定义的一些枚举数据,单据类型里的查找类型主要用来表达活动结果返回值类型,另外也可以在定义单据类型属性、活动属性、消息和消息属性时引用查找类型,一个查找类型有自己相应的值列表,在引用查找类型的时候,你只需要定义查找类型就可以了,和查找类型相关的值会自动过去的。
查找类型是一个静态值列表,这些列表可以被活动、单据类型、消息或属性引用,例如一个活动可以引用一个查找类型作为它可能的返回值。
当你定义一个查找类型的时候,你必须把它和一个单据类型联系起来;然而,但你在创建一个活动或属性的时候,你可以引用但前数据存储里的任何查找类型,不论这个查找类型和哪个单据类型联系在一起。
创建一个Lookup Type:
3工作流引擎 3.1概览
3.2启动工作流流程 要在应用中调用工作流的流程(例如:在采购订单的FORM中调用‘审批采购订单'的工作流流程),必须在应用的程序中使用启动工作流流程的工作流引擎API:调用WF_ENGINE.CreateProcess接着调用WF_ENGINE.StartProcess或单独调用WF_ENGINE.LaunchProcess。在这些API中都必须指定ITEM_TYPE和ITEM_KEY的值作为参数。3.3活动的状态 当工作流引擎执行一个活动时,它将修改活动的状态为以下的值之一:
3.4通知工作流引擎 在一个活动结束后必须通知工作流引擎。流程、通知和功能活动结束后会自动调用WF_ENGINE.CompleteActivity来通知工作流引擎它们已经运行结束。如果一个功能活动调用的是一段外部程序,那么外部程序需要调用WF_ENGINE.CompleteActivity,在活动结束的时候。3.5工作流引擎的数据库包 工作流引擎是由一些PL/SQL的数据库包组成的,大致包括:
保存工作流的定义,即类(大的种类,如:OEOH、OEOL)
保存当前系统中的工作流的名称(一个版本一条信息)
保存实际的工作流,或者说工作流的对象实例 例如:每当生成一条SO时,系统往里面插入一条记录(一行一条记录)
工作流每个NODE的属性信息
保存工作流实例的attribute最新值
保存工作流实例的各个activity的状态,比如完成否,返回值
保存工作流实例的notifications消息,基本是按顺序的,可以看发给谁了
角色视图,工作流引用角色的依据,有mail地址等信息
用户和角色关系视图,工作流可以根据它进行"群发" 总结:通过这几天对Oracle之Workflow的学习,主要是按照《深入浅出Oracle之Workflow实例详解》上面的实例操作,对工作流有了进一步的理解,本文档是我搜集网上的资料整理出来的,其中很多图例是对操作界面的讲解,不是实例,很多信息都是深入浅出里面没有的,希望对浏览的人有帮助 |