




免费预览已结束,剩余76页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Doc Ref: 信息技术最佳实践二月 19, 2009信息技术最佳实践ORACLE核心应用技术工作流管理Workflow实例详解Author:黄建华Creation Date:April 17, 2007Last Updated:二月 19, 2009Document Ref: Version:DRAFT 1AApprovals: Copy Number_Document ControlChange Record4DateAuthorVersionChange Reference17-Apr-07Jianhua.HuangDraft 1aNo Previous DocumentReviewersNamePositionDistributionCopy No.NameLocation1Library MasterProject Library2Project Manager34Note To Holders:If you receive an electronic copy of this document and print it out, please write your name on the equivalent of the cover page, for document control purposes.If you receive a hard copy of this document, please write your name on the front cover, for document control purposes.ContentsDocument Controlii1.Oracle Workflow基础21.1.工作流概述21.2.必要设置71.3.先睹为快:一个简单例子.Start to End81.4.先睹为快:一个简单例子.Save to Database131.5.先睹为快:一个简单例子.运行142.其他特性和功能实例182.1.第2个例子:Notification182.2.第3个例子:Lookup Types和分支处理Function232.3.第4个例子:Loop、Timeout、Defer和Workflow Background Process352.4.第5个例子:Wait、Wait/Continue Process412.5.第6个例子:Document、Forms、Function Result、隐藏标准按钮482.6.第7个例子:常用的#变量533.常用代码块543.1.邮件发送过程543.2.Startup543.3.Notification553.4.Notification的Item Type、Item Key、Activity ID563.5.Active节点和当前属性值563.6.Retry和Skip573.7.Complete573.8.处理Defer583.9.建立父子关系583.10.Document和Forms583.11.Test工作流603.12.Cancel/Abort工作流603.13.Purge工作流实例/定义603.14.最新n条Notification613.15.等待发送Mail的Notification613.16.清理Notification613.17.Queue相关623.18.查找某用户是否具有某职责623.19.WF服务组件623.20.未完待续634.审批路径644.1.客户化表644.2.员工上下级644.3.职位层次644.4.OAM/AME645.Workflow Notification Mailer Configuration685.1.Basic685.2.Database Layer705.3.Application Layer705.4.System Layer715.5.Notification Mailer726.常见问题766.1.问题记录767.Open and Closed Issues for this Deliverable78Open Issues78Closed Issues78Open and Closed Issues for this Deliverable 78Workflow实例详解File Ref: E475767a64095cb0387f3c85fca37671.pdf (v. DRAFT 1A )Company Confidential - For internal use only1. Oracle Workflow基础职责:System Administrator用户: SYSADMIN1.1. 工作流概述工作流在EBS中的地位Workflow是EBS的基础架构技术之一,系统中大部分流程性的通知和审批控制、账户按规则自动生成都是通过Workflow实现的;R11i之后,模块间的协调,有一小部分也是通过Workflow的Business Event完成的。每种技术都有自己的特点和应用方向,仔细阅读下表,我们可以体会何种场景该使用Workflow。EBS中的技术特点企业应用Oracle DB关系型数据库,其实是最佳的设计模式和开发框架所有MIS系统的基础,最可靠的数据持久存储PL/SQL标准SQL+编程语言,Oracle所有开发工具的基石用于业务逻辑实现;系统质量的优劣、性能的高低,很大程度上取决于PL/SQLReports过去流行的可视化报表设计环境,开发效率高数据检索+报表展现,尤其是单据打印DiscovererBI展现工具,基于主题视图,分析企业数据因为布局工作量小,被广泛应用于普通报表开发ADI/Web ADI从日记账和FA起家,逐步发展为EBS最强的桌面工具数据检索+Excel展现、数据批量录入和修改XML Publisher基于XML工业标准,数据抽取与展现分离,布局设计平易近人又高度灵活丰富,与Java亲密集成数据检索+报表展现,除了单据打印,还可发布至合作伙伴Concurrent基于时间的任务并发、排队,合理利用系统资源立即、定时或周期执行程序、报表、维护和监控FlexfieldEBS最富特色的自定义字段,智能组合、智能验证会计科目、物料分类,业务特有信息的记录和传递Forms最快捷的数据库应用系统开发环境,UI不够友好Windows版的数据录入+数据处理+数据检索JSP/JTF/OAF效率比较高的基于浏览器的应用开发框架纯Web版的数据录入+数据处理+数据检索Workflow灵活的流程定义/自动化、通知发送、系统间集成流程式审批、流程式数据传递、事件式系统集成Alert基于触发器和定时器的数据监控、预警通知企业核心数据监控、系统运行异常监控Interface/API各模块开发人员留出的,除了UI外的数据“出入口”客户化业务、外围系统与核心ERP的集成Web Service基于Internet的计算和服务,可用于数据交换跑在Internet上的Interface/APIWorkflow满足的四个重要商业需求1、 发送通知Workflow可以发送两种类型的通知:消息性通知,如“你的申请被审批了”,不需要接收者做出任何响应;回应式通知,如“GL日记账需要你的审批”,接收者需要做出相应的Response,工作流才能继续前进。通知除了在系统中可以查看、处理外,也可以通过Mail查看、处理;可以本人处理,也可以转交他人处理。2、 流程定义Workflow正如它的字面含义,其专注于“工作流”的定义,用Workflow将如下“活动”组织成一个个业务蓝图,将是非常直观和容易的:基于PL/SQL的任何处理、基于AQ的通知、关联流程的等待与启动、瓶颈节点的超时处理。如果能够将企业业务科学的分解至合理的粒度子流程,那么不同业务在IT上的实现,就是将这些子流程有机的组合在一起。比如,销售订单工作流中的每一个子流程,是Oracle对销售业务分析后分解出的最佳粒度,不同企业可选择既有的流程组合,亦可重新组装。3、 系统自动化信息系统的自动化,是离不开信息流的,所以Workflow是天然的自动化工具,上面的流程定义,实际上亦可看作流程自动化,Worflow的极致就是Automation。4、 系统间集成如果把企业运作看作“当发生某个A事件时,需要我们作出一个或者一连串响应”,那么就可以理解,Oracle为什么将Workflow的“业务事件系统”置于系统间集成的地位包括与业务伙伴的集成。比如,S系统产生了一笔出库,需要在D系统完成订单的发运和开票,我们有很多种方案来实现,如果用“业务事件系统”,那么S系统只要向D系统发送一个消息说“我做了一笔出库”,D系统将自动触发“订单的发运和开票”操作。因为消息的发送,实际上是基于Oracle AQ这个现成、可靠的系统,S和D系统不需要时时连线;因为消息的处理是由“业务事件系统”根据“订阅关系”自动调度的,D系统也不需要不断的问S系统,你有没有数据。下面继续列举的,是利用Workflow的特性,进行的信息系统开发应用。5、 并行处理如果有10000张订单需要同时处理,那么最好考虑并发,否则性能将糟糕透顶。在EBS环境下有3种选择,一是不推荐使用的Job,二是推荐使用的并发请求,三是Workflow,尤其适用于处理过程中可能需要稍作停顿,等待某种干预的时候。6、 异步执行同步执行,意味着,如果一个耗时的处理不完成,程序将停止响应,尤其是UI界面,如果长时间“不许动”,绝对导致使用者的反感。如果这个耗时的动作,和用户目前的操作关系不大,可以放到后台慢慢去运行,那么就可以获得非常好的“系统响应时间”,在EBS中可以通过提交一个并发请求或者启动一个工作流来实现这种异步执行。Workflow在EBS中的应用下表按模块列举了EBS中的部分工作流:模块应用总帐模块(GL)日记帐审批、GL自动分配(GL成批分配流程、GL分配流程、GL过帐流程、GL经常性日记帐流程、PA分配组流程)、GIS(Global Intercompany System)通知应付模块(AP)AP采购卡经理审批事务处理、AP采购卡员工核实工作流、AP费用报表、AP开放接口导入、PO发送采购单据通知(PO单据审批催函)应收模块(AR)AR贷项通知单请求审批、AR替代平衡段项目会计(PA)PA项目审批工作流、PA预算工作流、PA逐级分配、PA生成项目供应商发票帐户、项目费用报表帐户生成器资产模块(FA)FA帐户生成器成本模块(CST)CST标准成本计算(WIP差异/WIP估价/保留款冲销/采购价格或产出率差异/库存估价/平均成本差异/入库检验/在途库存/帐户/制造费用分配/资源分配/组织间信用转让/组织间应付款/组织间应收款/组织间运费)、CST平均成本计算OPM产品开发(GMD)OPM质量控制检验测试、OPM质量控制验收样品、OPM质量控制样品创建通知OPM库存(GMI)OPM批次失效及批次重新测试、激活项目项目模块(PJM)PJM项目计划例外通知、项目制造系统的项目定义(合同)、项目制造系统的项目定义(间接/资本)人力资源(HR)GHR等级内提升、GHR人事活动、GHR职位说明、HR任务流(HR聘用人员流程、HR任务流模板流程、HR职业管理流程)、履历管理复查、人力资源聘用信、人力资源自助应用产品库存模块(INV)INV物料搬运单审批、库存销货成本帐户采购模块(PO)PO创建单据、PO确认接收、PO申请审批、PO申请帐户生成器、PO审批、PO帐户生成器订单管理(OM)OM订单题头、OM订单行工程模块(ENG)ECO审批车间模块(WIP)WIP发运和接收外协装配件、WIP更改PO需要日期质量模块(QA)QA自助采购员通知、QA自助事务处理通知计划模块(MRP)计划例外消息下面的SQL可以查当前系统中所有的工作流:SELECT b.NAME, t.display_name, t.description FROM wf_item_types b, wf_item_types_tl t WHERE b.NAME = t.NAME AND t.LANGUAGE = ZHS ORDER BY 1具体实例1、 GL日记帐审批流程2、 COGS销售成本帐户生成成本中心公司会计科目产品备注订单类型销售员物料订单类型3、 OM周期活动的控制发货确认库存接口完成订单输入挑选发放预订应收接口工作流的演进R10.7Flex Field builder流程组织型R11Workflow 2.03流程组织型R11iWorkflow 2.6流程组织型 + 事件驱动型Workflow的体系结构简单的体系结构图:应用服务器Email通知内置通知Web 浏览器工作流引擎Notification MailerOracle 7.3.2 or higher工作流监控器Workflow BuilderWorkflow Loader复杂的体系结构图:RolesUsersDirectory ServicesNotification ServicesSendRespondForwardCancelQueryOracle Workflow Enabled ApplicationOracle serverWorkflowEngineExecutionDefinitionAdministrationMonitoringQueryWorkflowBuilderWorkflowLoaderWorkflowDefinitionFilesiASNotificationMailerApplicationServerWebNotificationWorklistWebMonitorWebAnalysisToolsBrowser ClientMailApplicationsAQAQAQAQAQAQBusiness Event SystemSendReceiveRaiseListenQueryWorkflowBuilderWorkflowXML1.2. 必要设置下载/technology/software/products/workflow/index.html。这里有Workflow Builder和独立版本的Workflow Server。Workflow Builder安装选择一个独立的Home。配置Workflow Builder的tnsnames按照往常步骤配置tnsnames和hosts。如果是功能顾问,再看一下补充内容:通常从别人那里把tnsnames拷贝过来就可以,不过有时候不行;道理很简单,tnsnames.ora和sqlnet.ora两个加起来才构成SQL*Net协议的基本配置文件,而不同公司的sqlnet.ora可能会不一样;所以把这两个文件全部拷贝过来就99.99%不会有问题了。配置Workflow Builder的nls_lang语言和区域设置成和数据库服务器一样;字符集一般也是一样;如果服务器端为UTF8,那么就要设置成ZHS16GBK等,看情况而定。配置服务器端(Embedded)通常安装完EBS,服务器端就自动配置好了,除了Mail功能。新版EBS都用基于Java的Notification Mailer。可以参考本文的“Workflow Notification Mailer Configuration”章节,这里先略过。配置服务器端(独立版本)先装好数据库如9i,然后根据说明安装Workflow Server。我最初学习Workflow的时候就是用8i数据库加独立版的Workflow Server。下面是我当初的一些笔记:根据Server安装指南一般可以完成Workflow Server的配置。按我的经验,有几个地方需要注意1、可以直接使用8i的http,不用安装IAS,根据Server安装指南配置httpd.conf的别名即可;http服务起不来的可能情况2、httpd.conf语法错误,这个没什么好说的之前的服务没有正常结束,一般重新启动计算机即可;或者杀掉java进程,如果有的话新安装了Oracle其它产品,导致路径引用错误;我的解决办法是把新安装软件在环境变量Path中添加的路径移到最后如果要看httpd为何无法启动,查看Log是没用的;应该先运行CMD,然后cd到需要的目录,输入apache.exe,这个时候就会有错误出现2、Notification默认的配置是html email,这个时候易遇到Notification就报错,因为我们自己一般没有配置Mail服务器,所以需要在Global Workflow Preferences里面把Send me electronic mail notifications设置为Do not send me mail3、开始我没有配好Business Event System,在执行Approve等动作的时候老是No Data Found;后来我根据Error Stack找到wf_xml包,把里面的RemoveNotification的Raise语句注释掉就可以了。嘿嘿,反正我是自己研究工作流,无所谓了4、我的系统是XP Home SP1,没有JVM,无法View Diagram;装了JDK,不太好用,卸掉装msjavx86.exe一切正常。1.3. 先睹为快:一个简单例子.Start to End新建一个WFT文件N: Workflow Builder/File/New在开发阶段Workflow源代码一般保存在本地,扩展名是wft。我们新建一个工作流文件,然后保存,假定文件名为:CUX_WF_DEMO.wft。新建一个Item TypeN: Workflow Builder/Edit/New/Item TypeItem Type是个抽象的概念,为方便理解,可以看作就是一个工作流。Internal Name相当于Code,在程序中经常用它来标志一个工作流;Display Name相当于User Name。引用标准WorkflowN: Workflow Builder/File/Open我们选择从数据库打开,输入APPS用户名和密码及TNSNAME。找到Standard,点击 l_item_type, itemkey = l_item_key, process = l_process, user_key = l_user_item_key); -02 初始化 -本例不需要 -03 启动 wf_engine.startprocess(itemtype = l_item_type, itemkey = l_item_key); COMMIT; dbms_output.put_line(l_item_key); END;既然是PL/SQL,所以在Form等地方也是这样启动的。实际使用中几乎都是这样启动工作流的。所以下面的例子开始不用方式一了。接下来和上面的方式一一样去“Status Monitor”Tab页查看了。2. 其他特性和功能实例上面的例子虽然极其简单,但演示了整个过程,至少可以初学者迈出第一步;接下来我们看看一些其他重要的功能,至于基本操作,就不再详细说明了。2.1. 第2个例子:Notification准备N: Copy and Paste我们把上面的例子中的WF_DEMO这个Item Type拷贝一份;新的Internal Name为WF_0002。新建6个AttributeN: 选中Attribute/右键/New Attribute按如下表数据建立Attribute,用来保存提交者和审批者的信息。Internal NameDisplay NameTypeLengthAPPROVER_IDApprover IDNumberAPPROVER_NAMEApprover NameRoleAPPROVER_DSP_NAMEApprover Display NameText360SUBMITER_IDSubmiter IDNumberSUBMITER_NAMESubmiter NameRoleSUBMITER_DSP_NAMESubmiter Display NameText360Tips: Attribute相当于全局变量,供整个Item Type里面的元素使用,可以作为Message的附加属性,Send给用户看或者存储用户的Response内容比如Note和Forward To;Attribute另一个常用的地方是作为Notification的Performer。当然我们的PL/SQL代码是离不开Attribute,几乎任何PL/SQL函数都需要通过取得Attribute变量-判断Attribute变量-设置Attribute变量,决定程序如何走,返回什么值。这里先理解上面为什么要建3个类似的属性。对于程序来说ID是关键的,来源于各个表如FND_USER或者HR_EMPLOYEES;对于Workflow来说Name是关键的,来源于表WF_ROLES;对于最终User来说,Display Name是关键的,来源于表WF_ROLES。新建1个MessageN: 选中Message/右键/New MessageInternal NameDisplay NameText BodyAPPROVAL_REQApproval RequisitionJust for testing.Message from &SUBMITER_DSP_NAME注意上面对变量的引用方式;实际上Subject也可以引用变量,这样可以做到动态Subject。确定的时候系统提示找不到“SUBMITER_DSP_NAME”。Message中引用的变量必须在自己的Attribute中。可以手工建立:选中新建的这个Message/右键/New Attribute。简单起见,我们直接把Item Type级别的SUBMITER_DSP_NAME复制到新建的这个Message下面。新建1个NotificationN: 选中Notification/右键/New NotificationInternal NameDisplay NameMessageREQ_APPROVALRequisition ApprovalApproval Requisition修改CUX_TOPN: 把上面建的Notification拖到CUX_TOP(Demo Top Process)中。这个时候,再右键这里的Requisition Approval这个Notification查看属性,发现多了一个Tab:Node。只有在具体Process中的Notification才有这个Node Tab。按照如下画面设置Performer,也就是通知接收人。接下来的操作是:把原来指向End的箭头左键拖到指向Requisition Approval,再从Requisition Approval右键拖一条线到End,重新布局。结果如下:另存到数据库中略。启动工作流先要找个测试用户,可以是SYSADMIN;这里我用HUAJHUA。为使测试顺利,我验证了一下:SELECT r.NAME, r.display_name, r.orig_system, r.orig_system_id FROM wf_roles r WHERE r.NAME = HUAJHUA;结果是:HUAJHUAJianhua, HuangPER6987说明Huajhua这个用户已经关联了员工,且同步到了WF_ROLES这个表了。关于WF_ROLES请看下面配置章节的“目录服务”。启动脚本如下:(注意学习下面的初始化脚本)DECLARE l_item_key VARCHAR2(30) := CUX_DEMO_003; l_user_item_key VARCHAR2(30) := CUX_DEMO_UK_003; l_item_type VARCHAR2(30) := CUX_0002; l_process VARCHAR2(30) := CUX_TOP; l_submiter_id NUMBER := 6987; l_approver_id NUMBER := 6987; l_orig_system VARCHAR2(30) := PER; l_user_name wf_roles.NAME%TYPE; l_display_name wf_roles.display_name%TYPE;BEGIN -01 创建 wf_engine.createprocess(itemtype = l_item_type, itemkey = l_item_key, process = l_process, user_key = l_user_item_key); -02 初始化 wf_directory.getusername(p_orig_system = l_orig_system, p_orig_system_id = l_submiter_id, p_name = l_user_name, p_display_name = l_display_name); wf_engine.setitemattrnumber(itemtype = l_item_type, itemkey = l_item_key, aname = SUBMITER_ID, avalue = l_submiter_id); wf_engine.setitemattrtext(itemtype = l_item_type, itemkey = l_item_key, aname = SUBMITER_NAME, avalue = l_user_name); wf_engine.setitemattrtext(itemtype = l_item_type, itemkey = l_item_key, aname = SUBMITER_DSP_NAME, avalue = l_display_name); wf_directory.getusername(p_orig_system = l_orig_system, p_orig_system_id = l_approver_id, p_name = l_user_name, p_display_name = l_display_name); wf_engine.setitemattrnumber(itemtype = l_item_type, itemkey = l_item_key, aname = APPROVER_ID, avalue = l_approver_id); wf_engine.setitemattrtext(itemtype = l_item_type, itemkey = l_item_key, aname = APPROVER_NAME, avalue = l_user_name); wf_engine.setitemattrtext(itemtype = l_item_type, itemkey = l_item_key, aname = APPROVER_DSP_NAME, avalue = l_display_name); -03 启动 wf_engine.startprocess(itemtype = l_item_type, itemkey = l_item_key); COMMIT; dbms_output.put_line(l_item_key);END;查看运行结果先用Huajhua登录系统。按照例子1种的查看方式,进入Notification Tab页;当然系统中很多地方都有Notification这个菜单,基本都是一样的。结果如下:点击Subject列的链接可以看到:退出,换成Sysadmin登录,来看看Diagram:由于这个例子的通知不需要响应(Response),也就是不需要返回值,所以整个工作流已经成功运行到End。2.2. 第3个例子:Lookup Types和分支处理Function准备N: Copy and Paste我们把上面的例子中的CUX_0002这个Item Type拷贝一份;新的Internal Name为CUX_0003。新建1个Lookup TypeN: 选中Lookup Type/右键/New可以直接使用Standard的Lookup Type;如果Standard的不符合要求,可以自己建。这里我们拷贝标准的:从Standard下CTRL+拖动Approval到我们的Lookup Types下,并改名,然后加一个Lookup Codes。按如下表数据建立Lookup Types,用来代表审批者的审批选项。TypeInternal NameDisplay NameLookup TypesCUX_APPROVALApproved or Rejected resultLookup CodesCANCELCancel新建2个Item Type级别的AttributeN: Internal NameDisplay NameTypeLengthNOTENoteText480DOCUMENT_IDDocument IDNumberDOCUMENT_NUMBERDocument NumberText30DOCUMENT_AMOUNTDocument AmountNumber修改Message的属性N: 首先把上面新建的Attribute统统拉下来;其中关键要改一下 Note属性的Source为Response,这个用来保留审批者输入的备注信息。接下来,在Message Approval Requisition属性的Result标签页,增加上面新建的Lookup Type内容如下Display NameLookup TypeDefault ValueApproval ActionDemo ApprovalApprove再修改Subject为:Document : &DOCUMENT_NUMBER Requires Your Approval修改Text Body,内容为:Please Approve The Following Document.From &SUBMITER_DSP_NAMEDocument Number: &DOCUMENT_NUMBERDocument Amount: &DOCUMENT_AMOUNT修改HTML Body,内容为:Your Note: &NOTEPlease Approve The Following Document.From &SUBMITER_DSP_NAMEDocument Number: &DOCUMENT_NUMBERDocument Amoun
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 电缆知识及销售技巧培训课件
- 电线生产知识培训
- 第13章 品牌消费心理与行为
- 高级养老护理员培训
- 高炉水工基础知识培训课件
- DJ-89-生命科学试剂-MCE
- 北京安全员考试c试题及答案
- 北大数学训练营考试题及答案
- 护士电子考试题及答案
- 保安知识考试试题题库及答案
- 图标设计与制作PPT完整全套教学课件
- 感染性休克教学查房演示文稿
- 碎石组织供应及运输售后服务保障方案
- 护理服务规范整改措施(共15篇)
- 幼儿园教育活动设计与实践 张琳主编 PPT
- 建筑施工过程中成品保护施工方案
- 法律职业伦理(第二版)完整版教学课件全书电子讲义(最新)
- 西师版三年级上册数学全册教案(完整)
- 关键过程(工序)和特殊过程(工序)管理办法
- 整套VI品牌形象设计项目报价(费用明细)
- 武术校本课程武术基本功
评论
0/150
提交评论