在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
            }

        }
    }
时间: 2024-08-27 13:42:43

在EORow或者VORow中对数据进行重复性校验的相关文章

在EO中对数据的重复性进行验证

只有在数据提交到EO中的时候才会执行set方法进行验证. 如果想要实现实时验证,可以在输入参数的地方添加事件,但是无需为此事件创建方法. 我的理解: 1.我们在页面上对内容进行修改的时候,OAF框架仅仅是将内容缓存到了组件当中,只有当执行了submit处理之后,才会将组件中的值执行VO中set方法提交到vo中,若此vo基于EO,会同时执行EO中的set方法. 2.当我们为页面上的组件添加了事件(全局或局部事件)之后,对该组件内容的更新都会直接进行submit处理且,而不必等到最后一起submit

java读取请求中body数据

/** * 获取request中body数据 * * @author lifq * * 2017年2月24日 下午2:29:06 * @throws IOException */ public static String getRequestBodyData(HttpServletRequest request) throws IOException{ BufferedReader bufferReader = new BufferedReader(request.getReader()); S

第二十一章、使用查询表达式来查询内存中的数据

什么是语言集成查询(LINQ) 对从应用程序代码中查询数据的机制进行了“抽象”.这个功能称为“语言集成查询”(Language Integrated Query). LINQ的设计者大量借鉴了关系数据库管理系统(例如Microsoft SQL Server)的处理方式,将“数据库查询语句”与“数据在数据库中的内部格式”分隔开.LINQ的语法和语义和SQL很像,具有许多相同的优势.要查询的数据的内部结构发生改变后,不必修改查询代码.注意,虽然LINQ和SQL看起来很像,但LINQ更加灵活,而且能处

oracle----修改表中的数据

1. 修改表中的数据:UPDATE语句: 语法: UPDTAE table_name SET column1 = value1,... [WHERE conditions] (2),无条件的更新(没有where条件的更新): SQL> update userinfo set userpwd='111111'; 已更新4行. SQL> select userpwd from userinfo; USERPWD -------------------- 111111 111111 111111 1

C#读写app.config中的数据

C#读写app.config中的数据 读语句: String str = ConfigurationManager.AppSettings["DemoKey"]; 写语句: Configuration cfa = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); cfa.AppSettings.Settings["DemoKey"].Value = "DemoVa

MySQL批量更新不同表中的数据

今天翻到以前写的批量更新表中的数据的存储过程,故在此做一下记录. 当时MySQL中的表名具有如下特征,即根据需求将业务表类型分为了公有.私有和临时三种类型,即不同的业务对应三张表,而所做的是区分出是什么类型(公有.私有.临时)的业务表对数据的固定字段做统一规律的处理. 下面为当时所编写的存储过程: BEGIN DECLARE done INT; DECLARE v_table_name VARCHAR(100); DECLARE v_disable VARCHAR(100); DECLARE v

Java实现Excel导入数据库,数据库中的数据导入到Excel

实现的功能: Java实现Excel导入数据库,如果存在就更新 数据库中的数据导入到Excel 1.添加jxl.jar mysql-connector-java.1.7-bin.jar包到项目的lib目录下­ 2.Excel文件目录:D://book.xls 3.数据库名:javenforexcel 4.表名:stu 5.编写类:连接mysql的字符串方法.插入的方法.实体类­­ 表结构如下 : 连接数据库的工具类 package com.javen.db; import java.sql.Co

springbatch apache-activemq 整合(往mq中put数据,从mq中take数据)

简单测试如下: 1:收下下载apache-activemq-5.14.4 解压apache-activemq-5.14.4\bin\win64,运行activemq.bat 启动本地MQ服务器. 通过浏览器可以查看本地MQ服务器的信息. http://127.0.0.1:8161/admin/index.jsp 2: 先往mq中put数据 配置如下: <job id="jmsReadJob">         <step id="jmsReadStep&qu

Spark Streaming从Kafka中获取数据,并进行实时单词统计,统计URL出现的次数

1.创建Maven项目 创建的过程参考:http://blog.csdn.net/tototuzuoquan/article/details/74571374 2.启动Kafka A:安装kafka集群:http://blog.csdn.net/tototuzuoquan/article/details/73430874 B:创建topic等:http://blog.csdn.net/tototuzuoquan/article/details/73430874 3.编写Pom文件 <?xml v