[ Nexacro.function - Dynamic ]

 

 

0. 아래에서 사용될 공통 함수   

   

 

1. Dynamic하게 함수 찾기

    1. 문자열을 이용해서 함수 얻기

        . 이때 func는 함수 object가 된다.

        . var func = this["fn_getFuncName"];  

 

        . 위에서 얻은 함수명을 실행시키기

        . func();

 

        . 결과가 function이면 함수 임

        . if (func && typeof(func) == "function) 

 

 

    2. 현재 form, 상위 form에 대한 funciton 찾기

        var find = "function_name";

        var value = this.lookup(find);

        trace(typeof(value)); 

        . trace결과 : funciton

 

    3. form에 선언된 함수목록을 배열형태로 가져오기

       . 현재 화면에 함수 목록

           var arr = this.gfn_GetFunctionListName(this);

       . div내부 form에 함수 목록

           var arr = this.gfn_GetFunctionListName(this.div_name);

       . tabpage내부의 함수 목록

           var arr = this.gfn_GetFunctionListName(this.Tab00.tabpage1);

       . application 함수 목록

           var arr = this.gfn_GetFunctionListName(application);

       . 공통함수

       

 

2. Dynamic하게 form변수 찾기

    1. 현재 form, 상위 form에 대한 form변수 찾기

        var find = "form_variable_name";

        var value = this.lookup(find);

        trace(typeof(value)); 

        . trace 결과 : string,  number,  function 등

 

    2. form 에 선언된 변수를 배열 형태로 가져 오는 함수

       . 현재 화면에 함수 목록

           var arr = this.gfn_GetValueList(this);

       . div내부 form에 함수 목록

           var arr = this.gfn_GetValueList(this.div_name);

       . tabpage내부의 함수 목록

           var arr = this.gfn_GetValueList(this.Tab00.tabpage1);

       . application 함수 목록

           var arr = this.gfn_GetValueList(application);

       . 공통함수

       

 

3. 화면에 적용된 Event 목록 찾기

   

Posted by 농부지기
,

[ Nexacro.Deploy - 공통.js deploy하기 ]

 

1. 정의

    - 'nexacro14lib' 밑에 있는 공통.js들은 [ Generate Application, Generate Themas, Generate File, Generate Modules(js) ] 과 같은 icon을 눌러서 deploy했을 경우 프로젝트를 실행시 반영되지 않는다.

    - 별도방법으로 'nexacro14lib' 밑에 있는 공통..js들을 처리 해야 된다.

    - 공통.js 예) Button.js,... Grid.js...Color.js.... 등

 

2. 'nexacro14lib' 에 있는 공통.js deploy하기

    - 메뉴 : Build > Deploy > Deploy Application

    - [Deploy Application]창

       . Output Path : [D:\temp\deploy\]

       . Options

          [v] Merge JSON FIle

          [v] Compress JS file 

       .[Deploy] 버튼 클릭

    - 결과

       . 만약, grid.js파일을 변경 되어 운영에 반영하고 싶은 경우

       . [D:\temp\deploy\nexacro14lib\component\Grid.json]

         이 파일을 eclipse 프로젝트쪽으로 복사 후 svn에 적용 하면 된다.

    - 설명

       . Output Path               : nexacro14lib 공통.js들이 deploy된 후 결과 폴더

       . [v] Merge JSON FIle : 공통.js파일들을 deploy할 때 json파일에 merge되어 생성된다.

       . [v] Compress JS file : 보통 컴파일된 js들은  공백 및 enter key등이 존재 한다.

                                            하지만 이 option을 선택하면 공백,enter값등이 존재 하지 않은체

                                            한줄로 쭉 연결되어 deploy되어 파일이 생성된다.

                                           

Posted by 농부지기
,

[ Function. argument넘기기 ]

 

 

 

1. Array방식으로 dataset넘기기

   this.fn_name([this.ds_name1, this.ds_name2,...]);

   ...

   this.fn_name = function(objDsList){

      for(var i=0; i<objDsList.length; i++){

         var str = objDsList[i].getColumn(nRow, "columId");    <-- 넘겨받은 dataset을 바로 사용가능

      }

   } 

Posted by 농부지기
,

[ Grid 튜닝5 - refreshBody ]

 

1. Grid Dynamic 생성 시 튜닝

    . 이슈

      - 보통 Grid Header, Body, Cell등을 dynamic하게 생성할 때 시간이 아주 많이 소비된다.

        이유가 appendContentsCol() 등의 API 를 사용하게 되면 이때마다 grid를 다시 그리기 때문에

        만약, cell을 20개 생성한다면 grid를 20번 새로 그린다는 의미가 될 수 있다.

    . 해결방법

      - Grid.set_enableredraw(false);

      - grid dynamic하게 생성

      - Grid.set_enableredraw(true);

    . 이유

      - set_enableredraw(false); 를 하게 되면 이때 부터 그리드를 그리지 않는다.

         그런 후 grid의 모든 cell, expr등을 입힌 후

         다시 set_enableredraw(true);를 해주면 Grid를 한번만 그리게 된다.

 

2. Dataset변경 시 Grid튜팅

    . 이슈

      - 화면에 상당히 많은 자료가 변경이 되고, expr등이 많이 변경되어야 되는 경우

         grid에 표현이 되어야 되는 이때 속도가 상당히 느려진다.

    . 해결방법1

      - Grid.set_enableredraw(false);

      - data 변경 및 expr변경

      - Grid.set_enableredraw(true);

    . 이유

      - set_enableredraw(false); 를 하게 되면 이때 부터 그리드를 그리지 않는다.

         그런 후 dataset에 모든 자료가 변경 된고, expr등을 변경한 후

         다시 set_enableredraw(true);를 해주면 Grid를 한번만 그리게 된다.

     . 해결방법2

      - Grid.refreshBody(false);

      - data 변경 및 expr변경

      - Grid.refreshBody(true);

     . 이유

       - refreshBody() API가 set_enableredraw()보다 속도가 빠르다.

       - set_enableredraw()는 grid를 처음부터 전체를 다시 그린다.

       - refreshBody()는 변경된(?)부분만 다시 그린다.

       - 참고 : refreshBody()는 변경된(?) 부분만 그리기 때문에 dynamic 하게 grid를 생성할 때는 사용하면 안된다.

                   반드시 dataset 의 oncolumn changed event에서만 가능하다.

 

3. refreshBody() API 의 prototype

    

 

     - nexacro14lib > component > Grid > Grid.js

     

'Nexacro-이론 및 튜닝 > dataset.grid.튜닝' 카테고리의 다른 글

Dataset 튜닝4 - alasql  (0) 2017.11.15
Dataset 튜닝3 - set,get  (1) 2017.11.15
Dataset 튜닝2 - Hashmap방식  (0) 2017.11.15
Dataset 튜닝1 - 정의  (0) 2017.11.15
Posted by 농부지기
,

[ Dataset 튜닝4 - alasql ]

 

1. 정의

    . alasql이라는 library를 사용해서 dataset의 filter()함수를 사용하지 않고,

      json객체, alasql library를 이용해서 구현할 수 있다.

 

2. 장점 : dataset의 filter()함수를 사용하면 속도가 느리기(?)때문에 
              json 객체와 alasql이라는 기능을 사용해서 속도를 향상시킨다.

 

3. 단점 : dataset정보가 변경 시 json객체의 값도 동기화 시켜줘야 된다.

 

4. nexa에서 alasql library사용방법

    a. [alasql.min.json]과 [[alasql.min.js] 파일 2개를 웹에서  다운로드 받아 아래 경로에 위치시킴

         - C:\HCG\workspace\gdmi\src\main\nxui\nexacro14lib\component

    b. Edti TypeDefinition > [Modules] Tab

        - [alasql.min.json] 명칭추가

        - [...] 눌러  'alasql.min.json' 파일을 연결 시킴

 

9. 소스

    

 

 

'Nexacro-이론 및 튜닝 > dataset.grid.튜닝' 카테고리의 다른 글

Grid 튜닝5 - refreshBody  (0) 2017.12.05
Dataset 튜닝3 - set,get  (1) 2017.11.15
Dataset 튜닝2 - Hashmap방식  (0) 2017.11.15
Dataset 튜닝1 - 정의  (0) 2017.11.15
Posted by 농부지기
,

[ Dataset 튜닝3 - set,get ]

 

 

1. 정의

    . 한 Action으로 get, set을 수백,수천번이상을 수행해야 되는 경우가 존재할 경우

      nexa의 ds.getColumn(), ds.setColumn()함수를 사용한다면 속도가 너무 오래 소요된다.

     

2. 개선방법 - 종류 1

    1. ds.getColumn(), ds.setColumn()함수를 꼭 사용해야 된다면

        함수를 호출할 때 column id를 호출하는게 아니고, column Index로 호출한다.

        nexa특성상 column id보다 column index를 넘기게 되면 속도가 향상된다.

     2. nexa core 속성  _index를 사용

         예) var nColId = ds.getColumnInfo("컬럼명")._index;

               ds.getColumn(0, nColId);

     3. 컬럼index정보를 위 방식이 아닌 자료조회 후 hashmap을 생성해서 index정보를 활용하기

         예) //dataset에 대한 컬럼정보를 hashmap생성

             

              //hashmap정보를 이용해서 dataset에서 값을 get, set하기

              this.ds_detail.getColumn(0, this.oDetailColIdx["컬럼명"] );

              this.ds_detail.setColumn(0, this.oDetailColIdx["컬럼명"], "값1" );

 

2. 개선방법 - 종류 2

    1. 사용자에 의해 값 변경등으로 dataset의 get, set을 상당히 많이(?약 몇천번)을 수행해야 된다면

        ds.getColumn(), ds.setColumn()함수가 아닌,

        -> _rawRecords, _viewRecords 인 nexa core함수를 사용한다.

    2. 이슈 : 아래 saveXML() 함수결과를 보면 값이 변경 되지 않았다.- 아쉽다.

                 하지만 transaction처리 후 서버에서보면 변경된 컬럼값을 받아 볼 수 있다.

                    -> 이건 내가 직접테스트해보지는 못했음.

       

'Nexacro-이론 및 튜닝 > dataset.grid.튜닝' 카테고리의 다른 글

Grid 튜닝5 - refreshBody  (0) 2017.12.05
Dataset 튜닝4 - alasql  (0) 2017.11.15
Dataset 튜닝2 - Hashmap방식  (0) 2017.11.15
Dataset 튜닝1 - 정의  (0) 2017.11.15
Posted by 농부지기
,

[ Dataset 튜닝2 - Hashmap방식 ]

 

1. 정의

    1. dataset의 findRow()함수를 사용하지 않고

        -> pk형태로 javascript의 Hashmap기능을 이용해서 row Hashmap을 생성한다.

            그런후 row를 찾을 때  Hashmap에서 row를 찾아 온다.


2. 이유

    . 특정 로직등에서 dataset의 findRow()함수를 사용해야 될경우

       data 수가 적을 경우에는 문제가 없지만 상당히 많은 data가 존재하고

사용자에 의해 값 변경등으로 dataset의 findRow()함수를 아주 많이(?약 몇백번) 수행해야 된다면

       findRow()를 사용하지 않고

       -> pk형태로 javascript의 Hashmap기능을 이용해서 row Hashmap을 생성한다.

            그런후 row를 찾을 때  Hashmap에서 row를 찾아 온다.

 

 

3. 개발방법

    1. 서버에서 dataset을 조회

    2. callback()함수에서 아래 script처럼 pk기준으로 Hashmap을 만든다.

    3. 그런 후 ds.findRow()함수를 사용하지 않고, Hashmap의 객체를 생성한다.

    4. 계산등을 수행하기 위해 findRow()를 사용할 때 Hashmap객체를 이용해서 row를 찾아 온다.

4. Hashmap 생성 script

    

 

5. row를 얻는 예제

    즉, 조회한 dataset의 자료가 시도별, 구를 관리하는 레코드인 경우

     Hashmap에 '대한민국,서울,구로구' 와 같이 입력을 하면 바로 row를 찾아 온다.

    

 

6. 참고

    서버에서 자료를 조회 후 5만건 이상이여도 Hashmap을 만드는 시간을 극히 잛은 시간이 소요된다.

    하시만 경험상으로 상당히 많은 findRow()함수를 이용해서 개발할 때 약30초 걸리던 시간이

    Hashmap을 이용해서 row를 찾아 오게 되니 약 0.3초 정도 시간이 소요 됐다.

'Nexacro-이론 및 튜닝 > dataset.grid.튜닝' 카테고리의 다른 글

Grid 튜닝5 - refreshBody  (0) 2017.12.05
Dataset 튜닝4 - alasql  (0) 2017.11.15
Dataset 튜닝3 - set,get  (1) 2017.11.15
Dataset 튜닝1 - 정의  (0) 2017.11.15
Posted by 농부지기
,

[ Dataset 튜닝1 - 정의 ]

 

1. 정의

    . 레코드가 많고(약 5만건), 화면에서 계산이 엄청(?)많을 경우 Dataset의 처리 속도가 너무 느리다.

    . tobe제품이 개발하기는 너무 좋지만 대용량처리에 많은 이슈가 있다.

    . 그래서, tobe의 component만 사용하고 속도를 위해서는 tobe core함수,속성 및 순수javascript문법을 사용해서 개발해야 된다.

 

2. 속도 개선 종류

    1. 사용자에 의해 값 변경등으로 dataset의 findRow()함수를 상당히 많이(?약 몇백번) 수행해야 된다면

        findRow()를 사용하지 않고

        -> pk형태로 javascript의 Hashmap기능을 이용해서 row Hashmap을 생성한다.

            그런후 row를 찾을 때  Hashmap에서 row를 찾아 온다.

 

    2. 사용자에 의해 값 변경등으로 dataset의 get, set을 상당히 많이(?약 몇천번)을 수행해야 된다면

        ds.getColumn(), ds.setColumn()함수가 아닌,

        -> _rawRecords, _viewRecords 인 nexa core함수를 사용한다.

 

    3. 상당히 많은 Row(약 5만 row이상)일 때 set_filterstr()함수를 사용하면 약 1~2초 정도

        grid를 그리는데 소요되므로 set_filterstr()함수를 사용하지 말고

        -> alasql이라는 기능을 사용하여 dataset의 일정 구간을 가져와 handling한다.

             이 alasql은 json객체를 만들어서 사용해야 된다.

 

 

'Nexacro-이론 및 튜닝 > dataset.grid.튜닝' 카테고리의 다른 글

Grid 튜닝5 - refreshBody  (0) 2017.12.05
Dataset 튜닝4 - alasql  (0) 2017.11.15
Dataset 튜닝3 - set,get  (1) 2017.11.15
Dataset 튜닝2 - Hashmap방식  (0) 2017.11.15
Posted by 농부지기
,

[ Nexacro-튜닝포인트 ]

 

1. Hashmap 사용하기

    - 이유 : ds_nam.findRow(); - 자료가 많을 경우 경우 속도가 느려짐

    - 방법 :

         선언    : this.oDetailColIdx = {};

         값 Set : this.oDetailColIdx[pk컬럼1값 + ',' + pk컬럼2값] = row;   - 즉 pk를 key로 잡고, row를 set한다.

 

2. array_name.reduce

 

3. alasql

   - https://github.com/agershun/alasql

   - https://raw.githubusercontent.com/wiki/agershun/alasql/Similar-Projects.md

 

3. javascript용 excel

    - https://github.com/agershun/alax

    - node.js 용 excel

      .  https://todactodac.blogspot.kr/2016/06/nodejs-excel4node-node-excel.html?view=flipcard#!/2016/06/nodejs-excel4node-node-excel.html

      . https://talesofthefluxfox.com/2016/10/07/writing-to-xlsx-spreadsheets-in-node-js/

 

4. grid.enableRedraw 보단  grid.refreshBody(false)가 속도가 빠름.

 

5. makeRowIndex

    setGdmiColumn

    getGdmiColumn

    typeof

    viewRecord

 

6. dataset prototype 구현

    - set, get이 잘 안됨. 이유가 뭘까?

6.1 prototype 정의

this.calculatorInitSet = function(){
 var _pDataset = nexacro.Dataset.prototype;
 
 if(!_pDataset.setGdmiColumn) {
  _pDataset.setGdmiColumn = function(nRow, sCol, val) {
  
   try{
    this._rawRecords[nRow][sCol] = val;
    this._rawRecords[nRow][sCol].hi = val;
   }
   catch(e){}
  };
 }
 
 if(!_pDataset.getGdmiColumn) {
  _pDataset.getGdmiColumn = function(nRow, sCol) {
  
   try{
    return this._rawRecords[nRow][sCol];  -- _rawRecords :getColumn()함수보다 빠른 nexa 내부 함수
   }
   catch(e){}
  };
 }
 
 if(!_pDataset.getViewGdmiColumn) {
  _pDataset.getViewGdmiColumn = function(nRow, sCol) {
  
   try{
    return this._viewRecords[nRow][sCol];
   }
   catch(e){}
  };
 }
};

 

6.2 prototype 사용하도록 호출

      this.calculatorInitSet();

6.3 prototype 사용

      this.ds_name.getGdmiColumn(row, 'colid');

      this.ds_name.setGdmiColumn(row, 'colid', '값');

'Nexacro-이론 및 튜닝 > 기본문법' 카테고리의 다른 글

Nexacro-Null  (0) 2017.02.13
Nexacro - Array.초기화  (0) 2017.01.31
Nexacro 문법 - do while  (0) 2017.01.22
Nexacro 기본문법.Array2  (0) 2017.01.22
Nexacro 기본문법 - Array  (0) 2017.01.22
Posted by 농부지기
,

[ Nexacro.html5 모드로 실행하기 ]

 

1. eclipse 환경
   1. 프로젝트 생성 : Dynamic Web Project
   2. 프로젝트명    : FarmerStudy
   3. Tomcat 연동   : port - 8080

2. nexa환경
   1. runtime 환경에서 Qucik View가 아닌 Launch Project에서 수행이 되어야 html5 모드에서 실행가능
   2. nexa 프로젝트명 : FarmerStudy
   3. nexa -> 메뉴 -> Options > Build : Generate Path : D:\Study\eclipse\workspace\FarmerStudy\WebContent
   4. nexa -> Generate Applicaiton icon 클릭

3. eclipse 폴더 변경
   1. 농부지기 좀더 기술이 늘면 이 작업은 하지 않아도 되도록 문서 변경 ^^
      현재는 이 환경이 초보라 필요
   2. nexa에서 [Generate Applicaiton icon]을 클릭 하면 eclipse 폴더구조에
      /workspace/FarmerStudy/WebContent/FarmerStudy/.. 여기에 nexa js 소스들에 위치 함.
   3. 앞쪽 /workspace/FarmerStudy/ 의 FarmerStudy는 eclipse에서의 Project명이고
      뒤쪽 /WebContent/FarmerStudy/의 FarmerStudy는 nexa에서의 Project명이 된다.
   4. 실적으로 eclipse환경에 맞추기 위해서는 뒤쪽 nava용 FarmerStudy 폴더가 존재하면 안된다.
   5. 결론, /WebContent/FarmerStudy/ 하위에 존재하는 모든 폴더및소스를 /WebContent/밑으로 옮기고
      /WebContent/FarmerStudy/에서 FarmerStudy 폴더는 삭제해 버린다.
   6. 문제점, 이렇게 했을 경우 nexa에서 Generate Application등을 했을 경우 /WebContent/FarmerStudy/폴더가
      다시 생성 된다.
      그래서 차후에 이 부분을 어떻게 해결할지 고민해야 될 부분 이다.

 

 

* * 추가 필요 설정

1. trace 시 Log 출력

    1. FarmerStudy.xadl.js 파일 내부에

        this.set_tracemode("none");   -- this.set_tracemode("append");

Posted by 농부지기
,