针对表,视图,快照封装商业规则,可用于多种客户端(不仅限于OA Framework),并包含所有的针对这些数据库对象的验证及行为.

 

EOModule中的地位:

 

 

 

从图上可看出,EO处于DB上层,VO下层。这就决定了,EO可调用DB层的CLASS,而只有VO可调用EO层的CLASS

 

 

 

 

下面是关于EO的一些描述:

  1. 每张表至多有一个Entity Object: 我的理解,你不能把一张表拆开两部分,各建一个EO.
  2. 每个EO须包括表中所有的Attribute(即字段).
  3. EO,你可以编写字段初始化,  Attribute(字段级)校验, Entity(多字段联合)校验
  4. 你可以建立EX(Entity Expert)实现多EO之间的校验.

 

EO又为两种类型(主要从编程控制方法来分)

 

JAVA Entity Object基于JAVA语法来实现数据操作的EO.

PL/SQL Entity Object:基于PL/SQL Store Procedure来实现数据操作的EO.

 

后面我会详细补充两种EO的使用心得.

 

EO的建立过程:

JDEV提供了Wizard来建立EO.你可以按照向导一步一步完成一个EO的建立:

 

Step 1: 定义EO名称,路径及对应的数据库对象

 

 

 

Name: xxxxEO (应按照Object name standard来命名).

Package: <yours company>.oracle.apps.<appl short name>.<component>.schema.server

Extends Entity: 留空(除非你要继承一个已有的EO).

Schema Object: 根据应用选择表,视图,同义词或快照.

Database Schema:选择应用.

 

 

 

Step 2: 选择EO包含的字段

 

 

1.显示了表中所有的字段,OAF中称为Attribute.

2.建议不要Remove任何字段,除非基表已发生变化.

3.如基表增加了字段,点击New from table…EO中新增Attribute.

4.如要增加非表中字段(比如计算字段),可点击New…

5. 建议表中最好包括WHO字段,否则后面在编译时会报错...

 

Step 3: 定义字段的属性

 

 

 

  1. 建议不要更改Attribute Name , Attribute Type , Database Column Name&Type.这是OAF从数据库中提取出来的,和表是一致的请注意,这里的Attribute Name很重要,是我们在OAF将要使用的名称,而非Database Column Name
  2. 默认的,所有字段均须勾选 Persistent (稳定 Queriable(可查询)
  3. 如表中定义有Primary Key,则这里的Primary Key会自动勾选,如表中没有,你可以选择一个Attribute来勾选,PK Attribute中的值须具有唯一性,是操作Row的依据。勾选Primary Key后,请务必把Mandatory(强制)勾选。如果你没有勾选Primary KeyOAF会自动帮EO建一个ROWID列做为PK
  4. 不要勾选Unique,这个选项不会影响PK的使用。
  5. Discriminator选项用于Polymorphic EO(多态EO)(后述).
  6. Change Indicator用于Object version number Column,即这张表需要用此字段来记录更新版本(ERP标准表中常有这种字段,客户化系统中一般没有).
  7. 通过勾选Updateable中的选项来定义字段是否可修改.
  8. 通过勾选Refresh After来定义在执行Database Trigger后是否刷新EO

 

 

Step 4:生成JAVA文件及方法

 

 

 

除了Data Manipulation Methods不选外,其它都选(具体原因有待研究)。

勾选后,OAF会自动生成此EO对应的CLASS文件,并内置好相应的方法(标准方法,你可以按照需要进行扩展)。

 

 

 

Step 5:定义EOTurning属性

 

 

勾选 Use Update Batching,并设定Threshold(上限)100

这个选项有什么作用呢?User’s Guide中有描述(但我不太明白)

 

1. 此选项非常重要如果你的EO是针对多语言表的时候(即表名后有_TL后缀的)

2. 有些情况下,这个选项是不能勾的:

a.      如果你的EOPL/SQL EO

b.      EO中有BLOBCLOB字段

c.      没有PK或只有ROWID PK

d.      当你勾选了 Refresh After中的任一项

 

User’s Guide对此选项的说明是此选项可使OAF在一个提交动作中包含多个DML处理,比如可一次更新多个Row

 

 

至此,一个EO就建好了,你就可以通过VO来调用它,在Page上对数据库表进行操作了。

 

 

Entity Object:

针对表/视图/同义词/快照,封装商业逻辑和DML处理.

 

JAVA Entity Object:

不修改OAF中标准的DML处理功能,使用标准的JAVA语句完成对数据的处理。

 

主要的Object ModuleClass:

Oracle.apps.fnd.framework.server.OAEntityCache

存放查询数据的缓存,多个基于此EOVO共享同一个Cache.

 

<Your EO name>EOImpl

继承于oracle.apps.fnd.framework.server.OAEntityImpl.此对象表示EO本身,当被实例化后,表示数据中的一行

 

Oracle.apps.fnd.framework.server.OAEntityDefImpl

描述组成EO的无素,例如Attributes, Events, Validators, Associations, Properties.

 

<Your EO name>Expert

继承于oracle.apps.fnd.framework.server.OAEntityExpert.

 

oracle.jbo.Key

代表Primary Key and Foreign Key and composite row identifier.