본문 바로가기
IT/nexacro

expr 에서 함수 경로 찾기 & expr 이용한 Filter (Dataset Distinct예제)

by heavenLake 2024. 6. 21.
반응형

 

- 데이테셋 EXPR 사용시 함수 찾기

   this.ds_list.findRow("dataset.parent.gfn_isNull(COL_ID)");

 

- 그리드 EXPR인경우 함수 찾기

   comp.parent.(그리드위치에따라parent계속붙임).gfn_isNull(COL_ID)

 

- 참고 EXPR

   - 데이터셋 데이터 수정 여부 확인 

      this.ds_List.findRowExprNF("(dataset.getRowType(currow)==4)||(dataset.getRowType(currow)==2)");

 

   - 데이터셋 특정 COL_ID로 DISTINCT하기 (고정값이 아닌 현재로우의 값과 비교하기)

      var colId = 'IF_COL';

      var sExpr= 'rowidx==dataset.findRowExpr("'+colId+'==\'\" + '+colId+' \+ "\'" )' ;

      this.ds_list.filter(sExpr);  //해당 컬럼 ID로 중복 제거해준다.

      // rowidx는 Dataset의 row index를 의미합니다.

      //  filter에  'rowidx==dataset.findRowExpr("IF_COL=='"+IF_COL+"'") ' 이렇게 넣는 방식.

      //  IF_COL이 고정값 비교가 아님 현재로우의 IF_COL 값과 비교하는 방법이다.

      //  컬럼은 &&로 붙여서 여러개 같이 비교할수 있다.

      //  컬럼값이 필수가 아닌경우 null이 있으면 해당 row들은 그냥 제거된다.

 

==>> 값이 null 일때는 비교가 안되서 필터에서 제거되는 현상이 있으니 nvl함수를 생성해서

아래와 같이 처리하면 된다.

var sExpr = 'rowidx==dataset.findRowExpr( "dataset.parent.gfn_nvl(' +colid4+',\'x!x\')==\'\" + dataset.parent.gfn_nvl('+colid4+',\'x!x\') \+ "\'")';

 

===>> 컬럼이 여러개일때 예제.

this.Button00_onclick = function(obj:Button,  e:nexacro.ClickEventInfo)
{
 this.gf_distincDsFilter(this.Dataset00, "code,name"); 
}
this.gf_distincDsFilter = function(objDs, sColID)
{
 var arrArgs = this.gf_Trim(sColID).split(",");
 var sFilterExpr  = "";
 var sFindRowExpr = "";
 for (var i=0; i<arrArgs.length; i++)
 {
  if (objDs.getColumnInfo(arrArgs[i]) == null) continue;
  
  sFindRowExpr += (this.gf_IsNull(sFindRowExpr) == false) ? " && " : "";
  sFindRowExpr += "" + arrArgs[i] + "=='\" + " + arrArgs[i] + " + \"'";
 }
 
 if (this.gf_IsNull(sFindRowExpr) == false) {
  sFilterExpr = "rowidx==dataset.findRowExpr(\"" + sFindRowExpr + "\")";
 }
 objDs.filter(sFilterExpr);
}

 

 

반응형

댓글