넥사크로 expr bind - negsakeulo expr bind

IT/투비소프트 2016. 6. 7. 14:41

[문제] 그리드 안의 a와 b를 더해서 자동으로 c를 계산하려면 어떻게 해야하는가?

A 

C(합계) 

1

[해결법]

그리드의 속성에 expr에서 nexacro.toNumber(A,0)+nexacro.toNumber(B,0) 방식으로 작성하면 해결할 수 있다. 그리고 사칙연산 모두 가능하다.

'IT > 투비소프트' 카테고리의 다른 글

[nexa] 코드 테이블에서 레벨별로 코드명이 같을때  (0)2016.06.07
투비소프트 Q&A 게시판  (0)2016.06.07

Posted by 류재춘

TAG 넥사크로 그리드 계산, 넥사크로 그리드 계산하기, 넥사크로 그리드 자동계산

, 댓글 0개가 달렸습니다

댓글을 달아 주세요

    Name

    Password

    Homepage

    비밀글

    Intro.

    지난 기고문에 이어 그리드 Expr을 활용하는 방법 중 데이터셋과 사용자함수를 이용한 활용 방법을 공유하도록 하겠다.

    how to expr

    그리드 소계 텍스트를 Expr를 통해 설정하는 예시를 단계별로 설명하여 데이터셋 예약어 사용 및 사용자함수를 구현하는 방법에 대해 공유한다.

    그리드에 소계를 표현하는데 소계 Row에 “소계”라는 텍스트를 출력하고 싶어요.

    1. getRowLevel() 함수를 통해 현재 Row의 레벨 값을 구한다.

    2. 레벨값이 0일 경우 기존 컬럼 정보를 보여준다.

    3. 레벨값이 0 아닐 경우 [소계]를 보여준다.

    4. 위의 기능을 Expr로 구현한다.

    Expr에 적용할 스크립트를 작성해 보면 다음과 같이 사용할 수 있다.

     expr 수식 : dataset.getRowLevel(currow) != 0 ?  ”소계” : [컬럼명]

    소계 텍스트가 아니라 컬럼데이터 + 소계를 텍스트로 출력하고 싶어요.

    1. 위와 같이 설정한다.

    2. 레벨값이 0이 아닐 경우 currow - 1에 해당하는 컬럼값과 [소계]를 같이 표현한다.

    Expr에 적용할 스크립트를 작성해 보면 다음과 같이 사용할 수 있다.

    expr 수식 : dataset.getRowLevel(currow) !=0 ? dataset.getColumn(currow-1) + ” 소계” : [컬럼명]

    그룹 2개 이상의 컬럼데이터 + 소계를 출력하고 싶어요.

    좀더 복잡한 수식이 필요하므로 expr로 설정하여 관리하기 힘들 수 있다. 이럴 경우 사용자함수를 통해 expr을 설정하도록 한다.

    expr 수식 : dataset.parent.fnGetSubsumText(dataset , currow)


    이때 사용자 함수가 선언된 폼의 scope을 찾는데 주의가 필요하다. 그리드의 부모가 해당 폼일 경우의 scope는 다음과 같다.

    Form Component > Grid Component

    그렇다면 expr에서 접근하기 위해  [comp.parent.사용자함수명] 와 같이 작성하면 사용 할 수 있다. 하지만 그리드의 부모가 해당 폼이 아니고 중간에 Div가 하나 추가된다면  그리드와 폼까지의 scope는 다음과 같다.

    Form Component > Div Component > Form Component(Div 내부폼) > Grid Component

    이 경우 해당 함수에 접근하기 위해 [comp.parent.parent.parent.사용자함수]와 같이 작성이 필요하고 scope의 깊이가 깊을수록 스크립트 작성이 어려워 진다. 필자의 경우 그리드에 바인드된 데이터셋의 경우 주로 해당 폼에 있는 데이터셋을 사용하므로 [dataset.parent.사용자함수명] 방식을 선호한다. (대부분 로컬 or 글로벌 데이터셋 둘 중 하나다.)

    사용자 함수에 작성된 스크립트를 정리하면 다음과 같다.

    this.fnGetSubsumText = function (dataset, currow)
    {
    	var sRtnString = "";
    	var nRowLevel = dataset.getRowLevel(currow);
    
      if(nRowLevel==2)
      {
      	sRtnString = dataset.getColumn(currow-nRowLevel, "Column1") + " 소계";
      }else if(nRowLevel==1)
      {
      	sRtnString = dataset.getColumn(currow-nRowLevel, "Column2") + " 소계"
      }else
      {
      	sRtnString = dataset.getColumn(currow-nRowLevel, "Column1");
      }
      return sRtnString;
    }

    PS.

    만약 추가적인 expr 활용 방법이 궁금하다면 Feedback 메뉴를 통해 요청하길 바란다. 참고로 데이터셋의 findRow(), getSum(), getCaseSum()등과 같은 함수도 expr 구문을 사용할 수 있고 이를 활용한 데이터 집계 처리 및 데이터 찾기가 가능하다.

    플레이넥사크로 바로가기

    https://www.playnexacro.com/

    play nexacro

    A community of nexacro platform.

    www.playnexacro.com

    넥사크로 expr bind - negsakeulo expr bind

    expr:(dataset.getColumn(currow,'startDate')).substr(0,4) + '-' 
    + (dataset.getColumn(currow,'startDate')).substr(4,2) + '-' 
    + (dataset.getColumn(currow,'startDate')).substr(6,2) 
    + ' ~ ' 
    + (dataset.getColumn(currow,'endDate')).substr(0,4) + '-' 
    + (dataset.getColumn(currow,'endDate')).substr(4,2) + '-' 
    + (dataset.getColumn(currow,'endDate')).substr(6,2)

    0. 계산식(Expression)이란?

    : 컴포넌트, 혹은 그리드 셀의 텍스트를 계산을 통해 출력하고자 할 때 사용

    그리드 더블클릭 - 편집창 - Action - text 속성의 Set Expression 버튼 클릭

    넥사크로 expr bind - negsakeulo expr bind
    set expression 버튼

    1. 사칙연산

    : 바인드 된 데이터셋 칼럼의 결과 값의 연산을 수행

    ex) FULL_NAME + EMPL_ID

    넥사크로 expr bind - negsakeulo expr bind

    2. 예약어 : 수식에서 제공되는 예약어 사용

    ex) currow

    넥사크로 expr bind - negsakeulo expr bind

    -> 0부터 출력됨(1부터 출력하고 싶다면 currow+1)

    3. 삼항 연산자 (A ? B : C)

    ex) GENDER=="M"?"Male":"Female"

    넥사크로 expr bind - negsakeulo expr bind

    4. Dataset 메소드

    ex) comp.parent.ds_emp.getRowCount()/ dataset.getRowCount()

    넥사크로 expr bind - negsakeulo expr bind

    - comp : Expression을 적용하고 있는 컴포넌트

    - Parent : 컴포넌트의 부모, 즉 화면객체

    - getRowCount : Row의 전체 개수 반환

    - dataset : 바인딩되어있는 Dataset의 경우 comp와 parent 대신 사용

    더 다양한 계산식은 도움말(F1)...

    5. 함수(Function) <- 권장하는 방법은 아님.

    ex) this.fn_code = function(GENDER) {

            if(GENDER == "M") return "Male";

            else return "Female"; 

         이라는 함수 만들고, 만든 함수 호출

    넥사크로 expr bind - negsakeulo expr bind

    6. Nexacro API & Javascript API

    ex) round

    넥사크로 expr bind - negsakeulo expr bind

    - 소수점 밑 2자리까지 표현