OracleEBS OAFramework.docx

上传人:b****6 文档编号:7954015 上传时间:2023-01-27 格式:DOCX 页数:49 大小:70.23KB
下载 相关 举报
OracleEBS OAFramework.docx_第1页
第1页 / 共49页
OracleEBS OAFramework.docx_第2页
第2页 / 共49页
OracleEBS OAFramework.docx_第3页
第3页 / 共49页
OracleEBS OAFramework.docx_第4页
第4页 / 共49页
OracleEBS OAFramework.docx_第5页
第5页 / 共49页
点击查看更多>>
下载资源
资源描述

OracleEBS OAFramework.docx

《OracleEBS OAFramework.docx》由会员分享,可在线阅读,更多相关《OracleEBS OAFramework.docx(49页珍藏版)》请在冰豆网上搜索。

OracleEBS OAFramework.docx

OracleEBSOAFramework

OracleEBSOAFramework

(一)开发环境搭建

关键字:

OracleEBSERPOAFrameworkOAF关键字:

最近公司开始了一个OracleERP二次开发项目,使用的是EBSR12版本,这个版本由于比较新,从这个版本中可以看到OracleERP二次开发的主要技术有向Web方面发展的趋势,其中主要使用的就是OracleOAFramework应用框架.

网上这些资料不好找,我通过查看OAFrameworkGuide整理了一些文档,后面陆续会发布到blog中与大家共享.

内容基本上是按我的学习顺序组织的,学到哪里写到哪里,由于是初学OAFramework,而它又与我们通常接触的开源框架差异较大,因此理解上难免出现偏差,有不正确的地方请大家指正.由于系统的限制,不能发过多的插图,文章中的插图没有全部贴上来,这些插图都来自于OAFrameworkGuide.

环境塔建按以下几个步骤:

1.从MetaLink上下载p5856648_R12_GENERIC.zip

2.从你的EBS服务器上下载dbc文件,比如我的dbc位置/u02/prod/inst/apps/PROD_ebs/appl/fnd/12.0.0/secure/PROD.dbc

3.启动JDeveloper,从JDeveloper解压目录中找到ToolBox工程,初次打开时会提示代码更新.

4.在工程的属性中找到OracleApplications配置好DatabaseConnection.

5.在工程的属性中找到OracleApplications->RuntimeConnection页,将DBCFileName设置为从服务器上下载的dbc文件.UserName和Password为登录ebs环境时使用的用户名和密码.Responsibility中设置好开发所使用的应用简称和职责.这个职责只需要是UserName所具有的职责就可以了.

Page基础

在浏览器看来,OAFramework页面与其它web页面一样,被渲染为HTML.

在中间层中,页面是由内存中层级分布的Javabeans组成——非常像传统的Java客户端UI.每个UI构件,比如按钮,表格,tab,商标图像等,被渲染为页面中对应的构件.

浏览器向一个页面发出请求时,Framework读取页面定义的元数据创建webbean结构.OA每个bean与一个UI控制器关联,Framework调用你编写的代码初始化页面.OA页面处理完成后,FrameworkOA将webbean结构交给UIX框架处理以生成发送给浏览器的HTML.

当浏览器发出一个表单提请求时,OAFramework重新创建bean及其层次结构(只在必要的时候才重新创建,通常这些bean是被缓存的,只在特定的情况下才重新创建),然后调用为pagebean编写的事件处理代码.当页面处理完成后,页面HTML重新生成并发送给浏览器.

OAFrameworkMVC架构:

模型Model

模型包括下层的数据和应用业务逻辑.它也提花了现实世界对象和应用服务间的抽像层.

应用模块ApplicationModules

BC4j应用模块本质上是一个容器,它管理和提供对"相关"BC4J模型对象的访问.这里的"相关"指的是同一个任务中的参与者.比如所有的BC4J对象在同一个任务中参与同一个事务——即使对应的用户界面需要用户访问多个页面.应用模块:

应用模块是oracle.apps.fnd.framework.server.OAApplicationModuleImpl类的子类.

每个OAFramework页都有一个根(root)应用模块,它与最顶层的页面区域(pageregion)关联.根应用模块提供事务环境和连接数据库.

如果多个页面参与同一个物理或虚拟事务,它们应该共享相同的根应用模块.如果一个页面功能不依赖于其它东西,它需要拥有自己的应用模块.

注意:

注意:

一个根应用模块可能包含一个或多个嵌套的应用模块,可以嵌套任意多的层次.这种情况下,根应用模块可以访问它包含的子对象的数据和对象,所有子对象共享根应用模块的事务.你可以在创建需要重用的与数据库操作相关的UI区域时使用这个功能.

实体对象(实体对象(EntityObjects)和关联对象(AssociationObjects))和关联对象()

BC4J实体对象包含了业务规则(校验,动作等)与数据库表中的一行关联.注意:

注意:

实体也可以基于视图,同义词,快照而定义.OAFramework支持Java和PL/

SQL实体.

实体对象:

多数实体是oracle.aps.fnd.framework.server.OAEntityImpl的子类(PL/SQL继承于特殊版本的OAEntityImpl).

表和实体对象一一对象,所有实体应该包含与之关联的表的所有列.实体对象使用映射了它的属性和数据库列,并自动实现了查询,插入,更新,删除等操作.多数情况下,我们只需要添加校验逻辑.实体对象可以用于任何程序(不限于OAFramework).

关联对象AssociationObjects用于定义实体间的关系.

视图对象(视图对象(ViewObjects)和视图链接(ViewLinks))和视图链接()BC4J视图对象处理数据库查询.查询执行后,视图对象提供了访问它的结果集的功能.结果集包含了一个或多个视图行,视图行与数据库查询的行相对应.视图对象:

所有的视图对象都是oracle.apps.fnd.framework.server.OAViewObjectImpl类的子类.视图对象可以配置为使用下面的策略查询数据:

它的属性映射到简单的SQL语句的列(通常用于小的只读的视图对象)它的属性映射到实体对象的属性(用于插入,更新和删除实体)一些属性映射到实体对象,一些直接映射到SQL(用于增加实体临时数据,这些数据不能通过实体获得,比如计算值或用于UI显示需要)

在OAFramework应用中,将在下面情况下使用视图对象:

呈现用于优化用户界面细节的数据.如果用户界面支持实体的插入,更新,删除,你将通过视图对象执行这些操作.为poplists,listsofvalues和其它UI组件创建简单的查询.为业务逻辑创建有效的"校验查询(validationqueries)".比如,在定单处理时使用一个校验视图对象获得最大可以购买的商品数量.

可以为视图对象编写代码用于实现复合查询或查询时的数据绑定(以便视图对象知道怎样"查询"自己).视图链接ViewLinks与实体对象类似,也可以为视图对象建立关联,称为视图链接(viewlinks).比如可以在定单头视图对象和定单内容间建立视图链接对象.这可以用于在运行时访问定单头时自动查询定单内容.

OADBTransaction

OADBTransaction:

注意:

注意:

准备的来说这个图应该要包含实现类oracle.apps.fnd.framework.server.OADBTransactionImpl替代oracle.apps.fnd.framework.OADBTransaction接口.

如图所示,OADBTransaction扮演的是模型中的中心角色,因为它与一个根应用模块关联,管理JDBC连接/数据库会话,直接拥有你创建的任何实体(根应用模块拥有的视图对象中的行指向实体对象).可以使用OADBTransaction在模型代码中完成下面的操作:

创建一个语句执行PL/SQL函数和存储过程访问应用会话级环境信息(session-levelApplicationcontextinformation),比如:

用户名,id,当前责任(resposibility)等.访问一个oracle.apps.fnd.framework.OANLSServices对象,如果你需要page2执行NLS操作,比如转换服务器时间到用户日期/时间等.

可以通过根应用模块访问OADBTransaction.

视图

视图格式化当前模型数据给用户.

定义页面

在OracleApplications开发时,将使用XML页面定义文件.当产品发布后,OAFramework从数据库获取页面定义.使用JDeveloper定义的页面(pages)由区域(regions)和条目(items)组成.

条目是简单的构件,比如按钮,输入域,图像等,它不包含子构件.

区域是容器对象它可以包含条目和其它区域.比如区域包含文件头(headers),表格和特别的布局组件(layoutcomponents).定义的每个区域和条目都有style属性,它告诉OAFramework使用哪个webbean对象来描述它.比如,如果你定义区域的style属性为"table",OAFramework将使用oracle.apps.fnd.framework.webui

.beans.table.OATableBean.所有页面必须有一个单一的top-levelregion(通常称为"rootregion")它的style为pageLayout.它将使用oracle.apps.fnd.framework.webui.beans.layout.OAPageLayoutBean.regions和items显示在JDeveloperpagetree中的顺序告诉了Framework将这些对象添加在什么位置.

属性集AttributeSets

每个region或item通过使用attributesets可以继承一组属性集合.attributesets是一个被命名的属性的集合,可重用于任何UI对象,包括:

regions,items和其它属性集.当使用attributesset创建UI时,你可以覆盖所继承的属性.组件重用如果需要在页面使用共同对象,可以简单的从它继承.

比如,可以创建一个通用的region.新建region时,将新region的Extends属性设置为通用region的命名.注意:

注意:

共享的通用region在引用它的page中是不可编辑的,属于它的选项目在JDeveloper中将显示为灰色.数据源绑定

对于需要与数据库交互的bean,你需要指定数据源,将它绑定到ViewInstanceName,并关联好ViewAttributeName.这个绑定是至关重要的,因为OAFramework使用它获取数据,并将用户输入的数据写入下面的视图对象.

ViewInstanceName指向当前上下文环境中包含应用模块中的视图对象(所有视图对象"生活"于一个应用模块中,在包含它的容器对象中有一个实例变量名).比如,如果SuppliersVO视图对象,在页面的根应用模块中有一个实例变量"MySupVO".ViewAttributeName指向视图对象中映射到数据库列的属性.

定义菜单定义页面流个性化页面

控制器

控制器响应用户动作控制应用流转.

控制器可以与视图中的region级的对象关联(任何实现oracle.apps.fnd.framework.webui.beans.OAWebBeanContainer的OAFrameworkwebbean都可以与控制器关联).控制器是oracle.apps.fnd.framework.webui.OAControllerImpl的子类

.控制器代码的行为:

生成/初始化UI中途截取或处理用户事件,比如按钮按下请求处理

当浏览器向OA.jsp请求一个页面时:

1.oracle.apps.fnd.framework.webui.OAPageBean(OAFramework主页面处理类)根据请求的页面名称检查需要哪个根应用模块,并从应用模块池(applicationmodulepool)中取出.这个应用模块将为页面从JDBC连接池中获取连接和事务上下文.

2.用户会话校验;如果无效,将显示登录页面(这里是简化的说法,具体细节在Developer'sGuid中有说明).3.如果用户有效,OAPageBean根据请求参数处理HTTPPOST或GET.处理GET请求

当浏览器发起GET请求一个page时(或你手工forward时),OAFramework使用描述的UI定义构建webbean层级结构:

page31.OAPageBean调用页面的top-levelpageLayoutbean的processRequest()方法,然后进入webbean层级结构中继续递归调用来初始化webbeans(包括任何相关的模型组件).1.每个webbean可以有自己的控制器,如果有就调用控制器的processRequest(OAPageContextpageContext,OAWebBeanwebBean)方法.这个方法可以用于构件或修改页面布局,设置webbean属性和执行任何手工的数据初始化工作(比如,打开页面时自动执行查询).2.一些复杂的webbeans(比如:

oracle.apps.fnd.framework.webui.beans.table.OATableBean和oracle.apps.fnd.framework.

webui.beans.layout.OAPageLayoutBean)通过调用它们的prepareForRendering()(这个方法在JavaDoc中的说明)方法执行post-controller处理.3.每个webbean调用它的子对象的processRequest()方法.2.oracle.apps.fnd.framework.webui.

OAPageBean将webbean结构传递给UIX渲染并发送给浏览器处理POST请求

当浏览器向服务器页面发出POST请求时:

1.OAPageBean检查webbean层级结构是否在内存中.如果没有它就像在GET请求中一样创建一个webbean层级结构.

2.OAPageBean调用整个层级结构中的webbean的processFormData(OAPageContextpageContext,OAWebBeanwebBean)方法,并将form中的数据写入模型(它在pageLayoutregion上调用processFormData(),然后在它的子对象上递归的调用processFormData()方法).将form数据写入模型时将自动调用属性和实体级别(attributeandentity-levelvalidations)的校验,如果抛出了任何校验异常,处理将停止,错误信息将显示给用户.

3.如果在执行processFormData()期间没有异常抛出,OAPageBean将使用与上面相同的方法在层级结构中的所有webbean上调用processFormRequest(OAPageContextpageContext,OAWebBeanwebBean)方法.这里给了你的控制器响应用户动作的机会.

4.如果没有JSPforward或redirect发出,或在执行processFormRequest()方法时没有异常被

抛出.则页面刷新OAPageContext当OAFramework收到一个OA.jsp请求时,OAPageBean创建一个oracle.apps.fnd.framework.webui.OAPageContext,这个类仅在页面处理过程中存在.上面描述的三个方法(processRequest(),processFormData(),processFormRequest())都有一个OAPageContext参数,任何将要编写的控制器代码都使用了这个至关重要的类.

如上图所描述的,OAPageContext有指向request和根应用模块的引用.根据这个关系,OAPageContext被传递到每个控制器的响应处理方法中,你将看到如何在下面的通用任务中使用OAPageContext:

访问请求参数可以使用getParameter(Stringname)方法读取请求参数.技巧:

技巧:

页面上的每个webbean(buttons,fields等等)传递给getParameter()的是你定义在页面上的唯一ID属性.比如,使用下面的代码可以得到用户是否按下了名为"

GoButton"的按钮:

processFormRequest(OAPageContextpageContext,OAWebBeanwebBean)

{if(pageContext.getParameter("GoButton")!

=null){//Theuserp

ressedthe"Go"button,dosomething……}}

访问根应用模块

OAPageContext缓存了根应用模块的引用,它可以访问视图对象和事务.如果需要访问应用模块,可以通过OAPageContext:

processFormRequest(OAPageContextpageContext,OAWebBeanwebBean){OAApplicationModuleam=(OAApplicationModule)pageContext.getRootApplicationModule();}发出导航指令使用方法告诉OAFramework执行JSPforward或客户端重定向.比如:

processFormRequest(OAPageContextpageContext,OAWebBeanwebBean)

{if(pageContext.getParameter("CreateButton")!

=null){//Theuserpressedthe"CreateSupplier"button,nowperformaJSPforwardto//the"CreateSupplier"page.

pageContext.setForwardURL("OA.jsp?

page=/oracle/apps/dem/employee/webu

i/EmpDetailsPG",null,OAWebBeanConstants.KEEP_MENU_CONTEXT,null,null,true,//RetainAMOAWebBeanConstants.ADD_BREAD_CRUMB_YES,//Showbreadcrumbs

OAWebBeanConstants.IGNORE_MESSAGES);}}访问应用上下文信息与模型中的

page4OADBTransaction类似,OAPageContext可以访问servletsession级的OracleApplication上下文信息,如:

用户名,ID,当前职责等.比如,下面的片段用于获取用户名:

processRequest(OAPageContextpageContext,OAWebBeanwebBean)

{StringuserName=pageContext.getUserName();}

WebBean架构

所有OAFrameworkwebbeans都与UIXframework中的bean对应.比如,OATableBean继承自oracle.cabo.ui.beans.table.TableBean("cabo"是UIXframework早期的名字,包定义仍然使用了旧名).

每个OAFrameworkwebbean都实现了一组接口,这些接口实现了OAFramework添加到基础的UIXbeans上的行为.

oracle.apps.fnd.framework.webui.beans.OAWebBean定义了所有webbeans的通用行为(比如,其中在这里定义的关键的行为有processRequest,processFormData,processFormRequest方法,一些beans自己实现了这些方法).oracle.apps.

fnd.framework.webui.OAWebBeanConstants用于视图和控制器的常量集合.oracle.apps.fnd.framework.webui.beans.OAWebBeanData定义通用的个性化定义和数据源管理行为oracle.apps.fnd.framework.webui.beans.OAWebBeanContainer定义所有可以作为其它webbeans容器的webbeans的特性.比如,所有layoutwebbeans都实现了这个接口.只有实现了这个接口的beans才可以与控制器关联.OAWebBean定义了bean在OAFramework上下文环境中的内在特性.比如,OATableBean实现的oracle.apps.fnd.framework.webui.beans.OAWebBeanTable接口.

webbean例子(OATableBean):

内部Bean结构每个webbean自己包含了下列的信息:

_indexedChildren子webbeans_namedChildren子webbeans特殊行为的UIX标记._attributeswebbean的特性(属性描述),下表的图表描述描述webbean使用Dictionary保存键值对属性:

数据绑定值

与上面的图表描述的情况不同,OAFrameworkwebbean的attributes实际上是用数据绑定值实现的,这意味着它是由下层的数据源提供的,在组件被渲染时才被获取.后面将看到如何定义用户自定义绑定值.渲染在页面渲染时,UIXframework处理webbean层级对象产生页面的HTML代码.

对于每个webbean属性,UIX调用它的getAttributeValue()方法.并传递给它一个渲染上下文(renderingcontext),renderingcontext是UIX决定绑定值的全部基础.对于给出的属性,比如,renderingcontext知道下层的视图对象实例,视图属性和当前的行.数据绑定使用rendering

context通过查询它的数据源所提供的返回值传递给UIX以产正确的HTML.

OAFrameworkJavadoc手册

每个OAFramework包的描述:

oracle.apps.fnd.framework

包含的类和接口可以安全的从模型(server)和用户界面控制器或视图(client)访问.比如,需要在页面中访问根应用模块,应该使用oracle.apps.fnd.framework.OAApplicationModule接口(不应该在客户端访问它的实现).这个包也包括:

所有OAFramework异常OANLSServices类用于执行国际化操作oracle.apps.fnd.framework.server

包含了OAFrameworkModel-View-Controller中用于实现model的类和接口.

这些类规定用于任何客户端用户界面(不仅仅是OAFrameworkHTMLpages)[译注:

根据后面的意思,这里似乎应该是不能用于!

],并且不允许被任何oracle.apps.fnd.framework.webui包和其子包中的类和接口引用,也不允许应用中的webui包和其子包引用.当建造OAFramework应用模型时,应该使用这个包中的类替代BC4J中继承的类.警告:

永远不要从控制器或视图代码中调用这个包中的类.警告:

oracle.app.fnd.framework.webui

包括了构造OAFrameworkHTML用户界面的核心类.一些这个包中最常用的类和接口:

OAControllerOAPageContext任何下面所描述的beans子包中的类

警告:

警告:

永远不要从模型代码中调用这个包中的类.

oracle.app.fnd.framewo

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

当前位置:首页 > 农林牧渔 > 水产渔业

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1