在EORow或者VORow中对数据进行重复性校验
需求:在设置付款条件时不允许账期+付款方式重复。
由于本次需求仅需要对VO缓存中的数据进行重复性校验,所以仅需进行缓存遍历即可,不需要校验数据库。
方式1,在EORow的进行数据校验。
public void setPaymentTermsId(Number value) {
if(value!=null && !"".equals(value) && this.getPaymentMethod()!=null && !"".equals(getPaymentMethod()) ){
validateRepeat(value, getPaymentMethod(), "TERMS");
}
setAttributeInternal(PAYMENTTERMSID, value);
} public void setPaymentMethod(String value) {
if(value!=null && !"".equals(value) && this.getPaymentTermsId()!=null && !"".equals(getPaymentTermsId()) ){
validateRepeat(getPaymentTermsId(), value, "METHOD");
}
setAttributeInternal(PAYMENTMETHOD, value);
} public void validateRepeat(Number payTerms,String payMethod,String cloumn){
com.sun.java.util.collections.Iterator payIterator =
getEntityDef().getAllEntityInstancesIterator(getDBTransaction());
String currentStr = payTerms+"-"+payMethod; while(payIterator.hasNext()){
CuxPoPayProvisionTempEOImpl cachePay = (CuxPoPayProvisionTempEOImpl)payIterator.next();
String validationStr = cachePay.getPaymentTermsId()+"-"+cachePay.getPaymentMethod();
if(currentStr.equals(validationStr)){
if("TERMS".equals(cloumn)){
//发生重复异常时,设置选择值为空,避免选择后提示了异常,选择值仍然放置到了Poplist中
setPaymentTermsId(null);
}
if("METHOD".equals(cloumn)){
//发生重复异常时,设置选择值为空,避免选择后提示了异常,选择值仍然放置到了Poplist中
setPaymentMethod(null);
} throw
new OAAttrValException(OAException.TYP_ENTITY_OBJECT,
getEntityDef().getFullName(),
getPrimaryKey(),
"PayProvisionTempId", currentStr,
"CUX",
"CUX_PO_PAY_PROVI_VALIDATION"); // Message name
} } }
2.在VORow中进行校验,
public void setPaymentTermsId(Number value) {
if(value!=null && !"".equals(value) && this.getPaymentMethod()!=null && !"".equals(getPaymentMethod()) ){
validateRepeat(value, getPaymentMethod(), "TERMS");
}
setAttributeInternal(PAYMENTTERMSID, value);
} public String getPaymentMethod() {
return (String) getAttributeInternal(PAYMENTMETHOD);
} public void validateRepeat(Number payTerms,String payMethod,String cloumn){
CuxPoPayProvisionTempEOImpl tempEO =(CuxPoPayProvisionTempEOImpl)this.getEntity(0);
com.sun.java.util.collections.Iterator payIterator = tempEO.getDefinitionObject().getAllEntityInstancesIterator(tempEO.getDBTransaction()); String currentStr = payTerms+"-"+payMethod; while(payIterator.hasNext()){
CuxPoPayProvisionTempEOImpl cachePay = (CuxPoPayProvisionTempEOImpl)payIterator.next();
String validationStr = cachePay.getPaymentTermsId()+"-"+cachePay.getPaymentMethod();
if(currentStr.equals(validationStr)){
if("TERMS".equals(cloumn)){
setPaymentTermsId(null);
}
if("METHOD".equals(cloumn)){
setPaymentMethod(null);
} throw
new OAAttrValException(OAException.TYP_VIEW_OBJECT,
getViewObject().getFullName(),
getKey(),
"PayProvisionTempId", currentStr,
"CUX",
"CUX_PO_PAY_PROVI_VALIDATION"); // Message name
} }
}
在实际的使用中存在以下需求,不仅要对VO中未提交的缓存进行校验,同时要校验数据库中已存在的值。
方法1.使用标准的同时扫描EORow和TABLE的方式,如果存在结果集,则说明该值已存在。
public boolean attachmentExistsInCacheOrDb( String entityName, String[] pkValues){
boolean atchExists = false;
if ( pkValues != null )
{
if ( pkValues.length > 5 )
throw new OAException("FND", "ATTCH_TOO_MANY_PKVALUES");
ViewObject vo = null;
vo = this.findViewObject("CheckFndAttachedDocumentsVO");
if ( vo == null ){
vo = this.createViewObject("CheckFndAttachedDocumentsVO",
"oracle.apps.fnd.server.FndAttachedDocumentsVO");
} vo.addQueryMode(vo.QUERY_MODE_SCAN_DATABASE_TABLES |
vo.QUERY_MODE_SCAN_ENTITY_ROWS);
ViewCriteria vc = vo.createViewCriteria();
ViewCriteriaRow vcr = vc.createViewCriteriaRow();
//设定标准查询参数,可以多个,参数与Attribute类型一定要一致
vcr.setAttribute("EntityName", entityName);
vcr.setAttribute("Pk1Value", pkValues[0]);
vcr.setConjunction(ViewCriteriaRow.VCROW_CONJ_AND);
vc.addElement(vcr); vc.setCriteriaMode(ViewCriteria.CRITERIA_MODE_QUERY |
ViewCriteria.CRITERIA_MODE_CACHE);
vo.applyViewCriteria(vc);
vo.clearCache();
vo.reset();
vo.setWhereClause(null);
vo.setWhereClauseParams(null);
vo.setMaxFetchSize(-1);
vo.executeQuery();
if(vo.hasNext()){
atchExists = true;
}
}
else {
throw new OAException("FND", "ATTCH_PKVALUES_CANNOT_NULL");
}
return atchExists;
}
方法二:在EO或者VO缓存中进行校验之后再调用查询方法查询数据库中是否已存在值
EORowImpl
public void setItemCategoryId(Number value) {
if (value != null) {
//此部分与缓存中的行进行校验
//具体实现参考前文 OADBTransaction transaction = getOADBTransaction();
CategoryEntityExpert expert = getCategoryEntityExpert(transaction);
if (expert.categoryExists(posMappingId,orgId,orgType, value, orgDepartment))
{
throw new OAAttrValException(OAException.TYP_ENTITY_OBJECT,
getEntityDef().getFullName(),
getPrimaryKey(),
"ItemCategoryId",
value,
"CUX",
"CUX_SUP_PERMIT_001"); // Message name
} } setAttributeInternal(ITEMCATEGORYID, value);
} public static CategoryEntityExpert getCategoryEntityExpert(OADBTransaction txn){
return (CategoryEntityExpert)txn.getExpert(CuxSuppItemCateMappingEOImpl.getDefinitionObject());
} public static CategoryEntityExpert getCategoryEntityExpert(OADBTransaction txn){
return (CategoryEntityExpert)txn.getExpert(CuxSuppItemCateMappingEOImpl.getDefinitionObject());
}
CategoryEntityExpert类
mport oracle.jbo.domain.Number; import oracle.apps.fnd.common.VersionInfo;
import oracle.apps.fnd.framework.server.OAEntityExpert; public class CategoryEntityExpert extends OAEntityExpert { public boolean categoryExists(Number posMappingId, Number orgId,
String orgType, Number categoryId,
String orgDepartment) {
boolean exists = false; CategoryIdVVOImpl vvo =
(CategoryIdVVOImpl)findValidationViewObject("CategoryIdVVO1");
vvo.initQuery(posMappingId, orgId, orgType, categoryId, orgDepartment); if (vvo.hasNext()) {
exists = true;
} return exists; } }
CategoryIdVVO1是在AM中实例化的ValidateVO,通常VVO就是用于验证的VO
在EORow或者VORow中对数据进行重复性校验的更多相关文章
- 在EO中对数据的重复性进行验证
只有在数据提交到EO中的时候才会执行set方法进行验证. 如果想要实现实时验证,可以在输入参数的地方添加事件,但是无需为此事件创建方法. 我的理解: 1.我们在页面上对内容进行修改的时候,OAF框架仅 ...
- SpringMvc中的数据校验
SpringMvc中的数据校验 Hibernate校验框架中提供了很多注解的校验,如下: 注解 运行时检查 @AssertFalse 被注解的元素必须为false @AssertTrue 被注解的元素 ...
- Entity Framework 6 Recipes 2nd Edition(11-11)译 -> 在LINQ中调用数据库函数
11-11. 在LINQ中调用数据库函数 问题 相要在一个LINQ 查询中调用数据库函数. 解决方案 假设有一个任命(Appointment )实体模型,如Figure 11-11.所示, 我们想要查 ...
- ASP.NET中后台数据和前台控件的绑定
关于ASP.NET中后台数据库和前台的数据控件的绑定问题 最近一直在学习个知识点,自己创建了SQL Server数据库表,想在ASP.NET中连接数据库,并把数据库中的数据显示在前台,注意,这里的数据 ...
- SAP CRM 通过调试观察CL_CRM_BOL_ENTITY中的数据
这个(BOL里面)最重要的类值得一看. BOL中的每条记录都会在CL_CRM_BOL_ENTIT中表示.至今,我们已经写过一些事件处理器,并且我们已经直接或间接的通过这个类工作.在业务场景中,我们也许 ...
- 将Oracle数据库中的数据写入Excel
将Oracle数据库中的数据写入Excel 1.准备工作 Oracle数据库"TBYZB_FIELD_PRESSURE"表中数据如图: Excel模板(201512.xls): 2 ...
- [数据科学] 从csv, xls文件中提取数据
在python语言中,用丰富的函数库来从文件中提取数据,这篇博客讲解怎么从csv, xls文件中得到想要的数据. 点击下载数据文件http://seanlahman.com/files/databas ...
- 怎样简单灵活地将DataTable中的数据赋值给model
最近在做的一个项目中,有13个方法都需要用到同一种处理方式:通过SQL语句从数据库获取一条指定的数据,并将该数据中的每个值都赋值给一个model,再将这个model中的数据通过微信发送出去.每个方法都 ...
- DataTable to Excel(使用NPOI、EPPlus将数据表中的数据读取到excel格式内存中)
/// <summary> /// DataTable to Excel(将数据表中的数据读取到excel格式内存中) /// </summary> /// <param ...
随机推荐
- Python的Flask框架应用调用Redis队列数据的方法
转自:http://www.jb51.net/article/86021.htm 任务异步化 打开浏览器,输入地址,按下回车,打开了页面.于是一个HTTP请求(request)就由客户端发送到服务器, ...
- centos MySQL主从配置 ntsysv chkconfig setup命令 配置MySQL 主从 子shell MySQL备份 kill命令 pid文件 discuz!论坛数据库读写分离 双主搭建 mysql.history 第二十九节课
centos MySQL主从配置 ntsysv chkconfig setup命令 配置MySQL 主从 子shell MySQL备份 kill命令 pid文件 discuz!论坛数 ...
- POJ3070:Fibonacci(矩阵快速幂模板题)
http://poj.org/problem?id=3070 #include <iostream> #include <string.h> #include <stdl ...
- PAT 1137 Final Grading[一般][排序]
1137 Final Grading(25 分) For a student taking the online course "Data Structures" on China ...
- [golang note] 工程组织
golang项目目录结构 <golang_proj> ├─README ├─AUTHORS ├─<bin> ...
- Java基础知识Set、List、Map的区别
就学习经验,浅谈Java中的Set,List,Map的区别,对JAVA的集合的理解是相对于数组: 数组是大小固定的,并且同一个数组只能存放类型一样的数据(基本类型/引用类型),JAVA集合可以存储和操 ...
- Qt编译出错:“Cannot find file...... .pro."
刚接触Qt,使用Qt5.7时,出现如下编译错误: 其实原因很简单,就是Qt工程目录不能有“中文”.“全角符字符”[暂时发现这两种情况].
- 正在尝试解析依赖项“MvvmLightLibs (≥ 5.2.0.0)”。 “MvvmLightLibs”已拥有为“CommonServiceLocator”定义的依赖项
正在尝试解析依赖项"MvvmLightLibs (≥ 5.2.0.0)". "MvvmLightLibs"已拥有为"CommonServiceLoca ...
- 20145335郝昊《网络对抗》逆向及Bof基础实践
20145335郝昊<网络对抗>逆向及Bof基础实践 1.实践说明 本次实践是对一个名为pwn1的可执行Linux文件进行操作.程序的执行流程是:主函数main调用foo函数,foo将函数 ...
- Makefile解析(最简单的LED)
①led_sp.bin: start.o led.o #led_sp.bin是由 start.o 和 led.o 生成 ②arm-linux-ld -Ttext 0x0 -o led_sp.elf $ ...