/********************************************************************************** * modular_ibsheet7.js * * Udapsoft Modular 프레임워크와 IBSheet7간 연계를 위한 부분이 포함되어 있는 스크립트 파일 * 시스템별로 통신방식 확장,전처리,후처리등 공통 기능 추가를 위해 이 파일을 기반으로 확장할수 있다. * * @author 김선엽(sunyoupk@udapsoft.co.kr) **********************************************************************************/ Modular.view.IBSheet7 = function () { }; Modular.view.IBSheet7.Constants = { //Request Param Key : Client Type CLIENT_TYPE : "modular.web.clientType", //Request Param Key : IBSheet Command Type (search or save) COMMAND_TYPE : "modular.web.ibsheet7.command", //Request Param Key : IBSheet Id SHEET_ID : "modular.web.ibsheet7.id", //Request Param Key : IBSheet 레코드 컬럼 순서 RECORD_SET_COLUMNS : "modular.web.ibsheet7.columns", //Request Param Key : IBSheet 확장 프로퍼티 EXTEND_PROPS : "modular.web.ibsheet7.extend", //Request Param Key : 현재 페이지 정보 CURRENT_PAGE : "modular.condition.currentPage", //Request Param Key : 페이지당 건수 사이즈 VOLUME_PER_PAGE : "modular.condition.volumePerPage", //MultiSheet Param 구분자 MULTI_SHEET_PARAM_SEP : "^" }; /** * IBSheet7 데이터를 조회하는 함수 * * @param sheet sheet 객체 * @param url 로직을 처리하기위한 서버 URL * @param form 파라미터들을 가지고 있는 form 객체 * @param onePageRow 페이지당 데이터 건수 * @param extendProperties 확장 파라미터 문자열(ex. key1=value1,key2=value2...) */ Modular.view.IBSheet7.doSearch = function (sheet, url, form, onePageRow, extendProperties) { var params = {}; //Modular 연계용 필수 파라미터 설정 params[Modular.view.IBSheet7.Constants.CLIENT_TYPE] = "IBSHEET7"; params[Modular.view.IBSheet7.Constants.COMMAND_TYPE] = "search"; params[Modular.view.IBSheet7.Constants.SHEET_ID] = sheet.id; //Modular 연계용 컬럼 바인드 변수 설정 var columnOrder = Modular.view.IBSheet7.getColumnStr(sheet); params[Modular.view.IBSheet7.Constants.RECORD_SET_COLUMNS] = columnOrder; params[Modular.view.IBSheet7.Constants.CURRENT_PAGE] = 1; params[Modular.view.IBSheet7.Constants.VOLUME_PER_PAGE] = onePageRow; //Modular 연계용 확장 파라미터 설정 if(extendProperties) { params[Modular.view.IBSheet7.Constants.EXTEND_PROPS] = extendProperties; } if(form) { Modular.view.Form.bindSearchParameters(form); jQuery(form).find(":input").each(function () { var target = jQuery(this); if (target.attr("name")) { params[target.attr("name")] = target.val(); } }); } params = jQuery.param(params); sheet.Redraw = false; sheet.DoSearch(url, params); // var sXml = sheet.GetSearchData(url, params); // alert(sXml); // sheet.LoadSearchData(sXml); sheet.Redraw = true; }; /** * IBSheet7 데이터를 조회하는 함수 * * @param sheet sheet 객체 * @param url 로직을 처리하기위한 서버 URL * @param form 파라미터들을 가지고 있는 form 객체 * @param onePageRow 페이지당 데이터 건수 * @param extendProperties 확장 파라미터 문Modular자열(ex. key1=value1,key2=value2...) */ Modular.view.IBSheet7.doSearchPaging = function (sheet, url, form, onePageRow, extendProperties) { var isAppend = false; //스크롤 페이징의 경우 데이터가 계속 append된다. var params = {}; //Modular 연계용 필수 파라미터 설정 params[Modular.view.IBSheet7.Constants.CLIENT_TYPE] = "IBSHEET7"; params[Modular.view.IBSheet7.Constants.COMMAND_TYPE] = "search"; params[Modular.view.IBSheet7.Constants.SHEET_ID] = sheet.id; //Modular 연계용 컬럼 바인드 변수 설정 var columnOrder = Modular.view.IBSheet7.getColumnStr(sheet); params[Modular.view.IBSheet7.Constants.RECORD_SET_COLUMNS] = columnOrder; params[Modular.view.IBSheet7.Constants.VOLUME_PER_PAGE] = onePageRow; //Modular 연계용 확장 파라미터 설정 if(extendProperties) { params[Modular.view.IBSheet7.Constants.EXTEND_PROPS] = extendProperties; } if(form) { Modular.view.Form.bindSearchParameters(form); jQuery(form).find(":input").each(function () { var target = jQuery(this); if (target.attr("name")) { params[target.attr("name")] = target.val(); } }); } params = jQuery.param(params); var info = {"PageParam":Modular.view.IBSheet7.Constants.CURRENT_PAGE,"Param":params}; sheet.Redraw = false; sheet.DoSearchPaging(url, info); sheet.Redraw = true; }; /** * 복수의 IBSheet7 데이터를 일괄 조회하는 함수 * * @param sheetArray sheet 객체 배열 * @param url 로직을 처리하기위한 서버 URL * @param form 파라미터들을 가지고 있는 form 객체 * @param onePageRow 페이지당 데이터 건수 * @param extendProperties 확장 파라미터 문자열(ex. key1=value1,key2=value2...) */ Modular.view.IBSheet7.doMultiSearch = function (sheetArray, url, form, onePageRow, extendProperties) { //TODO sheetArray가 Array타입인지 체크 필요 var params = {}; //Modular 연계용 필수 파라미터 설정 params[Modular.view.IBSheet7.Constants.CLIENT_TYPE] = "IBSHEET7"; params[Modular.view.IBSheet7.Constants.COMMAND_TYPE] = "multiSearch"; var sheetIds = ""; jQuery.each(sheetArray, function(n, sheet) { sheetIds = sheetIds + sheet.id + Modular.view.IBSheet7.Constants.MULTI_SHEET_PARAM_SEP; params[sheet.id + "." + Modular.view.IBSheet7.Constants.RECORD_SET_COLUMNS] = Modular.view.IBSheet7.getColumnStr(sheet); }); params[Modular.view.IBSheet7.Constants.SHEET_ID] = sheetIds; //Modular 연계용 페이징 변수 설정 params[Modular.view.IBSheet7.Constants.VOLUME_PER_PAGE] = onePageRow; //Modular 연계용 확장 파라미터 설정 if(extendProperties) { params[Modular.view.IBSheet7.Constants.EXTEND_PROPS] = extendProperties; } if(form) { Modular.view.Form.bindSearchParameters(form); jQuery(form).find(":input").each(function () { var target = jQuery(this); if (target.attr("name")) { params[target.attr("name")] = target.val(); } }); } params = jQuery.param(params); var sXml = sheetArray[0].GetSearchData(url, params); var arrXml = Modular.view.IBSheet7.parseSearchXml(sXml); jQuery.each(sheetArray, function(n, sheet) { sheet.LoadSearchData(arrXml[n]); }); }; /** * IBSheet 데이터를 저장하는 함수 * * @param sheet sheet 객체 * @param url 로직을 처리하기위한 서버 URL * @param form 파라미터들을 가지고 있는 form 객체 * @param ajax 직접 호출 여부(기본값 false) * @return (Boolean) 저장 성공 여부 */ Modular.view.IBSheet7.doSave = function (sheet, url, form, sString, ajaxCall) { var sheetArray = new Array(sheet); return Modular.view.IBSheet7.doMultiSave(sheetArray, url, form, sString, ajaxCall); }; /** * 복수의 IBSheet 데이터를 일괄 저장하는 함수 * * @param sheetArray sheet 객체 배열 * @param url 로직을 처리하기위한 서버 URL * @param form 파라미터들을 가지고 있는 form 객체 * @param ajax 직접 호출 여부(기본값 false) */ Modular.view.IBSheet7.doMultiSave = function (sheetArray, url, form, sString, ajaxCall) { if (ajaxCall == null || ajaxCall == 'undefined') { ajaxCall = false; } if(sString == null || sString == 'undefined'){ sString = false; } var params = {}; //Modular 연계용 필수 파라미터 설정 params[Modular.view.IBSheet7.Constants.CLIENT_TYPE] = "IBSHEET7"; params[Modular.view.IBSheet7.Constants.COMMAND_TYPE] = "multiSave"; var sheetIds = ""; jQuery.each(sheetArray, function(n, sheet) { sheetIds = sheetIds + sheet.id + Modular.view.IBSheet7.Constants.MULTI_SHEET_PARAM_SEP; params[ sheet.id + "." + Modular.view.IBSheet7.Constants.RECORD_SET_COLUMNS] = Modular.view.IBSheet7.getColumnStr(sheet); }); params[Modular.view.IBSheet7.Constants.SHEET_ID] = sheetIds; //일반 form 파라미터 가 있는 경우 파라미터 추가 if(form) { Modular.view.Form.bindSearchParameters(form); jQuery(form).find(":input").each(function () { var target = jQuery(this); //input type이 radio 인 경우 체크된 값만 넘어가도록 수정 //2013-08-22 김선엽 추가 //radio는 동일 이름으로 작성되기 때문에 한번만 체크하는 기능으로 개선 필요함 if (target.attr("type") == "radio") { if (target.attr("name")) { params[target.attr("name")] = jQuery('input[name='+target.attr("name")+']:radio:checked').val(); } } else { if (target.attr("name")) { params[target.attr("name")] = target.val(); } } }); } //Sheet 저장 파라미터 설정 var sheetParamString = ""; var sheetData = ""; jQuery.each(sheetArray, function(n, sheet) { if (sString) { sheetData = sheet.GetSaveString(true); } else { sheetData = sheet.GetSaveString(); } var tempStr = sheetData.split("&"); jQuery.each(tempStr, function(n, paramValue) { sheetParamString += sheet.id + "." + paramValue + "&"; }); }); // keyField 체크 오류 시 return // 2012-10-15 JSH 추가 if (sheetData == "KeyFieldError") return false; var paramString = jQuery.param(params) + "&" + sheetParamString; if(ajaxCall) { //IBSheet API를 통하지 않고 직접 Ajax 방식으로 요청하는 경우 Modular.view.IBSheet7.doAjaxSave(url, paramString); } else { var sXml = sheetArray[0].GetSaveData(url, paramString); //alert(sheetArray[0].id+" , "+sheetArray[0].GetSaveString()); var arrXml = Modular.view.IBSheet7.parseSaveXml(sXml); if(jQuery.isArray(arrXml)) { jQuery.each(sheetArray, function(n, sheet) { sheet.LoadSaveData(arrXml[n]); }); return true; } else { return false; } } }; /** * 해당 Sheet에 지정된 컬럼 이름을 ,로 구분되는 단일 문자열로 반환 * ex) sStatus,userId,userName */ Modular.view.IBSheet7.getColumnStr = function(sheet) { var columnStr = ""; for(var i=0; i<=sheet.LastCol(); i++) { columnStr = columnStr + sheet.ColSaveName(i)+","; } if( columnStr.endsWith(",") ) { columnStr = columnStr.substring(0, columnStr.length -1); } return columnStr; }; /** * 멀티 조회의 경우 SHEET별로 XML를 분리해서 반환해줌 * @param sXml 조회 결과 XML * @return Array 조회 결과 XML Array */ Modular.view.IBSheet7.parseSearchXml = function(sXml) { var arrXml = new Array(); for(i=0; sXml.indexOf("") >= 0; i++ ) { var stIdx = sXml.indexOf(""); var endIdx = sXml.indexOf("")+8; arrXml[i] = sXml.substring(stIdx, endIdx); sXml = sXml.substring(endIdx); } return arrXml; }; /** * 멀티 저장의 경우 SHEET별로 XML를 분리해서 반환해줌 * @param sXml 저장 결과 XML * @return Array 저장 결과 XML Array */ Modular.view.IBSheet7.parseSaveXml = function(sXml) { var arrXml = new Array(); for(i=0; sXml.indexOf("") >= 0; i++ ) { var stIdx = sXml.indexOf(""); var endIdx = sXml.indexOf("")+8; arrXml[i] = sXml.substring(stIdx, endIdx); sXml = sXml.substring(endIdx); } return arrXml; }; /** * 저장시 IBSHEET API를 거치지 않고 직접 Ajax통신을 통해 * 서비스를 호출하고 json 형태로 응답을 받게됨. * (하위 구현으로 재구현 가능) * @param url 서비스 url * @return paramString 저장 파라미터 */ Modular.view.IBSheet7.doAjaxSave = function(url, paramString) { jQuery.ajax({ async: false, type: "POST", url: url, data: paramString, dataType: "json", success: function(data) { // alert message if (data.message != undefined) { alert(data.message); } } }); };