/****************************************************************************************** * 기능 : 사용자가 입력한 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');
}
|