OAF_OAF Framework页面分析(概念)

20150506 Created By BaoXinjian

图片 11.
页面基础


于浏览器层,OAF页面和其他页面一样,是正规的HTML页面。

每当中间层,OAF页面实际是由于内存中的JAVABEAN结构来兑现之,和风土人情的JAVA客户端界面相同。

每个页面被的用户界面(UI)组件(按钮、标签、图片等)实际还对应一个或多独组织中之JAVABEAN。

当浏览器请求一个初页面时,OAF读取页面被的扬言的首批数据来树WEB
BEAN的布局。

针对每一个带有UI控制器的BEAN,OAF调用你写的代码来初始化页面。

当页面执行完毕,OAF将WEBBEAN结构交给UIX框架来拍卖,它会拿的转为HTML发送至浏览器。

 

当浏览器提交一个FORM(如:用户选择了搜索区的GO按钮),如发生必要,OAF重新建立WEBBEAN结构(BEAN结构于恳求中是缓存了底,只有在奇怪之状况下欲更确立),然后调用你在PAGEBEAN中描绘的处理事件的代码。当页面处理完,HTML页面还成立并发送至浏览器。

 

图片 2二、模型


1.
模子封装了点名的利用被的数目以及买卖逻辑。它吗供了实际的商贸对象同商务服务的虚幻。

瞩目:要完全正确和同等,本图需包括以下的落实

oracle.apps.fnd.framework.server.OADBTransactionImpl而不是oracle.apps.fnd.framework.OADBTransaction接口。

 

  1. Application
    Modules

一个BC4J应用模型是管制及供BC4J模型对象的基本功容器,在是上下文中,同一任务之对象是由多方面关系的。例如:所有的BC4J对象都富含一个同一任务的业务。甚至用户界面包括多只页面。

所有的APPLICATION
MODULE都是oracle.apps.fnd.framework.server.OAApplicationModuleImpl的子类。

各国一个OAF页面都发生一个关联到顶层REGION(pageLayout
region)的ROOT application module。这个root application
module提供了事务处理的上下文,封闭了数据库的连年。

(1).
如果多单页面在一个事务中,它们该共享一个root application
module。

(2).
如果一个页面和其他页面没关系,它应该产生自己之application module。

在意:一个root application
module可能嵌套多个application module(也堪还嵌套多交汇)。

当这种状态下,root application
module可以拜它所嵌套的备的多少、对象以及装有的ROOT包含的插足同一个事务的分层对象。你可以公想创立重用的和数据库交互的UI
region时采取这特性。

 

  1. Entity
    Objects(和Association Objects)实体和关联实体

BC4J实体封装了干到数表行的商务规则(验证、动作相当)。如:OAFSample
Library包括了FWK_TBX_SUPPLIERS表,用来储存供应商的概念。

咱们得啊夫表定义一个实体对象(SupplierEO),用来促成的有着的商贸规则,新建、更新、删除一个供应商。

留意:Entity
Object也堪依据视图、同义词和快照。

OAF支持JAVA和PLSQL实体。

汝建的多数实体都应当是oracle.apps.fnd.framework.server.OAEntityImpl的子类。

以数据库与实业之间是一定之干,所有的ORACLE
Applicaiotn 实体都应有包括它关联的阐发的所有列。

实业使用声明来在它们的性能和点名的数据列之间映射,来自动实现查询、插入、更新和去。大多数状态下,你得加上验证逻辑。

实业可以吃另外要同发明交互的先后采取(不仅是OAF),这样一来,就亟须考虑到独具的说明规则以便客户端就无须再行关注这些了。

 

  1. Association
    Objects(关联实体)

假使你产生一个繁杂的实业(如三重叠采购定单,在头、行、发运地之前是同对准大多之干),你得下association
object来定义实体间的涉嫌,

君得定义弱连接(一个定单引用了一度有的供应商)和大连接(一个定单包括她的施行,行未可知独于头在)。

 

  1. View Objects(and view
    Links)视图对象与视图连接

在简单的状态下,一个BC4J视图对象封装了一个数据库查询。查询执行后,一个视图对象循环访问结果集。结果集带有一个要多个张图行,一个观展图行的例外性质对应数据库查询的履。

持有的视图对象都是oracle.apps.fnd.framework.server.OAViewObjectImpl的子类。

每个视图对象都得配备用以下的方来询问数据:

(1).
属性对应SQL语句之排(通常用于比小、只读之视图对象)

(2).
属性对应实体对象的性(用于插入、更新、删除实体对象)

(3).
一些属性对许交实体,一些性能直接对诺SQL(用来增强实体对象的未可知从实体对象查询的临时数据,如出示的计算值)。

以OAF中,在下面的状下会因此到视图对象。

(1).
为详细的用户界面显得太优化的数额。如果用户界面支持实业对象的插入、更新、删除,你应当采取视图对象来就这些任务。

(2).
为确立下拉列表建立查询,值列表和其他的界面组件。

(3).
为商逻辑建立行之有效的“验证查询”。如:在市定单头实体对象吃,你或许而利用一个验证视图对象来获得是请定单的极端大行号,以便为它们可以于缓存而在新行插入时方可增加。

最后,你或未只有需要定义视图对象,还可能而啊她编写代码。典型气象下,代码应该实现复杂的询问的数据绑定并尽查询(所以视图对象理解怎么询问其好)。

 

  1. View
    Link(视图连接)

就像连接实体对象同,你吗可以创建视图对象的关联,这叫视图连接。如:你在进定单头视图对象同行视图对象期间建立了一个视图连接,这得为此来当访问头的早晚自动查询行。

 

  1. OADBTransaction

使齐图所示:OADBTransaction在您的型中的一个主干角色,它包裹了JDBC的数据库连接会话和root
application module的干。

并且一直容纳了您建的装有实体对象(视图对象由root
application
module容纳,并于顾图行中援引了实体对象)。你将以公的范中正常使用OADBTransaction,基于以下原因:

(1). 建立callable
statement来施行PLSQL函数的历程。

(2).
访问session级别的行使及下文,如用户称、id、当前任务等。

(3).
如果急需实践NLS操作,如转换服务器时格式为用户时间格式,访问oracle.apps.fnd.framework.OANLSServices对象

root application
module可以看OADBTransaction。

 

图片 33.
视图


视图用来吗用户格式化和展示模型数据。

  1. 概念页面

当规划时,你可行使声明的法来建立BEAN的组织。在oracle开发进程中,你将本着XML文件进行定义。当你安排到客户站点时,OAF从数据库被运行页面定义。

为简单说明,Jdeveoper定义的页面由REGION和ITEM组成。

(1).
ITEM是一个简易的零部件,如按钮、输入框、图下等不包括子元素的零件。

(2).
REGION是包ITEM的器皿。如:header、表格或一定的布局组件。

(3).
你定义的每个REGION和ITEM都发出一个STYLE属性,用来指明OAF在运转时行使谁WEB
EBAN对象来呢她实例化(这会指明产生什么使瓣HTML代码),

倘:如果你定义了一个STYLE为table的REGION,OAF会为此oracle.apps.fnd.framework.webui.beans.table.OATablebean来实例化。

(4).
所有的页面必须含有一个顶层的REGION(叫做root
region),它的STYLE是pageLayout,它是oracle.apps.fnd.framework.webui.beans.layout.OAPageLayoutBean的实例。

(5).
在Jdeveoper的页面树被之REGION和ITEM的顺序指明了当运作时补充加BEAN结构的岗位。

产图展示了一个概括页面的WEB
BEAN显示力量,你望底页面的竹签指明了WEB BEAN的讳。

倘:一个下拉列表是oracle.apps.fnd.framework.webui.beans.message.OAMessageChoiceBean的实例,一个付给按钮是oracle.apps.fnd.framework.webui.beans.form.OASubmitButtonbean的实例。

留意:下面图备受的ITEM名称没有随ORACLE应用命名标准来举行,只是于你明白WEB
BEAN的构造。

 

  1. Attribute Sets
    属性集

每个REGION和ITEM都得以用性能集来继承一组属性,一个属于性集是通过命名可选用的性能的成团,它好让任何UI对象下,包括region\item和外属于性集。

不管何时你建一个运用属性集的UI组件,你都得挂其的延续的性能(尽管这当OAF中是未推荐的)。

为验证及时一点,在以开发中,每个表格必须为他的各国一样排关联到属性集,这些性集如提醒标签、显示涨幅等。

(1).
在OAF的ToolBox示例中,有一个置办定单表(FWK_TBX_PO_HEADERS),HEADER_ID是NUMBER类型的主键,也当作购买定单号显示。

(2).
这个表来一个干的特性集:FwkTbxHeaders,是一个XML包文件,里面包括了有的表列的性(每一样列一个属性)。其中一个属性叫做HeaderId。

(3). HeaderId属性设置Prompt为 Order
Number,Display Length为15。

(4).
当我们成立一个页面包括市定单的order number
这个ITEM时,我们为相应指定属性集为/oracle/apps/fnd/framework/toolbox/attributessets/FwkTbxheaders/Headerid

 

  1. 组件重用

假设想做页面中之共享对象,你得略的延续其

若是:在OAF的ToolBox示例中,我们成立了一个通用的REGION(叫PoSummaryRN),所以这个组件可以叫多个页面包含而未用更写代码。

要补偿加一个region到页面,我们若简单的建一个新的region,将Extends属性设为:/oracle/apps/fnd/framework/toolbox/tutorial/webui/PoSummaryRN

留神:这个共享的REGION在援它的页面被凡是未能够修改的,所以于Jdeveloper的Structure面板中之灰色的。

 

  1. 数据源绑定

对发出数据库交互(插入、更新、删除、查询)的BEAN,你还要指定一个数据源绑定到一个视图实例和干的视图属性名称。这个绑定好主要,因为OAF用其来查询数据、写回用户输入的数码。

(1). View Instance
Name指的是于application
module中的视图对象(所有的视图对象都存活于application
module中连经它的称呼来调用),

如:如果一个SuppliersVO视图对象由页面被的root
application
module通过“MySupVO”来调用,则于此间你当指定MySupVO这个名字。

(2). View Attribute Name
指的凡炫耀到列的视图属性。

一旦:如果你的SuppliersVO有一个性能“SupplierId”(映射到列SUPPLIER_ID),这里而应该指定“SupplierId”这个名号。

 

  1. 概念菜单

您该采取oracle
application菜单和效用的表单中定义菜单。

赶巧像OAF将概念之UI布局翻译成运行时的BEAN结构,它吧隐含了菜单定义之WEB
BEAN。

 

  1. 概念页面流

处理多页面事务流时,OAF提供了一个而定义的(可客户化)给复杂的、硬编码的控制逻辑。

 

  1. 客户化页面

OAF也囊括了一个可定义之客户化架构,叫做:OA
Personalization
Framework。这是为着支持最终用户所急需的客户化和产品污染输链(区域化和垂直化(没了解啊意思)等)。

留神:如你在开指南中的呈现的,建立REGION和item声明比编程更可取。实际上,你该只在匪能够用声明的点子来起的当儿才下编程的法门,这样客户就可知客户化你的页面了。

 

图片 44、控制器


1.
控制器是用来响应用户的动作和定向应用之流向的。

控制器可以提到到视图的REGION级别,(很多状态下,任何的OAF
web
bean实现了oracle.apps.fnd.framework.webui.beans.OAWebBeanContainer接口,可以提到到控制器)。

汝建的有所的控制器都应有也oracle.apps.fnd.framework.webui.OAControllerImpl的子类。

卿可以在控制器中贯彻WEB
BEAN的机能。

公可编写代码用来:

(1).
在运行时操作与初始化(包括可编程的汝切莫能够因宣称的计确立之布局)

(2). 截取和处理用户事件如果以下按钮

 

  1. 拍卖要

当浏览器也你的页面发布一个OA.jsp请求时:

(1).
oracle.apps.fnd.framework.webui.OAPageBean(主要的OAF页面处理类)使用页面名称来决定要哪个root
application module,然后从application module池中取出。

其一application module
也自连池中取出JDBC连接,然后这个页面的事务处理的上下文就确定了。

(2).
用户之SESSION被认证,如果不算,显示登录的页面。

(3).
如果用户是中的,OAPageBean评估请求参数来确定当做HTTP
POST或GET来拍卖。

 

  1. 处理GET请求

当浏览器为服务器发送一个GET页面的请时(或者您手工的FORWARD),OAF使用可声明的UI定义来建web
bean结构

(1).
OAPageBean调用页面的顶层pageLayout的bean的processRequest()方法,整个WEB
BEAN结构于递归的实践来初始化WEB BEAN(包括外涉及的范组件):

a. 每个web
bean实例化它的控制器(如果部分话)并且调用控制器上之processRequest(OAPageContext,OAWebBean),

眼看是一个君用来起、修改你的页面布局,设置web
bean属性和推行手工的数目初始化的法(如当您打开页面时您也许而实践一个自行查询)。

b. 一些繁杂的web
bean(如:oracle.apps.fnd.framework.webui.beans.table.OATableBean和oracle.apps.fnd.framework.webui.beans.layout.OAPageLayoutBean)执行post控制器执行prepareForRendering()方法。

c. 每个web
bean都调用它的子类的processRequest()方法。

(2).
oracle.apps.fnd.framework.webui.OAPageBean将web
bean结构交给uix并发送到浏览器。

 

  1. 处理POST请求

当浏览器发送一个POST请求到服务器

(1). OAPageBean检查看web
bean是否留存被内存中,如果没(可能因为资源给再度布局了,用户按了晚降落按钮,

要么POST是出于一个对话框来之),那即便再次建立web
bean的结构,像面执行GET时同样。

(2).
OAPageBean在有结构树被的bean上调用processFormDate(OAPageContext,OAWebBean),将form中的多寡写入module(它调用pageLayout
region上之processFormData,

故每个web
bean教递归的调用了其的子类的processFormData)。写副form数据及model自动的调用了属于性级和实体级的证明。如果您抛来其它说明异常,执行会停并出示错误信息。

(3). 
如果以推行processFormData()过程遭到尚无那个,OAPageBean调用所有的bean上的processFormRequest(OAPageContext,OAWebBean)方法,如上面所摆。

本条过程叫您的控制器对用户的动作作出响应。

(4). 如果没JSP
FORWARD或者另行定向,或者当processFormRequest()方法被从未特别,则页面被刷新。

 

  1. OAPageContext

当OAF接收至一个OA.jsp请求,OAPageBean建立一个oracle.apps.fnd.framework.webui.OAPageContext,这个仿佛才于页面处理过程中才在。

方所说之老三只重大措施(processRequest(),processFormData()和processFormRequest())都有一个OAPageContext参数,你编的外控制器总是要使用这主要之近乎。

一旦达到图所示,OAPageContext同时援引了request和root
applications mudule。

实际上OAPageContext被提交你的每个控制器的推行方,在下面的职责中您将应用OAPageContext:

 

  1. 走访请求参数

莫不太要是,这是一个公用来由此getParameter(String)方法来读取请数据的近乎(请求包括URL中的参数,如果是POST,任何的名称值和波都关乎到用户的动作)。

提拔:对于页面被之例外之WEB
BEAN(按钮、输入框等),传至getParameter()的名称值都通过公于页面中定义之ID来分配。

设:如果用户仍了一个为“GoButton”的按钮,你得于Jdeveloper在描绘以下的控制器代码:

processFormRequest(OAPageContext pageContext, OAWebBean webBean)  {  
   if (pageContext.getParameter("GoButton") != null)  
   {  // The user pressed the "Go" button, do something...  } 
} 

 

  1. 访问root application
    module

OAPageContext缓存了一个针对性root application
module的援,它提供了访问它的视图对象和作业。

若果要访问application mudule:

processFormRequest(OAPageContext pageContext, OAWebBean webBean) {  
   OAApplicationModule am =   (OAApplicationModule)pageContext.getRootApplicationModule();
} 

 

8.
导航介绍

而用这个近乎的道来报告OAF执行一个JSP
forward。如:

processFormRequest(OAPageContext pageContext, OAWebBean webBean){  if (pageContext.getParameter("CreateButton") != null)  { 
  // The user pressed the "Create Supplier" button, now perform a JSP forward to 
  // the "Create Supplier" page.
  pageContext.setForwardURL("OA.jsp?page=/oracle/apps/dem/employee/webui/EmpDetailsPG",  
                            null,   
                            OAWebBeanConstants.KEEP_MENU_CONTEXT, 
                            null,  null,  
                            true, // Retain AMOAWebBeanConstants.ADD_BREAD_CRUMB_YES, // Show breadcrumbsOAWebBeanConstants.IGNORE_MESSAGES); } } 

 

9.
拜使及下文信息

宛如模型中之OADBTransaction,OAPageContext提供了顾servlet
session级别的oracle应用达到下文信息,如用户称、id、当前任务等。如下面代码显示怎么收获用户称;

processRequest(OAPageContext pageContext, OAWebBean webBean){   
  String userName = pageContext.getUserName();
}

 

图片 55、 Web
bean 架构


  1. 抱有的WEB
    BEAN继承了UIX架构中之相应的bean。

如一个OATableBean继承了oracle.cabo.ui.beans.table.TableBean。

每个OAF web
bean也兑现了千篇一律组接口,这些接口定义了OAF加至UIX bean中之一言一行。

(1).
Oracle.apps.fnd.framework.webui.beans.OAWebBean

概念了富有的WEB
BEAN的通用的主导之行事。

苟:不同让其他行为,它定义了processRequest,processFormData和processFormRequest方法,这些艺术还当不同的bean中有落实。

(2).
Oracle.apps.fnd.framework.webui.OAWebBeanConstants:

于视图和控制器中利用的同等组常量。

(3).
Oracle.apps.fnd.framework..webui.beans.OAWebBeanData:

概念了通用的客户化定义跟数据源管理作为。

(4).
Oracle.apps.fnd.framework.webui.beans.OAWebBeanContainer:

概念了有着的web
bean的召开呢容器的特征。如:所有的布局web
bean都落实者接口。只有实现了这个接口的bean才好提到到控制器。

(5). OAWebBean<Type>:

概念了以OAF上下文中之bean中原本的一言一行。

如:OATableBean实现了oracle.apps.fnd.framework.webui.beans.OAWebBeanTable接口。

 

  1. 内部bean结构

每个web
bean都维护其和谐以下的信:

_indexedChildren 子web bean

_namedChildren UIX指定的子web
bean

_attributes web
bean的特色(描述性属性),如下图所示

 

  1. 数据绑定值

作不是齐图所出示之场面,OAF web
bean属性实际当做数据绑定值来落实。

意思是价值由特定的以运行时处理组件的数据源提供。

 

  1. 实现

当页面实现时,UIX架构处理web
bean结构来生成html。

针对其他web
bean属性,当以她交给一个兑现上下文(实现上下文是UIX需要处理绑定数据的有着的信息)时,UIX调它的getAttributeValue()方法。

对一个加以的性质,如:实现上下文知道哪个视图对象、视图属性和当前实行是呀。

数量绑定值使用实现上下文提供的这些信来了解数据源,并回实际的价值,所以她能生成对应的HTML。

 

图片 66、oracle.apps.fnd.framework


1.
oracle.apps.fnd.framework

连从model和用户界面或视图代码中得以安全访问的好像与接口。

苟:如果您以页面中设访问一个root
application
module,你要动oracle.apps.fnd.framework.OAApplicationModule接口(你永远不见面造访一个客户端的贯彻)。

事实上情况下,这个保险吗包括:

(1). 你也许使弃来底富有的万分

(2).你用来国际化操作的好像:OANLSServices

 

2.
oracle.apps.fnd.framwwork.server

连了当mvc架构中实现model的近乎的接口

这些近似是用来让客户端用户界面(不单独是OAF的html页面)使用的,它不应当一直引用oracle.apps.fnd.framework.webui包和子包中之接近及接口,或者其他利用指定的WEBUI包和子包。

当起一个OAF应用模型时,你该运用此包中的切近设无是它们的接续的近乎。

警示:不要在控制器和视图对象被调用这个包中的好像。

 

3.
oracle.apps.fnd.framework.webui

概括了建立和操作OAF
html用户界面的中坚类。

局部常用的接近及接口包括:

(1). OAController

(2).
OAPageContext

(3).
以转包吃的在bean中的所有类

提个醒:不要在model代码中调用这个包中的切近。

 

4.
oracle.apps.fnd.framework.webui.beans

席卷了不可知适合多样变化bean子包的用户界面组件类(如:图像、静态的公文、键弹性域、说明性弹性域)。

卿应该在编写用户界面的急需编程的控制器的时刻用这些看似。

这个保险吗包括了基本之叫所有的WEB
BEAN实现之OAF接口。

夫包中的接近与她子包中之类似对诺到其实现的uix组件,如下表。当起OAF应用页面时,你该总是利用OAF类除非您想以一个囊括于UIX中要OAF不支持的初特色。

留神:OAF类总是为卿在Jdeveloper中宣示的MDS实例化。

图片 7

提个醒:不要在model代码中调用这个包中的近乎。

 

5.
oracle.apps.fnd.framework.webui.beans.form

席卷了html form的零件的web
bean类,包括提交按钮和输入组件(多选框、单选取框、文本框等)。

汝应有在编写一个用户界面控制器的时光利用这些看似。

顾:对于群以此包中的web
bean,有部分变量在oracle.apps.fnd.framework,webui.message包中(这些message
web bean可以展示错误、信息、警告的图标和证明信息,而之包中web
bean不能够)。

当您在Jdeveloper中成立页面时,OAF自动的吗及时有限只包中的组件实例化message
bean。你应有单独以下面的情形被使用这个包中的好像:

(1). 一个看似没有message
bean(如:OASubmitButtonBean只以斯保险吃有)

(2). 你不欲采用message bean

告诫:不要在model代码中调用这个包中的接近。

 

6.
oracle.apps.fnd.framework.webui.include

席卷OAF中用户界面的壮大web
bean(servlet\jsp\html)。

卿应有当编制用户界面控制器时以这些看似。

告诫:不要当model代码中调用这个包中的好像。

 

7.
oracle.apps.fnd.framework.webui.beans.layout

概括OAF页面的布局web
bean。包括特定的布局要hide/show,容器,列表,头,标准的单列或双列模板等。你该以编辑用户界面控制器时行使这些近似。

警告:不要当model代码中调用这个包中的好像。

 

8.
oracle.apps.fnd.framework.webui.beans.message

包好来得错误、警告或者信息之HTML
FORM控件。如用户以一个文本框中输入了错误的价,一个误图标会显示在其的标题下面。你应有以编排用户界面控制器时利用这些看似。

顾:这个包中的死多类了包以oracle.apps.fnd.framework.webui.beans.form包中,但没有出示图标和消息的效应。

警告:不要以model代码中调用这个包中的类似。

 

9.
oracle.apps.fnd.framework.webui.beans.nav

连了用户界面导航的组件(连接、树、菜单、快速连接等。)你应当在编辑用户界面控制器时使用这些近似。

警示:不要当model代码中调用这个包中的好像。

 

10.
oracle.apps.fnd.framework.webui.beans.table

席卷了表格和造就表格的web
bean。它可以表的款型展示数据。你应有以编排用户界面控制器时使用这些看似。

警戒:不要在model代码中调用这个包中的近乎。

 

11.
oracle.apps.fnd.framework.webui.laf

连了足操纵HTML外观(包括页面风格)和上下文行为的工具。

 

Thanks and Regards

转载: c1275671283 –
http://shaofeng.blog.51cto.com/3392077/655665

图片 8

相关文章