如何创建工作流文档新流程.docx
《如何创建工作流文档新流程.docx》由会员分享,可在线阅读,更多相关《如何创建工作流文档新流程.docx(32页珍藏版)》请在冰豆网上搜索。
![如何创建工作流文档新流程.docx](https://file1.bdocx.com/fileroot1/2023-1/12/0553356a-2bc9-4b50-8975-728d1dc50f25/0553356a-2bc9-4b50-8975-728d1dc50f251.gif)
如何创建工作流文档新流程
文档控制
UNIT1工作流概述
单元培训目标
◆了解工作流流程的概念
◆了解工作流的体系结构
◆了解工作流的特性
LESSON1概述
◆工作流主要用于完成以下三种业务需求:
1.在业务流程中发送、提供附加信息,这些附加信息以自助的Web页面或Form的形式存在,例如:
在Application中审批采购订单时,采购订单的form会作为附加信息提供给审批人。
2.定义业务规则。
使用WorkflowBuilder(图形化工具)修改业务规则的流程;使用PL/SQL写流程中活动的源代码。
3.发送电子邮件。
工作流可以以电子邮件的方式向任何Application的用户发送通知。
◆工作流体系结构:
1.开发者客户端:
只要在PC上安装了WorkflowBuilder并且可以连接到数据库,就可以用来创建和修改工作流的定义。
2.数据库服务器:
工作流是和Oracle的数据库集成在一起的。
3.应用服务器:
包括OracleWebServer、WebDB以及发送电子邮件的后台程序。
4.最终用户端:
安装了浏览器可以使用Application、接收工作流发出的邮件和使用用来监控工作流的Web页面。
◆工作流的特性和定义:
1.WorkflowBuilder:
用来定义和修改工作流的图形化工具,运行在Windows操作系统上。
可以将一个或几个工作流的定义保存到数据库中或保存成一个文件。
WorkflowBuilder由‘对象浏览器’和‘流程图表’两种窗口构成。
‘对象浏览器’以树状结构显示了工作流的对象构成,最上面一层是一个数据库连接或一个wft文件,下面一层显示的是在数据库或文件中包含的工作流定义,更下面一层的是构成一个完整的工作流定义的对象(例如:
属性、流程、功能、通知、消息和快速编码)。
‘流程图表’窗口使用‘对象浏览器’窗口中的对象来创建和修改工作流中的流程。
工作流的流程是由活动(活动可以是功能、通知或另一个工作流流程)和各活动之间的连线构成的。
在应用中可以通过工作流引擎的API来调用一个工作流的流程。
一个工作流的流程开始于一个‘开始’的活动。
工作流引擎会自动地一个接一个地运行流程中的活动,直到遇到一个通知或一个暂停工作流流程的活动。
当工作流引擎遇到一个通知时,它会调用通知程序来发送信息给某个角色,当用户或角色对通知作了回应,工作流引擎会接着运行后面的活动,直到遇到一个‘结束’活动。
在工作流的流程中可以使用循环、分支和平行结构以及使用子流程来实现复杂的业务规则。
2.工作流引擎:
工作流引擎是嵌在Oracle8i的服务器里的,执行由WorkflowBuilder创建的工作流流程的活动,监控每个活动的状态。
3.工作流定义导入程序:
导入程序运行在服务器端,用来将保存成wft文件的工作流定义装载到数据库中。
在WorkflowBuilder中也集成了导入程序。
4.通知系统:
用来给角色发送通知(角色可以是一个用户或一组用户)。
使用户可以通过电子邮件系统的客户端或Web浏览器来接收和回应通知。
5.通知汇总(NotificationWorklist)的Web页面:
通知汇总列出了所有当前用户尚未回应或确认的通知。
用户通过通知汇总的Web页面来阅读和回应发送给他的通知。
6.通知明细Web页面:
从通知汇总的Web页面可以连接到通知明细的Web页面,以查看每条通知的明细信息。
7.电子邮件方式的通知:
工作流的通知除了可以在11i提供的Web页面中查看,还可以以电子邮件的方式发送给Application的用户,这一功能是通过名为‘通知邮递员’(NotificationMailer)的后台程序实现的。
8.目录服务(DirectoryServices):
工作流的目录服务是存在于数据库中的三个视图:
WF_USERS、WF_USER_ROLES、WF_ROLES。
WF_USERS记录了工作流的用户,接收通知的偏好(以通知汇总的方式或电子邮件的方式)和用户的电子邮件地址;WF_USER_ROLES记录了用户和角色之间的关系,一个用户可以同时从属于多个角色(例如:
系统管理员的责任是一个角色,采购员的职位也是一个角色,一个用户可以即拥有系统管理员的责任又拥有采购员的职位),一个角色可以包含多个用户,用户和角色之间是多对多的关系;WF_ROLES记录了工作流中角色的信息,角色可以是一个用户、一个责任(所有拥有该责任的用户都属于这个角色)或一个职位(所有拥有该职位的用户都属于这个角色)。
工作流的通知系统根据目录服务来决定将通知发送给谁,以什么样的方式发送。
通知可以发送给一个单独的用户或发送给一个角色(一组用户)。
9.工作流的监控
◆系统管理员和用户可以通过Web浏览器来管理和控制工作流的实例。
通过Application提供的监控Web页面,用户可以查看某个工作流实例的状态(eg.运行中、已完成或出错),工作流实例运行到哪个活动以及相关的工作流实例的属性的值,用户还可以对工作流实例进行加速(跳过某个活动)或者重试(重新运行某个活动)。
UNIT2工作流流程
单元培训目标
◆理解工作流流程由哪些对象组成
◆计划一个工作流流程
LESSON1工作流流程的组成结构
◆项目类型(ItemType):
组成工作流的对象的集合,在工作流流程中的每一个对象都必须从属于一个项目类型。
◆项目类型属性(ItemTypeAttribute):
就好像PL/SQL中的全局变量,它可以全局地被工作流流程中的活动引用(例如:
在审批采购订单的工作流流程中,采购订单的编号就是一个项目类型属性,在审批流程的活动中可以随时获得这个属性的值,也就是采购订单的编号)。
◆流程活动(ProcessActivity):
在工作流的流程中包括三种类型的活动:
功能、通知和子流程。
◆功能活动(FunctionActivity):
对应一个PL/SQL的存储过程(例如:
在采购订单审批的工作流中,会有一个名为‘创建审批人列表’的活动,它所对应的PL/SQL存储过程执行从‘审批层次’的表中取出记录并将记录插入到‘审批人列表’的表中的功能)。
◆通知功能(NotificationActivity):
执行将特定信息发送给某个接收人的功能。
◆信息(Message):
通知的内容,必须将信息指定给某个通知。
◆快速编码(LookupCode):
指定给某个工作流对象的值列表(例如:
在采购订单审批工作流中回应通知—‘审批采购订单’的结果就是一个快速编码,回应的结果只能是‘审批’、‘拒绝’、‘转交’或‘审批并转交’之一)。
◆WorkflowBuilder:
在WorkflowBuilder的对象浏览器窗口中以树状的方式显示了工作流的对象的组成,在树状结构的第三层(也就是项目类型的下面一层),包含以下这些分支:
属性(Attribute)、流程(或子流程Process)、功能(Function)、通知(Notification)、信息(Message)和快速编码(LookupTypes);一个完整的工作流的定义就是由这些对象构成的。
LESSON2计划一个工作流流程
◆计划一个工作流的流程:
1.确定你的业务需求。
2.确定需求将由那些活动(步骤)来实现:
a活动的类型,功能活动、通知活动或子流程;
b.活动的结果是否会影响后续的活动,如果根据活动的结果的不同工作流流程会执行不同的后续活动(相当于PL/SQL中的判断结构),那么需要为活动的结果指定一个快速编码。
3.定什么时候启动工作流流程,例如采购订单审批的工作流是当用户在采购订单的Form中按下提交审批的按钮后启动的。
4.确定流程的结果,为流程的结果指定一个快速编码,例如采购订单审批的流程的结果有三个可能的结果值:
审批、拒绝或超时。
◆手工创建一个工作流的流程:
1.定义一个项目类型;
2.定义项目类型的属性;
3.定义快速编码以及每个快速编码包含的值;
4.定义信息;
5.定义信息的属性;
6.定义功能、通知以及子流程等对象;
7.在WorkflowBuilder的‘流程图表’窗口中,绘制工作流流程(通过从‘对象浏览器’窗口拖拽对象到‘流程图表’窗口,并在活动之间创建连线)。
◆在2.5版本的WorkflowBuilder中,用户可以通过向导来创建工作流流程。
UNIT3创建工作流流程
单元培训目标
◆绘制工作流流程
◆将标准的活动集成到流程中
LESSON1创建工作流流程
◆手工创建工作流流程的步骤请参考UNIT2的‘手工创建一个工作流的流程’
◆导入角色:
如果在工作流流程的通知活动中要将通知的接收人设为一个常数,也就是将通知发送给某个固定的角色,那么需要将角色的信息从工作流的目录服务导入到WorkflowBuilder中,步骤如下:
1.在WorkflowBuilder的‘文件’菜单下选择‘打开’菜单项,选择从数据库中(而不是从文件系统中)打开工作流,连接数据库然后选择一个要打开的项目类型;
2.在‘文件’菜单下选择‘导入’菜单项,从数据库中导入角色;
3.在‘查询角色’的域中输入查询条件,然后按‘查找’按钮;
4.然后在‘查询结果’的列表中选择你要导入的角色,单击‘添加’按钮将角色添加到‘已导入角色’列表中;
5.单击‘OK’按钮就完成了导入工作。
这时在‘对象浏览器’窗口中打开‘目录服务’的分支(和项目类型位于同一层次上)就可以看到你刚才导入的角色,并且在通知活动的属性中指定‘接收人(performer)’时可以选择到你刚才到入的角色。
◆绘制流程
每个流程都有一个或多个‘开始’的活动和一个或多个‘结束’的活动,在绘制流程之前你必须先进入到‘流程图表’的窗口中,可以通过以下几种方式进入该窗口:
1.在‘对象浏览器’窗口中双击流程活动
2.选择一个流程活动(将焦点定位到流程活动上),然后按Ctrl+E
3.选择一个流程活动(将焦点定位到流程活动上),然后选择‘编辑’菜单的‘流程明细(ProcessDetail)’菜单项(也可以右击流程活动选择该菜单项)
4.使用向导来创建流程活动,向导会打开‘流程图表’窗口并在流程中创建一个‘开始’活动和一个‘结束’活动。
在进入‘流程图表’窗口后,通过以下几种方式往流程中加入新的活动:
1.在‘对象浏览器’窗口中选择一个活动(子流程、功能或通知),将它拖拽到‘流程图表’窗口中
2.在‘流程窗口’的工具栏上按‘新流程(newprocess)’、‘新功能(newfunction)’或‘新通知(newnotification)’按钮,这时鼠标指针变成十字形,然后单击‘流程图表’窗口的空白处
3.右击‘流程窗口’的空白处,在弹出的菜单中选择‘新流程(newprocess)’、‘新功能(newfunction)’或‘新通知(newnotification)’菜单项。
在加入新的活动后,需要将活动连接成一个完整的流程(在活动之间画上箭头):
1.选择一个活动(源活动),按住鼠标右键,拖拽到目标活动,然后松开鼠标右键,这样会创建一个由源活动指向目标活动的箭头(注:
箭头也可以指向自己,即源活动和目标活动都是同一个活动,例如:
一个通知活动如果超时的话,那么重新再发一次通知)
2.如果源活动有几个可能的结果值,那么在创建箭头的时候会弹出一个包含所有源活动结果值的菜单要求用户选择一个结果值,并且这个结果值将作为箭头的标签显示。
关于活动之间的箭头的标签:
1.如果源活动没有结果值或者活动的返回值不在活动所分配的快速编码的范围内,那么它和目标活动之间的箭头的标签为,的结果就相当于If…Then…Elsif…Else...EndIf语句中的Else子句
2.如果源活动有结果值,并且在画指向目标活动的箭头时指定了某个结果时,那么箭头的标签为源活动的某个结果值(即相应的快速编码的某个的值的显示名称)
3.如果源活动有结果值,但无论结果值为什么它都将指向某个目标活动时,箭头的标签为,当源活动返回某个值后,工作流除了要运行相应的箭头所指向的目标活动以外还要执行后面的活动,在的箭头后面可以运行一些通用的活动(例如:
写log文件)
4.活动除了它所分配的快速编码所包含的结果值外,还会有活动超时的情况(例如:
通知一直没有被回应),这时箭头的标签为
5.对于实现‘投票表决’功能的工作流活动,还可以有平局的结果或没有结果,这时箭头的标签可以是或。
◆从上至下地设计工作流流程
在前面介绍的创建工作流的方式是由下至上地设计,即用户在进入‘流程图表’窗口绘制流程前,先要在‘对象浏览器’窗口中定义很多的底层对象(功能、通知、信息和快速编码)。
而从上至下的设计方法正好相反,你可以先在‘流程图表’窗口中绘制流程,然后再定义底层的对象。
这种设计方法是通过WorkflowBuilder的向导实现的。
用户在保存以这种方式设计的定义不完整的工作流时,WorkflowBuilder会显示一个列出所有错误信息的窗口,这些错误信息是由于流程或一些底层对象定义的无效引起的,用户仍然可以先保存该工作流,以后再对它进行修改。
◆校验工作流流程的有效性
当用户保存一个新创建或修改过的工作流时,WorkflowBuilder会自动校验工作流的有效性。
如果工作流流程未通过校验,则将弹出一个错误信息列表的窗口,在该窗口中显示了未通过校验的原因。
用户也可以进入‘对象浏览器’窗口,然后选择‘文件’菜单下的‘校验’菜单项,对工作流进行校验。
用户应该在每创建一个新的流程后,对新创建的流程进行校验,这将有助于发现一些有可能导致工作流流程无法正常运行结束的潜在的问题。
一些会导致校验失败的原因:
1.在一个工作流流程中是否存在‘开始’和‘结束’的活动
2.工作流流程是否有递归调用的情况,即在流程活动里面又将自己作为子流程进行调用
3.相同的子流程是否在同一个流程活动中被调用两次
4.对于活动的每一个结果值是否都有一个相应的箭头指向一个目标活动
5.‘结束’活动是否被当作了一个源活动指向了另一个目标活动
6.通知活动的结果值(快速编码)是否与分配给该通知的信息的结果值(快速编码)一致
7.信息的信息体内所引用的信息属性,是否真的在定义信息的时候被定义
◆修改流程中活动的节点属性
活动(功能、通知、子流程)可以在同一个流程中被重复使用,所以用户在‘流程图表’窗口中看到的每一个图标是活动的一个实例,即一个节点。
在活动的属性窗口中有一个‘节点’标签页,用于记录节点(也就是活动的实例)的属性。
在‘流程图表’窗口中选中一个活动然后按鼠标右键,在弹出的菜单中选择‘属性’菜单项,然后单击活动属性窗口的‘节点’标签页,对节点的属性进行修改:
1.确定活动在流程中是一个‘开始’活动、‘结束’活动还是‘一般’活动。
如果活动是一个‘结束’活动,并且流程本身有多个可能的结果值,那么需要为‘结束’活动选择一个流程的结果值,例如:
采购订单审批的流程有‘审批’和‘拒绝’两个可能的结果值,那么在流程的‘结束’活动中需要选择一个结果‘审批’或‘拒绝’,即当‘结束’活动执行结束后流程的结果是‘审批’还是‘拒绝’。
2.一个活动可能在流程中被多次使用,为了唯一地标识每一个节点,需要在被复用活动标签后面加上‘-n’,以唯一地标识它们。
3.如果活动是一个‘通知’活动,那么需要指定一个通知的执行人(performer),也就是通知的接收人。
通知的接收人可以是一个固定值,用户可以选择一个角色(前提是用户已经在WorkflowBuilder中作过工作流角色的导入);接收人也可以是动态的,这时用户需要选择一个项目类型的属性,在工作流流程运行后,通知将发送给项目类型的属性所指定的角色。
◆活动的属性(ActivityAttribute)
用户可以为项目类型定义很多属性,这些属性就相当于PL/SQL中的全局变量,在工作流流程运行的时候,任何活动都可以读写这些属性的值(例如:
在采购订单审批的工作流中,有一个名为‘文档编号’的属性用于存放采购订单的编号,在采购订单审批流程中的任何活动都可以读取这个‘文档编号’)。
对于流程中的活动,用户也可以根据业务的需要定义多个属性,这些属性的有效范围只局限于当前的活动,一旦这个活动运行结束,再也无法读写该属性的值,它就相当于PL/SQL中的局部变量。
在活动的属性窗口的‘活动属性(ActivityAttribute)’标签页中可以为活动的属性指定值,属性的值可以是常数也可以是动态的,如定义动态的属性值,那么它的值必须参考项目类型的属性值。
◆删除一个项目类型的属性
要从数据库中删除一个项目类型的属性,用户必须从数据库中打开项目类型,而不是打开一个工作流的文件,然后删除项目类型的属性并保存,这样将真正从数据库中删除项目类型属性的定义。
如果用户只是从文件中删除了项目类型的属性,然后将文将上载到数据库,这样并不能从数据库中删除该属性的定义。
◆‘标准’项目类型
在工作流安装后就会有一个叫‘标准’的项目类型,在这个项目类型中包含的一些功能和通知可以在别的项目类型中被引用,例如:
在流程中的‘开始’和‘结束’活动都可以直接调用‘标准’项目类型中的这两个功能,而无需用户每次都在‘对象浏览器’窗口中定义这两个功能。
◆查看工作流流程定义的WEB页面
在11i版本的Application中Oracle提供了一个用于查看工作流流程定义的WEB页面,在用户选择了要查看的工作流流程后,Web页面会显示该流程包含的所有对象以及这些对象的详细信息。
该页面的地址是‘/wf_item_definition.find_item_type’。
◆显示名称的冲突
在同一个项目类型或同一个流程活动中所有的对象的显示名称都必须是唯一的,如果显示名称有重复在保存将会报错。
如果用户使用工作流的导入程序来上载或升级工作流流程导数据库中,那么导入程序会自动解决显示名称冲突的问题,它会在那些重复的名称前拼上‘@’符号。
UNIT4定义项目类型、项目类型属性和快速编码
单元培训目标
◆创建项目类型
◆创建项目类型Selector/Callback功能
◆创建项目类型属性
◆创建快速编码
LESSON1定义项目类型、项目类型属性和快速编码
◆定义项目类型
在‘对象浏览器’窗口中定位到一个数据库链接(DataStore)或一个文件(WorkSpace),然后在‘编辑’菜单下选择‘新建项目类型’菜单项,开始新建一个项目类型:
1.输入项目类型的内部名称,该名称的最大长度为8个字符,并且不能包含冒号和空格
2.输入显示名称和它的描述
3.Specifythepersistencetypeforthisitemtype
4.Specifythenameoftheselector/callbackfunctionforthisitemtype.
◆项目类型Selector/Callback功能
◆定义项目类型属性(ItemAttribute)
需要定义哪些属性取决于业务的需要,就好像在写程序前需要确定要定义哪些变量一样:
1.某些需要在通知里面显示的内容,这些内容需要被定义成项目类型的属性。
例如:
审批采购订单的通知中会显示‘采购员’、‘供应商’等信息,所以需要定义用于保存‘采购员’、‘供应商’等信息的属性
2.在功能中经常要被引用的数据需要被定义成属性,例如:
采购订单工作流的项目类型属性‘采购订单编号’
3.通知的收件人信息也需要定义成项目类型的属性
创建项目类型属性的工作也是在‘对象浏览器’窗口中完成的,先选择一个项目类型,然后选择‘编辑’菜单下的‘创建新的项目类型属性’菜单项。
在项目类型属性的属性窗口中输入属性的内部名称、显示名称和描述,还要输入属性的数据类型。
属性的数据类型包括:
文本、数字、快速编码(枚举类型)、属性(参考另一个项目类型的属性的值)、URL、Form和文件。
◆Form类型的属性
Form类型的属性主要被消息的属性参考,用于用户从接收到的通知追索到相关的Form。
这种类型的属性,在通知明细的Web页面中,以图标的形式出现,用户点击图标可以打开相应的Form,例如:
在审批采购订单的通知明细的Web页面中,有一个‘采购订单’的图标,用户点击该图标可以打开采购订单的Form。
这类属性的值是一个包含在双引号中的字符串,格式如下:
parameterN=“Value”;双引号中字符串的值也可以参考另一个项目类型的值,格式如下:
parameterN=“&item_type_attribute”。
(Form类型的属性只有在Application中有效)
◆文件类型的属性
◆URL类型的属性
◆定义快速编码
◆快速编码从属于一个项目类型,但是可以被多个项目类型引用。
在‘对象浏览器’窗口中选择一个项目类型,然后选择‘编辑’菜单的‘新建快速编码’菜单项来创建一个新的快速编码,接着输入快速编码的内部名称、显示名称和描述。
在创建完快速编码后,需要为快速编码定义值(LookupTypeCode),选择一个快速编码,然后选择‘编辑’菜单的‘新建快速编码值’的菜单项,接着输入快速编码的内部名称、显示名称和描述。
UNIT4定义通知活动
单元培训目标
◆定义消息(Message)
◆定义消息的属性
◆定义通知活动
LESSON1定义通知活动
◆通知活动
Asteptocommunicatewithahumanbeing.Anotificationactivitysendsamessagetoausercontainingtheinformationneededtocompletethework.Thenotificationmayormaynotrequirearesponsefromtherecipient.
◆创建消息
在‘对象浏览器’窗口中,定位到对象树的消息分支上,选择‘编辑’菜单下的‘新建消息’菜单项,创建一个新的消息。
1.输入消息的内部名称、显示名称和描述
2.确定消息的优先级,当用户收到多条通知时可以按照消息的优先级对它们进行排序。
◆编辑消息的内容
消息的内容包括主题(Subject)和信息体(Body)。
主题是显示在通知汇总的Web页面里的,而信息体是显示在通知明细的Web页面里的。
定位到消息属性窗口的‘信息体(Body)’标签页上,分别编辑消息的主题和信息体,信息体可以是文本的形式或HTML的形式。
在标题和信息体中可以使用消息的Attribute,例如:
审批采购订单的工作流中有一个名为‘审批采购订单’的消息,消息包含了一个叫‘采购订单编号’的Attribute,这个Attribute的内部名称为DOCUMENT_NUMBER,消息的主题为‘请审批采购订单&DOCUMENT_NUMBER’,那么当通知发送给用户时消息主体中的‘&DOCUMENT_NUMBER’将由消息的Attribute的值取代,如果审批的采购订单的编号为100,那么消息的主题将是‘请审批采购订单100’。
◆定义消息的结果
如果消息需要用户做出回应,这时就需要定义消息的结果,消息的结果在消息的属性窗口中的‘结果’标签页中进行编辑。
输入结果的显示名称,这个显示名称将