OAF开发简介.ppt_第1页
OAF开发简介.ppt_第2页
OAF开发简介.ppt_第3页
OAF开发简介.ppt_第4页
OAF开发简介.ppt_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1,上海汉得信息技术股份有限公司 HAND Enterprise Solutions Company Ltd. www.hand-,OAF开发简介,汉得信息技术有限公司版权所有,目录,一、OA Framework 框架简介,二、OA Framework 开发实例,三、OA Framework 常用代码,四、OA Framework 参考资料,Quick-HAND: 分步实施,OA Framework 框架简介,Oracle Application Framework(OA Framework)是 Oracle 提供的基于 Web应用的开发与发布平台,OA Framework是一个基于MVC的应

2、用开发框架,主要包括以下组件: 模型层(Model):使用BC4J(Business Components for Java),是一个管理持久性数据和实现业务逻辑的框架,主要包括以下对象:实体对象(EO)、实体关联对象(AO)、视图对象(VO)、视图关联对象(VL)、应用模块对象(AM)、事务对象(Transaction)等。 视图层(View):使用UIX(Oracle XML user interface framework)框架,解析和处理XML文件,加载HTML页面。 控制器层(Controller):使用Controller类,实现对Request/Response逻辑处理。,Qui

3、ck-HAND: 分步实施,OA Framework 框架简介-模型,模型(Model):封装了底层的数据和应用程序业务逻辑,其关联对象主要包括:AM、EO、AO、VO、VL、Transaction等。,OA Framework基本模型结构如下图所示:,Quick-HAND: 分步实施,OA Framework 框架简介-模型,AM:Application Module(应用程序模块) 管理和提供访问相关BC4J(Business Component for java)业务组件对象的容器。 继承于oracle.apps.fnd.framework.server.OAApplicationMod

4、uleImpl类。 每一个OA Framework页面都有一个根应用程序模块和顶层的页面区域(pageLayout)关联。根应用程序模块提供事务上下文和创建数据库连接。 如果多个页面共同参与相同的事务,它们应该共享相同的根应用程序模块。 如果一个页面独立于其他页面执行事务,那么它应该拥有自己的应用程序模块。 根应用程序模块可以包含一个或多个嵌套的应用程序模块,此时根应用程序模块可以访问所有的子应用程序模块的数据和对象,子应用程序模块分享根应用程序模块创建的事务。当你创建一个可重用的、与数据库相交互的UI区域时,将会使用这个功能。,EO:Entity Objects (实体对象) 封装了与数据库

5、表中行相关联的业务规则(验证,行为等)。实体对象也可以基于表、视图、同义词等。 继承于oracle.apps.fnd.framework.server.OAEntityImpl类。 实体对象的属性和底层数据表列之间使用声明性的映射(XML文件),来自动实现查询、插入、更新和删除。,AO:Association Objects (实体关联) 定义实体对象间的关联关系 如果你有一些复杂的实体对象,比如3个层次的采购订单,订单头、订单行、发运行之间存在着一对多的关系,你可以根据相应的实体对象创建关联对象来定义这种一对多的关系。,Quick-HAND: 分步实施,OA Framework 框架简介-模

6、型,VO:View Object (视图对象) 视图对象封装了一个数据库查询SQL,提供了结果集的遍历功能。结果集包含了View中的row,每个row包含所有的查询字段。 继承于oracle.apps.fnd.framework.server.OAViewObjectImpl类。 可以使用以下之一的策略配置视图对象: 视图对象的属性映射到一个简单查询语句的列(通常用于只读视图对象) 视图对象的属性映射到实体对象的属性(通常用于插入、更新、删除实体对象) 一些属性映射到实体属性,而另一些直接映射到SQL查询的列(使用临时列,如一个计算的列) 视图对象的属性列不存在映射关系,仅作为一个虚拟属性使用

7、(页面动态控制)。 在OA Framework应用程序,在以下的场景中使用视图对象: 以特定的方式在用户界面中展现数据。为用户提供插入、更新和删除的页面操作对象,你将通过视图对象来执行这样的功能 以简单的查询创建下拉列表、LOV及其它UI控件 创建供业务逻辑使用的有效的验证查询。比如在采购订单头实体对象中,必须使用一个验证的查询来获得当前最大的采购订单行号来增加一个新的行。,VL:View Link (视图关联) 类似于实体关联,用于建立视图对象间的关联关系,如:订单头行表。,Quick-HAND: 分步实施,OA Framework 框架简介-模型,Transaction:OADBTrans

8、action (事务对象) OADBTransaction在模型中处于中心位置,封装了与应用模块相关联的JDBC连接,并且直接拥有创建的实体对象。(应用程序模块拥有视图对象,通过视图对象关联实体对象)。 OADBTransaction用途: 创建一个callable statement执行PL/SQL函数和过程。 访问session级应用程序环境,如用户名、id、当前职责等。 在需要执行NLS操作(如更改服务器的日期格式为用户日期格式)时,访问oracle.apps.fnd.framework.OANLSServices对象。 OADBTransaction说明: OAF中不需要对事务进行显示

9、的声明其开始或终了。 在第一句DML开始时,事务开始。 commit或rollback时,事务结束。,Quick-HAND: 分步实施,OA Framework 框架简介-视图,视图(View):格式化模型(Model)中的数据,并将其展现给用户, 即用户所看到的web页面。,与其他浏览器级的web页面一样, OA Framework将Page内容展现为标准的HTML。,页面在内存中是由具有层级关系的JavaBean来构建,与典型的Java UI客户端类似。,页面加载时,OA Framework根据XML文件,读取页面的描述性数据定义生成页面控件所对应Javabean的层次结构。,页面(Pag

10、e)构成:由Region(区域)和Item(组件)组成。,Item是一些独立的元件,如Button、InputField、Image、CheckBox等。,Region是一个用于包含Item和其它Region的容器对象。,每个定义的Region和Item都包含一个style属性,以便在运行时,OA Framework知道创建什么样的web bean对象,所有的页面必须有一个单独的顶级的Region(通常称为Root Region),该Region的style属性必须被设置为PageLayout,Region和Item在Jdeveloper的页面树型结构(即:XML文件)出现的次序决定了其运行时

11、对应WebBean的层次顺序。,Quick-HAND: 分步实施,OA Framework 框架简介-视图,OA Framework页面结构定义: 页面实例化效果:,Quick-HAND: 分步实施,OA Framework 框架简介-控制器,控制器( Controller ):响应用户的动作,控制应用进程的流转。,控制器与视图上的Region(如:PageLayout)相关联。,控制器继承于oracle.apps.framework.webui.OAControllerImpl类。,控制类定义了WebBean如何运转: 运行时操纵或初始化UI(包括无法在IDE静态生成的而需要编程实现的布局)

12、 捕获或者处理用户事件,比如点击按钮的动作。,请求处理: 当浏览器请求一个页面时: OAPageBean(主要的OA Framework页面处理类)使用页面的名称从应用模块池中获得需要的根应用模块。这个应用模块同时也从连接池中获得一个JDBC,同时页面的事务环境也被建立。 验证用户session是否有效,如果无效,则转到登录页。 OAPageBean根据请求参数来判断(GET或POST)和处理请求。,Quick-HAND: 分步实施,OA Framework 框架简介-控制器,两种不同请求的处理方式:,一、GET请求: 当处理一个GET请求时,OA Framework使用声明的UI定义来创建W

13、ebBean层次: OAPageBean在页面顶层PageLayout bean上调用processRequest(),整个页面按下面所述,递归地初始化web beans,包括任何相关的模型组件。 每个web bean实例化它的控制器(如果它包含控制器),调用控制器的processRequest方法。使用这个方法可以构造或修改页面layout,设置web bean属性及执行任何手工的数据初始化(比如在导航到页面前先执行自动查询) 一些复杂的web bean(如OATableBean和OAPageLayoutBean)通过调用控制器的prepareForRendering()方法来进行处理 每个

14、web bean在它们的子bean上调用processRequest OAPageBean将web bean层次传递给UIX以生成HTML再传递给浏览器,二、POST请求: 当处理一个POST请求时: OAPageBean检查是否内存中已包含web bean层次,(因为资源是可再生的)如果没有则按上面GET请求所描述的过程重新创建层次 OAPageBean在层次的每个bean上调用processFormData,来将Form中的数据写入模型(先在pageLayout region上调用processFormData,然后递归调用每个web bean)。将Form数据写入底层的模型将自动调用属性

15、和实体级的验证,如果验证有异常,则处理停止,将错误信息显示给用户。 OAPageBean在所有层次上的bean以上面所述相同的方式调用processFormRequest,这个方法可以加入控制器代码来响应用户的动作 如果没有JSP Forward或者redirect及异常,那么页面将被刷新,Quick-HAND: 分步实施,OA Framework 框架简介-架构图,Quick-HAND: 分步实施,OA Framework 框架简介-数据流,页面 PG,控制器 CO,应用模块 AM,视图对象 VO,实体对象 EO,Oracle数据库中的基表、视图、同义词,把数据存入数据库,把数据从数据库中取

16、出,Quick-HAND: 分步实施,OA Framework 框架简介-开发实例 安装,安装配置: 参照手册:OA_Framework_Development_Setup.doc 查找DBC文件: 命令方式: $cd $FND_SECURE $ls l $pwd 关于页面:,Quick-HAND: 分步实施,OA Framework 框架简介-开发实例,目录结构:需指定所属应用和模块名称,Quick-HAND: 分步实施,OA Framework 框架简介-开发实例,文件层次结构:,Quick-HAND: 分步实施,OA Framework 框架简介-开发实例,开发步骤: 创建AM 创建EO

17、 创建VO 创建PG 创建CO,Quick-HAND: 分步实施,OA Framework 框架简介-开发实例,创建根应用AM: 指定包名:oracle.apps.sfy.test.server 输入应用名称:TestAM 点击下一步至完成。,Quick-HAND: 分步实施,OA Framework 框架简介-开发实例,创建实体对象EO,关联数据库对象 指定包名:oracle.apps.sfy.schema.server 在Schema Object中输入表名:TEST_EMPLOYEE 备注:表名必须大写;表中需包含标准who字段;对象可基于表、视图、同义词、物化视图。 点击两次下一步后,

18、进入属性设定页,指定主键。 备注:没有主键将默认ROWID为主键。,Quick-HAND: 分步实施,OA Framework 框架简介-开发实例,创建VO,关联实体对象EO 指定包名:oracle.apps.sfy.test.server 指定VO名称:TestEmployeeVO 选择所对应的EO进行关联。 备注:开发需要时,可选择多个EO进行关联;VO的核心是一段SQL,可根据需要进行修改。,Quick-HAND: 分步实施,OA Framework 框架简介-开发实例,VO关联AM: 双击AM,在弹出页面中,将VO添加到AM之下。,Quick-HAND: 分步实施,OA Framewo

19、rk 框架简介-开发实例,创建PG,添加Region,Field及Button: 页面顶层PageLayout上关联AM,并设定窗体名称。 备注: 页面上可直接引用外部Region,OA Framework 框架简介-开发实例,创建页面对应的CO 在CO中添加页面初始化及按钮响应事件 备注:一个非常复杂的页面可以拥有多个CO,OA Framework 框架简介-开发实例,程序发布:,应用发布包括两个步骤: 上传编译后的Class文件至服务器 把%JDEV_USER_HOME%myclasses目录下的目录和文件,上传到$JAVA_TOP对应的目录下 导入页面到MDS中 ,a、 在%JDEV_I

20、NSTALL_DIR%目录中,新建一个VIS01_xml_import.bat文件,内容如下: %JDEV_INSTALL_DIR%/jdevbin/oaext/bin/import.bat %JDEV_USER_HOME%myprojectsoracleapps%1%2webui -jdk13 -mmddir %JDEV_USER_HOME%myhtmlOA_HTMLjrad -username apps -password apps -rootdir %JDEV_USER_HOME%myprojects -validate -dbconnection (DESCRIPTION= (ADDR

21、ESS=(PROTOCOL=tcp)(HOST=zhebs01.hand-)(PORT=1522)(CONNECT_DATA=(SID=VIS01)“ b、cmd运行上述文件,具体发布步骤可参照OAF开发资料包,OA Framework 框架简介-开发实例,Rosetta工具 在Java类中调用PL/SQL时使用Rosetta工具创建Java 类。 具体配置可参照OAF开发资料包,OA Framework 框架简介-开发实例,PPR(Partial Page Rendering):局部页面加载技术,PPR技术是指相对于刷新整个而言,只刷新页面中的部分区域来提交请求和完成响应的技术。PPR技术不

22、 需要你编写任何Javascript代码,而是控件自身就支持的功能。,开发步骤: 1、为Item指定以下属性: Action Type 设置为firePartialAction。 Event 指定事件的名称,这样可以使用pageContext.getParameter(EVENT_PARAM)进行捕获。 Submit 设定为True,PPR事件将提交Form,如果设定为False,则执行GET请求。False在当前版本不支持。 Parameters 如果需要传递请求参数,可以在这里指定。,2、创建PPR事件所需要控制的控件。,3、创建控制UI控件的视图对象,一般命名以PVO结尾,PVO中没有任

23、何查询定义。,4、指定PPR事件控制的控件属性Render、Read Only、Disabled或Required,使用SPEL语法: $OA. 5、编写Controller代码和应用程序模块代码,在processRequest()方法中调用应用程序模块方法创建PVO视图对象行,并赋初值。在processFormRequest()捕获PPR事件,调用应用程序模块的方法,更改属性值。,OA Framework 框架简介-开发实例,EBS标准功能个性化: 简单个性化:字段失效,必输等 扩展标准功能:替换CO、VO、AM等 具体实现参照OAF开发资料包,OA Framework 框架简介-常用代码,

24、回避EO验证 public void createSupplier() OAViewObject vo = getSuppliersVO(); Row row = vo.createRow(); vo.insertRow(); row.setNewRowState(Row.STATUS_INITIALIZED); vo.createRow()的方法将调用实体对象的create方法,一般在create方法中加入主键赋值和默认值赋值, 此时该实体对象的状态为NEW,将触发属性级验证和实体级验证,而此时很可能不能通过验证, 因为有些属性可能是必需的(而且一旦触发了验证,该实体对象就会在commit时

25、自动写入数据库)。 所以必须调用row.setNewRowState(Row.STATUS_INITIALIZED)避免对该行执行验证 (当状态为STATUS_INITIALIZED时,只要调用视图对象行的setAttributte就会自动把状态改为 STATUS_NEW,将触发验证逻辑)。,OA Framework 框架简介-常用代码,AOL的取得方法: import mon.Lookups; import oracle.apps.fnd.sso.Utils; Lookups AOL = new Lookups(Utils.getAppsContext(); System.out.print

26、ln(AOL: +AOL.getLookupObject(TEST_013_XXXX, 10).getMeaning();,OA Framework 框架简介-开发实例,页面跳转: 自跳转: pageContext.setForwardURLToCurrentPage(null, / no parameters to pass true, / retain the AM OAWebBeanConstants.ADD_BREAD_CRUMB_NO, OAWebBeanConstants.IGNORE_MESSAGES); 页面间跳转: pageContext.setForwardURL(OA.j

27、sp?page=/oracle/apps/dem/employee/webui/EmpDetailsPG, / target page null, / not necessary with KEEP_MENU_CONTEXT OAWebBeanConstants.KEEP_MENU_CONTEXT, / no change to menu context null, / No need to specify since were keeping menu context params, / request parameters true, / retain the root applicati

28、on module OAWebBeanConstants.ADD_BREAD_CRUMB_YES, / display breadcrumbs OAException.ERROR); / do not forward w/ errors,OA Framework 框架简介-常用代码,实体校验: 属性级:在EO属性对应的set方法中进行抛出 throw new OAAttrValException(OAException.TYP_ENTITY_OBJECT, / indicates EO source getEntityDef().getFullName(), / entity name get

29、PrimaryKey(), / entity primary key ShipmentQuantity, / attribute Name getShipmentQuantity(), / bad attribute value SFY, / nessage application short name SFY_ISP_MSG_03); / message name 行级:在validateEntity方法中抛出 MessageToken token = new MessageToken(STATUS, getStatus(); throw new OARowValException(OARo

30、wValException.TYP_ENTITY_OBJECT, getEntityDef().getFullName(), getPrimaryKey(), SFY, SFY_ISP_MSG_09, token); 开发需要时,可以在AM中手动触发属性的set方法,抛出Message.,OA Framework 框架简介-常用代码,视图校验: 属性级:在VO属性对应的set方法中抛出 throw new OAAttrValException(OAException.TYP_VIEW_OBJECT, / indicates EO source getViewObject().getFullNa

31、me(), / entity name getKey(), / entity primary key ShipmentQuantity, / attribute Name getShipmentQuantity(), / bad attribute value SFY, / nessage application short name SFY_ISP_MSG_03); / message name 行级:在validate方法中抛出 MessageToken token = new MessageToken(STATUS, getStatusMeaning(); throw new OARowValException(OARowValException.TYP_VIEW_OBJECT, getViewObject().getFullName(), getKey(), SFY, SFY_ISP_MSG_09, token);,OA Framework 框架简介-常用代码,自定义高级查询: public void executeQuery() MaterialNoticeListPVORowImpl searchRow = (MaterialN

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论