EBS OAF开发中的Java 实体对象(Entity Object)验证功能补充

(版权声明,本人原创或者翻译的文章如需转载,如转载用于个人学习,请注明出处;否则请与本人联系,违者必究)

EO理论上是只有产品组维护,里面包含其所有的业务逻辑,并提供相应的Expert给自己或者其它产品组使用。而VO是各个组根据需要或基于EO或者只读的SQL而建立的,里面可以根据需要添加自己的业务实现和逻辑。

对于EO内部的验证功能,在开发文档中主要介绍了三种:

1. 在setter里面实现单个属性的验证。这主要是对于没有依赖关系的属性,也就是说它的验证不需要其它会被修改的属性的支持。比如,验证一个数量是不是正数,是不是在一个范围之内;但是如果其也要依赖界面上的输入的计量单位的话,就要考虑row层次上的验证,因为setter的调用顺序是未知的,可能先调用数量的setter,然后再调用计量单位的setter,这样的验证就会有问题了。

2. 在Row层次上进行跨属性的验证.因为在所有需要调用的setter都调用完之后,会调用row层次的验证方法validateEntity().所有行级的跨属性验证都应该放在这里。它的缺点是,每次request中如果有调用setter的话,就会调用row层次的校验,所以在开发文档中有这么一句话,

Any logic which operates at the row level -- and is not particularly sensitive to being called repeatedly --should be included in the validateEntity() method.

也就是说所有行级的且对重复调用不敏感的验证可以放在这里,如何定义敏感,我的理解是1.每次验证花费的时间很多;2.一个transaction里多次请求每次都会调用setter,比如大量的PPR事件,会导致多次验证,可能影响用户体验;但是开发文档中虽然这么说了,但并没有说明这种不能重复调用的验证应该在哪里实现,如何实现。

3. 进行跨实体属性验证.对于composition的AO来说,这个不是问题,因为detail的验证总是发生在master的验证之前;而对于reference的来说,就要实现类似“调解人”的对象,其需要实现ValidationListener接口。但这种情况较少,而且适用范围较小。

对于第二种情况的例外,可以考虑覆盖基类OAEntityImpl的prepareForDML()方法.对于其,Javadoc有下面的说明

Process a row when any operation like insert/update/deleteis performed. User can overwrite this method and add any custom logic, likeinitialize any attribute on insertion.

也就是在构建DML SQL语句之前,我们可以对这个row做一些处理,比如设置一些属性且其只有在保存的时候才需要设置的,如获取sequence之类的(这个我测试过,确实可以);或者做一些只有保存时才需要的验证(这个没有测试过,理论上应该可以,后面有空的话会测试一下).

EBS OAF开发中的Java 实体对象(Entity Object)验证功能补充

时间: 2024-10-14 19:00:47

EBS OAF开发中的Java 实体对象(Entity Object)验证功能补充的相关文章

EBS OAF开发中实体对象和视图对象的属性设置器

(版权声明,本人原创或者翻译的文章如需转载,如转载用于个人学习,请注明出处:否则请与本人联系,违者必究) 源文: Home > Oracle Application Framework Documentation Set, Release 12.2 > Oracle Application Framework Developer's Guide > Chapter 5: Implementing Server-Side Features > Entity Object and Vi

EBS OAF开发中的错误/异常处理(ErrorHandling) (转)

原文地址 EBS OAF开发中的错误/异常处理(ErrorHandling) EBS OAF开发中的错误/异常处理(ErrorHandling) (版权声明,本人原创或者翻译的文章如需转载,如转载用于个人学习,请注明出处:否则请与本人联系,违者必究) 总览 这篇文档描述了如何在你的Model和控制器代码中抛出OAF 框架异常. 内容 l  异常类型 l  异常类 l  批量异常 l  异常示例 l  对话框页和消息对话框 异常类型 OAF框架处理三种基本类型的异常:常规(general),验证(

EBS OAF 开发中的OAQueryBean的三种构造模式

EBS OAF 开发中的OAQueryBean的构造模式 (版权声明,本人原创或者翻译的文章如需转载,如转载用于个人学习,请注明出处:否则请与本人联系,违者必究) 当你为pageLayout区域添加一个query 区域时,OAF框架生成一个oracle.apps.fnd.framework.webui.beans.layout.OAQueryBean对象,它依赖于它的配置,并通过一个子控件table, advanced table或者HGrid来实现simple search, advanced

EBS OAF开发中如何实现功能页签(Global Tab)

(版权声明,本人原创或者翻译的文章如需转载,如转载用于个人学习,请注明出处:否则请与本人联系,违者必究) 功能页签的实现不需要任何编码,和subTab不一样,可以和subTab共存.其主要实现是靠配置,步骤如下: 1.      建立两个OAF页面的Function. 2.      为每个function分别建立一个HTML Tab 类型的菜单,并把相应的Function加入到菜单中,但不要声明Prompt,如下: 3.      建立一个Home Page类型的菜单,并把上面建立的两个HTM

EBS OAF开发中如何通过ReferenceAO进行验证

(版权声明,本人原创或者翻译的文章如需转载,如转载用于个人学习,请注明出处:否则请与本人联系,违者必究) Reference AO 除了用于VO中的数据展示,还可以用于对EO进行辅助验证,比如在示例中建立的Employee和Manager的AO,假设如果有Employee的工资不能比其Manager的工资的高的验证就可以通过AO在EO轻松实现. 1.      AO的创建参考之前的文章和OAF Tutorial 示例代码,在AO设置可以在Employee EO访问Manager EO,这里的Ac

EBS OAF开发中实现参数式弹出窗口

(版权声明,本人原创或者翻译的文章如需转载,如转载用于个人学习,请注明出处:否则请与本人联系,违者必究) 概览 参数式弹出窗口和嵌入式弹出窗口不一样,它拥有独立的区域,并不嵌入到使用页面中,它里面的内容根据需要来获取和生成,它拥有自己的AM和页面状态,对popup页面事件的处理也不一样.两种弹出式窗口都只在下面四种组件所支持,既不能改变大小也不可移动. 1.        Text(messageStyledText) 2.        Image 3.        Link 4.     

EBS OAF开发中实现參数式弹出窗体

(版权声明,本人原创或者翻译的文章如需转载,如转载用于个人学习,请注明出处:否则请与本人联系,违者必究) 概览 參数式弹出窗体和嵌入式弹出窗体不一样,它拥有独立的区域,并不嵌入到使用页面中,它里面的内容依据须要来获取和生成,它拥有自己的AM和页面状态,对popup页面事件的处理也不一样.两种弹出式窗体都仅仅在以下四种组件所支持,既不能改变大小也不可移动. 1.        Text(messageStyledText) 2.        Image 3.        Link 4.    

EBS OAF 开发中的实体关联关系对象AO

(版权声明,本人原创或者翻译的文章如需转载,如转载用于个人学习,请注明出处:否则请与本人联系,违者必究) 关联关系对象可以让我们声明式创建实体对象间的更新.在运行时,BC4J使用这些关系来协调关联的对象.主要有两种基本的关联类型: l  组合-一种强关联关系,源实体对象拥有目标实体对象.换句话说,目标对象不能独立于源对象之外而存在.比如,一个采购订单的头是由采购订单行组成,而这些行在订单头上下文之外是没有意义或者生命周期. l  引用-一种弱关联关系,源实体对象仅仅引用目标实体对象.比如,一个采

EBS OAF开发中怎样通过ReferenceAO进行验证

(版权声明.本人原创或者翻译的文章如需转载,如转载用于个人学习,请注明出处:否则请与本人联系,违者必究) Reference AO 除了用于VO中的数据展示,还能够用于对EO进行辅助验证.比方在演示样例中建立的Employee和Manager的AO,假设假设有Employee的工资不能比其Manager的工资的高的验证就能够通过AO在EO轻松实现. 1.      AO的创建參考之前的文章和OAF Tutorial 演示样例代码,在AO设置能够在Employee EO訪问Manager EO,这