标准的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 ...
随机推荐
- Notes of Head.First.HTML.and.CSS.2nd.Edition
What does the web server do? tirelessly waiting for requests from webbrowsers What does the web brow ...
- phpstorm怎么设置每个function都用那条横线隔开
- 20145118 《Java程序设计》第6周学习总结
20145118 <Java程序设计>第6周学习总结 教材学习内容总结 1.数据依靠串流在目的地与来源地之间传输,无论来去如何,只要取得InputStream或OutputStream的实 ...
- 20145307陈俊达《网络对抗》Exp9 Web安全基础实践
20145307陈俊达<网络对抗>Exp9 Web安全基础实践 基础问题回答 1.SQL注入攻击原理,如何防御? SQL注入攻击就是通过把SQL命令插入到Web表单递交或输入域名或页面请求 ...
- [BZOJ1497]最大获利
Description 新的技术正冲击着手机通讯市场,对于各大运营商来说,这既是机遇,更是挑战.THU集团旗下的CS&T通讯公司在新一代通讯技术血战的前夜,需要做太多的准备工作,仅就站址选择一 ...
- POJ 1845 Sumdiv(求因数和 + 逆元)题解
题意:给你a,b,要求给出a^b的因子和取模9901的结果. 思路:求因子和的方法:任意A = p1^a1 * p2^a2 ....pn^an,则因子和为sum =(1 + p1 + p1^2 + . ...
- Maven profile 打包分环境加载不同的资源文件
在实际开发项目中,常常有几种环境,一般情况下最少有三种环境:开发.测试.正式. 各个环境之间的参数各不相同,比如mysql.等不同环境的host不一样,若每个环境都手动替换环境很容易出错,这里我们利用 ...
- github上的markdown如何换行
https://gist.github.com/shaunlebron/746476e6e7a4d698b373 1.普通的换行 在文本结束后面,加2个空格 2.段落之间的换行 使用反斜杠\
- Open Source Log Management
https://www.elastic.co/solutions/logging The Elastic Stack (sometimes known as the ELK Stack) is the ...
- js中可以直接使用id而不用获取id
先来看一个例子: 不获取 id 也可以使用 id 元素. <!-- Author: XiaoWen Create a file: 2017-01-11 13:58:01 Last modifie ...