[ Nexacro.Dataset -  ds validation1 ]

 

/*==+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 * Group : 1. Dataset Validation 검사
 * Group : 2. 각 개별적으로 호출되는 validation 검사
 **=++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/


/******************************************************************************************
 * 기능 : 사용자가 입력한 Dataset에 대한 validation check
 * 인자 : objGrd       :  화면에 보여주고 있는 Grid name
           objDsChkType : 검사할 check 목록된 기록된 Dataset
           bChkBoxExist : Grid 맨 왼쪽에 check box가 존재 시 check 된 자료만 검사할지 여부
                          이때 check column은 Grid에서 맨 앞쪽(0 index)에 위치되어져 있어야 함.
           bAllRowChk   : Dataset에서 모든 row를 검사 할지 여부 (false일 경우 insert,update된 row만 검사)
 * 리턴 : true/false
 * 예문 :
 * 개발 : 김용학.
 * objDsChkType 컬럼리스트 : colId   :  colNm    :  checkType                 : message : messageViewYn
 *              컬럼값     : EMP_NO  :  사원번호 : Required;Duplicate=EMP_NO :         :
                             EMP_NM  :  사원명   : Required;                 :         :
                             REG_NO  :  주민번호 : Required;MinLen=13;MaxLen=13    :         :
 *****************************************************************************************/

 

//------------------------------------------------------------------------------------------------
// 데이터셋에 선언해놓은 여러건에 대한 정보 체크
// dsChkGrid.check 컬럼 값 예 : Required;Date=YYYY;                       [ 필수이면서 년도 검사]
//                               Date=YYYY;                                [년도     검사]
//                               Date=YYYYMM;                              [년.월    검사]
//                               Date=YYYYMMDD;                            [년.월.일 검사]
//                               Compare=lessEqual,계획종료월,PLAN_EYM;  [ (날짜 대소 비교 가능) (fromDate <= toDate 이면 정상) ]
//                               Compare=less,     계획종료월,PLAN_EYM;  [ (날짜 대소 비교 가능) (fromDate <  toDate 이면 정상) ]
//                               CondRequired=FIX_YN:Y,PLAN_YY,SALE_NO    [ (특정조건일 경우 만 필수)  ]
//                                          (위와 같을 경우 FIX_YN='Y' 일경우 필수 && PLAN_YY 값이 존재 하면 필수 && PLAN_CD 값이 존재 하면 필수
//                               Duplicate=BRAND_CD,DTL_PLAN_CD           [ 컬목 목록만틈 중복 중복 검사 ]
//                               Between=201311,201502                    [ 문자 TYPE 인 경우 가능.  숫자가 가능할 수 있음 ]
//                               BetweenNum=201311,201502                  [ 숫자 type 만 가능 ][Between A AND B 검색]
//------------------------------------------------------------------------------------------------
// 향후 개발해야 될 check목록 : 주민번호 검사 (Resident)
//                                 email 형식     (Email)
//                                 MinLen  : 최소 length (문자에 활용됨) (MinLen=5)
//                                 MaxLen  : 최대 length (문자에 활용됨) (MaxLen=15)
//                                 MinValue : 최소값 (숫자에 활용됨) (MinValue=10)
//                                 MaxValue : 최대값 (숫자에 활용됨) (MaxValue=999)
//                                 MinDate  : 최소년도, 최소년월, 최소일자  (MinDate=YYYY,2014; MinDate=YYYYMM,201405; Mindate=YYYYMMDD,20140505;)
//                                 MaxDate  : 최대년도, 최대년월, 최대일자  (MaxDate=YYYY,2014; MaxDate=YYYYMM,201405; MaxDate=YYYYMMDD,20140505;)
//                                 
//------------------------------------------------------------------------------------------------

function gfn_DataValidation(objGrd:Grid, objDsChkType:Dataset, bChkBoxExist:Boolean , bAllRowChk:Boolean ) {

    var sChkColId, sColId, sColNm, sCheckType, arrCheckType, sMessage, sGubun, sMessageViewYn;

    var sFunction = "";

    var objBusiDs     = eval(objGrd.binddataset);

    var nBusiDsCnt    = objBusiDs.rowcount;

    var nChkTypeDsCnt = objDsChkType.rowcount;

    var nRowType;

    

    if(gfn_IsNull(bChkBoxExist)) bChkBoxExist = false;

    if(gfn_IsNull(bAllRowChk))   bAllRowChk = false;

    

    if(  bChkBoxExist == true ) {

        sChkColId = objGrd.getCellProperty("body",0,"text");

        sChkColId = sChkColId.replace("bind:","");

    }

    

    if(nChkTypeDsCnt <= 0 || nBusiDsCnt <= 0 ) return true;

    

    // 0. 업무 Dataset별로 수행

    for(var nRow = 0 ; nRow < nBusiDsCnt ; nRow ++ ) {

        nRowType = objBusiDs.getRowType(nRow);

        

        if (nRowType == Dataset.ROWTYPE_NORMAL && bAllRowChk == false) continue;

        

        for(var i = 0 ; i < nChkTypeDsCnt ; i ++ ) {

            sColId         = objDsChkType.getColumn(i,"colId"        );

            sColNm         = objDsChkType.getColumn(i,"colNm"        );

            sCheckType     = objDsChkType.getColumn(i,"checkType"    );

            sMessage       = objDsChkType.getColumn(i,"message"      );

            sMessageViewYn = objDsChkType.getColumn(i,"messageViewYn");  //검사 후 오류가 있으면 alert()을 보여줄지 말지 여부

            

            if (gfn_IsNull(sColId) || gfn_IsNull(sCheckType)) continue;

            

            // 1.함수 호출

            if(sColId == "func") {

                if (typeof eval(sCheckType) == "function"){

                    // 존재시 함수 호출

                    if(eval( sCheckType ).call(this,objBusiDs,nRow) == false )

                        return false;

                }

            }else{

                if(((bChkBoxExist == false) || bChkBoxExist == true && objBusiDs.getColumn(nRow,sChkColId) == '1')){

                    arrCheckType = sCheckType.split(";");

                    

                    // 체크 부분 (체크 방법이 여러건 존재)

                    for(var k = 0 ; k < arrCheckType.length ; k ++ ) {

                        if(gfn_IsExist(arrCheckType[k].trim())){

                            // 변수 값에 "=" 이 존재 가능하기때문에

                            if(arrCheckType[k].indexOf("=")  > -1 ) {

                                sFunction = "gfn_DataValidation_" + arrCheckType[k].substring(0,arrCheckType[k].indexOf("="));

                                sGubun    = arrCheckType[k].substr(arrCheckType[k].indexOf("=") + 1);

                            }else {

                                sFunction = "gfn_DataValidation_" + arrCheckType[k];

                                sGubun    = "";

                            }

                            

                            //해당  Function 존재 여부 체크

                            if (typeof eval(sFunction) == "function"){

                                // 존재시 함수 호출

                                if(eval( sFunction ).call(this,sColId, sColNm, objBusiDs, nRow, sGubun, sMessage, sMessageViewYn) == false ) {

                                    objBusiDs.rowposition = nRow;

                                    return false;

                                }

                            }

                        }

                    }  // for end

                }

            } // if end

        }// for end

    }

    

    return true;

}

 

/******************************************************************************************
 * 기능 : 필수값 체크
 * 인자 : sColId  : column id
           sColNm : 컬럼 한글명
           objDs  : 업무 dataset
           nRow   : 검사중인 row
           sGubun : 검사방법 (옵션)
           psMessage  : 메세지 옵션) - 미 존재 시 .. 임으로 alert처리.  존재 시 (화면에서 개발자가 지정한 message로 조회)
 * 리턴 : true/false
 * 예문 :
 *****************************************************************************************/

function gfn_DataValidation_Required(sColId, sColNm, objDs, nRow ,sGubun, psMessage, psMessageViewYn){

    var sColValue = String(objDs.getColumn(nRow , sColId)).trim();

    

    if(gfn_IsExist(sGubun) ) {

        // 필수 체크 시 sGubun에 대한 컬럼값이 존재 할 경우만 필수체크 처리

        // 즉, sGubun값이 미 존재 하면 필수 체크 안함

        var sTagetValue = objDs.getColumn(nRow, sGubun);  

        if(gfn_IsNull(sTagetValue)) {

            if(gfn_IsNull(sColValue) ) {

                gfn_DataValidation_ErrorMessage(psMessageViewYn, psMessage, sColNm + " 은(는) 필수 항목 입니다.");

                

                return false;

            }

        }

    } else {

        if(gfn_IsNull(sColValue) ) {

            gfn_DataValidation_ErrorMessage(psMessageViewYn, psMessage, sColNm + " 은(는) 필수 항목 입니다.");

            

            return false;

        }

    }

    return true;

}

/******************************************************************************************
 * 기      능 : 날짜 확인 로직
 * 인      자 :
 * 반      환 : sGubun - YYYY,YYYYMM,YYYYMMDD, (lessEqual,계획종료월,PLAN_EYM)
 *****************************************************************************************/

function gfn_DataValidation_Date(sColId,sColNm,objDs,nRow ,sGubun, psMessage, psMessageViewYn){

    var strDate = String(objDs.getColumn(nRow , sColId)).trim();

    

    if (gfn_IsNull(strDate)) return true;

    strDate = strDate.replace('.', '');

    strDate = strDate.replace('-', '');

    strDate = strDate.replace('/', '');

    

    if (strDate.length == 4) strDate = strDate + '0101';

    if (strDate.length == 6) strDate = strDate + '01'  ;

    

    // 1. 단순일자 검사

    if (sGubun == "YYYY" || sGubun == 'YYYYMM' || sGubun == 'YYYYMMDD'){

        if(gfn_IsDate(strDate) == false) {

            gfn_DataValidation_ErrorMessage(psMessageViewYn, psMessage, sColNm + "가(이) 정확하지 않습니다.");

            

            return false;

        }

        return true;

    }

 

    return true;

}

 

/******************************************************************************************
 * 기      능 : 두개 컬럼 비교
 *****************************************************************************************/

function gfn_DataValidation_Compare(sColId,sColNm,objDs,nRow ,sGubun, psMessage, psMessageViewYn){

    var sColValue = String(objDs.getColumn(nRow , sColId)).trim();

    var arrVal    = sGubun.split(",");

    

    // 1. 첫 번째 값 처리

    if (gfn_IsNull(sColValue)) return true;

    

    // 2. 두 번째 값 처리

    var sSecondValue = objDs.getColumn(nRow, arrVal[2]).trim();

    if (gfn_IsNull(sSecondValue)) return true;

        

    //3. 두 개 컬럼 대소 비교 (첫번째 일자 <= 두번째 일자)

    if (arrVal[0] == "lessEqual"){

        if (sColValue > sSecondValue){

            gfn_DataValidation_ErrorMessage(psMessageViewYn, psMessage, sColNm + "는(은) " + arrVal[1] + " 보다 더 클 수 없습니다.");

            

            return false;

        }

    }else if (arrVal[0] == "less"){

        if (sColValue >= sSecondValue){

            gfn_DataValidation_ErrorMessage(psMessageViewYn, psMessage, sColNm + "는(은) " + arrVal[1] + " 보다 더 크거나 같을 수 없습니다.");

            

            return false;

        }

    }

    

    return true;

}

 

/******************************************************************************************
 * 기      능 : 한 값이 존재 또는 특정 값 일 경우 필수 처리
 * 인      자 :
 * 반      환 : sGubun - CondRequired=FIX_YN:Y,PLAN_YY,PLAN_CD
 *                         (위와 같을 경우 FIX_YN='Y' 일경우 필수 && PLAN_YY 값이 존재 하면 필수 && PLAN_CD 값이 존재 하면 필수
 *****************************************************************************************/

function gfn_DataValidation_CondRequired(sColId,sColNm,objDs,nRow ,sGubun, psMessage, psMessageViewYn){

    var strDestVal = String(objDs.getColumn(nRow, sColId)).trim();

    var aColList   = sGubun.split(",");

    var aEssentialYN = "N";  //일단 sColId 에 미 필수 항목이라고 처리

    

    // 1. 값이 존재 하면 정상

    if (gfn_IsExist(strDestVal)) return true;

 

    // 2. 각 체크할 컬럼 처리

    for(var ii=0; ii<aColList.length; ii++){

        var aRealColList = aColList[ii].split(":");

        var strColVal    = objDs.getColumn(nRow, aRealColList[0]);

        

        // 1. 특정컬럼값이 null이면.. 필수 아님

        if (aRealColList.length == 1){

            if (gfn_IsNull(strColVal)){

                return true;

            }else{

                gfn_DataValidation_ErrorMessage(psMessageViewYn, psMessage, sColNm + " 은(는) 필수 항목 입니다.");

                

                return false;

            }

        

        // 2. 특정컬럼값이 null이 아니면서 특정값 이면 필수

        }else if (aRealColList.length == 2){

            if (gfn_IsNull(strColVal)) return true;

            if (strColVal == aRealColList[1]){

                gfn_DataValidation_ErrorMessage(psMessageViewYn, psMessage, sColNm + " 은(는) 필수 항목 입니다.");

                

                return false;

            }

        }

    }

    

    return true;

}

/******************************************************************************************
 * 기      능 : 중복 검사
 *****************************************************************************************/

function gfn_DataValidation_Duplicate(sColId,sColNm,objDs,nRow ,sGubun, psMessage, psMessageViewYn){

    var aColList = sGubun.split(",");

    var sFildCond, sColValue, nFindRow;

    

    sFildCond = aColList[0] + "=='" + objDs.getColumn(nRow, aColList[0]) + "'";

    for(var ii=0; ii<aColList.length; ii++){

        sFildCond += "&& " + aColList[ii] + "=='" + objDs.getColumn(nRow, aColList[ii]) + "'";

    }

    

    nFindRow = objDs.getCaseCount(sFildCond);

    

    if (nFindRow > 1){

        gfn_DataValidation_ErrorMessage(psMessageViewYn, psMessage, "중복된 건이 발견되었습니다.");

        

        return false;

    }

    return true;

}

 

/******************************************************************************************
 * 기      능 : 날짜 비교 로직
 *****************************************************************************************/

function gfn_DataValidation_DateLt(sColId,sColNm,objDs,nRow ,sGubun, psMessage, psMessageViewYn){

    if(gfn_IsNull(sColValue) ) {

        gfn_DataValidation_ErrorMessage(psMessageViewYn, psMessage, sColNm + " 을 확인 하십시오.");

        

        return false;

    }

    return true;

}

 

/******************************************************************************************
 * 기      능 : Between A AND B 검색
 *****************************************************************************************/

function gfn_DataValidation_Between(sColId,sColNm,objDs,nRow ,sGubun, psMessage, psMessageViewYn){

    var sColValue = String(objDs.getColumn(nRow , sColId)).trim();

    var arrVal    = sGubun.split(",");

    

    // 1. 첫 번째 값 처리

    if (gfn_IsNull(sColValue)) return true;

    

    // 2. Between 검색

    if (arrVal[0] > sColValue || sColValue > arrVal[1]){

        gfn_DataValidation_ErrorMessage(psMessageViewYn, psMessage, sColNm + "는(은) " + arrVal[0] + " ~ " +  arrVal[1] + " 사이만 가능합니다.");

        

        return false;

    }else{

        return true;

    }

}

 

/******************************************************************************************
 * 기      능 : Between A AND B 검색
 *****************************************************************************************/

function gfn_DataValidation_BetweenNum(sColId,sColNm,objDs,nRow ,sGubun, psMessage, psMessageViewYn){

    var sColValue = String(objDs.getColumn(nRow , sColId)).trim();

    var arrVal    = sGubun.split(",");

    

    // 1. 첫 번째 값 처리

    if (gfn_IsNull(sColValue)) return true;

    

    // 2. Between 검색

    if (toNumber(arrVal[0]) > toNumber(sColValue) || toNumber(sColValue) > toNumber(arrVal[1])){

        gfn_DataValidation_ErrorMessage(psMessageViewYn, psMessage, sColNm + "는(은) " + arrVal[0] + " ~ " +  arrVal[1] + " 사이만 가능합니다.");

                

        return false;

    }else{

        return true;

    }

}

/******************************************************************************************
 * 기능 : DataValidation 검수 후 오류 존재 하면 조회
 *****************************************************************************************/

function gfn_DataValidation_ErrorMessage(psMessageViewYn, psDsMessage, psLocalMessage){

    if (psMessageViewYn == 'N') return;

 

    if (gfn_IsNull(psDsMessage))

        gfn_alert(psLocalMessage);

    else

        gfn_alert(psDsMessage);

}

 

/******************************************************************************************
 * 기능 : 입력일자의 정합성 체크
 * 인자 : 'yyyyMMdd' 형태로 표현된 날짜.
 * 리턴 : true , false
 * 예문 :
 *****************************************************************************************/

function gfn_IsDate(strDate)

{

    var v_date = gfn_Date2Str(gfn_bpStr2Date(strDate));

 

    if (v_date == strDate)

        return true;

    else

        return false;

}

 

/******************************************************************************************
 * 기능 : 날짜를 문자로 변환.
 * 인자 : inDate 문자열
 * 리턴 : 해당일자
 * 예문 :
 *****************************************************************************************/

function gfn_Date2Str(inDate)

{

  return (new Date(inDate)).getFullYear()

           + (((new Date(inDate)).getMonth() + 1) + "").padLeft(2, '0')

           + (((new Date(inDate)).getDate()) + "").padLeft(2, '0');

}

 

 

 

☞  

 

☞  

 
 
 
 

  

Posted by 농부지기
,