comm_awt.xjs 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824
  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_awt.xjs
  6. * Creator : 김지훈
  7. * Make Date : 2014-12-22
  8. *
  9. * Description :
  10. *---------------------------------------------------------------------------------------
  11. * Modify Date Modifier Modify Description
  12. *---------------------------------------------------------------------------------------
  13. * 2014-02-18 HIT
  14. *
  15. *---------------------------------------------------------------------------------------
  16. ****************************************************************************************/
  17. var AwtxmlHttpRequest = null;
  18. var AwtAjaxUrl = sysf_getURLprefix() + "/webapps/com/hismainweb/jsp/awtAjaxOra.jsp"; //Awt조회 Ajax의 url
  19. var AwtCtrl = null; //Awt 입력중인 콤포넌트 객체(그리드에서 입력중일때는 그리드의 gridinput객체)
  20. var AwtCtrlDatagrid = null; //Awt 입력중인 콤포넌트가 그리드일때 해당 그래드 객체
  21. var AwtCtrlType = null; //Awt 입력중인 콤포넌트의 유형(gridinput:그리드, input,textarea 등)
  22. var AwtWordBegin = -1; //입력중인 문자열에서 구분문자(스페이스,엔터,' 등)으로 잘라야할 첫 위치
  23. var AwtWordEnd = -1; //입력중인 문자열에서 구분문자으로 잘라야할 끝 위치
  24. var AwtSendWord = null; //입력중인 문자열에서 구분문자으로 잘라진 단어(조회/변환할 단어)
  25. var AwtMode = null;
  26. var AwtTolText = null; //입력창의 전체 문자열
  27. var AwtCurrentPos = null; //입력창의 커서 위치
  28. var AwtObj = null; //입력창 오브젝트
  29. var AwtObjName = null; //입력창 오브젝트 종류
  30. var div_AwtViewer:Div = null; // AWT 조회 화면
  31. var isEnter = false; // 엔터키를 눌러 변환 하는 경우 true
  32. var oriIMEmode = ""; // 원래의 IMEMODE
  33. function awtf_AwtSearch(obj:Form, e:KeyEventInfo){
  34. AwtMode = null;
  35. //'F2':113
  36. if (e.keycode == 113) {
  37. if (awtf_AwtUseThisWindow() != '1')
  38. {
  39. return;
  40. }
  41. else
  42. {
  43. if(AwtGetSearchWordPopup(obj, e)) {
  44. AwtShow(obj);
  45. }
  46. // var objArg = new Object();
  47. // objArg.awtSendWord = AwtSendWord;
  48. // var iParam = frmf_modal("SMZWT00000", "SMZWT00000", objArg, null, mon, xpt, ypt, null, null, null, null, null, "P");
  49. // if(iParam != null && iParam != undefined && iParam != ""){
  50. // awtf_AwtSetResult(iParam, AwtMode);
  51. // }
  52. }
  53. // if (AwtGetSearchWordPopup()) {
  54. // awtf_AwtSearchLike(AwtSendWord);
  55. // AwtShow();
  56. // }
  57. }
  58. else {
  59. //'F10':121
  60. if (e.keycode == 121) {
  61. if (AwtStnsOn() != '1')
  62. return;
  63. if (AwtGetSearchWord(obj, e)) {
  64. AwtSearchSentense(AwtSendWord);
  65. }
  66. }
  67. else
  68. {
  69. //다음의 구분자로 단어를 자른다. ('space':32 ',':188 '.':190 "'":222)
  70. if (e.keycode == 32 || e.keycode == 188 || e.keycode == 190 || e.keycode == 222 || e.keycode == 13) {
  71. if (AwtOn() != '1')
  72. {
  73. return;
  74. }
  75. else
  76. {
  77. if (AwtGetSearchWord(obj, e)) {
  78. AwtSearchOne(AwtSendWord);
  79. } else {
  80. fChkGrid();
  81. }
  82. }
  83. }
  84. }
  85. }
  86. return true;
  87. }
  88. function AwtShow(obj:Form) {
  89. var AwtObj_xpt = system.clientToScreenX(AwtObj, 0);
  90. var AwtObj_ypt = system.clientToScreenY(AwtObj, 0);
  91. var obj_xpt2 = system.clientToScreenX(obj, 0);
  92. var obj_ypt2 = system.clientToScreenY(obj, 0);
  93. var xpt = AwtObj_xpt - obj_xpt2;
  94. var ypt = AwtObj_ypt - obj_ypt2;
  95. var width = AwtObj.position.width;
  96. var height = AwtObj.position.height;
  97. if(AwtObjName == "Grid") { // 그리드는 셀 단위로 처리 하도록 함
  98. var arrCellRect = AwtObj.getCellRect(AwtObj.currentrow, AwtObj.getCellPos());
  99. xpt += arrCellRect.left;
  100. width = arrCellRect.right - arrCellRect.left;
  101. height = arrCellRect.bottom;
  102. }
  103. if (obj.position.width < xpt + width) {
  104. xpt = xpt - 382;
  105. }
  106. if (obj.position.height < ypt + height + 222) {
  107. ypt = ypt - 222;
  108. } else {
  109. ypt = ypt + height;
  110. }
  111. if(xpt < 0) xpt = 0;
  112. else if(xpt > obj.position.width - 382) xpt = obj.position.width - 382;
  113. if(ypt < 0) ypt = 0;
  114. else if(ypt > obj.position.height - 222) xpt = obj.position.height - 222;
  115. if(div_AwtViewer == null) {
  116. div_AwtViewer = new Div("AwtViewer", xpt, ypt, xpt + 382, ypt + 222);
  117. div_AwtViewer.asyncmode = false;
  118. div_AwtViewer.url = "com_awtxp::SMZWT00000_AWT조회.xfdl";
  119. obj.addChild("AwtViewer", div_AwtViewer);
  120. div_AwtViewer.show();
  121. } else {
  122. div_AwtViewer.position.x = xpt;
  123. div_AwtViewer.position.y = ypt;
  124. div_AwtViewer.visible = true;
  125. }
  126. div_AwtViewer.initSearch(obj, AwtSendWord);
  127. }
  128. //화면 & 개인별 자동변환 사용여부 1:사용, 0:미사용
  129. function AwtStnsOn() {
  130. try {
  131. if(agv_objAppBottomPath.form.fGetUserAwtStnsYN() == "Y")
  132. return '1';
  133. } catch(e) {
  134. // alert('상용구 개인별 On/Off 설정을 가져오는데 오류가 발생했습니다.' + e.toString());
  135. }
  136. return '0';
  137. }
  138. //화면 & 개인별 자동변환 사용여부 1:사용, 0:미사용
  139. function AwtOn() {
  140. if (awtf_AwtUseThisWindow() != '1')
  141. return '0';
  142. try {
  143. if(agv_objAppBottomPath.form.fGetUserAwtYN() == "Y")
  144. return '1';
  145. } catch(e) {
  146. // alert('Awt 개인별 On/Off 설정을 가져오는데 오류가 발생했습니다.' + e.toString());
  147. }
  148. return '0';
  149. }
  150. function AwtSearchSentense(sendWord) {
  151. AwtMode = "sent";
  152. AwtxmlHttpPost();
  153. //구문 ctrl+space조회시 조회창f2에서 사용하는 단어그룹 설정으로 조회한다.
  154. //공용단어"C"로 조회하려면 첫번째 파라미처를 "C"로, 부서는 "D"로, 개인은 "P"로...
  155. var awttype = agv_objAppBottomPath.form.fGetUserAwtGrpCd();
  156. AwtSend("P", AwtMode, sendWord);
  157. }
  158. function AwtSearchOne(sendWord) {
  159. AwtMode = "conv";
  160. AwtxmlHttpPost();
  161. AwtSend(agv_objAppBottomPath.form.fGetUserAwtGrpCd(), AwtMode, sendWord);
  162. //위줄의 함수가 경북대병원은 fGetUserAwtGrpCd() ㄴ일수도 있음
  163. //(AwtSearchOne 함수 바로 윗줄에 같은 함수를 부르니 정확한 명칭은 참고..
  164. }
  165. //화면ID별로 awt를 사용할지 여부를 가져오는 함수
  166. function awtf_AwtUseThisWindow() {
  167. var screenid = frmf_getScreenID();
  168. if (screenid == "form") //form으로 시작하는 himainxp 프로젝트안의 화면은 사용X
  169. return '0';
  170. else if (screenid == "SMZWT00000") //Awt 조회 화면 자체(이 부분이 없어지면 SMZWT00000안에 SMZWT00000가 계속 생기는 무한루프 발생하므로 꼭 return '0')
  171. return '0';
  172. else if (screenid == "SMZUM00100") //himed상단에 환자정보를 표시하는 TF화면은 awt를 적용안함(적용시 불필요한 스크롤바가 생김)
  173. return '0';
  174. else if (screenid == "SMZUM00200") //Main화면 화면 영역은 사용X
  175. return '0';
  176. else if (screenid == "SMZUM00300") //상태표시줄 화면 영역은 사용X
  177. return '0';
  178. else if (screenid == "SMZSN00200") //공지사항 화면은 사용X
  179. return '0';
  180. else if (screenid == "SSZSN00100") //공지사항 화면은 사용X
  181. return '0';
  182. ///////// 화면별 설정을 DB로 별도 관리할때 DB에서 가져온 결과를 적용하는 부분을 여기에 추가해야 함
  183. var awtUse = '0';
  184. var awtyn;
  185. try{
  186. awtyn = isAwtScrnYN(screenid);
  187. if(awtyn == "Y"){
  188. awtUse = '1';
  189. }
  190. }catch(e){
  191. // alert('Awt 화면별 On/Off 설정을 가져오는데 오류가 발생했습니다.' + e.toString());
  192. }
  193. return awtUse;
  194. }
  195. //화면ID에 대해 AWT사용여부 확인
  196. function isAwtScrnYN(scrncd){
  197. if(gds_awtInfo.rowcount <= 0) return 'N';
  198. if (scrncd == "") {
  199. //if(awtList.indexOf("SMZWT00009")>=0){ // "com/awtweb/xrw/SMZWT00009_AWT DB서식 기록지에서 사용 여부.xrw" 가 AWT 미사용 화면리스트에 있으면
  200. if( gds_awtInfo.findRow("scrncd", "SMZWT00009") >= 0 ){
  201. return 'N';
  202. }
  203. return 'Y';
  204. }
  205. if(gds_awtInfo.findRow("scrncd", scrncd) >= 0){ // AWT 미사용 화면리스트에 있으면
  206. return 'N';
  207. }
  208. return 'Y';
  209. }
  210. function awtf_AwtSearchLike(sendWord,sendtype)
  211. {
  212. AwtMode = "list";
  213. AwtxmlHttpPost();
  214. if (sendtype == null)
  215. {
  216. sendtype = sysf_getUserInfo("awtgrpcd");
  217. }
  218. AwtSend(sendtype, AwtMode, sendWord);
  219. }
  220. //Awt ajax통신 객체 생성
  221. function AwtxmlHttpPost()
  222. {
  223. var objActiveX = new ActiveX();
  224. AwtxmlHttpRequest = objActiveX.createObject("Microsoft.XMLHTTP");
  225. }
  226. //Awt서버에 ajax요청을 보내는 함수
  227. function AwtSend(awtType, awtMode, strSpell)
  228. {
  229. var strPostValue=AwtXMLPattern(awtType, awtMode, strSpell);
  230. AwtxmlHttpRequest.open("POST", AwtAjaxUrl, false);
  231. AwtxmlHttpRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
  232. AwtxmlHttpRequest.setRequestHeader("Cache-Control:", "no-cache");
  233. AwtxmlHttpRequest.setRequestHeader("Pragma:", "no-cache");
  234. //AwtxmlHttpRequest.onreadystatechange = handleStateChange;
  235. try
  236. {
  237. AwtxmlHttpRequest.send(strPostValue);
  238. } catch(e) {
  239. alert("AWT 통신오류:"+e);
  240. return;
  241. }
  242. handleStateChange();
  243. }
  244. function handleStateChange()
  245. {
  246. if(AwtxmlHttpRequest.readyState == 1 || AwtxmlHttpRequest.readyState == 2 || AwtxmlHttpRequest.readyState == 3)
  247. {
  248. alert("처리중입니다");
  249. }
  250. if(AwtxmlHttpRequest.readyState == 4)
  251. {
  252. switch (AwtxmlHttpRequest.status)
  253. {
  254. case 404:
  255. //alert('오류: ' + AwtAjaxUrl + '이 존재하지 않음');
  256. break;
  257. case 200:
  258. AwtOnResult(AwtxmlHttpRequest.responseText.trim());
  259. break;
  260. default:
  261. //alert('오류: ' + AwtxmlHttpRequest.responseText);
  262. break;
  263. }
  264. }
  265. }
  266. //Awt서버에 보낼 구문 패턴을 만드는 함수
  267. function AwtXMLPattern(awtType, awtMode, strSpell)
  268. {
  269. var strXML = null;
  270. strXML = encodeURI("awtType="+awtType+"&userid="+sysf_getUserInfo("userid")+"&deptcd="+sysf_getUserInfo("dutplcecd")+"&strSpell="+strSpell+"&strFlag="+awtMode);
  271. return strXML;
  272. }
  273. function AwtOnResult(strVal)
  274. {
  275. if (strVal == null || strVal == "" || strVal == "null"){
  276. fChkGrid();
  277. return;
  278. }
  279. //AwtSearchLog("changed\t'" + strVal + "'\t" + AwtMode);
  280. nCurrent=0;
  281. // TF와 동일 하게 되어 있으나 XP에서는 기본 데이터가 \r\n이라 안나오는 경우가 발생하여 이 부분 주석 처리함
  282. //strVal = strVal.replace(/\r\n/g,"");
  283. if(AwtMode=="conv" || AwtMode=="sent" || AwtMode=="sentNconv")
  284. {
  285. if (strVal != null && strVal.length != 0) {
  286. awtf_AwtSetResult(strVal, AwtMode);
  287. }
  288. }
  289. else if(AwtMode=="list")
  290. {
  291. //frmf_modal("SMZWT00000", "SMZWT00000");
  292. var cnt = 0;
  293. if(strVal.length>0 && strVal.indexOf("□□□")>=0)
  294. {
  295. var strArr = strVal.split("□□□");
  296. this.ds_awt_grd.enableevent = false;
  297. for (var i = 0; i < strArr.length; i++) {
  298. if (strArr[i] != null && strArr[i] != "") {
  299. cnt++;
  300. var strToken = strArr[i].split("■■■");
  301. this.ds_awt_grd.addRow();
  302. var rowcnt = this.ds_awt_grd.rowcount - 1;
  303. this.ds_awt_grd.setColumn(rowcnt, "data", strToken[0]);
  304. this.ds_awt_grd.setColumn(rowcnt, "keyword", strToken[1]);
  305. }
  306. }
  307. this.ds_awt_grd.enableevent = true;
  308. this.ds_awt_grd.rowposition = 0;
  309. this.awt_grd.setFocus();
  310. }
  311. }
  312. }
  313. //Awt조회/변환된 결과를 입력중인 콤포넌트에 교체하는 함수 (Awt Browser에서 입력중인 화면으로 호출함)
  314. function awtf_AwtSetResult(awtResult, awtMode) {
  315. var result = null;
  316. var hanengmode = null;
  317. if (awtMode == "conv" || awtMode == "sent" || awtMode == "sentNconv") {
  318. var tokens = awtResult.split("||");
  319. hanengmode = tokens[0];
  320. result = tokens[1];
  321. } else {
  322. result = awtResult;
  323. }
  324. if (awtMode == "list") {
  325. }
  326. if (result == AwtSendWord) {
  327. // AwtHide();
  328. return;
  329. }
  330. var first = AwtTolText.substr(0, AwtWordBegin);
  331. var last = AwtTolText.substr(AwtWordEnd, AwtTolText.length);
  332. var cnt = 1;
  333. if (awtMode == "list")
  334. cnt = 0;
  335. AwtWordEnd = (first + result).length + cnt;
  336. //trace("최종 :" +first + result + last);
  337. if( AwtObjName == "Grid" ){
  338. var oDs = null;
  339. var sDs = AwtObj.binddataset;
  340. if(!utlf_isNull(sDs)) oDs = eval(sDs);
  341. if(!utlf_isNull(oDs)) oDs.enableevent = false;
  342. // // 변환 후 자동 한글 입력 되도록 수정
  343. // AwtObj.setCellProperty("body", AwtObj.getCellPos(), "editimemode", "hangul");
  344. // AwtObj.setCellProperty("body", AwtObj.getCellPos(), "editimemode", "none");
  345. AwtObj.showEditor(true);
  346. AwtObj.setEditText(first + result);
  347. AwtObj.setEditCaret(-1); // first와 result의 length로는 캐럿의 위치가 파악이 안됨(아마 개행문자가 계산되어버리는듯)
  348. var pos = AwtObj.getEditCaret() + ((awtMode == "conv") ? 1 : 0);// 그래서 뒤의 내용 붙히기 전에 끝으로 커서 보내놓고 그 다음에 그 뒤에 내용을 붙혀서 처리함
  349. AwtObj.setEditText(first + result + last);
  350. if(isEnter) {
  351. AwtObj.setEditCaret(pos + 1);
  352. } else {
  353. AwtObj.setEditCaret(pos);
  354. }
  355. // awt 변환 후 엔터키 눌렀을 때 저장 안되는 현상 수정(2016.04.07)
  356. //AwtObj.updateToDataset();
  357. if(!utlf_isNull(oDs)) oDs.enableevent = true;
  358. } else {
  359. AwtObj.setFocus();
  360. AwtObj.value = first + result;
  361. AwtObj.setCaretPos(-1); // first와 result의 length로는 캐럿의 위치가 파악이 안됨(아마 개행문자가 계산되어버리는듯)
  362. var pos = AwtObj.getCaretPos() + ((awtMode == "conv") ? 1 : 0); // 그래서 뒤의 내용 붙히기 전에 끝으로 커서 보내놓고 그 다음에 그 뒤에 내용을 붙혀서 처리함
  363. AwtObj.value = first + result + last;
  364. if(isEnter) {
  365. AwtObj.setCaretPos(pos + 1);
  366. } else {
  367. AwtObj.setCaretPos(pos);
  368. }
  369. // TextArea 일때 구문변환 후 키보드로 커서 위로 올릴때 위치 오류 나는 현상 수정 (2017.08.23 smkim)
  370. if(AwtObjName == "TextArea") {
  371. AwtObj.insertText(" ", pos);
  372. AwtObj.deleteText(pos, 1);
  373. }
  374. // 변환 후 자동 한글 입력 되도록 수정
  375. oriIMEmode = AwtObj.imemode;
  376. if(utlf_isNull(oriIMEmode)) oriIMEmode = "none";
  377. if(engCheck(result))
  378. AwtObj.imemode = "alpha";
  379. else
  380. AwtObj.imemode = "hangul";
  381. AwtObj.onkillfocus.addHandler(killFocuseHandler);
  382. // 해당 화면에서는 awt 동작 후 ontextchanged 이벤트 강제 발생하도록 함
  383. // 2016.04.05 화면체크에서 이벤트 유무로 변경.
  384. //var screenid = frmf_getScreenID();
  385. if( !utlf_isNull(AwtObj.ontextchanged.getHandler(0)) ){
  386. // if(screenid == "SMMMR00100" || screenid == "SMMMR02900"
  387. // || screenid == "SMMMR05000" || screenid == "SSMMR01100") { // SMMMR00100 : 진료기록메인, SMMMR02900 : 제증명, SMMMR05000 : 의뢰, SSMMR01100 : 서식로더
  388. AwtObj.ontextchanged.fireEvent(AwtObj, new TextChangedEventInfo);
  389. }
  390. // if(!utlf_isNull(result)) {
  391. // var fontStyle = AwtObj.currentstyle.font.toString().split(',');
  392. // var bold = false;
  393. // if(fontStyle.length > 2 && fontStyle[2] == "bold") bold = true;
  394. //
  395. // var objFont = utlf_getObjFont(fontStyle[1], fontStyle[0], bold); // 실제 폰트의 너비
  396. //
  397. // var rr = result.split('\n');
  398. // var height = 0;
  399. //
  400. // for(var i = 0; i < rr.length; i++) {
  401. // var objFontSize = utlf_getTextSize(rr[i], objFont);
  402. //
  403. // height += objFontSize.cy;
  404. // }
  405. //
  406. // sysf_trace("objFontSize.cy : " + objFontSize.cx + ", " + objFontSize.cy + ", " + height);
  407. if(!utlf_isNull(AwtObj.vscrollbar)) {
  408. var maxVal= AwtObj.vscrollbar.max;
  409. AwtObj.vscrollbar.pos += maxVal;
  410. //AwtObj.vscrollbar.pos += height;//maxVal;
  411. }
  412. //}
  413. }
  414. isEnter = false;
  415. if (AwtCtrl != null) {
  416. //if (awtMode == "matchone") {
  417. // if (awtMode == "conv" || awtMode == "sent" || awtMode == "sentNconv") {
  418. // if (hanengmode == "1") {
  419. // AwtCtrl.attribute("imemode") = "alpha";
  420. // body.attribute("imemode") = "alpha";
  421. // } else if (hanengmode == "2") {
  422. // AwtCtrl.attribute("imemode") = "hangul";
  423. // body.attribute("imemode") = "hangul";
  424. // }
  425. //
  426. // if (AwtCtrlType != "gridinput" && AwtCtrlType != "gridinput") {
  427. // model.setFocus("body");
  428. // model.setFocus(AwtCtrl.attribute("id"));
  429. // }
  430. // } else {
  431. // if (AwtCtrlType == "datagrid") {
  432. // if (AwtCtrlDatagrid != null) {
  433. // AwtCtrlDatagrid.editCell();
  434. // }
  435. // } else if (AwtCtrlType == "gridinput") {
  436. // if (AwtCtrlDatagrid != null) {
  437. // AwtCtrlDatagrid.editCell();
  438. // }
  439. // } else {
  440. // //do nothing
  441. // }
  442. // }
  443. }
  444. // AwtHide();
  445. //if (model.getFocus().substring(0, 4) != 'awt_')
  446. // return;
  447. // AwtSearchLog(AwtWordBegin + " " + AwtWordEnd);
  448. }
  449. function killFocuseHandler(obj, e:KillFocusEventInfo) {
  450. obj.imemode = oriIMEmode;
  451. obj.onkillfocus.removeHandler(killFocuseHandler);
  452. }
  453. function engCheck(str) {
  454. for (i = 0; i < str.length; i++) {
  455. ch = escape(str.charAt(i)); //ISO-Latin-1 문자셋으로 변경
  456. if (strCharByte(ch) == 2) {
  457. return false; // 한글
  458. }
  459. }
  460. return true; // 영어
  461. }
  462. function strCharByte(chStr) {
  463. if (chStr.substring(0, 2) == '%u') {
  464. if (chStr.substring(2,4) == '00')
  465. return 1;
  466. else
  467. return 2; //한글
  468. } else if (chStr.substring(0,1) == '%') {
  469. if (parseInt(chStr.substring(1,3), 16) > 127)
  470. return 2; //한글
  471. else
  472. return 1;
  473. } else {
  474. return 1;
  475. }
  476. }
  477. //Awt목록조회를 하는 함수
  478. function AwtGetSearchWordPopup(obj:Form, e:KeyEventInfo) {
  479. var cp = obj.getFocus();
  480. var cpName = (new String(cp)).replace("[object ", "");
  481. cpName = (new String(cpName)).replace("]", "");
  482. AwtObj = cp;
  483. AwtObjName = cpName;
  484. if (cp == null)
  485. return false;
  486. if( cpName == "Grid" ){
  487. var oDs = null;
  488. var sDs = AwtObj.binddataset;
  489. if(!utlf_isNull(sDs)) oDs = this.objects[sDs];
  490. if(!utlf_isNull(oDs)) {
  491. oDs.enableevent = false;
  492. } else {
  493. return false;
  494. }
  495. AwtCurrentPos = cp.getEditCaret();
  496. cp.showEditor(true);
  497. AwtTolText = (cp.currentrow < 0 || cp.currentcol < 0) ? "" : cp.getEditText();
  498. cp.showEditor(false);
  499. AwtObj.updateToDataset();
  500. if(!utlf_isNull(oDs)) oDs.enableevent = true;
  501. } else if( cpName == "Edit" || cpName == "TextArea" ){
  502. AwtTolText = cp.value;
  503. AwtCurrentPos = cp.getCaretPos();
  504. } else {
  505. return false;
  506. }
  507. // 입력하지 않고 F2 눌러도 awt 관리창 열리도록 수정
  508. if(AwtTolText == undefined || AwtTolText == null)
  509. AwtTolText = "";
  510. //return false;
  511. AwtWordEnd = AwtTolText.length;
  512. var foundC = false;
  513. var nowWordStartPos = AwtCurrentPos - 1; //space를 못찾으면 그냥 첫 위치(0)가 들어감
  514. for (j = nowWordStartPos; j >= 0; j--) {
  515. if (AwtTolText.charAt(j) == ' ' //space
  516. || AwtTolText.charAt(j) == ' ' //tab
  517. || AwtTolText.charAt(j) == '\n' //enter
  518. || AwtTolText.charAt(j) == '.' //.
  519. || AwtTolText.charAt(j) == ',' //,
  520. || AwtTolText.charAt(j) == '\'' //'
  521. || AwtTolText.charAt(j) == '"' //"
  522. ) {
  523. nowWordStartPos = j + 1;
  524. foundC = true;
  525. break;
  526. }
  527. }
  528. if (!foundC)
  529. nowWordStartPos = 0; //구문의 첫 글자부터 찾을 단어의 시작임
  530. foundC = false;
  531. for (k = nowWordStartPos; k < AwtTolText.length; k++) {
  532. if (AwtTolText.charAt(k) == ' ' //space
  533. || AwtTolText.charAt(k) == ' ' //tab
  534. || AwtTolText.charAt(k) == '.' //.
  535. || AwtTolText.charAt(k) == ',' //,
  536. || AwtTolText.charAt(k) == '\'' //'
  537. || AwtTolText.charAt(k) == '"' //"
  538. ) {
  539. nowWordEndPos = k;
  540. foundC = true;
  541. break;
  542. } else if(AwtTolText.charAt(k) == '\n') { //enter
  543. nowWordEndPos = k - 1;
  544. foundC = true;
  545. break;
  546. }
  547. }
  548. if (!foundC)
  549. nowWordEndPos = AwtTolText.length; //구문의 끝 글자까지 찾을 단어임
  550. if (nowWordStartPos == nowWordEndPos) {
  551. AwtSendWord = "";
  552. }
  553. AwtSendWord = AwtTolText.substring(nowWordStartPos, nowWordEndPos);
  554. AwtWordBegin = nowWordStartPos;
  555. AwtWordEnd = nowWordEndPos;
  556. //trace("nowWordStartPos : "+nowWordStartPos+"\nnowWordEndPos : "+nowWordEndPos+"\nAwtSendWord : "+AwtSendWord);
  557. return true;
  558. }
  559. //Awt단어 조회/변환을 실제로 수행하는 함수
  560. function AwtGetSearchWord(obj:Form, e:KeyEventInfo) {
  561. var cp = obj.getFocus();
  562. var cpName = (new String(cp)).replace("[object ", "");
  563. cpName = (new String(cpName)).replace("]", "");
  564. AwtObj = cp;
  565. AwtObjName = cpName;
  566. if (cp == null)
  567. return false;
  568. if( cpName == "Grid" ){
  569. var edittype = AwtObj.getCellProperty("body", AwtObj.getCellPos(), "edittype");
  570. if(!e.ctrlKey && e.keycode == 13 && (edittype == "text" || edittype == "textarea")) {
  571. return false;
  572. }
  573. var oDs = null;
  574. var sDs = AwtObj.binddataset;
  575. if(!utlf_isNull(sDs)) oDs = eval(sDs);
  576. // 스페이스바 연속 두번 누를 때 포커스 사라지는 현상 수정을 위해 이벤트 처리 주석
  577. // 현재 필요도 없는 로직인듯 (smkim - 16.10.27)
  578. //if(!utlf_isNull(oDs)) oDs.enableevent = false;
  579. AwtCurrentPos = cp.getEditCaret();
  580. //cp.showEditor(true); // 불필요해서 주석(2016.04.07)
  581. // getCellValue 편집중인 텍스트를 가져오지 못해서 getEditText로 변경함(2016.04.07)
  582. AwtTolText = cp.getEditText();//cp.getCellValue(cp.currentrow, cp.currentcol);
  583. if(utlf_isNull(AwtTolText)) AwtTolText = "";
  584. //AwtObj.setEditText(AwtTolText); // 불필요해서 주석(2016.04.07)
  585. //AwtObj.setEditCaret(-1); // 불필요해서 주석(2016.04.07)
  586. //cp.showEditor(false);
  587. //AwtObj.updateToDataset(); // 미리 데이터셋에 반영 해버리면 엔터키 눌렀을 때 저장 하는 로직이 처리 불가하여 주석(2016.04.07)
  588. //if(!utlf_isNull(oDs)) oDs.enableevent = true;
  589. } else if( cpName == "Edit" || cpName == "TextArea" ){
  590. AwtTolText = cp.value;
  591. if(utlf_isNull(AwtTolText)) AwtTolText = "";
  592. AwtCurrentPos = cp.getCaretPos();//cp.getSelect();//cp.getCaretPos();
  593. } else {
  594. return false;
  595. }
  596. if(AwtTolText == undefined || AwtTolText == null || AwtTolText == "")
  597. return false;
  598. AwtWordEnd = AwtTolText.length;
  599. var beforeIsGubun = false;
  600. var found1 = false;
  601. var foundC = false;
  602. var nowWordStartPos = AwtCurrentPos - 1; //space를 못찾으면 그냥 첫 위치(0)가 들어감
  603. for (j = nowWordStartPos; j >= 0; j--) {
  604. //alert(j + " " + text.charAt(j) + " " + foundC);
  605. if (AwtTolText.charAt(j) == ' ' //space
  606. || AwtTolText.charAt(j) == ' ' //tab
  607. || AwtTolText.charAt(j) == '\n' //enter
  608. || AwtTolText.charAt(j) == '.' //.
  609. || AwtTolText.charAt(j) == ',' //,
  610. || AwtTolText.charAt(j) == '\'' //'
  611. || AwtTolText.charAt(j) == '"' //"
  612. ) {
  613. if (j == nowWordStartPos) { //처음부터 구분자가 나오면
  614. if (beforeIsGubun == true) //좀전에 찾앗던 단어가 구분자이면...
  615. return false; //구분자가 두번연속으로 나온 경우리므로 return
  616. nowWordStartPos = j - 1; //구분자가 두번 반복될때를 대비해서 처음시작을 하나 이동시킴
  617. beforeIsGubun = true; //지금 찾은 단어가 구분자였음을 기록하고
  618. } else {
  619. if (foundC) {
  620. found1 = true;
  621. nowWordStartPos = j + 1;
  622. break;
  623. }
  624. }
  625. } else
  626. foundC = true;
  627. }
  628. if (!found1)
  629. if (nowWordStartPos == -1)
  630. return false; //내용이 모두 구분자임, 찾을 단어가 없음
  631. else
  632. nowWordStartPos = 0; //구문의 첫 글자부터 찾을 단어의 시작임
  633. var found2 = false;
  634. var nowWordEndPos = 0;
  635. for (k = nowWordStartPos; k < AwtTolText.length; k++) {
  636. if (AwtTolText.charAt(k) == ' ' //space
  637. || AwtTolText.charAt(k) == ' ' //tab
  638. || AwtTolText.charAt(k) == '.' //.
  639. || AwtTolText.charAt(k) == ',' //,
  640. || AwtTolText.charAt(k) == '\'' //'
  641. || AwtTolText.charAt(k) == '"' //"
  642. ) {
  643. found2 = true;
  644. nowWordEndPos = k;
  645. break;
  646. } else if( AwtTolText.charAt(k) == '\n') { //enter
  647. found2 = true;
  648. nowWordEndPos = k - 1;
  649. break;
  650. }
  651. }
  652. if (found2)
  653. nowWordEndPos; //찾아진 구분자까지
  654. else {
  655. if (AwtTolText.charAt(AwtTolText.length - 1) == ' ' //space
  656. || AwtTolText.charAt(AwtTolText.length - 1) == ' ' //tab
  657. || AwtTolText.charAt(AwtTolText.length - 1) == '\n' //enter
  658. || AwtTolText.charAt(AwtTolText.length - 1) == '.' //.
  659. || AwtTolText.charAt(AwtTolText.length - 1) == ',' //,
  660. || AwtTolText.charAt(AwtTolText.length - 1) == '\'' //'
  661. || AwtTolText.charAt(AwtTolText.length - 1) == '"' //"
  662. )
  663. nowWordEndPos = AwtTolText.length - 1; //마지막 글자까지
  664. else
  665. nowWordEndPos = AwtTolText.length; //마지막 글자까지
  666. }
  667. AwtSendWord = AwtTolText.substring(nowWordStartPos, nowWordEndPos);
  668. AwtWordBegin = nowWordStartPos;
  669. AwtWordEnd = nowWordEndPos;
  670. // 엔터키로 입력시에도 변환되도록 추가
  671. isEnter = (e.keycode == 13) ? true : false;
  672. return true;
  673. }
  674. function fChkGrid()
  675. {
  676. if(AwtObjName == "Grid"){
  677. // AwtObj.showEditor(true);
  678. // AwtObj.setEditCaret(-1); // 커서가 제일 뒤로 이동하는 현상 수정(2016.04.07)
  679. }
  680. }]]></Script>