Add Dynamic Column in Grid, MiPlatform
/*=======================================================================================
* 프로그램 설명 : 공통코드관리
* 작성일자 : 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, "FLAG"))' 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));
}
}