modular_ibsheet7.js 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373
  1. /**********************************************************************************
  2. * modular_ibsheet7.js
  3. *
  4. * Udapsoft Modular 프레임워크와 IBSheet7간 연계를 위한 부분이 포함되어 있는 스크립트 파일
  5. * 시스템별로 통신방식 확장,전처리,후처리등 공통 기능 추가를 위해 이 파일을 기반으로 확장할수 있다.
  6. *
  7. * @author 김선엽(sunyoupk@udapsoft.co.kr)
  8. **********************************************************************************/
  9. Modular.view.IBSheet7 = function () {
  10. };
  11. Modular.view.IBSheet7.Constants = {
  12. //Request Param Key : Client Type
  13. CLIENT_TYPE : "modular.web.clientType",
  14. //Request Param Key : IBSheet Command Type (search or save)
  15. COMMAND_TYPE : "modular.web.ibsheet7.command",
  16. //Request Param Key : IBSheet Id
  17. SHEET_ID : "modular.web.ibsheet7.id",
  18. //Request Param Key : IBSheet 레코드 컬럼 순서
  19. RECORD_SET_COLUMNS : "modular.web.ibsheet7.columns",
  20. //Request Param Key : IBSheet 확장 프로퍼티
  21. EXTEND_PROPS : "modular.web.ibsheet7.extend",
  22. //Request Param Key : 현재 페이지 정보
  23. CURRENT_PAGE : "modular.condition.currentPage",
  24. //Request Param Key : 페이지당 건수 사이즈
  25. VOLUME_PER_PAGE : "modular.condition.volumePerPage",
  26. //MultiSheet Param 구분자
  27. MULTI_SHEET_PARAM_SEP : "^"
  28. };
  29. /**
  30. * IBSheet7 데이터를 조회하는 함수
  31. *
  32. * @param sheet sheet 객체
  33. * @param url 로직을 처리하기위한 서버 URL
  34. * @param form 파라미터들을 가지고 있는 form 객체
  35. * @param onePageRow 페이지당 데이터 건수
  36. * @param extendProperties 확장 파라미터 문자열(ex. key1=value1,key2=value2...)
  37. */
  38. Modular.view.IBSheet7.doSearch = function (sheet, url, form, onePageRow, extendProperties) {
  39. var params = {};
  40. //Modular 연계용 필수 파라미터 설정
  41. params[Modular.view.IBSheet7.Constants.CLIENT_TYPE] = "IBSHEET7";
  42. params[Modular.view.IBSheet7.Constants.COMMAND_TYPE] = "search";
  43. params[Modular.view.IBSheet7.Constants.SHEET_ID] = sheet.id;
  44. //Modular 연계용 컬럼 바인드 변수 설정
  45. var columnOrder = Modular.view.IBSheet7.getColumnStr(sheet);
  46. params[Modular.view.IBSheet7.Constants.RECORD_SET_COLUMNS] = columnOrder;
  47. params[Modular.view.IBSheet7.Constants.CURRENT_PAGE] = 1;
  48. params[Modular.view.IBSheet7.Constants.VOLUME_PER_PAGE] = onePageRow;
  49. //Modular 연계용 확장 파라미터 설정
  50. if(extendProperties) {
  51. params[Modular.view.IBSheet7.Constants.EXTEND_PROPS] = extendProperties;
  52. }
  53. if(form) {
  54. Modular.view.Form.bindSearchParameters(form);
  55. jQuery(form).find(":input").each(function () {
  56. var target = jQuery(this);
  57. if (target.attr("name")) {
  58. params[target.attr("name")] = target.val();
  59. }
  60. });
  61. }
  62. params = jQuery.param(params);
  63. sheet.Redraw = false;
  64. sheet.DoSearch(url, params);
  65. // var sXml = sheet.GetSearchData(url, params);
  66. // alert(sXml);
  67. // sheet.LoadSearchData(sXml);
  68. sheet.Redraw = true;
  69. };
  70. /**
  71. * IBSheet7 데이터를 조회하는 함수
  72. *
  73. * @param sheet sheet 객체
  74. * @param url 로직을 처리하기위한 서버 URL
  75. * @param form 파라미터들을 가지고 있는 form 객체
  76. * @param onePageRow 페이지당 데이터 건수
  77. * @param extendProperties 확장 파라미터 문Modular자열(ex. key1=value1,key2=value2...)
  78. */
  79. Modular.view.IBSheet7.doSearchPaging = function (sheet, url, form, onePageRow, extendProperties) {
  80. var isAppend = false; //스크롤 페이징의 경우 데이터가 계속 append된다.
  81. var params = {};
  82. //Modular 연계용 필수 파라미터 설정
  83. params[Modular.view.IBSheet7.Constants.CLIENT_TYPE] = "IBSHEET7";
  84. params[Modular.view.IBSheet7.Constants.COMMAND_TYPE] = "search";
  85. params[Modular.view.IBSheet7.Constants.SHEET_ID] = sheet.id;
  86. //Modular 연계용 컬럼 바인드 변수 설정
  87. var columnOrder = Modular.view.IBSheet7.getColumnStr(sheet);
  88. params[Modular.view.IBSheet7.Constants.RECORD_SET_COLUMNS] = columnOrder;
  89. params[Modular.view.IBSheet7.Constants.VOLUME_PER_PAGE] = onePageRow;
  90. //Modular 연계용 확장 파라미터 설정
  91. if(extendProperties) {
  92. params[Modular.view.IBSheet7.Constants.EXTEND_PROPS] = extendProperties;
  93. }
  94. if(form) {
  95. Modular.view.Form.bindSearchParameters(form);
  96. jQuery(form).find(":input").each(function () {
  97. var target = jQuery(this);
  98. if (target.attr("name")) {
  99. params[target.attr("name")] = target.val();
  100. }
  101. });
  102. }
  103. params = jQuery.param(params);
  104. var info = {"PageParam":Modular.view.IBSheet7.Constants.CURRENT_PAGE,"Param":params};
  105. sheet.Redraw = false;
  106. sheet.DoSearchPaging(url, info);
  107. sheet.Redraw = true;
  108. };
  109. /**
  110. * 복수의 IBSheet7 데이터를 일괄 조회하는 함수
  111. *
  112. * @param sheetArray sheet 객체 배열
  113. * @param url 로직을 처리하기위한 서버 URL
  114. * @param form 파라미터들을 가지고 있는 form 객체
  115. * @param onePageRow 페이지당 데이터 건수
  116. * @param extendProperties 확장 파라미터 문자열(ex. key1=value1,key2=value2...)
  117. */
  118. Modular.view.IBSheet7.doMultiSearch = function (sheetArray, url, form, onePageRow, extendProperties) {
  119. //TODO sheetArray가 Array타입인지 체크 필요
  120. var params = {};
  121. //Modular 연계용 필수 파라미터 설정
  122. params[Modular.view.IBSheet7.Constants.CLIENT_TYPE] = "IBSHEET7";
  123. params[Modular.view.IBSheet7.Constants.COMMAND_TYPE] = "multiSearch";
  124. var sheetIds = "";
  125. jQuery.each(sheetArray, function(n, sheet) {
  126. sheetIds = sheetIds + sheet.id + Modular.view.IBSheet7.Constants.MULTI_SHEET_PARAM_SEP;
  127. params[sheet.id + "." + Modular.view.IBSheet7.Constants.RECORD_SET_COLUMNS] = Modular.view.IBSheet7.getColumnStr(sheet);
  128. });
  129. params[Modular.view.IBSheet7.Constants.SHEET_ID] = sheetIds;
  130. //Modular 연계용 페이징 변수 설정
  131. params[Modular.view.IBSheet7.Constants.VOLUME_PER_PAGE] = onePageRow;
  132. //Modular 연계용 확장 파라미터 설정
  133. if(extendProperties) {
  134. params[Modular.view.IBSheet7.Constants.EXTEND_PROPS] = extendProperties;
  135. }
  136. if(form) {
  137. Modular.view.Form.bindSearchParameters(form);
  138. jQuery(form).find(":input").each(function () {
  139. var target = jQuery(this);
  140. if (target.attr("name")) {
  141. params[target.attr("name")] = target.val();
  142. }
  143. });
  144. }
  145. params = jQuery.param(params);
  146. var sXml = sheetArray[0].GetSearchData(url, params);
  147. var arrXml = Modular.view.IBSheet7.parseSearchXml(sXml);
  148. jQuery.each(sheetArray, function(n, sheet) {
  149. sheet.LoadSearchData(arrXml[n]);
  150. });
  151. };
  152. /**
  153. * IBSheet 데이터를 저장하는 함수
  154. *
  155. * @param sheet sheet 객체
  156. * @param url 로직을 처리하기위한 서버 URL
  157. * @param form 파라미터들을 가지고 있는 form 객체
  158. * @param ajax 직접 호출 여부(기본값 false)
  159. * @return (Boolean) 저장 성공 여부
  160. */
  161. Modular.view.IBSheet7.doSave = function (sheet, url, form, sString, ajaxCall) {
  162. var sheetArray = new Array(sheet);
  163. return Modular.view.IBSheet7.doMultiSave(sheetArray, url, form, sString, ajaxCall);
  164. };
  165. /**
  166. * 복수의 IBSheet 데이터를 일괄 저장하는 함수
  167. *
  168. * @param sheetArray sheet 객체 배열
  169. * @param url 로직을 처리하기위한 서버 URL
  170. * @param form 파라미터들을 가지고 있는 form 객체
  171. * @param ajax 직접 호출 여부(기본값 false)
  172. */
  173. Modular.view.IBSheet7.doMultiSave = function (sheetArray, url, form, sString, ajaxCall) {
  174. if (ajaxCall == null || ajaxCall == 'undefined') {
  175. ajaxCall = false;
  176. }
  177. if(sString == null || sString == 'undefined'){
  178. sString = false;
  179. }
  180. var params = {};
  181. //Modular 연계용 필수 파라미터 설정
  182. params[Modular.view.IBSheet7.Constants.CLIENT_TYPE] = "IBSHEET7";
  183. params[Modular.view.IBSheet7.Constants.COMMAND_TYPE] = "multiSave";
  184. var sheetIds = "";
  185. jQuery.each(sheetArray, function(n, sheet) {
  186. sheetIds = sheetIds + sheet.id + Modular.view.IBSheet7.Constants.MULTI_SHEET_PARAM_SEP;
  187. params[ sheet.id + "." + Modular.view.IBSheet7.Constants.RECORD_SET_COLUMNS] = Modular.view.IBSheet7.getColumnStr(sheet);
  188. });
  189. params[Modular.view.IBSheet7.Constants.SHEET_ID] = sheetIds;
  190. //일반 form 파라미터 가 있는 경우 파라미터 추가
  191. if(form) {
  192. Modular.view.Form.bindSearchParameters(form);
  193. jQuery(form).find(":input").each(function () {
  194. var target = jQuery(this);
  195. //input type이 radio 인 경우 체크된 값만 넘어가도록 수정
  196. //2013-08-22 김선엽 추가
  197. //radio는 동일 이름으로 작성되기 때문에 한번만 체크하는 기능으로 개선 필요함
  198. if (target.attr("type") == "radio") {
  199. if (target.attr("name")) {
  200. params[target.attr("name")] = jQuery('input[name='+target.attr("name")+']:radio:checked').val();
  201. }
  202. } else {
  203. if (target.attr("name")) {
  204. params[target.attr("name")] = target.val();
  205. }
  206. }
  207. });
  208. }
  209. //Sheet 저장 파라미터 설정
  210. var sheetParamString = "";
  211. var sheetData = "";
  212. jQuery.each(sheetArray, function(n, sheet) {
  213. if (sString) {
  214. sheetData = sheet.GetSaveString(true);
  215. } else {
  216. sheetData = sheet.GetSaveString();
  217. }
  218. var tempStr = sheetData.split("&");
  219. jQuery.each(tempStr, function(n, paramValue) {
  220. sheetParamString += sheet.id + "." + paramValue + "&";
  221. });
  222. });
  223. // keyField 체크 오류 시 return
  224. // 2012-10-15 JSH 추가
  225. if (sheetData == "KeyFieldError") return false;
  226. var paramString = jQuery.param(params) + "&" + sheetParamString;
  227. if(ajaxCall) {
  228. //IBSheet API를 통하지 않고 직접 Ajax 방식으로 요청하는 경우
  229. Modular.view.IBSheet7.doAjaxSave(url, paramString);
  230. }
  231. else {
  232. var sXml = sheetArray[0].GetSaveData(url, paramString);
  233. //alert(sheetArray[0].id+" , "+sheetArray[0].GetSaveString());
  234. var arrXml = Modular.view.IBSheet7.parseSaveXml(sXml);
  235. if(jQuery.isArray(arrXml)) {
  236. jQuery.each(sheetArray, function(n, sheet) {
  237. sheet.LoadSaveData(arrXml[n]);
  238. });
  239. return true;
  240. }
  241. else {
  242. return false;
  243. }
  244. }
  245. };
  246. /**
  247. * 해당 Sheet에 지정된 컬럼 이름을 ,로 구분되는 단일 문자열로 반환
  248. * ex) sStatus,userId,userName
  249. */
  250. Modular.view.IBSheet7.getColumnStr = function(sheet) {
  251. var columnStr = "";
  252. for(var i=0; i<=sheet.LastCol(); i++) {
  253. columnStr = columnStr + sheet.ColSaveName(i)+",";
  254. }
  255. if( columnStr.endsWith(",") ) {
  256. columnStr = columnStr.substring(0, columnStr.length -1);
  257. }
  258. return columnStr;
  259. };
  260. /**
  261. * 멀티 조회의 경우 SHEET별로 XML를 분리해서 반환해줌
  262. * @param sXml 조회 결과 XML
  263. * @return Array 조회 결과 XML Array
  264. */
  265. Modular.view.IBSheet7.parseSearchXml = function(sXml) {
  266. var arrXml = new Array();
  267. for(i=0; sXml.indexOf("<SHEET>") >= 0; i++ ) {
  268. var stIdx = sXml.indexOf("<SHEET>");
  269. var endIdx = sXml.indexOf("</SHEET>")+8;
  270. arrXml[i] = sXml.substring(stIdx, endIdx);
  271. sXml = sXml.substring(endIdx);
  272. }
  273. return arrXml;
  274. };
  275. /**
  276. * 멀티 저장의 경우 SHEET별로 XML를 분리해서 반환해줌
  277. * @param sXml 저장 결과 XML
  278. * @return Array 저장 결과 XML Array
  279. */
  280. Modular.view.IBSheet7.parseSaveXml = function(sXml) {
  281. var arrXml = new Array();
  282. for(i=0; sXml.indexOf("<SHEET>") >= 0; i++ ) {
  283. var stIdx = sXml.indexOf("<SHEET>");
  284. var endIdx = sXml.indexOf("</SHEET>")+8;
  285. arrXml[i] = sXml.substring(stIdx, endIdx);
  286. sXml = sXml.substring(endIdx);
  287. }
  288. return arrXml;
  289. };
  290. /**
  291. * 저장시 IBSHEET API를 거치지 않고 직접 Ajax통신을 통해
  292. * 서비스를 호출하고 json 형태로 응답을 받게됨.
  293. * (하위 구현으로 재구현 가능)
  294. * @param url 서비스 url
  295. * @return paramString 저장 파라미터
  296. */
  297. Modular.view.IBSheet7.doAjaxSave = function(url, paramString) {
  298. jQuery.ajax({
  299. async: false,
  300. type: "POST",
  301. url: url,
  302. data: paramString,
  303. dataType: "json",
  304. success: function(data) {
  305. // alert message
  306. if (data.message != undefined) {
  307. alert(data.message);
  308. }
  309. }
  310. });
  311. };