SSMMR07100.js 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431
  1. /**
  2. * 기록 모니터링과 관련한 모듈이다.
  3. *
  4. * 상단환자정보와 Global정보가 틀리는 현상이 발생하여 원인파악을 위해서
  5. * TF log파일을 첨부하여 Mail을 전송하는 기능.
  6. *
  7. * 2009.11.18 안치원 신규 - TFLog파일을 첨부하여 Mail을 전송하는 기능.
  8. */
  9. // TFLog파일 기본위치
  10. var gLOG_DIR_MMR071 = "C:\\Program Files\\himed\\components\\TrustForm\\TFViewer";
  11. // 에러코드
  12. var gMMR_INVALID_PATINFO_MMR071 = "MMR_INVALID_PATINFO"; //대상자 변경시 발생
  13. var gMMR_INVALID_RECINFO_MMR071 = "MMR_INVALID_RECINFO"; //기록 저장시 발생
  14. // 쓰기 할 디렉토리
  15. var STD_DIR_MMR071 = "C:\\Temp";
  16. /*
  17. * Mail을 발송한다.
  18. *
  19. * fromAddr : 발신자의 Email Address
  20. * toAddr : 수신자의 Email Address - '|'을 구분자로 여러개 입력가능
  21. * subject : 메일 제목
  22. * content : 메일 내용
  23. */
  24. function sendMail_MMR071(fromAddr, toAddr, subject, content)
  25. {
  26. model.makeValue("/root/send/mail/info/fromaddr", fromAddr);
  27. model.makeValue("/root/send/mail/info/toaddr", toAddr);
  28. model.makeValue("/root/send/mail/info/subject", subject);
  29. model.makeValue("/root/send/mail/info/content", content);
  30. model.refresh();
  31. //alert("break");
  32. submit("TRMMR07101");
  33. if (grd_attach.rows-1 > 0) {
  34. var fso = new ActiveXObject("Scripting.FileSystemObject");
  35. for (var i=1; i<grd_attach.rows; i++) {
  36. try {
  37. fso.DeleteFile(grd_attach.valueMatrix(i, 0));
  38. } catch (e) {
  39. }
  40. }
  41. }
  42. model.removeNodeset("/root/send/mail/attach");
  43. model.resetInstanceNode("/root/send/mail/info");
  44. model.refresh();
  45. }
  46. /*
  47. * System Mail을 발송한다.
  48. * TF Log file을 attach하여 발송한다.
  49. */
  50. function sendSystemMail_MMR071(mailFlag, addText)
  51. {
  52. var content = "";
  53. if (isNull(addText)) {
  54. addText = "";
  55. }
  56. try {
  57. fCreateFileAttach(getSystemInstance_MMR071());
  58. //0이면 오늘부터 검색하고, -1이면 어제부터 검색한다.
  59. // var diffDay = 0;
  60. // var fileCnt = 0;
  61. // for (var i=0; i<10; i++) {
  62. // fileCnt += fAddLogFile_MMR071(diffDay);
  63. // if (fileCnt == 0) {
  64. // diffDay -= 1;
  65. // } else {
  66. // break;
  67. // }
  68. // }
  69. // content += "Attach log file count : " + fileCnt +"<BR>";
  70. // content += "<BR>"+addText;
  71. sendMail_MMR071("", "", mailFlag, content);
  72. } catch(e) {
  73. alert(e);
  74. content = mailFlag +"\n"+ content;
  75. model.addLog(content);
  76. }
  77. }
  78. /*
  79. * 첨부파일을 추가한다.
  80. * filePath : 첨부 할 파일의 Path
  81. */
  82. function addAttachFile_MMR071(filePath)
  83. {
  84. grd_attach.addRow(false);
  85. grd_attach.valueMatrix(grd_attach.rows - 1, 0) = filePath;
  86. // alert(grd_attach.valueMatrix(grd_attach.rows - 1, 0));
  87. // model.refresh();
  88. }
  89. /*
  90. * Log 파일을 첨부한다.
  91. * diffDay : 0이면 오늘 생성된 파일, -1이면 어제 생성된 파일만을 첨부한다.
  92. */
  93. function fAddLogFile_MMR071(diffDay) {
  94. var arrFileNm = fGetToDayLogFile_MMR071(diffDay);
  95. for (var i=0; i<arrFileNm.length; i++) {
  96. addAttachFile_MMR071(arrFileNm[i]);
  97. }
  98. return arrFileNm.length;
  99. }
  100. /*
  101. * 파일을 생성하고 첨부한다.
  102. */
  103. function fCreateFileAttach(str, filePath)
  104. {
  105. fCheckWriteFolder(STD_DIR_MMR071);
  106. if (isNull(filePath)) {
  107. filePath = STD_DIR_MMR071 + "\\srcreen_instance.xml";
  108. }
  109. var fso = new ActiveXObject("Scripting.FileSystemObject");
  110. var a = fso.CreateTextFile(filePath, true);
  111. a.WriteLine(str);
  112. a.Close();
  113. addAttachFile_MMR071(filePath);
  114. }
  115. /*
  116. * 해당일에 작성된 파일목록을 반환한다.
  117. * 해당일은 현재일의 diffDay 일자이다.
  118. */
  119. function fGetToDayLogFile_MMR071(diffDay)
  120. {
  121. if (diffDay == null)
  122. diffDay = 0;
  123. var curDate = new Date();
  124. curDate = curDate.getAddDate(diffDay, "D");
  125. var folderName = curDate.getDateFormat("YYYY-MM");
  126. var day = parseInt(curDate.getDateFormat("DD"));
  127. var arrFileNm = new Array();
  128. var path = gLOG_DIR_MMR071 +"\\"+ folderName;
  129. var sysCd = getSystemCd();
  130. if (isNull(sysCd)) {
  131. sysCd = "DEV999";
  132. }
  133. var preFixNm = "["+sysCd+"_bizMain]-"+day+"-";
  134. // alert(path +" || "+ preFixNm);
  135. var fso = new ActiveXObject("Scripting.FileSystemObject");
  136. fCheckWriteFolder(STD_DIR_MMR071);
  137. if (fso.FolderExists(path)) {
  138. var f = fso.GetFolder(path);
  139. var fc = new Enumerator(f.files);
  140. var copyFileName = null;
  141. for (; !fc.atEnd(); fc.moveNext()) {
  142. if (fc.item().name.indexOf(preFixNm) == 0) {
  143. // copyFileName = fc.item().path+".txt";
  144. copyFileName = STD_DIR_MMR071 +"\\"+ fc.item().name;
  145. fso.CopyFile(fc.item().path, copyFileName, true);
  146. arrFileNm[arrFileNm.length] = copyFileName;
  147. }
  148. }
  149. }
  150. return arrFileNm;
  151. }
  152. function fCheckWriteFolder(folderName)
  153. {
  154. var fso = new ActiveXObject("Scripting.FileSystemObject");
  155. if (fso.FolderExists(folderName) == false) {
  156. fso.CreateFolder(folderName);
  157. }
  158. }
  159. /*
  160. * 화면들의 인스턴스를 가져온다.
  161. * Top환자화면, Main화면, This화면, Opener화면, 진료대상자화면, paminfo
  162. */
  163. function getSystemInstance_MMR071_old()
  164. {
  165. var xml = "<!-- create date:" + getCurrentDateTime();
  166. xml += " user:";
  167. xml += getUserId();
  168. xml += " ";
  169. xml += getUserName();
  170. xml += " -->\n";
  171. var thisScreenID = "";
  172. var mainScreenID = "";
  173. try {
  174. //환자정보화면의 인스턴스를 설정한다.
  175. var topViewer = getViewer("patientInfo");
  176. xml += "\n<!-- 1. top "+topViewer.window.javascript.getScreenID()+" instance -->\n";
  177. xml += getInstanceXML_MMR071(topViewer.window.model.instance1, "/root");
  178. } catch (e) {
  179. xml += "<!-- top instance get fail -->\n";
  180. // alert(1);
  181. }
  182. xml += "\n";
  183. try {
  184. //본화면의 인스턴스를 설정한다.
  185. thisScreenID = getScreenID();
  186. xml += "\n<!-- 2. this "+thisScreenID+" instance -->\n";
  187. xml += getInstanceXML_MMR071(model.instance1, "/root");
  188. } catch (e) {
  189. xml += "<!-- this instance get fail -->\n";
  190. // alert(2);
  191. }
  192. xml += "\n";
  193. try {
  194. //메인화면의 인스턴스를 설정한다. 메인화면과 본화면이 같다면 하지 않는다.
  195. var mainViewer = getMainViewer();
  196. mainScreenID = mainViewer.window.javascript.getScreenID();
  197. xml += "\n<!-- 3. main "+mainScreenID+" instance -->\n";
  198. if (getScreenID() != mainScreenID) {
  199. xml += getInstanceXML_MMR071(mainViewer.model.instance1, "/root");
  200. } else {
  201. xml += "<!-- 3. main instance dispense -->\n";
  202. }
  203. } catch (e) {
  204. xml += "<!-- 3. main instance get fail -->\n";
  205. // alert(3);
  206. }
  207. xml += "\n";
  208. try {
  209. //Opener의 인스턴스를 설정한다. 위에서 설정된것이 있다면 하지 않는다.
  210. if (opener != null && opener != undefined) {
  211. var openScreenID = opener.window.javascript.getScreenID();
  212. xml += "\n<!-- 4. opener "+openScreenID+" instance -->\n";
  213. if (thisScreenID != openScreenID && mainScreenID != openScreenID) {
  214. xml += getInstanceXML_MMR071(opener.model.instance1, "/root");
  215. } else {
  216. xml += "<!-- 4. opener instance dispense -->\n";
  217. }
  218. } else {
  219. xml += "<!-- 4. not exists opener -->";
  220. }
  221. } catch (e) {
  222. xml += "<!-- 4. opener instance get fail -->\n";
  223. // alert(4);
  224. }
  225. xml += "\n";
  226. try {
  227. //진료대상자리스트화면의 인스턴스를 설정한다.
  228. var patListViewer = getOpenWindow("SMMMO04100");
  229. xml += "\n<!-- 5. patList SMMMO04100 instance -->\n";
  230. if (patListViewer != null) {
  231. xml += getInstanceXML_MMR071(patListViewer.model.instance1, "/root");
  232. } else {
  233. xml += "<!-- 5. not exists patList -->";
  234. }
  235. } catch (e) {
  236. xml += "<!-- 5. patList instance get fail -->\n";
  237. // alert(5);
  238. }
  239. xml += "\n";
  240. try {
  241. //GlobalVariable-paminfo를 설정한다.
  242. var sPamInfo = getGlobalVariable("paminfo");
  243. xml += "\n<!-- 6. paminfo csv-->\n";
  244. xml += sPamInfo;
  245. } catch (e) {
  246. xml += "<!-- 6. paminfo csv get fail -->\n";
  247. // alert(6);
  248. }
  249. xml += "\n";
  250. try {
  251. //서식로더의 inner viewer의 인스턴스를 설정한다.
  252. if (thisScreenID == "SSMMR01100") {
  253. xml += "\n<!-- 7. SSMMR01100 inner viewer instance -->\n";
  254. xml += getInstanceXML_MMR071(ivw_base.model.instance1, "/root");
  255. } else {
  256. xml += "<!-- 7. SSMMR01100 inner viewer dispense -->\n";
  257. }
  258. } catch (e) {
  259. xml += "<!-- 7. SSMMR01100 inner viewer get fail -->\n";
  260. // alert(7);
  261. }
  262. xml += "\n";
  263. try {
  264. //서식로더가 컨설트일때 부분서식의 인스턴스를 설정한다.
  265. if (thisScreenID == "SSMMR01100" && ivw_base.window.javascript.getScreenID() == "SMMMR04900") {
  266. xml += "\n<!-- 8. SSMMR01100 consult inner viewer instance -->\n";
  267. xml += getInstanceXML_MMR071(ivw_base.model.instance1, "/root");
  268. } else {
  269. xml += "<!-- 8. SSMMR01100 consult inner viewer dispense -->\n";
  270. }
  271. } catch (e) {
  272. xml += "<!-- 8. SSMMR01100 consult inner viewer get fail -->\n";
  273. // alert(7);
  274. }
  275. return xml;
  276. }
  277. function getSystemInstance_MMR071(arrViewer)
  278. {
  279. var xml = "<!-- create date:" + getCurrentDateTime();
  280. xml += " user:";
  281. xml += getUserId();
  282. xml += " ";
  283. xml += getUserName();
  284. xml += " -->\n";
  285. var thisScreenID = "";
  286. var mainScreenID = "";
  287. var tempScreenID = "";
  288. var tempViewer = null;
  289. if (arrViewer == null || arrViewer == undefined) {
  290. arrViewer = new Array ("TOP", "MAIN", "OPENER", "PATLIST", "LOADER", "PAMINFO");
  291. }
  292. for (var i=0; i<arrViewer.length; i++) {
  293. try {
  294. if (i == 0) {
  295. thisScreenID = getScreenID();
  296. xml += getXMLinfo_MMR071("THIS", thisScreenID, model.instance1, "/root");
  297. if (thisScreenID == "SSMMR01100") {
  298. xml += getLoaderInnerXML();
  299. }
  300. }
  301. if (arrViewer[i] == "TOP") {
  302. tempViewer = getViewer("patientInfo");
  303. }
  304. else if (arrViewer[i] == "MAIN") {
  305. tempViewer = getMainViewer();
  306. }
  307. else if (arrViewer[i] == "OPENER" && opener != null && opener != undefined) {
  308. tempViewer = opener;
  309. }
  310. else if (arrViewer[i] == "PATLIST") {
  311. tempViewer = getOpenWindow("SMMMO04100");
  312. }
  313. else if (arrViewer[i] == "LOADER") {
  314. tempViewer = getOpenWindow("SSMMR01100");
  315. }
  316. else if (arrViewer[i] == "PAMINFO") {
  317. tempViewer == null;
  318. var sPamInfo = getGlobalVariable("paminfo");
  319. xml += "\n<!-- begin of " +arrViewer[i]+" get Instance -->\n";
  320. xml += sPamInfo;
  321. xml += "\n<!-- end of " +arrViewer[i]+ " get Instance -->";
  322. }
  323. else {
  324. tempViewer == null;
  325. }
  326. if (tempViewer != null) {
  327. xml += getXMLinfo_MMR071(arrViewer[i], tempViewer.window.javascript.getScreenID(), tempViewer.window.model.instance1, "/root");
  328. }
  329. }
  330. catch(e) {
  331. }
  332. }
  333. return xml;
  334. }
  335. /*
  336. * 인스턴스를 가져온다.
  337. */
  338. function getXMLinfo_MMR071(title, screenID, instance, xPath)
  339. {
  340. var xml = "\n";
  341. try {
  342. xml += "<!-- begin of " +title+" ["+screenID+"] get Instance -->\n";
  343. xml += instance.selectSingleNode(xPath).xml
  344. xml += "\n<!-- end of " +title+ " get Instance -->";
  345. } catch (e) {
  346. xml += "<!-- " +title+ " get Fail -->\n";
  347. }
  348. return xml;
  349. }
  350. /*
  351. * 인스턴스를 가져온다.
  352. */
  353. function getInstanceXML_MMR071(instance, xPath)
  354. {
  355. return instance.selectSingleNode(xPath).xml;
  356. }
  357. function getLoaderInnerXML()
  358. {
  359. var xml = "";
  360. try {
  361. xml += getXMLinfo_MMR071("LOADER INNER", ivw_base.window.javascript.getScreenID(), ivw_base.window.model.instance1, "/root");
  362. var items = ivw_base.window.javascript.gItemCds;
  363. for (var i = 0; i < items.length; i++)
  364. {
  365. var ctrlIvw = ivw_base.window.document.controls("ivw_" + items[i]);
  366. if (ctrlIvw != null && ctrlIvw.visible) {
  367. xml += getXMLinfo_MMR071("LOADER INNER INNER", ctrlIvw.attribute("id"), ctrlIvw.window.model.instance1, "/root");
  368. }
  369. }
  370. } catch (e) {
  371. }
  372. return xml;
  373. }