标准的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中的验证。

    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.应用构建基础之实现控制器

2.OAF—Row的状态

时间: 2024-11-06 15:11:46

标准的EO验证提示错误不够完整,抛出自定义的异常。的相关文章

编写可维护的JavaScript-第10章-抛出自定义错误

2.在JavaScript中抛出错误 throw new Error("Something bad happend") 不要做下面这个事情: throw "message" 有些浏览器可能不会提示上述消息 3.抛出错误的好处 function getDvis(element) { if (element && element.getElementByTagName) { return element.getElementByTagName("

非空验证提示错误信息

//html页面 <div class="maxtop"> <a name="anchor_legalPersonName"></a> <div class="title">学校法人姓名</div> <div> <div id="text_red" class="red"></div> <div> &

[oldboy-django][2深入django]Form组件功能: 数据格式验证 + 保留上次输入的值(如果有很多输入项,这样正确项不必重复输入,错误项也能提示错误信息)

1 需求:登录或者注册页面存在以下问题 - 无法记住上次提交的内容,(如果有很多输入项,这样正确项不必重复输入,错误项也能提示错误信息)- 重复进行提交数据的校验(数据是否为空,长度大小等等) 2 django的Form组件实现 2.1 Form组件实现数据验证方法 2.1.1 流程操作 - 定义规则(数据的格式,字段必须和表单上name属性一致) class LoginForm(Form): 字段名 = fields.xxFields(参数) # 定义了一个输入框的数据格式要求 实例化对象ob

后端自动验证与错误提示

验证错误提示:控制器里调取模型中的方法 $this->error($cate->getError()); 模型里CateModel.class.php: <?php namespace Admin\Model; use Think\Model; class CateModel extends Model{ protected $_validate = array( array('catename','require','不能为空',1,'regesx',3), //默认情况下用正则进行验

jquery.validate提示错误方法

修改jquery.validate提示错误方法,将错误信息用弹出框提示 <script src="@Url.Content("~/Scripts/jquery.validate.js")"></script> <script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.js")"></script> 1 $.e

Validform和aui2.0结合使用的表单自定义验证提示和列表页异步获取数据Demo

二.添加自定义验证演示       Validform验证提示大多都是在输入框或下拉框的右边或下面.感觉就是不美观,特别是表单字段少的时候,这种在相应对象旁边的提示就没必要了,      它会给人一种不友好的感觉(只是自己的感觉).所以下面写了三种添加演示,希望大家能给出建议,以免下次用起来纠结,不知道用哪种好.        表单验证插件是我们经常使用的Validform_v5.3.2_min.js.先上添加1演示的表单验证js代码,这里我设置了点击提交按钮后才验证.其他添加演示的区别不大,详

mac 下 使用 java运行 class 文件 总是提示 “错误: 找不到或无法加载主类”的解决方法

发现问题 切换到mac平台后,突然想写点程序运行在mac下,想到mac自带java,会方便好多.不过在这过程中遇到了麻烦: 总是提示 “错误: 找不到或无法加载主类” 工程结构 查了好久,终于找到原型所在,发现网上很多资料都写的都不太多,自己记录一下.先看看工程的位置和目录. 我的eclipse 工作空间位置是: /Users/zhangyunfei/workspace_java 我的工程名字叫:hellodemo 我的main class 的package name (包名)为: hellod

Spring验证的错误返回------BindingResult

Spring验证的错误返回------BindingResult 参考资料:http://www.mkyong.com/spring-mvc/spring-mvc-form-errors-tag-example/ <%Enumeration<String> enums=request.getAttributeNames(); while(enums.hasMoreElements()){ String key=enums.nextElement(); if(key.equals(&quo

布局文件提示错误“No orientation specified, and the default is horizontal. This is a common so...”

完整的错误提示信息为:No orientation specified, and the default is horizontal. This is a common source of bugs when children are added dynamically. 通常发生这个错误提示的原因是我们直接在原有的页面上把别的布局标签改成<LinearLayout>,可是使用<LinearLayout>标签要指明方向,水平方向还是垂直方向 horizontal or vertic