카테고리 없음

Add Dynamic Column in Grid, MiPlatform

Soul-Learner 2011. 3. 24. 17:10

/*=======================================================================================
 *  프로그램 설명 : 공통코드관리
 *  작성일자 : 2011/3/3
 *  버전 : 1.0
 *  변경 이력
    일자            작성자          비고
    ------------------------------------------------------------
    2011/ 3/ 3      이석록          최초 작성
==========================================================================================*/
#include "js::commons.js"; // 공통 스크립트


//=========================================================================================
// [ PART 1 ]
// Form에서 사용될 전역변수를 선언
// FORM에서 사용되는 전역변수는 대문자로 작성하며, FV_XXX 의 형태를 갖도록 한다.
//=========================================================================================
var FV_CurrentDate;


//=========================================================================================
// [ PART 2 ]
// Form Loading / Unloading 시 작업 정의
//=========================================================================================

/********************************************************************************
* 기      능   : form onLoadCompleted
********************************************************************************/
function form_OnLoadCompleted(obj) {
 gfn_LoadForm(this,"","",true);

 this.fn_CrossTab(1);
 fn_search();
}

/********************************************************************************
* 기      능   : form UnloadCompleted
********************************************************************************/
function form_OnUnloadCompleted(obj) {
 return gfn_isFormUnload(ds_list);
}


//=========================================================================================
// [ PART 3 ]
// Main Process Event 정의
//(추가,조회,저장,삭제,취소,엑셀,인쇄)
//=========================================================================================

/*******************************************************************************
* 기      능   : 추가
* 설      명   :
********************************************************************************/
function fn_add() {

}


/*******************************************************************************
* 기      능   : 조회
* 설      명   :
********************************************************************************/
function fn_search() {

 /*------------------------------------------------------
 서비스 호출전 초기화 처리 (필수 호출)
 -------------------------------------------------------*/
 fsp_clear();

 /*------------------------------------------------------
 fsp_addSearch : 조회용 Action 정보 생성
 *  param1 조회할 SQL ID
 *  param2 조회한 결과는 Input Dataset으로 사용할지 여부
 *  param3 Dataset 컬럼 생성시 정렬할지 여부   
 -------------------------------------------------------*/
 fsp_addSearch("quotate:Q0040_M01_S01");

 //그리드 Sort Mark제거
 gfn_clearGridSortMark(grd_list,0);

 /*------------------------------------------------------
 fsp_callService : 서비스 호출 함수
 *   param1  : 서버에서 호출할 Action의 별명 (DEFAULT : DefaultAction)
 *   param2  : Action 안에서 호출해야 하는 메소드 명 (DEFAULT : execute)
 *   param3  : 서버로 전송할 DataSet  서버=로컬
 *   param4  : 서버로부터 전송 받을  DataSet 로컬=서버
 *   param5  : 서버로 전송할 기타 Argument 정보 예: key=value key2=value2
 *   param6  : 서버에서 처리가 완료된 후 Callback 받을 Function 명
 *   param7  : 처리중입니다. 메시지창 보여줄지 여부
 *   param8  : 동기처리 여부
 -------------------------------------------------------*/
 fsp_callService(
  "",
  "",
  "ds_cond=ds_cond",
  "ds_pjt_sche_info=ds_pjt_sche_info",
  "",
  "fn_AfterSearch"
 );
 
}

/*******************************************************************************
* 기      능   : 저장
* 설      명   :
********************************************************************************/
function fn_save() {

 // 변경여부 체크
 if(ds_list.GetUpdate() == false){
  // 변경된 내용이 없습니다.
  gfn_ShowAlert("CW00005");
  return;
 }
 
 //------------------------------------------------------
 // gfn_isNullDataset : dataset의 특정 column이 null인지 check
 //  param1  : dataset object
 //  param2  : 체크대상 column - array
 //    LENGTH가 FIX인 경우 ":"로 구분하여 LENGTH를 넘긴다
 //  param3  : null인경우 해당 row로 위치 이동할것인지 여부
 //------------------------------------------------------
 var arrColumn = array();
 //arrColumn[0] = "MAJOR_KEY";  // 4자리
 //arrColumn[1] = "MINOR_KEY";  // 0자리이상
 //arrColumn[2] = "CODE_CONTENT"; // 0자리이상

 if(gfn_IsGridNull(grd_list,arrColumn,null,"FLAG") == true){
  return;
 }

 //------------------------------------------------------
 // gfn_isDupKeyDataset : dataset의 특정 column이 중복데이타가 있는지 check
 //  param1  : dataset object
 //  param2  : 체크대상 column - array
 //    LENGTH가 FIX인 경우 ":"로 구분하여 LENGTH를 넘긴다
 //------------------------------------------------------
 var arrColumn = array();
 //arrColumn[0] = "MAJOR_KEY";
 //arrColumn[1] = "MINOR_KEY";
 
 if(gfn_IsDupKeyDataset(ds_list,arrColumn) == true){
  // 중복된 데이타가 존재합니다.
  gfn_ShowAlert("CW00023");
  return false;
 }
 
 fsp_clear();
 /*------------------------------------------------------
 gfn_addSaveActionInfo : 저장용 Action 정보 생성
 *  param1 Insert sqlMap
 *  param2 update sqlMap
 *  param3 delete sqlMap
 *  param4 miplatform rowtype을 이용하지 않는 경우 정보 column
 *   신규 - I , 수정 - U , 삭제 - D
 *  param5 PK 조회용 SQL ID
 *  param6 keySqlName이 존재할 경우만 사용
 *  param7 keySqlName이 존재할 경우만 사용
 *   반복적인 처리 Sql의 경우 다음 정보 key 증가 값
 *  param8 처리가 완료된 후 결과로써 반환할 Sql Id
 *  param9 Key 에 0 채워야 할 경우 0 의 갯수
 -------------------------------------------------------*/
 var insertSql = "info:I0200_M01_I01";
 var updateSql = "info:I0200_M01_U01";
 var deleteSql = "info:I0200_M01_D01";
 var saveFlagColumn = "FLAG";
 var keySqlName = "";
 var keyIncrement = "";
 var callbackSql = "";
 var keyZeroLen = "";
 
 fsp_addSave(
  insertSql,
  updateSql ,
  deleteSql,
  saveFlagColumn,
  keySqlName,
  keyIncrement,
  callbackSql,
  keyZeroLen);

 fsp_addSearch("info:I0200_M01_S01");

 // 서버 호출
 fsp_callService(
  ""
  ,""
  ,"ds_list=ds_list:U" // inDs
  ,"ds_list=ds_list" // outDs
  ,"" // args
  ,"fn_afterSave"
  ,true
  ,true
  ,true
 );

}

/*******************************************************************************
* 기      능   : 삭제
* 설      명   :
********************************************************************************/
function fn_delete() {

 if ( ds_list.rowCount() < 1 ) {
  // 삭제할 정보 없음.  
  return;
 }
 // Grid 삭제 처리
 gfn_DeleteGridRow( grd_list, ds_list.row, "FLAG" );

}

/*******************************************************************************
* 기      능   : 취소
* 설      명   :
********************************************************************************/
function fn_cancel() {

}

/*******************************************************************************
* 기      능   : 엑셀
* 설      명   :
********************************************************************************/
function fn_excel() {

}

/*******************************************************************************
* 기      능   : 인쇄
* 설      명   :
********************************************************************************/
function fn_print() {

}


//=========================================================================================
// [ PART 4]
// Grid 공통버튼 정의 (행추가, 행삭제)
//=========================================================================================
/********************************************************************************
* 기      능   :  Row 추가
* grd_list : grid id, -1:add row
********************************************************************************/
function fn_addGridRow(){
 var nRow = gfn_AddGridRow(grd_list, -1, "FLAG");
 // 사용여부를 자동 체크 처리 한다.
 ds_list.setColumn(nRow, "USE_YN", "1");
}
/********************************************************************************
* 기      능   : Row 삭제
********************************************************************************/
function fn_deleteGridRow(){
 gfn_DeleteGridRow(grd_list, ds_list.row, "FLAG" );
}
/********************************************************************************
* 기      능   : Row 삽입
* ds_list.row : 선택된 row의 바로 위에 row가 추가됨.
********************************************************************************/
function fn_insertGridRow(){
 var nRow = gfn_AddGridRow(grd_list, ds_list.row, "FLAG");
 // 사용여부를 자동 체크 처리 한다.
 ds_list.setColumn(nRow, "USE_YN", "1");
}


//=========================================================================================
// [ PART 5]
// Callback 함수 정의 : callback 함수명은 메인 함수의 fn_xxxx() 에서 xxxx 부분은 fn_afterXXXX()
// 형태가 되도록 작성
//=========================================================================================

/*******************************************************************************
* 기      능   : search callback
********************************************************************************/
function fn_afterSearch(ErrorCode, ErrorMsg) {

  // 메시지 처리
 gfn_ShowSearchMsg(grd_list);
 fn_append_ds_col();
}

/*******************************************************************************
* 기      능   : save callback
********************************************************************************/
function fn_afterSave(ErrorCode, ErrorMsg) {

 if ( ErrorCode < 0 ) {
  gfn_ShowMsg("CE00001");
 } else {
  gfn_ShowMsg("CI00003");
 }
}


//=========================================================================================
// [ PART 6]
// Detail Process Event 정의 ( User Define function )
// 사용자 정의 함수는 fn_xxxx() 형태로 작성
//=========================================================================================
/********************************************************************************
* 기      능   : 사용자 정의 함수 
********************************************************************************/
function fn_userfunction() {}

function fn_get_mpims_cd(){
 fsp_clear();

 /*------------------------------------------------------
 fsp_addSearch : 조회용 Action 정보 생성
 *  param1 조회할 SQL ID
 *  param2 조회한 결과는 Input Dataset으로 사용할지 여부
 *  param3 Dataset 컬럼 생성시 정렬할지 여부   
 -------------------------------------------------------*/
 fsp_addSearch("info:I0200_M01_S02_GET_MPIMS_CD");

 //그리드 Sort Mark제거
 gfn_clearGridSortMark(grd_list,0);

 /*------------------------------------------------------
 fsp_callService : 서비스 호출 함수
 *   param1  : 서버에서 호출할 Action의 별명 (DEFAULT : DefaultAction)
 *   param2  : Action 안에서 호출해야 하는 메소드 명 (DEFAULT : execute)
 *   param3  : 서버로 전송할 DataSet  서버=로컬
 *   param4  : 서버로부터 전송 받을  DataSet 로컬=서버
 *   param5  : 서버로 전송할 기타 Argument 정보 예: key=value key2=value2
 *   param6  : 서버에서 처리가 완료된 후 Callback 받을 Function 명
 *   param7  : 처리중입니다. 메시지창 보여줄지 여부
 *   param8  : 동기처리 여부
 -------------------------------------------------------*/
 fsp_callService(
  "",
  "",
  "",
  "ds_mpims_cd=ds_mpims_cd",
  "",
  "fn_AfterSearch",
  true,
  true,
  true
 );
}

/********************************************************************************
* 기      능   : Grid, Shape 리사이즈
********************************************************************************/
function fn_resize(nCx, nCy)
{
 grd_list.Width = nCx;
 grd_list.Height = nCy - grd_list.Top;
 shpHead.Width = nCx;

 resizescroll();
}

var loaded_count = 0;
function fn_onDS_Loaded(obj) {
 loaded_count++;
 if(loaded_count>=2) {
  grd_list.Redraw("Body");
  loaded_count = 0;
 }
}
//=========================================================================================
// [ PART 7 ]
// component Event 정의 : 각 Component 별 이벤트
//=========================================================================================

/********************************************************************************
* 기      능   : 폼리사이즈
********************************************************************************/
function form_OnSize(obj,nCx,nCy,nState)
{
 fn_resize(nCx, nCy);
}

/********************************************************************************
* 기      능   : 그리드 헤더 클릭시 정렬 처리
********************************************************************************/
function grd_list_OnHeadClick(obj,nCell,nX,nY,nPivotIndex){
 if ( nCell == 0 ) {
  // 그리드 표시할 컬럼 선택
  //gfn_SelectGridCol(obj);
 } else {
  // 그리드 정렬 처리
  gfn_SortGrid(obj,nCell);
 }
}

/********************************************************************************
* 기      능   : 데이터셋 값 변경 시 - Flag 처리
********************************************************************************/
function ds_list_OnColumnChanged(obj,nRow,strColumnID,varOldValue,varNewValue,nPivotIndex){
 if(strColumnID != "FLAG"){
  gfn_ChangeFlag( obj, strColumnID, nRow, "FLAG" );
 }
}


function fn_On_mpims_cd_Loaded(){
  ds_mpims_cd.InsertRow(0);
  ds_mpims_cd.SetColumn(0, "MPIMS_RSN_CD", "");
}

/*********************************
* 그리드 컬럼 동적 추가
**********************************/
function fn_CrossTab(iCount)
{
 //var iAddColRow=toNumber(iCount)*2;
 var iAddColRow = iCount;
 
 var sCol     ="";
 var sHeader1 ="";
 var sHeader2 ="";
 var sBody    ="";
 var sSum     ="";
 
 var iConstCol=5;
 var iCol     =0;
 
 var sHearTitle="";
 var iDataCol=0;
 
 for(var i=0; i < iAddColRow; i++)
 {
  iConstCol = grd_list.GetColCount(); // 컬럼을 추가하기 전의 현재 그리드 상의 컬럼 수
  iCol = iConstCol+i; // 각 컬럼의 col 속성 값은 중복되지 않아야 하므로 기존 컬럼 수를 사용한다.
 
  /* 한개의 컬럼을 추가한다 */
     sHearTitle = "동적주가컬럼 "+(i+1);
    
  sCol     += " <col fix='false' width='80'/> ";
 
  /* 헤더 타이틀을 설정한다
  *  col 속성은 기존 컬럼과 중복되지 않도록 설정한다.
  */
  sHeader1 += "<cell bkcolor='user13' bkimagealign='stretch' bkimageid='m_im_gr_head_01' col='"+iCol+"' color='user14' display='text' text='"+sHearTitle+"'/>";
 
  /* 그리드의 바디에 한개의 컬럼을 추가한다.
  *  주의 : col 속성은 기존 컬럼의 값과 중복되지 않도록 주의한다.
  * 주의 : colid 속성을 사용해야만 Dataset과 연동이 가능하다.
  */
  sBody    += " <cell bkcolor='user11' bkcolor2='user12' col='"+iCol+"' colid='COL_1' display='text' edit='normal'/> ";
 }

 //alert(sSum);

 fn_AddColumn(sCol, sHeader1, sHeader2, sBody, sSum);
}

//---------------------------------------------------------------------------------------
// 동적으로 생성할 컬럼이 아닌 컬럼들은 에디터 하단의 Design Source 탭에서 복사해와서 붙여넣고
// 추가될 컬럼을 문자열로 추가한 수에 그리드의 contents 속성 값으로 할당하면 동적으로 컬럼을 생성할 수 있다.
// 정적 컬럼을 구성하는 디자인 소스는 그리드와 데이터셋을 연결한 후에 Design Source 에서 복사해서 아래에 붙여넣기 하면 된다.
//---------------------------------------------------------------------------------------
function fn_AddColumn(sCol, sHeader1, sHeader2, sBody, sSum)
{
 var sContents       = " "+
  " <contents>                                                                                                                                                                    " +
  "  <format id='Default'>                                                                                                                                                     " +         
  "   <columns>                                                                                                                                                             " +     
  "    <col fix='left' width='22'/>                                                                                                                                      " +     
  "    <col fix='left' width='41'/>                                                                                                                                      " +       
  "    <col width='100'/>                                                                                                                                                " +    
  "    <col width='100'/>                                                                                                                                                " + 
  "    <col width='100'/>                                                                                                                                                " +      
  "    <col width='100'/>                                                                                                                                                " +       
  "    <col width='100'/>                                                                                                                                                " +       
  "    <col width='100'/>                                                                                                                                                " +sCol+   
  "   </columns>                                                                                                                                                            " +        
  "   <head>                                                                                                                                                                " +         
  "    <cell bkcolor='user13' bkimagealign='stretch' bkimageid='icon_grid_sel' col='0' color='user14' display='text'/>                                                   " +
  "    <cell bkcolor='user13' bkimagealign='stretch' bkimageid='m_im_gr_head_01' col='1' color='user14' display='text' text='순번'/>                                     " +
  "    <cell bkcolor='user13' bkimagealign='stretch' bkimageid='m_im_gr_head_01' col='2' color='user14' display='text' text='Task'/>                                     " +
  "    <cell bkcolor='user13' bkimagealign='stretch' bkimageid='m_im_gr_head_01' col='3' color='user14' display='text' text='기간'/>                                     " +
  "    <cell bkcolor='user13' bkimagealign='stretch' bkimageid='m_im_gr_head_01' col='4' color='user14' display='text' text='주관부서'/>                                 " +
  "    <cell bkcolor='user13' bkimagealign='stretch' bkimageid='m_im_gr_head_01' col='5' color='user14' display='text' text='시작일자'/>                                 " +
  "    <cell bkcolor='user13' bkimagealign='stretch' bkimageid='m_im_gr_head_01' col='6' color='user14' display='text' text='완료예정일'/>                               " +
  "    <cell bkcolor='user13' bkimagealign='stretch' bkimageid='m_im_gr_head_01' col='7' color='user14' display='text' text='선행작업'/>                                 " +sHeader1+
  "   </head>                                                                                                                                                               " +      
  "   <body>                                                                                                                                                                " +         
  "    <cell align='center' bkcolor='user11' bkcolor2='user12' bkimageid='expr:gfn_getFlagBkImageID(getColumn(currow,&#32;&quot;FLAG&quot;))' col='0' display='text'/>   " +
  "    <cell align='center' bkcolor='user11' bkcolor2='user12' col='1' colid='PMS_SEQ' display='number'/>                                                                " +
  "    <cell bkcolor='user11' bkcolor2='user12' col='2' colid='TSK_SEQ' display='text' edit='normal'/>                                                                                   " +
  "    <cell bkcolor='user11' bkcolor2='user12' col='3' colid='TAKE_DAYS' display='text' edit='normal'/>                                                                                  " +
  "    <cell bkcolor='user11' bkcolor2='user12' col='4' colid='LDNG_DEPT_CD' display='text' edit='normal'/>                                                                                  " +
  "    <cell bkcolor='user11' bkcolor2='user12' col='5' colid='BGN_DT' display='text' edit='number'/>                                                                                  " +
  "    <cell bkcolor='user11' bkcolor2='user12' col='6' colid='CMPLT_EXPDT' display='text' edit='normal'/>                                                                                " +
  "    <cell bkcolor='user11' bkcolor2='user12' col='7' colid='PRECDN_WRK' display='text' edit='normal'/>                                                                                 " +sBody+        
  "   </body>                                                                                                                                                               " +        
  "  </format>                                                                                                                                                                 " +       
  " </contents>                                                                                                                                                                   ";


 grd_list.Contents=sContents;
 grd_list.Editable = true; // 동적으로 생성된 컬럼이 편집가능하도록 설정한다
}



function frmCrossTab_OnLoadCompleted(obj)
{
 fn_CrossTab(5);
}


/* 서버에 데이터를 요청했을 때 뒤이어 실행되는 콜백함수에서 아래의 함수를 호출해 주면
* 서버에서 전달된 데이터 외에 다른 데이터를 추가하거나 변경할 수 있다.
* 그러므로 뒤이어 화면에 출력되는 내용는 이 함수에서 변경된 내용을 반영하게 된다.*/

function fn_append_ds_col(){
 ds_pjt_sche_info.AddColumn("COL_1", "STRING", 255);

 var rowCount = ds_pjt_sche_info.GetRowCount();
 var colCount = ds_pjt_sche_info.GetColCount();
 for(var i=0;i<rowCount;i++) {
  ds_pjt_sche_info.SetColumn(i,"COL_1", "Value "+(i+1));
 }
}