马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。如果您注册时有任何问题请联系客服QQ: 83569622 。
您需要 登录 才可以下载或查看,没有帐号?注册
x
一个root AM中内嵌一个或多个AM,这种情况也是可能的。在此种情况下,一个事务中的所有的子AM均有根AM来创建,并且根AM可以访问所有由其子AM所拥有的数据和对象。利用这个特性,你可以创建可重用的与数据库进行交互的UI region。
Entity Objects (and Association Objects)
BC4J实体对象(Entity Object)封装了业务规则(验证、动作等等)。改业务规则通常和数据库中的表字段有关联。比如,OAF ToolBox教程实例库中包含有一个FWK_TBX_SUPPLIERS的表,用来存储供应商的定义。我们为这个表定义一个实体对象(SupplierEO),用来实现所有的业务规则,诸如插入、编辑或删除一个供应商。当然,实体对象同样也可以基于视图、同义词或者一个快照。
OAF既支持Java也支持PL/SQL的实体对象(在OAF课程第五章中会介绍业务逻辑设计和实现的细节,包括如何在Java和PL/SQL实体对象进行取舍)。

大多数实体对象都是继承oracle.apps.fnd.framework.server.OAEntityImpl的子类。
实体对象(Entity Object)与数据表这见是一对一的映射关系,并且所有的Oracle Application实体对象均应包括它们关联的表中的所有字段。实体对象的属性和其对应的数据库字段之间有明显的对应关系,可以自动实现查询、插入、更新、或者删除操作。大多数情况下,都需要开发人员添加对数据操作的校验逻辑,以保证业务数据的完整性。
实体对象不仅仅只是OAF客户端来使用,而是可以在需要的时候被任何程序调用,以便与被给定的表进行交互。同样,这也需要在实体对象的逻辑规则校验方面加以巩固,这样才能在客户端操作的时候不用担心业务规则的完整。
Association Objects
对于复杂对象(比如一个采购订单中存在1对多的关系:订单头、订单行与发料行),你可以在相应的实体对象间定义AO。你可以生成弱连接(比如一个采购订单头信息中引用的供应商信息,该供应商信息是独立于采购订单存在的)和强连接(比如订单和该订单的订单行,订单行不能独立于订单头存在)。
View Objects (and View Links)
简单来讲,一个BC4J View Object封装了一个对数据库的查询。在执行查询后,VO将做为一个可重复列举和访问的结果集而存在。该结果集中包含了一个或多个行,而每行包含了从数据库查询中返回的相应的独立属性信息。

所有的VO子类都继承自oracle.apps.fnd.framework.server.OAViewObjectImpl。
每个VO都可以使用下面的方法来设置其对应的数据库查询:
l 属性映射到SQL语句中的字段(通常用于简单的、只读性的VO)
l 属性映射到EO的属性(通常用于增、删、改EO)
l 一部分属性映射到EO,一部分利用SQL语句来直接生成(通常用于增加EO数据中不能由数据库查询生成的临时字段-为实现在UI展现目的而产生的计算列就是一个典型的例子)
在OAF应用中,你将在以下的情景中使用VO来完成必要的工作(将在后面章节详细讲述)。
l 为特定的用户界面产生优化过的数据。如果用户界面支持对EO的增、删、改操作,将需要使用VO来完成这些工作。
l 为poplist、lov和其他的UI组件来生成简单的查询。
l 在业务逻辑中生成必要的“验证查询”。比如说,在采购订单头的EO中,可以使用验证VO来得到当前数据库中采购订单的最大行号,以便在新的采购订单行生成时加一使用。
最终,你将不仅要定义VO,而且还要为它编写代码。在通常的情况下,代码将要实现对复杂查询的数据绑定并进行查询。
View Links
和EO间可以生成AO一样,VO间也可以生成VL。比如说,你可以为订单头的VO和订单行的VO生成VL。这可以实现在运行时访问主信息时自动查询带出子信息。
OADBTransaction
注:基于一致性和精确性的考虑,上图中应包括对oracle.apps.fnd.framework.server.OADBTransactionImpl的实现以便来代替oracle.apps.fnd.framework.OADBTransaction接口。当然,你也可以依据代码专门的需求来选择后者。
如上图所示,OADBTransaction在建模代码中扮演了一个核心的角色。它封装了一个基于root AM的JDBC数据库连接的会话,并且可以直接被你生成的EO进行调用(你建立的VO,从属于rootAM,其行与EO发生关联)。你可以以下面的方式在你的建模代码中实现OADBTransaction的规则用法:
l 为执行PL/SQL函数或存储过程生成可调用的语句(Callable Statement)
l 访问会话级的应用上下文信息,比如用户的名称,ID,当前职责等等
l 在需要执行NLS操作时,比如将服务器时间格式转换成用户时间格式等,可以通过访问一个oracle.apps.fnd.framework.OANLSServices对象来实现
由rootAM提供对OADBTransaction的访问。
1.1.1. The View
视(view)格式化模型(model)中的数据,并将其展现给用户。
在OAF开发课程第三章中将会对下面的内容进行详细论述。
定义页面
在开发阶段,将会通过Jdeveloper中的工具来显示的指定页面的bean的层次,和我们在第一个例子中讲述的一样。在Oracle Application的开发中,页面的定义(或资源的控制)将通过XML文件来进行。当你的产品部署到用户站点时,OA Framework在数据库之外运行页面定义。
可以使用Jdeveloper来定义由region(区域)和item(组件)组成的页面。
l 组件是单独的元件,比如按钮,域(field)以及其他不能包含元件的组件
l 区域是可以包含组件和子区域的对象容器。其可包含头(header)、表格(table)以及其他特定的布局控件
l 你定义的每个区域和每个组件都有风格(style)属性来告知OA Framework web bean对象如何在运行时进行实例化(既按顺序描述如何为bean生成HTML)。比如,你定义了一个region,并将其style属性设置为table,则OA Framework将实例化一个oracle.apps.fnd.framework.webui.beans.table.OATableBean类。
l 所有的页面必须有一个单独的顶级的region(通常称为root region),该region的style属性必须被设置为pageLayout。这将实例化一个oracle.apps.fnd.framework.webui.beans.layout.OAPageLayoutBean类。
l Region和item在Jdeveloper的页面树(或相应的XML文件中)出现的次序将决定Framework在运行时将其添加到bean中的层次顺序。
上图给出了一个后台的web bean为一个简单页面进行实例化后的效果。对应的描述指明了相应的web bean的名称。其中,poplist和submit button分别实例化的是oracle.apps.fnd.framework.webui.beans.message.OAMessageChoiceBean和oracle.apps.fnd.framework.webui.beans.form.OASubmitButtonBean。

附件:
|