comm_sys.xjs 55 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577
  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_sys.xjs
  6. * Creator : 임준호
  7. * Make Date : 2014-02-18
  8. *
  9. * Description : 시스템, 세션 관련 API
  10. *---------------------------------------------------------------------------------------
  11. * Modify Date Modifier Modify Description
  12. *---------------------------------------------------------------------------------------
  13. * 2014-02-18 HIT
  14. *
  15. *---------------------------------------------------------------------------------------
  16. ****************************************************************************************/
  17. /********************************************************************************************************************/
  18. /************************* 시스템 관련 함수 ***********************************************************************/
  19. /********************************************************************************************************************/
  20. // sysf_SHA256 : 인자값을 sha256으로 변환
  21. // sysf_getSystemInfo : 인자값에 해당하는 시스템 정보를 리턴한다.
  22. // sysf_getMacAddress : 클라이언트의 MacAddress 를 가져온다.
  23. // sysf_getIPAddress : 클라이언트의 IP주소를 가져온다.
  24. // sysf_setErrorMsg : transaction에서 발생하는 error메시지를 on/off한다.
  25. // sysf_broadcastEvent : 모든열린 팝업화면과 메인화면에 이벤트를 발생시킨다.
  26. // sysf_getScreenURL : DB 상에 등록된 해당 화면의 URL 을 리턴한다.
  27. // sysf_getObjType : Object의 type을 문자열로 얻어온다. (예 : "MainFrame", "ChildFrame", "Form", "Button",...)
  28. // sysf_getFormURL : 현재화면의 실제 URL 을 리턴한다.
  29. // sysf_realPath : application group의 real path를 반환한다.
  30. // sysf_getURLprefix : application 의 URL prefix. (ex: http://his000dev.schmc.ac.kr:18088/himed2)
  31. // sysf_catchTrace : 예외처리(try catch)시 catch구문에 삽입한다.
  32. // sysf_isQuickView : quick view 인지 여부를 리턴한다.
  33. // sysf_messageBox : 형식화된 메시지 박스를 출력한다.
  34. // sysf_getTitleLoginDate : 로그인 시간 반환
  35. // sysf_getSystemCd : 시스템 코드를 반환한다.
  36. // sysf_getMISSystemCd : MIS시스템 코드를 반환한다.
  37. // sysf_isRealServer : 현재 접속 서버가 운영서버인지를 반환한다. (2018.07.24 신규 추가)
  38. // sysf_getBizName : 업무구분코드로 시작되는 문자열을 넘기면, 업무구문 문자열을 반환한다.
  39. // sysf_checkFormUpdate : 화면의 값이 변경 되었는지 여부를 저장하고 있는 gvFormUpdateYN 전역 변수값을 return (2014.04.03 : 변경)
  40. // sysf_setFormUpdate : 화면의 컴퍼넌트의 값이 변경되 었을 때 폼이 변경 되었음을
  41. // gvFormUpdateYN 전역 변수에 true 설정하여 저장한다.( frmf_setInputNodeCurPid에서 사용)
  42. // sysf_getCurrentMonitorNumber : 현재 화면이 위치한 모니터 번호를 가져온다.
  43. // sysf_getProcessID : 프로세스ID 값을 조회 (2017.02.28 신규 추가)
  44. // sysf_accountTrace : 접속정보에 대한 로그 (프로세스ID, 접속기관, 사번, 이름, IP정보) (2017.02.28 신규 추가)
  45. // sysf_getActionURL : submitID가 포함된 전체 url 경로를 리턴한다 (2019.03.19 신규 추가)
  46. // sysf_getDomain : 서비스 url 주소 (2019.03.19 신규 추가)
  47. // sysf_getActionURI : context 아래의 경로에 submitID, business_id, screen_id 를 포함한 주소 (2019.03.19 신규 추가)
  48. /********************************************************************************************************************/
  49. /************************* 사용자 세션정보 제공 함수 *************************************************************/
  50. /********************************************************************************************************************/
  51. // sysf_getUserId : 사용자 세션정보에서 user id를 가져온다.
  52. // sysf_getUserName : 사용자 세션정보에서 user name을 가져온다.
  53. // sysf_getUserGroupList : 사용자가 속한 특수 사용자 그룹 목록을 반환한다.
  54. // sysf_getUserInfo : 인자값에 해당하는 사용자세션정보를 리턴한다.
  55. // sysf_checkUserGroup : 사용자가 주어진 특수 사용자 그룹에 속해있는지 여부를 반환한다.
  56. /********************************************************************************************************************/
  57. /************************* 공통 세션 변수 관련 함수 **************************************************************/
  58. /********************************************************************************************************************/
  59. // sysf_getPropertyName : 세션 변수명을 반환한다.
  60. // sysf_setGlobalVariable : 세션변수를 저장한다.
  61. // sysf_getGlobalVariable : 세션변수를 반환한다.
  62. // sysf_setModelProperty : 세션변수를 저장한다.(bizCode 없이 직접 입력) (신규 2016.02.22)
  63. // sysf_getModelProperty : 세션변수를 반환한다.(bizCode 없이 직접 입력) (신규 2016.02.22)
  64. // sysf_setModelAttribute : 세션변수를 저장한다.(TF의 model.setAttribute) (신규 2016.03.28)
  65. // sysf_getModelAttribute : 세션변수를 반환한다.(TF의 model.getAttribute) (신규 2016.03.28)
  66. /**********************************************************************************
  67. * 함수명 : sysf_SHA256
  68. * 설명 : 인자값을 sha256으로 변환
  69. * argument : String
  70. * return Type : String
  71. **********************************************************************************/
  72. /* SHA256 logical functions */
  73. function rotateRight(n,x) {
  74. return ((x >>> n) | (x << (32 - n)));
  75. }
  76. function choice(x,y,z) {
  77. return ((x & y) ^ (~x & z));
  78. }
  79. function majority(x,y,z) {
  80. return ((x & y) ^ (x & z) ^ (y & z));
  81. }
  82. function sha256_Sigma0(x) {
  83. return (rotateRight(2, x) ^ rotateRight(13, x) ^ rotateRight(22, x));
  84. }
  85. function sha256_Sigma1(x) {
  86. return (rotateRight(6, x) ^ rotateRight(11, x) ^ rotateRight(25, x));
  87. }
  88. function sha256_sigma0(x) {
  89. return (rotateRight(7, x) ^ rotateRight(18, x) ^ (x >>> 3));
  90. }
  91. function sha256_sigma1(x) {
  92. return (rotateRight(17, x) ^ rotateRight(19, x) ^ (x >>> 10));
  93. }
  94. function sha256_expand(W, j) {
  95. return (W[j&0x0f] += sha256_sigma1(W[(j+14)&0x0f]) + W[(j+9)&0x0f] +
  96. sha256_sigma0(W[(j+1)&0x0f]));
  97. }
  98. /* Hash constant words K: */
  99. var K256 = new Array(
  100. 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,
  101. 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
  102. 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,
  103. 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
  104. 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,
  105. 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
  106. 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,
  107. 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
  108. 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,
  109. 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
  110. 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,
  111. 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
  112. 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,
  113. 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
  114. 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,
  115. 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2
  116. );
  117. /* global arrays */
  118. var ihash, count, buffer;
  119. var sha256_hex_digits = "0123456789abcdef";
  120. /* Add 32-bit integers with 16-bit operations (bug in some JS-interpreters:
  121. overflow) */
  122. function safe_add(x, y)
  123. {
  124. var lsw = (x & 0xffff) + (y & 0xffff);
  125. var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
  126. return (msw << 16) | (lsw & 0xffff);
  127. }
  128. /* Initialise the SHA256 computation */
  129. function sha256_init() {
  130. ihash = new Array(8);
  131. count = new Array(2);
  132. buffer = new Array(64);
  133. count[0] = count[1] = 0;
  134. ihash[0] = 0x6a09e667;
  135. ihash[1] = 0xbb67ae85;
  136. ihash[2] = 0x3c6ef372;
  137. ihash[3] = 0xa54ff53a;
  138. ihash[4] = 0x510e527f;
  139. ihash[5] = 0x9b05688c;
  140. ihash[6] = 0x1f83d9ab;
  141. ihash[7] = 0x5be0cd19;
  142. }
  143. /* Transform a 512-bit message block */
  144. function sha256_transform() {
  145. var a, b, c, d, e, f, g, h, T1, T2;
  146. var W = new Array(16);
  147. /* Initialize registers with the previous intermediate value */
  148. a = ihash[0];
  149. b = ihash[1];
  150. c = ihash[2];
  151. d = ihash[3];
  152. e = ihash[4];
  153. f = ihash[5];
  154. g = ihash[6];
  155. h = ihash[7];
  156. /* make 32-bit words */
  157. for(var i=0; i<16; i++)
  158. W[i] = ((buffer[(i<<2)+3]) | (buffer[(i<<2)+2] << 8) | (buffer[(i<<2)+1]
  159. << 16) | (buffer[i<<2] << 24));
  160. for(var j=0; j<64; j++) {
  161. T1 = h + sha256_Sigma1(e) + choice(e, f, g) + K256[j];
  162. if(j < 16) T1 += W[j];
  163. else T1 += sha256_expand(W, j);
  164. T2 = sha256_Sigma0(a) + majority(a, b, c);
  165. h = g;
  166. g = f;
  167. f = e;
  168. e = safe_add(d, T1);
  169. d = c;
  170. c = b;
  171. b = a;
  172. a = safe_add(T1, T2);
  173. }
  174. /* Compute the current intermediate hash value */
  175. ihash[0] += a;
  176. ihash[1] += b;
  177. ihash[2] += c;
  178. ihash[3] += d;
  179. ihash[4] += e;
  180. ihash[5] += f;
  181. ihash[6] += g;
  182. ihash[7] += h;
  183. }
  184. /* Read the next chunk of data and update the SHA256 computation */
  185. function sha256_update(data, inputLen) {
  186. var i, index, curpos = 0;
  187. /* Compute number of bytes mod 64 */
  188. index = ((count[0] >> 3) & 0x3f);
  189. var remainder = (inputLen & 0x3f);
  190. /* Update number of bits */
  191. if ((count[0] += (inputLen << 3)) < (inputLen << 3)) count[1]++;
  192. count[1] += (inputLen >> 29);
  193. /* Transform as many times as possible */
  194. for(i=0; i+63<inputLen; i+=64) {
  195. for(var j=index; j<64; j++)
  196. buffer[j] = data.charCodeAt(curpos++);
  197. sha256_transform();
  198. index = 0;
  199. }
  200. /* Buffer remaining input */
  201. for(var j=0; j<remainder; j++)
  202. buffer[j] = data.charCodeAt(curpos++);
  203. }
  204. /* Finish the computation by operations such as padding */
  205. function sha256_final() {
  206. var index = ((count[0] >> 3) & 0x3f);
  207. buffer[index++] = 0x80;
  208. if(index <= 56) {
  209. for(var i=index; i<56; i++)
  210. buffer[i] = 0;
  211. } else {
  212. for(var i=index; i<64; i++)
  213. buffer[i] = 0;
  214. sha256_transform();
  215. for(var i=0; i<56; i++)
  216. buffer[i] = 0;
  217. }
  218. buffer[56] = (count[1] >>> 24) & 0xff;
  219. buffer[57] = (count[1] >>> 16) & 0xff;
  220. buffer[58] = (count[1] >>> 8) & 0xff;
  221. buffer[59] = count[1] & 0xff;
  222. buffer[60] = (count[0] >>> 24) & 0xff;
  223. buffer[61] = (count[0] >>> 16) & 0xff;
  224. buffer[62] = (count[0] >>> 8) & 0xff;
  225. buffer[63] = count[0] & 0xff;
  226. sha256_transform();
  227. }
  228. /* Split the internal hash values into an array of bytes */
  229. function sha256_encode_bytes() {
  230. var j=0;
  231. var output = new Array(32);
  232. for(var i=0; i<8; i++) {
  233. output[j++] = ((ihash[i] >>> 24) & 0xff);
  234. output[j++] = ((ihash[i] >>> 16) & 0xff);
  235. output[j++] = ((ihash[i] >>> 8) & 0xff);
  236. output[j++] = (ihash[i] & 0xff);
  237. }
  238. return output;
  239. }
  240. /* Get the internal hash as a hex string */
  241. function sha256_encode_hex() {
  242. var output = new String();
  243. for(var i=0; i<8; i++) {
  244. for(var j=28; j>=0; j-=4)
  245. output += sha256_hex_digits.charAt((ihash[i] >>> j) & 0x0f);
  246. }
  247. return output;
  248. }
  249. /* Main function: returns a hex string representing the SHA256 value of the
  250. given data */
  251. function sysf_SHA256(data) {
  252. sha256_init();
  253. sha256_update(data, data.length);
  254. sha256_final();
  255. return sha256_encode_hex();
  256. }
  257. /**********************************************************************************
  258. * 함수명 : sysf_getSystemInfo
  259. * 설명 : 인자값에 해당하는 시스템 정보를 리턴한다.
  260. * argument : 세션키
  261. * return Type : 세션값
  262. * 작성자 : 이상준
  263. **********************************************************************************/
  264. function sysf_getSystemInfo(key) {
  265. var ret = gds_systemInfo.getColumn(0,key);
  266. return (ret == undefined)? "":ret;
  267. }
  268. /**********************************************************************************
  269. * 함수명 : sysf_getMacAddress
  270. * 설명 : 시스템의 MacAddress 를 가져온다.
  271. * argument : 세션키
  272. * return Type : 세션값
  273. * 작성자 : 이상준
  274. **********************************************************************************/
  275. function sysf_getMacAddress()
  276. {
  277. var objExtCommon = new ExtCommon();
  278. // MAC Address 가져오기 (macaddr)
  279. // var macArr = objExtCommon.getMacAddress();
  280. // var macaddr = "";
  281. // if (macArr != undefined && macArr.length > 0) {
  282. // macaddr = macArr[macArr.length -1];
  283. // }
  284. // MAC Address 가져오는 방법 수정(무선 PC의 경우 1.0과 MAC Address 주소가 다르게 나오는 경우가 있어 수정) - 20170208 smkim
  285. var sMacAddress = objExtCommon.getIPAdapterInfo(); // PC의 여러 MAC Address를 배열로 리턴
  286. var macaddr = "";
  287. for(var i = 0; i < sMacAddress.length; i++) {
  288. var marArr = sMacAddress[i];
  289. var mac = marArr.split(":");
  290. if(mac[0] != "0.0.0.0") {
  291. macaddr = mac[1];
  292. break;
  293. }
  294. }
  295. macaddr = macaddr.replace(/-/gi, "");
  296. return macaddr;
  297. }
  298. /**********************************************************************************
  299. * 함수명 : sysf_getIPAddress
  300. * 설명 : 클라이언트의 IP주소를 가져온다.
  301. * argument : 세션키
  302. * return Type : 세션값
  303. * 작성자 : 이상준
  304. **********************************************************************************/
  305. function sysf_getIPAddress()
  306. {
  307. var sIPAddr = sysf_getUserInfo("ipaddr");
  308. // ipaddr 값이 없을 때 직접 클라이언트에서 ip 조회해서 리턴하도록 수정
  309. if(utlf_isNull(sIPAddr)) {
  310. var extObj = new ExtCommon();
  311. var ipaddress = extObj.getIPAddress();
  312. if(ipaddress != null) {
  313. if(ipaddress.toString() == "[object VariantArray]") {
  314. sIPAddr = ipaddress[0];
  315. } else {
  316. sIPAddr = ipaddress;
  317. }
  318. }
  319. }
  320. return sIPAddr;
  321. }
  322. /**********************************************************************************
  323. * 함수명 : sysf_setErrorMsg
  324. * 설명 : transaction에서 발생하는 error메시지를 항상 on/off한다.
  325. * tranf_submit의 alert 옵션보다 우선순위가 높다.
  326. * argument : Boolean
  327. * return Type :
  328. **********************************************************************************/
  329. function sysf_setErrorMsg(bVal){
  330. gv_bErrorMsg = bVal;
  331. }
  332. /**********************************************************************************
  333. * 함수명 : sysf_broadcastEvent
  334. * 설명 : 모든열린 팝업화면과 메인화면에 이벤트를 발생시킨다.
  335. * argument : Java Script Object 형식의 파라미터
  336. * return Type : void
  337. * 작성자 : 이상준
  338. **********************************************************************************/
  339. function sysf_broadcastEvent(eventName, param){
  340. var type;
  341. var bExistFunc = false;
  342. // 상단 이벤트 호출
  343. bExistFunc = frmf_findFuncFromForm("com_hismainxp::form_top.xfdl", "on"+eventName);
  344. if(bExistFunc) eval("agv_objAppTopPath.form.on"+eventName+"(param)");
  345. // 하단 이벤트 호출
  346. bExistFunc = frmf_findFuncFromForm("com_hismainxp::form_bottom.xfdl", "on"+eventName);
  347. if(bExistFunc) eval("agv_objAppBottomPath.form.on"+eventName+"(param)");
  348. // 업무화면 이벤트 호출
  349. var sWorkScrnId = agv_objAppWorkPath.form.div_work.frmf_getScreenID();
  350. bExistFunc = frmf_findFuncFromForm(sysf_getScreenURL(sWorkScrnId), "on"+eventName);
  351. if(bExistFunc) eval("agv_objAppWorkPath.form.div_work.on"+eventName+"(param)");
  352. // 모든 열린팝업화면의 이벤트 호출
  353. var popupLength = application.popupframes.length;
  354. for (var i=0; i<popupLength; i++) {
  355. var popup = application.popupframes[i];
  356. var sPopScrnId = popup.form.frmf_getScreenID();
  357. bExistFunc = frmf_findFuncFromForm(sysf_getScreenURL(sPopScrnId), "on"+eventName);
  358. if(bExistFunc) eval("popup.form.on"+ eventName +"(param)");
  359. }
  360. }
  361. /**********************************************************************************
  362. * 함수명 : sysf_getScreenURL
  363. * 설명 : DB 상에 등록된 해당 화면의 URL 을 리턴한다.
  364. * argument : id - 화몇의 아이디
  365. * return Type : string
  366. * 작성자 : 이상준
  367. **********************************************************************************/
  368. function sysf_getScreenURL(id){
  369. var url = "com_commonxp::"+id+".xfdl";
  370. if (gv_bIsPreview || sysf_isQuickView()) { // 미리보기환경이라면
  371. url = "com_hismainxp::form_error_notfound.xfdl";
  372. var result = new Dataset;
  373. this.removeChild("dds_screenResult");
  374. this.addChild("dds_screenResult",result);
  375. tranf_submit({
  376. id: "tr_scrninfo"
  377. , service: "hismainapp.HisMain"
  378. , method: "reqGetScreenURL"
  379. , args: "scrnid="+id
  380. , outds: "dds_screenResult=urlinfo"
  381. , progress: false
  382. , async: false
  383. });
  384. if (result.rowcount > 0) {
  385. url = result.getColumn(0,"scrnurlxp");
  386. }
  387. }
  388. return url;
  389. }
  390. /**********************************************************************************
  391. * 함수명 : sysf_getScreenInfo
  392. * 설명 : DB 상에 등록된 해당 화면의 정보를 리턴한다.
  393. * argument : id - 화몇의 아이디
  394. * return Type : Object
  395. * 작성자 : 손병은
  396. **********************************************************************************/
  397. function sysf_getScreenInfo(id, objScrnInfo){
  398. var scrnurlxp = "com_commonxp::"+id+".xfdl";
  399. var objInfo = new Object();
  400. // if (gv_bIsPreview || sysf_isQuickView()) { // 미리보기환경이라면
  401. objInfo.scrnurlxp = "com_hismainxp::form_error_notfound.xfdl";
  402. var result = new Dataset("dds_screenResult");
  403. this.removeChild("dds_screenResult");
  404. this.addChild("dds_screenResult",result);
  405. result.name = "dds_screenResult";
  406. var sArgs = "scrnid=" + wrapQuote(id);
  407. if(!utlf_isNull(objScrnInfo)) {
  408. var menugrupcd = utlf_isNull(objScrnInfo.menugrupcd) ? "" : wrapQuote(objScrnInfo.menugrupcd);
  409. var menuitemcd = utlf_isNull(objScrnInfo.menuitemcd) ? "" : wrapQuote(objScrnInfo.menuitemcd);
  410. sArgs += " " + "menugrupcd=" + menugrupcd +
  411. " " + "menuitemcd=" + menuitemcd;
  412. }
  413. tranf_submit({
  414. id: "tr_scrninfo"
  415. , service: "hismainapp.HisMain"
  416. , method: "reqGetScreenURL"
  417. , args: sArgs
  418. , outds: "dds_screenResult=urlinfo"
  419. , progress: false
  420. , async: false
  421. });
  422. if (result.rowcount > 0) {
  423. objInfo.tfyn = result.getColumn(0,"tfyn");
  424. objInfo.scrnurlxp = sysf_getScreenURLTFStyle(result.getColumn(0,"scrnurlxp"), id, objInfo.tfyn);
  425. objInfo.scrnurl = result.getColumn(0,"scrnurl");
  426. objInfo.scrnurlxp_real = result.getColumn(0,"scrnurlxp");
  427. }
  428. // }
  429. return objInfo;
  430. }
  431. // 런처에서 실행할 때를 제외 하고 서버에서 처리 할 때는 파일명의 코드만 넘겨주도록 수정
  432. function sysf_getScreenURLTFStyle(scrnurl, id, tfyn) {
  433. if(!gv_bIsPreview && !utlf_isNull(scrnurl)) {
  434. var postfix = "";
  435. var lastIndex = "";
  436. var codeIndex = 0;
  437. if(tfyn == "Y") {
  438. postfix = ".xrw";
  439. lastIndex = scrnurl.lastIndexOf("/");
  440. codeIndex = 1;
  441. } else {
  442. postfix = ".xfdl";
  443. lastIndex = scrnurl.lastIndexOf("::");
  444. codeIndex = 2;
  445. }
  446. if(lastIndex > -1) {
  447. var url = scrnurl.substr(0, lastIndex + codeIndex);
  448. return url + id + postfix;
  449. }
  450. }
  451. return scrnurl;
  452. }
  453. /**********************************************************************************
  454. * 함수명 : sysf_getObjType
  455. * 설명 : Object의 type을 문자열로 얻어온다.
  456. * argument : objObj : type을 얻어올 Object
  457. (예 : mainframe, this.getOwnerFrame(), this, button,...)
  458. * return Type : string
  459. * 작성자 : 이상준
  460. **********************************************************************************/
  461. function sysf_getObjType(objObj)
  462. {
  463. var sType;
  464. if( utlf_isNull(objObj) ) return "";
  465. sType = objObj.toString().valueOf().substr(1,6);
  466. if( sType.toLowerCase() == "object" )
  467. return objObj.toString().valueOf().replace("[object ","").replace("]","");
  468. return "";
  469. }
  470. /**********************************************************************************
  471. * 함수명 : sysf_getFormURL
  472. * 설명 : 현재화면의 실제 URL 을 리턴한다.
  473. * argument : void
  474. * return Type : string
  475. * 작성자 : 이상준
  476. **********************************************************************************/
  477. function sysf_getFormURL()
  478. {
  479. var this_url, parent_type;
  480. // Division, Tab, PopupDiv인 경우에는 따로 처리해야 함
  481. parent_type = sysf_getObjType(parent);
  482. if( parent_type == "Div" || parent_type == "PopupDiv" || parent_type == "TabPage" )
  483. this_url = parent.url;
  484. else
  485. this_url = this.getOwnerFrame().formurl;
  486. return this_url;
  487. }
  488. /**********************************************************************************
  489. * 함수명 : sysf_realPath
  490. * 설 명 : application group의 real path를 반환한다.
  491. * argument : String - application group명
  492. * return Type : String
  493. **********************************************************************************/
  494. function sysf_realPath(sAppGroup)
  495. {
  496. var xadlPath = application.xadl;
  497. xadlPath = xadlPath.replace("file://", "");
  498. lastIndex = xadlPath.lastIndexOf("\/");
  499. var appPath = application.services[appGroup].url;
  500. appPath = appPath.replace(".", "");
  501. return xadlPath.substring(0, lastIndex) + appPath;
  502. }
  503. /**********************************************************************************
  504. * 함수명 : sysf_getURLprefix
  505. * 설 명 : application 의 URL prefix. (ex: http://his000dev.schmc.ac.kr:18088/himed2)
  506. * argument : String - application group명
  507. * return Type : String
  508. * 작성자 : 이상준
  509. **********************************************************************************/
  510. function sysf_getURLprefix()
  511. {
  512. if (gv_bUseSSL) {
  513. return gv_sURLprefixSSL;
  514. }
  515. else {
  516. return gv_sURLprefix;
  517. }
  518. }
  519. /**********************************************************************************
  520. * 함수명 : sysf_catchTrace
  521. * 설 명 : 예외처리(try catch)시 catch구문에 삽입한다.
  522. * argument : Error
  523. * return Type :
  524. * 작성자 : 임준호
  525. **********************************************************************************/
  526. function sysf_catchTrace(errParam){
  527. var sCurrTime = utlf_getNewDate().toFormatString("%Y-%m-%d %H:%M:%S");
  528. trace("[sysf_catchTrace: "+sCurrTime+"] "+errParam.name+":"+errParam.description);
  529. //trace(errParam.message);
  530. //trace(errParam.name);
  531. //trace(errParam.number & 0xFFFF);
  532. }
  533. /**********************************************************************************
  534. * 함수명 : sysf_isQuickView
  535. * 설 명 : quick view 인지 여부를 리턴한다.
  536. * argument : void
  537. * return Type : Boolean - quick view 여부 true:quickView false:project
  538. * 작성자 : 이상준
  539. **********************************************************************************/
  540. function sysf_isQuickView() {
  541. var bResult = false;
  542. try{
  543. agv_objAppTopPath;
  544. }catch(e){
  545. bResult = true;
  546. }
  547. return bResult;
  548. }
  549. /**********************************************************************************
  550. * 함수명 : sysf_messageBox
  551. * 설 명 : 형식화된 메시지 박스를 출력한다.
  552. * argument : pMessage - 메시지
  553. * pCode - 코드정보
  554. * pOptMsg - 옵션 메시지
  555. * pOptFont - 폰트 옵션(color : 색상, size : 크기, type : 타입(bold italic)) 추가 18.11.05 smkim
  556. * return Type : String - 메시지 (yes=6, no=7)
  557. * 작성자 : 이상준
  558. **********************************************************************************
  559. *I001=처리되었습니다.
  560. *I002=완료되었습니다.
  561. *I003=필수입력입니다.
  562. *I004=없습니다.
  563. *I005=환자입니다.
  564. *I006=가능합니다.
  565. *I007=확인하십시오.
  566. *I008=하십시오.
  567. *I009=입니다.
  568. *I010=있습니다.
  569. *I011=않습니다.
  570. *
  571. *C001=입력하십시오 !
  572. *C002=선택하십시오 !
  573. *C003=진행하십시오 !
  574. *
  575. *E001=할 수 없습니다.
  576. *E002=권한이 없습니다.
  577. *E003=초과하였습니다.
  578. *E004=일치하지 않습니다.
  579. *E005=선택되었습니다.
  580. *E006=중복되었습니다.
  581. *E007=않았습니다.
  582. *E008=입니다.
  583. *E009=실패하였습니다.
  584. *E010=사원만 가능합니다.
  585. *E011=이전만 가능합니다.
  586. *E012=이후만 가능합니다.
  587. *E013=데이터가 없습니다.
  588. *E014=존재하지 않습니다.
  589. *E015=자리까지만 가능합니다.
  590. *E016=유효하지 않습니다.
  591. *
  592. *Q001=삭제 하시겠습니까 ?
  593. *Q002=저장 하시겠습니까 ?
  594. *Q003=계속 진행하시겠습니까?
  595. *Q004=실행 하시겠습니까?
  596. *Q005=조회 하시겠습니까?
  597. *Q006=확정 하시겠습니까?
  598. *Q007=취소 하시겠습니까?
  599. *Q008=추가 하시겠습니까?
  600. *Q009=적용 하시겠습니까?
  601. *Q010=초기화 하시겠습니까?
  602. *Q011=확인 하시겠습니까?
  603. *Q012=수정 하시겠습니까?
  604. *Q013= 선택 하시겠습니까?
  605. *Q014= 등록 하시겠습니까?
  606. *Q015= 재요청 하시겠습니까?
  607. *Q016= 종결된 기록지입니다. 기록내용을 수정하시겠습니까?
  608. *
  609. *S001=하시려면 예(Yes)\n아니면 아니오(No)
  610. *S002=저장하시려면 예(Yes)\n변경하시려면 아니오(No)
  611. *S003=pMessage 하시려면 예(Yes)\n pOptMsg 하시려면 아니오(No)
  612. *S004=하시려면 예(Yes)\n아니면 아니오(No)\n무시하시려면 취소를 선택하세요
  613. *S005=종결된 기록지입니다. 작업유형을 선택하십시오\n\n예 : 기록수정 / 아니오 : 신규기록생성
  614. *S006=pMessage 하시려면 예(Yes)\n pOptMsg[0] 하시려면 아니오(No)\n pOptMsg[1] 하시려면 취소를 선택하십시오.
  615. *S008=저장 하시겠습니까?(가야할 곳 출력)
  616. **********************************************************************************/
  617. function sysf_messageBox(pMessage, pCode, pOptMsg, pOptFont) {
  618. var alertMsg = null;
  619. var msgTitle = null;
  620. var msgType = null;
  621. var msgData = null;
  622. //alert: 1
  623. //confirm: 6: true, 7: false, 2:cancel
  624. var msgRtn = 1;
  625. // Title Message
  626. var sBoxType = "";
  627. if(!utlf_isNull(pCode)){
  628. sBoxType = pCode.substr(0,1);
  629. }
  630. switch(sBoxType){
  631. case "I": msgTitle = "정보";
  632. msgType = "information";
  633. break;
  634. case "C": msgTitle = "오류";
  635. msgType = "error";
  636. break;
  637. case "E": msgTitle = "경고";
  638. msgType = "warning";
  639. break;
  640. case "Q": msgTitle = "확인";
  641. msgType = "default";
  642. break;
  643. case "S": msgTitle = "선택";
  644. msgType = "default";
  645. break;
  646. default : msgTitle = "오류";
  647. msgType = "error";
  648. }
  649. // Message Data
  650. switch( pCode ){
  651. case "I000": alertMsg = ""; break;
  652. case "I001": alertMsg = " 처리되었습니다."; break;
  653. case "I002": alertMsg = " 완료되었습니다."; break;
  654. case "I003": alertMsg = " 필수입력입니다."; break;
  655. case "I004": alertMsg = " 없습니다."; break;
  656. case "I005": alertMsg = " 환자입니다."; break;
  657. case "I006": alertMsg = " 가능합니다."; break;
  658. case "I007": alertMsg = " 확인하십시오."; break;
  659. case "I008": alertMsg = " 하십시오."; break;
  660. case "I009": alertMsg = " 입니다."; break;
  661. case "I010": alertMsg = " 있습니다."; break;
  662. case "I011": alertMsg = " 않습니다.";break;
  663. case "C000": alertMsg = ""; break;
  664. case "C001": alertMsg = " 입력하십시오."; break;
  665. case "C002": alertMsg = " 선택하십시오."; break;
  666. case "C003": alertMsg = " 진행하십시오."; break;
  667. case "E000": alertMsg = ""; break;
  668. case "E001": alertMsg = " 할 수 없습니다."; break;
  669. case "E002": alertMsg = " 권한이 없습니다."; break;
  670. case "E003": alertMsg = " 초과하였습니다."; break;
  671. case "E004": alertMsg = " 일치하지 않습니다."; break;
  672. case "E005": alertMsg = " 선택되었습니다."; break;
  673. case "E006": alertMsg = " 중복되었습니다."; break;
  674. case "E007": alertMsg = " 않았습니다."; break;
  675. case "E008": alertMsg = " 입니다."; break;
  676. case "E009": alertMsg = " 실패하였습니다."; break;
  677. case "E010": alertMsg = " 사원만 가능합니다."; break;
  678. case "E011": alertMsg = " 이전만 가능합니다."; break;
  679. case "E012": alertMsg = " 이후만 가능합니다."; break;
  680. case "E013": alertMsg = " 데이터가 없습니다."; break;
  681. case "E014": alertMsg = " 존재하지 않습니다."; break;
  682. case "E015": alertMsg = " 자리까지만 가능합니다."; break;
  683. case "E016": alertMsg = " 유효하지 않습니다."; break;
  684. case "Q000": alertMsg = ""; break;
  685. case "Q001": alertMsg = " 삭제 하시겠습니까?"; break;
  686. case "Q002": alertMsg = " 저장 하시겠습니까?"; break;
  687. case "Q003": alertMsg = " 계속 진행하시겠습니까?"; break;
  688. case "Q004": alertMsg = " 실행 하시겠습니까?"; break;
  689. case "Q005": alertMsg = " 조회 하시겠습니까?"; break;
  690. case "Q006": alertMsg = " 확정 하시겠습니까?"; break;
  691. case "Q007": alertMsg = " 취소 하시겠습니까?"; break;
  692. case "Q008": alertMsg = " 추가 하시겠습니까?"; break;
  693. case "Q009": alertMsg = " 적용 하시겠습니까?"; break;
  694. case "Q010": alertMsg = " 초기화 하시겠습니까?"; break;
  695. case "Q011": alertMsg = " 확인 하시겠습니까?"; break;
  696. case "Q012": alertMsg = " 수정 하시겠습니까?"; break;
  697. case "Q013": alertMsg = " 선택 하시겠습니까?";break;
  698. case "Q014": alertMsg = " 등록 하시겠습니까?";break;
  699. case "Q015": alertMsg = " 재요청 하시겠습니까?";break;
  700. case "Q016": alertMsg = " 종결된 기록지입니다. 기록내용을 수정하시겠습니까?";break;
  701. case "Q017": alertMsg = "\r\n전자동의서로 출력하시겠습니까?"; break;
  702. case "Q018": alertMsg = ""; break; // 20200221 이돈희 : 코로나19관련 응급의학과 외래에서 코로나 환자에 대한 급여, 비급여처방
  703. case "Q019": alertMsg = ""; break; // 20200222 이돈희 : 코로나19관련 응급의학과 외래에서 음압격리관리료 처방 발행 유무
  704. case "Q020": alertMsg = ""; break; // 20200227 이돈희 : 처방창에서 대리처방 확인
  705. case "Q021": alertMsg = ""; break; // 20200229 이돈희 : 코로나19관련 PCR 검사 처방 시 급여, 전액본인부담 관련
  706. case "Q999": alertMsg = ""; break;
  707. case "S001": alertMsg = " 하시려면 예(Yes)\n아니면 아니오(No)를 선택하십시오."; break;
  708. case "S002": alertMsg = " 저장하시려면 예(Yes)\n변경하시려면 아니오(No)를 선택하십시오"; break;
  709. case "S003": alertMsg = " 하시려면 예(Yes)\n" + pOptMsg + " 하시려면 아니오(No)를 선택하십시오.";break;
  710. //case "S004": alertMsg = " 하시려면 예(Yes)\n아니면 아니오(No)\n무시하시려면 취소를 선택하십시오";break;
  711. case "S004": alertMsg = " 하시려면 예(Yes)\n아니면 아니오(No)를 선택하십시오";break;
  712. case "S005": alertMsg = " 종결된 기록지입니다. 작업유형을 선택하십시오\n\n예 : 기록수정 / 아니오 : 신규기록생성";break;
  713. case "S006": alertMsg = " 하시려면 예(Yes)\n" + pOptMsg.split("|")[0] + " 하시려면 아니오(No)\n" + pOptMsg.split("|")[1] + " 하시려면 취소를 선택하십시오";break;
  714. case "S007": alertMsg = " \n재등록 하시려면 예(Yes), " + pOptMsg.split("|")[0] + " 아니오(No), " + pOptMsg.split("|")[1] + " 취소를 선택하십시오.";break;
  715. case "S008": alertMsg = " 저장 하시겠습니까?(가야할 곳 출력)";break;
  716. default : alertMsg = "";
  717. }
  718. if(utlf_isNull(pOptMsg)){
  719. msgData = pMessage+alertMsg;
  720. }else{
  721. //trace("pOptMsg="+pOptMsg);
  722. if (pCode == "S003" || pCode == "S006" || pCode == "S007") {
  723. msgData = pMessage+alertMsg;
  724. } else {
  725. msgData = pMessage+alertMsg + "\n" + pOptMsg;
  726. }
  727. }
  728. if(utlf_isNull(pOptFont)) {
  729. pOptFont = "";
  730. }
  731. if(sBoxType == "I" || sBoxType == "C" || sBoxType == "E" || utlf_isNull(sBoxType)){
  732. alert(msgData, msgTitle, msgType);
  733. msgRtn = 1;
  734. // }else if(sBoxType == "Q"){
  735. // if(confirm(msgData, msgTitle)){
  736. // msgRtn = 6;
  737. // }else{
  738. // msgRtn = 7;
  739. // }
  740. // //msgRtn = 2;
  741. }else if(sBoxType == "Q" || sBoxType == "S"){
  742. var nMoniterIndex = system.getMonitorIndex(system.cursorx, system.cursory); //모니터번호
  743. var objScreenInfo = system.getScreenRect(nMoniterIndex);
  744. var nScreenLeft = objScreenInfo.left;
  745. var nScreenTop = objScreenInfo.top;
  746. var nScreenRight = objScreenInfo.right;
  747. var nScreenBottom = objScreenInfo.bottom;
  748. var nScreenWidth = nScreenRight - nScreenLeft;
  749. var nScreenHeight = nScreenBottom - nScreenTop;
  750. var objMsgSize = sysf_getConfirmMsgSize(msgData, pOptFont);
  751. var nWidth = 374;
  752. var nHeight = 131;
  753. var nWidthGap = 0;
  754. var nHeightGap = 0;
  755. if(objMsgSize.width > 278){
  756. nWidth = nWidth + (objMsgSize.width-278);
  757. nWidthGap = (objMsgSize.width-278)/2;
  758. }
  759. if(objMsgSize.height > 20){
  760. nHeight = nHeight + (objMsgSize.height-20);
  761. nHeightGap = (objMsgSize.height-20);
  762. }
  763. var nLeft = (nScreenLeft+(nScreenWidth/2))-(nWidth/2);
  764. var nTop = (nScreenTop+(nScreenHeight/2))-(nHeight/2);
  765. var newChild = new ChildFrame();
  766. newChild.showtitlebar = false;
  767. newChild.autosize = false;
  768. //newChild.layered = true;
  769. newChild.resizable = false;
  770. newChild.init("form_confirm", nLeft, nTop, nLeft+nWidth, nTop+nHeight);
  771. newChild.formurl = "com_hismainxp::form_confirm.xfdl";
  772. newChild.openalign = "center middle";
  773. var objArgs = new Object();
  774. objArgs.plgv_pMessage = msgData;
  775. objArgs.plgv_sttWidth = objMsgSize.width;
  776. objArgs.plgv_sttHeight = objMsgSize.height;
  777. objArgs.plgv_nWidthGap = nWidthGap;
  778. objArgs.plgv_nHeightGap = nHeightGap;
  779. objArgs.plgv_msgTitle = msgTitle;
  780. objArgs.plgv_msgType = msgType;
  781. objArgs.plgv_msgBoxType = sBoxType;
  782. objArgs.plgv_optFont = pOptFont;
  783. objArgs.plgv_code = pCode;
  784. msgRtn = newChild.showModal("form_confirm", this.getOwnerFrame(), objArgs);
  785. }
  786. return msgRtn;
  787. }
  788. function sysf_getConfirmMsgSize(sMsg, pOptfont){
  789. var objExtCommon = new ExtCommon();
  790. // DB로 부터 받은 메세지의 줄바꿈이 '\r' 이 들어가 있는 경우에 대한 예외처리 추가
  791. sMsg = sMsg.replace(/\r\n/g, '\n');
  792. sMsg = sMsg.replace(/\r/g, '\n');
  793. var arrMsg = sMsg.split("\n");
  794. var nRowCnt = arrMsg.length;
  795. var nLineSpace = 0;
  796. var stt_getConfirmMsgSize = new Static("sysf_getConfirmMsgSize");
  797. try {
  798. if(!utlf_isNull(pOptfont)) { // 폰트 옵션이 설정되어 있다면 적용하여 크기 계산
  799. if(!utlf_isNull(pOptfont.size) && pOptfont.size > 0)
  800. stt_getConfirmMsgSize.style.font.size = pOptfont.size;
  801. if(!utlf_isNull(pOptfont.type))
  802. stt_getConfirmMsgSize.style.font.type = pOptfont.type;
  803. if(!utlf_isNull(pOptfont.linespace) && pOptfont.linespace > 0){
  804. nLineSpace = pOptfont.linespace;
  805. }
  806. }
  807. } catch (e) {}
  808. var nMaxWidth = 0;
  809. var nHeigth = objExtCommon.getTextExtent(stt_getConfirmMsgSize, sMsg)[0] + nLineSpace;
  810. if(nRowCnt == 1){
  811. nMaxWidth = objExtCommon.getTextExtent(stt_getConfirmMsgSize, sMsg)[1];
  812. }else{
  813. for(var i in arrMsg){
  814. var nCurrWidth = objExtCommon.getTextExtent(stt_getConfirmMsgSize, arrMsg[i])[1];
  815. if(nCurrWidth > nMaxWidth){
  816. nMaxWidth = nCurrWidth;
  817. }
  818. }
  819. }
  820. var objMsgSize = new Object();
  821. objMsgSize.width = nMaxWidth+1;
  822. objMsgSize.height = nHeigth*nRowCnt;
  823. return objMsgSize;
  824. }
  825. /**********************************************************************************
  826. * 함수명 : sysf_getTitleLoginDate
  827. * 설 명 : 로그인 시간 반환
  828. * argument :
  829. * return Type : String
  830. * 작성자 : 임준호
  831. **********************************************************************************/
  832. function sysf_getTitleLoginDate(isSimple){
  833. var arrWeekarr = new Array("일", "월", "화", "수", "목", "금", "토");
  834. var sDt = sysf_getUserInfo("logindt");
  835. if(utlf_isNull(sDt)) return "";
  836. var sDtyear = sDt.substring(0,4);
  837. var sDtmonth = sDt.substring(4,6);
  838. var sDtday = sDt.substring(6,8);
  839. var sDthour = sDt.substring(8,10);
  840. var sDtmin = sDt.substring(10,12);
  841. var dtVal = new Date(sDtmonth+"/"+sDtday+"/"+sDtyear);
  842. var sDtWeek = arrWeekarr[dtVal.getDay()];
  843. var sStr = "";
  844. if(isSimple) {
  845. sStr = sDtyear + sDtmonth + sDtday;
  846. } else {
  847. sStr = sDtyear + "년" + sDtmonth + "월" + sDtday + "일 (" + sDtWeek + ") " + sDthour +"시" + sDtmin +"분";
  848. }
  849. return sStr;
  850. }
  851. /**********************************************************************************
  852. * 함수명 : sysf_getSystemCd
  853. * 설 명 : 시스템 코드를 반환한다.
  854. * argument :
  855. * return Type : String
  856. * 작성자 : 임준호
  857. **********************************************************************************/
  858. function sysf_getSystemCd(){
  859. //시스템코드를 가져온다.
  860. return sysf_getSystemInfo("systemcd");
  861. }
  862. /**********************************************************************************
  863. * 함수명 : sysf_getMISSystemCd
  864. * 설 명 : MIS시스템 코드를 반환한다.
  865. * argument :
  866. * return Type : String
  867. * 작성자 : 임준호
  868. **********************************************************************************/
  869. function sysf_getMISSystemCd(){
  870. var sSystemcd = sysf_getSystemCd();
  871. var sSysteminstcd = sSystemcd.substring(3,6);
  872. var sMissystemcd = "";
  873. /*
  874. 직할병원의 001 로 비직할인 경우 해당 시스템코드의 MIS로(예:MIS015)
  875. */
  876. if (sSysteminstcd == "011" || sSysteminstcd == "012" || sSysteminstcd == "013" || sSysteminstcd == "014"){
  877. sMissystemcd = "MIS001";
  878. } else {
  879. sMissystemcd = "MIS" + sSysteminstcd;
  880. }
  881. return sMissystemcd;
  882. }
  883. /**********************************************************************************
  884. * 함수명 : sysf_isRealServer
  885. * 설 명 : 현재 접속 서버가 운영서버인지를 반환한다.
  886. * argument : isExceptLocalSever - 로컬에서도 접속 DB에 따라 운영으로 체크 할지
  887. (true : 로컬서버에서 운영 DB 접속중이라면 운영으로 반환
  888. , 값 없음 : 로컬서버 미체크(실제 운영 서버만 true로 반환))
  889. * return Type : Boolean
  890. * 작성자 : 김상목
  891. **********************************************************************************/
  892. function sysf_isRealServer(isExceptLocalSever) {
  893. var result = false;
  894. var systeminstnm = sysf_getUserInfo("systeminstnm");
  895. if(!utlf_isNull(systeminstnm) && systeminstnm.indexOf("운영") >= 0) {
  896. if(gv_currentInstnm == "개인로컬") {
  897. if(isExceptLocalSever == true)
  898. result = true;
  899. } else {
  900. result = true;
  901. }
  902. }
  903. return result;
  904. }
  905. /**********************************************************************************
  906. * 함수명 : sysf_getBizName
  907. * 설 명 : 업무구분코드로 시작되는 문자열을 넘기면, 업무구문 문자열을 반환한다.
  908. * argument : sBizCode - 업무구분코드
  909. * return Type : String - 업무구분문자열
  910. * 작성자 : 임준호
  911. **********************************************************************************/
  912. function sysf_getBizName(sBizCode){
  913. var sFirstChar = sBizCode.charAt(2);
  914. // trace("sFirstChar : " + sFirstChar);
  915. var sBizName = "";
  916. switch(sFirstChar) {
  917. case 'P': // 원무
  918. case 'p':
  919. sBizName = "pam";
  920. break;
  921. case 'M': // EMR
  922. case 'm':
  923. sBizName = "emr";
  924. break;
  925. case 'A': // 진료지원
  926. case 'a':
  927. sBizName = "ast";
  928. break;
  929. case 'L': // LIS
  930. case 'l':
  931. sBizName = "lis";
  932. break;
  933. case 'R': // MIS
  934. case 'r':
  935. sBizName = "mis";
  936. break;
  937. case 'Z': // 공통
  938. case 'z':
  939. sBizName = "com";
  940. break;
  941. case 'S': // 통합통계
  942. case 's':
  943. sBizName = "sts";
  944. break;
  945. case 'C': // CRM
  946. case 'c':
  947. sBizName = "crm";
  948. break;
  949. case 'I': // CRC(임상지원센터)
  950. case 'i':
  951. sBizName = "crc";
  952. break;
  953. case 'D': // CRD(전자카드)
  954. case 'd':
  955. sBizName = "crd";
  956. break;
  957. case 'T': // 임시
  958. case 't':
  959. sBizName = "tmp";
  960. break;
  961. default: // unknown
  962. sBizName = "";
  963. break;
  964. }
  965. return sBizName;
  966. }
  967. /**********************************************************************************
  968. * 함수명 : sysf_checkFormUpdate
  969. * 설명 : 화면의 값이 변경 되었는지 여부를 저장하고 있는 gvFormUpdateYN 전역 변수값을 return
  970. * argument : none
  971. * return Type : Boolean (true or false)
  972. * 작성자 : tobesoft
  973. **********************************************************************************/
  974. function sysf_checkFormUpdate() {
  975. var rtn;
  976. var val = sysf_getGlobalVariable("gvFormUpdateYN");
  977. if(utlf_isNull(val) || val == false || val == "false")
  978. {
  979. val = false;
  980. }
  981. return val;
  982. //return gvFormUpdateYN;
  983. }
  984. /**********************************************************************************
  985. * 함수명 : sysf_setFormUpdate
  986. * 설명 : 화면의 컴퍼넌트의 값이 변경되 었을 때 폼이 변경 되었음을
  987. gvFormUpdateYN 전역 변수에 true 설정하여 저장한다.( frmf_setInputNodeCurPid에서 사용)
  988. * argument : none
  989. * return Type : none
  990. * 작성자 : tobesoft
  991. ex) sysf_setFormUpdate();
  992. **********************************************************************************/
  993. function sysf_setFormUpdate() {
  994. sysf_setGlobalVariable("gvFormUpdateYN", "true","");
  995. //gvFormUpdateYN = true;
  996. }
  997. /****************************************************************************************
  998. * Function : sysf_getCurrentMonitorNumber
  999. * Description : 현재 화면이 위치한 모니터 번호를 가져온다.
  1000. * Argument :
  1001. * return type : Number - 모니터번호
  1002. * Creator : 임준호
  1003. ****************************************************************************************/
  1004. function sysf_getCurrentMonitorNumber(){
  1005. var monitorIndex = 0;
  1006. if(frmf_isPopup()){
  1007. monitorIndex = system.getMonitorIndex(this.getOwnerFrame().position.left, this.getOwnerFrame().position.top);
  1008. }else{
  1009. try {
  1010. monitorIndex = system.getMonitorIndex(application.mainframe.position.left, application.mainframe.position.top);
  1011. } catch (e) {
  1012. }
  1013. }
  1014. return monitorIndex;
  1015. }
  1016. /********************************************************************************************************************/
  1017. /************************* 사용자 세션정보 제공 함수 *************************************************************/
  1018. /********************************************************************************************************************/
  1019. /**********************************************************************************
  1020. * 함수명 : sysf_getUserId
  1021. * 설 명 : 사용자 세션정보에서 user id를 가져온다.
  1022. * argument :
  1023. * return Type : String - user id
  1024. * 작성자 : 임준호
  1025. **********************************************************************************/
  1026. function sysf_getUserId(){
  1027. return sysf_getUserInfo("userid");
  1028. }
  1029. /**********************************************************************************
  1030. * 함수명 : sysf_getUserName
  1031. * 설 명 : 사용자 세션정보에서 user name을 가져온다.
  1032. * argument :
  1033. * return Type : String - user name
  1034. * 작성자 : 임준호
  1035. **********************************************************************************/
  1036. function sysf_getUserName(){
  1037. return sysf_getUserInfo("usernm");
  1038. }
  1039. /**********************************************************************************
  1040. * 함수명 : sysf_getUserGroupList
  1041. * 설 명 : 사용자가 속한 특수 사용자 그룹 목록을 반환한다.
  1042. * argument :
  1043. * return Type : Array - user group list
  1044. * 작성자 : 임준호
  1045. **********************************************************************************/
  1046. function sysf_getUserGroupList(){
  1047. var sUsergrp = sysf_getUserInfo("usergrp");
  1048. if (utlf_isNull(sUsergrp)) {
  1049. return null;
  1050. }else{
  1051. return sUsergrp.split(",");
  1052. }
  1053. }
  1054. /**********************************************************************************
  1055. * 함수명 : sysf_getUserInfo
  1056. * 설명 : 인자값에 해당하는 사용자세션정보를 리턴한다.
  1057. * argument : 세션키
  1058. * return Type : 세션값
  1059. * 작성자 : 이상준
  1060. **********************************************************************************/
  1061. function sysf_getUserInfo(key) {
  1062. var ret = gds_userInfo.getColumn(0,key);
  1063. if(utlf_isNull(ret)) ret = "";
  1064. return ret;
  1065. }
  1066. /**********************************************************************************
  1067. * 함수명 : sysf_getUserInfos
  1068. * 설명 : 사용자 세션정보 제공함수 userinfos
  1069. * argument :
  1070. * return Type : String - 세션정보(구분자|)
  1071. * 작성자 : 임준호
  1072. **********************************************************************************/
  1073. function sysf_getUserInfos() {
  1074. return fDecodeUTF8(fDecode64(sysf_getUserInfo("sessioninfo")));
  1075. }
  1076. function fDecode64(inp) {
  1077. inp = new String(inp);
  1078. var ttb = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
  1079. var ret = new Array(inp.length*3/4);
  1080. var c1, c2, c3;
  1081. var e1, e2, e3, e4;
  1082. var i = 0;
  1083. var j = 0;
  1084. do {
  1085. e1 = ttb.indexOf(inp.charAt(i++));
  1086. e2 = ttb.indexOf(inp.charAt(i++));
  1087. e3 = ttb.indexOf(inp.charAt(i++));
  1088. e4 = ttb.indexOf(inp.charAt(i++));
  1089. c1 = (e1<<2)|(e2>>4);
  1090. c2 = ((e2&15)<<4)|(e3>>2);
  1091. c3 = ((e3&3)<<6)|e4;
  1092. ret[j++] = c1;
  1093. if (e3 != 64) {
  1094. ret[j++] = c2;
  1095. }
  1096. if (e4 != 64) {
  1097. ret[j++] = c3;
  1098. }
  1099. } while (i < inp.length);
  1100. return ret;
  1101. }
  1102. function fDecodeUTF8(barr) {
  1103. var str="";
  1104. for(i=0; i<barr.length; i++) {
  1105. if((barr[i] & 240) == 224) {
  1106. c = ((barr[i]&15)<<12) | ((barr[i+1]&63)<<6) | (barr[i+2]&63) ;
  1107. str += String.fromCharCode(c);
  1108. i +=2;
  1109. } else {
  1110. str += String.fromCharCode(barr[i]);
  1111. }
  1112. }
  1113. return str;
  1114. }
  1115. /**********************************************************************************
  1116. * 함수명 : sysf_checkUserGroup
  1117. * 설 명 : 사용자가 주어진 특수 사용자 그룹에 속해있는지 여부를 반환한다.
  1118. * argument :
  1119. * return Type : Boolean - 특수 사용자 그룹 여부
  1120. * 작성자 : 임준호
  1121. **********************************************************************************/
  1122. function sysf_checkUserGroup(sGrpName){
  1123. var arrUsergrplist = sysf_getUserGroupList();
  1124. if (utlf_isNull(arrUsergrplist)){
  1125. return false;
  1126. }
  1127. for(var i in arrUsergrplist){
  1128. if(sGrpName == arrUsergrplist[i]){
  1129. return true;
  1130. }
  1131. }
  1132. return false;
  1133. }
  1134. /********************************************************************************************************************/
  1135. /************************* 공통 세션 변수 관련 함수 **************************************************************/
  1136. /********************************************************************************************************************/
  1137. /**********************************************************************************
  1138. * 함수명 : sysf_getPropertyName
  1139. * 설 명 : 세션 변수명을 생성하여 반환한다.
  1140. * argument : sKey - 세션 변수 key
  1141. * sBizCode - 업무구분코드
  1142. * return Type : String - property name
  1143. * 작성자 : 임준호
  1144. **********************************************************************************/
  1145. function sysf_getPropertyName(sKey, sBizCode){
  1146. var sBizName = "";
  1147. var sPropertyName = "";
  1148. if (utlf_isNull(sBizCode)){
  1149. sBizName = "";
  1150. }else{
  1151. sBizName = sysf_getBizName(sBizCode)+"_";
  1152. }
  1153. return sysf_getSystemCd()+"_"+sBizName+"gsv_"+sKey;
  1154. }
  1155. /**********************************************************************************
  1156. * 함수명 : sysf_setGlobalVariable
  1157. * 설 명 : 세션변수를 저장한다.
  1158. * argument : sKey - 세션변수 key값
  1159. * sValue - 세션변수 value값
  1160. * sBizCode - 업무구분코드
  1161. * return Type : Boolean - 저장 성공 여부
  1162. * 작성자 : 임준호
  1163. * 수정내역 : 1. TF연동(20141015. 손병은)
  1164. **********************************************************************************/
  1165. function sysf_setGlobalVariable(sKey, sValue, sBizCode){
  1166. try{
  1167. var sValName = sysf_getPropertyName(sKey, sBizCode);
  1168. agv_objBizVariable[sValName] = sValue;
  1169. if(key == "timediff") return;
  1170. xxf_tfSetGlobalVariable(sKey, sValue, sBizCode);
  1171. return true;
  1172. }catch(e){
  1173. //sysf_catchTrace(e);
  1174. return false;
  1175. }
  1176. }
  1177. /**********************************************************************************
  1178. * 함수명 : sysf_getGlobalVariable
  1179. * 설 명 : 세션변수를 반환한다.
  1180. * argument : sKey - 세션변수 key값
  1181. * sBizCode - 업무구분코드
  1182. * return Type : String - 세션변수 value
  1183. * 작성자 : 임준호
  1184. **********************************************************************************/
  1185. function sysf_getGlobalVariable(sKey, sBizCode){
  1186. try{
  1187. var sValName = sysf_getPropertyName(sKey, sBizCode)
  1188. return agv_objBizVariable[sValName];
  1189. }catch(e){
  1190. //sysf_catchTrace(e);
  1191. return "";
  1192. }
  1193. }
  1194. /**********************************************************************************
  1195. * 함수명 : sysf_setModelProperty
  1196. * 설 명 : 세션변수를 입력한다.(bizCode 없이 직접 입력)
  1197. * argument : sKey - 세션변수 key값
  1198. * sValue - 세션변수 값
  1199. * 작성자 : 김상목
  1200. **********************************************************************************/
  1201. function sysf_setModelProperty(sKey, sValue){
  1202. try{
  1203. agv_objBizVariable[sKey] = sValue;
  1204. xxf_tfSetModelProperty(sKey, sValue);
  1205. }catch(e){
  1206. //sysf_catchTrace(e);
  1207. }
  1208. }
  1209. /**********************************************************************************
  1210. * 함수명 : sysf_getModelProperty
  1211. * 설 명 : 세션변수를 입력한다.
  1212. * argument : sKey - 세션변수 key값
  1213. * return Type : String - 세션변수 값
  1214. * 작성자 : 김상목
  1215. **********************************************************************************/
  1216. function sysf_getModelProperty(sKey){
  1217. try{
  1218. return agv_objBizVariable[sKey];
  1219. }catch(e){
  1220. //sysf_catchTrace(e);
  1221. return "";
  1222. }
  1223. }
  1224. /**********************************************************************************
  1225. * 함수명 : sysf_setModelAttribute
  1226. * 설 명 : 세션변수를 입력한다.(TF의 model.setAttribute)
  1227. * argument : sKey - 세션변수 key값
  1228. * sValue - 세션변수 값
  1229. * 작성자 : 김상목
  1230. **********************************************************************************/
  1231. function sysf_setModelAttribute(sKey, sValue){
  1232. try{
  1233. agv_objBizAttribute[sKey] = sValue;
  1234. xxf_tfSetModelAttribute(sKey, sValue);
  1235. }catch(e){
  1236. //sysf_catchTrace(e);
  1237. }
  1238. }
  1239. /**********************************************************************************
  1240. * 함수명 : sysf_getModelAttribute
  1241. * 설 명 : 세션변수를 입력한다.(TF의 model.getAttribute)
  1242. * argument : sKey - 세션변수 key값
  1243. * return Type : String - 세션변수 값
  1244. * 작성자 : 김상목
  1245. **********************************************************************************/
  1246. function sysf_getModelAttribute(sKey){
  1247. try{
  1248. return agv_objBizAttribute[sKey];
  1249. }catch(e){
  1250. //sysf_catchTrace(e);
  1251. return "";
  1252. }
  1253. }
  1254. /**********************************************************************************
  1255. * 함수명 : sysf_trace
  1256. * 설 명 : gv_bDebugMode 값에 따라 trace 출력
  1257. * argument : msg - trace 할 문자열
  1258. * return Type :
  1259. **********************************************************************************/
  1260. function sysf_trace(msg) {
  1261. if(gv_bDebugMode == "true")
  1262. trace(msg);
  1263. }
  1264. function sysf_commonCheckPassword(newpasswd, msgflag, userid){
  1265. if(userid == null){
  1266. userid = sysf_getUserId();
  1267. }
  1268. var alpha = /[a-zA-Z]/;
  1269. var number = /[0-9]/;
  1270. // var special = /[\-_=+\|()*&^%$#@!~`?\]}\[{\;:/.>,< ]/; // TF 에서는 이렇게 했는데 XP에서는 뒤쪽에 / 이거 때문에 에러남
  1271. var special = /[\-_=+\|()*&^%$#@!~`?\]}\[{\;:\/.>,< ]/;
  1272. var repeat = /(\w)\1\1\1/;
  1273. var strlength = /.{10,17}/;
  1274. var flag1,flag2,flag3
  1275. var lengthflag = false;
  1276. var repeatflag = false;
  1277. if(newpasswd.match(alpha) != null){
  1278. flag1=true;
  1279. }
  1280. if(newpasswd.match(number) != null){
  1281. flag2=true;
  1282. }
  1283. if(newpasswd.match(special) != null){
  1284. flag3=true;
  1285. }
  1286. if(newpasswd.match(strlength) != null){
  1287. lengthflag=true;
  1288. }
  1289. if(newpasswd.match(repeat) != null){
  1290. repeatflag=true;
  1291. }
  1292. if(!(flag1 && flag2 && flag3) || !lengthflag){
  1293. if(msgflag == null || msgflag == true)
  1294. sysf_messageBox("10~17자 영문, 숫자, 특수문자를 모두 사용하십시오.","E999");
  1295. return false;
  1296. }
  1297. if(repeatflag==true){
  1298. if(msgflag == null || msgflag == true)
  1299. sysf_messageBox("패스워드에 같은 문자/숫자를 4번 이상 사용하실 수 없습니다.","E999");
  1300. return false;
  1301. }
  1302. if(newpasswd.toUpperCase().indexOf(userid.toUpperCase()) > -1){
  1303. if(msgflag == null || msgflag == true)
  1304. sysf_messageBox("ID 또는 사번과 동일한 문자는 사용하실 수 없습니다.","E999");
  1305. return false;
  1306. }
  1307. return true;
  1308. }
  1309. /**********************************************************************************
  1310. * 함수명 : sysf_setSecurityLogging
  1311. * 설 명 : 로그아웃 시간 저장
  1312. * argument :
  1313. * return Type :
  1314. **********************************************************************************/
  1315. function sysf_setSecurityLogging() {
  1316. var isCDW = false;
  1317. try {
  1318. isCDW = gv_isCDW;
  1319. } catch(e) {
  1320. }
  1321. var CDWyn = (isCDW) ? "Y" : "N";
  1322. tranf_submit({
  1323. id: "logoutdt_update"
  1324. , service: "hismainapp.Login"
  1325. , method: "reqSetSecurityLogging"
  1326. , args: "CDWyn="+wrapQuote(CDWyn)
  1327. , error: false
  1328. , async: false
  1329. , force: true
  1330. });
  1331. }
  1332. /**********************************************************************************
  1333. * 함수명 : sysf_getProcessID
  1334. * 설 명 : 프로세스ID 값을 조회
  1335. * argument :
  1336. * return Type :
  1337. **********************************************************************************/
  1338. function sysf_getProcessID() {
  1339. var exobj = new ExtCommon();
  1340. var processId = exobj.getCurrentProcessId();
  1341. exobj = null;
  1342. return processId;
  1343. }
  1344. /**********************************************************************************
  1345. * 함수명 : sysf_accountTrace
  1346. * 설 명 : 접속정보에 대한 로그 (프로세스ID, 접속기관, 사번, 이름, IP정보)
  1347. * argument :
  1348. * return Type :
  1349. **********************************************************************************/
  1350. function sysf_accountTrace(msg) {
  1351. trace("\n---- " + msg + " -------------------------------------" +
  1352. "\n|" +
  1353. "\n| " + sysf_getProcessID() + " (ProcessID), " + sysf_getUserInfo("systemcd") + ", " + sysf_getUserId() + ", " + sysf_getUserName() + ", " + sysf_getIPAddress() +
  1354. "\n|" +
  1355. "\n-----------------------------------------------------");
  1356. }
  1357. /**********************************************************************************
  1358. * 함수명 : sysf_getActionURL
  1359. * 설 명 : submitID가 포함된 전체 url 경로를 리턴한다
  1360. * argument : submitID (String)
  1361. : isTF (boolean) - 1.0 서버 주소로 가져오길 원할 때(2.0 서버는 한글처리가 안되는 이슈가 있어서 옵션 추가함)
  1362. * return Type : String - 전체 url
  1363. * 작성자 : 김상목
  1364. **********************************************************************************/
  1365. function sysf_getActionURL(submitID, isTF) {
  1366. return sysf_getDomain(isTF) + sysf_getActionURI(submitID);
  1367. }
  1368. /**********************************************************************************
  1369. * 함수명 : sysf_getDomain
  1370. * 설 명 : 서비스 url 주소
  1371. * argument : isTF (boolean) - 1.0 서버 주소로 가져오길 원할 때
  1372. * return Type : String - 서비스 url
  1373. * 작성자 : 김상목
  1374. **********************************************************************************/
  1375. function sysf_getDomain(isTF) {
  1376. var url = (isTF) ? gv_sTFURLprefix : sysf_getURLprefix();
  1377. return url.substr(0, url.length - 6);
  1378. //return "http://his031.knuh.kr";
  1379. }
  1380. /**********************************************************************************
  1381. * 함수명 : sysf_getActionURL
  1382. * 설 명 : context 아래의 경로에 submitID, business_id, screen_id 를 포함한 주소
  1383. * argument : submitID (String)
  1384. * return Type : String - context 아래 url
  1385. * 작성자 : 김상목
  1386. **********************************************************************************/
  1387. function sysf_getActionURI(submitID) {
  1388. var bizName = sysf_getBizName(submitID);
  1389. var scrnID = frmf_getScreenID();
  1390. return "/himed/webapps/hit/web/xrw/.live?submit_id=" + submitID + "&business_id=" + bizName + "&screen_id=" + scrnID;
  1391. }]]></Script>