[ Nexacro.Grid - cell을 area로 선택 시 cell의 sum,avg구하기 ]

 

1. 정의

    - Grid.속성.seltype = area 인 경우  사용자가 grid에서 cell을 여러게 drag해서 선택 했을 경우

       해당 cell의 숫자cell들만 값을 추출해서 cell갯수, 평균, 합계를 보여준다.

 

2. 호출

  // 그리드 합계 툴팁
  objGrid.addEventHandler("oncellclick", this.gfn_oncellclick_clearDragPosition, this);
  objGrid.addEventHandler("onlbuttonup", this.gfn_onlbuttonup_popuptootip, this);

 

3. function

   

'Nexacro-Function > Grid' 카테고리의 다른 글

Nexacro.Grid - cell을 area로 선택 시 cell의 sum,avg구하기  (0) 2018.01.04
Nexacro.Grid - treeView2  (0) 2017.01.28
Nexacro.Grid - treeView  (0) 2017.01.28
Nexacro.Grid - excel exort  (0) 2017.01.28
Nexacro.Grid - copy & paste  (0) 2017.01.28
Nexacro.Grid - grid Header Merge  (0) 2017.01.28
Posted by 농부지기

[ Nexacro.Array - 값 존재 위치(index)얻기 ]



'Nexacro-Function > ETC' 카테고리의 다른 글

Nexacro.Array - 값 존재 위치(index)얻기  (0) 2017.02.09
Nexacro.Etc - Graphic  (0) 2017.01.28
Nexacro.Etc - 파일관리  (0) 2017.01.28
Nexacro.Etc - 확장 비교함수  (0) 2017.01.28
Posted by 농부지기

[ Nexacro.Etc -  Graphic ]

 

 


/*********************************************************************************************
 ★ 설명
     GraphicPath의 그리기 영역을 구한다.
     GraphicPath에서 Border와 Pen의 크기를 뺀 영역을 의미한다.
 ★ parameter
    1. obj : GraphicPath Object ( 예 : GraphicPath00 )
    2. nLeftOffset : GrapicPath의 영역 중 Left에서 안쪽으로 들어가는 Offset값
     (옵션 : Default = 0) (예 : nLeftOffset=10이면 10만큼 Left에서 떨어진 지점이 영역으로 잡힘)
    3. nTopOffset : GrapicPath의 영역 중 Top에서 안쪽으로 들어가는 Offset값
     (옵션 : Default = 0) (예 : nTopOffset=10이면 10만큼 Top에서 떨어진 지점이 영역으로 잡힘)
    4. nRightOffset : GrapicPath의 영역 중 Right에서 안쪽으로 들어가는 Offset값
     (옵션 : Default = nLeftOffset) (예 : nLeftOffset=10이면 10만큼 Right에서 떨어진 지점이 영역으로 잡힘)
    5. nBottomOffset : GrapicPath의 영역 중 Bottom에서 안쪽으로 들어가는 Offset값
     (옵션 : Default = nBottomOffset) (예 : nLeftOffset=10이면 10만큼 Bottom에서 떨어진 지점이 영역으로 잡힘)★ return
 ★ Return         
    - 성공 = Rect Object
    - 실패 = null
   (단, offset이 너무커서 width나 height값보다 클 경우도 null이 return된다.)
 ★ 목적    
    GraphicPath.position을 이용하여 그리면 제대로 안되는 것을 알 수 있다. 그래서, 만들었다. Offset도 줄겸
 ★ BUG
    이 함수도 제대로 되는게 아니다. 나도 정확히 우찌해야 할지 잘 모르겠다. ???(모름)
*********************************************************************************************/

function GPRect(obj:GraphicPath, nLeftOffset, nTopOffset, nRightOffset, nBottomOffset)

{

 var GR = new Rect();

 var border, pen;

 

 if( fn_IsNull(obj) )  return null;

 if( fn_IsNull(nLeftOffset) ) nLeftOffset = 0;

 if( fn_IsNull(nTopOffset) ) nTopOffset = 0;

 if( fn_IsNull(nRightOffset) ) nRightOffset = nLeftOffset;

 if( fn_IsNull(nBottomOffset) ) nBottomOffset = nTopOffset;

 

 border = ( "x"+obj.style.border.width == "xNaN" ? 0 : obj.style.border.width );

 pen = ( "x"+obj.strokepen.width == "xNaN" ? 1 : obj.strokepen.width );

 GR.left = nLeftOffset;

 GR.top = nTopOffset;

 

 // 이렇게 하는게 최선이다.

 GR.right = obj.position.width - nRightOffset - 2*border - pen;

 GR.bottom = obj.position.height - nBottomOffset - 2*border - pen;

 if( GR.width < 0 || GR.height < 0 )

  return null;

 

 return GR;

}

 

/*********************************************************************************************
 ★ 설명
     GraphicPath처리 시 화살표처리 Data를 만들어 준다.
     이미 그려놓은 GraphicPath.data에 이 함수에서 return된 data를 덧붙여 처리해서 사용한다.
 ★ parameter
    1. obj:GraphicPath : GraphicPath Object ( 예 : GraphicPath00 )
    2. nArrowType  : 화살표의 종류( 예 : 1 )
       - 0 = 화살표 안그림
       - 1 = ---> 화살표
       - 2 = ---▶ 화살표
       - 3 = ---◆ 화살표
       - 4 = ---● 화살표
    3. nEndX, nEndY, nDirAngle : 화살표의 위치 및 화살표 방향
       - nEndX, nEndY : 화살표의 끝좌표
       - nAngle       : 화살표의 방향, 단 Radian값이다.
                        화살표 끝좌표의 가로축과 시작방향이 이루는 각이다.
                        (※ GetAngle()함수를 이용하면 쉽게 구할 수 있다.)
       (예 : (15,15) ----> (20,20) 으로 화살표를 그리고 싶다면
             nEndX = 20, nEndY = 20, nAngle = Deg2Rad(-45) )
    4. 화살표가 그려질 선을 중심으로 화살표의 넓이와 높이
       1) nArrowW : 화살표 넓이
       2) nArrowH : 화살표 높이
       (※ 단, ---●의 경우 타원처리는 안되고 nArrowW, nArrowH중 작은 쪽을 반지름으로 하는 원만 처리한다. )
                    (20)
       (예 : -----(0)▶(10) ==> nArrowW = 10, nArrowH = 20 )
                     (0)
                    (20)
       (예 : -----(0)◆(10) ==> nArrowW = 10, nArrowH = 20 )
                     (0)
 ★ return
    - 성공 = GraphicPath.data에 들어갈 화살표 Data
    - 실패 = ""
*********************************************************************************************/

function GPArrow(obj:GraphicPath, nArrowType, nEndX, nEndY, nAngle, nArrowW, nArrowH )

{

 var D="";

 var nDirX, nDirY;

 var nArrowOrgX, nArrowOrgY, nArrowCoW, nArrowCoH, nArrowDist;

 var nArrowType;

 

 if( fn_IsNull(obj) || fn_IsNull(nArrowType) || fn_IsNull(nEndX) || fn_IsNull(nEndY) ||

  fn_IsNull(nAngle) || fn_IsNull(nArrowW) || fn_IsNull(nArrowH) )

  return "";

  

 // ->, ▶

 if( nArrowType == 1 || nArrowType == 2 )

 {

  nArrowCoW = nArrowW;

  nArrowCoH = Math.round(nArrowH/2,1);

 }

 // ◆, ●

 else if( nArrowType == 3 || nArrowType == 4 )

 {

  nArrowCoW = Math.round(nArrowW/2,1);

  nArrowCoH = Math.round(nArrowH/2,1);  

 }

 else

  return "";

 

 if( nArrowType == 4 )

  nArrowDist = Math.min(nArrowW,nArrowH);

 else

  nArrowDist = Math.sqrt(Math.pow(nArrowCoW,2)+Math.pow(nArrowCoH,2));

  

 nArrowOrgX = nEndX + nArrowDist*Math.cos(nAngle);

 nArrowOrgY = nEndY - nArrowDist*Math.sin(nAngle);

/*

D  = " M " + nEndX + " " + nEndY;

 

D += " L " + nArrowOrgX + " " + nArrowOrgY;

 

return D;

 

*/

 // ->

 if( nArrowType == 1 )

 {

  var nArrowAngle, vRotatePoint1, vRotatePoint2;

  

  nArrowAngle = Math.atan2(nArrowCoH,nArrowCoW);

  vRotatePoint1 = RotatePoint( nArrowOrgX, nArrowOrgY, nEndX, nEndY, nArrowAngle );

  vRotatePoint2 = RotatePoint( nArrowOrgX, nArrowOrgY, nEndX, nEndY, -1*nArrowAngle );  

     

  D += " M " + nEndX + " " + nEndY;  

  D += " L " + vRotatePoint1.left + " " + vRotatePoint1.top;

  D += " M " + nEndX + " " + nEndY;    

  D += " L " + vRotatePoint2.left + " " + vRotatePoint2.top;

 }

 // ▶

 if( nArrowType == 2 )

 {

  var nArrowAngle, vRotatePoint1, vRotatePoint2;

 

  nArrowAngle = Math.atan2(nArrowCoH,nArrowCoW);

  vRotatePoint1 = RotatePoint( nArrowOrgX, nArrowOrgY, nEndX, nEndY, nArrowAngle );

  vRotatePoint2 = RotatePoint( nArrowOrgX, nArrowOrgY, nEndX, nEndY, -1*nArrowAngle );  

 

  D += " M " + nEndX + " " + nEndY;  

  D += " L " + vRotatePoint1.left + " " + vRotatePoint1.top;

  D += " L " + vRotatePoint2.left + " " + vRotatePoint2.top;

  D += " L " + nEndX + " " + nEndY;    

 }

 // ◆

 if( nArrowType == 3 )

 {

  var nArrowAngle, vRotatePoint1, vRotatePoint2, vRotatePoint3;

  

  nArrowAngle = Math.atan2(nArrowCoH,nArrowCoW);

  vRotatePoint1 = RotatePoint( nArrowOrgX, nArrowOrgY, nEndX, nEndY, nArrowAngle );

  vRotatePoint2 = RotatePoint( nArrowOrgX, nArrowOrgY, nEndX, nEndY, -1*nArrowAngle );

  vRotatePoint3 = RotatePoint( nEndX, nEndY, vRotatePoint1.left, vRotatePoint1.top, Math.PI-2*nArrowAngle );

  

  D += " M " + nEndX + " " + nEndY;  

  D += " L " + vRotatePoint1.left + " " + vRotatePoint1.top;

  D += " L " + vRotatePoint3.left + " " + vRotatePoint3.top;

  D += " L " + vRotatePoint2.left + " " + vRotatePoint2.top;

  D += " L " + nEndX + " " + nEndY;   

 }

 // ●

 if( nArrowType == 4 )

 {

  var nRX, nRY;

 

  nRX = nRY = Math.min(nArrowCoW,nArrowCoH);

  D += " M " + nEndX + " " + nEndY;

  D += " A " + nRX + " " + nRY + " 180 0 1 " + nArrowOrgX + " " + nArrowOrgY;  

  D += " A " + nRX + " " + nRY + " 180 0 1 " + nEndX + " " + nEndY;    

 }

 return D;

}

 

/*********************************************************************************************
 ★ 설명
     GraphicPath.data를 2차원 Array로 반환한다.
     단순히 Parsing만 하며 Array의 순서는 GraphicPath.data의 순서를 그대로 따른다.
     단, type이 중복되어 생략되는 경우(예: V 100 100) Array가 추가되고 첫번째 요소는 ""가 들어간다.
     (아래 예를 참고할것)
 ★ parameter
    1. sGpData : GraphicPath.data ( 예 : "M 0 0 L 100 100 H 100 V 100 100" )
 ★ return
    - 성공 = 2차원 Array
             ( 예 : Array ==> { {M,0,0}, {L,100,100}, {H,100}, {V,100}, {,100} }
    - 실패 = 빈 Array
 ★ 목적    
    GraphicPathData Object가 있었다가 사라졌다.
 ★ 참고사항
    aGpData로 data문자열을 만들고 싶다면 ==> GraphicPath.data = aGpData.join(" "); 로 처리하면 된다.
 ********************************************************************************************/

function AGPData(sGpData)

{

 var aGpData = new Array();

 var arr = new Array();

 var i, gi_no=-1, ho_no, val, sType, ho_num;

 

 if( fn_IsNull(sGpData) )  return aGpData;

 

 sGpData = sGpData.toString();

 arr = sGpData.split(" ");

 for( i = 0 ; i < arr.length ; i++ )

 {

  val = RTrim(LTrim(arr[i]));

  if( IsAlpha(val) == true )

  {

   gi_no++;

   ho_no = 0;

   

   var aHor = new Array(); // 2차원 배열의 가로 배열

   aGpData[gi_no] = aHor;

   aGpData[gi_no][ho_no] = val;

   sType = val;

  }

  else if( IsNum(val) == true )

  {

   ho_no++;  

   if( ( (sType == "M" || sType == "m") && ho_no == 3) ||

    ( (sType == "L" || sType == "l") && ho_no == 3) ||

    ( (sType == "H" || sType == "h") && ho_no == 2) ||

    ( (sType == "V" || sType == "v") && ho_no == 2) ||

    ( (sType == "A" || sType == "a") && ho_no == 8) ||

    ( (sType == "C" || sType == "c") && ho_no == 7) )

   {

    gi_no++;

    ho_no = 0;

 

    var aHor1 = new Array(); // 2차원 배열의 가로 배열

    aGpData[gi_no] = aHor1;

    aGpData[gi_no][ho_no] = "";    

    ho_no++;

    aGpData[gi_no][ho_no] = parseInt(val);

   }

   else

   {

    aGpData[gi_no][ho_no] = parseInt(val);

   }

  }

 }

 

 return aGpData;

}

 

 

☞  

 

☞  

 
 
 
 

  

'Nexacro-Function > ETC' 카테고리의 다른 글

Nexacro.Array - 값 존재 위치(index)얻기  (0) 2017.02.09
Nexacro.Etc - Graphic  (0) 2017.01.28
Nexacro.Etc - 파일관리  (0) 2017.01.28
Nexacro.Etc - 확장 비교함수  (0) 2017.01.28
Posted by 농부지기

[ Nexacro.Etc -  파일관리 ]

 

 


/*******************************************************************************
 ★ 설명
    File Path 문자열(예 : C:\a\b\filename.ext)에서 File명(예 : filename)을 추출
 ★ Parameter
    1. sPath   : File Path 문자열 (예 : "C:\a\b\filename.ext")
    2. bExt    : extend를 return되는 File명에 포함시킬지 여부 ( 옵션 : Default=false )
                 - true : extend를 File명에 포함시킴
                 - false : extend를 File명에 포함시키지 않음
 ★ return
    - 성공 =
  - bExt = true인 경우 ==> sPath에서 File명(예 : "filename.ext")
  - bExt = false인 경우 ==> sPath에서 File명(예 : "filename")
 - 실패 = ""
 ******************************************************************************/

function fn_GetFileName( sPath, bExt )

{

 var start_pos, end_pos, tmp_pos, filename;

 

 if( fn_IsNull(sPath) )  return "";

 if( fn_IsNull(bExt) )

  bExt = false;

 

 start_pos = Math.max(PosReverse( sPath, "\\" ),

      PosReverse( sPath, "/" ));

    tmp_pos = PosReverse( sPath, "::");

 if( tmp_pos > 0 ) tmp_pos++;

 start_pos = Math.max( start_pos, tmp_pos );

 if( bExt == false )

 {

  end_pos = PosReverse( sPath, "." );

  if( end_pos < 0 )

   end_pos = sPath.length;

  filename = sPath.substr( start_pos+1, end_pos-start_pos-1 );

 }

 else

 {

  filename = sPath.substr( start_pos+1 );

 }

  

 return filename;

}

 

/*******************************************************************************
 ★ 설명
    File Path 문자열(예 : C:\a\b\filename.ext)에서 확장자(예 : ext)을 추출
 ★ Parameter
    1. sPath   : File Path 문자열 (예 : "C:\a\b\filename.ext")
 ★ return
    - 성공 = sPath에서 확장자(예 : "ext") (단, "."이 없으면 "" return됨)
    - 실패 = ""
 ******************************************************************************/

function fn_GetFileExt( sPath )

{

 var pos;

 

 if( fn_IsNull( sPath ) ) return "";

 

 pos = PosReverse( sPath, "." );

 if( pos < 0 )

  return "";

 else

  return sPath.substr( pos+1 );

}

 

/*******************************************************************************
 ★ 설명
    sPath 문자열(예 : C:\a\b\filename.ext)에서 Path(예 : C:\a\b\)를 추출
 ★ Parameter
    1. sPath   : Path 문자열 (예 : "C:\a\b\filename.ext")
 ★ return
    - 성공 = sPath에서 Path(예 : "C:\a\b\")
    - 실패 = ""
 ******************************************************************************/

function fn_GetFilePath( sPath )

{

 var filename;

 

 if( fn_IsNull(sPath) )  return "";

 

 filename = GetFileName( sPath, true );

 if( filename == null )  return null;

 

 return sPath.substr(0, sPath.length - filename.length);

}

 

/*******************************************************************************
 ★ 설명
    화면내에서 자기 자신화면의 Url을 얻어온다.
 ★ Parameter
    없음
 ★ return
    - 성공 = 자기 자신화면의 Url ( 절대경로 또는 Service::a.xfdl 형태로 return됨 )
    - 실패 = ""
 ******************************************************************************/

function fn_GetThisUrl()

{

 var this_url, parent_type;

 

 // Division, Tab, PopupDiv인 경우에는 따로 처리해야 함

 parent_type = GetObjType(parent);

 if( parent_type == "Div" || parent_type == "PopupDiv" || parent_type == "TabPage" )

  this_url = parent.url;

 else

  this_url = this.getOwnerFrame().formurl;

  

 return this_url;

}

 

/*******************************************************************************
 ★ 설명
    현재 실행되고 있는 Project의 Root Full Path를 얻어온다.
 ★ Parameter
    없음
 ★ return
    - 성공 = 현재 실행되고 있는 Project의 Root Full Path
    - 실패 = ""
 ★ 참고사항
    현재 실행되고 있는 ADL Path는 application.xadl을 통해 얻을 수 있다.
 ★ 목적
    Tool에서 system.execXPlatform을 하면 Project경로를 알수 없어 실행이 힘들기
    때문에 만들었다.
 ★ BUG
    모든 화면 Service는 Project내의 바로 한단계 아래의 Sub Directory이고
    ADL은 Project Directory에 있다는 전제하에 만들어 졌다.
    즉, Project=C:\A\, ADL=C:\A\ADL.xadl, Service=C:\A\Service\라는 가정하에
    만들어졌다.
 ******************************************************************************/

function fn_GetProjectPath()

{

 var cur_xadl, filename, project_path;

 

 cur_xadl = application.xadl;

 if( fn_IsNull(cur_xadl) ) return "";

 

 filename = GetFileName(cur_xadl, true);

 if( fn_IsNull(filename) ) return "";

 

 // QuickView로 돌린 경우

 if( filename == "empty_adl.xadl" )

 {

  var this_url, pos;

  

  this_url = Replace( childframe.formurl, "\\", "/" );

  pos = PosReverse( this_url, "/");

  if( pos < 0 )

   return "";

  pos = PosReverse( this_url, "/", pos-1);

  if( pos < 0 )

   return "";

 

  project_path = childframe.formurl.substr(0, pos+1);

 }

 // Launch Project로 돌린 경우

 else

 {

  var trim_path;

  project_path = GetFilePath(application.xadl);

  trim_path = LTrim(project_path, "file://");

  if( trim_path != project_path )

   project_path = Replace( trim_path, "/", "\\" );

 }

 

 return project_path;

}

 

/*******************************************************************************
 ★ 설명
     ADL을 주고 XPlatform실행하는 함수
 ★ parameter
    1. sADL : ADL
       1) Full Path지정한 경우 (예 : C:\\Project\\ADL.xadl")
          Full Path에 해당하는 ADL실행
              2) ADL명만(확장자제외) 지정한 경우 ( 예 : "ADL" )
                 Project Path내의 ADL실행
              ※ 단, 경로에 대한 유효성 여부는 검사하지 않음
    2. sKey : XPlatform실행시 Key
              (옵션 : Default = ADL명(단, 확장자제외))
 ★ return
    - 성공 = true
    - 실패 = false
 ★ 주의사항
    XPLatform실행시 Argument를 전달할 방법은 못 찾겠다.
 ★ 목적    
    PC에서 Tool로 작업시 Project Path를 모를 경우 XPlatform실행이 어려워서 만들었음
 ******************************************************************************/

function fn_RunXP(sADL, sKey)

{

 var adl_name;

 var project_path;

 var oChildFrame_SDI;

 

 if( fn_IsNull(sADL) )  return false;

 

 adl_name = GetFileName(sADL);

 if( fn_IsNull(sKey) )  sKey = adl_name;

 

 // FullPath로 지정한 경우

 if( adl_name != sADL )

  system.execXPlatform(" -X \"" + sADL + "\" -K " + sKey);

 // ADL명만 지정한 경우

 else

 {

  project_path = GetProjectPath();

  if( fn_IsNull(project_path) )

   return false;

  else

   system.execXPlatform(" -X \"" + project_path + sADL + ".xadl" + "\" -K " + sKey);

 }

  

 return true;

}

 

/*******************************************************************************
 ★ 설명
     XPLATFORM에서 정의된 Path예약어와 실제경로 목록을 얻어오는 함수
 ★ parameter
 ★ return
    2차원 Array = {{alias 1, 실제경로 1}, {alias 2, 실제경로 2},...}
 ******************************************************************************/

function fn_GetPathAliasList()

{

 var aList = new Array();

 

 var tmp = new Array();

 tmp[0] = "%USERAPP%";  tmp[1] = system.convertRealPath(tmp[0]);

 aList[0] = tmp;

 

 var tmp = new Array();

 tmp[0] = "%MYDOCUMENT%"; tmp[1] = system.convertRealPath(tmp[0]);

 aList[1] = tmp;

 

 var tmp = new Array();  

 tmp[0] = "%INSTALLROOT%"; tmp[1] = system.convertRealPath(tmp[0]);

 aList[2] = tmp;

 

 var tmp = new Array();  

 tmp[0] = "%XPLATFORM%"; tmp[1] = system.convertRealPath(tmp[0]);

 aList[3] = tmp;

 

 var tmp = new Array();  

 tmp[0] = "%COMPONENT%"; tmp[1] = system.convertRealPath(tmp[0]);

 aList[4] = tmp;

 

 var tmp = new Array();  

 tmp[0] = "%THEME%";  tmp[1] = system.convertRealPath(tmp[0]);

 aList[5] = tmp;

 

 var tmp = new Array();  

 tmp[0] = "%CACHE%";  tmp[1] = system.convertRealPath(tmp[0]);

 aList[6] = tmp;

 

 return aList;

}

/*******************************************************************************
 ★ 설명
    sPath에 해당하는 모든 하위 디렉토리에 대하여
    File 및 Directory 리스트를 가져와서 oDataset에 담는다.
 ★ Parameter
    1. sPath    : 리스트를 가져올 Path = 절대 Path로 줄 것
    2. oDataset : 리스트를 담을 Dataset Object
                  Column = level, dir, file, size, fgbn
                  ( Column이 없으면 만들어 줌 )
                  ( fgbn = 파일 구분 : "d" = 디렉토리, "f" = 파일 )
    3. _level   : 내부적으로 재귀호출시에만 사용함, 사용치 말것
 ★ return
    - 실패 = false
    - 성공 = true
 *****************************************************************************/

function FILEGetFileList(sPath, oDataset, _level)

{

 var flist, i;

 

 if( fn_IsNull(sPath) || fn_IsNull(oDataset) )

  return false;

 if( fn_IsNull(_level) )

 {

  _level = 0;

  

  // Column있는지 체크하고 만들기

  if( oDataset.getColumnInfo( "level" ) == null )

   oDataset.addColumn("level", "string");

  if( oDataset.getColumnInfo( "dir" ) == null )

   oDataset.addColumn("dir", "string");

  if( oDataset.getColumnInfo( "file" ) == null )

   oDataset.addColumn("file", "string");

  if( oDataset.getColumnInfo( "size" ) == null )

   oDataset.addColumn("size", "string");

  if( oDataset.getColumnInfo( "fgbn" ) == null )

   oDataset.addColumn("fgbn", "string");

  

  oDataset.clearData();  

 }

 

 flist = VirtualFile.getFileList(sPath, "*");

//alert(flist.length);

 for( i = 0 ; i < flist.length ; i++ )

 {

  row = oDataset.addRow();

  oDataset.setColumn(row, "level", _level);

  oDataset.setColumn(row, "dir", sPath);

  oDataset.setColumn(row, "file", flist[i].filename);

  oDataset.setColumn(row, "size", flist[i].size);

  if( flist[i].isDirectory() == true )

  {

   oDataset.setColumn(row, "fgbn", "d");

   FILEGetFileList(sPath+"\\"+flist[i].filename, oDataset, _level+1);

  }

  else

   oDataset.setColumn(row, "fgbn", "f");

 }

}

☞  

 

☞  

 
 
 
 

  

'Nexacro-Function > ETC' 카테고리의 다른 글

Nexacro.Array - 값 존재 위치(index)얻기  (0) 2017.02.09
Nexacro.Etc - Graphic  (0) 2017.01.28
Nexacro.Etc - 파일관리  (0) 2017.01.28
Nexacro.Etc - 확장 비교함수  (0) 2017.01.28
Posted by 농부지기

[ Nexacro.Etc -  확장 비교함수 ]

 

                        [  ◎ 확장 비교문 ]     

 

 

/*******************************************************************************
 ★ 설명
    MiPlatform의 iif()와 동일
******************************************************************************/

function fn_Iif( expr, v_true, v_false )

{

 return expr ? v_true : v_false;

}

 

/*******************************************************************************
  ★ 설명
     iif 비교 함수크
  ★ Parameter
    1. arg0   : true / false 를 판단 하는 값 ( 예 : 1 == 2 )
    2. arg1   : true 일경우 리턴
    3. arg2   : false 일경우 리턴됨)
  ★ return
    - true 일경우 arg1 리턴
    - false 일경우 arg1 리턴
  ******************************************************************************/

 function iif()

 {

         var varRtnValue = null;

 

        var arrArgument = iif.arguments;

 

        if(arrArgument[0]) {

                 return arrArgument[1];

         } else {

                 return arrArgument[2];

         }

 }

/*******************************************************************************
 ★ 설명
    MiPlatform의 decode()와 동일
******************************************************************************/

function fn_Decode( )

{

 var i, fn;

 fn = Decode;

 for( i = 1 ; i < fn.arguments.length ; i+=2 )

 {

  if( fn.arguments[0] == fn.arguments[i] )

   return fn.arguments[i+1];

 }

 return fn.arguments[i-2];

}


/*******************************************************************************
  ★ 설명
     decode 비교 함수
  ★ Parameter
    1. arg0   : 비교 할 변수
     2. arg1   : 비교 대상 변수
     3. arg2   : 비교 대상 변수가 같을 경우 리턴할 값
     4. 반복..
  ★ return
    - 비교 대상 변수가 같을 경우 값 리턴
  ******************************************************************************/

 function decode()

 {

         var varRtnValue = null;

 

        var arrArgument = decode.arguments;

         var varValue = arrArgument[0];

         var bIsDefault = false;

         var nCount = 0;

 

        if((arrArgument.length % 2) == 0) {

                 nCount = arrArgument.length - 1;

                 bIsDefault = true;

         } else {

                 nCount = arrArgument.length;

                 bIsDefault = false;

         }

 

        for(var i = 1; i < nCount; i+=2) {

                 if(varValue == arrArgument[i]) {

                         varRtnValue = arrArgument[i+1];

                         i = nCount;

                 }

         }

 

        if(varRtnValue == null && bIsDefault) {

                 varRtnValue = arrArgument[arrArgument.length-1];

         }

 

        return varRtnValue;

 }

☞  

 

☞  

 
 
 
 

  

'Nexacro-Function > ETC' 카테고리의 다른 글

Nexacro.Array - 값 존재 위치(index)얻기  (0) 2017.02.09
Nexacro.Etc - Graphic  (0) 2017.01.28
Nexacro.Etc - 파일관리  (0) 2017.01.28
Nexacro.Etc - 확장 비교함수  (0) 2017.01.28
Posted by 농부지기

[ Nexacro.Form -  POP_UP창 ]

 


/*******************************************************************************
 ★ 설명
     Modal Dialog실행 함수
 ★ parameter
    _NewChildFrame()참조
 ★ return
    - 성공 = variant ( Dialog창에서 close()에 의해 Return된 값 )
    - 실패 = ""
 ******************************************************************************/

function Dialog(sID, sURL, sArg, nLeft, nTop, nWidth, nHeight, sStyle, sProp)

{

 var rtn=null;

 var newChild;

 var MyFrame = this.getOwnerFrame();

 

 newChild = _NewChildFrame(sID, sURL, sArg, nLeft, nTop, nWidth, nHeight, sStyle, sProp);

 rtn = newChild.showModal(sID, MyFrame, sArg);

 this.removeChild(newChild.name);

 newChild.destroy();

 newChild = null;

 

 if( fn_IsNull(rtn) ) rtn = "";

 

 return rtn;

}

 

/*******************************************************************************
 ★ 설명
     Modaless Dialog실행 함수
 ★ parameter
    _NewChildFrame()참조
 ★ return
    - 성공 = true ( 정상작동여부 )
    - 실패 = false
 ******************************************************************************/

function Open(sID, sURL, sArg, nLeft, nTop, nWidth, nHeight, sStyle, sProp)

{

 var rtn;

 var newChild;

 var MyFrame = this.getOwnerFrame();

 

 newChild = _NewChildFrame(sID, sURL, sArg, nLeft, nTop, nWidth, nHeight, sStyle, sProp);

 

 return newChild.showModeless(sID, MyFrame, sArg);

}

 

/*******************************************************************************
 ★ 설명
     sObjName이 Popup창(showModaless()에 의해 뜬창)인지 확인한다.
     단, showModal()에 의해 뜬 창은 해당되지 않는다.
 ★ parameter
    1. sObjName : Popup창 여부를 확인할 Object Name
 ★ return
    - sObjName이 Popup창인 경우 = true
    - sObjName이 Popup창이 아닌 경우 = false
 ★ 주의사항
    단, showModal()에 의해 뜬 창은 해당되지 않는다.
 ******************************************************************************/

function IsObjPopup(sPopupName)

{

 if( fn_IsNull(sPopupName) ) return false;

 

 if( fn_IsNull(application.popupframes(sPopupName)) )

  return false;

 else

  return true;

}

 


/*******************************************************************************
 ★ 설명
    Dialog(), Open()실행용 공통함수.
    ※ 단, 내부에서 사용하는 함수임     
 ★ parameter
    1. sID     : Dialog ID ( 예 : "id1" )         
    2. sURL    : Form URL ( 예 : "Base::a.xfdl" )
    3. Arg    : Dialog 로 전달될 Argument  
                 ( 예1 : {a:'b',c:'d'}  ==> 꼭, {}로 싸야 되고 위의 예 처럼 해야 된다. )
                 ( 예2 : var arr = new Array();
      arr["a"] = "b";
      arr["c"] = "d";  ==> 이래 한 후에 arr넘김 )
 
    4. nLeft   : Dialog창의 Left Position ( 옵션 : Default = 현재화면 중앙 ) ( 예 : -1 또는 100 )
                 (단, 음수또는 null이면 현재화면 중앙에 위치)
    5. nTop    : Dialog창의 Top Position ( 옵션 : Default = 현재화면 중앙 ) ( 예 : -1 또는 100 )
                 (단, 음수또는 null이면 현재화면 중앙에 위치)
    6. nWidth  : Dialog창의 Width ( 옵션 : Default = Popup화면의 width ) ( 예 : -1 또는 100 )
                 (단, 음수또는 null이면 Popup화면의 width)
    7. nHeight : Dialog창의 Height ( 옵션 : Default = Popup화면의 height ) ( 예 : -1 또는 100 )
    (단, 음수또는 null이면 Popup화면의 width)
    8. sStyle  : Dialog Open 기본 유형 (옵션 : Default = "" ) ( 예 : "title=true,status=true" )
                 (단, 간단히 지정하도록 처리했으므로 ChildFrame의 Property명과 동일하지는 않다.)
        - title  : Title Bar표시여부 ( Default = true ) ( true = Title Bar 표시 )
        - status : Status Bar표시여부 ( Default = true ) ( true = Status Bar 표시 )
        - close  : Close Button활성화 여부 ( Default = true ) ( true = Close Button활성화 )
        - min    : min Button활성화 여부 ( Default = true )  ( true = Min Button 활성화 )
        - max    : min Button활성화 여부 ( Default = true )  ( true = Max Button 활성화 )
    9. sProp   : Child Frame의 모든 Property를 Property명=Property값, Property명=Property값,... 형태로 설정한다.
                 (옵션 : Default = "") ( 예 : "titletext='a', style.border='1 solid blue', ... )
                 ( 단, sStyle에 동일한 처리가 있으면 sProp가 적용된다.
                   즉, sStyle="title=true", sProp="showtitlebar=false"라면 Title Bar는 표시되지 않는다.
 ★ return
    - 성공 = Child Frame Object
    - 실패 = null
 ★ 주의사항
    1. nLeft, nTop이 null이거나 음수이면 현재화면의 중앙에 위치함
    2. nWidth, nHeight이 하나라도 null이거나 음수이면 Popup화면의 width, height가 설정됨
       따라서, nWidth, nHeight를 설정하고 싶으면 두 값 모두 양수값을 확실히 설정해야 한다.
    3. 조금더, 자세하게 Popup화면을 제어하고 싶으면 ( 예를 들어, scrollbar, border등 )
       sProp에 지정하거나 Dialog창의 Frame을 얻어 직접제어할 것
    4. nLeft, nTop, nWidth, nHeight의 좌표계는 screen기준 좌표계임에 주의할것       
 ★ Bug
    1. sStyle에서 2009.12.10일 현재 min, max, status 잘안됨(???(모름 - Theme때문인가?))
    2. bAutoSize = true인 경우 Popup창의 position을 체크하면 값이 잘 안나옴(???(모름))
    3. ChildFrame.init()에서 좌표처리에 BUG있음(???(모름))
    4. ChildFrame.resizable=true 안먹네(???(모름))
 ******************************************************************************/

function _NewChildFrame( sID, sURL, Arg, nLeft, nTop, nWidth, nHeight, sStyle, sProp)

{

 var newChild = null;

 var MyFrame = this.getOwnerFrame();

 

 var bTitle = true;

 var bStatus = true;

 var bClose = true;

 var bMin = true;

 var bMax = true;

 var bAutoSize = true;

 var flag;

 var aProp = new Array();

 

 if( fn_IsNull(sID) || fn_IsNull(sURL) ) return null;

 

 newChild = new ChildFrame;

 

 if( fn_IsNull(nLeft) || nLeft < 0 )

  newChild.openalign.halign = "center";

 if( fn_IsNull(nTop) || nTop < 0 )

  newChild.openalign.valign = "center";

 if( fn_IsNull(nWidth) || nWidth < 0 ||

    fn_IsNull(nHeight) || nHeight < 0 )

 {

  nWidth = 0;

  nHeight = 0;

  bAutoSize = true;

 }

 else

  bAutoSize = false;

  

 if( fn_IsNull(sStyle) == false )

 {

  var i, arr, arr1;

  arr = sStyle.split(",");

  for( i = 0 ; i < arr.length ; i++ )

  {

   arr1 = arr[i].split("=");

   arr1[0] = RTrim(LTrim(arr1[0]));

   arr1[1] = RTrim(LTrim(arr1[1]));  

   if( arr1[1].toLowerCase() == "true" )  flag = true;

   else          flag = false;

   

   if( arr1[0].toLowerCase() == "title" )   bTitle = flag;

   if( arr1[0].toLowerCase() == "status" )  bStatus = flag;

   if( arr1[0].toLowerCase() == "close" )   bClose = flag;   

   if( arr1[0].toLowerCase() == "min" )   bMin = flag;   

   if( arr1[0].toLowerCase() == "max" )   bMax = flag;      

  }

 }

 

 if( fn_IsNull(sProp) == false )

 {

  var i;

  aProp = sProp.split(",");

  for( i = 0 ; i < aProp.length ; i++ )

  {

   aProp[i] = aProp[i].split("=");

   aProp[i][0] = RTrim(LTrim(aProp[i][0]));

   aProp[i][1] = RTrim(LTrim(aProp[i][1]));

  }

 }

 

 newChild.formurl = sURL;

 

 ////// sStyle내용 적용( 이부분은 init()호출전에 사용해야 함 )

 newChild.showtitlebar = bTitle;

 newChild.showstatusbar = bStatus;   

 newChild.autosize = bAutoSize;

 

 newChild.init(sID, nLeft, nTop, nLeft + nWidth, nTop + nHeight);

 

 ////// sStyle내용 적용( 이부분은 init()호출후에 사용해야 함 )

 newChild.titlebar.minbutton.enable = bMin;  

 newChild.titlebar.maxbutton.enable = bMax;  

 newChild.titlebar.closebutton.enable = bClose;

 

 MyFrame.addChild(sID, newChild); // 이거 꼭 해야 함

 ////// sProp내용 적용

 for( i = 0 ; i < aProp.length ; i++ )

 {

  SetProp( "this.getOwnerFrame()."+sID, aProp[i][0], aProp[i][1] );

 }

 MyFrame.removeChild(sID);   // 이거 꼭 해야 함

 

 return newChild;

}

☞  

 

☞  

 
 
 
 

  

'Nexacro-Function > Form.PouUp' 카테고리의 다른 글

Nexacro.Form - POP_UP창  (0) 2017.01.28
Nexacro.Form - showModeless  (0) 2017.01.28
Posted by 농부지기

[ Nexacro.Form -  showModeless  ]

 

* 특징 : showModeless 팝업창의 특징은 팝업창을 종료하지 않고도 Main창을 제어할 수 있다.
         이런 특징으로 Main창에서 다시 팝업창을 호출 할 수 있게 된다.
         이때 다시 팝업창을 Open하면 오류(내용은 아래 존재)가 발생하게 된다.
         
         이런 이유로 기존 팝업창을 close하고 다시 띄워야 된다.
         하지만 close하지 않고도 팝업창이 이미 띄워져 있는 지 검사하여 해당 팝업창을
         제어 할 수도 있다.

* 존재 하는 팝업창을 다시 띄우면 나는 오류
  [(US231022)는 이미 실행중입니다. 같은 ID로 동시에 여러 개의 창을 띄울수 없습니다. ]

☞ 예문1) 기존 팝업창을 찾아서 argument를 넘기고, function을 제어 하는 방법
 

/*++
@desc    Grid를 double click시
*/

function fn_ApprovalPouUp(obj:Grid, e:GridClickEventInfo)
{
    
if (e.row < 0) return;
    
    
var oParam = new Object();
    
var sSO_NO = ds_SoList.getColumn(e.row, "SO_NO");
    oParam = {pSO_NO:sSO_NO};

    if (application.popupframes["US231022"]){
        application.popupframes["
US231022"].form.pSO_NO=sSO_NO;
        application.popupframes["
US231022"].form.fn_Onload();
    }
else{
        cfn_openDialogCenter("
US231022", "HSUS::US231022.xfdl", 800 , 632, "modeless", oParam);
    }
}

☞ 예문2) 기존 팝업창을 종료하고, 신규ID를 부여하여 팝업창을 OPEN
          단점, 팝업창을 사용자가 적당한 곳에 이동했을 경우  다시 띄우므로 항상 중앙에 위치하게 된다.

 

/*++
@desc    Grid를 double click시 팝업창 호출
*/

var pIdx=0;
function fn_ApprovalPouUp(obj:Grid, e:GridClickEventInfo)
{
    
if (e.row < 0) return;    

    var oParam  = new Object();
    oParam = {pSO_NO:ds_SoList.getColumn(e.row, "
SO_NO")};    

    //기 존재 하면 삭제
    
var MDIFrame = application;
    
var i = MDIFrame.all.length;

    while ( i > 0)
    {
        i--;
        
var objChildFrame = MDIFrame.all[i];
        
if( objChildFrame.name == "US231022_" + pIdx ){
            objChildFrame.form.close();
            break;
        }
    }
    pIdx ++;
    
    
//신규로 다시 호출
    cfn_openDialogCenter("
US231022_" + pIdx, "HSUS::US231022.xfdl", 800 , 632, "modeless", oParam);

}


 

 
 
   
 

/*******************************************************************************
 * 기능 : 파라메터가 있는 다이얼로그 창을 타입별로 띄운다
 * 인자 : 화면아이디, URL, 가로, 세로, 타입, 파라메터
 * 리턴 : 팝업창에서 넘겨 받은 결과값
******************************************************************************
/  
function cfn_openDialogCenter(strid, url, width, height, type, arg, resize)
{
    
var i, nRow, objChildFrame;
        
    
var arrFramelist = this.getOwnerFrame().all;
    
for(i=0; i<arrFramelist.length; i++){
        
if(arrFramelist[i].name == strid) {
            
return false;
        }
    } 

    objChildFrame = new ChildFrame();   

    //다이얼로그 뜨는 위치 계산
    
var nMoniterIndex = system.getMonitorIndex(system.cursorx, system.cursory); //다중 모니터일 경우 사용중인 모니터 인덱스를 구함.
    
var strScreenRes  = system.getScreenResolution(nMoniterIndex);
    
var nCenterX      = new Number(strScreenRes.split(" ")[0]);
    
var nCenterY      = new Number(strScreenRes.split(" ")[1]);
    

    // 모니터의 중앙이 아닌 포털의 중앙에 뜨게 변경 BEGIN

    
var nAppWidth   = application.mainframe.position.right  - application.mainframe.position.left;
    
var nAppHeight  = application.mainframe.position.bottom - application.mainframe.position.top;
    
var nAppCenterX = application.mainframe.position.right  - (nAppWidth / 2);
    
var nAppCenterY = application.mainframe.position.bottom - (nAppHeight / 2);
    posX = Math.round(nAppCenterX - (width / 2));
    posY = Math.round(nAppCenterY - (height / 2));
    
// 모니터의 중앙이 아닌 포털의 중앙에 뜨게 변경 END    

    objChildFrame.init(strid, posX, posY, width, height, url);
    
if (resize==null) objChildFrame.resizable = true;
    else objChildFrame.resizable =resize;
    objChildFrame.showtitlebar =
true;
    objChildFrame.layered      =
true;
    
if(type != "notice"){
        objChildFrame.style.background = "
white";
        objChildFrame.style.bordertype = "
round 7 7";
    }

    var result = "";    

    // Show Object  
    
if(type == "modeless"){
        objChildFrame.showModeless(
this.getOwnerFrame(), arg);
    }
    
else if(type == "modal" || type == "notice"){
        result = objChildFrame.showModal(
this.getOwnerFrame(), arg);
    }
    
else {
        result = objChildFrame.showModal(
this.getOwnerFrame(), arg);
    }

    return result;
}

'Nexacro-Function > Form.PouUp' 카테고리의 다른 글

Nexacro.Form - POP_UP창  (0) 2017.01.28
Nexacro.Form - showModeless  (0) 2017.01.28
Posted by 농부지기

[ Nexacro.Grid -  treeView2 ]

 

 

 

/******************************************************************************
  * Function명 : gf_checkBytesGrid()
  * 설명       : Grid의 byte수를 체크하고 초과되는 내용을 자동으로 잘라낸다.
                 ontextchange 이벤트에서 호출.
  * Params     : field - 체크할 object
                 autoCutYn - 자동으로 잘라낼지 여부(파라메터 넘기지 않으면 기본값 'Y'로 처리)
  * Return     : boolean - true 또는 false
  ******************************************************************************/

 function gf_checkBytesGrid(obj:Grid, e:GridEditTextChangeEventInfo) {

     var str = e.posttext;

     var maxByte = obj.getCellProperty("body", e.cell, "editlimit");

     

    if ( gf_isNull(str) ) return true;

     if ( gf_isNull(maxByte) || toNumber(maxByte) < 0 ) return true;

     

    var editType = obj.getCellProperty("body", e.cell, "edittype");

     if ( !gf_isNull(editType) && (editType == "mask" || editType == "masknumber") ) return true;

     

    var cutIdx = gf_cutIndexByBytes(str, maxByte);

     

    if (cutIdx > 0)

     {

                 obj.setEditText(str.substring(0, cutIdx));

                 return false;

     }

     

    return true;

 }

 

☞  

 

☞  

 
 
 
 

  

'Nexacro-Function > Grid' 카테고리의 다른 글

Nexacro.Grid - cell을 area로 선택 시 cell의 sum,avg구하기  (0) 2018.01.04
Nexacro.Grid - treeView2  (0) 2017.01.28
Nexacro.Grid - treeView  (0) 2017.01.28
Nexacro.Grid - excel exort  (0) 2017.01.28
Nexacro.Grid - copy & paste  (0) 2017.01.28
Nexacro.Grid - grid Header Merge  (0) 2017.01.28
Posted by 농부지기

[ Nexacro.Grid -  treeView ]

 

 


/*********************************************************************************************
 ★ 설명
     Grid로 Treeview처리 시 nCurRow의 sLevelCol에 해당하는 현재 Level보다
     0 ~ (nCurRow-1) Record중 더 상위의 Level(bFlag에 따라)에  해당하는 Record를
     모두 구해 Array로 Return한다.
 ★ parameter
    1. obj:Dataset : Dataset Object ( 예 : Dataset00 )
    2. sLevelCol   : Level값이 들어있는 Column명 ( 예 : "level" )    
    3. nCurrow     : 현재 Record ( 예 : 10 )
    4. bInclude    : 현재 level을 포함할 지 여부 ( 예 : true ) ( Default = true )
                     - true = 상위의 Level을 찾을 때 nCurRow Level과 동일한 Level도 포함
                     - false = 상위의 Level을 찾을 때 nCurRow Level과 동일한 Level은 포함 안함
 ★ return
    - 성공 = Array ( record번호만 들어있음 )
    - 실패 = 빈 Array
*********************************************************************************************/

function TreeGetParentList(obj:Dataset, sLevelCol, nCurRow, bInclude)

{

 var i, nLevel, nChkLevel;

 var aRet = new Array(), aNo=0;

 var bFlag;

 

 if( fn_IsNull(obj) || fn_IsNull(sLevelCol) || fn_IsNull(nCurRow) )

  return aRet;

  

 if( fn_IsNull(bInclude) == true ) bInclude = true;

 

 if( bInclude == true )

  nChkLevel = parseInt(obj.getColumn(nCurRow, sLevelCol));

 else

  nChkLevel = parseInt(obj.getColumn(nCurRow, sLevelCol))-1;

 for( i = (nCurRow-1) ; i >= 0 ; i-- )

 {

  nLevel = parseInt(obj.getColumn(i, sLevelCol));

  if( nLevel <= nChkLevel )

  {

   aRet[aNo] = i;

   aNo++;

   nChkLevel = nLevel;

  }

 }

 return aRet.sort();

}

 

/*********************************************************************************************
 ★ 설명
     Grid로 Treeview처리 시 0 ~ (nCurRow-1)의 Record중
     nOffsetLevel에 해당하는 시작 부모 Record를 찾는다.
 ★ parameter
    1. obj:Dataset : Dataset Object ( 예 : Dataset00 )
    2. sLevelCol   : Level값이 들어있는 Column명 ( 예 : "level" )    
    3. nCurrow     : 현재 Record ( 예 : 10 )
    4. nOffsetLevel    : 양수(0, 음수는 안됨)에 해당하는 검색할 Offset Level ( 옵션 : Default = 1 )
                         ( 예 : 1 = 나보다 1 Level 위의 Parent의 시작 Record를 찾으라는 뜻 )
 ★ return
    - 성공 = Start Record
    - 실패 = -1
 ★ 주의사항
    nOffsetLevel은 0 또는 음수를 주면 안된다.
*********************************************************************************************/

function TreeGetParentStart(obj:Dataset, sLevelCol, nCurRow, nOffsetLevel)

{

 var i, nLevel, nChkLevel, nStartRow = -1;

 

 if( fn_IsNull(obj) || fn_IsNull(sLevelCol) || fn_IsNull(nCurRow) )

  return -1;

 

 if( fn_IsNull(nOffsetLevel) == true ) nOffsetLevel = 1;

 if( nOffsetLevel <= 0 )  

  return -1;

 

 nChkLevel = parseInt(obj.getColumn(nCurRow, sLevelCol)) - nOffsetLevel;

 for( i = (nCurRow-1) ; i >= 0 ; i-- )

 {

  nLevel = parseInt(obj.getColumn(i, sLevelCol));

  if( nLevel == nChkLevel )

  {

   nStartRow = i;

   break;

  }

  if( nLevel < nChkLevel )

   nChkLevel = nLevel;

 }

 

 return nStartRow;

}

 

********************************************************************************************
 ★ 설명
     Grid로 Treeview처리 시 nCurRow+1 ~ 끝 Record중
     nCurRow의 Level이하의 Child Level이 끝나는 Record를 찾는다.
     즉, 자식이 끝나는 Record를 찾는다.
 ★ parameter
    1. obj:Dataset : Dataset Object ( 예 : Dataset00 )
    2. sLevelCol   : Level값이 들어있는 Column명 ( 예 : "level" )    
    3. nCurrow     : 현재 Record ( 예 : 10 )
 ★ return
    - 성공 = End Record
    - 실패 = -1
*********************************************************************************************/

function TreeGetChildEnd(obj:Dataset, sLevelCol, nCurRow)

{

 var i, nLevel, nChkLevel, nEndRow = (obj.rowcount - 1);

 

 if( fn_IsNull(obj) || fn_IsNull(sLevelCol) || fn_IsNull(nCurRow) )

  return -1;

 

 nChkLevel = parseInt(obj.getColumn(nCurRow, sLevelCol));

 

 for( i = (nCurRow+1) ; i < obj.rowcount ; i++ )

 {

  nLevel = parseInt(obj.getColumn(i, sLevelCol));

  if( nLevel <= nChkLevel )

  {

   nEndRow = i-1;

   break;

  }

 }

 

 return nEndRow;

}

/******************************************************************************
  * Function명 : gf_getTreeChildCountAll
  * 설명       : Tree의 특정 Node의 모든 Child Node 갯수를 가져온다.
  * Params     : gridObj      - Grid
  *              dsRow        - Dataset row index
  * Return     : integer
  ******************************************************************************/

 function gf_getTreeChildCountAll(gridObj:Grid, dsRow)

 {

         var dsObj = eval(gridObj.binddataset);

         var childCount = gridObj.getTreeChildCount(dsRow);

         

        if(childCount > 0)

         {

                 var startIdx = gridObj.getTreeChildRow(dsRow, 0);

                 var endIdx = gridObj.getTreeChildRow(dsRow, -1);

                 

                childCount = endIdx - startIdx + 1;

         }

         

        return childCount;

 }

 

/******************************************************************************
  * Function명 : gf_getTreeChildRowAll
  * 설명       : Tree의 특정 Node의 Child Node 의 row index를 배열에 담아 반환한다.
  * Params     : gridObj      - Grid
  *              dsRow        - Dataset row index
  *              childRows    - Array
  * Return     : Array(Child Node 의 Dataset row index를 담고 있는 배열)
  ******************************************************************************/

 function gf_getTreeChildRowAll(gridObj:Grid, dsRow, childRows)

 {

         var dsObj = eval(gridObj.binddataset);

         var childCount = gridObj.getTreeChildCount(dsRow);

         

        if(childCount > 0)

         {

                 var startIdx = gridObj.getTreeChildRow(dsRow, 0);

                 var endIdx = gridObj.getTreeChildRow(dsRow, -1);

                 

                for(var idx = startIdx; idx <= endIdx ; idx++)

                 {

                         childRows[childRows.length] = idx;

                 }

         }

         

        return childRows;

 }

 

/******************************************************************************
  * Function명 : gf_getTreeChildCheckAll
  * 설명       : Tree의 특정 Node의 모든 Child Node를 Parent Node 체크 상태에 따라 check/uncheck 수행
  * Params     : gridObj       - Grid
  *              dsRow         - Dataset row index
  *              checkColumnNm - Tree Column속성중 treecheck에 bind된 column 명
  * Return     : Array
  ******************************************************************************/

 function gf_getTreeChildCheckAll(gridObj:Grid, dsRow, checkColumnNm)

 {

         var dsObj = eval(gridObj.binddataset);

         var checkYn = dsObj.getColumn(dsRow, checkColumnNm);

         var childRows = gf_getTreeChildRowAll(gridObj, dsRow, new Array());

         

        for (var idx=0; idx < childRows.length; idx++)

         {

                 dsObj.setColumn(childRows[idx], checkColumnNm, checkYn);

         }

         

        return childRows;

 }

☞  

 

☞  

 
 
 
 

  

'Nexacro-Function > Grid' 카테고리의 다른 글

Nexacro.Grid - cell을 area로 선택 시 cell의 sum,avg구하기  (0) 2018.01.04
Nexacro.Grid - treeView2  (0) 2017.01.28
Nexacro.Grid - treeView  (0) 2017.01.28
Nexacro.Grid - excel exort  (0) 2017.01.28
Nexacro.Grid - copy & paste  (0) 2017.01.28
Nexacro.Grid - grid Header Merge  (0) 2017.01.28
Posted by 농부지기

[ Nexacro.Grid -  excel exort ]

 


참고 : 아래 객체중 [gExportObj]는 UX Studio에서 GlobalVariables에서 Objects 에 [ExportObject]로 추가한 객체명임

//-------------------------------------------------------------------------------------------------
// 기능 : 엑셀 다운로드 버튼 클릭 시
//-------------------------------------------------------------------------------------------------

function fn_Exceldn(obj:Button,  e:ClickEventInfo)
{
    //1. header 용 grid, dataset 생성
    var sSearchName;
    sSearchName = "[계획구분 : 1:경영계획] "
                + "[브랜드 : "   + divSearch.cboBrandCd.text + "] "
                + "[계획년도 : " + divSearch.divPlanOrdr.fn_GetPlanYy()   + ":年] "
                + "[계획차수 : " + divSearch.divPlanOrdr.fn_GetPlanOrdr() + ":차] ";

    gfn_bpCreateExcelGridDs("grdTitle0" , "dsTitle0" , 1, new Array("타이틀명",  '', sSearchName));
    gfn_bpCreateExcelGridDs("grdTitle1" , "dsTitle1" , 8, new Array("sub타이틀명1") );
    gfn_bpCreateExcelGridDs("grdTitle21", "dsTitle21", 8, new Array("sub타이틀명2"));
    gfn_bpCreateExcelGridDs("grdTitle22", "dsTitle22", 8, new Array("sub타이틀명3"));
    gfn_bpCreateExcelGridDs("grdTitle3" , "dsTitle3" , 6, new Array("sub타이틀명4") );

    //2. 생성할 grid 목록 지정
    //형식 : gridName:line 출력여부:헤더라인수:현grid exort 후 빈 라인
    var arrGridList = new Array("grdTitle0:noLine:0:1"
                              , "grdTitle1:line:0:0" , "divList.grdMainOne:line:2:1"
                              , "grdTitle21:line:0:0", "divList.grdMainTwo1:line:2:1"
                              , "grdTitle22:line:0:0", "divList.grdMainTwo2:line:2:1"
                              , "grdTitle3:line:0:0" , "divList.grdMainThree:line:1:1");

    //3. excel export
    gfn_bpMultiExcelDown(arrGridList, this.titletext, this.titletext);
}
 

/******************************************************************************************
 * 기      능 : 엑셀Export용 Grid와 Dataset 생성하기
 * 인      자 : psObjGrid   - grid name
                psObjDs      - dataset name
                pnCellCnt    - grid생성 시 cell 갯수 (해당 cell만큼 merge가 처리 된다.)
                paData       - dataset에 추가할 자료 (array 형)
 * 반      환 :
 *****************************************************************************************/

function gfn_bpCreateExcelGridDs(psObjGrid, psObjDs, pnCellCnt, paData){
    var objDs = new Dataset;
    
    //1. Dataset 생성
    if(!isValidObject(psObjDs) ){
        objDs = new Dataset;
        objDs.name = psObjDs;
        this.addChild(psObjDs, objDs);
        objDs.addColumn("text0", "STRING", 256);
    }else{
        objDs = eval(psObjDs);
    }
    
    //2. Grid 생성
    if(!isValidObject(psObjGrid) ){
        var poGrid = new Grid(psObjGrid, 0, 0, 1, 1);
        this.addChild(psObjGrid, poGrid);
        poGrid.show();

        poGrid.binddataset = psObjDs ;
        poGrid.insertContentsRow("body", 0, true);
        for(var i=0; i<pnCellCnt; i++) {poGrid.appendContentsCol(true)};
        
        poGrid.mergeContentsCell('body',0,0,0,pnCellCnt,0,false);
        
        poGrid.setCellProperty( "body", 0, "text" , "bind:text0");
        poGrid.setCellProperty( "body", 0, "align", "left");
    }
    
    //3. 자료 추가
    var nInstRow;
    if (objDs.rowcount == 0){
        for(var idx=0; idx<paData.length; idx++){
                nInstRow = objDs.addRow();
                objDs.setColumn(nInstRow, "text0", paData[idx]);
        }
    }
}
 


/******************************************************************************************
 * 정의 : 여러개 Grid를 Excel Export
 * 인자 : objGrid - 그리드
 *****************************************************************************************/

function gfn_bpMultiExcelDown(paObjList, psSheetName, psExcelName){
    var fileName = psExcelName + ".xlsx";
    var nStartRow = 1;
    
    gExportObj.clear();
    gExportObj.exporttype     = ExportTypes.EXCEL;
    gExportObj.activepagename = psSheetName;    
    gExportObj.exportfilename = fileName;
    gExportObj.exportopenmode = "overwrite";
    
    for(var nIdx=0; nIdx<paObjList.length; nIdx++){
    
        var arrProperty = paObjList[nIdx].split(':');
        var objGrid     = eval(arrProperty[0]);
        
        if (arrProperty[1].toUpperCase() == "LINE"){
            gExportObj.addExportItem(ExportItemTypes.GRID, objGrid , psSheetName+"!A" + nStartRow, "allband");
        }else{
            gExportObj.addExportItem(ExportItemTypes.GRID, objGrid , psSheetName+"!A" + nStartRow, "nohead,nosumm","allrecord","nosuppress","onlyvalue","none","color","both","cellline");
        }
         
        nStartRow = nStartRow + objGrid.rowcount + toNumber(arrProperty[2]) + toNumber(arrProperty[3]);
    }

    gExportObj.exportmessageprocess = "%d 항목을 출력중입니다. %d/%d";
    gExportObj.export();
}


/*********************************************************************************************
 ★ 설명
     Grid Excel Export하는 함수
 ★ parameter
    1. obj:Grid : Grid Object ( 예 : Grid00 )
    2. ExpObj:ExportObject : Export Object (옵션 : Default는 생성해서 처리됨)
    3. sSheetName : Sheet 명 ( 옵션 : Default="Sheet1" )
 ★ return
    - 성공 = true
    - 실패 = false
*********************************************************************************************/

function GridExportExcel(obj:Grid, ExpObj:ExportObject, sSheetName)

{

 if( fn_IsNull(obj) ) return false;

 

 if( fn_IsNull(ExpObj) == true )

  var ExpObj = new ExportObject;

 if( fn_IsNull(sSheetName) == true )

  sSheetName = "Sheet1";

  

 ExpObj.exportfilename = Grid.name+".xls";  // 꼭 줘야됨

 ExpObj.exporttype     = ExportTypes.EXCEL; // 현재 Excel만 가능합니다.

 ExpObj.activepagename = sSheetName;

 

 ExpObj.addExportItem(ExportItemTypes.GRID, obj, sSheetName+"!A1");

 ExpObj.export(); // Excel로 Export실행

 

 return true;

}

/*********************************************************************************************
  ★ 설명
      Grid Excel Export할 때 그리드에 보이는데로 열기. 단. "SEQ, No, 상태, 삭제"  컬럼은 제거
  ★ parameter
    1. obj:Grid : Grid Object ( 예 : Grid00 )
     2. sSheetName : Sheet 명 ( 옵션 : Default="Sheet1" )
     3. sActivemode : ExportObject의 exportactivemode를 지정 ( Default='active' )
     3. sFilePath : Export할 파일 풀 경로.
  ★ return
    - 성공 = true
    - 실패 = false
 *********************************************************************************************/

 function gf_gridViewExportExcel(obj:Grid, sSheetName, sActivemode, sFilePath)

{

         

        if( gf_isNull(obj)      )       return false;

 

        //1. Grid 복제

         var objGrid ;  

        if(this.components["excelGrid"]!=null)

         {

                 objGrid = this.components["excelGrid"];  

        }

         else

         {

                 objGrid = new Grid();

                 objGrid.init("excelGrid", 10, 10, 800, 100);

                 this.addChild("excelGrid", objGrid);

                 objGrid.binddataset = obj.binddataset;

                 objGrid.tooltiptext = obj.tooltiptext;

                 objGrid.visible = false;

                 objGrid.show();

         }

 

        var strFormatContents = obj.getCurFormatString();

         strFormatContents = "<Formats>" + strFormatContents + "</Formats>";

         objGrid.formats  = strFormatContents;

 

        //2. Excel에서 제외할 Column 제거..................  

        objGrid.deleteContentsCol("left",0);    // 틀고정 있는 컬럼을 먼저 제거한다.

         

        objGrid.enableevent = false;

         

        //그리드 컬럼 삭제하기 excelExportDelCell userdata 확인

         try{

                 var delCell = obj.excelExportDelCell;

                 if(!gf_isNull(delCell)){

                         var arr = delCell.toString().split(",").reverse();

                         for(i in arr){

                                 objGrid.deleteContentsCol(arr[i].trim());

                         }

                 }

         }catch(e){

                 trace("js_utill::excelExportDelCell 입력값 확인하세요");

         }

         

        var cellCount = objGrid.getCellCount("Head");

         for(i=cellCount-1; i>-1; i--)

         {

                 var cellText = objGrid.getCellProperty("Head", i, "text" );

                 

                if(cellText=="삭제"

                        || cellText=="상태"

                        || cellText == "No"  

                        || cellText == "SEQ")

                 {

                         objGrid.deleteContentsCol(i);

                 }

         }

         

        //colSize = 0 컬럼 제외

         cellCount = objGrid.getFormatColCount();

         for(i=cellCount-1; i>-1; i--)

         {

                 if(objGrid.getFormatColSize(i) == 0){

                         objGrid.deleteContentsCol(i);

                 }

         }

         

        objGrid.enableevent = true;

         

        ////trace(eval(objGrid.binddataset).saveXML());

 

        //3. ExpObj:ExportObject : Export Object (옵션 : Default는 생성해서 처리됨)

         var ExpObj = new ExportObject;

         

        if( gf_isNull(sSheetName) == true )

                 sSheetName = "Sheet1";

 

        ExpObj.exportfilename   = obj.name+".xls";      // 꼭 줘야됨

         ExpObj.exporttype       = ExportTypes.EXCEL;    // 현재 Excel만 가능합니다.     

        ExpObj.activepagename   = sSheetName;

 

        var chk = ExpObj.addExportItem(ExportItemTypes.GRID, objGrid, sSheetName+"!A1");        

        ExpObj.export();        // Excel로 Export실행

 

        //trace("0:성공, -1:실패 = "+chk);

        return true;

 }

 

/*********************************************************************************************
  ★ 설명
      Grid Excel Export할 때 옵션에 따라 데이터셋내용 전체를 열거나,
      "SEQ, No, 상태, 삭제"  컬럼은 제거하는 옵션.
      그리고 바로열기, 파일로 저장, 취소 3가지 옵션.
      
     현재 :그리드의 tooltiptext 속성명으로 파일명 생성되도록 하였음.
       
 ★ parameter
    1. obj:Grid : Grid Object ( 예 : Grid00 )
 ★ return
    - 성공 = true
    - 실패 = false
 *********************************************************************************************/

 function gf_gridExportExcel(obj:Grid,  e:ClickEventInfo)

 {

         var arg_url = "common_pop::pop_Confirm.xfdl";

         var returnObj = gf_showModal(arg_url, "", false);

         

        var excelInfo = returnObj[0];

         var rtn =  excelInfo["open_type"];                      //열기 종류

         var excelType = excelInfo["excel_type"];        //엑셀 종류

         

//      var rtn = 0;

 //      var excelType = "0001";

 

        if(excelType == '0002') //전체

         {

                 if(obj.getFormatString().indexOf("\"import\"") == -1){

                         gf_message("저장용 그리드 포맷이 존재하지 않습니다.\n관리자에게 문의해 주십시오.", "오류");

                         return;

                 }

         }

         

        var objVFile ;

 

        if(rtn==0)

         {       

                if(excelType == '0001') //보이는데로

                 {

                         gf_gridViewExportExcel(obj, "Sheet1", "active") ;

                 }

                 else    //전체다운

                 {

                         gf_gridAllExportExcel(obj, "Sheet1", "active") ;

                 }

         }

         else if(rtn==1)

         {       

        

                var FileDialog_excel = new FileDialog;

                 FileDialog_excel.defaultextention = true;

 

                var sFilter = "Excel 통합문서 (*.xlsx)|*.xlsx|Excel 97 - 2003 통합문서 (*.xls)|*.xls";

                 FileDialog_excel.filter = sFilter;

 

                // Excel저장을 위해 파일다이얼로그창를 띄운다.

                 objVFile = FileDialog_excel.open("파일저장", FileDialog.SAVE, "%MYDOCUMENT%", obj.tooltiptext );

 

                if(excelType == '0001') //보이는데로

                 {

                         //obj.formatid = "default";

                 }

                 else    //전체다운

                 {

                         //import용 그리드 포멧을 만들어놔야 한다.

                         obj.formatid = "import";                

                }

 

                if(excelType == '0001') //보이는데로

                 {

                 

                        //1. Grid 복제(복제 안하면 그리드 내용이 삭제됨.)

                         var objGrid ;  

                        if(this.components["excelGrid"]!=null)

                         {

                                 objGrid = this.components["excelGrid"];  

                        }

                         else

                         {

                                 objGrid = new Grid();  

                                objGrid.init("excelGrid", 10, 10, 800, 100);

                                 this.addChild("excelGrid", objGrid);

                                objGrid.binddataset = obj.binddataset;

                                 objGrid.tooltiptext = obj.tooltiptext;

                                 objGrid.visible = false;

                                 objGrid.show();

                        }

          

                        var strFormatContents = obj.getCurFormatString();

                         objGrid.formats  = obj.formats;

                         

                

                        //Excel에서 제외할 Column 제거..................  

                        objGrid.deleteContentsCol("left",0);    // 틀고정 있는 컬럼제거

                         

                        var cellCount = objGrid.getCellCount("Head");

                 

                        objGrid.enableevent = false;

 

                        for(i=cellCount-1; i>-1; i--)

                         {

                                 var cellText = objGrid.getCellProperty("Head", i, "text" );

 

                                try{

                                         if(cellText=="삭제" || cellText=="상태" || cellText.toLowerCase()=="seq" || cellText.toLowerCase()=="no")

                                         {

                                                 objGrid.deleteContentsCol(i);

                                         }

                                 }catch(e){}

                         }

                         

                        //colSize = 0 컬럼 제외

                         cellCount = objGrid.getFormatColCount();

                         for(i=cellCount-1; i>-1; i--)

                         {

                                 if(objGrid.getFormatColSize(i) == 0){

                                         objGrid.deleteContentsCol(i);

                                 }

                         }

                        

                        objGrid.enableevent = true;

                 }

 

                if( objVFile == undefined ) return;

                 

                var ExpObj = new ExportObject;

                 var sSheetName = "Sheet1";

 

                ExpObj.exportfilename   = objVFile.fullpath;    // 꼭 줘야됨

                 ExpObj.exporttype       = ExportTypes.EXCEL;    // 현재 Excel만 가능합니다.     

                ExpObj.activepagename   = sSheetName;

 

                ExpObj.exportopenmode   = "alwaysnew";

                 ExpObj.exportactivemode = "noactive";

                 ExpObj.exportsavemode   = "save";

 

                if(excelType == '0001') //보이는데로

                 {

                         var chk = ExpObj.addExportItem(ExportItemTypes.GRID, objGrid, sSheetName+"!A1");        

                }

                 else

                 {

                         var chk = ExpObj.addExportItem(ExportItemTypes.GRID, obj, sSheetName+"!A1");    

                }

                 

                ExpObj.export();        // Excel로 Export실행

 

                //trace("0:성공, -1:실패 = "+chk);

 

                obj.formatid = "default";

 

        }

         else if(rtn==2)

         {

                 // 취소

         }

 }

 

 
 

 

'Nexacro-Function > Grid' 카테고리의 다른 글

Nexacro.Grid - treeView2  (0) 2017.01.28
Nexacro.Grid - treeView  (0) 2017.01.28
Nexacro.Grid - excel exort  (0) 2017.01.28
Nexacro.Grid - copy & paste  (0) 2017.01.28
Nexacro.Grid - grid Header Merge  (0) 2017.01.28
Nexacro.Grid - Conents Editor  (0) 2017.01.28
Posted by 농부지기