标准的EO验证提示错误不够完整,抛出自定义的异常。
我们通常会在EO里面对某些数据进行验证,比如在邀请供应商注册的时候,ORACLE标准逻辑会验证被邀请的供应商是否已经存在。
其验证逻辑在
oracle.apps.pos.schema.server.SupplierRegEOImpl
public void setSupplierName(String value)
{
SupplierRegEntityExpert supplierregentityexpert = getSupplierRegEntityExpert(getOADBTransaction());
if (!supplierregentityexpert.isSupplierValid(value, getSupplierRegId()))
{
throw new OAAttrValException(121, getEntityDef().getFullName(), getPrimaryKey(), "SupplierName", value, "POS", "POS_SUPPREG_EO_ERR1");
} else
{
setAttributeInternal(2, value);
return;
}
}
现由于客户觉得标准的异常提示不够明显,无法区分此供应商是已经正式存在的供应商,还是已经被其他人邀请过的供应商。
所以现决定在保存的时候根据输入的供应商名称进行逻辑判断。
经验证,逻辑判断不能写在processFormRequest中,会先执行EO中的验证。
不过可以写在processFormData中,因为processFormData中的方法是在POST阶段执行,所以不会触发EO中的验证。
新建客户化CO继承原有标准CO
public class CuxSuppRegisterSupplierCO extends SuppRegisterSupplierCO {
}
public void processFormData(OAPageContext pageContext,OAWebBean webBean){
super.processFormData(pageContext, webBean);
String str1 = pageContext.getParameter("event");
if (("sendInvitation".equals(str1)) || ("SaveNContinueBtnEvent".equals(str1)))
{
OAViewObject SupplierRequestsVO = (OAViewObject)pageContext.getApplicationModule((OAWebBean)webBean.findChildRecursive("RegSupplierRN")).findViewObject("SupplierRequestsVO");
String SupplierName = pageContext.getParameter("SupplierName");
Number SupplierRegId = (Number)SupplierRequestsVO.first().getAttribute("SupplierRegId");
LogUtil.of("validSupplierName ",pageContext).print(pageContext);
validSupplierName(pageContext,webBean,SupplierName,SupplierRegId);
}
}
public void validSupplierName(OAPageContext pageContext,OAWebBean webBean, String SupplierName,Number SupplierRegId){
LogUtil.of("validSupplierName fangfa ",pageContext).print(pageContext);
OraclePreparedStatement oraclepreparedstatement = null;
OracleResultSet oracleresultset = null;
OAApplicationModule am = pageContext.getApplicationModule(webBean);
try{
oraclepreparedstatement = (OraclePreparedStatement)am.getOADBTransaction().createPreparedStatement(" select vendor_id \n" +
"from po_vendors \n" +
"where upper(vendor_name) = upper(:1)\n" +
"and (start_date_active < sysdate OR start_date_active is null) \n" +
"and (end_date_active > sysdate OR end_date_active is null) \n" +
"and rownum = 1", 1);
oraclepreparedstatement.setObject(1,SupplierName);
oracleresultset = (OracleResultSet)oraclepreparedstatement.executeQuery();
if(oracleresultset.next()){
throw new OAException("POS_SUPPREG_EO_ERR1",OAException.ERROR);
}
}
catch(Exception exception1)
{
throw OAException.wrapperException(exception1);
}
try{
oraclepreparedstatement = (OraclePreparedStatement)am.getOADBTransaction().createPreparedStatement("SELECT hou.attribute18,\n" +
" papf.full_name\n" +
" FROM pos_supplier_registrations psr,\n" +
" hr_all_organization_units hou,\n" +
" fnd_user fu,\n" +
" per_all_people_f papf\n" +
" WHERE upper(psr.supplier_name) = upper(:1)\n" +
" AND psr.supplier_reg_id <> :2\n" +
" AND psr.registration_status NOT IN ('REJECTED',\n" +
" 'DRAFT',\n" +
" 'RIF_SUPPLIER')\n" +
" AND rownum = 1\n" +
" AND psr.created_by = fu.user_id(+)\n" +
" AND psr.ou_id = hou.organization_id\n" +
" AND fu.employee_id = papf.person_id(+)\n" +
" AND SYSDATE BETWEEN nvl(papf.effective_start_date,\n" +
" SYSDATE - 1) AND nvl(papf.effective_end_date,\n" +
" SYSDATE + 1)\n", 2);
oraclepreparedstatement.setObject(1,SupplierName);
oraclepreparedstatement.setObject(2,SupplierRegId);
oracleresultset = (OracleResultSet)oraclepreparedstatement.executeQuery();
if(oracleresultset.next()){
String OrgName = oracleresultset.getString(1);
String FullName = oracleresultset.getString(2);
MessageToken[] tokens = { new MessageToken("ORG_NAME", OrgName),
new MessageToken("FULL_NAME", FullName) };
OAException exceptionMessage = new OAException("CUX","CUX_SUPPLIER_HAS_BEEN_INVITED",tokens,OAException.ERROR,null);
throw exceptionMessage; //PS1.使用throw直接抛出异常,会导致页面上直接基于EO的字段的数据不会被保留,且不会抛出EO中的验证。
// pageContext.putDialogMessage(exceptionMessage); //PS2.使用putDialogMessage(),页面上的数据被保留,且执行EO中的验证并抛出。
}
}
catch(Exception exception1)
{
throw OAException.wrapperException(exception1);
}
}
参考资料:
1.重新整理后的Oracle OAF学习笔记——5.应用构建基础之实现控制器
标准的EO验证提示错误不够完整,抛出自定义的异常。的更多相关文章
- oracle 抛出自定义错误(网上找的例子)
CREATE OR REPALCE TRIGGER minimun_age_checkBEFORE INSERT ON employeeFOR EACH ROWBEGIN IF ADD_MONTHS( ...
- Spring验证的错误返回------BindingResult
Spring验证的错误返回------BindingResult 参考资料:http://www.mkyong.com/spring-mvc/spring-mvc-form-errors-tag-ex ...
- jQuery validate运作流程以及重复提示错误问题
一,运作流程 jQuery validate要想运作,首先要加载相应的js <script type="text/javascript" src="/js/clas ...
- MVC与Validate验证提示的样式修改
MVC中使用Validate的验证,要修改错误提示样式一共有3处需要修改,否则就不太完美了: MVC中的Validate的验证机制只用在后台写一次,就可以完成前台和后台的完美验证,前台的验证主要是依靠 ...
- jquery.validate提示错误方法
修改jquery.validate提示错误方法,将错误信息用弹出框提示 <script src="@Url.Content("~/Scripts/jquery.validat ...
- Springboot学习05-自定义错误页面完整分析
Springboot学习06-自定义错误页面完整分析 前言 接着上一篇博客,继续分析Springboot错误页面问题 正文 1-自定义浏览器错误页面(只要将自己的错误页面放在指定的路径下即可) 1-1 ...
- 今天遇到一件开心事,在eclipse编写的代码在命令窗口中编译后无法运行,提示 “错误: 找不到或无法加载主类”
java中带package和不带package的编译运行方式是不同的. 首先来了解一下package的概念:简单定义为,package是一个为了方便管理组织java文件的目录结构,并防止不同java文 ...
- mac 下 使用 java运行 class 文件 总是提示 “错误: 找不到或无法加载主类”的解决方法
发现问题 切换到mac平台后,突然想写点程序运行在mac下,想到mac自带java,会方便好多.不过在这过程中遇到了麻烦: 总是提示 “错误: 找不到或无法加载主类” 工程结构 查了好久,终于找到原型 ...
- .NetCore使用FluentValidation实现友好验证提示
Nuget包导入FluentValidation.AspNetCore 官方的用法是在services中添加如下来操作 services.AddMvc().AddFluentValidation(co ...
随机推荐
- Python入门之面向对象module,library,package之间区别
背景 Python中有一些基本的名词,很多人,尤其是一些初学者,可能听着就很晕. 此处,简单总结一下,module,library,package之间的大概区别. Python中的module的简介 ...
- JAVA注解@Interface基础知识
java注解是在JDK5时引入的新特性,大多数框架(SpringBoot.MyBatis.Quartz)背后都在大量使用注解开发. 一.先进行一个小试验,了解注解开发流程 建立maven项目annot ...
- 20145302张薇 《网络对抗技术》 web安全基础实践
20145302张薇 <网络对抗技术> web安全基础实践 实验问题回答 1.SQL注入攻击原理,如何防御 原理:攻击者把SQL命令插入到网页的各种查询字符串处,达到欺骗服务器执行恶意的S ...
- Android 手机小闹钟
Android 手机小闹钟 一.这一篇主要使用系统为我们提供的一个服务AlarmManager来制作一个Android小闹钟,同时还涉及到了自定义主题.判断第一次启动应用.自定义动画.对话框.制作关闭 ...
- C# 获取枚举的描述属性
在使用枚举类型时,我们需要取名称和值,甚至有时候还需要取枚举类型的描述.通过反射,我们能获取到枚举类型的描述属性. 首先我们需要给枚举类型添加描述属性(属性都没有是不可能取到的),[Descripti ...
- JavaScript 开闭原则OCP
代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3. ...
- 切面条|2014年蓝桥杯B组题解析第二题-fishers
切面条 一根高筋拉面,中间切一刀,可以得到2根面条. 如果先对折1次,中间切一刀,可以得到3根面条. 如果连续对折2次,中间切一刀,可以得到5根面条. 那么,连续对折10次,中间切一刀,会得到多少面条 ...
- 通过java代码对kylin进行cube build
转:http://www.cnblogs.com/hark0623/p/5580632.html 通常是用于增量 代码如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 ...
- PTA第三次上机
5-1 #include <iostream> #include <cstdlib> #include <string.h> using namespace std ...
- UVa 10570 外星人聚会
https://vjudge.net/problem/UVA-10570 题意:输入1~n的排列,每次可以交换两个整数,求出最少交换次数使之变成有序的环状序列. 思路:主要的解题方法就是寻找置换环,举 ...