OAF系列之一基础教程.doc

上传人:文库蛋蛋多 文档编号:2388078 上传时间:2023-02-17 格式:DOC 页数:67 大小:1.82MB
返回 下载 相关 举报
OAF系列之一基础教程.doc_第1页
第1页 / 共67页
OAF系列之一基础教程.doc_第2页
第2页 / 共67页
OAF系列之一基础教程.doc_第3页
第3页 / 共67页
OAF系列之一基础教程.doc_第4页
第4页 / 共67页
OAF系列之一基础教程.doc_第5页
第5页 / 共67页
点击查看更多>>
资源描述

《OAF系列之一基础教程.doc》由会员分享,可在线阅读,更多相关《OAF系列之一基础教程.doc(67页珍藏版)》请在三一办公上搜索。

1、OAF 系列之一 基础教程 Author:Danny ShenCreation Date:May 9, 2006Last Updated:一月 1, 0001Document Ref:Version:1.1文档控制变更记录3日期作者版本变更说明02/05/07Danny Shen1.0创建审阅姓名职位分发拷贝编号姓名位置/岗位1项目资料室234Note: Copy Number space on the cover of each distributed copy. If the document is not controlled, you can delete this table, th

2、e Note To Holders, and the Copy Number label from the cover page.目录文档控制ii概述1前提知识1对象读者1其它说明1如何掌握OAF开发技术2推荐的学习步骤2OAF基础知识4JSP应用的基本结构4OAF应用的基本结构6模型组件的实现10模型对象介绍10模型对象的设计14推荐的OAF开发过程15业务组件创建方法16用户界面的实现38页面、Region、Item38创建可重用的控件(Component)39属性集42URL参数控制43样式表45与模型的交互45OA Controller的实现49OA Controller的设计49创建

3、OA Controller50处理HTTP GET请求51处理HTTP POST请求54处理HTTP POST请求55常用方法示例56禁用验证58环境配置与应用发布59开发环境安装与设置59应用发布62概述此文档用于讲解在Oracle E-Business Suite(以下简称EBS)下如何应用OA Framework(以下简称OAF)开发框架,进行客户化开发。此文档主要介绍OAF的基础知识,其中涉及如何建立开发环境、OA Framework MVC框架介绍及各部分说明、如何发布应用等方面。要掌握更深更系统的OAF技术知识,请查看Oracle Application Framework Dev

4、elopers Guide。前提知识此文档假定读者已经具备以下条件:l Web开发的基础知识l Java语言基本编程技术l 面向对象开发的基本知识l XML的基本知识对象读者此文档适用于以下人员:l OAF开发人员l OAF测试人员其它说明本来是想翻译Oracle Application Framework Developer s Guide作为OAF的教程。在进行了一半之后,觉得这样做的意义不大,因为作为开发人员不应该一些英语单词就成为学习Oracle技术的障碍。本套文档共四篇:第一篇 基础教程第二篇 专题讨论第三篇 个性化第四篇 经验技巧截至5月中旬,目前其中第一篇已完成,第三篇请陈明权帮

5、我完成,第二篇会不断收录,第四篇处于整理素材阶段。如果文档中有任何不妥之处请及时联系,如果您有需要添加的,请直接添加或Email联系。如何掌握OAF开发技术在开始对OAF进行介绍之前,首先来谈谈我们怎么样去学习它。这里谈的都只是我个人所认为的一个应该的学习步骤,我想这个只能作为参考。我觉得打下一个扎实的基础对于掌握和深入学习OAF有着非常重要的意义。如果没有学过Java,没有做过Web,不知道HTML,不懂得面向对象那么就应该抽空先打好基础,建议先学习Java编程思想一书。在学习的过程中,除了了解各个API、每种控件的使用方法,最重要的是要培养编程的思想,要多思考问题,多问自己几个为什么。为什

6、么要这样写代码?除了这种方式我还可以用什么方式实现?那种方法才是最好的?这一句代码背后到底做了什么?为什么相同的代码,这里对,那里就错?为什么Oracle API没有提供我认为更合理的功能呢?实践是最好的学习方法,思考是最好的提高手段。推荐的学习步骤第一阶段,掌握基本知识首先要掌握一些基本的原理知识,要有一个进行OAF基本的概念,知道一个大致的开发过程和思路,看一下以下的问题,是否都可以直接回答出来,或者在脑中有清晰的认识:l 什么是Web应用l OAF框架的组成及各个组成部分所实现的功能l BC4J中有哪些对象,各有什么用处l OAF页面的构成l OA控制器如何工作,OAF各组成部分如何协作

7、实现应用功能第二阶段,通过Toolbox练习掌握基本开发技术在对OAF有了一个较深的认识之后,下一步就开始实践练习。即使对Oracle的教程记得非常熟,但是没有实践练习是不可能开发出OAF程序的,而OA Framework Toolbox Tutorial是一个非常好的练习教程。每一课开始之前都有一个学习目标,在做练习之前必须先了解这些目标,等到做完该课练习之后,再去检查一下,是否通过练习都掌握了目标。如果没有达到目标或有不理解的内容,就不要急着进入下一课,即使是从头再做,也要等掌握了之后才开始新的一课。这里要提醒的是,不要把教程上的代码拷贝到JDeveloper中进行练习,我们并不追求练习进

8、度,相反的每写一句代码或一个逻辑段应停顿一下,仔细想一下,这些代码是起什么作用的,同时要记住一些OAF类的用法。只有自己能想通了之后,才可以进行下去。在做练习的时候,可以同时去学习OA Framework Developers Guide中的内容,进一步巩固OAF原理知识。根据以往经验,在做练习时总会遇到各种问题,要掌握分析问题解决问题的能力,这里很重要的一点就是查看报错信息和日志(经常查询的有Oracle Database Error Messages和Oracle ADF Business Components Error Messages及JDK API文档)。注意:不要期待只做了一遍T

9、oolbox就可以掌握基本的开发技术,重复Toolbox练习是一种不错的巩固手段。当自己认为可以开始开发后,可以自己去构想一个应用进行尝试。第三阶段,进一步学习当完成Toolbox练习之后,就可以认为已经入门OAF开发了,此时需要进一步的学习OAF的开发教程,进一步掌握各个BC4J对象的使用方法,学习各个UI控件的使用方法。同时很重要的一点就是积累平时的经验和自己新的认识。当然这样还是不够的,我们不仅要追求OAF知识的广度,还要追求深度。除了能按照Toolbox练习那样开发程序,还要学会如何设计一个OAF应用结构。OA Framework文档中包含多个类库的API,需要掌握许多常用类的使用方法

10、,同时可以学习一些EBS中Oracle的标准代码和设计,提高自己的编码设计能力。目标学习OAF开发技术之后,在将来的实际开发过程中,希望各位初学者能达到以下的目标。l 当拿到一本MD050设计书之后,可以衡量是否功能可实现,甚至提出更可行的设计l 当拿到一本MD050设计书之后,可以独立设计OAF应用,包括 如何设计BC4J对象,需要建多少个实体对象、视图对象、应用程序模块及其实现的接口等 如何设计页面,需要创建多少个页面,每个页面应该怎样排版及使用什么Region和Item 需要在哪些Region上创建控制器,每个控制器需要实现什么功能 需要创建哪些工具类(帮助类)及共通方法l 能够预估开发

11、难度、开发量(代码行数)及开发周期l 能够独立完成编码并测试OAF基础知识本章首先以一个最简单的JSP应用的场景,介绍一下Java Web应用的最基本知识。然后结合OAF框架讲解OAF的基本原理知识。本章的学习目标:l 理解模型-视图-控制器框架设计模式l 理解OA Framework中业务逻辑和数据处理(模型)的部分:BC4J,及主要的BC4J对象。l 理解OA Framework中用户界面(视图)的处理:基于UIX的OA Extension和元数据库。l 理解OA Framework中的控制器:OA Controller,使用户可以通过视图操作模型数据。JSP应用的基本结构什么是Web应用

12、Web应用是使用Web浏览器通过Internet或Intranet访问Web服务器上的应用程序。我们并不需死抠外界对于Web应用的定义,而应该去了解Web应用的基本结构。Web应用包括两个步骤:l 用户通过Web浏览器向Web服务器发送请求,如访问一个页面或填写一个表单后提交表单l Web服务器作出响应,将处理完成的HTML传回浏览器,用户可以查看处理的结果下一节介绍典型的JSP应用结构。JSP应用简介一个典型的JSP应用包括以下几个部分:客户端浏览器、数据库服务器和中间层Web服务器。基本的B/S应用结构l 浏览器和中间层通过HTTP协议进行通信。当用户通过浏览器向Web服务器请求一个JSP

13、文件时,浏览器发送一个HTTP请求到WEB服务器。 JSP文件是一个混合了Java代码和HTML代码的脚本文件,在运行时,JSP文件将被编译成servlet类。 通常把与数据相关的业务逻辑封装在JavaBeans中,这样可以实现业务封装和重用。中间层Web服务器和数据库端是通过JDBC接口实现数据存取。JSP中调用这些JavaBeans来处理业务逻辑。l Web服务器处理完成之后(处理完数据库交互,并且产生HTML代码),向浏览器返回一个HTTP响应,将HTML返回给浏览器。HTTP不是一种基于连接的协议,通过Servlet Session可以保持浏览器和Web服务器的状态,完成一系列相关的操

14、作。Servlet Session一般还需要通过浏览器端保持Cookie来实现。HTTP请求浏览器向Web服务器HTTP请求可以有多种,这里介绍最重要的两种,也是我们必须要了解的两种请求:GET和POST。1、HTTP GET当用户在浏览器地址栏输入网址,通过点击链接或带链接的图片,链接到某一网址,浏览器将向Web服务器发送一个GET请求。2、HTTP POST一般情况下,任何来自Form的提交都将触发POST请求(当然Form请求也可以触发GET请求,但这种情况我们不作考虑,而且在OAF中Form的提交全部触发POST请求)。页面间迁移在通常情况下通过点击页面上的链接迁移到新的页面,这也是G

15、ET请求最常见的方式。另外还包括以下两种方式的迁移:1、JSP Forward这是一种发生在服务器端的页面迁移,浏览器并不清楚在服务器上发生的这一迁移。同时,两个页面共享来自浏览器的同一个请求。2、Client Redirect这种迁移是浏览器自动发送新的页面的请求,新的页面不能分享来自前面页面的请求。3、POST来自Form的提交所产生的POST请求,可以直接迁移到新的页面。注:一般情况下,我们不用过于仔细的区分请求是GET还是POST,而在OAF中,我们只需要记住以下原则,所有的GET请求、JSP Forward、Client Redirect(JSP Forward和Client Red

16、irect对于新的页面而言也可以认为是GET请求)都会触发新页面中OA Controller类的processRequest()方法。OAF应用的基本结构OAF框架是一个基于MVC架构的应用框架,学习OAF必须理解MVC框架,因为实际上OAF开发也是对M-V-C这3层结构进行开发。MVC架构设计简介OAF是一个应用Model-View-Controller(MVC)架构设计的开发框架。MVC结构图Model(模型):封装底层数据和业务逻辑。View(视图):向用户展示格式化过的来自模型的数据。Controller(控制器):响应用户动作及导航应用流程。OAF Model、View、Contro

17、ller简介OAF开发框架使用Oracle Business Components for JAVA(以下简称BC4J)框架作为其模型部分,来实现业务逻辑和数据操作。OAF使用元数据库支持的(整个页面由XML来定义,定义存储于Oracle数据库中)UIX框架作为其视图部分,将BC4J中的数据展示给用户。OAF页面是通过JDeveloper工具定义XML结构,一般情况下不需要编程实现。OAF采用OA Controller作为控制器部分,OA Controller将模型数据显示到用户界面,并响应用户动作。下图形象地表示了OAF中模型、视图和控制器每一层所包含对象和所实现的功能。OAF M-V-C结

18、构图l 模型模型部分包含了3个最基本的BC4J对象:实体对象、视图对象和应用程序模块。实体对象(Entity Object):图中“SupplierEO”。实体对象直接表示了数据库的数据,并实现了创建行、删除行和验证行的功能,同时自动实现实体和数据库之间的数据同步(通过实体对象自动调用DML操作,这由BC4J框架实现,无须编程控制)。视图对象(View Object)直接引用实体对象中的数据(或数据库中的数据),视图对象提供了页面显示所需的数据(页面不能直接引用实体对象中的数据,必须通过视图对象才可以显示给用户)。视图对象可以基于实体对象创建,也可以基于数据库查询SQL创建。针对基于实体对象的

19、视图对象的更改可以被直接同步到数据库中,而针对基于SQL查询的视图对象不能直接同步到数据库中,因为只有实体对象才实现调用DML操作,将数据更新到数据库中。如图中 “SuppliersVO”,直接引用数据库的只有单向的读,而通过实体对象可以实现双向的读写。应用程序模块(Application Module):提供了容器,用于容纳视图对象实例和嵌套的应用程序模块实例。同时提供了存取数据的唯一接口:通过查询视图对象实例获取数据;通过更改视图对象实例来更改实体对象的数据,最终更改数据库中数据。注意:这里提到视图对象和视图对象实例,类似于类与对象的关系。视图对象是定义,而视图对象实例是运行时存在于应用程

20、序模块实例的,真正拥有数据(视图行集)的视图对象实现类的实例。本文中会多次提到视图对象和视图对象实例,有时并没有细分,这两者指的是相同的内容。l 视图从图上我们可以看到,OAF页面实际上是一个Web Beans的hierarchy结构,由唯一的根Web Bean(pageLayout)开始展开,形成一个树型结构。每个Web Bean都由一个Java Bean或一组Java Beans实现,在运行时根据定义或编程设置来产生HTML代码。有两种类型的Web Bean:Region和Item。Region是一种容器,可以容纳其它Region和Item,而Item是最小单位,不能再容纳其它元素。如Ta

21、ble是一个包含行、列、单元格的Region,而Button是一个Item。同时Region可以拥有自己的Controller类和应用程序模块,而Item不可以(根Web Bean,即pageLayout必须指定应用程序模块来作为根应用程序模块)。说明:对于简单的页面一般只在pageLayout上指定根应用程序模块和控制器类,甚至可以不指定控制器类。而对于复杂的页面(特别是存在可共用Region的时候),除了指定根应用程序模块之外,还需要根据功能逻辑划分,指定应用程序模块和控制器。虽然这增加了文件维护的代价和可能的程序运行时的性能(需要实例化更多的对象),但是把不同的逻辑功能组织在各自的应用程

22、序模块和控制器中,有利于理解程序结构的分解和设计,有利于编码的组织和维护。页面向用户展示来自模型(视图对象实例)的数据时,是通过数据绑定机制来实现的,通过设置Item的两个属性:View Instance Name和View Attribute Name,通过在Controller类中执行视图对象实例的查询,将数据从数据库中提取出来,将属性值赋给Item。在用户请求OAF页面时,OAF创建web bean hierarchy,从根Region开始依此调用每个Region上的Controller类的代码进行处理,处理完成后将web bean hierarchy传递给UIX框架来生成HTML代码,

23、返回给浏览器。l 控制器控制器由OA Controller类实现,用于初始化页面和响应用户操作。OA Controller类有两个最主要的方法,绝大多数情况下我们都是对这两个方法进行编程: processRequest()用于处理GET请求,一般也用于初始化用户界面显示和视图对象查询。 processFormRequest() 用于处理POST请求,一般用于捕获和处理用户事件。注意:在processFormRequest时,不能直接更改Region/Item的属性(仅有少数几个属性可以更改,可以通过属性和视图对象实例绑定实现更改),一般不用于更改用户界面。如果用户在页面A输入了数据,然后单击按

24、钮,事件处理完成后迁移到页面B,那么其处理过程如下: 对于所有的页面A中Region带有Controller类的,依此执行processFormRequest() 执行完成后,调用Forward或Redirect到页面B 对于所有的页面B中Region带有Controller类的,依此执行processRequest()OAF应用结构和传统的Web应用一样,OAF应用也是由客户层(浏览器)、中间层(Web服务器)和服务器层(数据库服务器)组成,如下图:在中间层又分成客户端和服务器端,客户端主要处理视图和控制器部分的逻辑(位于webui包下的类和页面),而服务器端处理模型部分的逻辑(位于serv

25、er包下的类和XML文件),中间层的客户端和服务器端这种分离设计是为了支持将来可能存在的分布式应用。这里我们要区分MVC是一种架构设计模式,和这一节所说的应用结构不同,我们应该按照M-V-C这样的逻辑分层去开发应用,同时了解OAF的应用结构。一般情况下,我们总是先从模型部分开始应用开发,首先定义完模型中的实体对象、视图对象、应用程序模块等等,然后创建视图部分的页面和共享Region,再开始控制器部分开发,在编写OA Controller类时,也可以根据需求增加或修改应用程序模块中的方法。模型组件的实现本章学习目标:l 理解BC4J的基本知识l 理解实体对象及其应用l 理解实体关联(Entity

26、 Association)l 理解视图对象及其应用l 理解视图连接(View Link)l 理解应用程序模块l 理解Transaction模型对象介绍模型对象结构图在上面介绍过BC4J中实体对象、视图对象和应用程序模块,这里将介绍全部的6个模型对象,下图展示了基本的模型结构图:基本模型结构OAF模型部分主要包括 以下类(接口):l 应用程序模块(Application Module):容纳相关BC4J对象的容器l 实体对象(Entity Object):封装底层数据库数据和业务逻辑l 视图对象(View Object):将底层的数据,提供给页面显示l 实体关联(Association):定义实

27、体对象间的关系l 视图连接(View Link):定义视图对象间的关系l 事务对象(OADBTransaction):封装JDBC连接应用程序模块(Application Module)应用程序模块是BC4J中最重要的一个对象,它管理着页面显示所使用数据的视图对象实例。1、应用程序模块定义了逻辑数据模型及应用所需的业务方法应用程序模块可以容纳它所容纳的所有视图对象实例、表示主-从关系的VL实例及嵌套应用程序模块实例,构成一个逻辑数据模型。一般情况下,我们都通过JDeveloper以声明的方式创建这个数据模型,也可以在运行时通过编程的方式动态的为应用程序模块实例创建视图对象实例和嵌套应用程序模块

28、实例。(嵌套Region中定义的下层应用程序模块自动成为上层的嵌套应用程序模块)当页面的Region与一个应用程序模块相关联,那么Region内的其它Item或嵌套Region就可以与应用程序模块内的视图对象实例进行绑定,同时在该Region关联的Controller类中就可以调用应用程序模块内定义的业务方法,主要业务方法如:初始化或执行特定的视图对象查询、客户化的功能(遍历、属性赋值、拷贝、删除等)操作视图对象实例、其它特定功能(操作实体对象、调用JDBC等)。2、处理事务及事务一致性根应用程序模块拥有OADBTransaction对象,提供了一个事务环境,可以建立数据库连接,实现JDBC调

29、用及提交事务和回滚事务。嵌套的应用程序模块可以引用根应用程序模块的OADBTransaction对象。对于多页面的事务流程,由每个页面设置共同的根应用程序模块,在各个页面流转时,通过保持根应用程序模块(通过URL参数retainAM=Y),可以保证事务的一致性和完整性。注意:每个页面都必须指定根应用程序模块,通过页面根元素(pageLayout Region)定义,这样页面就可以使用根应用程序模块及嵌套应用程序模块所拥有的视图对象实例(通过数据绑定实现),将模型的数据,展示给用户。当使用JDeveloper创建了一个应用程序模块后,系统将创建一个XML文件和一个Java文件,XML文件里定义了

30、应用程序模块中所容纳的视图对象实例和嵌套的应用程序模块实例。Java文件是应用程序模块的实现类,可以为该类添加业务方法,由Controller类调用。实体对象(Entity Object)实体对象在大部分的场合下都代表了数据库表中的记录,为模型提供底层数据和业务逻辑。1、实体对象可映射到数据库表或其它数据源(我们目前只考虑数据库表的情况),每个实体对象实例代表了数据库表中的一行记录,实体对象实例的每个属性代表了该行记录的列。2、实体对象包含了属性级和实体级验证逻辑,与表相关的业务逻辑。3、实体对象实现了与数据库的同步,包含了与数据库之间的基本的数据操作inserts/updates/delet

31、es。4、实体对象还可以根据需要,创建客户化的业务方法。注意:l 要基于表建立实体对象,则表必须包含5个标准WHO字段,这5个字段由实体对象自动处理,不需要开发人员赋值。l 实体对象也可以基于多表的视图建立,常用于PL/SQL 实体对象,对于该类实体对象将在文档后面做详细介绍。当使用JDeveloper创建了一个实体对象后,将创建一个XML文件和一个JAVA文件。XML文件定义了每个实体属性的基本信息如名称、对应的数据源列、数据类型等等。Java文件是实体对象的实现类,包含各个属性的访问方法setter和getter,及创建、删除、验证等方法。实体关联(Association)实体关联定义了两

32、个实体之间的关系,多用于主从开发时。实体之间存在两种关联,引用关联和组合关联。引用关联表示实体之间一种弱的关系,两者本身都可以独立存在,比如采购订单头与供应商之间的关联。组合关联是一种强的关联关系,比如订单头和订单行,订单行不能独立于订单头而存在。主从关系的两个实体建立实体关联之后,将具备以下行为,这些行为在以后的开发过程中都是需要理解的,并且根据此行为合理编写代码:l 当明细实体对象是dirty时(被修改过),主实体对象将自动变成dirty(状态自动变成已修改)。l 当明细实体对象被锁定时,主实体对象将自动被先锁定。l 当实体对象进行验证时,首先验证明细实体对象,然后验证主实体对象。l 在进

33、行数据库DML操作时,对于Insert/Update先执行主实体对象,对于Delete则先执行明细实体对象。当使用JDeveloper创建了一个实体关联后,将创建一个XML文件,文件定义了关联的两个实体对象以及之间的关系。视图对象(View Object)视图对象用于表示一个数据库查询的结果,通过视图对象可以对实体对象(或数据库)的数据进行连接、过滤、排序等操作。1、四种视图属性类型和表现视图属性类型说明映射到重查询后是否保持Entity-Derived Persistent基于持久的实体对象属性实体对象属性,并由实体对象属性映射到数据库列是Entity-Derived Transient基于

34、实体对象的临时属性实体对象的临时属性是SQL-Derived查询字段,非基于实体对象属性查询列否Transient/Dynamic临时的,不基于任何数据源无(由程序赋值)否l 基于实体对象属性(持久或临时)的视图对象属性,属性的值保存在实体对象缓存中,在整个事务生命周期中被持久保存。视图对象属性并不保存真正的值,而是保存一个指向实体对象属性的指针。l 基于SQL查询或临时的视图对象属性,属性的值保存在视图对象的Row中,在视图对象行集的生命周期中被保存。理解上面的特性非常重要,因为OAF应用可以认为是基于视图对象在进行开发,而视图对象的操作都是在视图对象缓存和实体对象缓存上进行的,在视图对象重

35、查询时,会清除视图对象实例的缓存,然后对于基于实体对象的属性(持久和临时)重新指向该属性;而对于基于SQL查询的属性,重新从数据库中取出;而临时的视图对象属性则在重查时丢失。所以对于后两种,将丢失重新查询前赋的值。如果有两个视图对象基于同一个实体对象,那么当一个视图对象的数据发生更改时,由于实际更改的是实体对象的数据,另一个视图对象将马上能得到更改的值,因为两个视图对象共享相同的实体对象。视图对象跟实体对象不同,实体对象需要表示所有的底层数据性质,需要包含数据库表的所有列。而视图对象可以认为是为用户界面服务的,需要包含哪些实体对象属性、查询哪些字段都是根据页面需要而设计的。当使用JDevelo

36、per创建视图对象时,可以创建一个XML文件和两个Java文件(根据需要可以选择同时创建两个Java文件,或只创建其中一个,或一个都不创建)。XML文件定义了每个视图对象属性的基本信息,如名称、数据类型及来源等。两个Java文件分别是视图对象实现类和视图行实现类。视图对象实现类允许你编写初始化查询逻辑和更改标准的视图对象实现类方法,如更改查询逻辑。视图行实现类包含各个属性的访问方法setter和getter。根据Oracle的开发标准,应该总是创建视图行实现类,这样可以提高访问视图行数据的性能。可以根据实际需要选择创建什么Java文件。视图链接(View Link)类似于实体对象间的关联,Vi

37、ew Link定义了视图对象间的关系,BC4J可以使用View Link定义在当前的源视图对象行的基础上,自动查询和定位目标视图对象。通过源视图对象和源属性与目标视图对象和目标属性来创建View Link,BC4J提供了多种视图对象之间的对应关系。当使用JDevelper创建一个视图链接后,将会创建一个XML文件。和实体关联一样,XML文件定义了哪两个视图对象之间存在着什么样的关系。事务对象(OADBTransaction)OADBTransaction拥有与数据库间的连接;拥有所有的实体对象,操作实体对象的验证、提交至数据库等等。通过OADBTransaction可以:l 创建一个calla

38、ble statement执行PL/SQL函数和过程l 访问session级应用程序环境,如用户名、id、当前职责等l 在需要执行NLS操作(如更改服务器的日期格式为用户日期格式)时,访问oracle.apps.fnd.framework.OANLSServices对象OADBTransaction无须通过JDeveloper创建,可以在应用程序模块实现类和实体对象实现类中直接获取。模型对象设计示例模型对象设计模型对象的设计客户端和服务器端代码分离一般JSP Application architetrure分为以下三层:l Web浏览器l Web应用服务器(又称为中间层)l 数据库服务器但在O

39、A Framework中,又把中间层分为以下两层:l 客户端类(包括视图和控制器的代码,用于处理HTML用户界面)l 服务器端类(模型部分的代码:不止OA Framework客户端可以调用,还支持其它的客户端)对于不同的Client可以使用相同的Server端的代码,使底层业务逻辑可以最大限度地得到重用。OA Framework的数据流为了实现客户端和服务器端的代码分离,OA Framework应用框架的按特定的分层流向写入和读取数据。一般情况下,当需要把数据从页面写入数据库时,通过控制器把数据写入应用程序模块中的视图实例对象(一般由控制器类的processFormData自动完成,无须我们编

40、程实现),视图实例对象的数据将自动写入到实体对象中,实体对象再通过程序调用,自动同步到数据库中。另一方面,当需要把数据从数据库中读取出来,显示到页面中,也一定是按特定的流向(数据写入的逆流向),数据从数据库提取到实体对象中,再到视图对象实例,再通过应用程序模块,由控制器将数据显示在页面上(这是在处理页面时,根据DataBinding机制自动完成的,一般也不需要我们编程实现)。如下图所示。OAF数据流及推荐的编码分层和边界代码分离注意事项客户端和服务器端代码分离能得到最大的重用性,在设计时需要考虑以下几点:l 模型的代码绝对不能直接参考控制器的代码。例如视图对象和应用程序模块不能调用Contro

41、ller的方法,同样实体对象不能调用应用程序模块和视图对象的方法(但实体对象可以使用Server端的验证应用程序模块和验证视图对象进行验证)。l 在客户端的代码中不能引用或引入服务器端的实现类(oracle.apps.fnd.framework.server Package里的类或接口)或interface。l 在服务器端进行某种处理的时候、必须使用OAApplicationModule接口的方法invokeMethod,应用程序模块可以实现必要的逻辑。l 客户端的代码绝对不能包含JDBC或服务器端的处理。UI客户端需要服务器端的信息必须通过调用应用程序模块的方法。推荐的OAF开发过程如果是首

42、次开发OA Framework应用时,想创建单一页面或是一个由多个页面组成的事务的模型时,可以按以下方法进行。但前提是已经完成了设计,并且准备着手实现。 同时,假定你需要开发的是整个模块,而不仅仅是UI、或Business Logic。创建过程1. BC4J模型对象业务组件包的创建。2. OAF页面所使用的BC4J对象的创建,包括应用程序模块、实体对象、实体关联、视图对象、View Link。并且把适当的视图对象加载到根应用程序模块中。3. 创建页面的OA用户界面控件。4. 创建和实现控制器代码。5. 实现页面所需的应用程序模块代码。6. 实现实体对象业务逻辑。注意:实际开发中可能并不一定完全

43、按照以上步骤进行,完全可以依据自己的开发习惯调整,或者按照业务功能分类先实现一组逻辑,再实现另一组逻辑。但是最重要的是脑中必须有清晰的思路,指导自己一步步该做什么。业务组件创建方法下面介绍各种业务组件的创建方法,所有这些创建都是通过JDeveloper向导完成。本节所讲内容也可以结合练习进行,或者只需了解,等到练习时在掌握各个向导的使用方法。业务组件包(Business Component Package)所有的BC4J模型组件必须属于BC4J Package。业务组件包创建时会创建一个server.xml,该文件定义了业务组件包内所包含的对象。该文件只在开发过程中起作用,运行时没有任何用处,

44、对JDeveloper项目管理有用。声明方法1. 在JDeveloper导航窗口中,选择需要创建包的OA项目。2. 从主菜单中选择File New打开New对话框。3. 展开Categories树中Business Tier节点,选择Business Components(BC4J)。4. 在Item列表中,选择Business Components Package来打开Business Components Package Wizard。注意你也可通过鼠标右键OA项目来选择New Business Components Package 直接启动Business Components Pack

45、age Wizard。5. 在Step 1/3,按照命名规范输入Package Name,同时选择Entity Objects mapped to database schema objects,然后选择Next。6. 在Step 2/3,检查Connection Name(用于在设计时连接到数据库来完成声明工作)。选择SQL Type和Type Map都为“Oracle”。7. 选择Finish保存工作。实体对象(Entity Object)实体对象是实现对数据库表、视图或快照的业务规则。实体对象可以使用于多个客户端(不止OAF的UI),所以应该把所有对表的验证以及动作集成到这里(视图对象也

46、可以实现验证逻辑,但是基于相同的实体对象可以设计任意多个不同的视图对象,如果在每个视图对象的验证方法中去实现共同的验证逻辑是不合适的)。l 每个表必须有至少一个实体对象。l 实体对象的属性应该包括表中所有的列。l 可以继承自己的公共实体对象。l 实体对象里可以进行对象的初期化、属性的验证、实体级的验证、还有其他功能性的行为。l 可以创建实体专家单例类,一般由一个组合关联的实体对象间共享实现轻量级的验证逻辑。其它相关的实体对象也可以使用实体专家执行轻量的验证。l 根据需要在可以创建服务器段的帮助类,实现不同实体对象间的处理逻辑。声明方法按以下步骤在BC4J包中创建一个新的实体对象:1. 在JDeveloper导航窗口中,选择需要创建实体对象的BC4J包。2. 从主菜单中选择File New,打开New Object Gallery对话框。3. 展开Categories树中Business Tier节点,选择Business Components(BC4J)。4. 在Item列表中,选择Entity Object打开Entity Object Wizard。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号