comm_tran.xjs 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <Script type="xscript4.0"><![CDATA[/***************************************************************************************
  3. * System Name : HIT
  4. * Job Name :
  5. * File Name : comm_tran.xjs
  6. * Creator : 임준호
  7. * Make Date : 2014-02-18
  8. *
  9. * Description :
  10. *---------------------------------------------------------------------------------------
  11. * Modify Date Modifier Modify Description
  12. *---------------------------------------------------------------------------------------
  13. * 2014-02-18 HIT
  14. *
  15. *---------------------------------------------------------------------------------------
  16. ****************************************************************************************/
  17. /********************************************************************************************************************/
  18. /************************* 트랜잭션 관련 함수 *********************************************************************/
  19. /********************************************************************************************************************/
  20. // tranf_submit : 공통 Transaction
  21. // tranf_submitCdw : CDW용 Transaction (신규 2014-05-15)
  22. // tranf_transaction : 기본 Transaction - !!! 업무화면에서는 사용하면 안됨!!!
  23. // tranf_surrogate : 임시로그인을 위하여 세션토큰을 서버에서 받아와 세션토큰 값을 교체한다.
  24. // tranf_transactionCallback : 공통 Transaction Callback
  25. //var SPLITCHAR = "▥"; //Split구분상수
  26. var SERVER_DEF = "SVR::";
  27. var SERVER_DEF_CDW = "SVR_CDW::";
  28. //var SERVER_DEF_SSL = "SVR_SSL::";
  29. /********************************************************************************************************************/
  30. /************************* 트랜잭션 관련 함수 *********************************************************************/
  31. /********************************************************************************************************************/
  32. /**********************************************************************************
  33. * 함수명 : tranf_submit
  34. * 설 명 : 공통 Transaction
  35. * argument : param.id - transaction을 구분하기 위한 ID
  36. * : param.service - service ID
  37. * : param.method - method ID
  38. * : param.inds - transaction을 요청할 때 입력값으로 보낼 Dataset 의 ID
  39. * : param.outds - transaction을 처리 결과를 받을 Dataset의 ID
  40. * : param.args - transaction을 위한 인자값
  41. * : param.callback - transaction의 결과를 돌려줄 Function의 이름
  42. * : param.progress - Progress 사용여부 확인) (true : 사용-default, false : 사용안함
  43. * : param.async - 비동기 여부를 지정 (true : 비동기, false : 동기)
  44. * : param.alert - 트랙잭션 완료시 메시지박스 사용 여부 (true : 사용 -default, false : 사용안함)
  45. * : param.error - 에러 발생시 경고 창 사용 여부 (true : 사용 -default, false : 사용안함)
  46. * : param.surrogate - 임시로그인 - userid='ENRBC' dutplcecd='B051'
  47. * : param.typeStr - 사용자 정의 row type 구분자
  48. * : param.force - session timeout 에 상관없이 transaction이 실행(true : 사용, false : 사용안함-default)
  49. * : sSystem - transaction을 수행할 system구분, null일 경우 EMR
  50. * return Type :
  51. * 작성자 : 임준호
  52. **********************************************************************************/
  53. function tranf_submit_20180601(param, sSystem){
  54. // quick view 모드이고 세션이 null 이면 서버를 호출하여 개발자가 지정한 세션을 받아옴
  55. if(sysf_isQuickView() && utlf_isNull(gv_sSessionToken)) {
  56. tranf_transaction("tr_quicksession", SERVER_DEF+"target=hismainapp.Login&method=reqGetTempSessionInfo", "req=gds_userInfo",
  57. "gds_userInfo=userinfo gds_systemInfo=systeminfo", undefined, undefined, undefined, false,
  58. undefined, undefined, undefined, undefined);
  59. }
  60. // gv_sSessionToken 정보가 특정 시점에 변경되는 현상이 있어서 트랜잭션시 "sessioninfo" (원본 세션값)으로 다시 갱신 하도록 함 2017.03.02 smkim
  61. var sessioninfo = gds_userInfo.getColumn(0, "sessioninfo");
  62. if(!utlf_isNull(gv_sSessionToken) && !utlf_isNull(sessioninfo) && (sessioninfo != gv_sSessionToken)) {
  63. sysf_accountTrace("submit에서 토큰 다른 경우");
  64. var scnID = frmf_getScreenID();
  65. trace("ScreenID : " + scnID + "\nparam.id : " + param.id + "\nparam.service : " + param.service + "\nparam.method : " + param.method +
  66. "\ngv_sSessionToken : " + gv_sSessionToken + "\nsessioninfo : " +sessioninfo);
  67. }
  68. gv_sSessionToken = sessioninfo;
  69. gv_sSessionToken_ENC = gds_userInfo.getColumn(0,"sessioninfo_enc");
  70. var sSvcID = "";
  71. var serverTarget = "";
  72. var sScreenID = frmf_getScreenID();
  73. //transaction system 구분 null일 경우 emr
  74. var sUrl = "";
  75. if(utlf_isNull(sSystem)){
  76. sUrl = SERVER_DEF;
  77. }else if(sSystem = "CDW"){
  78. sUrl = SERVER_DEF_CDW;
  79. }
  80. sUrl = sUrl + "target="+param.service+"&method="+param.method+"&submit_id="+param.id+"&screen_id="+sScreenID;
  81. if(utlf_isNull(param.id)){
  82. sSvcID = "tr_"+param.service+"_"+param.method;
  83. }else{
  84. sSvcID = param.id;
  85. }
  86. utlf_addLog("sSvcID ; " + sSvcID );
  87. /*
  88. if(utlf_isNull(param.inds)) param.inds = "";
  89. if(utlf_isNull(param.outds)) param.outds = "";
  90. if(utlf_isNull(param.args)) param.args = "";
  91. if(utlf_isNull(param.callback)) param.callback = "";
  92. if((param.progress != true) && (param.progress != false)) param.progress = true;
  93. if((param.async != true) && (param.async != false)) param.async = false;
  94. if((param.alert != true) && (param.alert != false)) param.alert = true;
  95. */
  96. tranf_transaction(sSvcID
  97. , sUrl
  98. , param.inds
  99. , param.outds
  100. , param.args + " screen_id=" + wrapQuote(sScreenID)
  101. , param.callback
  102. , param.progress
  103. , param.async
  104. , param.alert
  105. , param.error
  106. , param.surrogate
  107. , param.typeStr
  108. , param.force
  109. , param.transaction);
  110. }
  111. /**********************************************************************************
  112. * 함수명 : tranf_submit
  113. * 설 명 : 공통 Transaction
  114. * argument : param.id - transaction을 구분하기 위한 ID
  115. * : param.service - service ID
  116. * : param.method - method ID
  117. * : param.inds - transaction을 요청할 때 입력값으로 보낼 Dataset 의 ID
  118. * : param.outds - transaction을 처리 결과를 받을 Dataset의 ID
  119. * : param.args - transaction을 위한 인자값
  120. * : param.callback - transaction의 결과를 돌려줄 Function의 이름
  121. * : param.progress - Progress 사용여부 확인) (true : 사용-default, false : 사용안함
  122. * : param.async - 비동기 여부를 지정 (true : 비동기, false : 동기)
  123. * : param.alert - 트랙잭션 완료시 메시지박스 사용 여부 (true : 사용 -default, false : 사용안함)
  124. * : param.error - 에러 발생시 경고 창 사용 여부 (true : 사용 -default, false : 사용안함)
  125. * : param.surrogate - 임시로그인 - userid='ENRBC' dutplcecd='B051'
  126. * : param.typeStr - 사용자 정의 row type 구분자
  127. * : param.force - session timeout 에 상관없이 transaction이 실행(true : 사용, false : 사용안함-default)
  128. * : sSystem - transaction을 수행할 system구분, null일 경우 EMR
  129. * return Type :
  130. * 작성자 : 임준호
  131. **********************************************************************************/
  132. function tranf_submit(param, sSystem){
  133. // Start of 메세지 처리를 위한 변수 추가
  134. var bRtn = true;
  135. var sReTranYn = "Y"; // 처음 한번은 Call 하도록 설정(오류가 있을경우 화면에서 처리 하고, 다시 Call 하도록
  136. var sMsgNo = "";
  137. var nHistNo = 0; // tran 호출 횟수
  138. var nBfOpCnt = 0; // tran전 오픈 카운트
  139. var nBfOpCnt = 0; // tran전 오픈 카운트
  140. var nAfOpCnt = 0; // tran후 오픈 카운트
  141. var nExcpCnt = 0; // 예외 항목
  142. var nErroCnt = 0; // 에러 항목
  143. var nResnCnt = 0; // 사유 입력 항목
  144. var nInfoCnt = 0; // 정보 확인 항목
  145. var ds_sys = null; // 메세지 처리 APP으로 넘기는 메세지정보 데이터셋 중복을 피하기위해 키값으로 생성
  146. var ds_arg_sys = null; // 메세지 처리 화면으로 넘기는 arg 데이터셋 중복을 피하기위해 키값으로 생성
  147. var mon = sysf_getCurrentMonitorNumber();
  148. var xpt = this.getOwnerFrame().position.x + 50;
  149. var ypt = this.getOwnerFrame().position.y + 50;
  150. // End of 메세지 처리를 위한 변수 추가
  151. // quick view 모드이고 세션이 null 이면 서버를 호출하여 개발자가 지정한 세션을 받아옴
  152. if(sysf_isQuickView() && utlf_isNull(gv_sSessionToken)) {
  153. tranf_transaction("tr_quicksession", SERVER_DEF+"target=hismainapp.Login&method=reqGetTempSessionInfo", "req=gds_userInfo",
  154. "gds_userInfo=userinfo gds_systemInfo=systeminfo", undefined, undefined, undefined, false,
  155. undefined, undefined, undefined, undefined);
  156. }
  157. // gv_sSessionToken 정보가 특정 시점에 변경되는 현상이 있어서 트랜잭션시 "sessioninfo" (원본 세션값)으로 다시 갱신 하도록 함 2017.03.02 smkim
  158. var sessioninfo = gds_userInfo.getColumn(0, "sessioninfo");
  159. if(!utlf_isNull(gv_sSessionToken) && !utlf_isNull(sessioninfo) && (sessioninfo != gv_sSessionToken)) {
  160. sysf_accountTrace("submit에서 토큰 다른 경우");
  161. var scnID = frmf_getScreenID();
  162. trace("ScreenID : " + scnID + "\nparam.id : " + param.id + "\nparam.service : " + param.service + "\nparam.method : " + param.method +
  163. "\ngv_sSessionToken : " + gv_sSessionToken + "\nsessioninfo : " +sessioninfo);
  164. }
  165. gv_sSessionToken = sessioninfo;
  166. gv_sSessionToken_ENC = gds_userInfo.getColumn(0,"sessioninfo_enc");
  167. var sSvcID = "";
  168. var serverTarget = "";
  169. var sScreenID = frmf_getScreenID();
  170. //transaction system 구분 null일 경우 emr
  171. var sUrl = "";
  172. if(utlf_isNull(sSystem)){
  173. sUrl = SERVER_DEF;
  174. }else if(sSystem = "CDW"){
  175. sUrl = SERVER_DEF_CDW;
  176. }
  177. sUrl = sUrl + "target="+param.service+"&method="+param.method+"&submit_id="+param.id+"&screen_id="+sScreenID;
  178. if(utlf_isNull(param.id)){
  179. sSvcID = "tr_"+param.service+"_"+param.method;
  180. }else{
  181. sSvcID = param.id;
  182. }
  183. utlf_addLog("sSvcID ; " + sSvcID );
  184. dsf_createDsRow("ds_sys_" + sSvcID, [{col:"retranyn", type:"string", size:256, val:"N"},
  185. {col:"histno", type:"string", size:256, val:"0"},
  186. {col:"bfopcnt", type:"string", size:256, val:"0"},
  187. {col:"afopcnt", type:"string", size:256, val:"0"},
  188. {col:"excpcnt", type:"string", size:256, val:"0"},
  189. {col:"errocnt", type:"string", size:256, val:"0"},
  190. {col:"resncnt", type:"string", size:256, val:"0"},
  191. {col:"infocnt", type:"string", size:256, val:"0"},
  192. {col:"screenid", type:"string", size:256, val:frmf_getScreenID()},
  193. {col:"submitid", type:"string", size:256, val:param.id},
  194. {col:"service", type:"string", size:256, val:param.service},
  195. {col:"method", type:"string", size:256, val:param.method},
  196. {col:"async", type:"string", size:256, val:param.async},
  197. {col:"transact", type:"string", size:256, val:param.transaction}]);
  198. param.inds = param.inds + " sys=ds_sys_" + sSvcID;
  199. param.outds = param.outds + " ds_sys_" + sSvcID + "=sys";
  200. ds_sys = this.objects["ds_sys_" + sSvcID];
  201. while (sReTranYn == "Y" && nHistNo <10) {
  202. if(!utlf_isNull(sMsgNo)) {
  203. dsf_createDs("ds_sys_" + sSvcID);
  204. ds_sys = this.objects["ds_sys_" + sSvcID];
  205. dsf_copyDs(ds_sys, ds_arg_sys, "replace");
  206. }
  207. nHistNo = nHistNo +1;
  208. ds_sys.setColumn(0, "histno", nHistNo);
  209. tranf_transaction(sSvcID
  210. , sUrl
  211. , param.inds
  212. , param.outds
  213. , param.args + " screen_id=" + wrapQuote(sScreenID)
  214. , param.callback
  215. , param.progress
  216. , param.async
  217. , param.alert
  218. , param.error
  219. , param.surrogate
  220. , param.typeStr
  221. , param.force
  222. , param.transaction);
  223. if(!utlf_isNull(this.objects["ds_sys_" + sSvcID])) {
  224. ds_sys = this.objects["ds_sys_" + sSvcID];
  225. nExcpCnt = ds_sys.getColumn(0, "excpcnt"); // 예외 항목
  226. if (nExcpCnt > 0) { // 예외 항목
  227. bRtn = false;
  228. }
  229. }
  230. if (!param.async && !utlf_isNull(this.objects["ds_sys_" + sSvcID]) && !utlf_isNull(dsf_getColumnNullToEmpty(ds_sys, 0, "msgno"))) { // 리턴 메세지 정보가 있을 경우
  231. sMsgNo = ds_sys.getColumn(0, "msgno");
  232. sReTranYn = ds_sys.getColumn(0, "retranyn"); // 다시 transaction 할지 여부
  233. nBfOpCnt = ds_sys.getColumn(0, "bfopcnt"); // tran전 오픈 카운트
  234. nAfOpCnt = ds_sys.getColumn(0, "afopcnt"); // tran후 오픈 카운트
  235. nErroCnt = ds_sys.getColumn(0, "errocnt"); // 에러 항목
  236. nResnCnt = ds_sys.getColumn(0, "resncnt"); // 사유 입력 항목
  237. nInfoCnt = ds_sys.getColumn(0, "infocnt"); // 정보 확인 항목
  238. dsf_createDs("ds_sys_" + sMsgNo);
  239. ds_arg_sys = this.objects["ds_sys_" + sMsgNo]; // 메세지 처리 화면으로 넘기는 arg 데이터셋 중복을 피하기위해 키값으로 생성
  240. dsf_copyDs(ds_arg_sys, ds_sys, "replace");
  241. var objArg = new Object();
  242. objArg.arg_sys = ds_arg_sys;
  243. } else {
  244. sReTranYn = "N";
  245. nBfOpCnt = 0; // tran전 오픈 카운트
  246. nAfOpCnt = 0; // tran후 오픈 카운트
  247. nErroCnt = 0; // 에러 항목
  248. nResnCnt = 0; // 사유 입력 항목
  249. nInfoCnt = 0; // 정보 확인 항목
  250. }
  251. if (nBfOpCnt > 0) { // tran전 오픈 카운트
  252. frmf_clearParameter("SPZUM90100_msgcls");
  253. frmf_setParameter("SPZUM90100_msgcls", "B"); // transaction 전 오픈 메세지 타입
  254. frmf_modal("SPZUM90100", "SPZUM90100", objArg, false, mon, xpt, ypt, null, null, null, null, null, "M"); //오픈팝업
  255. bRtn = false;
  256. break;
  257. }
  258. if (nErroCnt > 0) { // 에러 항목
  259. frmf_modal("SPZUM90200", "SPZUM90200", objArg, false, mon, xpt, ypt, null, null, null, null, null, "M"); //오류팝업
  260. bRtn = false;
  261. break;
  262. }
  263. if (nResnCnt > 0) { // 사유 입력 항목
  264. frmf_clearParameter("SPZUM90300_rtn");
  265. frmf_modal("SPZUM90300", "SPZUM90300", objArg, false, mon, xpt, ypt, null, null, null, null, null, "M"); //사유팝업
  266. if(frmf_getParameter("SPZUM90300_rtn") != "Y") {
  267. bRtn = false;
  268. break;
  269. }
  270. }
  271. if (nInfoCnt > 0) { // 정보 확인 항목
  272. frmf_clearParameter("SPZUM90400_rtn");
  273. frmf_modal("SPZUM90400", "SPZUM90400", objArg, false, mon, xpt, ypt, null, null, null, null, null, "M"); //정보팝업
  274. if(frmf_getParameter("SPZUM90400_rtn") != "Y") {
  275. bRtn = false;
  276. break;
  277. }
  278. }
  279. if (nAfOpCnt > 0) { // tran후 오픈 카운트
  280. frmf_clearParameter("SPZUM90100_msgcls");
  281. frmf_setParameter("SPZUM90100_msgcls", "F"); // transaction 후 오픈 메세지 타입
  282. frmf_open("SPZUM90100", "SPZUM90100", objArg, false, mon, xpt, ypt, null, null, null, null, null, "M"); //오픈팝업
  283. }
  284. }
  285. dsf_deleteDs("ds_sys_" + sSvcID); // Submit 인풋 메세지 정보 삭제
  286. dsf_deleteDs("ds_sys_" + sMsgNo); // Submit 리턴 메세지 정보 삭제
  287. return bRtn;
  288. }
  289. /**********************************************************************************
  290. * 함수명 : tranf_submitCdw
  291. * 설 명 : CDW용 Transaction
  292. * argument : param.id - transaction을 구분하기 위한 ID
  293. * : param.service - service ID
  294. * : param.method - method ID
  295. * : param.inds - transaction을 요청할 때 입력값으로 보낼 Dataset 의 ID
  296. * : param.outds - transaction을 처리 결과를 받을 Dataset의 ID
  297. * : param.args - transaction을 위한 인자값
  298. * : param.callback - transaction의 결과를 돌려줄 Function의 이름
  299. * : param.progress - Progress 사용여부 확인) (true : 사용-default, false : 사용안함
  300. * : param.async - 비동기 여부를 지정 (true : 비동기, false : 동기)
  301. * : param.alert - 트랙잭션 완료시 메시지박스 사용 여부 (true : 사용 -default, false : 사용안함)
  302. * : param.error - 에러 발생시 경고 창 사용 여부 (true : 사용 -default, false : 사용안함)
  303. * : param.surrogate - 임시로그인 - userid='ENRBC' dutplcecd='B051'
  304. * : param.typeStr - 사용자 정의 row type 구분자
  305. * : param.force - session timeout 에 상관없이 transaction이 실행(true : 사용, false : 사용안함-default)
  306. * return Type :
  307. * 작성자 : 임준호
  308. **********************************************************************************/
  309. function tranf_submitCdw(param){
  310. tranf_submit(param, "CDW");
  311. }
  312. /**********************************************************************************
  313. * 함수명 : tranf_transaction
  314. * 설 명 : 공통 Transaction
  315. * argument : sSvcID - transaction을 구분하기 위한 ID
  316. * : sUrl - transaction url
  317. * : sInDataset - transaction을 요청할 때 입력값으로 보낼 Dataset 의 ID
  318. * : sOutDataset - transaction을 처리 결과를 받을 Dataset의 ID
  319. * : sArguments - transaction을 위한 인자값
  320. * : sCallbackFunc - transaction의 결과를 돌려줄 Function의 이름
  321. * : bProgress - Progress 사용여부 확인 (true : 사용-default, false : 사용안함)
  322. * : bAsync - 비동기 여부를 지정 (true : 비동기, false : 동기)
  323. * : bAlert - 트랙잭션 완료시 메시지박스 사용 여부 (true : 사용 -default, false : 사용안함)
  324. * : bError - 에러 발생 시 경고 창 사용 여부 (true : 사용 -default, false : 사용안함)
  325. * : objPaging - 페이징 정보
  326. * : sSurrogate - 임시로그인 - userid='ENRBC' dutplcecd='B051')
  327. * : sTypeStr - 사용자 정의 row type 구분자
  328. * : bForce - session timeout 에 상관없이 transaction이 실행(true : 사용, false : 사용안함-default)
  329. * : bTransaction - db transaction 사용 여부(true : 사용-default, false : 사용안함)
  330. * return Type :
  331. * 작성자 : 임준호
  332. **********************************************************************************/
  333. function tranf_transaction(sSvcID, sUrl, sInDataset, sOutDataset, sArguments, sCallbackFunc, bProgress, bAsync, bAlert, bError, sSurrogate, sTypeStr, bForce, bTransaction)
  334. {
  335. //세션타임아웃
  336. if(utlf_isNull(bForce)) bForce = false;
  337. if(!bForce && !sysf_isQuickView() && !utlf_isNull(gv_sSessionToken)){
  338. var nSessionTimeout = toNumber(sysf_getSystemInfo("sessiontimeout"));
  339. var dtDate = new Date();
  340. var nDate = dtDate.getTime();
  341. var nDiffTime = 0;
  342. if(agv_nLastTransactionTime > 0){
  343. nDiffTime = (nDate - agv_nLastTransactionTime)/1000/60;
  344. }
  345. if(nSessionTimeout != 0 && nDiffTime > nSessionTimeout){
  346. //if(true){
  347. var islogout = appf_openPasswordValidate("session", "암호확인", "");
  348. if(islogout){
  349. frmf_logout();
  350. return;
  351. }
  352. }
  353. }
  354. // 서비스 ID
  355. var sMergeSvcID;
  356. // 전송 형태 (0:XML 타입,1:Binary 타입, 2:SSV 타입)
  357. var nDataType = 0;
  358. // postdata 압축 여부
  359. var bCompress = false;
  360. // alert 사용 여부
  361. var sAlert = "FALSE";
  362. // error 사용 여부
  363. var sError = "TRUE";
  364. // progress 사용 여부
  365. var sProgress = "TRUE";
  366. // 추가정보
  367. var sParam = "&macaddr="+sysf_getMacAddress();
  368. // Progress 사용여부 확인
  369. if((bProgress != true) && (bProgress != false)) bProgress = true;
  370. if(!bProgress) sProgress = "FALSE";
  371. // async 확인
  372. if ((bAsync != true) && (bAsync != false)) bAsync = false;
  373. // alert 확인
  374. if ((bAlert != true) && (bAlert != false)) bAlert = false;
  375. if(bAlert) sAlert = "TRUE";
  376. else sAlert = "FALSE";
  377. // error 확인
  378. if ((bError != true) && (bError != false)) bError = true;
  379. if(bError) sError = "TRUE";
  380. else sError = "FALSE";
  381. //임시 로그인
  382. if(!utlf_isNull(sSurrogate)){
  383. //sUrl = sUrl+"&surrogate_session="+encodeURIComponent(tranf_surrogate(sSurrogate));
  384. //sUrl = sUrl+"&surrogate_session="+tranf_surrogate(sSurrogate);
  385. tranf_surrogate(sSurrogate);
  386. sSurrogate = "TRUE";
  387. }else{
  388. sSurrogate = "FALSE";
  389. }
  390. // 서비스 ID merge
  391. sMergeSvcID = sProgress + "|" + sAlert + "|" + sSvcID + "|" + sCallbackFunc + "|" + sSurrogate + "|" + sError;
  392. // url 작성
  393. sUrl = sUrl + sParam;
  394. //loading
  395. if(bProgress) this.setWaitCursor(true, true);
  396. //스크롤 페이징
  397. /*
  398. if(!utlf_isNull(objPaging)){
  399. var objColInfo = new Array();
  400. if(!utlf_isNull(objPaging.offset)){
  401. objColInfo.push({col: "offset", val: objPaging.offset});
  402. }
  403. if(!utlf_isNull(objPaging.pagesize)){
  404. objColInfo.push({col: "pagesize", val: objPaging.pagesize});
  405. }
  406. if(!utlf_isNull(objPaging.totCnt)){
  407. if(objPaging.totCnt){
  408. objPaging.totCnt = "true";
  409. }else{
  410. objPaging.totCnt = "false";
  411. }
  412. objColInfo.push({col: "totCnt", val: objPaging.totCnt});
  413. }
  414. dsf_createDsRow("tranDs_paging", objColInfo);
  415. sInDataset = sInDataset + " "+objPaging.dsNm+"=tranDs_paging";
  416. }
  417. */
  418. /*
  419. if(!utlf_isNull(objPaging)){
  420. if(!utlf_isNull(objPaging.offset)){
  421. sArguments = sArguments + " offset="+wrapQuote(objPaging.offset)
  422. }
  423. if(!utlf_isNull(objPaging.offset)){
  424. sArguments = sArguments + " pagesize="+wrapQuote(objPaging.pagesize)
  425. }
  426. if(!utlf_isNull(objPaging.totCnt)){
  427. if(objPaging.totCnt){
  428. objPaging.totCnt = "true";
  429. }else{
  430. objPaging.totCnt = "false";
  431. }
  432. sArguments = sArguments + " totCnt="+wrapQuote(objPaging.totCnt);
  433. }
  434. }
  435. */
  436. //db transaction
  437. if(!utlf_isNull(bTransaction)){
  438. if(bTransaction){
  439. sArguments = sArguments + " transaction='true'";
  440. }else{
  441. sArguments = sArguments + " transaction='false'";
  442. }
  443. }
  444. //save row type String
  445. if(!utlf_isNull(sTypeStr)){
  446. sArguments = sArguments + " rowTypeString='" + sTypeStr + "'";
  447. }
  448. //args
  449. if(utlf_isNull(sArguments)) sArguments = "";
  450. transaction(sMergeSvcID, sUrl, sInDataset, sOutDataset, sArguments, "tranf_transactionCallback", bAsync, nDataType, bCompress);
  451. }
  452. /**********************************************************************************
  453. * 함수명 : tranf_surrogate
  454. * 설 명 : 임시로그인을 위하여 세션토큰을 서버에서 받아와 세션토큰 값을 교체한다.
  455. * argument : sSurrogate
  456. * : 작성예 (userid='ENRBC' dutplcecd='B051')
  457. * return Type :
  458. * 작성자 : 임준호
  459. **********************************************************************************/
  460. function tranf_surrogate(sSurrogate){
  461. tranf_submit({
  462. id: "tr_reqGetSurrogateSession"
  463. , service: "hismainapp.HisMain"
  464. , method: "reqGetSurrogateSession"
  465. , inds: "req="+dsf_createDsRow("ds_req", utlf_args2Object(sSurrogate))
  466. , outds: dsf_createDs("ds_sessionvalue")+"=sessionvalue"
  467. , progress: false
  468. });
  469. //임시 토큰을 원본 토큰으로 교체
  470. gv_sSessionTokenTemp = gv_sSessionToken;
  471. gv_sSessionToken = ds_sessionvalue.getColumn(0, "sessionstr");
  472. }
  473. /**********************************************************************************
  474. * 함수명 : tranf_transactionCallback
  475. * 설 명 : 공통 Transaction Callback
  476. * argument : strSvcId (transaction을 구분하기 위한 ID)
  477. * : nErrorCode (에러코드)
  478. * : strErrorMsg (에러메세지)
  479. * return Type :
  480. * 작성자 : 임준호
  481. **********************************************************************************/
  482. function tranf_transactionCallback(sSvcId, nErrorCode, sErrorMsg){
  483. var sArrSvcID = sSvcId.split("|");
  484. var sProgress = sArrSvcID[0];
  485. var sAlert = sArrSvcID[1];
  486. var serviceID = sArrSvcID[2];
  487. var callbackFunc = sArrSvcID[3];
  488. var sSurrogate = sArrSvcID[4];
  489. var sError = sArrSvcID[5];
  490. //마지막 트랜잭션 시간을 밀리초 단위로 기록함.
  491. if(!sysf_isQuickView()){
  492. var dtDate = new Date();
  493. agv_nLastTransactionTime = dtDate.getTime();
  494. }
  495. // 예외 발생시 시스템 메세지 처리 부분에 연동 하기 위해 추가 2018.08.24 엄영만
  496. if(nErrorCode < 0){
  497. if(!utlf_isNull(this.objects["ds_sys_" + serviceID])) {
  498. var ds_sys = this.objects["ds_sys_" + serviceID];
  499. ds_sys.setColumn(0, "excpcnt", 1);
  500. }
  501. }
  502. //progress
  503. if(sProgress == "TRUE") this.setWaitCursor(false, true);
  504. //error
  505. if(gv_bErrorMsg && sError == "TRUE"){
  506. var paramArr = new Object();
  507. if(nErrorCode < 0){
  508. //error 메세지 처리
  509. var tempArr = sErrorMsg.split("|");
  510. paramArr.errorMsg01 = tempArr[0];
  511. paramArr.errorMsg02 = tempArr[1];
  512. paramArr.errorMsg03 = tempArr[2];
  513. frmf_modalInternal("xp_system_error_pop", "com_hismainxp::form_system_error.xfdl", paramArr, false, null, null, null, 496, 164);
  514. }
  515. }
  516. //alert
  517. if(sAlert == "TRUE"){
  518. //정상 메세지
  519. sysf_messageBox(sErrorMsg, "I");
  520. }
  521. //서비스 처리 결과 출력
  522. //application.mainframe.statustext = sErrorMsg;
  523. if(nErrorCode > -1){
  524. try{
  525. agv_objAppBottomPath.form.stt_statusMsg.text = sErrorMsg;
  526. }catch(e){}
  527. }
  528. //임시로그인 - 원본토큰으로 원복
  529. if(sSurrogate == "TRUE"){
  530. gv_sSessionToken = gv_sSessionTokenTemp;
  531. gv_sSessionTokenTemp = "";
  532. }
  533. if(callbackFunc == null) return;
  534. if(callbackFunc == "undefined") return;
  535. if(callbackFunc.length == 0) return;
  536. // Form Callback 함수 호출
  537. //eval(callbackFunc + "('" + serviceID + "', '"+nErrorCode+"', '"+sErrorMsg+"');");
  538. eval(callbackFunc + "(serviceID, nErrorCode, sErrorMsg);");
  539. }]]></Script>