/*****************************************************************************************
* 함 수 명 : gfn_validGrid()
* 설 명 : Grid의 Validation Check하는 Function
* 설 명2 :
*- Column0:Column Text:[P[N[D]]]
*- 적용할 Column ID : Alert시 표현할 Column Text : P(필수입력), N(숫자입력), D(중복체크)
@return boolean
* 파라미터 : @param oGrid: Grid Object
@param bAllCheck
*true : 모든 ROW 체크
*false : 데이터셋에 new/update 만 체크
*****************************************************************************************/
gfn_validGrid = function(oGrid:Grid, bAllCheck)
{
//trace("[/lib_Validation.xjs][gfn_validGrid()] ==> [TEST_01][oGrid]"+ oGrid +"[bAllCheck]"+ bAllCheck );
var oDs = oGrid.getBindDataset();
//trace("[/lib_Validation.xjs][gfn_validGrid()] ==> [TEST_01_2][[oGrid]"+ oGrid +"[bAllCheck]"+ bAllCheck +"[oDs]"+ oDs +"[oDs.name]"+ oDs.name +"[oGrid.name]"+ oGrid.name );
//trace("[/lib_Validation.xjs][gfn_validGrid()] ==> [TEST_01_3][oDs,_CNT]"+ oDs.getRowCount() +"[oDs.saveXML()] \n"+ oDs.saveXML() );
if(gfn_isNull(oDs))
{
//trace("[/lib_Validation.xjs][gfn_validGrid()] ==> [TEST_02][oDs]"+ oDs +"[oGrid.name]"+ oGrid.name );
gfn_alert(this, "E0001", oGrid.name);// E0001: 해당 Grid[M1]의 User Property 'validExpr'이 존재하지 않습니다.
return false;
}
if(gfn_isNull(oGrid.validExpr))
{
//trace("[/lib_Validation.xjs][gfn_validGrid()] ==> [TEST_03][oDs]"+ oDs +"[oGrid.name]"+ oGrid.name );
gfn_alert(this, "E0002", oGrid.name);// E0002: 해당 Grid[M1]의 User Property 'validExpr'이 존재하지 않습니다.
return false;
}
if(gfn_isNull(bAllCheck))
{
bAllCheck = true;
}
var aExpr = oGrid.validExpr;
aExpr = aExpr.split(",");
//trace("[/lib_Validation.xjs][gfn_validGrid()] ==> [TEST_11][oaExpr.length]"+ aExpr.length );
for(var i = 0; i < aExpr.length; i++)
{
var aChkStr = aExpr[i];
if(gfn_isNull(aChkStr))
{
continue;
}
aChkStr = aChkStr.split(":");
var sColId = aChkStr[0];
var sColNm = aChkStr[1];
var sChkValue = aChkStr[2];
//trace("[/lib_Validation.xjs][gfn_validGrid()] ==> [TEST_21][sColId]"+ sColId +"[sColNm]"+ sColNm +"[sChkValue]"+ sChkValue );
for(var j = 0; j < oDs.rowcount; j++)
{
var sColumnSts = oDs.getRowType(j);// ROW 상태
//trace("[/lib_Validation.xjs][gfn_validGrid()] ==> [TEST_31] [j_번째]"+ j +"[oDs.rowcount]"+ oDs.rowcount +"[sColumnSts]"+ sColumnSts +"[oDs.MSG_CD]"+ oDs.getColumn(j, "MSG_CD") +"[oDs.MSG_DIV]"+ oDs.getColumn(j, "MSG_DIV") +"[oDs.MSG_CONTENT]"+ oDs.getColumn(j, "MSG_CONTENT") );
if(sColumnSts == "D") // "D"; ROW_STAT_DELETE
{
//trace("[/lib_Validation.xjs][gfn_validGrid()] ==> [TEST_32][sColumnSts]"+ sColumnSts );
continue;
}
if(!bAllCheck)
{
if(gfn_isNull(sColumnSts))
{
//trace("[/lib_Validation.xjs][gfn_validGrid()] ==> [TEST_33][sColumnSts]"+ sColumnSts );
continue;
}
}
var sValue = "";
if(gfn_isNull(oDs.getColumn(j, sColId)))
{
sValue = "";
}
else
{
sValue = oDs.getColumn(j, sColId).toString();
}
//trace("[/lib_Validation.xjs][gfn_validGrid()] ==> [TEST_41][sColId]"+ sChkValue.toString().indexOf("P") +"[sValue]"+ sValue );
if(sChkValue.toString().indexOf("P") >= 0)
{
//trace("[/lib_Validation.xjs][gfn_validGrid()] ==> [TEST_42][sValue]"+ sValue );
if(gfn_isNull(sValue))
{
//trace("[/lib_Validation.xjs][gfn_validGrid()] ==> [TEST_43][oGrid]"+ oGrid +"[sColId]"+ sColId +"[gfn_gridColIdx(oGrid, sColId)]"+ gfn_gridColIdx(oGrid, sColId) );
oDs.set_rowposition(j); // 현재 Row 설정
oGrid.setCellPos(gfn_gridColIdx(oGrid, sColId));// 선택할 셀의 위치를 설정하는 메소드
oGrid.showEditor(true);
trace("[/lib_Validation.xjs][gfn_validGrid()] ==> [TEST_41][j_번째]"+ j +"[oGrid]"+ oGrid +"[sColId]"+ sColId +"[칼럼명]"+ sColNm );
gfn_alert(this, "W0001", sColNm);// W0001: [M1]은(는) 필수입력 항목입니다.
return false;
}
}
if(sChkValue.toString().indexOf("N") >= 0)
{
if(!isNumeric(sValue))
{
//oDs.rowposition = j;
oDs.set_rowposition(j); // 현재 Row 설정
oGrid.setCellPos(gfn_gridColIdx(oGrid, sColId));
oGrid.showEditor(true);
//gfn_alert("W0002", sColNm);// W0002: [M1]은(는) 숫자입력 항목입니다.
gfn_alert(this, "W0002", sColNm);// [M1]은(는) 숫자입력 항목입니다.
return false;
}
}
}
//trace("[/lib_Validation.xjs][gfn_validGrid()] ==> [TEST_50][sChkValue.D]"+ sChkValue.toString().indexOf("D") );
if(sChkValue.toString().indexOf("D") >= 0)
{
for(var j = 0; j < oDs.getRowCount(); j++)
{
//var sColumnSts = oDs.getColumn(j, "ROW_STS");
var sColumnSts = oDs.getRowType(j);// ROW 상태
//trace("[/lib_Validation.xjs][gfn_validGrid()] ==> [TEST_51] [j_번째]"+ j +"[oDs.rowcount]"+ oDs.rowcount +"[sColumnSts]"+ sColumnSts +"[oDs.MSG_CD]"+ oDs.getColumn(j, "MSG_CD") +"[oDs.MSG_DIV]"+ oDs.getColumn(j, "MSG_DIV") +"[oDs.MSG_CONTENT]"+ oDs.getColumn(j, "MSG_CONTENT") );
if(sColumnSts == "D") // ROW_STAT_DELETE
{
continue;
}
if(!bAllCheck)
{
if(gfn_isNull(sColumnSts))
{
continue;
}
}
var sValue = "";
if(gfn_isNull(oDs.getColumn(j, sColId)))
{
sValue = "";
}
else
{
sValue = oDs.getColumn(j, sColId).toString();
}
for(var k = 0; k < oDs.getRowCount(); k++)
{
var sCmpValue = "";
if(gfn_isNull(oDs.getColumn(k, sColId)))
{
sCmpValue = "";
}
else
{
sCmpValue = oDs.getColumn(k, sColId).toString();
}
if(j == k)
{
continue;
}
if(sValue.length > 0 && sValue == sCmpValue)
{
//trace("[/lib_Validation.xjs][gfn_validGrid()] ==> [TEST_54][sValue]"+ sValue +"[칼럼명]"+ sColNm );
//oDs.rowposition = j;
oDs.set_rowposition(j); // 현재 Row 설정
oGrid.setCellPos(gfn_gridColIdx(oGrid, sColId));
oGrid.showEditor(true);
//trace("[/lib_Validation.xjs][gfn_validGrid()] ==> [TEST_55][칼럼명]"+ sColNm );
//gfn_alert("W0003", sColNm);// W0003: [M1]에 중복된 Data가 존재합니다.
gfn_alert(this, "W0003", sColNm);// W0003: [M1]에 중복된 Data가 존재합니다.
return false;
}
}
}
}
}
return true;
}
=============================================================================
user property 'validExpr' 이름으로 생성
dataset Coulum ID:dataset Colum Name:P,dataset Coulum ID:dataset Colum Name:P 형태로 입력
==============================================================================
bRst = gfn_validGrid(this.grd_Sample, false);// 02. grd_detail Grid의 Validation Check