OAF_EO系列1 - Definition定义(概念)
2014-06-14 Created By BaoXinjian
何谓Entity Object User’s Guide中有比较形象的描述:
针对表、视图、快照封装商业规则、可用于多种客户端(不仅限于OA Framework),并包含所有的针对这些数据库对象的验证及行为。
EO在Module中的地位:
从图上可看出,EO处于DB上层,VO下层。这就决定了,EO可调用DB层的CLASS,而只有VO可调用EO层的CLASS。
下面是关于EO的一些描述:
- 每张表至多有一个Entity Object: 我的理解,你不能把一张表拆开两部分,各建一个EO.
- 每个EO须包括表中所有的Attribute(即字段).
- 在EO中,你可以编写字段初始化, Attribute(字段级)校验, Entity(多字段联合)校验.
- 你可以建立EX(Entity Expert) 实现多EO之间的校验.
EO又为两种类型(主要从编程控制方法来分)
- JAVA Entity Object : 基于JAVA语法来实现数据操作的EO.
- PL/SQL Entity Object: 基于PL/SQL Store Procedure来实现数据操作的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: 定义字段的属性
- 建 议不要更改Attribute Name , Attribute Type , Database Column Name&Type. 这是OAF从数据库中提取出来的,和表是一致的. 请注意,这里的Attribute Name 很重要,是我们在OAF将要使用的名称,而非Database Column Name
- 默认的,所有字段均须勾选 Persistent (稳定) 及 Queriable(可查询)
- 如 表中定义有Primary Key,则这里的Primary Key会自动勾选,如表中没有,你可以选择一个Attribute来勾选,PK Attribute 中的值须具有唯一性,是操作Row的依据。勾选Primary Key后,请务必把Mandatory(强制)勾选。如果你没有勾选Primary Key,OAF会自动帮EO建一个ROWID 列做为PK
- 不要勾选Unique, 这个选项不会影响PK的使用。
- Discriminator选项用于Polymorphic EO(多态EO)(后述).
- Change Indicator 用于Object version number Column,即这张表需要用此字段来记录更新版本(ERP标准表中常有这种字段,客户化系统中一般没有).
- 通过勾选Updateable中的选项来定义字段是否可修改.
- 通过勾选Refresh After来定义在执行Database Trigger后是否刷新EO
Step 4: 生成JAVA文件及方法
除了Data Manipulation Methods不选外,其它都选(具体原因有待研究)。
勾选后,OAF会自动生成此EO对应的CLASS文件,并内置好相应的方法(标准方法,你可以按照需要进行扩展)。
Step 5: 定义EO的Turning 属性
勾选 Use Update Batching, 并设定Threshold(上限) 为100
这个选项有什么作用呢?User’s Guide中有描述(但我不太明白)
1.此选项非常重要如果你的EO是针对多语言表的时候(即表名后有_TL后缀的)
2.有些情况下,这个选项是不能勾的:
a. 如果你的EO 是PL/SQL EO
b. EO中有BLOB或CLOB字段
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 Module 和Class:
Oracle.apps.fnd.framework.server.OAEntityCache
存放查询数据的缓存, 多个基于此EO的VO共享同一个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.
案例:建立一个Invoices Header对应的EO
Step 1: 定义EO名称,路径及对应的数据库对象
Step 2: 选择EO包含的字段
Step 3: 定义字段的属性
Step 4: 生成JAVA文件及方法
Step 5: 定义EO的Turning 属性
Thanks and Regards
参考:Tony Liu 深入EO系列和Developer Guide
OAF_EO系列1 - Definition定义(概念)的更多相关文章
- SharePoint 2013 图文开发系列之列表定义高级篇
转载自 http://www.cnblogs.com/jianyus/p/3484714.html SharePoint列表库,是我们使用过程中最常用的库,下面,我们简单介绍下代码定义自定义列表,主 ...
- jquery系列教程7-自定义jquery插件全解:对象函数、全局函数、选择器
点击打开: jquery系列教程1-选择器全解 jquery系列教程2-style样式操作全解 jquery系列教程3-DOM操作全解 jquery系列教程4-事件操作全解 jquery系列教程5-动 ...
- [AngularJS] “路由”的定义概念、使用详解——AngularJS学习资料教程
这是小编的一些学习资料,理论上只是为了自己以后学习需要的,但是还是需要认真对待的 以下内容仅供参考,请慎重使用学习 AngularJS“路由”的定义概念 AngularJS最近真的很火,很多同事啊同学 ...
- Android画图系列(二)——自己定义View绘制基本图形
这个系列主要是介绍下Android自己定义View和Android画图机制.自己能力有限.假设在介绍过程中有什么错误.欢迎指正 前言 在上一篇Android画图系列(一)--自己定义View基础中我们 ...
- faster-rcnn系列原理介绍及概念讲解
faster-rcnn系列原理介绍及概念讲解 faster-rcnn系列原理介绍及概念讲解2 转:作者:马塔 链接:https://www.zhihu.com/question/42205480/an ...
- 原创】Java并发编程系列2:线程概念与基础操作
[原创]Java并发编程系列2:线程概念与基础操作 伟大的理想只有经过忘我的斗争和牺牲才能胜利实现. 本篇为[Dali王的技术博客]Java并发编程系列第二篇,讲讲有关线程的那些事儿.主要内容是如下这 ...
- OAF_EO系列2 - Validation数据校验验证机制(概念)
2014-06-12 Created By BaoXinjian
- OAF_EO系列6 - Delete详解和实现(案例)
2014-06-14 Created By BaoXinjian
- OAF_EO系列5 - Update详解和实现(案例)
2014-06-14 Created By BaoXinjian
随机推荐
- JavaScript个人学习记录总结(二)——验证表单输入之模式匹配
该示例检查从文本窗口部件中获取姓名和电话号码这两个表单数据的有效性.当文本框中的值发生变化时,即引发一个change事件,从而可以调用一个函数来检查这两个输入值的格式是否正确. validator.h ...
- jquery】常用的jquery获取表单对象的属性与值
[jquery]常用的jquery获取表单对象的属性与值 1.JQuery的概念 JQuery是一个JavaScript的类库,这个类库集合了很多功能方法,利用类库你可以用一些简单的代码实现一些复杂的 ...
- 第二章 C语言编程实践
上章回顾 宏定义特点和注意细节 条件编译特点和主要用处 文件包含的路径查询规则 C语言扩展宏定义的用法 第二章 第二章 C语言编程实践 C语言编程实践 预习检查 异或的运算符是什么 宏定义最主要的特点 ...
- 比较实用的JavaScript库
如果你操作过cookie的接口,那么你一定会感觉这东西的规范真的是太复杂了,根本记不住啊,其实你是对的,因为cookie的接口设计的是有问题的,也就是说设计的太底层了,根本不友好,那么来试试这个js库 ...
- 论文笔记之: Recurrent Models of Visual Attention
Recurrent Models of Visual Attention Google DeepMind 模拟人类看东西的方式,我们并非将目光放在整张图像上,尽管有时候会从总体上对目标进行把握,但是也 ...
- JAVA Lambda Expressions streams
http://www.oracle.com/webfolder/technetwork/tutorials/obe/java/Lambda-QuickStart/index.html https:// ...
- [C# 基础知识梳理系列]专题六:泛型基础篇——为什么引入泛型
引言: 前面专题主要介绍了C#1中的2个核心特性——委托和事件,然而在C# 2.0中又引入一个很重要的特性,它就是泛型,大家在平常的操作中肯定会经常碰到并使用它,如果你对于它的一些相关特性还不是很了解 ...
- maxsdk sample中3dsexp.rc点不开并提示specstrings.h中找不到sal.h解法
在网上下载sal.h文件并拷贝到specstrings.h所在目录(C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Include)即可. sa ...
- 【转载】写runat="server"有什么用
aspx运行时会被编译,其中没有runat="server"属性的html标签会被直接写入response,有runat="server"属性的html标签会转 ...
- sqlserver修改某列为行号
UPDATE t_users SET t_users.id=u.num1 FROM t_users INNER JOIN (SELECT row_number() over(order by id) ...