common.js 169 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083408440854086408740884089409040914092409340944095409640974098409941004101410241034104410541064107410841094110411141124113411441154116411741184119412041214122412341244125412641274128412941304131413241334134413541364137413841394140414141424143414441454146414741484149415041514152415341544155415641574158415941604161416241634164416541664167416841694170417141724173417441754176417741784179418041814182418341844185418641874188418941904191419241934194419541964197419841994200420142024203420442054206420742084209421042114212421342144215421642174218421942204221422242234224422542264227422842294230423142324233423442354236423742384239424042414242424342444245424642474248424942504251425242534254425542564257425842594260426142624263426442654266426742684269427042714272427342744275427642774278427942804281428242834284428542864287428842894290429142924293429442954296429742984299430043014302430343044305430643074308430943104311431243134314431543164317431843194320432143224323432443254326432743284329433043314332433343344335433643374338433943404341434243434344434543464347434843494350435143524353435443554356435743584359436043614362436343644365436643674368436943704371437243734374437543764377437843794380438143824383438443854386438743884389439043914392439343944395439643974398439944004401440244034404440544064407440844094410441144124413441444154416441744184419442044214422442344244425442644274428442944304431443244334434443544364437443844394440444144424443444444454446444744484449445044514452445344544455445644574458445944604461446244634464446544664467446844694470447144724473447444754476447744784479448044814482448344844485448644874488448944904491449244934494449544964497449844994500450145024503450445054506450745084509451045114512451345144515451645174518451945204521452245234524452545264527452845294530453145324533453445354536453745384539454045414542454345444545454645474548454945504551455245534554455545564557455845594560456145624563456445654566456745684569457045714572457345744575457645774578457945804581458245834584458545864587458845894590459145924593459445954596459745984599460046014602460346044605460646074608460946104611461246134614461546164617461846194620462146224623462446254626462746284629463046314632463346344635463646374638463946404641464246434644464546464647464846494650465146524653465446554656465746584659466046614662466346644665466646674668466946704671467246734674467546764677467846794680468146824683468446854686468746884689469046914692469346944695469646974698469947004701470247034704470547064707470847094710471147124713471447154716471747184719472047214722472347244725472647274728472947304731473247334734473547364737473847394740474147424743474447454746474747484749475047514752475347544755475647574758475947604761476247634764476547664767476847694770477147724773477447754776477747784779478047814782478347844785478647874788478947904791479247934794479547964797479847994800480148024803480448054806480748084809481048114812481348144815481648174818481948204821482248234824482548264827482848294830483148324833483448354836483748384839484048414842484348444845484648474848484948504851485248534854485548564857485848594860486148624863486448654866486748684869487048714872487348744875487648774878487948804881488248834884488548864887488848894890489148924893489448954896
  1. // 화면 연계 관련 함수들
  2. var gvMyUIDPath = null;
  3. var gvOpUIDPath = null;
  4. var gvChUIDPath = null;
  5. var gvDate = null;
  6. var gvParamPath = null;
  7. var gvPropPath = null;
  8. var gvAuthPath = null;
  9. var gvTitlePath = null;
  10. var gvScnTypePath = null;
  11. var gvErrorMsgPath = null;
  12. var gvSystemPath = null;
  13. var gvMenuPath = null;
  14. var gvMenuGroupCdPath = null;
  15. var gvMenuPrestDeptCdPath = null;
  16. var gvMenuItemCdPath = null;
  17. var gvMenuParamPath = null;
  18. var gvSystemCd = null;
  19. var gvAwtYNPath = null;
  20. //var gvMyCBOnClosePath = null;
  21. //var gvOpCBOnClosePath = null;
  22. // 레포트 연계 관련
  23. var gvReportPath = null;
  24. var gvSubReportPath = null;
  25. var gvReportPropsPath = null;
  26. var gvReportParamsPath = null;
  27. var gvReportOptionsPath = null;
  28. //환자정보 연계 관련
  29. var gvPatientInfoPath = null;
  30. var gvOperationInfoPath = null;
  31. var gvConsultInfoPath = null;
  32. var gvPatientInfoFlagPath = null;
  33. var gvOrderBasicInfoPath = null;
  34. //공통메뉴 관련
  35. var gvPopupMenuPath = null;
  36. //온라인 도움말 관련
  37. var gvHelpPage = null;
  38. // 화면정보
  39. var gvTaskBarHeight = 34; // 작업표시줄 높이
  40. var gvDefaultScrWidth = 1211; // 기본 nU 프로그램 화면 너비(캡션 & 보더 폭 제외)
  41. var gvDefaultScrHeight = 784; // 기본 nU 프로그램 화면 높이(캡션 & 보더 폭 제외)
  42. // 화면좌표저장여부
  43. var gvSaveLoc = null;
  44. // 경북대 20101028
  45. var fEssentialBackColor = "#ffe4b5";
  46. /**
  47. * @-----------------------------------------------------------------------------------
  48. * @desc : 폼이 로딩되고 스크립트엔진이 초기화 되며 실행되는 함수
  49. * @param :
  50. * @return :
  51. * @-----------------------------------------------------------------------------------
  52. */
  53. function xforms_model_construct() {
  54. gvPropPath="/root/properties";
  55. gvMyUIDPath=gvPropPath+"/uid/myself";
  56. gvOpUIDPath=gvPropPath+"/uid/opener";
  57. gvChUIDPath=gvPropPath+"/uid/children/";
  58. // gvMyCBOnClosePath=gvPropPath+"/callback/onclose/myself";
  59. // gvOpCBOnClosePath=gvPropPath+"/callback/onclose/opener";
  60. gvParamPath=gvPropPath+"/parameters";
  61. gvChildClosePath=gvPropPath+"/childclose";
  62. gvSystemPath=gvPropPath+"/domain";
  63. gvAuthPath=gvPropPath+"/auth";
  64. gvMenuPath=gvPropPath+"/menu";
  65. gvMenuGroupCdPath=gvMenuPath+"/menugroupcd";
  66. gvMenuPrestDeptCdPath=gvMenuPath+"/menuprestdeptcd";
  67. gvMenuItemCdPath=gvMenuPath+"/menuitemcd";
  68. gvMenuParamPath=gvMenuPath+"/menuparam";
  69. gvTitlePath=gvPropPath+"/title";
  70. gvScnTypePath=gvPropPath+"/stype";
  71. gvErrorMsgPath=gvPropPath+"/error";
  72. gvReportPath=gvPropPath+"/report/mainreport";
  73. gvSubReportPath=gvPropPath+"/report/subreport";
  74. gvReportPropsPath=gvReportPath+"/props";
  75. gvReportParamsPath=gvReportPath+"/params";
  76. gvReportOptionsPath=gvReportPath+"/options";
  77. gvPatientInfoPath=gvPropPath+"/patient";
  78. gvOperationInfoPath=gvPatientInfoPath+"/operationinfo";
  79. gvConsultInfoPath=gvPatientInfoPath+"/consultinfo";
  80. gvPatientInfoFlagPath=gvPatientInfoPath+"/patientflag";
  81. gvOrderBasicInfoPath=gvPropPath+"/orderbasicinfo";
  82. gvPopupMenuPath=gvPropPath+"/popupmenu";
  83. gvSaveLocPath = gvPropPath + "/saveloc";
  84. model.makeValue(gvSaveLocPath, "true");
  85. // 화면의 UID 설정(생성시간을 사용)
  86. // window.load()는 xforms_model_construct() 후 리턴되므로 여기에서 uid를 설정해야함
  87. gvDate = new Date();
  88. var uid = gvDate.getTime();
  89. model.makeValue(gvMyUIDPath,uid);
  90. model.makeValue(gvOpUIDPath,"");
  91. model.makeValue(gvSystemPath,"");
  92. if (isPopup()) {
  93. // opener uid를 가져온다.
  94. model.setValue(gvOpUIDPath,opener.model.getValue(gvMyUIDPath));
  95. // opener callback할 함수을 저장한다.
  96. // model.makeValue(gvOpCBOnClosePath,opener.model.getValue(gvMyCBOnClosePath));
  97. // opener의 latest에 uid를 넣어준다.
  98. opener.model.makeValue(gvChUIDPath+"latest",uid);
  99. // opener의 권한정보를 가져온다.
  100. // 2008.08.29 김기호 수정-직접 부여된 권한코드가 존재할 경우 해당 권한코드로 바꾼다.
  101. var spclauth = getGlobalVariable("spclscrnauth");
  102. setGlobalVariable("spclscrnauth", "");
  103. if (spclauth != "") {
  104. model.makeValue(gvAuthPath, spclauth);
  105. } else {
  106. // 특정하게 부여한 코드가 없는 경우는 부모창의 권한코드를 상속받는다.
  107. model.makeValue(gvAuthPath, opener.model.getValue(gvAuthPath));
  108. }
  109. // opener의 메뉴파라미터정보를 가져온다.
  110. model.makeValue(gvMenuParamPath,opener.model.getValue(gvMenuParamPath));
  111. // 연결된 시스템의 시스템 코드를 저장한다.(타시스템 화면 Open시 필요)
  112. model.setValue(gvSystemPath,getGlobalVariable("systemcode"),true);
  113. setGlobalVariable("systemcode","");
  114. // 윈도우 크기 설정
  115. setWindowSize();
  116. // 타이블 정보를 설정한다. 아래 addOpenWindow() 이전에 수행되어야 한다.
  117. initTitle();
  118. // 열린 화면 목록에 등록
  119. addOpenWindow();
  120. } else {
  121. // 타이블 정보를 설정한다.
  122. initTitle();
  123. // 메뉴에서 설정한 권한 값을 가져온다.
  124. // 2008.08.29 김기호 수정-직접 부여된 권한코드가 존재할 경우 해당 권한코드로 바꾼다.
  125. var spclauth = getGlobalVariable("spclscrnauth");
  126. setGlobalVariable("spclscrnauth", "");
  127. if (spclauth != "") {
  128. // 특정하게 부여한 코드가 존재하면 메뉴권한에서 내려준 권한을 무시하고 새로 부여한 코드로 덮어쓴다.
  129. setGlobalVariable("scrnauth", spclauth);
  130. }
  131. setScreenAuth();
  132. // 메뉴Parameter정보를 설정한다.
  133. setScreenMenuParameter();
  134. }
  135. // 메뉴정보를 설정한다.
  136. setScreenMenuGroup();
  137. // 메뉴Item정보를 설정한다.
  138. setScreenMenuItem();
  139. // 메뉴에서 설정한 사용부서 값을 가져온다.
  140. setScreenPrestDeptCd();
  141. event.stopPropagation(); // 이벤트 버블링 막기(아니면 이 루틴이 3번 호출된다.)
  142. }
  143. /**
  144. * @-----------------------------------------------------------------------------------
  145. * @desc : 폼이 로딩된 후 모든 초기화가 끝나고 폼이 화면에 표시된 이후에 발생(컨트롤에 접근가능)
  146. * @param :
  147. * @return :
  148. * @-----------------------------------------------------------------------------------
  149. */
  150. function xforms_ready() {
  151. // 연결된 시스템의 시스템 코드를 저장한다.(타시스템 화면 Open시 필요)
  152. // if(window.type == "iviewer") {
  153. // model.setValue(gvSystemPath,parent.model.getValue(gvSystemPath),true);
  154. // }
  155. // 팝업메뉴 초기화
  156. window.setPopupMenu(false);
  157. // 팝업아이콘 설정 - 2012.06.14
  158. window.setIcon(htmlwindow.faviconURL);
  159. // 화면별 도움말key 설정
  160. //지정된 컨트롤에 접근하기 위한 단축키를 설정할 수 있다.
  161. //기본적으로 accesskey 속성은 컨트롤에 onaccesskey 이벤트 발생 후 DOMActivate 이벤트를 Dispatch 한다.
  162. // 다른 화면에 포함된 iviewer 인 경우 accesskey 없앰(아니면 도움말이 여러번 뜨는 현상 발생 & 리포트도 iviewer 임(id:ivr_report)
  163. if(window.type != "iviewer") {
  164. body.attribute("accesskey") = "f1";
  165. }
  166. /*AWT주석*/ //TF body에 Awt IViewer생성 및 키 처리를 위한 이벤트를 추가 시작
  167. if (AwtUseThisWindow() == '1')
  168. // AwtCreateBrowser();
  169. //awt사용여부가 화면이 열린 다음에도 설정으로 바뀔수 있으므로 이벤트는 미리 생성
  170. body.attribute("onkeyup") = "AwtSearch();";
  171. //awt 조회창에서 벗어날때 창을 자동으로 숨기게 하는 처리
  172. //body.attribute("DOMFocusIn") = "AwtHideAll(window, 0); if (model.getFocus().substring(0, 4) != 'awt_') AwtHide();";
  173. /*AWT주석*/ //TF body에 Awt IViewer생성 및 키 처리를 위한 이벤트를 추가 끝
  174. var systeminstcd = getSystemCd().substring(0,3);
  175. if(systeminstcd != "MIS"){
  176. //화면 클릭수 집계를 위한 이벤트 추가(by 김지훈)
  177. body.attribute("onmouseup") = "fMouseClick();";
  178. }
  179. }
  180. /**
  181. * @-----------------------------------------------------------------------------------
  182. * @desc : 창이 닫힐경우 실행되는 함수
  183. * @param :
  184. * @return :
  185. * @-----------------------------------------------------------------------------------
  186. */
  187. function xforms_close() {
  188. // event 처리를 model에서만 수행하고 head 부터는 propagation 막기.
  189. if( document.all.item(event.currentTarget).elementName == "xhtml:head" ) {
  190. event.stopPropagation();
  191. return;
  192. }
  193. if ( isPopup() ) {
  194. // opener의 childeren UID 정보를 삭제한다.
  195. opener.model.removenode(gvChUIDPath+"child::*[text()=""+getMyUID()+""]");
  196. //이전에 열린 모달 있으면 메세지 출력
  197. if(window.type == "modal"){
  198. var viewerObj = getViewer("sysMessage");
  199. if (viewerObj != null && viewerObj.window.javascript.fGetLastModal != undefined){
  200. var modalWindowNm = viewerObj.window.javascript.fGetLastModal(getMyUID());
  201. if(modalWindowNm != null && modalWindowNm != ""){
  202. messageBox("먼저 열린 모달화면을 닫은 후","C003","("+modalWindowNm.split('|')[3]+")");
  203. }
  204. }
  205. }
  206. }
  207. //event.stopPropagation();
  208. }
  209. /**
  210. * @-----------------------------------------------------------------------------------
  211. * @desc : 폼을 종료할 때 실행
  212. * @param :
  213. * @return :
  214. * @-----------------------------------------------------------------------------------
  215. */
  216. function xforms_model_destruct() {
  217. // event 처리를 model에서만 수행하고 head 부터는 propagation 막기.
  218. if( document.all.item(event.currentTarget).elementName == "xhtml:head" ) {
  219. event.stopPropagation();
  220. return;
  221. }
  222. //메인화면이 닫혔는지 여부
  223. var mainClose = getGlobalVariable("mainclose");
  224. if ( mainClose != "Y")
  225. {
  226. //메인화면이 정상 상태에서만 수행한다.
  227. if ( isPopup() ) {
  228. // 화면이 닫힐 때의 좌표정보를 저장한다.
  229. if (getSaveLoc() == "true") {
  230. setScreenLocation(getScreenID(),window.left,window.top);
  231. } else if (getSaveLoc == "false") {
  232. //setSaveLoc("true");
  233. }
  234. // 열린화면 목록에서 삭제한다.
  235. removeOpenWindow();
  236. //topmost처리를 위한 구현
  237. //opener.body.disabled = false;
  238. //opener.body.dispatch(model.getValue(gvOpCBOnClosePath));
  239. }
  240. }
  241. //event.stopPropagation();
  242. }
  243. /**
  244. * @-----------------------------------------------------------------------------------
  245. * @desc : 화면 좌표 저장여부를 선택한다. "true/false"
  246. * 기본값 "true", "false" 로 설정하면 화면 종료시에 좌표를 저장하지 않는다.
  247. * @param : type : 설정 여부
  248. * @return :
  249. * @-----------------------------------------------------------------------------------
  250. */
  251. function setSaveLoc(type) {
  252. model.setValue(gvSaveLocPath, type);
  253. }
  254. /**
  255. * @-----------------------------------------------------------------------------------
  256. * @desc : 화면 좌표 저장정보를 가지고 온다.
  257. * @param :
  258. * @return : 화면 정보
  259. * @-----------------------------------------------------------------------------------
  260. */
  261. function getSaveLoc() {
  262. return model.getValue(gvSaveLocPath);
  263. }
  264. /**
  265. * @-----------------------------------------------------------------------------------
  266. * @desc : 온라인 도움말을 수행한다.
  267. * @param :
  268. * @return :
  269. * @-----------------------------------------------------------------------------------
  270. */
  271. function onaccesskey(){
  272. if (event.keyCode == "112") {
  273. getHelpPage();
  274. event.stopPropagation();
  275. }
  276. }
  277. /**
  278. * @-----------------------------------------------------------------------------------
  279. * @desc : 화면타이틀을 담아 놓는다.
  280. * @param :
  281. * @return :
  282. * @author : 수정자 : 조국(2011.03.28 // 메인화면 Title, 팝업 Title 수정, wasname 추가)
  283. * @-----------------------------------------------------------------------------------
  284. */
  285. function initTitle() {
  286. var titleValue = null;
  287. var syscd = model.getValue(gvSystemPath);
  288. var msgViewer = getViewer("sysMessage");
  289. if( syscd == null || syscd == "") {
  290. titleValue = document.title;
  291. } else {
  292. titleValue = document.title + "(" + getGlobalVariable("sysname"+syscd) + ")";
  293. }
  294. model.makeValue(gvTitlePath,titleValue);
  295. if (!isPopup() && getGlobalVariable("userinfos") != "" && typeof(parent) == "undefined") {
  296. var scrnTitle = "" ;
  297. var tmpTitle = "";
  298. scrnTitle += htmlwindow.systemSymbol + " "; // system symbol
  299. if (titleValue.indexOf(htmlwindow.systemSymbol) > -1) {
  300. scrnTitle += titleValue.substring(titleValue.indexOf("]")+2, titleValue.indexOf(" ")); // titleValue.indexOf(" ")에서 공백이 아닌 ㄱ + 한자의 1번 특수문자임
  301. } else {
  302. scrnTitle += titleValue;
  303. }
  304. /*
  305. scrnTitle += " ";
  306. scrnTitle += "[" +"본원운영" + "]";
  307. scrnTitle += "  "; // 공백이 아닌 ㄱ + 한자의 1번 특수문자임
  308. scrnTitle += "경북대학교 병원" + " ";
  309. scrnTitle += getUserInfo("dutplcenm") + " ";
  310. scrnTitle += getUserName() + " ";
  311. scrnTitle += getTitleLoginDate() + " ";
  312. scrnTitle += "(" +getUserInfo("ipaddr") + ")";
  313. */
  314. scrnTitle += " ";
  315. scrnTitle += "[" +getUserInfo("systeminstnm") + "]";
  316. scrnTitle += "          "; // 공백이 아닌 ㄱ + 한자의 1번 특수문자임
  317. scrnTitle += new String(htmlwindow.vision) + " ";
  318. scrnTitle += getUserInfo("dutplcenm") + " ";
  319. scrnTitle += getUserName() + " ";
  320. scrnTitle += getTitleLoginDate();
  321. htmldocument.title = scrnTitle;
  322. }
  323. if (isPopup()) {
  324. var popupTitle = "";
  325. popupTitle += htmlwindow.systemSymbol + " ";
  326. popupTitle += titleValue;
  327. popupTitle += " ";
  328. popupTitle += "[" + getUserInfo("systeminstnm") + "]" + " ";
  329. document.title = popupTitle;
  330. }
  331. }
  332. /**
  333. * @-----------------------------------------------------------------------------------
  334. * @desc : 현재 화면의 타이틀을 리턴
  335. * @param :
  336. * @return : gvTitlePath
  337. * @-----------------------------------------------------------------------------------
  338. */
  339. function getTitle() {
  340. return model.getValue(gvTitlePath);
  341. }
  342. /**
  343. * @-----------------------------------------------------------------------------------
  344. * @desc : 로그인 시간 반환
  345. * @param :
  346. * @return : dtstr
  347. * @-----------------------------------------------------------------------------------
  348. */
  349. function getTitleLoginDate() {
  350. var weekarr = new Array("일", "월", "화", "수", "목", "금", "토");
  351. var dt = getUserInfo("logindt");
  352. var dtyear = dt.substring(0,4);
  353. var dtmonth = dt.substring(4,6);
  354. var dtday = dt.substring(6,8);
  355. var dthour = dt.substring(8,10);
  356. var dtmin = dt.substring(10,12);
  357. var dtval = new Date(dtmonth+"/"+dtday+"/"+dtyear);
  358. var dtweek = weekarr[dtval.getDay()];
  359. var dtstr = dtyear + "년" + dtmonth + "월" + dtday + "일 (" + dtweek + ") " + dthour +"시" + dtmin +"분";
  360. return dtstr;
  361. }
  362. /**
  363. * @-----------------------------------------------------------------------------------
  364. * @desc : MIS시스템 코드를 반환한다.
  365. * @param :
  366. * @return : missystemcd
  367. * @-----------------------------------------------------------------------------------
  368. */
  369. function getMISSystemCd() {
  370. var systemcd = getSystemCd();
  371. var systeminstcd = systemcd.substring(3,6);
  372. var missystemcd = "";
  373. /*
  374. 직할병원의 001 로 비직할인 경우 해당 시스템코드의 MIS로(예:MIS015)
  375. */
  376. if (systeminstcd == "011" || systeminstcd == "012" || systeminstcd == "013" || systeminstcd == "014") {
  377. missystemcd = "MIS001";
  378. } else {
  379. missystemcd = "MIS" + systeminstcd;
  380. }
  381. /*
  382. if(systeminstcd == "999"){
  383. missystemcd = "MIS999";
  384. }else if(systeminstcd == "888"){
  385. missystemcd = "MIS888";
  386. }else if(systeminstcd == "011" || systeminstcd == "012" || systeminstcd == "013" || systeminstcd == "016"){
  387. missystemcd = "MIS001";
  388. }else{
  389. missystemcd = systemcd;
  390. }
  391. */
  392. return missystemcd;
  393. }
  394. /**
  395. * @-----------------------------------------------------------------------------------
  396. * @desc : 시스템 코드를 반환한다.
  397. * @param :
  398. * @return : gvSystemCd
  399. * @-----------------------------------------------------------------------------------
  400. */
  401. function getSystemCd() {
  402. if (gvSystemCd != null) {
  403. return gvSystemCd;
  404. }
  405. if (htmlwindow.systemcd == undefined) {
  406. gvSystemCd = "";
  407. } else {
  408. gvSystemCd = new String(htmlwindow.systemcd);
  409. }
  410. return gvSystemCd;
  411. }
  412. /**
  413. * @-----------------------------------------------------------------------------------
  414. * @desc : 주어진 이름의 TF Viewer 객체를 반환한다.
  415. * @param :
  416. * @return : TF Viewer 명칭
  417. * @-----------------------------------------------------------------------------------
  418. */
  419. function getViewer(name) {
  420. return viewer.item(getSystemCd()+"_"+name);
  421. }
  422. /**
  423. * @-----------------------------------------------------------------------------------
  424. * @desc : menugroupcd를 설정한다.
  425. * @param :
  426. * @return :
  427. * @-----------------------------------------------------------------------------------
  428. */
  429. function setScreenMenuGroup(){
  430. model.makeValue(gvMenuGroupCdPath, getGlobalVariable("menugroupcd"));
  431. }
  432. /**
  433. * @-----------------------------------------------------------------------------------
  434. * @desc : menuitemcd를 설정한다.
  435. * @param :
  436. * @return :
  437. * @-----------------------------------------------------------------------------------
  438. */
  439. function setScreenMenuItem(){
  440. model.makeValue(gvMenuItemCdPath, getGlobalVariable("menuitemcd"));
  441. }
  442. /**
  443. * @-----------------------------------------------------------------------------------
  444. * @desc : 메뉴에서 설정한 사용부서 코드를 설정한다.
  445. * @param :
  446. * @return :
  447. * @-----------------------------------------------------------------------------------
  448. */
  449. function setScreenPrestDeptCd(){
  450. model.makeValue(gvMenuPrestDeptCdPath, getGlobalVariable("prestdeptcd"));
  451. }
  452. /**
  453. * @-----------------------------------------------------------------------------------
  454. * @desc : 메뉴에서 설정한 사용부서 코드를 반환한다.
  455. * @param :
  456. * @return :
  457. * @-----------------------------------------------------------------------------------
  458. */
  459. function getScreenPrestDeptCd(){
  460. return model.getValue(gvMenuPrestDeptCdPath);
  461. }
  462. /**
  463. * @-----------------------------------------------------------------------------------
  464. * @desc : 메뉴Parameter정보를 설정한다.
  465. * @param :
  466. * @return :
  467. * @-----------------------------------------------------------------------------------
  468. */
  469. function setScreenMenuParameter(){
  470. model.makeValue(gvMenuParamPath, getGlobalVariable("menuparam"));
  471. if(window.type != "iviewer") setGlobalVariable("menuparam","");
  472. }
  473. /**
  474. * @-----------------------------------------------------------------------------------
  475. * @desc : 메뉴Parameter정보를 반환한다.
  476. * @param :
  477. * @return :
  478. * @-----------------------------------------------------------------------------------
  479. */
  480. function getScreenMenuParameter(){
  481. return model.getValue(gvMenuParamPath);
  482. }
  483. /**
  484. * @-----------------------------------------------------------------------------------
  485. * @desc : url로부터 화면ID를 얻어온다. url이 null이면 현재 화면의 url을 사용한다.
  486. * @param :
  487. * @return :
  488. * @-----------------------------------------------------------------------------------
  489. */
  490. function getScreenID(url) {
  491. if (url == null) {
  492. url = document.url;
  493. }
  494. var sp = url.split("/");
  495. return sp[sp.length-1].split(".")[0].substr(0,10);
  496. }
  497. /**
  498. * @-----------------------------------------------------------------------------------
  499. * @desc : 화면별 권한을 저장한다.
  500. * @param :
  501. * @return :
  502. * @-----------------------------------------------------------------------------------
  503. */
  504. function setScreenAuth(auth){
  505. var viewerObj = getViewer("bizMain");
  506. //미리보기(F5) 상태 체크
  507. if ( viewerObj == null ) {
  508. setGlobalVariable("scrnauth","11100000");
  509. }
  510. model.makeValue(gvAuthPath, getGlobalVariable("scrnauth"));
  511. if(window.type != "iviewer") setGlobalVariable("scrnauth","");
  512. }
  513. /**
  514. * @-----------------------------------------------------------------------------------
  515. * @desc : 메뉴권한과 상관없이 강제로 화면의 권한을 지정한다.
  516. * auth : 권한코드(r:읽기/x:실행/p:출력)
  517. * flag : true / false (true 인 경우 setScreenBtnDisabled()를 자동으로 호출해서 버튼컨트롤에서 지정한 _auth 를 적용시킨다.) 기본값 true
  518. * @param :
  519. * @return :
  520. * @-----------------------------------------------------------------------------------
  521. */
  522. function setSpclScrnAuth(auth, flag) {
  523. model.makeValue(gvAuthPath, getAuthCode(auth));
  524. if (flag == null) {
  525. flag = true;
  526. }
  527. if (flag == true) {
  528. setScreenBtnDisabled();
  529. }
  530. }
  531. /**
  532. * @-----------------------------------------------------------------------------------
  533. * @desc : 현재 화면의 권한 정보를 확인
  534. * @param :
  535. * @return :
  536. * @-----------------------------------------------------------------------------------
  537. */
  538. function checkAuth(auth) {
  539. var f = auth.charAt(0);
  540. var a = getAuth();
  541. var v = '0';
  542. switch(f) {
  543. case 'r': // 조회권한
  544. case 'R':
  545. v = a.charAt(0);
  546. break;
  547. case 'x': // 처리권한
  548. case 'X':
  549. v = a.charAt(1);
  550. break;
  551. case 'p':
  552. case 'P':
  553. v = a.charAt(2);
  554. break;
  555. }
  556. if (v == '1') {
  557. return true;
  558. } else {
  559. return false;
  560. }
  561. }
  562. /**
  563. * @-----------------------------------------------------------------------------------
  564. * @desc : 현재 화면의 권한값 자체를 리턴
  565. * @param :
  566. * @return :
  567. * @-----------------------------------------------------------------------------------
  568. */
  569. function getAuth() {
  570. return model.getValue(gvAuthPath);
  571. }
  572. /**
  573. * @-----------------------------------------------------------------------------------
  574. * @desc : 버튼 권한 속성(_auth)에 따라 화면권한(RXP)을 처리한다.
  575. * @param : documentObj 화면으로부터 obj를 받아 온다.
  576. * @return :
  577. * @-----------------------------------------------------------------------------------
  578. */
  579. function setScreenBtnDisabled( documentObj ) {
  580. if (documentObj == null) {
  581. documentObj = document;
  582. }
  583. var childObjCnt = documentObj.controls.length;
  584. var childObj;
  585. for (var i=0; i < childObjCnt; i++) {
  586. childObj = documentObj.controls.item(i);
  587. if (childObj.elementName == "xforms:iviewer") {
  588. setScreenBtnDisabled( childObj.document );
  589. } else if (childObj.elementName == "xforms:button") {
  590. var btnAuth = childObj.attribute("_auth");
  591. if(btnAuth.toUpperCase() == "R" || btnAuth.toUpperCase() == "X" || btnAuth.toUpperCase() == "P"){
  592. childObj.disabled = !checkAuth(btnAuth);
  593. }
  594. }
  595. }
  596. }
  597. /**
  598. * @-----------------------------------------------------------------------------------
  599. * @desc : 현재 화면의 UID 정보
  600. * @param :
  601. * @return : 현재 화면의 UID를 리턴
  602. * @-----------------------------------------------------------------------------------
  603. */
  604. function getMyUID() {
  605. return model.getValue(gvMyUIDPath);
  606. }
  607. /**
  608. * @-----------------------------------------------------------------------------------
  609. * @desc : Opener의 UID 정보
  610. * @param :
  611. * @return : Opener의 UID를 리턴, Opener가 없으면 "" 리턴
  612. * @-----------------------------------------------------------------------------------
  613. */
  614. function getOpenerUID() {
  615. return model.getValue(gvOpUIDPath);
  616. }
  617. /**
  618. * @-----------------------------------------------------------------------------------
  619. * @desc : child 윈도우의 UID 정보
  620. * @param : wid : child 화면의 window id
  621. * @return : WID로 연 child 윈도우의 최초 UID를 리턴
  622. * @-----------------------------------------------------------------------------------
  623. */
  624. function getChildUID(wid) {
  625. var cid = model.getValue(gvChUIDPath+wid);
  626. if (cid==null) { cid=""; }
  627. return cid;
  628. }
  629. /**
  630. * @-----------------------------------------------------------------------------------
  631. * @desc : Opener가 다른 화면으로 변경되었는지 여부를 반환한다.
  632. * @param :
  633. * @return :
  634. * @-----------------------------------------------------------------------------------
  635. */
  636. function checkOpener() {
  637. if (isPopup()) {
  638. return (getOpenerUID()==opener.model.getValue(gvMyUIDPath));
  639. } else {
  640. return false;
  641. }
  642. }
  643. /**
  644. * @-----------------------------------------------------------------------------------
  645. * @desc : wid를 사용하여 open된 child window 객체들 중에서 UID가 바뀌지 않은 window객체를 리턴한다.
  646. * child window가 없거나 있더라도 UID가 바뀌었다면 null을 리턴한다.
  647. * @param :
  648. * @return :
  649. * @-----------------------------------------------------------------------------------
  650. */
  651. function getChildWindow(wid) {
  652. return findChildWindow(getChildUID(wid));
  653. }
  654. /**
  655. * @-----------------------------------------------------------------------------------
  656. * @desc : 열려있는 child 윈도우 중에서 현재의 UID가 주어진 cid와 동일한
  657. * window 객체를 찾아서 리턴한다. 없으면 null
  658. * @param :
  659. * @return : child or null
  660. * @-----------------------------------------------------------------------------------
  661. */
  662. function findChildWindow(cid) {
  663. var child = null;
  664. for(i=0;i<window.children.length;i++) {
  665. child = window.children.item(i);
  666. if (child.model.getValue(gvMyUIDPath)==cid) return child;
  667. }
  668. return null;
  669. }
  670. /**
  671. * @-----------------------------------------------------------------------------------
  672. * @desc : 열려있는 child 윈도우 중에서 화면 ID가 sid인 화면의 window 객체를
  673. * 찾아서 리턴한다. 없으면 null
  674. * @param :
  675. * @return :
  676. * @-----------------------------------------------------------------------------------
  677. */
  678. function findChildWindowByScreenID(sid) {
  679. var child = null;
  680. for(i=0;i<window.children.length;i++) {
  681. child = window.children.item(i);
  682. if (child.javascript.getScreenID()==sid) return child;
  683. }
  684. return null;
  685. }
  686. /**
  687. * @-----------------------------------------------------------------------------------
  688. * @desc : 화면전환시 child닫기로 지정된 경우 해당 child를 모두 닫는다.
  689. * @param :
  690. * @return :
  691. * @-----------------------------------------------------------------------------------
  692. */
  693. function closeChildWindow() {
  694. if(model.getValue(gvChildClosePath) == "Y"){
  695. var childCnt = window.children.length;
  696. for( var i = childCnt; i > 0; i-- ) {
  697. window.children.item(i-1).close();
  698. }
  699. }
  700. }
  701. /**
  702. * @-----------------------------------------------------------------------------------
  703. * @desc : 화면전환시 child가 close되도록 저장
  704. * @param :
  705. * @return :
  706. * @-----------------------------------------------------------------------------------
  707. */
  708. function setCloseChildWindow(){
  709. model.makeValue(gvChildClosePath,"Y");
  710. }
  711. /**
  712. * @-----------------------------------------------------------------------------------
  713. * @desc : 자신이 팝업인지 아닌지를 리턴한다.
  714. * @param :
  715. * @return :
  716. * @-----------------------------------------------------------------------------------
  717. */
  718. function isPopup() {
  719. var stype = window.type;
  720. if (stype == "iviewer" || stype == "main") {
  721. return false;
  722. } else {
  723. return true;
  724. }
  725. }
  726. /**
  727. * @-----------------------------------------------------------------------------------
  728. * @desc : wid로 open한 child window를 activate한다.
  729. * @param :
  730. * @return :
  731. * @-----------------------------------------------------------------------------------
  732. */
  733. function activateChild(wid) {
  734. var cwnd = window.children.item(wid);
  735. if (cwnd != null) {
  736. cwnd.activate();
  737. }
  738. }
  739. /**
  740. * @-----------------------------------------------------------------------------------
  741. * @desc : opener를 activate한다.
  742. * @param :
  743. * @return :
  744. * @-----------------------------------------------------------------------------------
  745. */
  746. function activateOpener() {
  747. if (isPopup()) {
  748. opener.javascript.activateMyWindow();
  749. }
  750. }
  751. /**
  752. * @-----------------------------------------------------------------------------------
  753. * @desc : 자기 자신 window를 activate한다.
  754. * @param :
  755. * @return :
  756. * @-----------------------------------------------------------------------------------
  757. */
  758. function activateMyWindow() {
  759. if (isPopup()) {
  760. window.restore();
  761. window.activate();
  762. } else { // main viewer 인 경우
  763. htmlwindow.focus();
  764. }
  765. }
  766. /**
  767. * @-----------------------------------------------------------------------------------
  768. * @desc : 화면 상태 반환
  769. * @param :
  770. * @return :
  771. * @-----------------------------------------------------------------------------------
  772. */
  773. function getScreenDisabled(){
  774. return body.disabled;
  775. }
  776. /**
  777. * @-----------------------------------------------------------------------------------
  778. * @desc : 메뉴Object 상태설정
  779. * @param :
  780. * @return :
  781. * @-----------------------------------------------------------------------------------
  782. */
  783. function setMenuDisabled(type){
  784. htmlwindow.setMenuDisabled(type);
  785. }
  786. /**
  787. * @-----------------------------------------------------------------------------------
  788. * @desc : 화면의 중심에 띄울수 있도록 X,Y 절대 좌표를 계산해준다.
  789. * monNo 가 null 이면 현재 모니터 기준으로 계산
  790. * @param : xPos : x좌표, yPos : y좌표, userProp : 사용자 설정, monNo : 모니터 번호
  791. * @return : loc
  792. * @-----------------------------------------------------------------------------------
  793. */
  794. function locateCenter(xPos, yPos, userProp, monNo) {
  795. var taskbarHeight = 0;
  796. if (monNo == "" || monNo == null) {
  797. // 파라메터에서 모니터를 지정하지 않았으면 현재 모니터 번호를 사용
  798. monNo = getCurrentMonitorNumber();
  799. }
  800. monNo = parseInt(monNo)-1;
  801. if (monNo < 0) {
  802. monNo = 0;
  803. } else if (monNo == 0) {
  804. // 현재 모니터번호가 1번이면 작업표시줄 부분을 화면 Height 에서 빼야 하므로 설정.
  805. taskbarHeight = gvTaskBarHeight;
  806. }
  807. var monSize = getMonitorSize(monNo);
  808. // 기본 화면 사이즈 설정.
  809. var width = gvDefaultScrWidth, height = gvDefaultScrHeight;
  810. // 화면이 작은 경우 스크롤이 정상적으로 보일 수 있도록 화면사이즈 변경.
  811. // 현재 해상도가 1280*1024 가 아닌경우 기본화면 사이즈 재설정.
  812. if (monSize[0] < width) {
  813. width = monSize[0];
  814. }
  815. if (monSize[1] < height + taskbarHeight) {
  816. height = monSize[1] - taskbarHeight; // 작업표시줄 높이 빼기.
  817. }
  818. if (userProp != null) {
  819. var wexp = new RegExp("(width:)([0-9]+)(px)", "gi");
  820. var hexp = new RegExp("(height:)([0-9]+)(px)", "gi");
  821. var w = userProp.match(wexp);
  822. var h = userProp.match(hexp);
  823. /*
  824. width, height 값 설정되어 있는경우, 해당 width, height 를 이용해서 화면의 가운데에 보여지도록 한다.
  825. align=center 를 사용하면 2번 모니터로 보여지지 않기 때문.
  826. */
  827. if (w != null && w.length == 1) {
  828. width = w[0].match(new RegExp("([0-9]+)", "gi"));
  829. }
  830. if (h != null && h.length == 1) {
  831. height = h[0].match(new RegExp("([0-9]+)", "gi"));
  832. }
  833. }
  834. if (xPos == "" || xPos == null) {
  835. // 파라메터에서 X 좌표를 지정하지 않았으면 중심좌표를 계산해서 사용
  836. if (width != "") {
  837. xPos = parseInt(monSize[0])/2 - width/2;
  838. if (xPos < 0) {
  839. xPos = 0;
  840. }
  841. } else {
  842. xPos = 0;
  843. }
  844. } else {
  845. // 화면 좌표가 (-) 로 입력될 경우 0 으로 재설정 - 업무화면에서 (-) 좌표로 입력하는 경우가 있음
  846. if (parseInt(xPos) < 0) {
  847. xPos = 0;
  848. }
  849. }
  850. if (yPos == "" || yPos == null) {
  851. // 파라메터에서 Y 좌표를 지정하지 않았으면 중심좌표를 계산해서 사용
  852. if (height != "") {
  853. yPos = monSize[1]/2 - height/2 - taskbarHeight; // Y축은 작업표시줄(34)를 빼서 가운데로.
  854. if (yPos < 0) {
  855. yPos = 0;
  856. }
  857. } else {
  858. yPos = 0;
  859. }
  860. } else {
  861. // 화면 좌표가 (-) 로 입력될 경우 0 으로 재설정 - 업무화면에서 (-) 좌표로 입력하는 경우가 있음
  862. if (parseInt(yPos) < 0) {
  863. yPos = 0;
  864. }
  865. }
  866. loc = getAbsoluteLocation(monNo,xPos,yPos);
  867. return loc;
  868. }
  869. /**
  870. * @-----------------------------------------------------------------------------------
  871. * @desc : xrw 화면 로딩
  872. * @param : open Type : modal, modeless
  873. * id : 화면 id
  874. * idType : url, scn
  875. * monNo : 모니터 no
  876. * xPos : x좌표
  877. * yPos : y좌표
  878. wid : child 화면의 window id
  879. ref : 새로 띄우는 window 로 전달할 부모 인스턴스의 XPath
  880. resultref : 부모 인스턴스에서 전달하는 ref 의 내용이 저장될 새로 띄우는 windows 의 인스턴스 XPath
  881. userProp : 새로 띄우는 window 의 style지정(window 사이즈 및 위치지정가능)
  882. prevPos : 사용자별 좌표정보 적용여부 : true(적용) -기본/ false(적용안함)
  883. * @return :
  884. * @-----------------------------------------------------------------------------------
  885. */
  886. function openInternal(openType,id,idType,monNo,xPos,yPos,wid,ref,resultref,userProp,prevPos) {
  887. if (!checkTimeout()) {
  888. // session timeout 상태가 아니면 session 시간 갱신
  889. setGlobalVariable("last_submit", (new Date()).getTime());
  890. }
  891. var url = null;
  892. var sid = getScreenID(id);
  893. if (wid == null || wid == "") {
  894. wid = sid;
  895. }
  896. if (prevPos == null) { // 이전 저장 좌표 사용 여부
  897. prevPos = true;
  898. }
  899. if ( idType == "url" ) { // idType == "url" 이면 ID를 그대로 URL로 open한다.
  900. url = id;
  901. } else { // idType == "scn"
  902. //url = sid+".xrw";
  903. url = getScreenURL(sid);
  904. }
  905. // 좌표값 결정 로직
  906. var prop = null;
  907. if (monNo == null && xPos == null && yPos == null) {
  908. // 파라메터로 모니터,X,Y 값을 모두 지정하지 않은 경우는 이전 좌표 저장 값과 상관 없이 현재 모니터의 중앙에 open 한다.
  909. var viewerObj = getViewer("sysMessage");
  910. if (viewerObj != null && viewerObj.window.javascript.fSetStatusMessage != undefined) {
  911. // 현재 모니터에서의 중앙 좌표값 계산을 위한 로직
  912. /* -- 여기부터
  913. monNo = getCurrentMonitorNumber()-1;
  914. var monSize = viewerObj.window.javascript.fGetMonitorSize(monNo);
  915. xPos = monSize[0]/2 - 605; // 1211px/2
  916. yPos = monSize[1]/2 - 392; // 784px/2
  917. if (xPos < 0) { xPos = 0; }
  918. if (yPos < 0) { yPos = 0; }
  919. var loc = getAbsoluteLocation(monNo,xPos,yPos);
  920. */
  921. // -- 여기까지 함수로 만들자. locateCenter(userProp,monNo) : 리턴 --> x,y 절대좌표
  922. var loc = locateCenter(xPos, yPos, userProp);
  923. xPos = loc[0];
  924. yPos = loc[1];
  925. prop = "top:"+yPos+"px;left:"+xPos+"px;width:" + gvDefaultScrWidth + "px;height:" + gvDefaultScrHeight + "px;";
  926. } else {
  927. // 상태 메시지 Bar가 없는 미리보기의 경우이다.
  928. prop = "align:center;width:" + gvDefaultScrWidth + "px;height:" + gvDefaultScrHeight + "px;";
  929. }
  930. } else {
  931. // 파라메터로 모니터,X,Y 중 하나라도 명시했다면 우선 이전에 저장된 좌표를 찾아서 그 위치에 띄운다.
  932. var xyPos = getScreenLocation(sid); // 이전 좌표를 찾는다.
  933. var loc = null;
  934. if ( prevPos && xyPos != "") {
  935. // 이전 좌표를 찾았으므로 이전 좌표를 적용한다.
  936. loc = xyPos.split("|");
  937. } else {
  938. // 이전 좌표가 없으므로 파라메토로 주어진 좌표를 사용한다.
  939. // locateCenter() 함수를 사용한다.
  940. /* -- 여기부터
  941. var width = "", height = "";
  942. if (userProp != null) {
  943. var wexp = new RegExp("(width:)([0-9]+)(px)", "gi");
  944. var hexp = new RegExp("(height:)([0-9]+)(px)", "gi");
  945. var w = userProp.match(wexp);
  946. var h = userProp.match(hexp);
  947. // width, height 값 설정되어 있는경우, 해당 width, height 를 이용해서 화면의 가운데에 보여지도록 한다.
  948. // align=center 를 사용하면 2번 모니터로 보여지지 않기 때문.
  949. if (w != null && w.length == 1) {
  950. width = w[0].match(new RegExp("([0-9]+)", "gi"));
  951. }
  952. if (h != null && h.length == 1) {
  953. height = h[0].match(new RegExp("([0-9]+)", "gi"));
  954. }
  955. }
  956. if (monNo == "" || monNo == null) {
  957. // 파라메터에서 모니터를 지정하지 않았으면 현재 모니터 번호를 사용
  958. monNo = getCurrentMonitorNumber();
  959. }
  960. monNo = parseInt(monNo)-1;
  961. if (monNo < 0) {
  962. monNo = 0;
  963. }
  964. var monSize = getMonitorSize(monNo);
  965. if (xPos == "" || xPos == null) {
  966. // 파라메터에서 X 좌표를 지정하지 않았으면 중심좌표를 계산해서 사용
  967. if (width != "") {
  968. xPos = parseInt(monSize[0])/2 - width/2;
  969. } else {
  970. xPos = 0;
  971. }
  972. }
  973. if (yPos == "" || yPos == null) {
  974. // 파라메터에서 Y 좌표를 지정하지 않았으면 중심좌표를 계산해서 사용
  975. if (height != "") {
  976. yPos = monSize[1]/2 - height/2;
  977. } else {
  978. yPos = 0;
  979. }
  980. }
  981. loc = getAbsoluteLocation(monNo,xPos,yPos);
  982. */
  983. // -- 여기까지
  984. // xPos, yPos
  985. loc = locateCenter(xPos, yPos, userProp,monNo);
  986. }
  987. xPos = loc[0];
  988. yPos = loc[1];
  989. prop="top:"+yPos+"px;left:"+xPos+"px;";
  990. }
  991. // 사용자 지정 프로퍼티 추가(뒤에 추가해야 중복된게 있어도 우선적으로 적용된다.)
  992. if (userProp != null) {
  993. prop = prop + userProp;
  994. }
  995. // 2012.06.11 아이콘설정
  996. // 2012.06.15 xforms_ready함수에서 model.setIcon 함수로 대체
  997. //prop = prop + "icon:" + htmlwindow.faviconURL;
  998. // 같은 화면ID로 이미 열려있는지 확인하여, 기존에 이미 동일 화면 ID로 열려있는 창이 있다면
  999. // 그 창을 Activate 시킨다. (2008.2.12 변경)
  1000. var viewerObj = getViewer("sysMessage");
  1001. var wd = null;
  1002. if (viewerObj != null && viewerObj.window.javascript.fGetOpenWindow != undefined) {
  1003. // 메인화면이 있는 경우이다. 메인뷰어를 확인하고 그 이후에 열린화면 목록에서 확인한다.
  1004. // 메인화면에 해당 화면이 열려 있는 경우는 제외(보험심사화면에서는 메인화면의 화면과 같은 화면ID의 화면을 Modeless로 연다)
  1005. // var mainWnd = getMainViewer();
  1006. // if (mainWnd != null && mainWnd.javascript.getScreenID() == sid) {
  1007. // wd = mainWnd;
  1008. // } else {
  1009. wd = viewerObj.window.javascript.fGetOpenWindow(sid);
  1010. // }
  1011. } else { // 미리 보기인 경우이다. 자신과 opener, child 윈도우에서 찾는다.
  1012. if (isPopup() && opener.javascript.getScreenID() == sid) {
  1013. wd = opener;
  1014. } else if (getScreenID() == sid) {
  1015. wd = window;
  1016. } else {
  1017. wd = findChildWindowByScreenID(sid);
  1018. }
  1019. }
  1020. var cid = "";
  1021. if (wd != null && openType =="modeless") { // modeless고 기존에 동일 화면 ID로 떠있는 경우:activate
  1022. cid = wd.javascript.getMyUID();
  1023. wd.javascript.activateMyWindow(); // 열려있는 화면을 Activate 한다.
  1024. wd.body.dispatch("onActivate"); // Activate시 실행
  1025. } else { // replace이거나 기존에 동일 화면ID로 떠있는 화면이 없는 경우 : 새로 생성
  1026. window.load(url,openType,wid,prop,ref,resultref);
  1027. if (openType!="replace") {
  1028. // open된 윈도우가 자신의 uid를 latest로 넣어주었으므로 그 값을
  1029. // wid를 키로하여 저장해놓는다.
  1030. cid = model.getValue(gvChUIDPath+"latest");
  1031. model.makeValue(gvChUIDPath+wid,cid);
  1032. model.makeValue(gvChUIDPath+"latest",""); // latest는 삭제
  1033. }
  1034. }
  1035. return cid;
  1036. /**
  1037. // wid 로 열린화면이 있는지 확인하기 위하여 uid를 확인한다.
  1038. var cid = getChildUID(wid);
  1039. // uid가 존재한다면 이전에 열린적이 있으므로 children중에서 있는지 확인한다.
  1040. if (cid != "") {
  1041. var child = findChildWindow(cid);
  1042. // 같은 uid가 존재한다면 그것을 activate 하고 리턴한다.
  1043. if ( child!=null ) {
  1044. child.activate();
  1045. return cid;
  1046. }
  1047. }
  1048. // 새로 여는 경우 또는 열었지만 그것이 replace되어서 uid가 바뀐 경우 윈도우 생성한다.
  1049. window.load(url,openType,wid,prop,ref,resultref);
  1050. if (openType!="replace") {
  1051. // open된 윈도우가 자신의 uid를 latest로 넣어주었으므로 그 값을
  1052. // wid를 키로하여 저장해놓는다.
  1053. cid = model.getValue(gvChUIDPath+"latest");
  1054. model.makeValue(gvChUIDPath+wid,cid);
  1055. model.makeValue(gvChUIDPath+"latest",""); // latest는 삭제
  1056. return cid;
  1057. } else {
  1058. return "";
  1059. } **/
  1060. }
  1061. /**
  1062. * @-----------------------------------------------------------------------------------
  1063. * @desc : modeless 로 창을 띄움
  1064. * @param : id : 화면아이디
  1065. monNo : 창을 띄우고자 하는 모니터번호(1, 2, ..., N)
  1066. xPos : 창의 X 좌표(모니터 맨 왼쪽:0)
  1067. yPos : 창의 Y 좌표(모니터 맨 위:0)
  1068. wid : child 화면의 window id
  1069. ref : 새로 띄우는 window 로 전달할 부모 인스턴스의 XPath
  1070. resultref : 부모 인스턴스에서 전달하는 ref 의 내용이 저장될 새로 띄우는 windows 의 인스턴스 XPath
  1071. userProp : 새로 띄우는 window 의 style지정(window 사이즈 및 위치지정가능)
  1072. prevPos : 사용자별 좌표정보 적용여부 : true(적용) -기본/ false(적용안함)
  1073. resizeType : 화면사이즈 적용 종류("none" : 화면해상도기준&작업표시줄 크기제외(기본)
  1074. / "free" : 정의된 화면사이즈 그대로
  1075. / "notaskbar" : 화면해상도기준 & 작업표시줄크기 무시)
  1076. * @return : openInternal
  1077. * @-----------------------------------------------------------------------------------
  1078. */
  1079. function open(id,monNo,xPos,yPos,wid,ref,resultref,userProp,prevPos, authCode, resizeType) {
  1080. if (userProp == null) {
  1081. userProp = "max:hidden;";
  1082. } else {
  1083. userProp = "max:hidden;" + userProp;
  1084. }
  1085. // 특정 권한코드를 부여한 경우, 해당 화면은 부여한 권한코드값으로 권한값이 바뀌게 된다.(메뉴권한이 있어도 덮어 쓴다.)
  1086. if (authCode == null) {
  1087. setGlobalVariable("spclscrnauth", getAuthCode(""));
  1088. } else {
  1089. setGlobalVariable("spclscrnauth", getAuthCode(authCode));
  1090. }
  1091. if (resizeType == null || resizeType == "" || resizeType == "none") {
  1092. setGlobalVariable("resizetype", "none");
  1093. } else if (resizeType == "notaskbar") {
  1094. setGlobalVariable("resizetype", "notaskbar");
  1095. } else if (resizeType == "free") {
  1096. setGlobalVariable("resizetype", "free");
  1097. }
  1098. return openInternal("modeless",id,"scn",monNo,xPos,yPos,wid,ref,resultref,userProp,prevPos);
  1099. }
  1100. /**
  1101. * @-----------------------------------------------------------------------------------
  1102. * @desc : replace로 창을 띄움
  1103. * @param :
  1104. * @return : openInternal
  1105. * @-----------------------------------------------------------------------------------
  1106. */
  1107. function navigate(id,monNo,xPos,yPos,wid,ref,resultref, authCode) {
  1108. //화면권한
  1109. var scrnauth = model.getValue(gvAuthPath);
  1110. setGlobalVariable("scrnauth", scrnauth);
  1111. //child close
  1112. closeChildWindow();
  1113. if (authCode == null) {
  1114. setGlobalVariable("spclscrnauth", getAuthCode(""));
  1115. } else {
  1116. setGlobalVariable("spclscrnauth", getAuthCode(authCode));
  1117. }
  1118. return openInternal("replace",id,"scn",monNo,xPos,yPos,wid,ref,resultref);
  1119. }
  1120. /**
  1121. * @-----------------------------------------------------------------------------------
  1122. * @desc : 속도 체크를 위한 함수
  1123. * @param : logickind - 로그별 구분
  1124. * @return :
  1125. * @-----------------------------------------------------------------------------------
  1126. */
  1127. // 속도 체크를 위한 코드 추가(2015.07.28 - smkim)
  1128. function fStartLogCheck(logickind) {
  1129. try {
  1130. var sysMessageobj = getViewer("sysMessage");
  1131. sysMessageobj.window.javascript.startLogCheck(logickind);
  1132. } catch(e) {
  1133. }
  1134. }
  1135. function fEndLogCheck(logickind, logdata) {
  1136. try {
  1137. var sysMessageobj = getViewer("sysMessage");
  1138. sysMessageobj.window.javascript.endLogCheck(logickind, logdata);
  1139. } catch(e) {
  1140. }
  1141. }
  1142. function fStartLogTempCheck(logickind) {
  1143. try {
  1144. var sysMessageobj = getViewer("sysMessage");
  1145. sysMessageobj.window.javascript.startLogTempCheck(logickind);
  1146. } catch(e) {
  1147. }
  1148. }
  1149. function fEndLogTempCheck(logickind) {
  1150. try {
  1151. var sysMessageobj = getViewer("sysMessage");
  1152. return sysMessageobj.window.javascript.endLogTempCheck(logickind);
  1153. } catch(e) {
  1154. }
  1155. }
  1156. function fBeforeTimeCheck() {
  1157. try {
  1158. var sysMessageobj = getViewer("sysMessage");
  1159. return sysMessageobj.window.javascript.beforeTimeCheck();
  1160. } catch(e) {
  1161. }
  1162. }
  1163. function fExceptPopupTime(beforeTime) {
  1164. try {
  1165. var sysMessageobj = getViewer("sysMessage");
  1166. sysMessageobj.window.javascript.exceptPopupTime(beforeTime);
  1167. } catch(e) {
  1168. }
  1169. }
  1170. //-----------------------------------------------------------------------------------
  1171. /**
  1172. * @-----------------------------------------------------------------------------------
  1173. * @desc : modal로 창을 띄움
  1174. * @param :
  1175. * @return :
  1176. * @-----------------------------------------------------------------------------------
  1177. */
  1178. function modal(id,monNo,xPos,yPos,wid,ref,resultref,userProp,prevPos, authCode, resizeType) {
  1179. var rtn = "";
  1180. body.disabled = true;
  1181. if (userProp == null) {
  1182. userProp = "min:hidden;max:hidden;";
  1183. } else {
  1184. userProp = "min:hidden;max:hidden;" + userProp;
  1185. }
  1186. if (authCode == null) {
  1187. setGlobalVariable("spclscrnauth", getAuthCode(""));
  1188. } else {
  1189. setGlobalVariable("spclscrnauth", getAuthCode(authCode));
  1190. }
  1191. if (resizeType == null || resizeType == "" || resizeType == "none") {
  1192. setGlobalVariable("resizetype", "none");
  1193. } else if (resizeType == "notaskbar") {
  1194. setGlobalVariable("resizetype", "notaskbar");
  1195. } else if (resizeType == "free") {
  1196. setGlobalVariable("resizetype", "free");
  1197. }
  1198. // 속도 체크를 위한 코드 추가(2015.07.28 - smkim)
  1199. var beforeTime = fBeforeTimeCheck();
  1200. rtn = openInternal("modal",id,"scn",monNo,xPos,yPos,wid,ref,resultref,userProp,prevPos);
  1201. // 속도 체크를 위한 코드 추가(2015.07.28 - smkim)
  1202. fExceptPopupTime(beforeTime);
  1203. body.disabled = false;
  1204. return rtn;
  1205. }
  1206. /**
  1207. * @-----------------------------------------------------------------------------------
  1208. * @desc : 사용자가 입력하는 권한코드를 실제 코드로 변경해서 반환한다.
  1209. * @param : auth : 권한코드
  1210. * @return : 10000000, 11000000, 11100000
  1211. * @-----------------------------------------------------------------------------------
  1212. */
  1213. function getAuthCode(auth) {
  1214. var authCode = "";
  1215. switch (auth.toUpperCase()) {
  1216. case 'R': authCode = "10000000"; break;
  1217. case 'X': authCode = "11000000"; break;
  1218. case 'P': authCode = "11100000"; break;
  1219. default : authCode = "";
  1220. }
  1221. return authCode;
  1222. }
  1223. /*
  1224. function topmost(id,monNo,xPos,yPos,wid,ref,resultref,userProp,prevPos,onCloseEvent) {
  1225. var rtn = "";
  1226. body.disabled = true;
  1227. if (userProp == null) {
  1228. userProp = "min:hidden;max:hidden;";
  1229. } else {
  1230. userProp = "min:hidden;max:hidden;" + userProp;
  1231. }
  1232. model.makeValue(gvMyCBOnClosePath,onCloseEvent);
  1233. rtn = openInternal("modeless_topmost",id,"scn",monNo,xPos,yPos,wid,ref,resultref,userProp,prevPos);
  1234. body.disabled = false;
  1235. return rtn;
  1236. }
  1237. */
  1238. /**
  1239. * @-----------------------------------------------------------------------------------
  1240. * @desc : modeless 화면 로딩
  1241. * @param :
  1242. * @return : openInternal
  1243. * @-----------------------------------------------------------------------------------
  1244. */
  1245. function openUrl(url,monNo,xPos,yPos,wid,ref,resultref,userProp,prevPos, authCode) {
  1246. if (userProp == null) {
  1247. userProp = "max:hidden;";
  1248. } else {
  1249. userProp = "max:hidden;" + userProp;
  1250. }
  1251. if (authCode == null) {
  1252. setGlobalVariable("spclscrnauth", getAuthCode(""));
  1253. } else {
  1254. setGlobalVariable("spclscrnauth", getAuthCode(authCode));
  1255. }
  1256. return openInternal("modeless",url,"url",monNo,xPos,yPos,wid,ref,resultref,userProp,prevPos);
  1257. }
  1258. /**
  1259. * @-----------------------------------------------------------------------------------
  1260. * @desc : url을 받아서 화면 replace
  1261. * @param :
  1262. * @return : openInternal
  1263. * @-----------------------------------------------------------------------------------
  1264. */
  1265. function navigateUrl(url,monNo,xPos,yPos,wid,ref,resultref, authCode) {
  1266. //화면권한
  1267. var scrnauth = model.getValue(gvAuthPath);
  1268. setGlobalVariable("scrnauth", scrnauth);
  1269. if (authCode == null) {
  1270. setGlobalVariable("spclscrnauth", getAuthCode(""));
  1271. } else {
  1272. setGlobalVariable("spclscrnauth", getAuthCode(authCode));
  1273. }
  1274. return openInternal("replace",url,"url",monNo,xPos,yPos,wid,ref,resultref);
  1275. }
  1276. /**
  1277. * @-----------------------------------------------------------------------------------
  1278. * @desc : modal로 화면 로딩
  1279. * @param :
  1280. * @return : openInternal
  1281. * @-----------------------------------------------------------------------------------
  1282. */
  1283. function modalUrl(url,monNo,xPos,yPos,wid,ref,resultref,userProp,prevPos, authCode) {
  1284. if (userProp == null) {
  1285. userProp = "min:hidden;max:hidden;";
  1286. } else {
  1287. userProp = "min:hidden;max:hidden;" + userProp;
  1288. }
  1289. if (authCode == null) {
  1290. setGlobalVariable("spclscrnauth", getAuthCode(""));
  1291. } else {
  1292. setGlobalVariable("spclscrnauth", getAuthCode(authCode));
  1293. }
  1294. return openInternal("modal",url,"url",monNo,xPos,yPos,wid,ref,resultref,userProp,prevPos);
  1295. }
  1296. /**
  1297. * @-----------------------------------------------------------------------------------
  1298. * @desc : 타시스템 Open
  1299. * @param :
  1300. * @return : cid
  1301. * @-----------------------------------------------------------------------------------
  1302. */
  1303. function openExternal(syscd,id,monNo,xPos,yPos,wid,ref,resultref,userProp,prevPos) {
  1304. var url = getScreenURL(id,syscd);
  1305. setGlobalVariable("systemcode", syscd.toUpperCase());
  1306. var cid = openInternal("modeless",url,"url",monNo,xPos,yPos,wid,ref,resultref,userProp,prevPos);
  1307. setGlobalVariable("systemcode", "");
  1308. return cid;
  1309. }
  1310. /**
  1311. * @-----------------------------------------------------------------------------------
  1312. * @desc : 일반 HTML Open
  1313. * @param :
  1314. * @return : rtn
  1315. * @-----------------------------------------------------------------------------------
  1316. */
  1317. function openHtml(url,wid,prop) {
  1318. var rtn = null;
  1319. if (prop == null) {
  1320. rtn = htmlwindow.open(url,wid);
  1321. } else {
  1322. rtn = htmlwindow.open(url,wid,prop);
  1323. }
  1324. return rtn;
  1325. }
  1326. /**
  1327. * @-----------------------------------------------------------------------------------
  1328. * @desc : 화면 Size에 맞게 창크기 조정
  1329. * @param :
  1330. * @return :
  1331. * @-----------------------------------------------------------------------------------
  1332. */
  1333. function setWindowSize(){
  1334. var taskbarHeight = 0;
  1335. //화면사이즈
  1336. var pageWidth = body.attribute("pagewidth") == "" ? gvDefaultScrWidth : parseInt(body.attribute("pagewidth"));
  1337. var pageHeight = body.attribute("pageheight") == "" ? gvDefaultScrHeight + 16 : parseInt(body.attribute("pageheight")) + 16; // 16 은 top, bottom margin
  1338. var monNo = getCurrentMonitorNumber();
  1339. monNo = parseInt(monNo)-1;
  1340. if (monNo < 0) {
  1341. monNo = 0;
  1342. } else if (monNo == 0) {
  1343. taskbarHeight = gvTaskBarHeight;
  1344. }
  1345. //창 여백
  1346. //추후 OS나 스타일에 맞게 여백을 설정하여야 함
  1347. var captionSize = Math.abs(app.registry("HKEY_CURRENT_USER", "Control Panel\\Desktop\\WindowMetrics", "CaptionHeight" , "STRING"))/15;
  1348. // Windows 7 - 테두리 사이즈로 인한 화면 크기 조정값(2012.03.28 added by CBJ)
  1349. var paddedSize = Math.abs(app.registry("HKEY_CURRENT_USER", "Control Panel\\Desktop\\WindowMetrics", "PaddedBorderWidth" , "STRING"))/15;
  1350. var marginWidth = 8 + (paddedSize * 2);
  1351. var marginHeight = ((paddedSize * 2 )+captionSize)+9;
  1352. //var marginWidth = 8;
  1353. //var marginHeight = captionSize+9;
  1354. //화면 여백 설정
  1355. body.attribute("margin-top") = 8;
  1356. body.attribute("margin-bottom") = 8;
  1357. // 창의 크기(제목표시줄 + 보더폭까지 합친 크기)
  1358. var wWidth = pageWidth+marginWidth;
  1359. var wHeight = pageHeight+marginHeight;
  1360. // 화면 해상도가 기준해상도와 달라서 창의 크기가 바뀌어야 하는 경우..
  1361. var monSize = getMonitorSize(monNo);
  1362. if (monSize[0] < wWidth) {
  1363. wWidth = monSize[0];
  1364. }
  1365. var resizeType = getGlobalVariable("resizetype");
  1366. if (resizeType == "notaskbar") {
  1367. // 작업표시줄 크기를 무시 & 주어진 화면크기가 현재 해상도보다 큰경우 해상도에 맞춰 줄여줌
  1368. if (monSize[1] < wHeight) {
  1369. wHeight = monSize[1];
  1370. if (wWidth < monSize[0]) {
  1371. wWidth += 16;
  1372. }
  1373. }
  1374. } else if (resizeType == "none") {
  1375. // 창의 크기 + 작업표시줄 크기가 현재 화면 해상도보다 큰 경우 화면크기-작업표시줄 크기 만큼 줄여줌.
  1376. if (monSize[1] < wHeight + taskbarHeight) {
  1377. wHeight = monSize[1] - taskbarHeight;
  1378. // 세로 높이가 줄어들면서 가로 스크롤이 생기므로 인해 가로스크롤 넓이 만큼 Width 를 늘려줌.
  1379. if (wWidth < monSize[0]) {
  1380. wWidth += 16;
  1381. }
  1382. }
  1383. } else if (resizeType == "free") {
  1384. // 작업표시줄 크기를 무시 & 주어진 화면 크기그대로 표시
  1385. //wHeight;
  1386. //wWidth;
  1387. }
  1388. //창크기 조정
  1389. window.setSize(wWidth, wHeight);
  1390. }
  1391. /**
  1392. * @-----------------------------------------------------------------------------------
  1393. * @desc : 시스템 메시지 출력함수
  1394. * @param :
  1395. * @return :
  1396. * @-----------------------------------------------------------------------------------
  1397. */
  1398. function setSystemMessage(msg) {
  1399. var viewerObj = getViewer("sysMessage");
  1400. if (viewerObj != null && viewerObj.window.javascript.fSetStatusMessage != undefined) {
  1401. viewerObj.window.javascript.fSetStatusMessage(msg);
  1402. }
  1403. }
  1404. /**
  1405. * @-----------------------------------------------------------------------------------
  1406. * @desc : 화면 좌표 정보를 저장한다.
  1407. * @param :
  1408. * @return :
  1409. * @-----------------------------------------------------------------------------------
  1410. */
  1411. function setScreenLocation(sid,xpos,ypos) {
  1412. var viewerObj = getViewer("sysMessage");
  1413. if (viewerObj != null && viewerObj.window.javascript.fSetScreenLocation != undefined) {
  1414. viewerObj.window.javascript.fSetScreenLocation(sid,xpos,ypos);
  1415. }
  1416. }
  1417. /**
  1418. * @-----------------------------------------------------------------------------------
  1419. * @desc : 화면 좌표 정보를 가져온다.
  1420. * @param :
  1421. * @return :
  1422. * @-----------------------------------------------------------------------------------
  1423. */
  1424. function getScreenLocation(sid) {
  1425. var viewerObj = getViewer("sysMessage");
  1426. if (viewerObj != null && viewerObj.window.javascript.fGetScreenLocation != undefined) {
  1427. return viewerObj.window.javascript.fGetScreenLocation(sid);
  1428. } else {
  1429. return "";
  1430. }
  1431. }
  1432. /**
  1433. * @-----------------------------------------------------------------------------------
  1434. * @desc : 모니터번호 기준좌표를 절대좌표로 변환한다.
  1435. * @param :
  1436. * @return :
  1437. * @-----------------------------------------------------------------------------------
  1438. */
  1439. function getAbsoluteLocation(mon,xpos,ypos) {
  1440. var viewerObj = getViewer("sysMessage");
  1441. if (viewerObj != null && viewerObj.window.javascript.fGetAbsoluteCoordinate != undefined) {
  1442. return viewerObj.window.javascript.fGetAbsoluteCoordinate(mon,xpos,ypos);
  1443. } else {
  1444. var abspos = new Array(2);
  1445. abspos[0] = xpos;
  1446. abspos[1] = ypos;
  1447. return abspos;
  1448. }
  1449. }
  1450. /**
  1451. * @-----------------------------------------------------------------------------------
  1452. * @desc : 주어진 화면 좌표를 모니터 번호와 모니터 기준의 상대좌표로 변환한다.
  1453. * @param :
  1454. * @return :
  1455. * @-----------------------------------------------------------------------------------
  1456. */
  1457. function getRelativeCoordinate(xpos,ypos){
  1458. var viewerObj = getViewer("sysMessage");
  1459. if (viewerObj != null && viewerObj.window.javascript.fGetRelativeCoordinate != undefined) {
  1460. var coord = viewerObj.window.javascript.fGetRelativeCoordinate(xpos,ypos);
  1461. coord[0] = coord[0]+1;
  1462. return coord;
  1463. } else {
  1464. var coord = new Array(3);
  1465. coord[0] = 1;
  1466. coord[1] = xpos;
  1467. coord[2] = ypos;
  1468. return coord;
  1469. }
  1470. }
  1471. /**
  1472. * @-----------------------------------------------------------------------------------
  1473. * @desc : 화면이 로딩된 모니터 번호를 반환한다.
  1474. * @param :
  1475. * @return : getRelativeCoordinate 호출
  1476. * @-----------------------------------------------------------------------------------
  1477. */
  1478. function getCurrentMonitorNumber() {
  1479. return getRelativeCoordinate(window.left,window.top)[0];
  1480. }
  1481. /**
  1482. * @-----------------------------------------------------------------------------------
  1483. * @desc : 모니터 사이즈 반환
  1484. * @param :
  1485. * @return :
  1486. * @-----------------------------------------------------------------------------------
  1487. */
  1488. function getMonitorSize(monNo) {
  1489. var viewerObj = getViewer("sysMessage");
  1490. if (viewerObj != null && viewerObj.window.javascript.fGetMonitorSize != undefined) {
  1491. return viewerObj.window.javascript.fGetMonitorSize(monNo);
  1492. } else {
  1493. var monSize = new Array(2);
  1494. monSize[0] = 1280;
  1495. monSize[1] = 1024;
  1496. return monSize;
  1497. }
  1498. }
  1499. /**
  1500. * @-----------------------------------------------------------------------------------
  1501. * @desc : 자신의 화면을 열린윈도우 목록에 등록한다.
  1502. * @param :
  1503. * @return :
  1504. * @-----------------------------------------------------------------------------------
  1505. */
  1506. function addOpenWindow() {
  1507. var viewerObj = getViewer("sysMessage");
  1508. if (viewerObj != null && viewerObj.window.javascript.fAddOpenWindow != undefined) {
  1509. // viewerObj.window.javascript.fAddOpenWindow(getScreenID()+"|"+getMyUID()+"|"+getTitle(),window);
  1510. viewerObj.window.javascript.fAddOpenWindow(getScreenID()+"|"+getMyUID()+"|"+window.type+"|"+getTitle(),window);
  1511. }
  1512. }
  1513. /**
  1514. * @-----------------------------------------------------------------------------------
  1515. * @desc : 자신의 화면을 열린윈도우 목록에서 삭제한다.
  1516. * @param :
  1517. * @return :
  1518. * @-----------------------------------------------------------------------------------
  1519. */
  1520. function removeOpenWindow() {
  1521. var viewerObj = getViewer("sysMessage");
  1522. if (viewerObj != null && viewerObj.window.javascript.fRemoveOpenWindow != undefined) {
  1523. // viewerObj.window.javascript.fRemoveOpenWindow(getScreenID()+"|"+getMyUID()+"|"+getTitle());
  1524. viewerObj.window.javascript.fRemoveOpenWindow(getScreenID()+"|"+getMyUID()+"|"+window.type+"|"+getTitle());
  1525. }
  1526. }
  1527. /**
  1528. * @-----------------------------------------------------------------------------------
  1529. * @desc : 열린 화면들 중에서 화면 ID가 sid인 화면의 윈도우 객체를 반환한다.
  1530. * 해당 화면이 없으면 null을 반환한다.
  1531. * @param :
  1532. * @return :
  1533. * @-----------------------------------------------------------------------------------
  1534. */
  1535. function getOpenWindow(sid) {
  1536. var viewerObj = getViewer("sysMessage");
  1537. if (viewerObj != null && viewerObj.window.javascript.fGetOpenWindow != undefined) {
  1538. return viewerObj.window.javascript.fGetOpenWindow(sid);
  1539. } else {
  1540. return null;
  1541. }
  1542. }
  1543. /**
  1544. * @-----------------------------------------------------------------------------------
  1545. * @desc : his main 윈도우 객체를 반환한다. 해당 window가 없으면 null을 반환한다.
  1546. * @param :
  1547. * @return :
  1548. * @-----------------------------------------------------------------------------------
  1549. */
  1550. function getMainViewer(){
  1551. var viewerObj = getViewer("bizMain");
  1552. //미리보기(F5) 상태 체크
  1553. if ( viewerObj == null )
  1554. {
  1555. viewerObj = htmldocument.all.TFViewer1;
  1556. }
  1557. if ( viewerObj == null )
  1558. {
  1559. return null;
  1560. } else{
  1561. return viewerObj.window;
  1562. }
  1563. }
  1564. //
  1565. // 화면간 데이터 전달
  1566. //
  1567. /**
  1568. * @-----------------------------------------------------------------------------------
  1569. * @desc : parameter 저장용 인스턴스 경로를 리턴
  1570. * @param :
  1571. * @return :
  1572. * @-----------------------------------------------------------------------------------
  1573. */
  1574. function getParameterPath() {
  1575. return gvParamPath;
  1576. }
  1577. /**
  1578. * @-----------------------------------------------------------------------------------
  1579. * @desc : name 명으로 value 값을 저장, 기존에 같은 name이 있으면 첫번째 값을 덮어씀
  1580. * @param :
  1581. * @return :
  1582. * @-----------------------------------------------------------------------------------
  1583. */
  1584. function setParameter(name, value){
  1585. var valueNode = instance1.selectSingleNode(gvParamPath+"/"+name+"/"+name+"value");
  1586. model.makeValue(gvParamPath+"/"+name+"/"+name+"value", value);
  1587. }
  1588. /**
  1589. * @-----------------------------------------------------------------------------------
  1590. * @desc : name 명으로 value 값을 추가
  1591. * @param :
  1592. * @return :
  1593. * @-----------------------------------------------------------------------------------
  1594. */
  1595. function addParameter(name, value){
  1596. var valueNode = instance1.selectSingleNode(gvParamPath+"/"+name+"/"+name+"value");
  1597. if(valueNode==null){
  1598. model.makeValue(gvParamPath+"/"+name+"/"+name+"value", value);
  1599. }else{
  1600. var nameNode = instance1.selectSingleNode(gvParamPath+"/"+name);
  1601. valueNode = instance1.createNode("element", name+"value", "");
  1602. valueNode.text = value;
  1603. nameNode.appendChild(valueNode);
  1604. }
  1605. }
  1606. /**
  1607. * @-----------------------------------------------------------------------------------
  1608. * @desc : index 번째 name의 값을 가져옴, index 생략하면 1
  1609. * @param :
  1610. * @return :
  1611. * @-----------------------------------------------------------------------------------
  1612. */
  1613. function getParameter(name, index){
  1614. if (index==null) { index = 1; }
  1615. return model.getValue(gvParamPath+"/"+name+"/"+name+"value["+index+"]");
  1616. }
  1617. /**
  1618. * @-----------------------------------------------------------------------------------
  1619. * @desc : 파라미터저장용 인스턴스의 하위노드갯수(파라미터 개수)를 반환한다.
  1620. * @param : name : 파라미터이름
  1621. * @return :
  1622. * @-----------------------------------------------------------------------------------
  1623. */
  1624. function getParameterCount(name){
  1625. return new Number(instance1.selectnodes(gvParamPath+"/"+name+"/"+name+"value").length);
  1626. }
  1627. /**
  1628. * @-----------------------------------------------------------------------------------
  1629. * @desc : name 명으로 저장된 데이터들 중에서 index 번째 위치에 있는 값을 삭제한다.
  1630. * index를 생략하면 첫번째 위치의 값을 삭제한다.
  1631. * @param :
  1632. * @return :
  1633. * @-----------------------------------------------------------------------------------
  1634. */
  1635. function removeParameter(name, index){
  1636. if (index==null) { index = 1; }
  1637. model.removeNode(gvParamPath+"/"+name+"/"+name+"value["+index+"]");
  1638. }
  1639. /**
  1640. * @-----------------------------------------------------------------------------------
  1641. * @desc : name의 모든 값울 삭제함
  1642. * @param :
  1643. * @return :
  1644. * @-----------------------------------------------------------------------------------
  1645. */
  1646. function clearParameter(name){
  1647. model.removeNode(gvParamPath+"/"+name);
  1648. }
  1649. /**
  1650. * @-----------------------------------------------------------------------------------
  1651. * @desc : 업무구분코드로 시작되는 문자열을 넘기면, 업무구문 문자열을 반환한다.
  1652. * @param :
  1653. * @return :
  1654. * @-----------------------------------------------------------------------------------
  1655. */
  1656. function getBizName(bizCode) {
  1657. var firstChar = bizCode.charAt(2);
  1658. var bizName = "";
  1659. switch(firstChar) {
  1660. case 'P': // 원무
  1661. case 'p':
  1662. bizName = "pam";
  1663. break;
  1664. case 'M': // EMR
  1665. case 'm':
  1666. bizName = "emr";
  1667. break;
  1668. case 'A': // 진료지원
  1669. case 'a':
  1670. bizName = "ast";
  1671. break;
  1672. case 'L': // LIS
  1673. case 'l':
  1674. bizName = "lis";
  1675. break;
  1676. case 'R': // MIS
  1677. case 'r':
  1678. bizName = "mis";
  1679. break;
  1680. case 'Z': // 공통
  1681. case 'z':
  1682. bizName = "com";
  1683. break;
  1684. case 'S': // 통합통계
  1685. case 's':
  1686. bizName = "sts";
  1687. break;
  1688. case 'C': // CRM
  1689. case 'c':
  1690. bizName = "crm";
  1691. break;
  1692. case 'I': // CRC(임상지원센터)
  1693. case 'i':
  1694. bizName = "crc";
  1695. break;
  1696. case 'D': // CRD(전자카드)
  1697. case 'd':
  1698. bizName = "crd";
  1699. break;
  1700. case 'T': // 임시
  1701. case 't':
  1702. bizName = "tmp";
  1703. break;
  1704. default: // unknown
  1705. bizName = "";
  1706. break;
  1707. }
  1708. return bizName;
  1709. }
  1710. /**
  1711. * @-----------------------------------------------------------------------------------
  1712. * @desc : 메인화면의 domain을 리턴한다.
  1713. * @param :
  1714. * @return : domainStr
  1715. * @-----------------------------------------------------------------------------------
  1716. */
  1717. function getMainDomain() {
  1718. var domainStr = getGlobalVariable("domain");
  1719. if (domainStr == "") { // 미리보기의 경우
  1720. domainStr = "http://his999dev.knu.ac.kr:8088";
  1721. }
  1722. return domainStr;
  1723. }
  1724. /**
  1725. * @-----------------------------------------------------------------------------------
  1726. * @desc : 메인화면의 SSL domain을 리턴한다.
  1727. * @param :
  1728. * @return : domainStr
  1729. * @-----------------------------------------------------------------------------------
  1730. */
  1731. function getMainDomainSSL() {
  1732. var domainStr = getGlobalVariable("domainSSL");
  1733. if (domainStr == "") { // 미리보기의 경우
  1734. domainStr = "http://his999dev.knu.ac.kr:8088";
  1735. }
  1736. return domainStr;
  1737. }
  1738. /**
  1739. * @-----------------------------------------------------------------------------------
  1740. * @desc : syscd 가 주어지면 해당 시스템의 접속 도메인 URL을 반환
  1741. * syscd가 null 이면 현재 화면이 연결된 연결된 시스템의 접속 도메인 URL을 반환
  1742. * @param : syscd : 시스템코드
  1743. * @return : domainStr
  1744. * @-----------------------------------------------------------------------------------
  1745. */
  1746. function getDomain(syscd) {
  1747. var domainStr = null;
  1748. if (syscd == null || syscd == "") {
  1749. syscd = model.getValue(gvSystemPath);
  1750. }
  1751. if (syscd == null || syscd == "") {
  1752. domainStr = getMainDomain();
  1753. } else {
  1754. domainStr = getGlobalVariable("sysurl" + syscd.toUpperCase());
  1755. }
  1756. return domainStr;
  1757. }
  1758. /**
  1759. * @-----------------------------------------------------------------------------------
  1760. * @desc : syscd 가 주어지면 해당 시스템의 접속 도메인 URL을 반환
  1761. * syscd가 null 이면 현재 화면이 연결된 연결된 시스템의 접속 도메인 URL을 반환
  1762. * @param : syscd : 시스템코드
  1763. * @return : domainStr
  1764. * @-----------------------------------------------------------------------------------
  1765. */
  1766. function getDomainSSL(syscd) {
  1767. var domainStr = null;
  1768. if (syscd == null || syscd == "") {
  1769. syscd = model.getValue(gvSystemPath);
  1770. }
  1771. if (syscd == null || syscd == "") {
  1772. domainStr = getMainDomainSSL();
  1773. } else {
  1774. domainStr = getGlobalVariable("sysurl" + syscd.toUpperCase());
  1775. }
  1776. return domainStr;
  1777. }
  1778. /**
  1779. * @-----------------------------------------------------------------------------------
  1780. * @desc : 현재화면의 화면ID를 반환한다.
  1781. * @param :
  1782. * @return : 화면ID
  1783. * @-----------------------------------------------------------------------------------
  1784. */
  1785. function getScreenURL(sid,syscd) {
  1786. return getDomain(syscd)+getScreenURI(sid);
  1787. }
  1788. /**
  1789. * @-----------------------------------------------------------------------------------
  1790. * @desc : 화면의 URI 를 가져온다.
  1791. * @param :
  1792. * @return : 화면URI
  1793. * @-----------------------------------------------------------------------------------
  1794. */
  1795. function getScreenURI(sid) {
  1796. return "/himed/webapps/hit/web/xrw/"+sid+".xrw";
  1797. }
  1798. /**
  1799. * @-----------------------------------------------------------------------------------
  1800. * @desc : submitID 에 대한 HTTP URI 를 반환한다.
  1801. * @param :
  1802. * @return : HTTP URI
  1803. * @-----------------------------------------------------------------------------------
  1804. */
  1805. function getActionURI(submitID) {
  1806. var bizName = getBizName(submitID);
  1807. var scrnID = getScreenID();
  1808. return "/himed/webapps/hit/web/xrw/.live?submit_id="+submitID+"&business_id="+bizName+"&screen_id="+scrnID;
  1809. }
  1810. /**
  1811. * @-----------------------------------------------------------------------------------
  1812. * @desc : submitID 에 대한 HTTP URL 를 반환한다.
  1813. * @param :
  1814. * @return : HTTP URL
  1815. * @-----------------------------------------------------------------------------------
  1816. */
  1817. function getActionURL(submitID) {
  1818. return getDomain()+getActionURI(submitID);
  1819. }
  1820. /**
  1821. * @-----------------------------------------------------------------------------------
  1822. * @desc : submitID 에 대한 HTTPS URL 를 반환한다.
  1823. * @param :
  1824. * @return : HTTP URL
  1825. * @-----------------------------------------------------------------------------------
  1826. */
  1827. function getActionURLSSL(submitID) {
  1828. return getDomainSSL()+getActionURI(submitID);
  1829. }
  1830. var gvOnSubmit = false;
  1831. var gvShowAlert = false;
  1832. var gvSuppressError = false;
  1833. var gvForceSubmit = false;
  1834. var gvHtmlRedirect = false;
  1835. // 영구적으로 창을 띄우지 않을 것인지에 대한 글로벌 변수 ( added by 이상준 2009-08-20 )
  1836. var gvSuppressErrorCheck = false;
  1837. /**
  1838. * @-----------------------------------------------------------------------------------
  1839. * @desc : 다음 submit() 호출에 대하여만 서버에서 메시지로 내려준 내용을 MessageBox()로 보여준다.
  1840. * @param :
  1841. * @return :
  1842. * @-----------------------------------------------------------------------------------
  1843. */
  1844. function setAlertOn() {
  1845. gvShowAlert = true;
  1846. }
  1847. /**
  1848. * @-----------------------------------------------------------------------------------
  1849. * @desc : 다음 submit() 호출에 대하여만 서버에러 메시지 창을 띄우지 않는다.
  1850. * (SuppressErrorCheck 가 true 인 경우 영구적으로 에러메시지 창을 띄우지 않는다. added by 이상준 2009-08-20 )
  1851. * @param :
  1852. * @return :
  1853. * @-----------------------------------------------------------------------------------
  1854. */
  1855. function setErrorOff(SuppressErrorCheck) {
  1856. gvSuppressError = true;
  1857. if(SuppressErrorCheck == true)
  1858. {
  1859. gvSuppressErrorCheck = true;
  1860. }
  1861. }
  1862. /**
  1863. * @-----------------------------------------------------------------------------------
  1864. * @desc : 영구적으로 에러메시지 창을 띄우지 않는 변수를 다시 false 로 바꾼다.
  1865. * @param :
  1866. * @return :
  1867. * @-----------------------------------------------------------------------------------
  1868. */
  1869. function setErrorOn() {
  1870. gvSuppressError = false;
  1871. gvSuppressErrorCheck = false;
  1872. }
  1873. /**
  1874. * @-----------------------------------------------------------------------------------
  1875. * @desc : 다음 submit() 호출에 대하여만 session timeout 에 상관없이 submit()이 실행되도록 한다.
  1876. * @param :
  1877. * @return :
  1878. * @-----------------------------------------------------------------------------------
  1879. */
  1880. function setForceOn() {
  1881. gvForceSubmit = true;
  1882. }
  1883. /**
  1884. * @-----------------------------------------------------------------------------------
  1885. * @desc : 다음 submit() 호출에 대하여만 결과가 HTML로 올 경우 HTML 을 보여주도록 설정한다.
  1886. * @param :
  1887. * @return :
  1888. * @-----------------------------------------------------------------------------------
  1889. */
  1890. function setHtmlRedirect() {
  1891. gvHtmlRedirect = true;
  1892. }
  1893. /**
  1894. * @-----------------------------------------------------------------------------------
  1895. * @desc : 세션 타임 아웃 확인
  1896. * @param :
  1897. * @return : true, false
  1898. * @-----------------------------------------------------------------------------------
  1899. */
  1900. function checkTimeout() {
  1901. var timeOut = parseInt(getGlobalVariable("session_timeout"));
  1902. if (isNaN(timeOut) || timeOut <= 0) { // timeout 적용하지 않음
  1903. return false;
  1904. }
  1905. var lastTime = getGlobalVariable("last_submit");
  1906. var curTime = (new Date()).getTime();
  1907. if (curTime - parseInt(lastTime) > (timeOut*60000)) {
  1908. return true;
  1909. } else {
  1910. return false;
  1911. }
  1912. }
  1913. /**
  1914. * @-----------------------------------------------------------------------------------
  1915. * @desc : 해당서브밋을 서버로 요청한다.
  1916. * @param : submitID : 서브밋아이디
  1917. * refresh : model 에 리프레시 적용 유무
  1918. * ref : 참조대상 노드셋
  1919. * resultref : 서브밋 결과 노드셋
  1920. * encoding : 인코딩설정 (기본값 UTF-8)
  1921. * @return :
  1922. * @-----------------------------------------------------------------------------------
  1923. */
  1924. function submit(submitID, refresh, ref, resultref, encoding) {
  1925. var showAlert = gvShowAlert;
  1926. var suppressError = gvSuppressError;
  1927. gvShowAlert = false;
  1928. if(gvSuppressErrorCheck == false)
  1929. {
  1930. gvSuppressError = false;
  1931. }
  1932. var islogout = false;
  1933. if (!gvForceSubmit) {
  1934. gvForceSubmit = false;
  1935. if (checkTimeout()) {
  1936. // 암호확인창 띄우기
  1937. body.disabled = true;
  1938. setParameter("type", "session");
  1939. // 암호확인 창에서 종료를 선택했는지 여부를 확인
  1940. setParameter("islogout", "false");
  1941. modal("SPZUM00400", "", "", "", "", "", "","width:279px;height:180px;align:center;sysmenu:hidden;");
  1942. // debugger;
  1943. body.disabled = false;
  1944. if (getParameter("islogout") == "true") {
  1945. // 종료를 선택했다. -> submit 을 날리지 않고 당 메소드를 종료하고 logout 절차를 진행한다.
  1946. islogout = true;
  1947. } else {
  1948. if (checkTimeout()) {
  1949. gvHtmlRedirect = false;
  1950. return false; // 암호확인 안됨
  1951. }
  1952. var newSessionStr = getParameter("newSessionStr");
  1953. if(newSessionStr != null && newSessionStr != "") {
  1954. var viewerObj = getViewer("sysMessage");
  1955. if (viewerObj != null && viewerObj.window.javascript.fReSetUserInfo != undefined)
  1956. viewerObj.window.javascript.fReSetUserInfo(newSessionStr);
  1957. }
  1958. }
  1959. }
  1960. // submit 시간 업데이트
  1961. setGlobalVariable("last_submit", (new Date()).getTime());
  1962. }
  1963. // 종료를 선택했으면 로그아웃절차를 수행
  1964. if (islogout) {
  1965. var status = getViewer("sysMessage");//message Object
  1966. status.window.javascript.fLogout("session");
  1967. return;
  1968. } else {
  1969. // 동시 submit 막기 위한 확인 절차
  1970. if (gvOnSubmit) {
  1971. gvHtmlRedirect = false;
  1972. return false;
  1973. } else {
  1974. gvOnSubmit = true;
  1975. }
  1976. var actionURL = getActionURL(submitID)
  1977. + getUserSessionString(); // 사용자정보 query string 추가.
  1978. if ( refresh == null ) {
  1979. refresh = true;
  1980. }
  1981. var retvalue = false;
  1982. try {
  1983. var sid = document.all(submitID);
  1984. if (!sid) {
  1985. messageBox("Submit["+submitID+"]이 정의되지","E007");
  1986. gvOnSubmit = false;
  1987. gvHtmlRedirect = false;
  1988. return false;
  1989. }
  1990. // ref와 resultref를 설정한다.
  1991. // null 이거나 "" 이면 설정하지 않는다.
  1992. if ( ref != null && ref != "" ) {
  1993. sid.attribute("ref") = ref;
  1994. }
  1995. if ( resultref != null && resultref != "" ) {
  1996. sid.attribute("resultref") = resultref;
  1997. }
  1998. // action url을 설정한다.
  1999. sid.attribute("action") = actionURL;
  2000. if (encoding != null && encoding != "") {
  2001. sid.attribute("encoding") = encoding;
  2002. } else {
  2003. sid.attribute("encoding") = "utf-8";
  2004. }
  2005. //sid.attribute("type") = "custom";
  2006. // 서버에 submit하기전에 이전 에러 메시지 인스턴스를 비운다.
  2007. model.removeNode(gvErrorMsgPath);
  2008. // 서버에 submit한다.
  2009. var ret = model.send(submitID, refresh, false, true);
  2010. if ( ret == 200 ) {
  2011. // 후처리
  2012. retvalue = showSystemMessage(showAlert,suppressError);
  2013. } else {
  2014. if (!suppressError) {
  2015. messageBox("Submit["+submitID+"] 실행을","E009","[ret:"+ret+"]");
  2016. }
  2017. retvalue = false;
  2018. }
  2019. } catch (e) {
  2020. if (!suppressError) {
  2021. messageBox("Submit["+submitID+"] 실행을","E009","[exception:"+e+"]");
  2022. }
  2023. retvalue = false;
  2024. }
  2025. gvOnSubmit = false;
  2026. gvHtmlRedirect = false;
  2027. return retvalue;
  2028. }
  2029. }
  2030. /**
  2031. * @-----------------------------------------------------------------------------------
  2032. * @desc : 해당서브밋을 서버로 요청한다.(SSL)
  2033. * @param : submitID : 서브밋아이디
  2034. * refresh : model 에 리프레시 적용 유무
  2035. * ref : 참조대상 노드셋
  2036. * resultref : 서브밋 결과 노드셋
  2037. * encoding : 인코딩설정 (기본값 UTF-8)
  2038. * @return :
  2039. * @-----------------------------------------------------------------------------------
  2040. */
  2041. function submitSSL(submitID, refresh, ref, resultref, encoding) {
  2042. var showAlert = gvShowAlert;
  2043. var suppressError = gvSuppressError;
  2044. gvShowAlert = false;
  2045. if(gvSuppressErrorCheck == false)
  2046. {
  2047. gvSuppressError = false;
  2048. }
  2049. var islogout = false;
  2050. if (!gvForceSubmit) {
  2051. gvForceSubmit = false;
  2052. if (checkTimeout()) {
  2053. // 암호확인창 띄우기
  2054. body.disabled = true;
  2055. setParameter("type", "session");
  2056. // 암호확인 창에서 종료를 선택했는지 여부를 확인
  2057. setParameter("islogout", "false");
  2058. modal("SPZUM00400", "", "", "", "", "", "","width:279px;height:180px;align:center;sysmenu:hidden;");
  2059. // debugger;
  2060. body.disabled = false;
  2061. if (getParameter("islogout") == "true") {
  2062. // 종료를 선택했다. -> submit 을 날리지 않고 당 메소드를 종료하고 logout 절차를 진행한다.
  2063. islogout = true;
  2064. } else {
  2065. if (checkTimeout()) {
  2066. gvHtmlRedirect = false;
  2067. return false; // 암호확인 안됨
  2068. }
  2069. var newSessionStr = getParameter("newSessionStr");
  2070. if(newSessionStr != null && newSessionStr != "") {
  2071. var viewerObj = getViewer("sysMessage");
  2072. if (viewerObj != null && viewerObj.window.javascript.fReSetUserInfo != undefined)
  2073. viewerObj.window.javascript.fReSetUserInfo(newSessionStr);
  2074. }
  2075. }
  2076. }
  2077. // submit 시간 업데이트
  2078. setGlobalVariable("last_submit", (new Date()).getTime());
  2079. }
  2080. // 종료를 선택했으면 로그아웃절차를 수행
  2081. if (islogout) {
  2082. var status = getViewer("sysMessage");//message Object
  2083. status.window.javascript.fLogout("session");
  2084. return;
  2085. } else {
  2086. // 동시 submit 막기 위한 확인 절차
  2087. if (gvOnSubmit) {
  2088. gvHtmlRedirect = false;
  2089. return false;
  2090. } else {
  2091. gvOnSubmit = true;
  2092. }
  2093. var actionURL = getActionURLSSL(submitID)
  2094. + getUserSessionString(); // 사용자정보 query string 추가.
  2095. if ( refresh == null ) {
  2096. refresh = true;
  2097. }
  2098. var retvalue = false;
  2099. try {
  2100. var sid = document.all(submitID);
  2101. if (!sid) {
  2102. messageBox("Submit["+submitID+"]이 정의되지","E007");
  2103. gvOnSubmit = false;
  2104. gvHtmlRedirect = false;
  2105. return false;
  2106. }
  2107. // ref와 resultref를 설정한다.
  2108. // null 이거나 "" 이면 설정하지 않는다.
  2109. if ( ref != null && ref != "" ) {
  2110. sid.attribute("ref") = ref;
  2111. }
  2112. if ( resultref != null && resultref != "" ) {
  2113. sid.attribute("resultref") = resultref;
  2114. }
  2115. // action url을 설정한다.
  2116. sid.attribute("action") = actionURL;
  2117. if (encoding != null && encoding != "") {
  2118. sid.attribute("encoding") = encoding;
  2119. } else {
  2120. sid.attribute("encoding") = "utf-8";
  2121. }
  2122. //sid.attribute("type") = "custom";
  2123. // 서버에 submit하기전에 이전 에러 메시지 인스턴스를 비운다.
  2124. model.removeNode(gvErrorMsgPath);
  2125. // 서버에 submit한다.
  2126. var ret = model.send(submitID, refresh, false, true);
  2127. if ( ret == 200 ) {
  2128. // 후처리
  2129. retvalue = showSystemMessage(showAlert,suppressError);
  2130. } else {
  2131. if (!suppressError) {
  2132. messageBox("Submit["+submitID+"] 실행을","E009","[ret:"+ret+"]");
  2133. }
  2134. retvalue = false;
  2135. }
  2136. } catch (e) {
  2137. if (!suppressError) {
  2138. messageBox("Submit["+submitID+"] 실행을","E009","[exception:"+e+"]");
  2139. }
  2140. retvalue = false;
  2141. }
  2142. gvOnSubmit = false;
  2143. gvHtmlRedirect = false;
  2144. return retvalue;
  2145. }
  2146. }
  2147. /**
  2148. * @-----------------------------------------------------------------------------------
  2149. * @desc : submit 수행 시 에러가 난 경우 발생
  2150. * @param :
  2151. * @return :
  2152. * @-----------------------------------------------------------------------------------
  2153. */
  2154. function xforms_submit_error() {
  2155. if (error.errorcode == 3003) {
  2156. messageBox("받은 데이터 중 유효하지 않은 문자가 존재하여 화면 출력을","E009","[errorcode:"+error.errorcode+"]");
  2157. event.stopPropagation();
  2158. }
  2159. }
  2160. /**
  2161. * @-----------------------------------------------------------------------------------
  2162. * @desc : 서버에서 전달된 메시지를 화면에 보여준다.
  2163. * @param :
  2164. * @return : true, false
  2165. * @-----------------------------------------------------------------------------------
  2166. */
  2167. function showSystemMessage(showAlert,suppressError) {
  2168. var type = model.getValue(gvErrorMsgPath+"/type");
  2169. var code = model.getValue(gvErrorMsgPath+"/code");
  2170. var msg = model.getValue(gvErrorMsgPath+"/msg");
  2171. var desc = model.getValue(gvErrorMsgPath+"/description");
  2172. if ( "error" == type ) {
  2173. if (suppressError == null || !suppressError) {
  2174. body.disabled = true;
  2175. window.load("../../../com/commonweb/xrw/SPZZZ00100_시스템에러.xrw","modal","","width:514px;height:198px;align:center;",gvErrorMsgPath,"/root/main");
  2176. body.disabled = false;
  2177. }
  2178. return false;
  2179. } else {
  2180. setSystemMessage(msg);
  2181. if (showAlert != null && showAlert) {
  2182. messageBox(msg,"I");
  2183. }
  2184. return true;
  2185. }
  2186. }
  2187. /**
  2188. * @-----------------------------------------------------------------------------------
  2189. * @desc : submit시 서버 시스템 오류 또는 HTML 데이터가 내려올 경우
  2190. * @param :
  2191. * @return :
  2192. * @-----------------------------------------------------------------------------------
  2193. */
  2194. function onredirecthtml() {
  2195. if( document.all(event.target).elementName == "xforms:submission" && gvHtmlRedirect == false) {
  2196. event.preventDefault();
  2197. event.stopPropagation();
  2198. }
  2199. gvHtmlRedirect = false;
  2200. }
  2201. /**
  2202. * @-----------------------------------------------------------------------------------
  2203. * @desc : submit 결과에 <resultKM ../> 이 있을 경우
  2204. * @param :
  2205. * @return :
  2206. * @-----------------------------------------------------------------------------------
  2207. */
  2208. function onerror() {
  2209. var msg = error.description;
  2210. var svrtime = error.errorSource;
  2211. var pctime = (new Date()).getTime();
  2212. // 서버시간과의 차이를 저장해 놓는다.
  2213. setGlobalVariable("timediff", svrtime - pctime);
  2214. event.stopPropagation();
  2215. // 에러 내용을 instance에 저장
  2216. handleSystemMessage(msg);
  2217. }
  2218. /**
  2219. * @-----------------------------------------------------------------------------------
  2220. * @desc : submit 결과로 전달돤 error event의 내용을 처리한다.
  2221. * @param :
  2222. * @return :
  2223. * @-----------------------------------------------------------------------------------
  2224. */
  2225. function handleSystemMessage(msg) {
  2226. // 에러 내용을 instance에 저장
  2227. var msgItem = msg.split("|");
  2228. model.makeValue(gvErrorMsgPath+"/type",msgItem[0]); // error 또는 info
  2229. model.makeValue(gvErrorMsgPath+"/code",msgItem[1]); // error인 경우 에러코드
  2230. model.makeValue(gvErrorMsgPath+"/msg",msgItem[2].replace(";","\n"),true); // 메시지의 newline 기호인 ; 를 실제 줄바꿈으로변경
  2231. var description = "";
  2232. if (msgItem[3] != null && msgItem[3] != "undefined") {
  2233. description = msgItem[3];
  2234. }
  2235. if (msgItem[4] != null && msgItem[4] != "undefined") {
  2236. description = description + "\n" + msgItem[4];
  2237. }
  2238. model.makeValue(gvErrorMsgPath+"/description",description); // error인 경우 발생위치
  2239. }
  2240. /**
  2241. * @-----------------------------------------------------------------------------------
  2242. * @desc : 사용자 정보 세션 데이터를 항상 서버 submit과 함께 올리기 위하여
  2243. * 해당 데이터를 action URL에 query string으로 추가한다.
  2244. * 이때 사용할 query string을 생성한다.
  2245. * @param :
  2246. * @return :
  2247. * @-----------------------------------------------------------------------------------
  2248. */
  2249. function getUserSessionString() {
  2250. var sessionStr = "&macaddr="+getUserInfo("macaddr");
  2251. var isAnonymous = getGlobalVariable("anonymous");
  2252. if (isAnonymous == "true") { // 미리보기인 경우 세션정보를 파라메터로 추가한다.
  2253. sessionStr = sessionStr + "&anony_session="+encodeURI(getUserInfos());
  2254. }
  2255. return sessionStr;
  2256. }
  2257. /**
  2258. *
  2259. *I001=처리되었습니다.
  2260. *I002=완료되었습니다.
  2261. *I003=필수입력입니다.
  2262. *I004=없습니다.
  2263. *I005=환자입니다.
  2264. *I006=가능합니다.
  2265. *I007=확인하십시오.
  2266. *I008=하십시오.
  2267. *I009=입니다.
  2268. *I010=있습니다.
  2269. *I011=않습니다.
  2270. *
  2271. *C001=입력하십시오 !
  2272. *C002=선택하십시오 !
  2273. *C003=진행하십시오 !
  2274. *
  2275. *E001=할 수 없습니다.
  2276. *E002=권한이 없습니다.
  2277. *E003=초과하였습니다.
  2278. *E004=일치하지 않습니다.
  2279. *E005=선택되었습니다.
  2280. *E006=중복되었습니다.
  2281. *E007=않았습니다.
  2282. *E008=입니다.
  2283. *E009=실패하였습니다.
  2284. *E010=사원만 가능합니다.
  2285. *E011=이전만 가능합니다.
  2286. *E012=이후만 가능합니다.
  2287. *E013=데이터가 없습니다.
  2288. *E014=존재하지 않습니다.
  2289. *E015=자리까지만 가능합니다.
  2290. *E016=유효하지 않습니다.
  2291. *
  2292. *Q001=삭제 하시겠습니까 ?
  2293. *Q002=저장 하시겠습니까 ?
  2294. *Q003=계속 진행하시겠습니까?
  2295. *Q004=실행 하시겠습니까?
  2296. *Q005=조회 하시겠습니까?
  2297. *Q006=확정 하시겠습니까?
  2298. *Q007=취소 하시겠습니까?
  2299. *Q008=추가 하시겠습니까?
  2300. *Q009=적용 하시겠습니까?
  2301. *Q010=초기화 하시겠습니까?
  2302. *Q011=확인 하시겠습니까?
  2303. *Q012=수정 하시겠습니까?
  2304. *Q013= 선택 하시겠습니까?
  2305. *Q014= 등록 하시겠습니까?
  2306. *Q015= 재요청 하시겠습니까?
  2307. *Q016= 종결된 기록지입니다. 기록내용을 수정하시겠습니까?
  2308. *
  2309. *S001=하시려면 예(Yes)\n아니면 아니오(No)
  2310. *S002=저장하시려면 예(Yes)\n변경하시려면 아니오(No)
  2311. *S003=pMessage 하시려면 예(Yes)\n pOptMsg 하시려면 아니오(No)
  2312. *S004=하시려면 예(Yes)\n아니면 아니오(No)\n무시하시려면 취소를 선택하세요
  2313. *S005=종결된 기록지입니다. 작업유형을 선택하십시오\n\n예 : 기록수정 / 아니오 : 신규기록생성
  2314. *S006=pMessage 하시려면 예(Yes)\n pOptMsg[0] 하시려면 아니오(No)\n pOptMsg[1] 하시려면 취소를 선택하십시오.
  2315. *
  2316. *return :
  2317. */
  2318. /**
  2319. * @-----------------------------------------------------------------------------------
  2320. * @desc : msg_code : I(Information), C(Critical), E(Exclamation), Q(Question, YN), S(Select, YNC)
  2321. * @param : pMessage : 메시지 타입, pCode : 코드정보
  2322. * @return : yes=6, no=7
  2323. * @-----------------------------------------------------------------------------------
  2324. */
  2325. function messageBox(pMessage, pCode, pOptMsg) {
  2326. var alertMsg = null;
  2327. var msgTitle = null;
  2328. var msgType = null;
  2329. var msgData = null;
  2330. var msgRtn = "";
  2331. // Title Message
  2332. switch( pCode.substr(0,1) ){
  2333. case "I": msgTitle = "정보";
  2334. msgType = "64";
  2335. break;
  2336. case "C": msgTitle = "오류";
  2337. msgType = "16";
  2338. break;
  2339. case "E": msgTitle = "경고";
  2340. msgType = "48";
  2341. break;
  2342. case "Q": msgTitle = "확인";
  2343. msgType = "36";
  2344. break;
  2345. case "S": msgTitle = "선택";
  2346. msgType = "35";
  2347. break;
  2348. default : msgTitle = "오류";
  2349. msgType = "16";
  2350. }
  2351. // Message Data
  2352. switch( pCode ){
  2353. case "I000": alertMsg = ""; break;
  2354. case "I001": alertMsg = " 처리되었습니다."; break;
  2355. case "I002": alertMsg = " 완료되었습니다."; break;
  2356. case "I003": alertMsg = " 필수입력입니다."; break;
  2357. case "I004": alertMsg = " 없습니다."; break;
  2358. case "I005": alertMsg = " 환자입니다."; break;
  2359. case "I006": alertMsg = " 가능합니다."; break;
  2360. case "I007": alertMsg = " 확인하십시오."; break;
  2361. case "I008": alertMsg = " 하십시오."; break;
  2362. case "I009": alertMsg = " 입니다."; break;
  2363. case "I010": alertMsg = " 있습니다."; break;
  2364. case "I011": alertMsg = " 않습니다.";break;
  2365. case "C000": alertMsg = ""; break;
  2366. case "C001": alertMsg = " 입력하십시오."; break;
  2367. case "C002": alertMsg = " 선택하십시오."; break;
  2368. case "C003": alertMsg = " 진행하십시오."; break;
  2369. case "E000": alertMsg = ""; break;
  2370. case "E001": alertMsg = " 할 수 없습니다."; break;
  2371. case "E002": alertMsg = " 권한이 없습니다."; break;
  2372. case "E003": alertMsg = " 초과하였습니다."; break;
  2373. case "E004": alertMsg = " 일치하지 않습니다."; break;
  2374. case "E005": alertMsg = " 선택되었습니다."; break;
  2375. case "E006": alertMsg = " 중복되었습니다."; break;
  2376. case "E007": alertMsg = " 않았습니다."; break;
  2377. case "E008": alertMsg = " 입니다."; break;
  2378. case "E009": alertMsg = " 실패하였습니다."; break;
  2379. case "E010": alertMsg = " 사원만 가능합니다."; break;
  2380. case "E011": alertMsg = " 이전만 가능합니다."; break;
  2381. case "E012": alertMsg = " 이후만 가능합니다."; break;
  2382. case "E013": alertMsg = " 데이터가 없습니다."; break;
  2383. case "E014": alertMsg = " 존재하지 않습니다."; break;
  2384. case "E015": alertMsg = " 자리까지만 가능합니다."; break;
  2385. case "E016": alertMsg = " 유효하지 않습니다."; break;
  2386. case "Q000": alertMsg = ""; break;
  2387. case "Q001": alertMsg = " 삭제 하시겠습니까?"; break;
  2388. case "Q002": alertMsg = " 저장 하시겠습니까?"; break;
  2389. case "Q003": alertMsg = " 계속 진행하시겠습니까?"; break;
  2390. case "Q004": alertMsg = " 실행 하시겠습니까?"; break;
  2391. case "Q005": alertMsg = " 조회 하시겠습니까?"; break;
  2392. case "Q006": alertMsg = " 확정 하시겠습니까?"; break;
  2393. case "Q007": alertMsg = " 취소 하시겠습니까?"; break;
  2394. case "Q008": alertMsg = " 추가 하시겠습니까?"; break;
  2395. case "Q009": alertMsg = " 적용 하시겠습니까?"; break;
  2396. case "Q010": alertMsg = " 초기화 하시겠습니까?"; break;
  2397. case "Q011": alertMsg = " 확인 하시겠습니까?"; break;
  2398. case "Q012": alertMsg = " 수정 하시겠습니까?"; break;
  2399. case "Q013": alertMsg = " 선택 하시겠습니까?";break;
  2400. case "Q014": alertMsg = " 등록 하시겠습니까?";break;
  2401. case "Q015": alertMsg = " 재요청 하시겠습니까?";break;
  2402. case "Q016": alertMsg = " 종결된 기록지입니다. 기록내용을 수정하시겠습니까?";break;
  2403. case "Q017": alertMsg = "\r\n전자동의서로 출력하시겠습니까?"; break;
  2404. case "S000": alertMsg = ""; break;
  2405. case "S001": alertMsg = " 하시려면 예(Yes)\n아니면 아니오(No)를 선택하십시오."; break;
  2406. case "S002": alertMsg = " 저장하시려면 예(Yes)\n변경하시려면 아니오(No)를 선택하십시오"; break;
  2407. case "S003": alertMsg = " 하시려면 예(Yes)\n" + pOptMsg + " 하시려면 아니오(No)를 선택하십시오.";break;
  2408. case "S004": alertMsg = " 하시려면 예(Yes)\n아니면 아니오(No)\n무시하시려면 취소를 선택하십시오";break;
  2409. case "S005": alertMsg = " 종결된 기록지입니다. 작업유형을 선택하십시오\n\n예 : 기록수정 / 아니오 : 신규기록생성";break;
  2410. case "S006": alertMsg = " 하시려면 예(Yes)\n" + pOptMsg.split("|")[0] + " 하시려면 아니오(No)\n" + pOptMsg.split("|")[1] + " 하시려면 취소를 선택하십시오";break;
  2411. case "S007": alertMsg = " \n재등록 하시려면 예(Yes), " + pOptMsg.split("|")[0] + " 아니오(No), " + pOptMsg.split("|")[1] + " 취소를 선택하십시오.";break;
  2412. default : alertMsg = "";
  2413. }
  2414. if(pOptMsg == null || pOptMsg == ""){
  2415. msgData = pMessage+alertMsg;
  2416. } else {
  2417. if (pCode == "S003" || pCode == "S006" || pCode == "S007") {
  2418. msgData = pMessage+alertMsg;
  2419. } else {
  2420. msgData = pMessage+alertMsg + "\n" + pOptMsg;
  2421. }
  2422. }
  2423. body.disabled = true;
  2424. // 속도 체크를 위한 코드 추가(2015.07.28 - smkim)
  2425. var beforeTime = fBeforeTimeCheck();
  2426. msgRtn = window.alert( msgData, msgTitle, msgType );
  2427. // 속도 체크를 위한 코드 추가(2015.07.28 - smkim)
  2428. fExceptPopupTime(beforeTime);
  2429. body.disabled = false;
  2430. return msgRtn;
  2431. }
  2432. /*--------------------------------------------------------------------
  2433. //사용자 세션정보 제공함수들
  2434. ---------------------------------------------------------------------*/
  2435. /**
  2436. * @-----------------------------------------------------------------------------------
  2437. * @desc : 사용자 세션정보 제공함수 UserId
  2438. * @param :
  2439. * @return :
  2440. * @-----------------------------------------------------------------------------------
  2441. */
  2442. function getUserId() {
  2443. return getUserInfo("userid");
  2444. }
  2445. /**
  2446. * @-----------------------------------------------------------------------------------
  2447. * @desc : 사용자 세션정보 제공함수 UserName
  2448. * @param :
  2449. * @return :
  2450. * @-----------------------------------------------------------------------------------
  2451. */
  2452. function getUserName() {
  2453. return getUserInfo("usernm");
  2454. }
  2455. /**
  2456. * @-----------------------------------------------------------------------------------
  2457. * @desc : 사용자 세션정보 제공함수 UserInfo
  2458. * @param :
  2459. * @return :
  2460. * @-----------------------------------------------------------------------------------
  2461. */
  2462. function getUserInfo(key) {
  2463. if ( getGlobalVariable("userinfos") == "" ) {
  2464. setDefaultUserInfo();
  2465. }
  2466. return getGlobalVariable(key);
  2467. }
  2468. /**
  2469. * @-----------------------------------------------------------------------------------
  2470. * @desc : 사용자 세션정보 제공함수 userinfos
  2471. * @param :
  2472. * @return :
  2473. * @-----------------------------------------------------------------------------------
  2474. */
  2475. function getUserInfos() {
  2476. if ( getGlobalVariable("userinfos") == "" ) {
  2477. setDefaultUserInfo();
  2478. }
  2479. return getGlobalVariable("userinfos");
  2480. }
  2481. /**
  2482. * @-----------------------------------------------------------------------------------
  2483. * @desc : 사용자 정보를 셋팅
  2484. * @param :
  2485. * @return :
  2486. * @-----------------------------------------------------------------------------------
  2487. */
  2488. function setDefaultUserInfo() {
  2489. var userInfoKeyStr="userid|usernm|posinstcd|posinstnm|posdeptcd|posdeptnm|dutplceinstcd|dutplceinstnm|dutplcecd|dutplcenm|jobkindcd|jobkindnm|jobposcd|jobposnm|jobrespcd|jobrespnm|prfshipflagcd|prfshipflagnm|licnsno|specordyn|deptabbr|orddeptflag|wardflag|systemcd|systemnm|systeminstcd|systeminstnm|logindt|kmiip|kmiport|usergrp|ipaddr|dutinstcd|dutinstnm|dutunitcd|dutunitnm|mpphonno|orginstcd|orginstnm|orgdeptcd|orgdeptnm|userkindcd|ordsupdeptcd";
  2490. var userInfoKeyArr = userInfoKeyStr.split("|");
  2491. var userInfoStr = "";
  2492. try {
  2493. var fso = new ActiveXObject("Scripting.FileSystemObject");
  2494. var f = fso.GetFile("session.txt");
  2495. var ts = f.OpenAsTextStream(1);
  2496. userInfoStr = ts.ReadLine();
  2497. ts.Close();
  2498. } catch(e) {
  2499. }
  2500. var userInfoArr = userInfoStr.split("|");
  2501. var len = userInfoKeyArr.length;
  2502. setGlobalVariable("anonymous","true"); // 사용자세션정보가 미리보기용임
  2503. for(i=0;i<len;i++) {
  2504. setGlobalVariable(userInfoKeyArr[i],userInfoArr[i]);
  2505. }
  2506. setGlobalVariable("userinfos", userInfoStr);
  2507. }
  2508. /*--------------------------------------------------------------------
  2509. //공통 세션변수 관련 함수
  2510. ---------------------------------------------------------------------*/
  2511. /**
  2512. * @-----------------------------------------------------------------------------------
  2513. * @desc : 세션 변수명을 반환한다.
  2514. * @param :
  2515. * @return :
  2516. * @-----------------------------------------------------------------------------------
  2517. */
  2518. function getPropertyName(key, bizCode){
  2519. var bizName = "";
  2520. var propertyName = "";
  2521. if (bizCode == null || bizCode == "" || bizCode == "undefined")
  2522. {
  2523. bizName = "";
  2524. }else{
  2525. bizName = getBizName(bizCode)+"_";
  2526. }
  2527. return getSystemCd()+"_"+bizName+"gsv_"+key;
  2528. }
  2529. /**
  2530. * @-----------------------------------------------------------------------------------
  2531. * @desc : 세션변수를 저장한다.
  2532. * @param :
  2533. * @return :
  2534. * @-----------------------------------------------------------------------------------
  2535. */
  2536. function setGlobalVariable(key, value, bizCode){
  2537. model.property(getPropertyName(key, bizCode)) = value;
  2538. return true;
  2539. }
  2540. /**
  2541. * @-----------------------------------------------------------------------------------
  2542. * @desc : 세션변수를 반환한다.
  2543. * @param :
  2544. * @return :
  2545. * @-----------------------------------------------------------------------------------
  2546. */
  2547. function getGlobalVariable(key, bizCode){
  2548. return model.property(getPropertyName(key, bizCode));
  2549. }
  2550. /**
  2551. * @-----------------------------------------------------------------------------------
  2552. * @desc : 사용자가 속한 특수 사용자 그룹 목록을 반환한다.
  2553. * @param :
  2554. * @return :
  2555. * @-----------------------------------------------------------------------------------
  2556. */
  2557. function getUserGroupList() {
  2558. var usergrp = getUserInfo("usergrp");
  2559. if (usergrp == null || usergrp == "") {
  2560. return null;
  2561. } else {
  2562. return usergrp.split(",");
  2563. }
  2564. }
  2565. /**
  2566. * @-----------------------------------------------------------------------------------
  2567. * @desc : 사용자가 주어진 특수 사용자 그룹에 속해있는지 여부를 반환한다.
  2568. * @param :
  2569. * @return :
  2570. * @-----------------------------------------------------------------------------------
  2571. */
  2572. function checkUserGroup(grpname) {
  2573. var usergrplist = getUserGroupList();
  2574. if (usergrplist == null) {
  2575. return false;
  2576. }
  2577. for(var i=0;i<usergrplist.length;i++) {
  2578. if (grpname == usergrplist[i]) {
  2579. return true;
  2580. }
  2581. }
  2582. return false;
  2583. }
  2584. /*-------------------------------------------------------------------
  2585. //환자정보 관련 함수
  2586. ---------------------------------------------------------------------*/
  2587. /**
  2588. * @-----------------------------------------------------------------------------------
  2589. * @desc : 환자정보 셋팅
  2590. * @param : 환자정보 key
  2591. * pid : 환자번호
  2592. * pname : 환자명
  2593. * age : 나이(54/M)
  2594. * addr : 주소
  2595. * insukind : 보험유형
  2596. * ininfo : 재원정보
  2597. * body : 몸무게 키
  2598. * btype : 혈액형
  2599. * orddept : 진료과
  2600. * apntdr : 의사정보 - 지정의
  2601. * attndr : 의사정보 - 주치의
  2602. * diagnosis : 진단명
  2603. * operation : 수술정보
  2604. * allergy : 알러지 정보(Y^Y)
  2605. * newallergy : 새로운 알러지 확인 정보(Y)
  2606. * infection : 감염정보(Y^Y^Y)
  2607. * intncare : 특례(Y)
  2608. * vip : vip(Y)
  2609. * one : one(Y)
  2610. * healexam : 건진(Y)
  2611. * coop : 협력(Y)
  2612. * cp : cp(Y)
  2613. * addrdetl : 상세주소
  2614. * regstno : 주민번호
  2615. * telno : 전화번호
  2616. * zipcd : 우편번호
  2617. * @return : false
  2618. * @-----------------------------------------------------------------------------------
  2619. */
  2620. function setPatientInfo(key, value) {
  2621. var viewerObj = getViewer("patientInfo");
  2622. if ( viewerObj != null){
  2623. if ( key != "pid" && value.split("|")[0] == getPatientId()){
  2624. return viewerObj.window.javascript.fSetPatientInfo(key, value.split("|")[1]);
  2625. }else{
  2626. return viewerObj.window.javascript.fSetPatientInfo(key, value);
  2627. }
  2628. }
  2629. return false;
  2630. }
  2631. /**
  2632. * @-----------------------------------------------------------------------------------
  2633. * @desc : 환자정보 전체 저장
  2634. * @param :
  2635. * @return : false
  2636. * @-----------------------------------------------------------------------------------
  2637. */
  2638. function setPatientInfos(values){
  2639. var viewerObj = getViewer("patientInfo");
  2640. if ( viewerObj != null ){
  2641. return viewerObj.window.javascript.fSetPatientInfos(values);
  2642. }
  2643. return false;
  2644. }
  2645. /**
  2646. * @-----------------------------------------------------------------------------------
  2647. * @desc : 환자정보 삭제
  2648. * @param :
  2649. * @return : false
  2650. * @-----------------------------------------------------------------------------------
  2651. */
  2652. function delPatientInfos(){
  2653. var viewerObj = getViewer("patientInfo");
  2654. if ( viewerObj != null ){
  2655. return viewerObj.window.javascript.fDelPatientInfos();
  2656. }
  2657. return false;
  2658. }
  2659. /**
  2660. * @-----------------------------------------------------------------------------------
  2661. * @desc : 환자정보 조회
  2662. * @param :
  2663. * @return : 환자정보 or ""
  2664. * @-----------------------------------------------------------------------------------
  2665. */
  2666. function getPatientInfo(key) {
  2667. var viewerObj = getViewer("patientInfo");
  2668. if ( viewerObj != null ){
  2669. return viewerObj.window.javascript.fGetPatientInfo(key);
  2670. }
  2671. return "";
  2672. }
  2673. /**
  2674. * @-----------------------------------------------------------------------------------
  2675. * @desc : 환자기본정보 전체 조회
  2676. * @param :
  2677. * @return : 환자정보 or ""
  2678. * @-----------------------------------------------------------------------------------
  2679. */
  2680. function getPatientInfos() {
  2681. var viewerObj = getViewer("patientInfo");
  2682. if ( viewerObj != null ){
  2683. return viewerObj.window.javascript.fGetPatientInfos();
  2684. }
  2685. return "";
  2686. }
  2687. /**
  2688. * @-----------------------------------------------------------------------------------
  2689. * @desc : 환자기본정보 전체 조회(컬럼 이름과 함께)
  2690. * @param :
  2691. * @return : 환자정보 or ""
  2692. * @-----------------------------------------------------------------------------------
  2693. */
  2694. function fGetPatientInfosWithName() {
  2695. try {
  2696. var viewerObj = getViewer("patientInfo");
  2697. if ( viewerObj != null ){
  2698. return viewerObj.window.javascript.fGetPatientInfosWithName();
  2699. }
  2700. } catch (e) {
  2701. }
  2702. return "";
  2703. }
  2704. /**
  2705. * @-----------------------------------------------------------------------------------
  2706. * @desc : 환자번호 조회
  2707. * @param :
  2708. * @return : 환자번호 or ""
  2709. * @-----------------------------------------------------------------------------------
  2710. */
  2711. function getPatientId() {
  2712. var viewerObj = getViewer("patientInfo");
  2713. if ( viewerObj != null ){
  2714. return viewerObj.window.javascript.fGetPatientId();
  2715. }
  2716. return "";
  2717. }
  2718. /**
  2719. * @-----------------------------------------------------------------------------------
  2720. * @desc : 환자명 조회
  2721. * @param :
  2722. * @return : 환자명 or ""
  2723. * @-----------------------------------------------------------------------------------
  2724. */
  2725. function getPatientName() {
  2726. var viewerObj = getViewer("patientInfo");
  2727. if ( viewerObj != null ){
  2728. return viewerObj.window.javascript.fGetPatientName();
  2729. }
  2730. return "";
  2731. }
  2732. /**
  2733. * @-----------------------------------------------------------------------------------
  2734. * @desc : 환자구분을 설정한다.
  2735. * @param :
  2736. * @return : 환자구분 or false
  2737. * @-----------------------------------------------------------------------------------
  2738. */
  2739. function setPatientFlag(value){
  2740. var viewerObj = getViewer("patientInfo");
  2741. if ( viewerObj != null){
  2742. return viewerObj.window.javascript.fSetPatientFlag(value);
  2743. }
  2744. return false;
  2745. }
  2746. /**
  2747. * @-----------------------------------------------------------------------------------
  2748. * @desc : 환자구분에 따른 상세정보를 설정한다.
  2749. * @param :
  2750. * @return : 환자구분 or false
  2751. * @-----------------------------------------------------------------------------------
  2752. */
  2753. function setPatientInfoDetail(srcPath){
  2754. var viewerObj = getViewer("patientInfo");
  2755. var srcPath = instance1.selectSingleNode(srcPath);
  2756. if ( viewerObj != null && srcPath != null){
  2757. var destPath = viewerObj.window.javascript.fGetPatientInfoPath();
  2758. if( destPath != ""){
  2759. viewerObj.window.model.makeNode(destPath);
  2760. viewerObj.window.model.copyNode(destPath, srcPath);
  2761. return viewerObj.window.javascript.fCheckPatientId(destPath, "paminfo");
  2762. }else{
  2763. messageBox("환자구분이","E014");
  2764. }
  2765. }
  2766. return false;
  2767. }
  2768. /**
  2769. * @-----------------------------------------------------------------------------------
  2770. * @desc : 환자상세정보를 key 별로 저장한다.
  2771. * 반드시 setPatientInfoDetail(srcPath) 를 통해 최초 한번은 환자상세정보를 설정해야 한다.
  2772. * @param :
  2773. * @return : 환자상세정보 or false
  2774. * @-----------------------------------------------------------------------------------
  2775. */
  2776. function setPatientInfoDetailByKey(key, value) {
  2777. var viewerObj = getViewer("patientInfo");
  2778. if ( viewerObj != null){
  2779. if (key == "pid") {
  2780. return viewerObj.window.javascript.fSetPatientInfoDetailByKey(key, value);
  2781. } else {
  2782. if (value.split("|")[0] == getPatientId()) {
  2783. return viewerObj.window.javascript.fSetPatientInfoDetailByKey(key, value.split("|")[1]);
  2784. }
  2785. }
  2786. }
  2787. return false;
  2788. }
  2789. /**
  2790. * @-----------------------------------------------------------------------------------
  2791. * @desc : 환자구분에 따른 상세정보를 key에 해당하는 value반환한다.
  2792. * @param :
  2793. * @return : 환자상세정보 or ""
  2794. * @-----------------------------------------------------------------------------------
  2795. */
  2796. function getPatientInfoDetail(key) {
  2797. var viewerObj = getViewer("patientInfo");
  2798. if ( viewerObj != null ){
  2799. return viewerObj.window.javascript.fGetPatientInfoDetail(key);
  2800. }
  2801. return "";
  2802. }
  2803. /**
  2804. * @-----------------------------------------------------------------------------------
  2805. * @desc : 환자구분에 따른 상세정보 전체를 반환한다.
  2806. * 지정한 노드로 노드 copy한다.
  2807. * @param :
  2808. * @return : 환자상세정보 or false
  2809. * @-----------------------------------------------------------------------------------
  2810. */
  2811. function getPatientInfoDetails(destPath) {
  2812. var viewerObj = getViewer("patientInfo");
  2813. var destPath = instance1.selectSingleNode(destPath);
  2814. if ( viewerObj != null && destPath != null){
  2815. srcPath = viewerObj.window.javascript.fGetPatientInfoPath();
  2816. if(srcPath != ""){
  2817. srcPath = viewerObj.window.instance1.selectSingleNode(srcPath);
  2818. if(srcPath != null){
  2819. model.copyNode(destPath, srcPath);
  2820. return true;
  2821. }
  2822. }
  2823. }
  2824. return false;
  2825. }
  2826. /**
  2827. * @-----------------------------------------------------------------------------------
  2828. * @desc : 수술관련 상세정보를 설정한다.
  2829. * @param :
  2830. * @return : 수술정보정보 or false
  2831. * @-----------------------------------------------------------------------------------
  2832. */
  2833. function setOperationInfo(srcPath){
  2834. var viewerObj = getViewer("patientInfo");
  2835. var srcPath = instance1.selectSingleNode(srcPath);
  2836. if ( viewerObj != null && srcPath != null){
  2837. viewerObj.window.model.makeNode(gvOperationInfoPath);
  2838. viewerObj.window.model.copyNode(gvOperationInfoPath, srcPath);
  2839. return viewerObj.window.javascript.fCheckPatientId(gvOperationInfoPath, "operation");
  2840. }
  2841. return false;
  2842. }
  2843. /**
  2844. * @-----------------------------------------------------------------------------------
  2845. * @desc : 수술관련 상세정보를 key 별로 설정한다.
  2846. * 반드시 setOperationInfo(srcPath) 를 통해 최초 한번은 수술정보를 설정해야 한다.
  2847. * @param :
  2848. * @return : 수술 상세정보 or false
  2849. * @-----------------------------------------------------------------------------------
  2850. */
  2851. function setOperationInfoDetailByKey(key, value) {
  2852. var viewerObj = getViewer("patientInfo");
  2853. if ( viewerObj != null){
  2854. if (key == "pid") {
  2855. return viewerObj.window.javascript.fSetOperationInfoDetailByKey(key, value);
  2856. } else {
  2857. if (value.split("|")[0] == getPatientId()) {
  2858. return viewerObj.window.javascript.fSetOperationInfoDetailByKey(key, value.split("|")[1]);
  2859. }
  2860. }
  2861. }
  2862. return false;
  2863. }
  2864. /**
  2865. * @-----------------------------------------------------------------------------------
  2866. * @desc : key에 해당하는 수술관련 정보를 반환한다.
  2867. * @param :
  2868. * @return :
  2869. * @-----------------------------------------------------------------------------------
  2870. */
  2871. function getOperationInfo(key){
  2872. var viewerObj = getViewer("patientInfo");
  2873. if ( viewerObj != null){
  2874. return viewerObj.window.javascript.fGetOperationInfo(key);
  2875. }
  2876. return "";
  2877. }
  2878. /**
  2879. * @-----------------------------------------------------------------------------------
  2880. * @desc : 수술관련 정보를 지정한 노드로 모두 copyNode한다.
  2881. * @param :
  2882. * @return :
  2883. * @-----------------------------------------------------------------------------------
  2884. */
  2885. function getOperationInfos(destPath){
  2886. var viewerObj = getViewer("patientInfo");
  2887. var destPath = instance1.selectSingleNode(destPath);
  2888. if ( viewerObj != null && destPath != null){
  2889. var srcPath = viewerObj.window.instance1.selectSingleNode(gvOperationInfoPath);
  2890. if(srcPath != null){
  2891. model.copyNode(destPath, srcPath);
  2892. return true;
  2893. }
  2894. }
  2895. return false;
  2896. }
  2897. /**
  2898. * @-----------------------------------------------------------------------------------
  2899. * @desc : 협진관련 상세정보를 설정한다.
  2900. * @param :
  2901. * @return :
  2902. * @-----------------------------------------------------------------------------------
  2903. */
  2904. function setConsultInfo(srcPath){
  2905. var viewerObj = getViewer("patientInfo");
  2906. var srcPath = instance1.selectSingleNode(srcPath);
  2907. if ( viewerObj != null && srcPath != null){
  2908. viewerObj.window.model.makeNode(gvConsultInfoPath);
  2909. viewerObj.window.model.copyNode(gvConsultInfoPath, srcPath);
  2910. return viewerObj.window.javascript.fCheckPatientId(gvConsultInfoPath, "consult");
  2911. }
  2912. return false;
  2913. }
  2914. /**
  2915. * @-----------------------------------------------------------------------------------
  2916. * @desc : 협진관련 상세정보를 key 별로 저장한다.
  2917. * 반드시 setConsultInfo(srcPath) 를 통해 최초 한번은 협진정보를 설정해야 한다.
  2918. * @param : key : 협진관련키, value: 데이터값
  2919. * @return : 협진상세정보 or false
  2920. * @-----------------------------------------------------------------------------------
  2921. */
  2922. function setConsultInfoDetailByKey(key, value) {
  2923. var viewerObj = getViewer("patientInfo");
  2924. if ( viewerObj != null){
  2925. if (key == "pid") {
  2926. return viewerObj.window.javascript.fSetConsultInfoDetailByKey(key, value);
  2927. } else {
  2928. if (value.split("|")[0] == getPatientId()) {
  2929. return viewerObj.window.javascript.fSetConsultInfoDetailByKey(key, value.split("|")[1]);
  2930. }
  2931. }
  2932. }
  2933. return false;
  2934. }
  2935. /**
  2936. * @-----------------------------------------------------------------------------------
  2937. * @desc : key에 해당하는 협진관련 정보를 반환한다.
  2938. * @param :
  2939. * @return : 협진정보 or ""
  2940. * @-----------------------------------------------------------------------------------
  2941. */
  2942. function getConsultInfo(key){
  2943. var viewerObj = getViewer("patientInfo");
  2944. if ( viewerObj != null){
  2945. return viewerObj.window.javascript.fGetConsultInfo(key);
  2946. }
  2947. return "";
  2948. }
  2949. /**
  2950. * @-----------------------------------------------------------------------------------
  2951. * @desc : 협진관련 정보를 지정한 노드로 모두 copyNode한다.
  2952. * @param :
  2953. * @return :
  2954. * @-----------------------------------------------------------------------------------
  2955. */
  2956. function getConsultInfos(destPath) {
  2957. var viewerObj = getViewer("patientInfo");
  2958. var destPath = instance1.selectSingleNode(destPath);
  2959. if ( viewerObj != null && destPath != null){
  2960. var srcPath = viewerObj.window.instance1.selectSingleNode(gvConsultInfoPath);
  2961. if(srcPath != null){
  2962. model.copyNode(destPath, srcPath);
  2963. return true;
  2964. }
  2965. }
  2966. return false;
  2967. }
  2968. /**
  2969. * @-----------------------------------------------------------------------------------
  2970. * @desc : 처방기본데이터 copyNode
  2971. * @param : destPath : 대상경로
  2972. * @return : true or false
  2973. * @-----------------------------------------------------------------------------------
  2974. */
  2975. function getOrderBasicInfo(destPath){
  2976. var viewerObj = getViewer("sysMessage");
  2977. var destPath = instance1.selectSingleNode(destPath);
  2978. if ( viewerObj != null && destPath != null){
  2979. var srcPath = viewerObj.window.instance1.selectSingleNode(gvOrderBasicInfoPath);
  2980. if(srcPath != null){
  2981. model.copyNode(destPath, srcPath);
  2982. return true;
  2983. }
  2984. }
  2985. return false;
  2986. }
  2987. /*-------------------------------------------------------------------
  2988. //레포트 연계 관련 함수
  2989. ---------------------------------------------------------------------*/
  2990. /**
  2991. * @-----------------------------------------------------------------------------------
  2992. * @desc : 레포트를 실행한다.
  2993. * @param : rid : 레포트명
  2994. * dataType : 연계방법
  2995. * paramsXPath : 매개변수필드 XPath
  2996. * submitId : SubmitID
  2997. * print : 출력여부
  2998. * printDialog : 인쇄 창 보임 여부
  2999. * fileType : 저장타입
  3000. * fileName : 파일명
  3001. * fileDialog : 파일 저장 창 보임여부
  3002. * closeYn : 미리보기창닫기여부
  3003. * monNo : 모니터 번호
  3004. * parentObjId : 부모객체명
  3005. * printPaperBin : 트레이번호
  3006. * userService : 데이터 소스
  3007. * showButton : 툴바버튼보임여부
  3008. * printCount : 프린트장수
  3009. * zoomRate : 미리보기뷰어 비율
  3010. * printOption : 출력시 선택 옵션
  3011. * dataXPath : 데이터 XPath
  3012. * mainDataXPath : 메인리포트 반복XPath
  3013. * subDataXPath : 서브리포트1 반복Xpath
  3014. * @return :
  3015. * @-----------------------------------------------------------------
  3016. */
  3017. function exeReportPreview(rid, dataType, paramsXPath, submitId, print, printDialog, fileType, fileName, fileDialog, closeYn, monNo, parentObjId, printPaperBin, userService, showButton, printCount, zoomRate, printOption, dataXPath, mainDataXPath, subDataXPath)
  3018. {
  3019. var reportNode = instance1.selectSingleNode(gvReportPath);
  3020. var syscd = getSystemCd();
  3021. syscd = syscd.substr(3,3);
  3022. //if(syscd == "888" || syscd == "999" || syscd == "") syscd = "001";
  3023. if(syscd == "") syscd = "001";
  3024. //레포트 관련 내용 초기화
  3025. if(reportNode != null){
  3026. model.removeNodeset(gvReportPath);
  3027. }
  3028. model.makeNode(gvReportPath);
  3029. model.makeNode(gvReportParamsPath);
  3030. model.makeNode(gvReportPropsPath);
  3031. model.makeNode(gvReportOptionsPath);
  3032. paramsXPath = instance1.selectSingleNode(paramsXPath);
  3033. if(paramsXPath != null){
  3034. model.copyNode(gvReportParamsPath, paramsXPath);
  3035. }
  3036. model.makeValue(gvReportParamsPath+"/userid", getUserId());
  3037. model.makeValue(gvReportParamsPath+"/logoimgurl", getImageURL("error_logo"+getLogoImageKey()));
  3038. model.makeValue(gvReportParamsPath+"/url", rid);
  3039. model.makeValue(gvReportPropsPath+"/rex_rptname", rid);
  3040. model.makeValue(gvReportPropsPath+"/rex_datatype", dataType);
  3041. model.makeValue(gvReportPropsPath+"/rex_submitid", submitId);
  3042. model.makeValue(gvReportPropsPath+"/rex_userservice", userService);
  3043. model.makeValue(gvReportPropsPath+"/rex_data_xpath", dataXPath);
  3044. model.makeValue(gvReportPropsPath+"/rex_xpath", mainDataXPath);
  3045. model.makeValue(gvReportPropsPath+"/rex_xpath1", subDataXPath);
  3046. model.makeValue(gvReportOptionsPath+"/rex_print", print);
  3047. model.makeValue(gvReportOptionsPath+"/rex_printdialog", printDialog);
  3048. model.makeValue(gvReportOptionsPath+"/rex_printpaperbin", printPaperBin);
  3049. model.makeValue(gvReportOptionsPath+"/rex_filetype", fileType);
  3050. model.makeValue(gvReportOptionsPath+"/rex_filename", fileName);
  3051. model.makeValue(gvReportOptionsPath+"/rex_filedialog", fileDialog);
  3052. model.makeValue(gvReportOptionsPath+"/rex_close", closeYn);
  3053. model.makeValue(gvReportOptionsPath+"/rex_showbutton", showButton);
  3054. model.makeValue(gvReportOptionsPath+"/rex_printcount", printCount);
  3055. model.makeValue(gvReportOptionsPath+"/rex_zoomrate", zoomRate);
  3056. model.makeValue(gvReportOptionsPath+"/rex_printoption", printOption);
  3057. if(parentObjId == null || parentObjId == ""){
  3058. if(document.all("ivr_report") == null){
  3059. //popup
  3060. setParameter("onready","true");
  3061. modal("SPZUR00100", monNo);
  3062. }else{
  3063. //iviewer
  3064. ivr_report.window.javascript.fInitRexpert();
  3065. }
  3066. }else{
  3067. var parentObj = document.all(parentObjId);
  3068. if(parentObj != null){
  3069. var childObj = document.all("ivr_"+parentObjId);
  3070. if(childObj != null){
  3071. childObj.window.javascript.fInitRexpert();
  3072. }
  3073. }
  3074. }
  3075. }
  3076. /**
  3077. * @-----------------------------------------------------------------------------------
  3078. * @desc : 레포트 미리보기 Object를 생성한다.
  3079. * @param :
  3080. * @return :
  3081. * @-----------------------------------------------------------------------------------
  3082. */
  3083. function makeReportPreview(left, top, width, height, parentObjId){
  3084. if(left==null || top==null || width==null || height==null){
  3085. messageBox("미리보기 크기정보가", "I004");
  3086. }else{
  3087. if(parentObjId == null || parentObjId == ""){
  3088. if(document.all("ivr_report") == null){
  3089. if(document.all("grp_biz") == null){
  3090. body.createChild("xforms:iviewer", "id:ivr_report; src:../../../com/commonweb/xrw/SPZUR00100_보고서.xrw; left:"+left+"px; top:"+top+"px; width:"+width+"px; height:"+height+
  3091. "px;");
  3092. }else{
  3093. grp_biz.createChild("xforms:iviewer", "id:ivr_report; src:../../../com/commonweb/xrw/SPZUR00100_보고서.xrw; left:"+left+"px; top:"+top+"px; width:"+width+"px; height:"+height+
  3094. "px;");
  3095. }
  3096. }
  3097. }else{
  3098. var parentObj = document.all(parentObjId);
  3099. if(parentObj != null){
  3100. parentObj.createChild("xforms:iviewer", "id:ivr_"+parentObjId+"; src:../../../com/commonweb/xrw/SPZUR00100_보고서.xrw; left:"+left+"px; top:"+top+"px; width:"+width+"px; height:"+height+
  3101. "px;");
  3102. childObj = document.all("ivr_"+parentObjId);
  3103. }
  3104. }
  3105. }
  3106. }
  3107. /**
  3108. * @-----------------------------------------------------------------------------------
  3109. * @desc : 레포트내용을 clear한다.
  3110. * @param :
  3111. * @return :
  3112. * @-----------------------------------------------------------------------------------
  3113. */
  3114. function resetReportPreview(parentObjId){
  3115. if(parentObjId == null || parentObjId == ""){
  3116. if(document.all("ivr_report") == null){
  3117. var child = getChildWindow("SPZUR00100");
  3118. if(child != null){
  3119. child.javascript.fCloseReport();
  3120. }
  3121. }else{
  3122. ivr_report.window.javascript.fCloseReport();
  3123. }
  3124. }else{
  3125. var parentObj = document.all(parentObjId);
  3126. if(parentObj != null){
  3127. childObj = document.all("ivr_"+parentObjId);
  3128. if(childObj != null){
  3129. childObj.window.javascript.fCloseReport();
  3130. }
  3131. }
  3132. }
  3133. }
  3134. /**
  3135. * @-----------------------------------------------------------------------------------
  3136. * @desc : 레포트 삭제한다.
  3137. * @param :
  3138. * @return :
  3139. * @-----------------------------------------------------------------------------------
  3140. */
  3141. function removeReportPreview(parentObjId){
  3142. if(parentObjId == null || parentObjId == ""){
  3143. if(document.all("ivr_report") != null){
  3144. parentObjId = document.all("ivr_report").parent.attribute("id");
  3145. document.all(parentObjId).removeChild("ivr_report");
  3146. }
  3147. }else{
  3148. var parentObj = document.all(parentObjId);
  3149. if(parentObj != null){
  3150. parentObj.removeChild("ivr_"+parentObjId);
  3151. }
  3152. }
  3153. }
  3154. /**
  3155. * @-----------------------------------------------------------------------------------
  3156. * @desc : 서식화면출력
  3157. * @param :
  3158. * @return :
  3159. * @-----------------------------------------------------------------------------------
  3160. */
  3161. function screenPrint(){
  3162. modal("SPZUR00200");
  3163. }
  3164. /**
  3165. * @-----------------------------------------------------------------------------------
  3166. * @desc : 보고서 이미지 url
  3167. * @param :
  3168. * @return :
  3169. * @-----------------------------------------------------------------------------------
  3170. */
  3171. function getImageURL(imgcd, type){
  3172. if (type == null || type == "") {
  3173. type = "gif";
  3174. }
  3175. return getDomain()+"/himed/webapps/com/commonweb/images/"+imgcd+"." + type;
  3176. }
  3177. /**
  3178. * @-----------------------------------------------------------------------------------
  3179. * @desc : 병원별 logo이미지
  3180. * @param : syscd : 시스템 코드
  3181. * @return :
  3182. * @-----------------------------------------------------------------------------------
  3183. */
  3184. function getLogoImageURL(syscd){
  3185. return getImageURL("logo"+getLogoImageKey(syscd));
  3186. }
  3187. /**
  3188. * @-----------------------------------------------------------------------------------
  3189. * @desc : 병원별 logo이미지
  3190. * @param : syscd : 시스템 코드
  3191. * @return :
  3192. * @-----------------------------------------------------------------------------------
  3193. */
  3194. function getLogoEImageURL(syscd){
  3195. return getImageURL("logo"+getLogoImageKey(syscd)+"e","jpg");
  3196. }
  3197. /**
  3198. * @-----------------------------------------------------------------------------------
  3199. * @desc : EMR 서식용
  3200. * @param :
  3201. * @return :
  3202. * @-----------------------------------------------------------------------------------
  3203. */
  3204. function getBigLogoImageURL(type, syscd) {
  3205. if (type.toUpperCase() == "H") {
  3206. type == "";
  3207. } else if (type.toUpperCase() == "E") {
  3208. type = "e";
  3209. }
  3210. return getImageURL("biglogo" + getLogoImageKey(syscd) + type, "jpg");
  3211. }
  3212. /**
  3213. * @-----------------------------------------------------------------------------------
  3214. * @desc : 로고를 얻기위하여 해당 시스템코드에 대한 이미지키를 반환한다.
  3215. * @param : syscd : 시스템코드
  3216. * @return : 시스템코드
  3217. * @-----------------------------------------------------------------------------------
  3218. */
  3219. function getLogoImageKey(syscd){
  3220. var imageKey = "";
  3221. if(syscd == null || syscd == ""){
  3222. syscd = getSystemCd();
  3223. }
  3224. if(syscd.toUpperCase() == "MIS001") {
  3225. imageKey = getUserInfo("dutplceinstcd");
  3226. }else{
  3227. imageKey = syscd.substr(3,3);
  3228. }
  3229. /*if(!((imageKey >="011" && imageKey <= "018")|| imageKey == "103")){
  3230. imageKey = "001";
  3231. }*/
  3232. return imageKey;
  3233. }
  3234. /**
  3235. * @-----------------------------------------------------------------------------------
  3236. * @desc : loading 화면
  3237. * @param :
  3238. * @return :
  3239. * @-----------------------------------------------------------------------------------
  3240. */
  3241. function openLoadingBar(msg){
  3242. setParameter("msg", msg);
  3243. open("SPZZZ00400", "", "", "", "", "", "","width:327px; height:121px; caption:hidden; resize:false;");
  3244. //open("SPZZZ00400", monNo, "", "", "", "", "","width:327px; height:121px; caption:hidden; resize:false; align:center;");
  3245. //open("SPZZZ00400", "", "", "", "SPZZZ00400", "/root/properties/loadingmsg", "/root/main/msg", "width:327px; height:121px; caption:hidden; align:center;" );
  3246. }
  3247. /**
  3248. * @-----------------------------------------------------------------------------------
  3249. * @desc : closing 화면
  3250. * @param :
  3251. * @return :
  3252. * @-----------------------------------------------------------------------------------
  3253. */
  3254. function closeLoadingBar(){
  3255. var child = getChildWindow("SPZZZ00400");
  3256. if(child != null) {
  3257. child.close();
  3258. }
  3259. }
  3260. /**
  3261. * @-----------------------------------------------------------------------------------
  3262. * @desc : 로그인 비밀번호 확인 화면 호출
  3263. * @param :
  3264. * @return :
  3265. * @-----------------------------------------------------------------------------------
  3266. */
  3267. function openPasswordValidate(titlemsg, helpMsg){
  3268. setParameter("titlemsg", titlemsg);
  3269. setParameter("helpmsg", helpMsg);
  3270. modal("SPZUM00400", "", "", "", "", "", "","width:280px;height:270px;align:center;");
  3271. return getParameter("pwdvalid");
  3272. }
  3273. /*-------------------------------------------------------------------
  3274. //Caching API
  3275. ---------------------------------------------------------------------*/
  3276. var gvCommonCachePath="/root/hidden/common/cache";
  3277. /**
  3278. * @-----------------------------------------------------------------------------------
  3279. * @desc : Cache에서 itemname으로 저장된 인스턴스 내용을 resultref로 복사한다.
  3280. * 해당 itemname으로 복사가 되었으면 true를 복사된 내용이 없으면 false를 반환한다.
  3281. * - itemname : cache에서 가져올 내용에 대한 key
  3282. * - resultref : cache의 내용을 하위로 복사
  3283. * @param :
  3284. * @return : true
  3285. * @-----------------------------------------------------------------------------------
  3286. */
  3287. function copyFromCache(itemname,resultref) {
  3288. var viewerObj = getViewer("sysMessage");
  3289. if (viewerObj == null) {
  3290. return false;
  3291. }
  3292. //itemnode = viewerObj.window.instance1.selectSingleNode(gvCommonCachePath+"/"+itemname);
  3293. var srcPath = gvCommonCachePath+"/"+itemname;
  3294. model.makeNode(resultref); // 복사할 resultref 노드 생성
  3295. // Cache 존재 여부 확인
  3296. var itemnode = viewerObj.window.instance1.selectSingleNode(srcPath);
  3297. if (itemnode == null) {
  3298. return false;
  3299. } else {
  3300. // 유효 기간 확인
  3301. var dueDate = itemnode.getAttribute("duedate");
  3302. var curDate = (new Date()).valueOf();
  3303. if (dueDate < curDate) { // 유효 기간 지남
  3304. return false;
  3305. }
  3306. }
  3307. // resultref 로 복사
  3308. model.copyNode(resultref,itemnode);
  3309. return true;
  3310. }
  3311. /**
  3312. * @-----------------------------------------------------------------------------------
  3313. * @desc : resultref 하위의 인스턴스 내용을 cache에 저장한다.
  3314. * - itemname : cache에 담을 내용에 대한 Key
  3315. * - resultref : 하위 인스턴스를 cache로 복사
  3316. * - 유효기간 : 분 (디폴트는 10시간)
  3317. * @param :
  3318. * @return :
  3319. * @-----------------------------------------------------------------------------------
  3320. */
  3321. function storeIntoCache(itemname,resultref,duemin) {
  3322. var viewerObj = getViewer("sysMessage");
  3323. if (viewerObj == null) {
  3324. return;
  3325. }
  3326. var destPath = gvCommonCachePath+"/"+itemname;
  3327. viewerObj.window.model.makeNode(destPath); // 복사할 Cache 노드 생성
  3328. // resultref 존재 여부 확인
  3329. var itemnode = instance1.selectSingleNode(resultref);
  3330. if (itemnode == null) {
  3331. return;
  3332. }
  3333. // Cache로 복사한 후 유효기간을 attribute로 지정
  3334. viewerObj.window.model.copyNode(destPath,itemnode);
  3335. itemnode = viewerObj.window.instance1.selectSingleNode(destPath);
  3336. if (itemnode != null) {
  3337. var dueDate = (new Date()).valueOf();
  3338. if (duemin == null) {
  3339. duemin = 600; // 10 hours
  3340. }
  3341. dueDate = dueDate + duemin*60*1000;
  3342. itemnode.setAttribute("duedate",dueDate);
  3343. }
  3344. }
  3345. /**
  3346. * @-----------------------------------------------------------------------------------
  3347. * @desc : 온라인 도움말 화면이 있는 경우 ready 에서 실행.
  3348. * @param : 온라인 도움말 파일의 크기를 설정해서 온라인 도움말 기능을 활성화시킨다.
  3349. * 활성화시키지 않으면 F1 키를 통한 온라인 도움말 기능을 사용할 수 없다.
  3350. * 온라인 도움말 파일의 이름은 해당 도움말을 사용할 화면 아이디와 동일해야 한다.
  3351. * @return :
  3352. * @-----------------------------------------------------------------------------------
  3353. */
  3354. function setHelp(width, height, scnID) {
  3355. if (width == null || width == "" || width == "undefined") {
  3356. width = "800";
  3357. }
  3358. if (height == null || height == "" || height == "undefined") {
  3359. height = "600";
  3360. }
  3361. if (scnID == null || height == "" || scnID == "undefined") {
  3362. scnID = getScreenID();
  3363. }
  3364. setParameter(scnID + "_help_width", width);
  3365. setParameter(scnID + "_help_height", height);
  3366. }
  3367. /**
  3368. * @-----------------------------------------------------------------------------------
  3369. * @desc : 온라인 도움말 조회
  3370. * @param :
  3371. * @return :
  3372. * @-----------------------------------------------------------------------------------
  3373. */
  3374. function getHelpPage() {
  3375. // 일단 임시로 AP에 있는 온라인 도움말만 조회되도록.
  3376. var scnID = getScreenID();
  3377. //var width = getParameter(scnID + "_help_width");
  3378. //var height = getParameter(scnID + "_help_height");
  3379. // 로컬(개발자 PC)인지 확인
  3380. //if (getSystemCd().substring(0, 3).toUpperCase() == "DEV") {
  3381. // alert("해당 환경에서는 온라인도움말을 지원하지 않습니다.\n\n★★ 지원 환경 ★★\n1. 개발 HIS(his012dev)\n2. 개발 MIS(mis001dev)\n3. 개발 CRM(crm001dev)\n4. 교육 HIS(his012edu)\n5. 교육 MIS(mis001edu)\n6. 운영 HIS(his012)\n7. 운영 MIS(mis001)");
  3382. // return;
  3383. //}
  3384. var ref= "/root/send/reqdata";
  3385. var flag = getParameter("extflag");
  3386. var screenid = getParameter("screenid");
  3387. if(flag == "Y") {
  3388. if(screenid != "" && screenid != null) {
  3389. scnID = screenid;
  3390. }
  3391. model.property("scnid") = scnID;
  3392. } else {
  3393. model.property("scnid") = scnID;
  3394. }
  3395. var curNurOpCnfmObj = getOpenWindow("SPMNZ01000");
  3396. if(curNurOpCnfmObj != null){//준비확인이 열려있으면 상단 환자로 재조회2010.01.04 K.J.M
  3397. curNurOpCnfmObj.javascript.fInit();
  3398. } else {
  3399. open("SPMNZ01000");
  3400. }
  3401. // 현재는 HIS012 에서만 조회가능. 추가기능 필요.
  3402. //if (gvHelpPage == null || gvHelpPage.closed) {
  3403. // gvHelpPage = openHtml(getDomain() + "/docs/help/" + getBizName(scnID) + "/" + scnID + ".htm","Help","scrollbars=yes,toolbar=no,width=800,height=600");
  3404. //} else {
  3405. // gvHelpPage.focus();
  3406. //}
  3407. }
  3408. /**
  3409. * @-----------------------------------------------------------------------------------
  3410. * @desc : EMR 에서 제공하는 각종 기록지, 처방화면등을 타업무에서 사용시 구분하기 위한 진입점 함수로 아래 화면을 통해 여러가지 화면으로 분기될 수 있다.
  3411. * EMR진료 기록지 조정
  3412. * modal로 화면에 숨겨진 팝업을 띄운다. 여러화면 동시에 open되어, submit간의 충돌을 방지한다.
  3413. * @param : scrnid : 화면ID
  3414. * @return :
  3415. * @author : 오지훈(2008.07.28 공통에 추가-김기호)
  3416. * @-----------------------------------------------------------------------------------
  3417. */
  3418. function openEmrScrn(scrnid){
  3419. setParameter("SPMMB08400_scrnid", scrnid);
  3420. modal("SPMMB08400", 1, 0, 0, "", "", "", "left:0; right:0; width:0; height:0; sysmenu:hidden; caption:hidden; min:hidden, max:hidden;");
  3421. return true;
  3422. }
  3423. /**
  3424. * @-----------------------------------------------------------------------------------
  3425. * @desc : model.download() 확장. 다운로드 경로에 한글이 존재할 경우 encodeURI() 로 감싸야 하는 불편함제거를 위함
  3426. * @
  3427. * @param : submitid - 다운로드를 실행할 서브밋 아이디
  3428. * @ param - 서브밋 실행시 필요한 파라메터
  3429. * @ localfile - 로컬에 저장할 파일이름(& 로 시작해야 하며 각 파라메터는 &로 구분해야 한다. - url)
  3430. * @ showui - 다운로드시 UI 를 보여줄 것인지여부(옵션)
  3431. * @return :
  3432. * @author : 김기호(2008.11.12)
  3433. * @-----------------------------------------------------------------------------------
  3434. */
  3435. function download(submitid, param, localfile, showui) {
  3436. if (showui == null) {
  3437. showui = true;
  3438. }
  3439. model.download(encodeURI(getActionURL(submitid) + param), localfile, showui);
  3440. }
  3441. /**
  3442. * @-----------------------------------------------------------------------------------
  3443. * @desc : DOMActivate
  3444. * @param :
  3445. * @return :
  3446. * @-----------------------------------------------------------------------------------
  3447. */
  3448. function DOMActivate(){
  3449. if(checkOpener()){
  3450. if(opener.javascript.getParameter("domactivate") == "true"){
  3451. var btnobj = document.all.item(event.target);
  3452. var btnid = btnobj.attribute("id");
  3453. if(btnid.substring(0, 4) == "btn_"){
  3454. opener.javascript.addBtnID(btnid);
  3455. }
  3456. }
  3457. }
  3458. }
  3459. /**
  3460. * @-----------------------------------------------------------------------------------
  3461. * @desc : 버튼 객체 참조
  3462. * @param :
  3463. * @return :
  3464. * @-----------------------------------------------------------------------------------
  3465. */
  3466. function btnObj(btnID, btnTxt){
  3467. this.btnID = btnID;
  3468. this.btnTxt = btnTxt;
  3469. }
  3470. /**
  3471. * @-----------------------------------------------------------------------------------
  3472. * @desc : 버튼 컨트롤 정보
  3473. * @param :
  3474. * @return :
  3475. * @-----------------------------------------------------------------------------------
  3476. */
  3477. function getBtnCtrlInfo(){
  3478. var cnt = 0;
  3479. var ctrlID;
  3480. var loopcnt = document.controls.length;
  3481. var btnCtrlArr = new Array();
  3482. for(var i = 0; i < loopcnt; i++){
  3483. ctrlID = document.controls.item(i);
  3484. if(ctrlID.attribute("class").substring(0, 3)=="btn"){
  3485. btnCtrlArr[cnt] = new btnObj(ctrlID.attribute("id"), ctrlID.attribute("text"));
  3486. cnt++;
  3487. }
  3488. }
  3489. /* btnCtrlArr 객체의 정보를 가져와서 출력해 본다.
  3490. for(var i = 0; i < btnCtrlArr.length; i++){
  3491. alert(btnCtrlArr[i].btnID + " : " + btnCtrlArr[i].btnTxt);
  3492. }*/
  3493. return btnCtrlArr;
  3494. }
  3495. /**
  3496. * @-----------------------------------------------------------------------------------
  3497. * @desc : 일일기준과 1회 기준의 용량과 수량을 보여주는 것을 결정하여 결과를 리턴함)
  3498. * @param : option : A: 모두 보여줌
  3499. * B: 1일 기준으로 보여줌
  3500. * C: 1회 기준으로 보여줌
  3501. * D: 병원의 기준값을 리턴함
  3502. * E: 용량중 일일용량만 보여주고 일회 용량은 숨기는 것으로 한다.
  3503. * F: 용량중 일회용량만 보여주고 일일 용량은 숨기는 것으로 한다.
  3504. * G: 수량중 일일 수량만 보여준다. 일회 수량은 Hidden
  3505. * H: 수량중 일회 수량은 보여주고 일회수량은 Hidden
  3506. * grd_obj : 설정할 그리드를 리턴한다.
  3507. * colnm_size : 컬럼 사이즈를 적어준다.
  3508. * comnm_vol1 : 1일 총용량 컬럼
  3509. * colnm_qty1 : 1일 수량 컬럼
  3510. * comnm_vol2 : 1회 총용량 컬럼
  3511. * colnm_qty2 : 1회 수량 컬럼
  3512. * colnm_size_qty : 수량 컬럼 사이즈를 적어준다.
  3513. * @-----------------------------------------------------------------------------------
  3514. */
  3515. function grdBaseColHidn(option, grd_obj, colnm_size, colnm_vol1, colnm_qty1, colnm_vol2, colnm_qty2, colnm_size_qty) {
  3516. var hardcd = "";
  3517. var sysMessageobj = getViewer("sysMessage");
  3518. if (sysMessageobj != null) {
  3519. hardcd = sysMessageobj.window.instance1.selectSingleNode("/root/properties/orderbasicinfo/hardcdlist/hardcd[hardcdno='230']/hardcd").text;
  3520. }
  3521. if (option == null || option == "" || option == "undefined") {
  3522. option = hardcd;
  3523. }
  3524. if (colnm_size == null || colnm_size == "" || colnm_size == "undefined") {
  3525. sColnm_size = 37;
  3526. } else {
  3527. sColnm_size = colnm_size;
  3528. }
  3529. if (grd_obj == null || grd_obj == "" || grd_obj == "undefined") {
  3530. sGrd_objnm = "grd_prcplist";
  3531. } else {
  3532. sGrd_objnm = grd_obj;
  3533. }
  3534. if (colnm_vol1 == null || colnm_vol1 == "" || colnm_vol1 == "undefined") {
  3535. sColnm_vol1 = "prcpvol";
  3536. } else {
  3537. sColnm_vol1 = colnm_vol1
  3538. }
  3539. if (colnm_qty1 == null || colnm_qty1 == "" || colnm_qty1 == "undefined") {
  3540. sColnm_qty1 = "prcpqty";
  3541. } else {
  3542. sColnm_qty1 = colnm_qty1
  3543. }
  3544. if (colnm_vol2 == null || colnm_vol2 == "" || colnm_vol2 == "undefined") {
  3545. sColnm_vol2 = "drprcpetc7";
  3546. } else {
  3547. sColnm_vol2 = colnm_vol2;
  3548. }
  3549. if (colnm_qty2 == null || colnm_qty2 == "" || colnm_qty2 == "undefined") {
  3550. sColnm_qty2 = "drprcpetc8";
  3551. } else {
  3552. sColnm_qty2 = colnm_qty2;
  3553. }
  3554. if (colnm_size_qty == null || colnm_size_qty == "" || colnm_size_qty == "undefined") {
  3555. sColnm_size_qty = sColnm_size;
  3556. } else {
  3557. sColnm_size_qty = colnm_size_qty;
  3558. }
  3559. // 둘다 보여준다.
  3560. if (option =="A") {
  3561. // 그리드명이 있을 경우
  3562. if (grd_obj == null || grd_obj == "" || grd_obj == "undefined") {
  3563. document.all(sGrd_objnm).colHidden(document.all(sGrd_objnm).colRef(sColnm_vol1)) = false;
  3564. document.all(sGrd_objnm).colHidden(document.all(sGrd_objnm).colRef(sColnm_qty1)) = false;
  3565. document.all(sGrd_objnm).colHidden(document.all(sGrd_objnm).colRef(sColnm_vol2)) = false;
  3566. document.all(sGrd_objnm).colHidden(document.all(sGrd_objnm).colRef(sColnm_qty2)) = false;
  3567. document.all(sGrd_objnm).colWidth(document.all(sGrd_objnm).colRef(sColnm_vol1)) = sColnm_size;
  3568. document.all(sGrd_objnm).colWidth(document.all(sGrd_objnm).colRef(sColnm_qty1)) = sColnm_size_qty;
  3569. document.all(sGrd_objnm).colWidth(document.all(sGrd_objnm).colRef(sColnm_vol2)) = sColnm_size;
  3570. document.all(sGrd_objnm).colWidth(document.all(sGrd_objnm).colRef(sColnm_qty2)) = sColnm_size_qty;
  3571. }
  3572. // 일일 용량을 기준으로 보여준다.
  3573. } else if (option =="B") {
  3574. document.all(sGrd_objnm).colHidden(document.all(sGrd_objnm).colRef(sColnm_vol1)) = false;
  3575. document.all(sGrd_objnm).colHidden(document.all(sGrd_objnm).colRef(sColnm_qty1)) = false;
  3576. document.all(sGrd_objnm).colHidden(document.all(sGrd_objnm).colRef(sColnm_vol2)) = true;
  3577. document.all(sGrd_objnm).colHidden(document.all(sGrd_objnm).colRef(sColnm_qty2)) = true;
  3578. document.all(sGrd_objnm).colWidth(document.all(sGrd_objnm).colRef(sColnm_vol1)) = sColnm_size;
  3579. document.all(sGrd_objnm).colWidth(document.all(sGrd_objnm).colRef(sColnm_qty1)) = sColnm_size_qty;
  3580. document.all(sGrd_objnm).colWidth(document.all(sGrd_objnm).colRef(sColnm_vol2)) = 0;
  3581. document.all(sGrd_objnm).colWidth(document.all(sGrd_objnm).colRef(sColnm_qty2)) = 0;
  3582. // 일회 용량을 기준으로 보여준다.
  3583. } else if (option =="C") {
  3584. document.all(sGrd_objnm).colHidden(document.all(sGrd_objnm).colRef(sColnm_vol1)) = true;
  3585. document.all(sGrd_objnm).colHidden(document.all(sGrd_objnm).colRef(sColnm_qty1)) = true;
  3586. document.all(sGrd_objnm).colHidden(document.all(sGrd_objnm).colRef(sColnm_vol2)) = false;
  3587. document.all(sGrd_objnm).colHidden(document.all(sGrd_objnm).colRef(sColnm_qty2)) = false;
  3588. document.all(sGrd_objnm).colWidth(document.all(sGrd_objnm).colRef(sColnm_vol1)) = 0;
  3589. document.all(sGrd_objnm).colWidth(document.all(sGrd_objnm).colRef(sColnm_qty1)) = 0;
  3590. document.all(sGrd_objnm).colWidth(document.all(sGrd_objnm).colRef(sColnm_vol2)) = sColnm_size;
  3591. document.all(sGrd_objnm).colWidth(document.all(sGrd_objnm).colRef(sColnm_qty2)) = sColnm_size_qty;
  3592. // 기준값을 리턴한다.
  3593. } else if (option =="D") {
  3594. // 기준값을 가지고 컬럼의 상태를 결정한다.
  3595. return hardcd
  3596. } else if (option =="E") {
  3597. document.all(sGrd_objnm).colHidden(document.all(sGrd_objnm).colRef(sColnm_vol1)) = false;
  3598. document.all(sGrd_objnm).colHidden(document.all(sGrd_objnm).colRef(sColnm_vol2)) = true;
  3599. document.all(sGrd_objnm).colWidth(document.all(sGrd_objnm).colRef(sColnm_vol1)) = sColnm_size;
  3600. document.all(sGrd_objnm).colWidth(document.all(sGrd_objnm).colRef(sColnm_vol2)) = 0;
  3601. } else if (option =="F") {
  3602. document.all(sGrd_objnm).colHidden(document.all(sGrd_objnm).colRef(sColnm_vol1)) = true;
  3603. document.all(sGrd_objnm).colHidden(document.all(sGrd_objnm).colRef(sColnm_vol2)) = false;
  3604. document.all(sGrd_objnm).colWidth(document.all(sGrd_objnm).colRef(sColnm_vol1)) = 0;
  3605. document.all(sGrd_objnm).colWidth(document.all(sGrd_objnm).colRef(sColnm_vol2)) = sColnm_size;
  3606. } else if (option =="G") {
  3607. document.all(sGrd_objnm).colHidden(document.all(sGrd_objnm).colRef(sColnm_qty1)) = false;
  3608. document.all(sGrd_objnm).colHidden(document.all(sGrd_objnm).colRef(sColnm_qty2)) = true;
  3609. document.all(sGrd_objnm).colWidth(document.all(sGrd_objnm).colRef(sColnm_qty1)) = sColnm_size_qty;
  3610. document.all(sGrd_objnm).colWidth(document.all(sGrd_objnm).colRef(sColnm_qty2)) = 0;
  3611. } else if (option =="H") {
  3612. document.all(sGrd_objnm).colHidden(document.all(sGrd_objnm).colRef(sColnm_qty1)) = true;
  3613. document.all(sGrd_objnm).colHidden(document.all(sGrd_objnm).colRef(sColnm_qty2)) = false;
  3614. document.all(sGrd_objnm).colWidth(document.all(sGrd_objnm).colRef(sColnm_qty1)) = 0;
  3615. document.all(sGrd_objnm).colWidth(document.all(sGrd_objnm).colRef(sColnm_qty2)) = sColnm_size_qty;
  3616. } else {
  3617. document.all(sGrd_objnm).colHidden(document.all(sGrd_objnm).colRef(sColnm_vol1)) = false;
  3618. document.all(sGrd_objnm).colHidden(document.all(sGrd_objnm).colRef(sColnm_qty1)) = false;
  3619. document.all(sGrd_objnm).colHidden(document.all(sGrd_objnm).colRef(sColnm_vol2)) = true;
  3620. document.all(sGrd_objnm).colHidden(document.all(sGrd_objnm).colRef(sColnm_qty2)) = true;
  3621. document.all(sGrd_objnm).colWidth(document.all(sGrd_objnm).colRef(sColnm_vol1)) = sColnm_size;
  3622. document.all(sGrd_objnm).colWidth(document.all(sGrd_objnm).colRef(sColnm_qty1)) = sColnm_size_qty;
  3623. document.all(sGrd_objnm).colWidth(document.all(sGrd_objnm).colRef(sColnm_vol2)) = 0;
  3624. document.all(sGrd_objnm).colWidth(document.all(sGrd_objnm).colRef(sColnm_qty2)) = 0;
  3625. }
  3626. }
  3627. /**
  3628. * @--------------------------------------------------------------------
  3629. * @desc : 렉스포트형 바코드 출력
  3630. * @param : rexnm : 레포트코드
  3631. * closeYn : 미리보기 여부(보기:true, 안보기:비우거나 false)
  3632. * printCount : 출력 숫자
  3633. * dataXPath : 파라메터 위치
  3634. * paramsXPath : 파라메터 위치
  3635. * infoXPath : 바코드 프린터 정보 위치
  3636. * @return : TRUE or FALSE
  3637. * @--------------------------------------------------------------------
  3638. */
  3639. function fPrintRexbar(rexnm, closeYn, printCount, dataXPath, paramsXPath, infoXPath){
  3640. var posx = '';
  3641. var posy = '';
  3642. var printnm = '';
  3643. if(infoXPath == "" || infoXPath == "undefined" || infoXPath == null) infoXPath = "/root/main/barcdprntsetup/prntsetupinfo";
  3644. if(model.getValue(infoXPath + "/setupinfo/rexgbn") != "1") return false;
  3645. try{
  3646. if(model.getXpathValue("count(" + infoXPath + "/setupinfo/pcl/pcllist[barnm='"+rexnm+"']/barnm)") > "0"){
  3647. posx = model.getValue(infoXPath + "/setupinfo/pcl/pcllist[barnm='"+rexnm+"']/xpos");
  3648. posy = model.getValue(infoXPath + "/setupinfo/pcl/pcllist[barnm='"+rexnm+"']/ypos");
  3649. printnm = model.getValue(infoXPath + "/setupinfo/pcl/pcllist[barnm='"+rexnm+"']/prtnm");
  3650. }else{
  3651. posx = model.getValue(infoXPath + "/setupinfo/blank/left");
  3652. posy = model.getValue(infoXPath + "/setupinfo/blank/top");
  3653. printnm = model.getValue(infoXPath + "/setupinfo/comm01/setupval");
  3654. }
  3655. if(posx == '') posx = "0";
  3656. if(posy == '') posy = "0";
  3657. if(closeYn == "true") printnm = "";
  3658. exeReportPreview(rexnm, 'XMLSTR', paramsXPath, '', printnm,
  3659. '', '', '', '', '',
  3660. '', '', '', '', '',
  3661. printCount, '', 'offsetx=' + posx + ';offsety=' + posy + ';', dataXPath, '',
  3662. '');
  3663. }
  3664. catch(e){
  3665. alert("출력시 오류가 발생하였습니다\n" + e);
  3666. return true;
  3667. }
  3668. return true;
  3669. }
  3670. /*AWT주석*/ //AWT 관련 로직 시작
  3671. var AwtSearchUrl = getDomain() + "/himed/webapps/com/hismainweb/jsp/awtSearch.jsp"; //Awt조회 화면의 url
  3672. var AwtAjaxUrl = getDomain() + "/himed/webapps/com/hismainweb/jsp/awtAjaxOra.jsp"; //Awt조회 Ajax의 url
  3673. var AwtCtrl = null; //Awt 입력중인 콤포넌트 객체(그리드에서 입력중일때는 그리드의 gridinput객체)
  3674. var AwtCtrlDatagrid = null; //Awt 입력중인 콤포넌트가 그리드일때 해당 그래드 객체
  3675. var AwtCtrlType = null; //Awt 입력중인 콤포넌트의 유형(gridinput:그리드, input,textarea 등)
  3676. var AwtWordBegin = -1; //입력중인 문자열에서 구분문자(스페이스,엔터,' 등)으로 잘라야할 첫 위치
  3677. var AwtWordEnd = -1; //입력중인 문자열에서 구분문자으로 잘라야할 끝 위치
  3678. var AwtSendWord = null; //입력중인 문자열에서 구분문자으로 잘라진 단어(조회/변환할 단어)
  3679. var AwtxmlHttpRequest = null;
  3680. //화면 & 개인별 자동변환 사용여부 1:사용, 0:미사용
  3681. function AwtOn() {
  3682. if (AwtUseThisWindow() != '1')
  3683. return '0';
  3684. try {
  3685. var viewObj = getViewer("sysMessage");
  3686. if (viewObj != null && viewObj.window.javascript.fGetUserAwtYN() == "Y")
  3687. return '1';
  3688. } catch(e) {
  3689. // alert('Awt 개인별 On/Off 설정을 가져오는데 오류가 발생했습니다.' + e.toString());
  3690. }
  3691. return '0';
  3692. }
  3693. //화면ID별로 awt를 사용할지 여부를 가져오는 함수
  3694. function AwtUseThisWindow() {
  3695. if (getScreenID() == "SMZWT00000") //Awt 조회 화면 자체(이 부분이 없어지면 SMZWT00000안에 SMZWT00000가 계속 생기는 무한루프 발생하므로 꼭 return '0')
  3696. return '0';
  3697. if (getScreenID() == "SMZUM00100") //himed상단에 환자정보를 표시하는 TF화면은 awt를 적용안함(적용시 불필요한 스크롤바가 생김)
  3698. return '0';
  3699. if (getScreenID() == "SMZUM00200") //Main화면 화면 영역은 사용X
  3700. return '0';
  3701. if (getScreenID() == "SMZUM00300") //상태표시줄 화면 영역은 사용X
  3702. return '0';
  3703. if (getScreenID() == "SMZSN00200") //공지사항 화면은 사용X
  3704. return '0';
  3705. if (getScreenID() == "SSZSN00100") //공지사항 화면은 사용X
  3706. return '0';
  3707. ///////// 화면별 설정을 DB로 별도 관리할때 DB에서 가져온 결과를 적용하는 부분을 여기에 추가해야 함
  3708. var awtUse = '0';
  3709. var awtyn;
  3710. try{
  3711. awtyn = isAwtScrnYN(getScreenID());
  3712. if(awtyn == "Y"){
  3713. awtUse = '1';
  3714. }
  3715. }catch(e){
  3716. // alert('Awt 화면별 On/Off 설정을 가져오는데 오류가 발생했습니다.' + e.toString());
  3717. }
  3718. return awtUse;
  3719. }
  3720. //화면ID에 대해 AWT사용여부 확인
  3721. function isAwtScrnYN(scrncd){
  3722. var awtList = htmlwindow.awtList;
  3723. if (scrncd == "") {
  3724. if(awtList.indexOf("SMZWT00009")>=0){ // "com/awtweb/xrw/SMZWT00009_AWT DB서식 기록지에서 사용 여부.xrw" 가 AWT 미사용 화면리스트에 있으면
  3725. return 'N';
  3726. }
  3727. return 'Y';
  3728. }
  3729. if(awtList.indexOf(scrncd)>=0){ // AWT 미사용 화면리스트에 있으면
  3730. return 'N';
  3731. }
  3732. return 'Y';
  3733. }
  3734. //Awt Ajax를 호출하여 조회/변환을 하는 함수 (body.onkeyup에서 호출됨)
  3735. function AwtSearch() {
  3736. //Ctrl + w => 창 닫기
  3737. // 'w':87
  3738. if(event.keyCode==87 && event.ctrlKey){
  3739. window.close();
  3740. }
  3741. var cp = event.focus;
  3742. if (cp == null)
  3743. return;
  3744. if (document.controls(cp) == null)
  3745. return;
  3746. //'F2':113
  3747. if (event.keyCode == 113) {
  3748. if (AwtUseThisWindow() != '1')
  3749. {
  3750. return;
  3751. }
  3752. else
  3753. {
  3754. AwtCreateBrowser();
  3755. }
  3756. if (AwtGetSearchWordPopup()) {
  3757. AwtSearchLike(AwtSendWord);
  3758. AwtShow();
  3759. }
  3760. }
  3761. else {
  3762. //'F10':121
  3763. if (event.keyCode == 121) {
  3764. if (AwtStnsOn() != '1')
  3765. return;
  3766. if (AwtGetSearchWord()) {
  3767. AwtSearchSentense(AwtSendWord);
  3768. }
  3769. }
  3770. else
  3771. {
  3772. //다음의 구분자로 단어를 자른다. ('space':32 'enter':32 ',':188 '.':190 "'":222)
  3773. if (event.keyCode == 32 || event.keyCode == 13 || event.keyCode == 188 || event.keyCode == 190 || event.keyCode == 222) {
  3774. if (AwtOn() != '1')
  3775. {
  3776. // if (AwtStnsOn() != '1')
  3777. return;
  3778. // if (AwtGetSearchWord()) {
  3779. // AwtSearchSentense(AwtSendWord);
  3780. // }
  3781. }
  3782. else
  3783. {
  3784. // if (AwtStnsOn() != '1')
  3785. // {
  3786. if (AwtGetSearchWord()) {
  3787. AwtSearchOne(AwtSendWord);
  3788. }
  3789. // }
  3790. // else
  3791. // {
  3792. // if (AwtGetSearchWord()) {
  3793. // AwtSearchOneNSentense(AwtSendWord);
  3794. // }
  3795. // }
  3796. }
  3797. }
  3798. }
  3799. }
  3800. }
  3801. //Awt Popup 조회일 때 AWT창을 콤포넌트에 붙여서 보이게 하는 함수
  3802. function AwtAttachByObject() {
  3803. var cp = event.focus;
  3804. if (cp == null)
  3805. return;
  3806. if (document.controls(cp) == null)
  3807. return;
  3808. if (document.controls(cp).elementName.replace("xforms:", "") == "datagrid") {
  3809. AwtCtrlDatagrid = document.controls(cp);
  3810. AwtCtrl = document.controls(cp).input;
  3811. AwtCtrlType = "datagrid";
  3812. } else if (document.controls(cp).elementName.replace("xforms:", "") == "gridinput") {
  3813. AwtCtrlDatagrid = document.controls(cp).parent;
  3814. AwtCtrl = document.controls(cp);
  3815. AwtCtrlType = "gridinput";
  3816. } else {
  3817. AwtCtrlDatagrid = null;
  3818. AwtCtrl = document.controls(cp);
  3819. AwtCtrlType = document.controls(cp).elementName;
  3820. }
  3821. var top = 0;
  3822. var left = 0;
  3823. var width = 0;
  3824. var height = 0;
  3825. var obj = AwtCtrl;
  3826. var pObj = obj.parent;
  3827. while (pObj != null && pObj.attribute("id") != "body") {
  3828. top = top + parseInt(pObj.attribute("top").replace("px", ""));
  3829. left = (left + 0) + parseInt(pObj.attribute("left").replace("px", ""));
  3830. pObj = pObj.parent;
  3831. }
  3832. width = parseInt(obj.attribute("width").replace("px", ""));
  3833. height = parseInt(obj.attribute("height").replace("px", ""));
  3834. top = top + parseInt(obj.attribute("top").replace("px", ""));
  3835. left = left + parseInt(obj.attribute("left").replace("px", ""));
  3836. if (window.height < top + height + 222) {
  3837. top = top - 222 - height;
  3838. }
  3839. if (window.width < left + width) {
  3840. left = left + width - 382;
  3841. }
  3842. if((top + height) < 0)
  3843. {
  3844. document.controls("AwtViewer").attribute("top") = 0;
  3845. }
  3846. else
  3847. {
  3848. document.controls("AwtViewer").attribute("top") = top + height;
  3849. }
  3850. document.controls("AwtViewer").attribute("left") = left;
  3851. }
  3852. //AwtBrowser(IViewer)를 동적으로 생성하는 함수
  3853. function AwtCreateBrowser() {
  3854. if (document.controls("AwtViewer") != null)
  3855. return document.controls("AwtViewer");
  3856. else {
  3857. var av = body.createChild("xforms:iviewer", "id:AwtViewer; visibility:hidden; left:0px; top:0px; width:10px; height:10px; ");
  3858. av.src = "../../../com/awtweb/xrw/SMZWT00000_AWT조회.xrw";
  3859. model.refresh();
  3860. }
  3861. }
  3862. //Awt목록조회를 하는 함수
  3863. function AwtGetSearchWordPopup() {
  3864. var cp = event.focus;
  3865. if (cp == null)
  3866. return;
  3867. if (document.controls(cp) == null)
  3868. return;
  3869. if (AwtCreateBrowser() == null)
  3870. return;
  3871. if (document.controls(cp).elementName.replace("xforms:", "") == "datagrid") {
  3872. AwtCtrlDatagrid = document.controls(cp);
  3873. AwtCtrl = document.controls(cp).input;
  3874. AwtCtrlType = "datagrid";
  3875. if (AwtCtrl.attribute("visible") == "hidden")
  3876. return;
  3877. } else if (document.controls(cp).elementName.replace("xforms:", "") == "gridinput") {
  3878. AwtCtrlDatagrid = document.controls(cp).parent;
  3879. AwtCtrl = document.controls(cp);
  3880. AwtCtrlType = "gridinput";
  3881. } else {
  3882. AwtCtrlDatagrid = null;
  3883. AwtCtrl = document.controls(cp);
  3884. AwtCtrlType = document.controls(cp).elementName;
  3885. }
  3886. if (AwtCtrl.elementName.replace("xforms:", "") != "input"
  3887. && AwtCtrl.elementName.replace("xforms:", "") != "textarea"
  3888. && AwtCtrl.elementName.replace("xforms:", "") != "datagrid"
  3889. && AwtCtrl.elementName.replace("xforms:", "") != "gridinput")
  3890. return;
  3891. var text = AwtCtrl.currentText;
  3892. //alert("text '" + text + "'");
  3893. if (AwtCtrl.selBegin == AwtCtrl.selEnd) {
  3894. AwtWordEnd = AwtCtrl.selEnd;
  3895. var foundC = false;
  3896. var nowWordStartPos = AwtCtrl.selBegin - 1; //space를 못찾으면 그냥 첫 위치(0)가 들어감
  3897. for (j = nowWordStartPos; j >= 0; j--) {
  3898. if (text.charAt(j) == ' ' //space
  3899. || text.charAt(j) == ' ' //tab
  3900. || text.charAt(j) == '\n' //enter
  3901. || text.charAt(j) == '.' //.
  3902. || text.charAt(j) == ',' //,
  3903. || text.charAt(j) == '\'' //'
  3904. || text.charAt(j) == '"' //"
  3905. ) {
  3906. nowWordStartPos = j + 1;
  3907. foundC = true;
  3908. break;
  3909. }
  3910. }
  3911. if (!foundC)
  3912. nowWordStartPos = 0; //구문의 첫 글자부터 찾을 단어의 시작임
  3913. foundC = false;
  3914. for (k = nowWordStartPos; k < text.length; k++) {
  3915. if (text.charAt(k) == ' ' //space
  3916. || text.charAt(k) == ' ' //tab
  3917. || text.charAt(k) == '\n' //enter
  3918. || text.charAt(k) == '.' //.
  3919. || text.charAt(k) == ',' //,
  3920. || text.charAt(k) == '\'' //'
  3921. || text.charAt(k) == '"' //"
  3922. ) {
  3923. nowWordEndPos = k;
  3924. foundC = true;
  3925. break;
  3926. }
  3927. }
  3928. if (!foundC)
  3929. nowWordEndPos = text.length; //구문의 끝 글자까지 찾을 단어임
  3930. if (nowWordStartPos == nowWordEndPos) {
  3931. AwtSendWord = "";
  3932. nowWordStartPos = AwtCtrl.selBegin;
  3933. nowWordEndPos = AwtCtrl.selEnd;
  3934. }
  3935. // return false;
  3936. } else {
  3937. nowWordStartPos = AwtCtrl.selBegin;
  3938. nowWordEndPos = AwtCtrl.selEnd;
  3939. }
  3940. AwtSendWord = text.substring(nowWordStartPos, nowWordEndPos);
  3941. AwtWordBegin = nowWordStartPos;
  3942. AwtWordEnd = nowWordEndPos;
  3943. //alert("text not same '" + text + "' " + nowWordStartPos + " " + nowWordEndPos);
  3944. document.controls("AwtViewer").model.setValue("/root/send/awttype", getViewer("sysMessage").window.javascript.fGetUserAwtGrpCd(), false);
  3945. document.controls("AwtViewer").model.setValue("/root/send/keyword", AwtSendWord, false);
  3946. for (var j = document.controls("AwtViewer").document.controls("awt_grd").rows; j > 0; j--)
  3947. document.controls("AwtViewer").document.controls("awt_grd").deleteRow(j, false);
  3948. document.controls("AwtViewer").model.refresh();
  3949. document.controls("AwtViewer").model.refresh();
  3950. return true;
  3951. }
  3952. //Awt단어 조회/변환을 실제로 수행하는 함수
  3953. function AwtGetSearchWord() {
  3954. var cp = event.focus;
  3955. if (cp == null) return;
  3956. if (document.controls(cp) == null) return;
  3957. //if (AwtCreateBrowser() == null) return;
  3958. if (document.controls(cp).elementName.replace("xforms:", "") == "datagrid") {
  3959. AwtCtrlDatagrid = document.controls(cp);
  3960. AwtCtrl = document.controls(cp).input;
  3961. AwtCtrlType = "datagrid";
  3962. } else if (document.controls(cp).elementName.replace("xforms:", "") == "gridinput") {
  3963. AwtCtrlDatagrid = document.controls(cp).parent;
  3964. AwtCtrl = document.controls(cp);
  3965. AwtCtrlType = "gridinput";
  3966. } else {
  3967. AwtCtrlDatagrid = null;
  3968. AwtCtrl = document.controls(cp);
  3969. AwtCtrlType = document.controls(cp).elementName;
  3970. }
  3971. if (AwtCtrl.elementName.replace("xforms:", "") != "input"
  3972. && AwtCtrl.elementName.replace("xforms:", "") != "textarea"
  3973. && AwtCtrl.elementName.replace("xforms:", "") != "datagrid"
  3974. && AwtCtrl.elementName.replace("xforms:", "") != "gridinput")
  3975. return;
  3976. if (AwtCtrl.selBegin != AwtCtrl.selEnd)
  3977. return false;
  3978. AwtWordEnd = AwtCtrl.selEnd;
  3979. var text = AwtCtrl.currentText;
  3980. var beforeIsGubun = false;
  3981. var found1 = false;
  3982. var foundC = false;
  3983. var nowWordStartPos = AwtCtrl.selBegin - 1; //space를 못찾으면 그냥 첫 위치(0)가 들어감
  3984. for (j = nowWordStartPos; j >= 0; j--) {
  3985. //alert(j + " " + text.charAt(j) + " " + foundC);
  3986. if (text.charAt(j) == ' ' //space
  3987. || text.charAt(j) == ' ' //tab
  3988. || text.charAt(j) == '\n' //enter
  3989. || text.charAt(j) == '.' //.
  3990. || text.charAt(j) == ',' //,
  3991. || text.charAt(j) == '\'' //'
  3992. || text.charAt(j) == '"' //"
  3993. ) {
  3994. if (j == nowWordStartPos) { //처음부터 구분자가 나오면
  3995. if (beforeIsGubun == true) //좀전에 찾앗던 단어가 구분자이면...
  3996. return false; //구분자가 두번연속으로 나온 경우리므로 return
  3997. nowWordStartPos = j - 1; //구분자가 두번 반복될때를 대비해서 처음시작을 하나 이동시킴
  3998. beforeIsGubun = true; //지금 찾은 단어가 구분자였음을 기록하고
  3999. } else {
  4000. if (foundC) {
  4001. found1 = true;
  4002. nowWordStartPos = j + 1;
  4003. break;
  4004. }
  4005. }
  4006. } else
  4007. foundC = true;
  4008. }
  4009. if (!found1)
  4010. if (nowWordStartPos == -1)
  4011. return false; //내용이 모두 구분자임, 찾을 단어가 없음
  4012. else
  4013. nowWordStartPos = 0; //구문의 첫 글자부터 찾을 단어의 시작임
  4014. var found2 = false;
  4015. var nowWordEndPos = 0;
  4016. for (k = nowWordStartPos; k < text.length; k++) {
  4017. if (text.charAt(k) == ' ' //space
  4018. || text.charAt(k) == ' ' //tab
  4019. || text.charAt(k) == '\n' //enter
  4020. || text.charAt(k) == '.' //.
  4021. || text.charAt(k) == ',' //,
  4022. || text.charAt(k) == '\'' //'
  4023. || text.charAt(k) == '"' //"
  4024. ) {
  4025. found2 = true;
  4026. nowWordEndPos = k;
  4027. break;
  4028. }
  4029. }
  4030. if (found2)
  4031. nowWordEndPos; //찾아진 구분자까지
  4032. else {
  4033. if (text.charAt(text.length - 1) == ' ' //space
  4034. || text.charAt(text.length - 1) == ' ' //tab
  4035. || text.charAt(text.length - 1) == '\n' //enter
  4036. || text.charAt(text.length - 1) == '.' //.
  4037. || text.charAt(text.length - 1) == ',' //,
  4038. || text.charAt(text.length - 1) == '\'' //'
  4039. || text.charAt(text.length - 1) == '"' //"
  4040. )
  4041. nowWordEndPos = text.length - 1; //마지막 글자까지
  4042. else
  4043. nowWordEndPos = text.length; //마지막 글자까지
  4044. }
  4045. AwtSendWord = text.substring(nowWordStartPos, nowWordEndPos);
  4046. AwtWordBegin = nowWordStartPos;
  4047. AwtWordEnd = nowWordEndPos;
  4048. return true;
  4049. }
  4050. //Awt조회/변환된 결과를 입력중인 콤포넌트에 교체하는 함수 (Awt Browser에서 입력중인 화면으로 호출함)
  4051. function AwtSetResult(awtResult, awtMode) {
  4052. var result = null;
  4053. var hanengmode = null;
  4054. //if (awtMode == "matchone") {
  4055. if (awtMode == "conv" || awtMode == "sent" || awtMode == "sentNconv") {
  4056. var tokens = awtResult.split("||");
  4057. hanengmode = tokens[0];
  4058. result = tokens[1];
  4059. } else {
  4060. result = awtResult;
  4061. }
  4062. //if (awtMode == "autocomplete") {
  4063. if (awtMode == "list") {
  4064. if (AwtCtrlType == "datagrid") {
  4065. if (AwtCtrlDatagrid != null) {
  4066. AwtCtrlDatagrid.editCell();
  4067. }
  4068. } else if (AwtCtrlType == "gridinput") {
  4069. if (AwtCtrlDatagrid != null) {
  4070. AwtCtrlDatagrid.editCell();
  4071. }
  4072. } else {
  4073. //do nothing
  4074. }
  4075. }
  4076. if (result == AwtSendWord) {
  4077. AwtHide();
  4078. return;
  4079. }
  4080. var first = AwtCtrl.currentText.substr(0, AwtWordBegin);
  4081. var last = AwtCtrl.currentText.substr(AwtWordEnd, AwtCtrl.currentText.length);
  4082. var cnt = 1;
  4083. //if (awtMode == "autocomplete")
  4084. if (awtMode == "list")
  4085. cnt = 0;
  4086. AwtWordEnd = (first + result).length + cnt;
  4087. //if (awtMode == "autocomplete") {
  4088. if (awtMode == "list") {
  4089. if (AwtCtrlType == "datagrid") {
  4090. if (AwtCtrlDatagrid != null) {
  4091. model.setFocus("AwtViewer");
  4092. model.setFocus(AwtCtrl.attribute("id"));
  4093. AwtCtrlDatagrid.editCell();
  4094. }
  4095. } else if (AwtCtrlType == "gridinput") {
  4096. if (AwtCtrlDatagrid != null) {
  4097. model.setFocus("AwtViewer");
  4098. model.setFocus(AwtCtrl.attribute("id"));
  4099. AwtCtrlDatagrid.editCell();
  4100. }
  4101. } else {
  4102. model.setFocus("AwtViewer");
  4103. model.setFocus(AwtCtrl.attribute("id"));
  4104. }
  4105. }
  4106. AwtCtrl.currentText = first + result + last;
  4107. if (AwtCtrl != null) {
  4108. //if (awtMode == "matchone") {
  4109. if (awtMode == "conv" || awtMode == "sent" || awtMode == "sentNconv") {
  4110. if (hanengmode == "1") {
  4111. AwtCtrl.attribute("imemode") = "alpha";
  4112. body.attribute("imemode") = "alpha";
  4113. } else if (hanengmode == "2") {
  4114. AwtCtrl.attribute("imemode") = "hangul";
  4115. body.attribute("imemode") = "hangul";
  4116. }
  4117. if (AwtCtrlType != "gridinput" && AwtCtrlType != "gridinput") {
  4118. model.setFocus("body");
  4119. model.setFocus(AwtCtrl.attribute("id"));
  4120. }
  4121. } else {
  4122. if (AwtCtrlType == "datagrid") {
  4123. if (AwtCtrlDatagrid != null) {
  4124. AwtCtrlDatagrid.editCell();
  4125. }
  4126. } else if (AwtCtrlType == "gridinput") {
  4127. if (AwtCtrlDatagrid != null) {
  4128. AwtCtrlDatagrid.editCell();
  4129. }
  4130. } else {
  4131. //do nothing
  4132. }
  4133. }
  4134. }
  4135. AwtHide();
  4136. //if (model.getFocus().substring(0, 4) != 'awt_')
  4137. // return;
  4138. AwtSearchLog(AwtWordBegin + " " + AwtWordEnd);
  4139. model.setFocus("window");
  4140. model.setFocus(AwtCtrl.attribute("id"));
  4141. AwtCtrl.selBegin = AwtWordEnd;
  4142. AwtCtrl.selEnd = AwtWordEnd;
  4143. AwtCtrl = null;
  4144. AwtCtrlType = null;
  4145. }
  4146. //Awt ajax통신 객체 생성
  4147. function AwtxmlHttpPost()
  4148. {
  4149. AwtxmlHttpRequest = new ActiveXObject('Microsoft.XMLHTTP');
  4150. }
  4151. //Awt서버에 보낼 구문 패턴을 만드는 함수
  4152. function AwtXMLPattern(awtType, awtMode, strSpell)
  4153. {
  4154. var strXML = null;
  4155. strXML = encodeURI("awtType="+awtType+"&userid="+getUserInfo("userid")+"&deptcd="+getUserInfo("dutplcecd")+"&strSpell="+strSpell+"&strFlag="+awtMode);
  4156. return strXML;
  4157. }
  4158. //Awt서버에 ajax요청을 보내는 함수
  4159. function AwtSend(awtType, awtMode, strSpell)
  4160. {
  4161. var strPostValue=AwtXMLPattern(awtType, awtMode, strSpell);
  4162. //http://his999dev.knu.ac.kr:8088/himed/webapps/com/hismainweb/jsp/awtAjaxOra.jsp?awtType=C&userid=&deptcd=&strSpell=rkwl&strFlag=list&
  4163. //http://his999dev.knu.ac.kr:8088/himed/webapps/com/hismainweb/jsp/awtAjaxOra.jsp?awtType=C&userid=EMR&deptcd=2010300000&strSpell=rktma&strFlag=conv
  4164. //http://his999dev.knu.ac.kr:8088/himed/webapps/com/hismainweb/jsp/awtAjaxOra.jsp?awtType=C&userid=EMR&deptcd=2010300000&strSpell=rktma&strFlag=sentNconv
  4165. AwtxmlHttpRequest.open('POST', AwtAjaxUrl, true);
  4166. //alert(AwtAjaxUrl + strPostValue);
  4167. AwtxmlHttpRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
  4168. AwtxmlHttpRequest.setRequestHeader("Cache-Control", "no-cache");
  4169. AwtxmlHttpRequest.setRequestHeader("Pragma", "no-cache");
  4170. AwtxmlHttpRequest.onreadystatechange = function() {
  4171. if(AwtxmlHttpRequest.readyState == 4)
  4172. {
  4173. switch (AwtxmlHttpRequest.status)
  4174. {
  4175. case 404:
  4176. //alert('오류: ' + AwtAjaxUrl + '이 존재하지 않음');
  4177. break;
  4178. case 200:
  4179. AwtOnResult(AwtxmlHttpRequest.responseText.trim());
  4180. break;
  4181. default:
  4182. //alert('오류: ' + AwtxmlHttpRequest.responseText);
  4183. break;
  4184. }
  4185. }
  4186. }
  4187. AwtxmlHttpRequest.send(strPostValue);
  4188. }
  4189. String.prototype.trim = function ()
  4190. {
  4191. return this.replace(/^\s\s*/, '').replace(/\s\s*$/, '');
  4192. }
  4193. function AwtSearchLog(sendWord) {
  4194. awtMode = "log";
  4195. AwtxmlHttpPost();
  4196. AwtSend("", awtMode, getUserName() + "\t" + sendWord + "\t" + window.document.url);
  4197. }
  4198. function AwtSearchLike(sendWord,sendtype)
  4199. {
  4200. // frmSearch.sword.value = sendWord;
  4201. //document.controls("AwtViewer").model.removenode("/root/main/words");
  4202. //document.controls("AwtViewer").model.makeNode("/root/main/words");
  4203. //AwtMode = "autocomplete";
  4204. AwtMode = "list"; // 2014.01.13 박황백 수정
  4205. AwtxmlHttpPost();
  4206. // AwtSend(getViewer("sysMessage").window.javascript.fGetUserAwtGrpCd(), AwtMode, sendWord);
  4207. if (sendtype == null)
  4208. {
  4209. sendtype = getViewer("sysMessage").window.javascript.fGetUserAwtGrpCd();
  4210. }
  4211. AwtSend(sendtype, AwtMode, sendWord);
  4212. }
  4213. function AwtSearchOne(sendWord) {
  4214. // AwtMode = "matchone";
  4215. AwtMode = "conv";
  4216. AwtxmlHttpPost();
  4217. AwtSend(getViewer("sysMessage").window.javascript.fGetUserAwtGrpCd(), AwtMode, sendWord);
  4218. //위줄의 함수가 경북대병원은 fGetUserAwtGrpCd() ㄴ일수도 있음
  4219. //(AwtSearchOne 함수 바로 윗줄에 같은 함수를 부르니 정확한 명칭은 참고..
  4220. }
  4221. function AwtSearchSentense(sendWord) {
  4222. //AwtMode = "matchsentense";
  4223. AwtMode = "sent";
  4224. AwtxmlHttpPost();
  4225. //구문 ctrl+space조회시 조회창f2에서 사용하는 단어그룹 설정으로 조회한다.
  4226. //공용단어"C"로 조회하려면 첫번째 파라미처를 "C"로, 부서는 "D"로, 개인은 "P"로...
  4227. var awttype = getViewer("sysMessage").window.javascript.fGetUserAwtGrpCd();
  4228. // alert(awttype);
  4229. // AwtSend(awttype, AwtMode, sendWord);
  4230. AwtSend("P", AwtMode, sendWord);
  4231. }
  4232. function AwtSearchOneNSentense(sendWord) {
  4233. AwtMode = "sentNconv";
  4234. AwtxmlHttpPost();
  4235. //구문 ctrl+space조회시 조회창f2에서 사용하는 단어그룹 설정으로 조회한다.
  4236. //공용단어"C"로 조회하려면 첫번째 파라미처를 "C"로, 부서는 "D"로, 개인은 "P"로...
  4237. var awttype = getViewer("sysMessage").window.javascript.fGetUserAwtGrpCd();
  4238. // alert(awttype);
  4239. AwtSend(awttype, AwtMode, sendWord);
  4240. //AwtSend("P", AwtMode, sendWord);
  4241. }
  4242. function AwtOnResult(strVal)
  4243. {
  4244. if (strVal == null || strVal == "" || strVal == "null")
  4245. return;
  4246. //AwtSearchLog("changed\t'" + strVal + "'\t" + AwtMode);
  4247. nCurrent=0;
  4248. strVal = strVal.replace(/\r\n/g,"");
  4249. //if(AwtMode=="matchone" || AwtMode=="matchsentense")
  4250. if(AwtMode=="conv" || AwtMode=="sent" || AwtMode=="sentNconv")
  4251. {
  4252. if (strVal != null && strVal.length != 0) {
  4253. AwtSetResult(strVal, AwtMode);
  4254. }
  4255. }
  4256. //else if(AwtMode=="autocomplete")
  4257. else if(AwtMode=="list")
  4258. {
  4259. AwtCreateBrowser();
  4260. //AwtShow();
  4261. var cnt = 0;
  4262. if(strVal.length>0 && strVal.indexOf("□□□")>=0)
  4263. {
  4264. var strArr = strVal.split("□□□");
  4265. for (var i = 0; i < strArr.length; i++) {
  4266. if (strArr[i] != null && strArr[i] != "") {
  4267. cnt++;
  4268. // document.controls("AwtViewer").document.controls("awt_grd").addRow(false);
  4269. // document.controls("AwtViewer").document.controls("awt_grd").valueMatrix(cnt, document.controls("AwtViewer").document.controls("awt_grd").colRef("data")) = strArr[i];
  4270. var strToken = strArr[i].split("■■■");
  4271. document.controls("AwtViewer").document.controls("awt_grd").addRow(false);
  4272. document.controls("AwtViewer").document.controls("awt_grd").valueMatrix(cnt, document.controls("AwtViewer").document.controls("awt_grd").colRef("data")) = strToken[0];
  4273. document.controls("AwtViewer").document.controls("awt_grd").valueMatrix(cnt, document.controls("AwtViewer").document.controls("awt_grd").colRef("keyword")) = strToken[1];
  4274. }
  4275. }
  4276. document.controls("AwtViewer").window.javascript.doRefresh();
  4277. document.controls("AwtViewer").window.javascript.doFocus();
  4278. }
  4279. }
  4280. }
  4281. //Awt조회창을 숨긴다
  4282. function AwtHide() {
  4283. if (document.controls("AwtViewer") == null)
  4284. return;
  4285. if (document.controls("AwtViewer").visible == false)
  4286. return;
  4287. document.controls("AwtViewer").visible = false;
  4288. document.controls("AwtViewer").attribute("width") = "10px";
  4289. document.controls("AwtViewer").attribute("height") = "10px";
  4290. if (AwtCtrl == null)
  4291. return;
  4292. }
  4293. //Awt조회창을 보인다
  4294. function AwtShow() {
  4295. AwtAttachByObject();
  4296. document.controls("AwtViewer").attribute("width") = "383px";
  4297. document.controls("AwtViewer").attribute("height") = "223px"; //Awt조회 화면이 열릴때 크기를 지정한다.(불필요한 스크롤바가 생기면 이 크기를 조정)
  4298. document.controls("AwtViewer").visible = true;
  4299. model.setFocus("AwtViewer");
  4300. document.controls("AwtViewer").window.javascript.doFocus();
  4301. }
  4302. //화면 & 개인별 자동변환 사용여부 1:사용, 0:미사용
  4303. function AwtStnsOn() {
  4304. try {
  4305. var viewObj = getViewer("sysMessage");
  4306. if (viewObj != null && viewObj.window.javascript.fGetUserAwtStnsYN() == "Y")
  4307. return '1';
  4308. } catch(e) {
  4309. // alert('상용구 개인별 On/Off 설정을 가져오는데 오류가 발생했습니다.' + e.toString());
  4310. }
  4311. return '0';
  4312. }
  4313. /*AWT주석*/ //AWT 관련 로직 끝
  4314. /*
  4315. * 로그 파일 생성 - 2013.06.12
  4316. *
  4317. * filename = "원무";
  4318. * text = "테스트";
  4319. * C:\원무_20130612.txt
  4320. * [ 16:03:47 ] - 테스트
  4321. */
  4322. function fSetlog(filename, text){
  4323. /*
  4324. * 특정 PC 적용
  4325. * 본원 : 192.168.32.51 (건진 변경숙)
  4326. * 본원 : 192.168.32.53 (건진 신지혜)
  4327. *
  4328. * 칠곡 : 172.18.51.13 (건진 최수현)
  4329. * 칠곡 : 172.18.31.33 (외래 홍다래)
  4330. */
  4331. if(app.clientIp != "192.168.32.51"
  4332. && app.clientIp != "192.168.31.53"
  4333. && app.clientIp != "172.18.51.13"
  4334. && app.clientIp != "172.18.31.33"
  4335. ){
  4336. return;
  4337. }
  4338. var fso = new ActiveXObject("Scripting.FileSystemObject");
  4339. var defaultFolder = "C:\\";
  4340. var makeFile = "log";
  4341. var logText = "내용 없습니다.";
  4342. var day = getCurrentDate();
  4343. if(text != null || text != ""){
  4344. logText = text;
  4345. }
  4346. if(filename != null || filename != ""){
  4347. makeFile = filename;
  4348. }
  4349. makeFile = "result" + day.substr(2, 6) + ".txt";
  4350. //폴더가 존재하는 체크
  4351. if(!fso.FolderExists(defaultFolder)){
  4352. fso.CreateFolder(defaultFolder);
  4353. }
  4354. var logFile = fso.OpenTextFile(defaultFolder + "\\" + makeFile, 8, true);
  4355. var time = getCurrentTime();
  4356. var hh = time.substr(0, 2);
  4357. var mm = time.substr(2, 2);
  4358. var ss = time.substr(4, 2);
  4359. time = hh + ":" + mm + ":" + ss;
  4360. logFile.WriteLine("[" + time + "] ■ " + logText);
  4361. logFile.Close();
  4362. }
  4363. function fMouseClick(){
  4364. var viewObj = getViewer("sysMessage");
  4365. viewObj.window.javascript.fClickCount(getScreenID());
  4366. }
  4367. // 엑셀 다운로드
  4368. function fSetExcelDownloadLog() {
  4369. var viewObj = getViewer("sysMessage");
  4370. if(viewObj != null && viewObj.window.javascript.fSetExcelDownloadLog != undefined)
  4371. viewObj.window.javascript.fSetExcelDownloadLog(getScreenID());
  4372. }