comm_frm.xjs 156 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080308130823083308430853086308730883089309030913092309330943095309630973098309931003101310231033104310531063107310831093110311131123113311431153116311731183119312031213122312331243125312631273128312931303131313231333134313531363137313831393140314131423143314431453146314731483149315031513152315331543155315631573158315931603161316231633164316531663167316831693170317131723173317431753176317731783179318031813182318331843185318631873188318931903191319231933194319531963197319831993200320132023203320432053206320732083209321032113212321332143215321632173218321932203221322232233224322532263227322832293230323132323233323432353236323732383239324032413242324332443245324632473248324932503251325232533254325532563257325832593260326132623263326432653266326732683269327032713272327332743275327632773278327932803281328232833284328532863287328832893290329132923293329432953296329732983299330033013302330333043305330633073308330933103311331233133314331533163317331833193320332133223323332433253326332733283329333033313332333333343335333633373338333933403341334233433344334533463347334833493350335133523353335433553356335733583359336033613362336333643365336633673368336933703371337233733374337533763377337833793380338133823383338433853386338733883389339033913392339333943395339633973398339934003401340234033404340534063407340834093410341134123413341434153416341734183419342034213422342334243425342634273428342934303431343234333434343534363437343834393440344134423443344434453446344734483449345034513452345334543455345634573458345934603461346234633464346534663467346834693470347134723473347434753476347734783479348034813482348334843485348634873488348934903491349234933494349534963497349834993500350135023503350435053506350735083509351035113512351335143515351635173518351935203521352235233524352535263527352835293530353135323533353435353536353735383539354035413542354335443545354635473548354935503551355235533554355535563557355835593560356135623563356435653566356735683569357035713572357335743575357635773578357935803581358235833584358535863587358835893590359135923593359435953596359735983599360036013602360336043605360636073608360936103611361236133614361536163617361836193620362136223623362436253626362736283629363036313632363336343635363636373638363936403641364236433644364536463647364836493650365136523653365436553656365736583659366036613662366336643665366636673668366936703671367236733674367536763677367836793680368136823683368436853686368736883689369036913692369336943695369636973698369937003701370237033704370537063707370837093710371137123713371437153716371737183719372037213722372337243725372637273728372937303731373237333734373537363737373837393740374137423743374437453746374737483749375037513752375337543755375637573758375937603761376237633764376537663767376837693770377137723773377437753776377737783779378037813782378337843785378637873788378937903791379237933794379537963797379837993800380138023803380438053806380738083809381038113812381338143815381638173818381938203821382238233824382538263827382838293830383138323833383438353836383738383839384038413842384338443845384638473848384938503851385238533854385538563857385838593860386138623863386438653866386738683869387038713872387338743875387638773878387938803881388238833884388538863887388838893890389138923893389438953896389738983899390039013902390339043905390639073908390939103911391239133914391539163917391839193920392139223923392439253926392739283929393039313932393339343935393639373938393939403941394239433944394539463947394839493950395139523953395439553956395739583959396039613962396339643965396639673968396939703971397239733974397539763977397839793980398139823983398439853986398739883989399039913992399339943995399639973998399940004001400240034004400540064007400840094010401140124013401440154016401740184019402040214022402340244025402640274028402940304031403240334034403540364037403840394040404140424043404440454046404740484049405040514052405340544055405640574058405940604061406240634064406540664067406840694070407140724073407440754076407740784079408040814082408340844085408640874088408940904091409240934094409540964097409840994100410141024103410441054106410741084109411041114112411341144115411641174118411941204121412241234124412541264127412841294130413141324133413441354136413741384139414041414142414341444145414641474148414941504151415241534154415541564157415841594160416141624163416441654166416741684169417041714172417341744175417641774178417941804181418241834184418541864187418841894190419141924193419441954196419741984199420042014202420342044205420642074208420942104211421242134214421542164217421842194220422142224223422442254226422742284229423042314232423342344235423642374238423942404241424242434244424542464247424842494250425142524253425442554256425742584259426042614262426342644265426642674268426942704271427242734274427542764277427842794280428142824283428442854286428742884289429042914292429342944295429642974298429943004301430243034304430543064307430843094310431143124313431443154316431743184319432043214322432343244325432643274328432943304331433243334334433543364337433843394340434143424343434443454346434743484349435043514352435343544355435643574358435943604361436243634364436543664367436843694370437143724373437443754376437743784379438043814382438343844385438643874388438943904391439243934394439543964397439843994400440144024403440444054406440744084409441044114412441344144415441644174418441944204421442244234424442544264427442844294430443144324433443444354436443744384439444044414442444344444445444644474448444944504451445244534454445544564457445844594460446144624463446444654466446744684469447044714472447344744475447644774478447944804481448244834484448544864487448844894490449144924493449444954496449744984499450045014502450345044505450645074508450945104511451245134514451545164517451845194520452145224523452445254526452745284529453045314532453345344535
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <Script type="xscript4.0"><![CDATA[/***************************************************************************************
  3. * System Name : HIT
  4. * Job Name :
  5. * File Name : comm_frm.xjs
  6. * Creator : 임준호
  7. * Make Date : 2014-02-18
  8. *
  9. * Description : form API
  10. *---------------------------------------------------------------------------------------
  11. * Modify Date Modifier Modify Description
  12. *---------------------------------------------------------------------------------------
  13. * 2014-02-18 HIT
  14. *
  15. *---------------------------------------------------------------------------------------
  16. ****************************************************************************************/
  17. /********************************************************************************************************************/
  18. /************************* 폼 일반 *********************************************************************************/
  19. /********************************************************************************************************************/
  20. // frmf_getTitle : 현재 화면의 타이틀을 가져온다.
  21. // frmf_getBizNameByUrl : url에서 업무명을 가져온다.(업무명)
  22. // frmf_initTitle : 화면 title을 설정한다.
  23. // frmf_deleteUidChild : uid repository에서 child팝업을 삭제한다.
  24. // frmf_initForm : form 초기화. form의 onload함수에 반드시 추가한다.
  25. // frmf_getChildUID : child 윈도우의 UID 정보
  26. // frmf_getChildPID : child 윈도우의 PID 정보
  27. // frmf_getMyUID : 현재 form의 UID 정보
  28. // frmf_getOpenerUID : Opener의 UID 정보(child 팝업에 저장된 opener uid를 가져온다.)
  29. // frmf_getScreenDisabled : 화면 상태 반환
  30. // frmf_setMenuDisabled : 상단 메뉴 enable 상태 설정
  31. // frmf_openLoadingBar : loading 이미지 open
  32. // frmf_closeLoadingBar : loading 이미지 close
  33. // frmf_setParameter : name 명으로 value 값을 저장, 기존에 같은 name이 있으면 첫번째 값을 덮어쓴다.
  34. // frmf_addParameter : name 명으로 value 값을 추가
  35. // frmf_getParameter : index 번째 name의 값을 가져옴, index 생략하면 1
  36. // frmf_getParameterCount : 해당 sName의 파라메터 갯수
  37. // frmf_removeParameter : name 명으로 저장된 데이터들 중에서 index 번째 위치에 있는 값을 삭제한다. index를 생략하면 첫번째 위치의 값을 삭제한다.
  38. // frmf_clearParameter : name의 모든 값울 삭제함, 삭제하기전 값을 반환한다. (getParmeter후 초기화 하는 로직 단순화를 위해)
  39. // frmf_clearAllParameter : parameter 전체를 삭제한다.
  40. // frmf_chkMdt : 포커스를 이동할 때 필수, 선택 Validation check
  41. // frmf_chkMdtMax : 포커스를 이동할 때 필수, 선택 Validation check
  42. // frmf_chkMdtGrid : 그리드에서 포커스를 이동할 때나 저장할 때 그리드 필수항목 check 하고 포커스를 해당 cell로 이동
  43. // frmf_chkOpt : 여러 개의 값 중에서 하나만 필수일때 Validation check
  44. // frmf_chkMdtMaxOnly : 입력 제한길이 체크
  45. // frmf_getViewer : 주어진 이름의 form, div 객체를 반환한다.
  46. // frmf_createPopupMenu : 팝업메뉴 생성
  47. // frmf_createPopupMenuDs : DataSet으로부터 팝업메뉴 생성
  48. // frmf_setPopupMenuDs : 팝업메뉴에 dataset을 설정한다. (신규 2014-05-16)
  49. // frmf_initPopupMenu : 화면에서 사용할 popupmenu 생성
  50. // frmf_mouseRightClick : 화면 우클릭 이벤트시 popupmenu 호출
  51. // frmf_event_onmenuclick : 화면 팝업메뉴 선택 이벤트
  52. // (삭제, 원복)frmf_isRequiredControls : 입력 컨트롤들의 필수값 체크 (frmf_chkMdt로 대체함)(다시 원복 김상목 2015.11.26)
  53. // frmf_isRequiredGroup :div 안의 component들중 입력가능한 component의 필수값 체크
  54. // (삭제)frmf_removeChildren : 경로의 노드를 삭제
  55. // frmf_removeMask : 스트링 객체의 해당 마스크 문자를 제거후 반환한다.
  56. // frmf_logout : 로그아웃
  57. // frmf_checkTimeout : 세션 타임 아웃 확인
  58. // frmf_textViewPopup : text의 내용을 보거나 수정 할 팝업호출 (2014-04-22 신규)
  59. // frmf_findFuncFromForm : 화면 URL에 해당하는 폼에서 함수 유무를 체크한다. (2014-04-22 신규)
  60. // frmf_findTextFromForm : 화면 URL에 해당하는 폼에서 text의 유무를 체크한다. (2014-04-22 신규)
  61. // frmf_removeTitlebar : titlebar와 border를 제거한다. (2014-04-23 신규)
  62. // frmf_setDefaultWorkForm : 메인프레임 work영역을 default화면으로 변경한다. (2014-04-24 신규)
  63. // frmf_getMainFormParam : frmf_openForm에서 인자값을 넘겼을때 받는 form에서 사용한다. (2014-06-11 신규)
  64. // frmf_checkAlone : 자신이 최상단 화면인지를 리턴한다. (2015-04-29 신규)
  65. /********************************************************************************************************************/
  66. /************************* Caching API ******************************************************************************/
  67. /********************************************************************************************************************/
  68. // frmf_storeIntoCache : dataset을 cache에 저장한다.
  69. // frmf_copyFromCache : Cache에서 itemname으로 저장된 dataset을 objDs에 복사한다. 해당 itemname으로 복사가 되었으면 true를 복사된 내용이 없으면 false를 반환한다.
  70. /********************************************************************************************************************/
  71. /************************* 팝업 관련 함수 *************************************************************************/
  72. /********************************************************************************************************************/
  73. // frmf_setPopArgs : 팝업 인자값에 오프너의 screen id를 넣는다.
  74. // frmf_setPopupPosiotion : 팝업(modal, modeless) 위치 설정
  75. // frmf_modal : 화면 id로 Modal Dialog를 실행한다.
  76. // frmf_modalInternal : URL로 Modal Dialog를 실행한다.
  77. // frmf_open : 화면ID로 Modeless Dialog를 실행한다.
  78. // frmf_openInternal : URL로 Modeless Dialog를 실행한다.
  79. // frmf_newChildFrame : Modal/Modeless Popup 처리.
  80. // frmf_isPopup : 자신이 팝업인지 아닌지를 리턴한다.
  81. // frmf_getPopupId : 팝업 ID를 가져온다.
  82. // frmf_findPopup : 팝업의 Form 객체를 가져온다.
  83. // frmf_getChildWindow : open된 팝업들 중에서 다른 화면으로 바뀌지 않은 팝업의 form object를 리턴한다. child window가 없거나 있더라도 다른 화면으로 바뀌었다면 null을 리턴한다.
  84. // frmf_findChildWindow : 열려있는 팝업 중에서 현재의 UID가 주어진 UID와 동일한 팝업을 찾아서 리턴한다. 없으면 null
  85. // frmf_setFormInfo : 팝업정보를 gds_openFormInfo에 저장한다.
  86. // frmf_deletePopInfo : 팝업정보를 gds_openFormInfo에서 삭제한다.
  87. // frmf_getChildPopList : 폼에서 열린 팝업 목록을 가져온다.
  88. // frmf_setCloseChildPop : 화면전환시 child가 close되도록 저장
  89. // frmf_closeChildPop : 화면전환시 child popup 닫기로 지정된 경우 해당 form의 child popup을 모두 닫는다.
  90. // frmf_setFocusPop : 지정된 팝업을 focus한다.
  91. // frmf_setFocusOpener : opener를 focus한다.
  92. // frmf_setFocus : 자기자신을 focus한다.
  93. // frmf_openHtml : HTML Open 팝업(시스템에 설정된 기본 브라우저가 아닌 인터넷 익스플로러가 실행된다.)
  94. // frmf_getMainViewer : main work form 객체를 반환한다.
  95. // frmf_checkOpener : Opener가 다른 화면으로 변경되었는지 여부를 반환한다.
  96. // frmf_getCurrentFormKind : 현재 화면의 종류("modal", "modeless", "main")를 조회한다.(신규 : 2014-11-19)
  97. // frmf_getoOpener : 화면에 소속된 상황에 따른 opener(main work form, opener, getOwnerFrame) 객체를 가져온다(신규 : 2015-02-24)
  98. /********************************************************************************************************************/
  99. /************************* 화면이동관련 함수 *********************************************************************/
  100. /********************************************************************************************************************/
  101. // frmf_openForm : screen id로 해당 화면을 업무화면 영역에 로딩한다.
  102. // frmf_openFormInternal : screen url로 해당 화면을 업무화면 영역에 로딩한다.
  103. /********************************************************************************************************************/
  104. /************************* 화면권한정보 함수 *********************************************************************/
  105. /********************************************************************************************************************/
  106. // frmf_checkAuth : 주어진 유형에 해당하는 버튼권한을 가져온다.
  107. // frmf_getScreenID : 화면아이디를 가져온다
  108. // frmf_getMainFormScreenID : 메인 form의 화면아이디를 가져온다. (2014-06-11 신규)
  109. // frmf_getScreenAuth : 화면권한코드를 가져온다.
  110. // frmf_getMenuParam : 메뉴파라미터를 가져온다.
  111. // frmf_getMenuGroupCD : 메뉴그룹코드를 가져온다.
  112. // frmf_getMenuItemCD : 메뉴아이템코드를 가져온다.
  113. // frmf_getPrestDeptCd : 메뉴그룹의 사용처 부서코드를 가져온다.
  114. /********************************************************************************************************************/
  115. /************************* 컴포넌트 공통 함수 ********************************************************************/
  116. /********************************************************************************************************************/
  117. // frmf_addComboItem : 콤보 아이템 추가 함수
  118. // frmf_addComboItemAll : 모든 콤보 아이템 추가 함수(2014.04.03 : 변경)
  119. // frmf_setInputNodeCurPid : setInputNodeCurText 함수와 동일한 기능. 환자번호 총 9자리로 0으로 채우는 기능 추가됨(2014.04.04 : 변경)
  120. // frmf_setInputNodeCurPid_Change : 환자번호의 자리수에 맞게 0을 채움(2014.04.04 : 변경)
  121. // frmf_openImageFileDialog : 이미지 파일 선택 다이알로그를 띄운다.
  122. // frmf_inputEnterKey : 컴퍼넌트 이벤트 호출
  123. // frmf_btnSetEnable : 버튼 enable false 시 tooltiptext가 나오도록 하기 위한 함수 추가 (2017.08.28 : 신규)
  124. /********************************************************************************************************************/
  125. /************************* 화면 확대축소 함수 ********************************************************************/
  126. /********************************************************************************************************************/
  127. // frmf_initAnchors : 화면 오픈 시 앵커 배열 arrAnchors을 초기화 (2015.06.16 : 신규)
  128. // frmf_getAnchors : 앵커 배열 arrAnchors에 현재 화면에 사용중인 앵커 객체 저장 (2015.06.16 : 신규)
  129. // frmf_addArrAnchor : 동적으로 앵커 필요한 Component 추가시 이 함수 호출 필요 (2015.06.16 : 신규)
  130. // frmf_RemoveAnchors : 앵커 제저 (2015.06.16 : 신규)
  131. // frmf_RestoreAnchors : 앵커 복원 (2015.06.16 : 신규)
  132. // frmf_setZoom : 화면을 확대 축소 하는 함수 (2015.06.16 : 신규)
  133. /********************************************************************************************************************/
  134. /************************* 파일다운로드 함수 ********************************************************************/
  135. /********************************************************************************************************************/
  136. // frmf_LargeFileDownload : 대용량 파일 다운로드 함수 (2019.03.18 : 신규)
  137. //frmf_setParameter, frmf_getParameter 에서 사용
  138. var FRMFGV_ARR_FORM_PARAMETER = new Object();
  139. //frmf_initForm 에서 사용
  140. var FRMGV_OBJ_UID_REPOSITORY = new Object();
  141. // ------- 공통에서 사용중인 단축키 목록 ------- //
  142. // - ctrl 누르고 동작하는 것들
  143. var keycode_plus = 107; // '+' : 화면 확대
  144. var keycode_equal = 187; // '=' : 화면 확대
  145. var keycode_minus_1 = 109; // '-' : 화면 축소
  146. var keycode_minus_2 = 189; // '-' : 화면 축소
  147. var keycode_zero = 48; // '0' : 화면 100% 크기로 설정
  148. var keycode_F5 = 116; // 'F5' : Reload
  149. var keycode_F7 = 118; // 'F7' : 소스보기
  150. var keycode_F9 = 120; // 'F9' : 로그보기
  151. var keycode_F10 = 121; // 'F10' : Property 보기
  152. // - alt 누르고 동작하는 것들
  153. // keycode_F5 // 'F5' : 데이타셋 보기
  154. // - 단독으로 동작하는 것들
  155. var keycode_F12 = 123; // 'F12' : 스크린샷 모드 시작
  156. var keycode_ESC = 27; // 'ESC' : 스크린샷 모드 종료
  157. // ------------------------------------------------ //
  158. /********************************************************************************************************************/
  159. /************************* 폼 일반 *********************************************************************************/
  160. /********************************************************************************************************************/
  161. /****************************************************************************************
  162. * Function : frmf_getBizNameByUrl
  163. * Description : url에서 title명을 가져온다.(업무명)
  164. * Argument : 01.sUrl - url정보
  165. * return type : String - url에서 업무명을 잘라서 리턴한다.
  166. * Creator : 임준호
  167. ****************************************************************************************/
  168. function frmf_getBizNameByUrl(sUrl){
  169. var sTitleName = "";
  170. try{
  171. sTitleName = sUrl.split(".")[0].split("::")[1].split("_")[1];
  172. }catch(e){
  173. sTitleName = "";
  174. }
  175. return sTitleName;
  176. }
  177. /****************************************************************************************
  178. * Function : frmf_getTitle
  179. * Description : 현재 화면의 타이틀을 가져온다.
  180. * Argument :
  181. * return type : String - 타이틀
  182. * Creator : 임준호
  183. ****************************************************************************************/
  184. function frmf_getTitle(){
  185. var sTitleName = "";
  186. if(!frmf_isPopup()){
  187. sTitleName = application.mainframe.titletext;
  188. }else{
  189. sTitleName = this.titletext;
  190. }
  191. return sTitleName;
  192. }
  193. //=======================================================================================
  194. // Function
  195. //---------------------------------------------------------------------------------------
  196. /***********************************************************************************************
  197. * 함수명 : lf_commoduleDataSetShow
  198. * 설 명 : 화면의 keydown event를 추가한다.
  199. * argument :
  200. * return Type :
  201. * 작성자 : KKM
  202. ************************************************************************************************/
  203. function lf_commoduleDataSetShow()
  204. {
  205. this.onkeydown.addHandler(lf_onDataSetShow);
  206. }
  207. /***********************************************************************************************
  208. * 함수명 : lf_onDataSetShow
  209. * 설 명 : keydown event 로 DataSet 미리보기 화면을 modal로 띄운다.
  210. * argument :
  211. * return Type :
  212. * 작성자 : KKM
  213. ************************************************************************************************/
  214. function lf_onDataSetShow(obj:Form, e:KeyEventInfo)
  215. {
  216. if (e.altKey && e.keycode == keycode_F5) {
  217. lf_popupDataSetShow();
  218. return true;
  219. }
  220. }
  221. function lf_popupDataSetShow() {
  222. var newChild = new ChildFrame();
  223. var currentFrame = this.getOwnerFrame();
  224. var sMoniterIndex = system.getMonitorIndex(system.cursorx, system.cursory);
  225. var sObjScreenSize = system.getScreenRect(sMoniterIndex);
  226. var sScreenLeft = sObjScreenSize.left;
  227. var sScreenRight = sObjScreenSize.right;
  228. var sScreenTop = sObjScreenSize.top;
  229. var sScreenBottom = sObjScreenSize.bottom;
  230. var sScreenWidth = sScreenRight - sScreenLeft;
  231. var sScreenHeight = sScreenBottom - sScreenTop
  232. newChild.resizable = true;
  233. newChild.style.border = "1px solid #ccd0d2ff";
  234. newChild.style.bordertype = "round 15px 15px";
  235. newChild.init("datasetrtrv", sScreenLeft + (sScreenWidth/2)-235 ,sScreenTop + (sScreenHeight/2)-130, sScreenLeft + (sScreenWidth/2)+235, sScreenTop + (sScreenHeight/2)-130, "com_commodulexp::SSZFM00401_DataSetRtrv.xfdl");
  236. newChild.showModal(currentFrame);
  237. newChild.destroy();
  238. newChild = null;
  239. }
  240. /****************************************************************************************
  241. * Function : frmf_initTitle
  242. * Description : 화면 title을 설정한다.
  243. * Argument :
  244. * return type :
  245. * Creator : 임준호
  246. * Modifier : 손병은 (TF 관련 타이틀 구현 위해 setTitle 함수 이용토록 수정)
  247. ****************************************************************************************/
  248. function frmf_initTitle(obj:Form, sTitle){
  249. var sSysteminstnm = sysf_getUserInfo("systeminstnm");
  250. if(!frmf_isPopup()){
  251. var sTitleText = utlf_isNull(sTitle) ? parent.bgv_sTitleText : sTitle;
  252. var sscrnid = frmf_getScreenID();
  253. frmf_setTitle(sTitleText, sscrnid);
  254. }else{
  255. var sPopupTitle = "";
  256. try{
  257. if(utlf_isNull(sTitle)) {
  258. if(utlf_isNull(obj.titletext)){
  259. sPopupTitle += frmplgv_titleName;
  260. }else{
  261. sPopupTitle += obj.titletext;
  262. }
  263. } else {
  264. sPopupTitle += sTitle;
  265. }
  266. //sPopupTitle = sPopupTitle + "("+frmplgv_pid+") - ";
  267. }catch(e){}
  268. if(!utlf_isNull(sSysteminstnm)){
  269. sPopupTitle += " " + "[" + sSysteminstnm + "]";
  270. //sPopupTitle += sSysteminstnm + " ";
  271. }
  272. // var sDutplcenm = sysf_getUserInfo("dutplcenm");
  273. // var sUserName = sysf_getUserName();
  274. // var sLoginDate = sysf_getTitleLoginDate();
  275. // if(!utlf_isNull(sDutplcenm)){
  276. // sPopupTitle += sDutplcenm + " ";
  277. // }
  278. //
  279. // if(!utlf_isNull(sUserName)){
  280. // sPopupTitle += sUserName + " ";
  281. // }
  282. //
  283. // if(!utlf_isNull(sLoginDate)){
  284. // sPopupTitle += sLoginDate + " ";
  285. // }
  286. var systemSymbol = "";//"◇"; // 시스템 구분을 아이콘이 대체 하고 있어서 이건 필요 없어짐 180515. smkim
  287. // var systemcd = sysf_getSystemCd();
  288. //
  289. // if(!utlf_isNull(systemcd)) {
  290. // if (systemcd == "HIS031") {
  291. // systemSymbol = "◇";
  292. // } else if (systemcd == "HIS032") {
  293. // systemSymbol = "◆";
  294. // } else if (systemcd == "MIS030") {
  295. // systemSymbol = "▣";
  296. // } else if (systemcd == "CRM030") {
  297. // systemSymbol = "♣";
  298. // } else {
  299. // systemSymbol = "◇";
  300. // }
  301. // }
  302. sPopupTitle = systemSymbol + " " + sPopupTitle;
  303. this.titletext = sPopupTitle;
  304. try{
  305. stt_titleText.position.width = obj.position.width - 50;
  306. stt_titleText.wordwrap = "none";
  307. stt_titleText.transparenthittest = true;
  308. stt_titleText.text = sPopupTitle;
  309. }catch(e){}
  310. }
  311. }
  312. /*
  313. function frmf_initTitle(obj:Form){
  314. var sSysteminstnm = sysf_getUserInfo("systeminstnm");
  315. if(!frmf_isPopup()){
  316. var sMainTitle = "";
  317. var sTitleText = parent.bgv_sTitleText;
  318. var sTitle = sysf_getSystemInfo("title");
  319. var sDutplcenm = sysf_getUserInfo("dutplcenm");
  320. var sUserName = sysf_getUserName();
  321. var sLoginDate = sysf_getTitleLoginDate();
  322. var sWasName = sysf_getSystemInfo("wasname");
  323. if(!utlf_isNull(sTitleText)){
  324. sMainTitle += sTitleText+"("+frmf_getScreenID()+")"+" - ";
  325. }
  326. if(!utlf_isNull(sSysteminstnm)){
  327. sMainTitle += sSysteminstnm+" ";
  328. }
  329. if(!utlf_isNull(sTitle)){
  330. sMainTitle += sTitle+" ";
  331. }
  332. if(!utlf_isNull(sDutplcenm)){
  333. sMainTitle += sDutplcenm+" ";
  334. }
  335. if(!utlf_isNull(sUserName)){
  336. sMainTitle += sUserName+" ";
  337. }
  338. if(!utlf_isNull(sLoginDate)){
  339. sMainTitle += sLoginDate+" ";
  340. }
  341. if(!utlf_isNull(sLoginDate)){
  342. sMainTitle += sWasName+" ";
  343. }
  344. application.mainframe.titletext = sMainTitle;
  345. }else{
  346. var sPopupTitle = "";
  347. try{
  348. if(utlf_isNull(obj.titletext)){
  349. sPopupTitle += frmplgv_titleName;
  350. }else{
  351. sPopupTitle += obj.titletext;
  352. }
  353. sPopupTitle = sPopupTitle + "("+frmplgv_pid+") - ";
  354. }catch(e){}
  355. if(!utlf_isNull(sSysteminstnm)){
  356. sPopupTitle += sSysteminstnm;
  357. }
  358. this.titletext = sPopupTitle;
  359. try{
  360. stt_titleText.position.width = obj.position.width - 50;
  361. stt_titleText.wordwrap = "none";
  362. stt_titleText.transparenthittest = true;
  363. stt_titleText.text = sPopupTitle;
  364. }catch(e){}
  365. }
  366. }
  367. */
  368. /****************************************************************************************
  369. * Function : frmf_setTitle
  370. * Description : 화면 title을 설정한다.
  371. * Argument : 01.sTitleText - 타이틀제목
  372. * 02.sscrnid - 화면ID
  373. * return type :
  374. * Creator : 손병은
  375. ****************************************************************************************/
  376. function frmf_setTitle(sTitleText, sscrnid){
  377. if("로그아웃" == sTitleText) {
  378. application.mainframe.titletext = "Ku2.0";
  379. return;
  380. }
  381. var sSysteminstnm = sysf_getUserInfo("systeminstnm");
  382. var sMainTitle = "";
  383. var sTitleText = sTitleText;
  384. var sTitle = sysf_getSystemInfo("title");
  385. var sDutplcenm = sysf_getUserInfo("dutplcenm");
  386. var sUserName = sysf_getUserName();
  387. var sLoginDate = sysf_getTitleLoginDate();
  388. var sWasName = sysf_getSystemInfo("wasname");
  389. if(!utlf_isNull(sTitleText)){
  390. var sscrn = "";
  391. if(!utlf_isNull(sscrnid) && sscrnid.indexOf("form") < 0) sscrn = "(" + sscrnid + ")";
  392. sMainTitle += sTitleText + sscrn + " - ";
  393. }
  394. if(!utlf_isNull(sSysteminstnm)){
  395. sMainTitle += "[" + sSysteminstnm + "] ";
  396. }
  397. if(!utlf_isNull(sTitle)){
  398. sMainTitle += sTitle+" ";
  399. }
  400. if(!utlf_isNull(sDutplcenm)){
  401. sMainTitle += sDutplcenm+" ";
  402. }
  403. if(!utlf_isNull(sUserName)){
  404. sMainTitle += sUserName+" ";
  405. }
  406. if(!utlf_isNull(sLoginDate)){
  407. sMainTitle += sLoginDate+" ";
  408. }
  409. // sWasName 은 상태메시지란에 표시하도록 함
  410. // if(!utlf_isNull(sLoginDate)){
  411. // sMainTitle += sWasName+" ";
  412. // }
  413. var systemSymbol = "";//"◇"; // 시스템 구분을 아이콘이 대체 하고 있어서 이건 필요 없어짐 180515. smkim
  414. // var systemcd = sysf_getSystemCd();
  415. //
  416. // // icon, system symbol 설정
  417. // if(!utlf_isNull(systemcd)) {
  418. // if (systemcd == "HIS031") {
  419. // systemSymbol = "◇";
  420. // } else if (systemcd == "HIS032") {
  421. // systemSymbol = "◆";
  422. // } else if (systemcd == "MIS030") {
  423. // systemSymbol = "▣";
  424. // } else if (systemcd == "CRM030") {
  425. // systemSymbol = "♣";
  426. // } else {
  427. // systemSymbol = "◇";
  428. // }
  429. // }
  430. var lastlogininfo = "";
  431. try {
  432. var logindt = gds_lastlogininfo.getColumn(0, "logindt");
  433. if(!utlf_isNull(logindt)) {
  434. lastlogininfo += " * 마지막 접속 정보 : " + logindt.substr(0, 4) + "." + logindt.substr(4, 2) + "." + logindt.substr(6, 2) + " " + logindt.substr(8, 2) + ":" + logindt.substr(10, 2) + ":" + logindt.substr(12, 2);
  435. lastlogininfo += " (IP:" + gds_lastlogininfo.getColumn(0, "logip") + ")";
  436. }
  437. } catch (e) {
  438. }
  439. try {
  440. application.mainframe.titletext = systemSymbol + " " + sMainTitle + lastlogininfo;
  441. } catch (e) {
  442. }
  443. }
  444. /****************************************************************************************
  445. * Function : frmf_deleteUidChild
  446. * Description : uid repository에서 child팝업을 삭제한다.
  447. * Argument : 01.objForm - form
  448. * : 02.sPopupUid - 팝업 uid
  449. * return type :
  450. * Creator : 임준호
  451. ****************************************************************************************/
  452. function frmf_deleteUidChild(objForm:Form, sPopupUid){
  453. if(!utlf_isNull(objForm)){
  454. var arrUidChildTemp = objForm.FRMGV_OBJ_UID_REPOSITORY.uid_child;
  455. objForm.FRMGV_OBJ_UID_REPOSITORY.uid_child = new Array();
  456. for(var i in arrUidChildTemp){
  457. if(arrUidChildTemp[i].uid != sPopupUid){
  458. objForm.FRMGV_OBJ_UID_REPOSITORY.uid_child.push(arrUidChildTemp[i]);
  459. }
  460. }
  461. }
  462. }
  463. //
  464. // function frmf_addUidChild(objForm:Form, sPopupId){
  465. // //opener uid repository
  466. // if(!utlf_isNull(objForm)){
  467. // var arrUidChildTemp = objForm.FRMGV_OBJ_UID_REPOSITORY.uid_child;
  468. // for(var i in arrUidChildTemp){
  469. // if(arrUidChildTemp[i].pid == frmplgv_pid){
  470. // arrUidChildTemp[i].uid = sUidMyself;
  471. // }
  472. // }
  473. // objForm.FRMGV_OBJ_UID_REPOSITORY.uid_child = arrUidChildTemp;
  474. // }
  475. // }
  476. /****************************************************************************************
  477. * Function : frmf_initForm
  478. * Description : form 초기화. form의 onload함수에 반드시 추가한다.
  479. * Argument : 01.obj - form Ojbect
  480. * return type :
  481. * Creator : tobesoft
  482. ****************************************************************************************/
  483. function frmf_initForm(obj:Form, noSetTitle){
  484. //화면 우클릭에 뜰 PopupDiv 만들기
  485. //frmf_createPopupMenu(obj);
  486. //화면 uid 관리
  487. if(sysf_getObjType(obj) == "Form" || obj.name == "div_work"){ //div 또는 tab에 url로 연결된 form의 구분을 위해
  488. var sUidMyself = "";
  489. if(obj.name != "form_top" && obj.name != "form_top_singlemode"){
  490. sUidMyself = utlf_getRandomSubmitUUID();
  491. }else{
  492. sUidMyself = "top";
  493. }
  494. var sUidOpener = frmf_getOpenerUID();
  495. var arrUidChild = new Array();
  496. FRMGV_OBJ_UID_REPOSITORY.uid_myself = sUidMyself;
  497. FRMGV_OBJ_UID_REPOSITORY.uid_opener = sUidOpener;
  498. FRMGV_OBJ_UID_REPOSITORY.uid_child = arrUidChild;
  499. //opener uid repository
  500. if(!utlf_isNull(opener)){
  501. var arrUidChildTemp = null;
  502. if(opener.getOwnerFrame().form.name == "form_work" || opener.getOwnerFrame().form.name == "form_workrec" || opener.getOwnerFrame().form.name == "form_work_singlemode"){
  503. arrUidChildTemp = opener.getOwnerFrame().form.div_work.FRMGV_OBJ_UID_REPOSITORY.uid_child;
  504. }else{
  505. arrUidChildTemp = opener.getOwnerFrame().form.FRMGV_OBJ_UID_REPOSITORY.uid_child;
  506. }
  507. for(var i in arrUidChildTemp){
  508. if(arrUidChildTemp[i].pid == frmplgv_pid){
  509. arrUidChildTemp[i].uid = sUidMyself;
  510. }
  511. }
  512. opener.getOwnerFrame().form.FRMGV_OBJ_UID_REPOSITORY.uid_child = arrUidChildTemp;
  513. }
  514. //타이틀 설정
  515. if(noSetTitle != true)
  516. frmf_initTitle(obj);
  517. //M모드로 열리는 팝업은 상하좌우 margin을 10px씩 준다.
  518. try{
  519. if(frmf_isPopup() && frmplgv_sOpt == "M" && sysf_getObjType(obj) == "Form"){
  520. //화면 스크롤이 생겨서 프레임의 사이즈를 조절함 2014.04.01 tobesoft
  521. var popFrame = this.getOwnerFrame();
  522. popFrame.position.width = obj.position.width+24;
  523. popFrame.position.height = obj.position.height+50;
  524. obj.style.margin = "10px 10px 10px 10px";
  525. }
  526. }catch(e){}
  527. //하단 상태메시지 초기화
  528. try{
  529. agv_objAppBottomPath.form.stt_statusMsg.text = "";
  530. }catch(e){}
  531. }
  532. // AWT 관련 이벤트
  533. if (awtf_AwtUseThisWindow() == '1')
  534. obj.onkeyup.setHandler(awtf_AwtSearch);
  535. // 데이타셋 확인용 모듈
  536. lf_commoduleDataSetShow();
  537. // 1. 확대 축소 기능을 위한 Anchor 초기화(100% 배율 일때만 Anchor 동작, 나머지 배율에선 Anchor를 default 처리)
  538. // 2. 스크린샷 기능을 위한 ScreenShot 초기화
  539. var screenKind = getPopUpOrMain(obj);
  540. if(screenKind == "popup") { // popup(form 으로 시작하는 화면들은 제외)
  541. frmf_initAnchors(obj, false);
  542. //frmf_initScreenShot(obj, false); // 보안정책으로 서비스 종료(2019.07.18 smkim)
  543. lf_preventFullWidthChar();
  544. } else if(screenKind == "main") { // main
  545. frmf_initAnchors(obj, true);
  546. //frmf_initScreenShot(obj, true); // 보안정책으로 서비스 종료(2019.07.18 smkim)
  547. lf_preventFullWidthChar();
  548. } else if(screenKind == "loader") { // 서식 wordwrap 적용
  549. frmf_initWordwrap(obj);
  550. }
  551. // 마우스 우클릭시 공통 팝업 발생 모듈 초기화
  552. frmf_initCommonPopup(obj);
  553. }
  554. function lf_preventFullWidthChar() {
  555. this.onkeydown.addHandler(lf_onPreventFullWidthChar);
  556. }
  557. function lf_onPreventFullWidthChar(obj:Form, e:KeyEventInfo)
  558. {
  559. if (e.altKey && e.keycode == keycode_equal) {
  560. var screenName = utlf_isNull(obj.name) ? "" : "[" + obj.name + "] ";
  561. sysf_trace("================== " + screenName + "전각 반각 상태 변경 ============================");
  562. return true;
  563. }
  564. }
  565. function getPopUpOrMain(obj) {
  566. var result = "";
  567. if(obj.parent == "[object ChildFrame]" && (obj.name.indexOf("form_") < 0)) { // popup(form 으로 시작하는 화면들은 제외)
  568. result = "popup";
  569. } else if(obj.frmf_getCurrentFormKind() == "main" && obj.name == "div_work") { // main
  570. result = "main";
  571. } else if( ((obj.parent == "[object Form]" || obj.parent == "[object Div]" ) && obj.name == "ivw_base") ){
  572. // object Form : 서식로더가 popup 일 경우, object Div : 진료기록메인, 제증명, Consult 화면 등 적용
  573. result = "loader";
  574. }
  575. return result;
  576. }
  577. // ----------------- 여기서 부터 앵커 적용 로직
  578. var arrAnchors;
  579. function frmf_initAnchors(obj, isMain) {
  580. arrAnchors = new Array();
  581. frmf_getAnchors(obj, 0);
  582. var zoomrate = agv_objAppBottomPath.form.fGetZoomRate();
  583. if(zoomrate != 100 && zoomrate != "100%") {
  584. frmf_RemoveAnchors();
  585. obj.setZoom(zoomrate);
  586. obj.vscrollbar.pos = 0;
  587. obj.hscrollbar.pos = 0;
  588. obj.resetScroll();
  589. }
  590. if(isMain) {
  591. obj.onmousewheel.addHandler(fMain_Zoom_onmousewheel);
  592. obj.onkeydown.addHandler(fMain_Zoom_onkeydown);
  593. } else {
  594. obj.parent.form.onmousewheel.addHandler(fPopup_Zoom_onmousewheel);
  595. obj.parent.form.onkeydown.addHandler(fPopup_Zoom_onkeydown);
  596. }
  597. }
  598. function frmf_getAnchors(obj, seq)
  599. {
  600. var sType;
  601. for(var i = 0 ; i < obj.components.length; i++ )
  602. {
  603. sType = obj.components[i].toString().toUpperCase();
  604. switch(sType) {
  605. case "[OBJECT POPUPDIV]":
  606. case "[OBJECT MENU]":
  607. case "[OBJECT POPUPMENU]":
  608. continue;
  609. break;
  610. default:
  611. var strAnchor = obj.components[i].anchor;
  612. if(strAnchor == "default" || utlf_isNull(strAnchor)) continue;
  613. break;
  614. }
  615. if(!utlf_isNull(obj.components[i].anchor)) {
  616. arrAnchors[seq] = new Array(2);
  617. arrAnchors[seq][0] = obj.components[i];
  618. arrAnchors[seq][1] = obj.components[i].anchor.toString();
  619. ++seq;
  620. }
  621. if (obj.components[i].components)
  622. {
  623. switch(sType) {
  624. case "[OBJECT TAB]":
  625. case "[OBJECT TABPAGE]":
  626. case "[OBJECT DIV]":
  627. if(utlf_isNull(obj.components[i].url) == true) seq = frmf_getAnchors(obj.components[i], seq);
  628. break;
  629. }
  630. }
  631. }
  632. return seq;
  633. }
  634. // 동적으로 앵커 필요한 Component 추가시 이 함수 호출 필요
  635. function frmf_addArrAnchor(component) {
  636. var seq = arrAnchors.length;
  637. arrAnchors[seq] = new Array(2);
  638. arrAnchors[seq][0] = component;
  639. arrAnchors[seq][1] = component.anchor.toString();
  640. }
  641. function frmf_RemoveAnchors()
  642. {
  643. for(var i = 0; i < arrAnchors.length; i++) {
  644. arrAnchors[i][0].anchor = "default";
  645. }
  646. }
  647. function frmf_RestoreAnchors()
  648. {
  649. for(var i = 0; i < arrAnchors.length; i++) {
  650. arrAnchors[i][0].anchor = arrAnchors[i][1];
  651. }
  652. }
  653. var STEPVAL = 5; // 마우스 휠 한번 돌릴때 마다 증감하는 확대 축소 배율
  654. var isZoomEnable = true; // 마우스 스크롤로 확대/축소 사용 할 여부 (frmf_setZoomEnable(false) 하면 확대축소 기능 끔)
  655. function frmf_setZoom(obj, zoomrate, isMain) {
  656. if(zoomrate == 100) frmf_RestoreAnchors();
  657. else frmf_RemoveAnchors();
  658. obj.setZoom(zoomrate);
  659. if(isMain) agv_objAppBottomPath.form.fSetZoomRateValue(zoomrate);
  660. }
  661. function fSetZoom(obj, amount, isMain) {
  662. var zoomrate = obj.getZoom();
  663. if(amount < 0)
  664. zoomrate -= STEPVAL;
  665. else
  666. zoomrate += STEPVAL;
  667. if(zoomrate < 10)
  668. zoomrate = 10;
  669. else if(zoomrate > 1000)
  670. zoomrate = 1000;
  671. frmf_setZoom(obj, zoomrate, isMain);
  672. }
  673. function frmf_setZoomEnable(enable) {
  674. isZoomEnable = enable
  675. }
  676. function fPopup_Zoom_onmousewheel(obj:Form, e:MouseWheelEventInfo)
  677. {
  678. if(!isZoomEnable) return;
  679. if( getKeyState(0x11)){
  680. fSetZoom(obj, e.amount);
  681. return true;
  682. }
  683. }
  684. function fPopup_Zoom_onkeydown(obj:Form, e:KeyEventInfo) {
  685. if( e.ctrlKey ){
  686. if(e.keycode == keycode_plus || e.keycode == keycode_equal) { // 숫자패드 '+' 키 누를 때 또는 '=' 누를 때
  687. fSetZoom(obj, 120);
  688. return true;
  689. } else if(e.keycode == keycode_minus_1 || e.keycode == keycode_minus_2) { // '-' 키 누를 때
  690. fSetZoom(obj, -120);
  691. return true;
  692. } else if(e.keycode == keycode_zero) { // '0' 누를 때
  693. frmf_RestoreAnchors();
  694. frmf_setZoom(obj, 100);
  695. return true;
  696. }
  697. }
  698. }
  699. function fMain_Zoom_onmousewheel(obj:Div, e:MouseWheelEventInfo) {
  700. if( e.ctrlKey ) {
  701. fSetZoom(obj, e.amount, true);
  702. return true;
  703. }
  704. }
  705. function fMain_Zoom_onkeydown(obj:Div, e:KeyEventInfo) {
  706. if( e.ctrlKey ){
  707. if(e.keycode == keycode_plus || e.keycode == keycode_equal) { // 숫자패드 '+' 누를 때 또는 '=' 누를 때
  708. fSetZoom(obj, 120, true);
  709. return true;
  710. } else if(e.keycode == keycode_minus_1 || e.keycode == keycode_minus_2) { // '-' 누를 때
  711. fSetZoom(obj, -120, true);
  712. return true;
  713. } else if(e.keycode == keycode_zero) { // '0' 누를 때
  714. frmf_RestoreAnchors();
  715. frmf_setZoom(obj, 100, true);
  716. return true;
  717. }
  718. }
  719. }
  720. // ----------------- 여기까지 부터 앵커 적용 로직
  721. // ----------------- 여기서 부터 캡쳐 적용 로직
  722. var isCaptureMode = false; // 캡쳐모드인지 구분
  723. var isCaptureMainWindow = false; // 캡쳐 창이 메인 창인지 팝업 창인지 구분
  724. var captureScreenRect:ImageViewer; // 캡쳐를 구역 표시를 위한 배경
  725. var captureRect:ImageViewer; // 실제 캡쳐 되는 영역
  726. var captureStartPos = new Array(); // 캡쳐 시작 기준 좌표
  727. function frmf_initScreenShot(obj, isMain) {
  728. isCaptureMainWindow = isMain;
  729. obj.onkeydown.addHandler(screenShot_onkeydown);
  730. }
  731. function screenShot_onkeydown(obj:Form, e:KeyEventInfo)
  732. {
  733. if(e.keycode == keycode_F12) { // 'F12'
  734. toggleCaptureMode(obj, !isCaptureMode);
  735. return true;
  736. } else if(e.keycode == keycode_ESC) { // 'ESC'
  737. if(isCaptureMode) {
  738. toggleCaptureMode(obj, false);
  739. return true;
  740. }
  741. }
  742. }
  743. function toggleCaptureMode(obj, enable) {
  744. isCaptureMode = enable;
  745. if(enable) {
  746. obj.onlbuttondown.addHandler(screenShot_onlbuttondown);
  747. obj.onlbuttonup.addHandler(screenShot_onlbuttonup);
  748. obj.onmousemove.addHandler(screenShot_onmousemove);
  749. var titlebarheight = (!isCaptureMainWindow && obj.parent.showtitlebar) ? 24 : 0;
  750. var adjustPositionLeft = 0;
  751. var adjustPositionTop = 0;
  752. var adjustTop = titlebarheight + 14;
  753. var adjustRight = -8;
  754. var adjustBottom = -8;
  755. var adjustLeft = 12;
  756. if(isCaptureMainWindow) {
  757. adjustPositionLeft = 10;
  758. adjustPositionTop = 10;
  759. adjustTop = 10;
  760. adjustRight = 18;
  761. adjustBottom = 0;
  762. adjustLeft = 10;
  763. } else {
  764. try {
  765. if(frmplgv_sOpt != "M") {
  766. adjustTop = 0;
  767. adjustRight = 0;
  768. adjustBottom = 0;
  769. adjustLeft = 0;
  770. }
  771. } catch(e) {
  772. }
  773. }
  774. if(obj.components["iv_capture_screen"] == null) {
  775. captureScreenRect = new ImageViewer("iv_capture_screen", obj.position.left - adjustPositionLeft, obj.position.top - adjustPositionTop, obj.position.right, obj.position.bottom);
  776. obj.addChild("iv_capture_screen", captureScreenRect);
  777. } else {
  778. captureScreenRect.position.left = obj.position.left - adjustPositionLeft;
  779. captureScreenRect.position.top = obj.position.top - adjustPositionTop;
  780. captureScreenRect.position.right = obj.position.right;
  781. captureScreenRect.position.bottom = obj.position.bottom;
  782. captureScreenRect.visible = true;
  783. }
  784. captureScreenRect.style.background = "transparent";
  785. captureScreenRect.style.border = "0 solid #000000";
  786. captureScreenRect.style.cursor = "crosshair";
  787. captureScreenRect.image = "";
  788. captureScreenRect.image = obj.parent.saveToImageObject();
  789. captureScreenRect.style.padding = adjustTop * -1 + " " + adjustRight * -1 + " " + adjustBottom * -1 + " " + adjustLeft * -1;
  790. captureScreenRect.show();
  791. captureScreenRect.bringToFront();
  792. // 통합기록은 예외 처리(해당 컴포넌트가 외부 모듈로써 캡쳐 영역이 제일 위로 안올라오는 현상 때문에 잠시 안보이도록 처리한다)
  793. if(obj.name == "SMMRI00400") {
  794. var popupObj = frmf_findPopup("SMMRI00400");
  795. popupObj.grup_right.iviewerIemr.visible = false;
  796. }
  797. } else {
  798. obj.onlbuttondown.removeHandler(screenShot_onlbuttondown);
  799. obj.onlbuttonup.removeHandler(screenShot_onlbuttonup);
  800. obj.onmousemove.removeHandler(screenShot_onmousemove);
  801. captureScreenRect.style.cursor = "";
  802. // 통합기록은 예외 처리(해당 컴포넌트가 외부 모듈로써 캡쳐 영역이 제일 위로 안올라오는 현상 때문에 잠시 안보이도록 처리한다)
  803. if(obj.name == "SMMRI00400") {
  804. var popupObj = frmf_findPopup("SMMRI00400");
  805. popupObj.grup_right.iviewerIemr.visible = true;
  806. }
  807. captureScreenRect.visible = false;
  808. // var objDelete1 = this.removeChild("iv_capture_screen");
  809. // if(objDelete1 != null) {
  810. // captureScreenRect.destroy();
  811. // captureScreenRect = null;
  812. //
  813. // objDelete1.destroy();
  814. // objDelete1 = null;
  815. // }
  816. //
  817. var objDelete2 = obj.removeChild("iv_capture");
  818. if(objDelete2 != null) {
  819. captureRect.destroy();
  820. captureRect = null;
  821. objDelete2.destroy();
  822. objDelete2 = null;
  823. }
  824. }
  825. }
  826. function screenShot_onlbuttondown(obj:Form, e:MouseEventInfo)
  827. {
  828. if(!isCaptureMode) return;
  829. captureStartPos[0] = e.canvasX;
  830. captureStartPos[1] = e.canvasY;
  831. if(obj.components["iv_capture"] == null) {
  832. captureRect = new ImageViewer("iv_capture", e.canvasX, e.canvasY, e.canvasX, e.canvasY);
  833. obj.addChild("iv_capture", captureRect);
  834. }
  835. captureRect.style.background = "transparent";
  836. captureRect.style.bordertype = "normal 0 0";
  837. captureRect.style.border = "1 solid #ff0000";
  838. captureRect.show();
  839. captureRect.bringToFront();
  840. }
  841. function screenShot_onlbuttonup(obj:Form, e:MouseEventInfo)
  842. {
  843. if(!isCaptureMode) return;
  844. if(utlf_isNull(captureRect)) return;
  845. obj.onlbuttondown.removeHandler(screenShot_onlbuttondown);
  846. obj.onlbuttonup.removeHandler(screenShot_onlbuttonup);
  847. obj.onmousemove.removeHandler(screenShot_onmousemove);
  848. isCaptureMode = false;
  849. captureRect.style.border = "0 none #ff0000";
  850. captureRect.image = captureScreenRect.saveToImageObject();
  851. var top = captureRect.position.top;
  852. var right = captureScreenRect.position.right - captureRect.position.right;
  853. var bottom = captureScreenRect.position.bottom - captureRect.position.bottom;
  854. var left = captureRect.position.left;
  855. captureRect.style.padding = top * -1 + " " + right * -1 + " " + bottom * -1 + " " + left * -1;
  856. var to_day = new Date();
  857. var strToday = to_day.getFullYear() + "";
  858. strToday += utlf_right("0" + (to_day.getMonth() + 1), 2);
  859. strToday += utlf_right("0" + to_day.getDate(), 2);
  860. strToday += utlf_right("0" + to_day.getHours(), 2);
  861. strToday += utlf_right("0" + to_day.getMinutes(), 2);
  862. strToday += utlf_right("0" + to_day.getSeconds(), 2);
  863. var fileName = "screenshot" + "_" + strToday;
  864. //fileName = "quick_capture";
  865. var bSucc = captureRect.saveToImage(fileName + ".png", "PNG");
  866. captureScreenRect.style.cursor = "";
  867. if(obj.name == "SMMRI00400") {
  868. var popupObj = frmf_findPopup("SMMRI00400");
  869. popupObj.grup_right.iviewerIemr.visible = true;
  870. }
  871. captureScreenRect.visible = false;
  872. // var objDelete1 = this.removeChild("iv_capture_screen");
  873. // if(objDelete1 != null) {
  874. // captureScreenRect.destroy();
  875. // captureScreenRect = null;
  876. //
  877. // objDelete1.destroy();
  878. // objDelete1 = null;
  879. // }
  880. //
  881. var objDelete2 = this.removeChild("iv_capture");
  882. if(objDelete2 != null) {
  883. captureRect.destroy();
  884. captureRect = null;
  885. objDelete2.destroy();
  886. objDelete2 = null;
  887. }
  888. moveFileToDeskTop(fileName + ".png");
  889. }
  890. function moveFileToDeskTop(fileName) {
  891. var objExtCommon = new ExtCommon();
  892. var userHomeDir = system.convertRealPath("%MYDOCUMENT%");
  893. var preFilePath = userHomeDir + fileName;
  894. var desktopPath = userHomeDir.replace("Documents", "Desktop");
  895. var newFilePath = desktopPath + fileName;
  896. if(objExtCommon.IsFileExist(newFilePath)) objExtCommon.DeleteFile(newFilePath);
  897. objExtCommon.MoveFile(preFilePath, newFilePath, false);
  898. }
  899. function screenShot_onmousemove(obj:Form, e:MouseEventInfo)
  900. {
  901. if(!isCaptureMode) return;
  902. if(obj.components["iv_capture"] == null) return;
  903. var adjustTop = 0;
  904. var adjustRight = 20;
  905. var adjustBottom = 20;
  906. var adjustLeft = 0;
  907. if(isCaptureMainWindow) {
  908. adjustTop = -10;
  909. adjustRight = 18;
  910. adjustBottom = 10;
  911. adjustLeft = -10;
  912. } else {
  913. try {
  914. if(frmplgv_sOpt != "M") {
  915. adjustTop = 36;
  916. adjustRight = 2;
  917. adjustBottom = 2;
  918. adjustLeft = 2;
  919. }
  920. } catch(e) {
  921. }
  922. }
  923. if(captureStartPos[0] < e.canvasX) {
  924. var right = e.canvasX;
  925. if (right > obj.position.right - adjustRight) right = obj.position.right - adjustRight;
  926. captureRect.position.right = right;
  927. } else {
  928. var left = e.canvasX;
  929. if (left < obj.position.left + adjustLeft) left = obj.position.left + adjustLeft;
  930. captureRect.position.left = left;
  931. }
  932. if(captureStartPos[1] < e.canvasY) {
  933. var bottom = e.canvasY;
  934. if (bottom > obj.position.bottom - adjustBottom) bottom = obj.position.bottom - adjustBottom;
  935. captureRect.position.bottom = bottom;
  936. } else {
  937. var top = e.canvasY;
  938. if (top < obj.position.top + adjustTop) top = obj.position.top + adjustTop;
  939. captureRect.position.top = top;
  940. }
  941. }
  942. // ----------------- 여기까지 부터 캡쳐 적용 로직
  943. // ----------------- 여기부터 Wordwrap 적용 로직
  944. function frmf_initWordwrap(obj){
  945. frmf_setWordwrap(obj, 0);
  946. }
  947. function frmf_setWordwrap(obj, seq)
  948. {
  949. var sType;
  950. var bAnchor = false;
  951. if( obj instanceof Form ){
  952. if( obj.name == "ivw_base" ){
  953. // 2018.01.05 서식로더 사이즈에 따른 앵커제외처리
  954. if( obj.position.height < 680 ){
  955. bAnchor = true;
  956. }
  957. }
  958. }
  959. for(var i = 0 ; i < obj.components.length; i++ )
  960. {
  961. sType = obj.components[i].toString().toUpperCase();
  962. switch(sType) {
  963. case "[OBJECT STATIC]":
  964. var strWordwrap = obj.components[i].wordwrap;
  965. if(!utlf_isNull(strWordwrap) && strWordwrap != "none") continue;
  966. obj.components[i].wordwrap = "both";
  967. var strText = obj.components[i].text;
  968. if(!utlf_isNull(strText)){
  969. var sIdx = strText.lastIndexOf("\n");
  970. if( sIdx != -1 && sIdx == parseInt(strText.length) -1 ){
  971. // 줄바꿈 한번 더 체크
  972. var sIdx2 = strText.lastIndexOf("\n", parseInt(sIdx) -1);
  973. if( sIdx2 != -1 && sIdx2 == parseInt(strText.length) -2 ){
  974. strText = strText.substr(0, sIdx2);
  975. }else{
  976. strText = strText.substr(0, sIdx);
  977. }
  978. obj.components[i].text = strText;
  979. }
  980. }
  981. break;
  982. case "[OBJECT TEXTAREA]":
  983. obj.components[i].wordwrap = "both";
  984. var strPadding = obj.components[i].padding;
  985. if( !utlf_isNull(strPadding) && strPadding == "0 0 0 0" ){
  986. obj.components[i].padding = "0 5 0 5";
  987. }
  988. break;
  989. case "[OBJECT CALENDAR]":
  990. case "[OBJECT MASKEDIT]":
  991. obj.components[i].onlbuttonup.addHandler(frmf_setCaretPos);
  992. var strUserMask = obj.components[i].userMask;
  993. if( !utlf_isNull(strUserMask) && strUserMask == "include" ){
  994. var strMask = obj.components[i].mask;
  995. var strType = obj.components[i].type;
  996. if( !utlf_isNull(strMask) && strMask.indexOf("#.#") > -1
  997. && !utlf_isNull(strType) && strType == "string" ){
  998. obj.components[i].type = "number";
  999. }
  1000. // 제증명 사망/사산/사태증명서
  1001. if( !utlf_isNull(strMask) && strMask == "####'년' ##'월' ##'일' ##'시' ##'분'"
  1002. && !utlf_isNull(strType) && strType == "string"){
  1003. obj.components[i].mask = "####'년' ##'월' ##'일' ##'시' ##'분'";
  1004. obj.components[i].clipmode = "excludespace";
  1005. }
  1006. if( obj.components[i].name == "STX_40"
  1007. && !utlf_isNull(strMask) && strMask == "####-##-## ##:##"
  1008. && !utlf_isNull(strType) && strType == "string"){
  1009. obj.components[i].ontextchange.addHandler(utlf_validMaskEditDateTime);
  1010. obj.components[i].clipmode = "excludespace";
  1011. }
  1012. }
  1013. break;
  1014. case "[OBJECT TABPAGE]":
  1015. case "[OBJECT DIV]":
  1016. if( obj.components[i].name == "grup_base" ){
  1017. var nMoniterIndex = system.getMonitorIndex(application.mainframe.position.left, application.mainframe.position.top);
  1018. var objScreenInfo = system.getScreenRect(nMoniterIndex);
  1019. var nScreenTop = objScreenInfo.top;
  1020. var nScreenBottom = objScreenInfo.bottom;
  1021. var nScreenHeight = nScreenBottom - nScreenTop;
  1022. // 2017.09.05 사용자 해상도에 따른 앵커제외처리
  1023. if( nScreenHeight < 960 || bAnchor == true){
  1024. obj.components[i].anchor = "";
  1025. }
  1026. }
  1027. break;
  1028. case "[OBJECT BUTTON]":
  1029. if( !utlf_isNull(obj.components[i].class)
  1030. && (obj.components[i].class == "btn2" || obj.components[i].class == "icon_top")
  1031. && !utlf_isNull(obj.components[i].name) && obj.components[i].name.indexOf("EXT") > -1 ){
  1032. if( !utlf_isNull(obj.components[i].align) && obj.components[i].align == "left middle" )
  1033. obj.components[i].align = "";
  1034. if( !utlf_isNull(obj.components[i].background)
  1035. && (obj.components[i].background == "transparent stretch 0.gif" || obj.components[i].background == "transparent") )
  1036. obj.components[i].background = "";
  1037. if( !utlf_isNull(obj.components[i].border) && obj.components[i].border == "1 none #808080 " )
  1038. obj.components[i].border = "";
  1039. if( !utlf_isNull(obj.components[i].color) && obj.components[i].color == "#184d8bff" )
  1040. obj.components[i].color = "";
  1041. if( !utlf_isNull(obj.components[i].font) && obj.components[i].font == "돋움,8,normal" )
  1042. obj.components[i].font = "";
  1043. if( !utlf_isNull(obj.components[i].padding) && obj.components[i].padding == "1 13 1 13" )
  1044. obj.components[i].padding = "";
  1045. }
  1046. break;
  1047. /*
  1048. // 1.0 스타일로 점선 표시(보류)
  1049. case "[OBJECT RADIO]":
  1050. obj.components[i].style = ":focused {border:1 dotted #808080ff ;}";
  1051. break;
  1052. case "[OBJECT CHECKBOX]":
  1053. obj.components[i].focusborder = "1 dotted #808080ff";
  1054. break;
  1055. */
  1056. // 1.0 Combo 필수입력 설정 후 2.0 전환 시 디자인 틀어짐
  1057. case "[OBJECT COMBO]":
  1058. if( !utlf_isNull(obj.components[i].class)
  1059. && obj.components[i].class == "combo_essential"
  1060. ){
  1061. if( !utlf_isNull(obj.components[i].align) && obj.components[i].align == "left middle" )
  1062. obj.components[i].align = "";
  1063. if( !utlf_isNull(obj.components[i].background)
  1064. && obj.components[i].background == "#ffffffff" )
  1065. obj.components[i].background = "";
  1066. if( !utlf_isNull(obj.components[i].border) && (obj.components[i].border == "1 solid #333333ff " || obj.components[i].border == "1 solid #c0c0c0ff ") )
  1067. obj.components[i].border = "";
  1068. }
  1069. break;
  1070. /*
  1071. case "[OBJECT RADIO]":
  1072. if( !utlf_isNull(obj.components[i].background) && obj.components[i].background == "transparent"){
  1073. obj.components[i].background = "";
  1074. }
  1075. break;
  1076. case "[OBJECT GRID]":
  1077. if( !utlf_isNull(obj.components[i].gridtype) && obj.components[i].gridtype == "Y" ){
  1078. trace(obj.components[i].name);
  1079. if( obj.components[i].autosizingtype == "none" ){
  1080. obj.components[i].autosizingtype = "row";
  1081. obj.components[i].extendsizetype = "row";
  1082. obj.components[i].setCellProperty( "body", 0, "autosizerow", "limitmin");
  1083. }
  1084. //if( obj.components[i].extendsizetype == "none" )
  1085. }
  1086. break;
  1087. */
  1088. default:
  1089. continue;
  1090. break;
  1091. }
  1092. ++seq;
  1093. if (obj.components[i].components)
  1094. {
  1095. switch(sType) {
  1096. case "[OBJECT TABPAGE]":
  1097. case "[OBJECT DIV]":
  1098. if(utlf_isNull(obj.components[i].url) == true) seq = frmf_setWordwrap(obj.components[i], seq);
  1099. break;
  1100. }
  1101. }
  1102. }
  1103. return seq;
  1104. }
  1105. function frmf_setCaretPos(obj){
  1106. if(utlf_isNull(obj.value))
  1107. {
  1108. obj.setCaretPos(0);
  1109. }
  1110. }
  1111. // ----------------- 여기까지 Wordwrap 적용 로직
  1112. // ----------------- 여기부터 공통 팝업(마우스 우클릭) 적용 로직
  1113. function frmf_initCommonPopup(obj) {
  1114. if(!gv_isCommonPopup && (sysf_isQuickView() || gv_bIsPreview)){
  1115. return;
  1116. }
  1117. // 하위 div나 tab에 속해 있는 화면들은 제외
  1118. var sType = obj.parent.toString().toUpperCase();
  1119. if(sType == "[OBJECT CHILDFRAME]" || (sType == "[OBJECT FORM]" && obj.name == "div_work")) {
  1120. var objPopupMenu = new PopupMenu("commonPopupMenu", 10, 10, 100, 100);
  1121. objPopupMenu.captioncolumn = "name";
  1122. objPopupMenu.idcolumn = "func";
  1123. objPopupMenu.levelcolumn = "level";
  1124. objPopupMenu.enablecolumn = "enable";
  1125. objPopupMenu.hotkeycolumn = "hotkey";
  1126. objPopupMenu.innerdataset = "gds_commonPopup";
  1127. objPopupMenu.onmenuclick.addHandler(commonPopupMenu_onmenuclick);
  1128. obj.addChild("commonPopupMenu", objPopupMenu);
  1129. obj.onkeydown.addHandler(commonpopup_onkeydown);
  1130. obj.onrbuttondown.addHandler(commonpopup_onrbuttondown);
  1131. objPopupMenu.show();
  1132. }
  1133. }
  1134. function commonpopup_onkeydown(obj:Form, e:KeyEventInfo) {
  1135. if( e.ctrlKey ){
  1136. if(e.keycode == keycode_F5) { // 'F5'
  1137. frmf_CommonReload();
  1138. return true;
  1139. } else if(e.keycode == keycode_F7) {
  1140. return true;
  1141. } else if(e.keycode == keycode_F9) { // 'F9'
  1142. commonLog();
  1143. return true;
  1144. } else if(e.keycode == keycode_F10) { // 'F10'
  1145. commonProperty(e.fromobject);
  1146. return true;
  1147. }
  1148. }
  1149. }
  1150. function commonpopup_onrbuttondown(obj:Form, e:MouseEventInfo)
  1151. {
  1152. var sType;
  1153. if(commonPopupMenu.isPopup()) {
  1154. commonPopupMenu.closePopup();
  1155. return;
  1156. }
  1157. switch(e.fromobject) {
  1158. case "[object Grid]" : // 일단 그리드에서는 동작 안하도록 처리함
  1159. if(e.fromobject.getEditText() != undefined) // 편집 상태일 때는 안뜨도록(기본 팝업창 발생)
  1160. break;
  1161. if(e.fromobject.rowcount > 0)
  1162. break;
  1163. if(e.fromobject.selecttype == "multiarea")
  1164. break;
  1165. case "[object Form]" :
  1166. case "[object Div]" :
  1167. case "[object Tabpage]" :
  1168. case "[object Static]" :
  1169. // 상단과 하단 영역은 Reload 기능 disable
  1170. if(obj.name == "form_top" || obj.name == "form_bottom") {
  1171. gds_commonPopup.setColumn(0, "enable", false);
  1172. } else {
  1173. gds_commonPopup.setColumn(0, "enable", true);
  1174. }
  1175. commonPopupMenu.userdata = e.fromobject;
  1176. var nX = system.clientToScreenX(obj, e.clientX);
  1177. var nY = system.clientToScreenY(obj, e.clientY);
  1178. commonPopupMenu.trackPopup(nX, nY, "", false);
  1179. break;
  1180. }
  1181. }
  1182. function commonPopupMenu_onmenuclick(obj:PopupMenu, e:MenuClickEventInfo)
  1183. {
  1184. obj.closePopup();
  1185. eval(e.id + "(e.fromobject.userdata)");
  1186. }
  1187. function frmf_CommonReload() {
  1188. // 메인창은 Reload 시 TF Viewer가 나와버리므로 별도로 처리한다.
  1189. if(this.name == "form_work") {
  1190. var objScreenInfo = application.mainframe.VFrameSet.FrameSet.ChildFrameWork.form.bgv_objScreenInfo;
  1191. frmf_openForm(objScreenInfo.scrnid, objScreenInfo, agv_objMainFormParam);
  1192. } else {
  1193. reload();
  1194. }
  1195. }
  1196. function commonLog() {
  1197. var extObj = new ExtCommon();
  1198. var localpath = system.convertRealPath("%XPLATFORM%");
  1199. var filename = "XPLATFORM_" + removeSpChar(application.xadl) + "_" + utlf_getCurrentDate() + ".log";
  1200. var path = localpath + filename;
  1201. var objActiveX = new ActiveX();
  1202. var FSO = objActiveX.createObject("Scripting.FileSystemObject");
  1203. // 객체 생성 실패하면 리턴
  1204. if (FSO == null) return;
  1205. // 시스템 드라이브가 없다면..
  1206. if (FSO.DriveExists("C") == false) return;
  1207. // 오늘 날짜로 된 로그 파일이 없으면 마지막으로 로그인한 날짜 로그 파일 오픈
  1208. if (FSO.FileExists(path) == false) {
  1209. filename = "XPLATFORM_" + removeSpChar(application.xadl) + "_" + sysf_getTitleLoginDate(true) + ".log";
  1210. path = localpath + filename;
  1211. }
  1212. extObj.executeProcess(path, "", "");
  1213. }
  1214. function removeSpChar(str) {
  1215. var specialChars = /[\/~!#$^&*=+|:;?"<,.>']/;
  1216. var retVal = str.split(specialChars).join("");
  1217. return retVal.replace("8443", "443");
  1218. }
  1219. function commonProperty(obj) {
  1220. var currentObj = obj;
  1221. var currentFile = getFormFileNameFromObject(currentObj);
  1222. var objArg = new Object();
  1223. objArg._form_title = currentFile[0];
  1224. objArg._form_pkgname = currentFile[1];
  1225. objArg._form_filename = currentFile[2];
  1226. frmf_modalInternal("form_property", "com_hismainxp::form_property.xfdl", objArg, false, null, null, null, 380, 284, null, null, null, "M");
  1227. }
  1228. function getFormFileNameFromObject(currentObj){
  1229. var ret = ["", ""];
  1230. var obj = currentObj;
  1231. // while 보다 for 문으로 처리함 10depth 까지 들어갈 일은 없다고 판단.
  1232. for(var i = 0; i < 10; i++) {
  1233. if(utlf_isNull(obj)) break;
  1234. if(obj == "[object Tabpage]" || obj == "[object Div]") {
  1235. var url = obj.url;
  1236. if(!utlf_isNull(url)) {
  1237. ret[1] = url.split("::")[0];
  1238. var filename = url.split("::")[1];
  1239. if(gv_bIsPreview || utlf_isNull(obj.parent.bgv_sTitleText)) {
  1240. ret[0] = frmf_getBizNameByUrl(ret[1] + "::" + filename);
  1241. ret[2] = filename;
  1242. } else {
  1243. ret[0] = obj.parent.bgv_sTitleText;
  1244. ret[2] = filename.split(".")[0] + "_" + obj.parent.bgv_sTitleText + "." + filename.split(".")[1];
  1245. }
  1246. break;
  1247. }
  1248. } else if(obj == "[object Form]" || obj == "[object ChildFrame]"){
  1249. var url = this.getOwnerFrame().formurl;
  1250. ret[1] = url.split("::")[0];
  1251. var filename = url.split("::")[1];
  1252. if(gv_bIsPreview || utlf_isNull(frmplgv_titleName)) {
  1253. ret[0] = frmf_getBizNameByUrl(ret[1] + "::" + filename);
  1254. ret[2] = filename;
  1255. } else {
  1256. ret[0] = frmplgv_titleName;
  1257. ret[2] = filename.split(".")[0] + "_" + frmplgv_titleName + "." + filename.split(".")[1];
  1258. }
  1259. break;
  1260. }
  1261. obj = obj.parent;
  1262. }
  1263. return ret;
  1264. }
  1265. var xmlHttp = null;
  1266. function frmf_findTitleTextFromForm(sUrl){
  1267. if(gv_bIsPreview) {
  1268. var doc = new DomDocument();
  1269. doc.url = sUrl;
  1270. var rtn = doc.load(false);
  1271. if(!utlf_isNull(doc.documentElement)){
  1272. return doc.documentElement.getElementsByTagName("Form")[0].getAttribute("titletext");
  1273. }else{
  1274. return "";
  1275. }
  1276. } else {
  1277. var tempUrl = sUrl.split("::");
  1278. var comp = tempUrl[0].split("_");
  1279. sUrl = sysf_getURLprefix() + "/xpapps/" + comp[0] + "/" + comp[1] + "/xp/" + tempUrl[1];
  1280. if (xmlHttp == null) {
  1281. var objActiveX = new ActiveX("xmlHttp", 0, 0, 0, 0);
  1282. xmlHttp = objActiveX.createObject("Microsoft.XMLHTTP");
  1283. this.addChild("xmlHttp1", xmlHttp);
  1284. }
  1285. xmlHttp.open("POST", sUrl, false);
  1286. xmlHttp.Send();
  1287. xslfile = xmlHttp.responseText;
  1288. //trace("xslfile : " + xslfile);
  1289. var domPar = new DomParser;
  1290. domDoc = domPar.parseFromString(xslfile);
  1291. //trace("domDoc : " + domDoc);
  1292. // Node값 보기
  1293. var domElement = domDoc.getElementsByTagName("Form");
  1294. //trace("text : " + domElement.get_item(0).getAttribute("titletext"));
  1295. var text = domElement.get_item(0).getAttribute("titletext");
  1296. if(text == "File Not Found") text = "";
  1297. return text;
  1298. }
  1299. }
  1300. // 런처 자체 기능으로 동작
  1301. function commonViewSource(obj) {
  1302. }
  1303. // ----------------- 여기까지 공통 팝업(마우스 우클릭) 적용 로직
  1304. /****************************************************************************************
  1305. * Function : frmf_getChildUID
  1306. * Description : child 윈도우의 UID 정보
  1307. * Argument : 01.sPid : child 팝업의 popup id
  1308. * return type : String - sId로 생성된 팝업의 uid
  1309. * Creator : 임준호
  1310. ****************************************************************************************/
  1311. function frmf_getChildUID(sPid){
  1312. var sUidChild = "";
  1313. var arrChild = FRMGV_OBJ_UID_REPOSITORY.uid_child;
  1314. for(var i in arrChild){
  1315. if(arrChild[i].pid == sPid){
  1316. sUidChild = arrChild[i].uid;
  1317. break;
  1318. }
  1319. }
  1320. return sUidChild;
  1321. }
  1322. /****************************************************************************************
  1323. * Function : frmf_getChildPID
  1324. * Description : child 윈도우의 PID 정보
  1325. * Argument : 01.sUid : child 팝업의 uid
  1326. * return type : String - 팝업의 pid
  1327. * Creator : 임준호
  1328. ****************************************************************************************/
  1329. function frmf_getChildPID(sUid){
  1330. var sPidChild = "";
  1331. var arrChild = FRMGV_OBJ_UID_REPOSITORY.uid_child;
  1332. for(var i in arrChild){
  1333. if(arrChild[i].uid == sUid){
  1334. sPidChild = arrChild[i].pid;
  1335. break;
  1336. }
  1337. }
  1338. return sPidChild;
  1339. }
  1340. /****************************************************************************************
  1341. * Function : frmf_getMyUID
  1342. * Description : 현재 form의 UID 정보
  1343. * Argument :
  1344. * return type : String - 현재 form의 UID를 리턴
  1345. * Creator : 임준호
  1346. ****************************************************************************************/
  1347. function frmf_getMyUID(){
  1348. return FRMGV_OBJ_UID_REPOSITORY.uid_myself;
  1349. }
  1350. /****************************************************************************************
  1351. * Function : frmf_getOpenerUID
  1352. * Description : Opener의 UID 정보(child 팝업에 저장된 opener uid를 가져온다.)
  1353. * Argument :
  1354. * return type : String - Opener의 UID를 리턴, Opener가 없으면 "" 리턴
  1355. * Creator : 임준호
  1356. ****************************************************************************************/
  1357. function frmf_getOpenerUID(){
  1358. var sUidOpener = "";
  1359. if(!utlf_isNull(opener)){
  1360. if(sysf_getObjType(opener) != "Form" && opener.name != "div_work"){
  1361. //div에서 팝업을 띄웠을때는 div의 parent Form으로 접근한다.
  1362. sUidOpener = opener.getOwnerFrame().form.FRMGV_OBJ_UID_REPOSITORY.uid_myself;
  1363. }else{
  1364. sUidOpener = opener.FRMGV_OBJ_UID_REPOSITORY.uid_myself;
  1365. }
  1366. }
  1367. return sUidOpener;
  1368. }
  1369. /**********************************************************************************
  1370. * 함수명 : frmf_getScreenDisabled
  1371. * 설명 : 화면 상태 반환
  1372. * argument :
  1373. * return Type : Boolean - enable 여부
  1374. * 작성자 : 임준호
  1375. **********************************************************************************/
  1376. function frmf_getScreenDisabled(){
  1377. return !this.enable;
  1378. }
  1379. /**********************************************************************************
  1380. * 함수명 : frmf_setMenuDisabled
  1381. * 설명 : 상단 메뉴 enable 상태 설정
  1382. * argument : bVal - true or false
  1383. * return Type :
  1384. * 작성자 : 임준호
  1385. **********************************************************************************/
  1386. function frmf_setMenuDisabled(bVal){
  1387. agv_objAppTopPath.form.menu_top.enable = bVal;
  1388. }
  1389. /**********************************************************************************
  1390. * 함수명 : frmf_openLoadingBar
  1391. * 설명 : loading 이미지 open
  1392. * argument :
  1393. * return Type :
  1394. * 작성자 : 임준호
  1395. **********************************************************************************/
  1396. function frmf_openLoadingBar(){
  1397. frmf_loadingbarTrace(1);
  1398. this.setWaitCursor(true, true);
  1399. }
  1400. /**********************************************************************************
  1401. * 함수명 : frmf_closeLoadingBar
  1402. * 설명 : loading 이미지 close
  1403. * argument :
  1404. * return Type :
  1405. * 작성자 : 임준호
  1406. **********************************************************************************/
  1407. function frmf_closeLoadingBar(){
  1408. frmf_loadingbarTrace(2);
  1409. this.setWaitCursor(false, true);
  1410. }
  1411. function frmf_loadingbarTrace(gubun) {
  1412. var dutplcecd = sysf_getUserInfo("dutplcecd");
  1413. if(dutplcecd == "4070700000" || dutplcecd == "4072000000" || dutplcecd == "4130100000" || dutplcecd == "1000000000") {
  1414. var openerWindowNm = "";
  1415. var openerWindowCd = "";
  1416. var openerWindow = this.opener;
  1417. if(!utlf_isNull(openerWindow)) {
  1418. openerWindowNm = openerWindow.name;
  1419. openerWindowCd = openerWindow.frmf_getScreenID();
  1420. }
  1421. var title = "";
  1422. var countNum = 0;
  1423. switch(gubun) {
  1424. case 1:
  1425. title = "frmf_openLoadingBar";
  1426. countNum = 1;
  1427. break;
  1428. case 2:
  1429. title = "frmf_closeLoadingBar";
  1430. countNum = -1;
  1431. break;
  1432. case 3:
  1433. title = "last_loadingbarTrace"
  1434. countNum = 0;
  1435. break;
  1436. }
  1437. var loadingCnt = -999;
  1438. try {
  1439. gvLoadingCount = parseInt(gvLoadingCount) + countNum;
  1440. loadingCnt = parseInt(gvLoadingCount);
  1441. } catch(e) {}
  1442. trace("\n---- " + title + " -------------------------------------" +
  1443. "\n|" +
  1444. "\n| " + "로그인 시간 : " + sysf_getUserInfo("logindt") + ", 로딩 카운트 : " + loadingCnt +
  1445. "\n| " + sysf_getProcessID() + " (ProcessID), " + sysf_getUserInfo("systemcd") + ", " + sysf_getUserId() + ", " + sysf_getUserName() + ", " + sysf_getIPAddress() +
  1446. "\n| " + "현재창 이름 : " + frmf_getScreenID() + ", 로그 찍은 시간 : " + utlf_getCurrentDate() + " " + utlf_getCurrentTime() + ", 부모창 이름 : " + openerWindowNm + "(" + openerWindowCd + ")" +
  1447. "\n|" +
  1448. "\n-----------------------------------------------------");
  1449. }
  1450. }
  1451. /**********************************************************************************
  1452. * 함수명 : frmf_setParameter
  1453. * 설명 : name 명으로 value 값을 저장, 기존에 같은 name이 있으면 첫번째 값을 덮어쓴다.
  1454. * argument : sName - 파라메터 key
  1455. * sValue - 파라메터 value
  1456. * return Type :
  1457. * 작성자 : 임준호
  1458. **********************************************************************************/
  1459. function frmf_setParameter(sName, sValue){
  1460. var arrParam = new Array();
  1461. arrParam.push(sValue);
  1462. if(sName == "errflag") { // errflag는 환자상단정보에서 사용하는데 1.0과 처리 방식이 달라져서 이렇게 분기함
  1463. var objForm = frmf_getViewer("patientInfo");
  1464. objForm.FRMFGV_ARR_FORM_PARAMETER[sName] = arrParam;
  1465. } else {
  1466. FRMFGV_ARR_FORM_PARAMETER[sName] = arrParam;
  1467. }
  1468. xxf_tfSetParameter(sName,sValue);
  1469. }
  1470. /**********************************************************************************
  1471. * 함수명 : frmf_addParameter
  1472. * 설명 : name 명으로 value 값을 추가
  1473. * argument : sName - 파라메터 key
  1474. * sValue - 파라메터 value
  1475. * return Type :
  1476. * 작성자 : 임준호
  1477. **********************************************************************************/
  1478. function frmf_addParameter(sName, sValue){
  1479. if(utlf_isNull(FRMFGV_ARR_FORM_PARAMETER[sName])){
  1480. //null일때
  1481. frmf_setParameter(sName, sValue);
  1482. }else{
  1483. //null이 아닐때
  1484. FRMFGV_ARR_FORM_PARAMETER[sName].push(sValue);
  1485. xxf_tfSetParameter(sName,sValue);
  1486. }
  1487. }
  1488. /**********************************************************************************
  1489. * 함수명 : frmf_getParameter
  1490. * 설명 : index 번째 name의 값을 가져옴, index 생략하면 1
  1491. * argument : sName - 파라메터 key
  1492. * nIndex - 파라메터 index
  1493. * return Type : ETC - 파라메터 value
  1494. * 작성자 : 임준호
  1495. **********************************************************************************/
  1496. function frmf_getParameter(sName, nIndex){
  1497. if(utlf_isNull(nIndex)) nIndex = 1;
  1498. if(utlf_isNull(FRMFGV_ARR_FORM_PARAMETER[sName])){
  1499. return null;
  1500. }
  1501. return FRMFGV_ARR_FORM_PARAMETER[sName][nIndex-1];
  1502. }
  1503. /**********************************************************************************
  1504. * 함수명 : frmf_getParameterCount
  1505. * 설명 : 해당 sName의 파라메터 갯수
  1506. * argument : sName - 파라메터 key
  1507. * return Type : Number - 파라메터 count
  1508. * 작성자 : 임준호
  1509. **********************************************************************************/
  1510. function frmf_getParameterCount(sName){
  1511. var nParamCnt = 0;
  1512. if(!utlf_isNull(FRMFGV_ARR_FORM_PARAMETER[sName])){
  1513. nParamCnt = FRMFGV_ARR_FORM_PARAMETER[sName].length;
  1514. }
  1515. return nParamCnt;
  1516. }
  1517. /**********************************************************************************
  1518. * 함수명 : frmf_removeParameter
  1519. * 설명 : name 명으로 저장된 데이터들 중에서 index 번째 위치에 있는 값을 삭제한다.
  1520. * index를 생략하면 첫번째 위치의 값을 삭제한다.
  1521. * argument : sName - 파라메터 key
  1522. * nIndex - 파라메터 index
  1523. * return Type :
  1524. * 작성자 : 임준호
  1525. **********************************************************************************/
  1526. function frmf_removeParameter(sName, nIndex){
  1527. var arrTemp = new Array();
  1528. if(utlf_isNull(nIndex)) nIndex = 1;
  1529. for (var i in FRMFGV_ARR_FORM_PARAMETER[sName]){
  1530. if(i != (nIndex-1)){
  1531. arrTemp.push(FRMFGV_ARR_FORM_PARAMETER[sName][i]);
  1532. }
  1533. }
  1534. FRMFGV_ARR_FORM_PARAMETER[sName] = arrTemp;
  1535. }
  1536. /**********************************************************************************
  1537. * 함수명 : frmf_clearParameter
  1538. * 설명 : name의 모든 값울 삭제함, 삭제하기전 값을 반환한다. (getParmeter후 초기화 하는 로직 단순화를 위해)
  1539. * argument : sName - 파라메터 key
  1540. * return Type :
  1541. * 작성자 : 임준호
  1542. **********************************************************************************/
  1543. function frmf_clearParameter(sName){
  1544. var sRetValue = frmf_getParameter(sName);
  1545. FRMFGV_ARR_FORM_PARAMETER[sName] = null;
  1546. return sRetValue;
  1547. }
  1548. /**********************************************************************************
  1549. * 함수명 : frmf_clearAllParameter
  1550. * 설명 : parameter 전체를 삭제한다.
  1551. * argument :
  1552. * return Type :
  1553. * 작성자 : 임준호
  1554. **********************************************************************************/
  1555. function frmf_clearAllParameter(){
  1556. FRMFGV_ARR_FORM_PARAMETER = new Array();
  1557. }
  1558. /**********************************************************************************
  1559. * 함수명 : frmf_chkMdt
  1560. * 설명 : 포커스를 이동할 때 필수, 선택 Validation check
  1561. * argument : arrObjId - 검사할 컴포넌트 ID
  1562. * arrMsg - 검사할 컴포넌트 명칭
  1563. * return Type : Boolean - 유효 여부
  1564. * 작성자 : 임준호
  1565. * 예시 : if(!chkMdt(["edt_date1","edt_date2"], ["등록기간1","등록기간2"]) ) return;
  1566. **********************************************************************************/
  1567. function frmf_chkMdt(arrObjId, arrMsg){
  1568. for(var i in arrObjId){
  1569. var sObjVal = null;
  1570. sObjVal = eval(arrObjId[i]).value;
  1571. if(utlf_isNull(sObjVal)){
  1572. sysf_messageBox(arrMsg[i], "C001", "");
  1573. eval(arrObjId[i]).setFocus();
  1574. return false;
  1575. }
  1576. }
  1577. return true;
  1578. }
  1579. /**********************************************************************************
  1580. * 함수명 : frmf_chkMdtMax
  1581. * 설명 : 포커스를 이동할 때 필수, 선택 Validation check, null과 max값을 체크한다.
  1582. * argument : arrObjId - 검사할 컴포넌트 ID
  1583. * arrMsg - 검사할 컴포넌트 명칭
  1584. * arrMax - 최대 byte값
  1585. * return Type : Boolean - 유효 여부
  1586. * 작성자 : 임준호
  1587. * 예시 : if(!chkMdt(["edt_date1","edt_date2"], ["등록기간1","등록기간2"], [10,10]) ) return;
  1588. **********************************************************************************/
  1589. function frmf_chkMdtMax(arrObjId, arrMsg, arrMax){
  1590. for(var i in arrObjId){
  1591. var sObjVal = null;
  1592. sObjVal = eval(arrObjId[i]).value;
  1593. if(utlf_isNull(sObjVal)){
  1594. sysf_messageBox(arrMsg[i], "C001");
  1595. eval(arrObjId[i]).setFocus();
  1596. return false;
  1597. }else{
  1598. if(arrMax[i]>0 && utlf_getLengB(sObjVal)>arrMax[i]){
  1599. sysf_messageBox(arrMsg[i] + " 입력 제한길이(" + arrMax[i] + " Byte)를", "E003");
  1600. eval(arrObjId[i]).value = utlf_getStringByte(sObjVal, 0, arrMax[i]);
  1601. eval(arrObjId[i]).setFocus();
  1602. return false;
  1603. }
  1604. }
  1605. }
  1606. return true;
  1607. }
  1608. /**********************************************************************************
  1609. * 함수명 : frmf_chkMdtGrid
  1610. * 설명 : 그리드에서 포커스를 이동할 때나 저장할 때 그리드 필수항목 check 하고 포커스를 해당 cell로 이동
  1611. * argument : objGrid - 검사할 그리드 object
  1612. * arrColIdx - 검사할 그리드의 column index
  1613. * arrMsg - 출력할 메시지 (default : null 값이면 rownumber와 column명을 출력한다.)
  1614. * return Type : Boolean - 유효 여부
  1615. * 작성자 : 임준호
  1616. * 예시 : if(!chkMdtGrid(grd_asso, [1,2], ["기관코드","기관명칭"])) return;
  1617. **********************************************************************************/
  1618. function frmf_chkMdtGrid(objGrid:Grid, arrColIdx, arrMsg){
  1619. var rowCnt = objGrid.rowcount;
  1620. for(var i in arrColIdx){
  1621. for(var j=0 ; j<rowCnt ; j++){
  1622. var sValue = objGrid.getCellValue(j, (arrColIdx[i]));
  1623. if(utlf_isNull(sValue)){
  1624. if(arrMsg == null || arrMsg[i] == null || arrMsg[i] == ""){
  1625. sysf_messageBox(j+1 + "행 " + objGrid.getCellText(-1, arrColIdx) + " ", "C001");
  1626. }else{
  1627. sysf_messageBox(j+1 + "행 " + arrMsg[i] + " ", "C001");
  1628. }
  1629. objGrid.setFocus();
  1630. this.objects[objGrid.binddataset].rowposition = j;
  1631. objGrid.setCellPos(arrColIdx[i]);
  1632. objGrid.showEditor(true);
  1633. return false;
  1634. }
  1635. }
  1636. }
  1637. return true;
  1638. }
  1639. /**********************************************************************************
  1640. * 함수명 : frmf_chkOpt
  1641. * 설명 : 여러 개의 값 중에서 하나만 필수일때 Validation check
  1642. * argument : arrObjId - 검사할 컴포넌트 ID
  1643. * arrMsg - 출력할 메시지 : 컴포넌트 명
  1644. * return Type : Boolean - 유효 여부
  1645. * 작성자 : 임준호
  1646. * 예시 : if(!chkMdt(["edt_date1","edt_date2"], ["등록기간1","등록기간2"]) ) return;
  1647. **********************************************************************************/
  1648. function frmf_chkOpt(arrObjId, arrMsg){
  1649. var sMsg = "";
  1650. for(var i in arrObjId){
  1651. var sObjVal = null;
  1652. sObjVal = eval(arrObjId[i]).value;
  1653. if(utlf_isNull(sObjVal)){
  1654. sMsg = sMsg + "'" + arrMsg[i] + "' ";
  1655. }else{
  1656. return true;
  1657. }
  1658. }
  1659. sysf_messageBox(sMsg + " 중 하나는", "C001", "");
  1660. eval(arrObjId[0]).setFocus();
  1661. return false;
  1662. }
  1663. /**********************************************************************************
  1664. * 함수명 : frmf_chkMdtMaxOnly
  1665. * 설명 : 입력 제한길이 체크
  1666. * argument : arrObjId - 검사할 컴포넌트 ID
  1667. * arrMsg - 검사할 컴포넌트 명칭
  1668. * arrMax - 최대 byte값
  1669. * return Type : Boolean - 유효 여부
  1670. * 작성자 : 임준호
  1671. * 예시 : if(!chkMdt(["edt_date1","edt_date2"], ["등록기간1","등록기간2"]) ) return;
  1672. **********************************************************************************/
  1673. function frmf_chkMdtMaxOnly(arrObjId, arrMsg, arrMax){
  1674. for(var i in arrObjId){
  1675. var sObjVal = null;
  1676. sObjVal = eval(arrObjId[i]).value;
  1677. if(arrMax[i]>0 && utlf_getLengB(sObjVal)>arrMax[i]){
  1678. sysf_messageBox(arrMsg[i] + " 입력 제한길이(" + arrMax[i] + " Byte)를", "E003");
  1679. eval(arrObjId[i]).value = utlf_getStringByte(sObjVal, 0, arrMax[i]);
  1680. eval(arrObjId[i]).setFocus();
  1681. return false;
  1682. }
  1683. }
  1684. }
  1685. /**********************************************************************************
  1686. * 함수명 : frmf_getViewer
  1687. * 설명 : 주어진 이름의 form, div 객체를 반환한다.
  1688. * argument : sName - viewer이름
  1689. * 작성자 : 임준호
  1690. **********************************************************************************/
  1691. function frmf_getViewer(sName){
  1692. var objForm = null;
  1693. if(sName == "patientInfo"){
  1694. objForm = agv_objAppTopPath.form.div_patient.div_patientInfo;
  1695. // }else if(sName == "patientInfo_detail"){
  1696. // objForm = agv_objAppTopPath.form.div_patient.div_patientInfo_detail;
  1697. }else if(sName == "bizMain"){
  1698. objForm = agv_objAppWorkPath.form.div_work;
  1699. }else if(sName == "sysMessage"){
  1700. objForm = agv_objAppBottomPath.form;
  1701. }else if(sName == "top"){
  1702. objForm = agv_objAppTopPath.form;
  1703. }else if(sName == "orderbasicinfo"){
  1704. objForm = agv_objAppTopPath.form.dv_orderbasicinfo;
  1705. }
  1706. return objForm;
  1707. }
  1708. /****************************************************************************************
  1709. * Function : frmf_createPopupMenu
  1710. * Description : 팝업메뉴 생성
  1711. * Argument : 01.sPopupName - 팝업메뉴명
  1712. * : 02.sEventFunc - 팝업메뉴클릭 이벤트 함수명
  1713. * : 03.arrMenuInfo - 팝업메뉴 정보
  1714. * : 04.sDsNm - popupmenu에서 사용할 dataset name (default : "frmfds_"+sPopupName) 팝업메뉴2개이상 사용시 꼭 넣어줄것
  1715. * 예)frmf_createPopupMenu("pmn_popupMenu", "lf_menu_event", [{id: "1", level: "0", title: "삭제"}, {id: "2", level: "0", title: "추가"}], "ds_popupmenu01");
  1716. * return type :
  1717. * Creator : 임준호
  1718. ****************************************************************************************/
  1719. function frmf_createPopupMenu(sPopupName, sEventFunc, arrMenuInfo, sDsNm){
  1720. var objPopMenu = new PopupMenu(sPopupName, 0, 0, 100, 100);
  1721. if(!utlf_isNull(arrMenuInfo)){
  1722. var arrColInfo = new Array();
  1723. arrColInfo = [ {col: "id", type:"string", size:256},
  1724. {col: "level", type:"string", size:256},
  1725. {col: "title", type:"string", size:256},
  1726. {col: "type", type:"string", size:256}
  1727. ];
  1728. if(utlf_isNull(sDsNm)) sDsNm = "frmfds_"+sPopupName;
  1729. var sDsName = dsf_createDs(sDsNm, arrColInfo);
  1730. var bindDs = this.objects[sDsName];
  1731. for(var i in arrMenuInfo){
  1732. var nRow = bindDs.addRow();
  1733. bindDs.setColumn(nRow, "id", arrMenuInfo[i].id);
  1734. bindDs.setColumn(nRow, "level", arrMenuInfo[i].level);
  1735. bindDs.setColumn(nRow, "title", arrMenuInfo[i].title);
  1736. }
  1737. objPopMenu.innerdataset = bindDs;
  1738. }
  1739. objPopMenu.captioncolumn = "title";
  1740. //objPopMenu.hotkey = "hotkey";
  1741. objPopMenu.idcolumn = "id";
  1742. objPopMenu.levelcolumn = "level";
  1743. objPopMenu.cursor = "arrow";
  1744. this.addChild(objPopMenu.name, objPopMenu);
  1745. objPopMenu.show();
  1746. objPopMenu.onmenuclick.addHandler(eval(sEventFunc)); //메뉴클릭이벤트
  1747. }
  1748. /****************************************************************************************
  1749. * Function : frmf_createPopupMenuDs
  1750. * Description : DataSet으로부터 팝업메뉴 생성
  1751. * Argument : 01.sPopupName - 팝업메뉴명
  1752. * : 02.sEventFunc - 팝업메뉴클릭 이벤트 함수명
  1753. * : 03.sDsMenuInfo - 팝업메뉴 DataSet정보
  1754. * : 04.sDsNm - popupmenu에서 사용할 dataset name (default : "frmfds_"+sPopupName) 팝업메뉴2개이상 사용시 꼭 넣어줄것
  1755. * 예)frmf_createPopupMenu("pmn_popupMenu", "lf_menu_event", "ds_menu", "ds_popupmenu01");
  1756. * return type :
  1757. ****************************************************************************************/
  1758. function frmf_createPopupMenuDs(sPopupName, sEventFunc, sDsMenuInfo, sDsNm){
  1759. var objPopMenu = new PopupMenu(sPopupName, 0, 0, 100, 100);
  1760. if(!utlf_isNull(sDsMenuInfo)){
  1761. var arrColInfo = new Array();
  1762. arrColInfo = [ {col: "id", type:"string", size:256},
  1763. {col: "level", type:"string", size:256},
  1764. {col: "title", type:"string", size:256},
  1765. {col: "type", type:"string", size:256}
  1766. ];
  1767. if(utlf_isNull(sDsNm)) sDsNm = "frmfds_"+sPopupName;
  1768. var sDsName = dsf_createDs(sDsNm, arrColInfo);
  1769. var bindDs = this.objects[sDsName];
  1770. var rows = sDsMenuInfo.rowcount;
  1771. for(var i = 0; i < rows; i++) {
  1772. var nRow = bindDs.addRow();
  1773. bindDs.setColumn(nRow, "id", sDsMenuInfo.getColumn(i, "hardcd"));
  1774. bindDs.setColumn(nRow, "level", 0);
  1775. bindDs.setColumn(nRow, "title", sDsMenuInfo.getColumn(i, "hardcdnm"));
  1776. }
  1777. objPopMenu.innerdataset = bindDs;
  1778. }
  1779. objPopMenu.captioncolumn = "title";
  1780. //objPopMenu.hotkey = "hotkey";
  1781. objPopMenu.idcolumn = "id";
  1782. objPopMenu.levelcolumn = "level";
  1783. objPopMenu.cursor = "arrow";
  1784. this.addChild(objPopMenu.name, objPopMenu);
  1785. objPopMenu.show();
  1786. objPopMenu.onmenuclick.addHandler(eval(sEventFunc)); //메뉴클릭이벤트
  1787. }
  1788. /****************************************************************************************
  1789. * Function : frmf_setPopupMenuDs
  1790. * Description : 팝업메뉴에 dataset을 설정한다.
  1791. * Argument : 01.sPopupName - 팝업메뉴명
  1792. * : 02.arrMenuInfo - 팝업메뉴 정보
  1793. * : 03.sDsNm - popupmenu에서 사용할 dataset name (default : "frmfds_"+sPopupName)
  1794. * 예)frmf_setPopupMenuDs("pmn_popupMenu", [{id: "1", level: "0", title: "삭제"}, {id: "2", level: "0", title: "추가"}], "ds_popupmenu01");
  1795. * return type :
  1796. * Creator : 임준호
  1797. ****************************************************************************************/
  1798. function frmf_setPopupMenuDs(sPopupName, arrMenuInfo, sDsNm){
  1799. if(utlf_isNull(this.components[sPopupName])){
  1800. return false;
  1801. }
  1802. var arrColInfo = new Array();
  1803. arrColInfo = [ {col: "id", type:"string", size:256},
  1804. {col: "level", type:"string", size:256},
  1805. {col: "title", type:"string", size:256},
  1806. {col: "type", type:"string", size:256}
  1807. ];
  1808. if(utlf_isNull(sDsNm)) sDsNm = "frmfds_"+sPopupName;
  1809. var sDsName = dsf_createDs(sDsNm, arrColInfo);
  1810. var bindDs = this.objects[sDsName];
  1811. for(var i in arrMenuInfo){
  1812. var nRow = bindDs.addRow();
  1813. bindDs.setColumn(nRow, "id", arrMenuInfo[i].id);
  1814. bindDs.setColumn(nRow, "level", arrMenuInfo[i].level);
  1815. bindDs.setColumn(nRow, "title", arrMenuInfo[i].title);
  1816. }
  1817. this.components[sPopupName].innerdataset = bindDs;
  1818. return true;
  1819. }
  1820. /**********************************************************************************
  1821. * 함수명 : frmf_initPopupMenu
  1822. * 설명 : 화면에서 사용할 popupmenu 생성
  1823. * argument : Object obj - form Ojbect
  1824. * return Type : none
  1825. * 작성자 : tobesoft
  1826. **********************************************************************************/
  1827. function frmf_initPopupMenu(obj)
  1828. {
  1829. if(!utlf_isNull(components["_popMenu"])) _popMenu.destroy();
  1830. var objPopMenu = new PopupMenu("_popMenu", 0, 0, 100, 100);
  1831. var arrColInfo = new Array();
  1832. arrColInfo = [ {col: "id", type:"string", size:256},
  1833. {col: "level", type:"string", size:256},
  1834. {col: "title", type:"string", size:256},
  1835. {type: "type", type:"string", size:256}
  1836. ];
  1837. var sDsName = dsf_createDs("ds_formPopMenu", arrColInfo);
  1838. var bindDs = eval(sDsName);
  1839. var nRow = bindDs.addRow();
  1840. bindDs.setColumn(nRow, "id", "1");
  1841. bindDs.setColumn(nRow, "level", "1");
  1842. bindDs.setColumn(nRow, "title", "Reload");
  1843. objPopMenu.innerdataset = bindDs
  1844. objPopMenu.captioncolumn = "title";
  1845. objPopMenu.hotkey = "hotkey";
  1846. objPopMenu.idcolumn = "id";
  1847. objPopMenu.levelcolumn = "level";
  1848. objPopMenu.cursor = "arrow";
  1849. this.addChild(objPopMenu.name, objPopMenu);
  1850. objPopMenu.show();
  1851. objPopMenu.onmenuclick.addHandler(frmf_event_onmenuclick); //메뉴클릭이벤트
  1852. obj.onrbuttondown.addHandler(frmf_mouseRightClick); //popupmenu 오픈
  1853. obj.PopMenu = objPopMenu;
  1854. }
  1855. /**********************************************************************************
  1856. * 함수명 : frmf_mouseRightClick()
  1857. * 설명 : 화면 우클릭 이벤트시 popupmenu 호출
  1858. * argument : Object obj - form Ojbect
  1859. Object e - event object
  1860. * return Type : none
  1861. * 작성자 : tobesoft
  1862. **********************************************************************************/
  1863. function frmf_mouseRightClick(obj,e)
  1864. {
  1865. //var objPopMenu = obj.PopMenu;
  1866. var objPopMenu = obj.deleteP;
  1867. objPopMenu.trackPopup(e.screenX,e.screenY);
  1868. }
  1869. /**********************************************************************************
  1870. * 함수명 : frmf_event_onmenuclick()
  1871. * 설명 : 화면 팝업메뉴 선택 이벤트
  1872. * argument : Object obj - form Ojbect
  1873. Object e - event object
  1874. * return Type : none
  1875. * 작성자 : tobesoft
  1876. **********************************************************************************/
  1877. function frmf_event_onmenuclick(obj, e)
  1878. {
  1879. if(e.id == "1") //reload
  1880. {
  1881. this.reload();
  1882. }
  1883. }
  1884. /************************************************************************************************
  1885. * 함수명 : frmf_isRequiredControls(삭제대상 - frmf_chkMdt로 대체함)(다시 원복 김상목 2015.11.26)
  1886. * 설명 : 입력 컨트롤들의 필수값 체크 (주의 입력창과 캡션의 부모는 같아야 한다)
  1887. * argument : Array arrCompID ex)arrCompId = new Array("edt_code","cal_days");
  1888. * return Type : none
  1889. * 작성자 : tobesoft
  1890. ex)arrCompId = new Array("edt_code","cal_days");
  1891. ex) frmf_isRequiredControls(arrCompId);
  1892. ************************************************************************************************/
  1893. function frmf_isRequiredControls(arrCompID) {
  1894. var arrCnt = arrCompID.length;
  1895. for(var i = 0; i < arrCnt; i++)
  1896. {
  1897. var objComp = eval(arrCompID[i]);
  1898. if(!utlf_isNull(objComp)) {
  1899. if(utlf_isNull(objComp.value))
  1900. {
  1901. var captionID = objComp.name.replace(objComp.name.substr(0, 3), "cap");
  1902. var objCaption = eval("objComp.parent." + captionID);
  1903. if(!utlf_isNull(objCaption)) {
  1904. sysf_messageBox(objCaption.text, "I003");
  1905. } else {
  1906. sysf_messageBox("", "I003");
  1907. }
  1908. objComp.setFocus();
  1909. return false;
  1910. }
  1911. }
  1912. }
  1913. return true;
  1914. }
  1915. /************************************************************************************************
  1916. * 함수명 : frmf_isRequiredGroup
  1917. * 설명 : div 안의 component들중 입력가능한 component의 필수값 체크
  1918. * argument : String groupID - 그룹 아이디
  1919. * return Type : none
  1920. * 작성자 : tobesoft
  1921. ex) frmf_isRequiredGroup("Div00");
  1922. ************************************************************************************************/
  1923. function frmf_isRequiredGroup(groupID)
  1924. {
  1925. var objGrp = eval(groupID);
  1926. var arrComp = objGrp.components;
  1927. var childID, captionID;
  1928. var childObj, captionObj;
  1929. for(var i =0; i < arrComp.length; i++)
  1930. {
  1931. //입력 컨트롤이면
  1932. if(!utlf_isNull(arrComp[i]._required) && arrComp[i]._required == "true" && (arrComp[i] instanceof Edit || arrComp[i] instanceof Combo
  1933. || arrComp[i] instanceof MaskEdit || arrComp[i] instanceof TextArea
  1934. || arrComp[i] instanceof Calendar || arrComp[i] instanceof Spin)
  1935. )
  1936. {
  1937. if(utlf_isNull(arrComp[i].value))
  1938. {
  1939. childID = arrComp[i].name;
  1940. captionID = childID.replace(childID.substr(0, 3), "cap");
  1941. captionObj = objGrp.components[captionID];
  1942. if(!utlf_isNull(captionObj)){
  1943. captionLabel = captionObj.text;
  1944. sysf_messageBox(captionLabel, "I003");
  1945. }else{
  1946. sysf_messageBox("", "I003");
  1947. }
  1948. arrComp[i].setFocus();
  1949. return false;
  1950. break;
  1951. }
  1952. }
  1953. }
  1954. return true;
  1955. }
  1956. /************************************************************************************************
  1957. * 함수명 : frmf_removeChildren (삭제 대상)
  1958. * 설명 : 경로의 노드를 삭제
  1959. * argument : Object objDs - 데이타셋
  1960. * return Type : none
  1961. * 작성자 : tobesoft
  1962. ************************************************************************************************/
  1963. /*
  1964. function frmf_removeChildren( objDs ) {
  1965. objDs.clearData();
  1966. }
  1967. */
  1968. /************************************************************************************************
  1969. * 함수명 : frmf_removeMask
  1970. * 설명 : 스트링 객체의 해당 마스크 문자를 제거후 반환한다.
  1971. * argument : String str - 원본 문자열
  1972. String mask - 제거할 마스크 문자
  1973. * return Type : String 마스크 제거된 문자열
  1974. * 작성자 : tobesoft
  1975. ************************************************************************************************/
  1976. function frmf_removeMask( str, mask ) {
  1977. var strTmp = "";
  1978. strTmp = str.replace(mask, "");
  1979. return strTmp;
  1980. }
  1981. /****************************************************************************************
  1982. * Function : frmf_logout
  1983. * Description : 로그아웃
  1984. * Argument :
  1985. * return type :
  1986. * Creator : 임준호
  1987. ****************************************************************************************/
  1988. function frmf_logout(){
  1989. agv_objAppTopPath.form.lf_logout();
  1990. }
  1991. /****************************************************************************************
  1992. * Function : frmf_checkTimeout
  1993. * Description : 세션 타임 아웃 확인
  1994. * Argument :
  1995. * return type :
  1996. * Creator : 임준호
  1997. ****************************************************************************************/
  1998. function frmf_checkTimeout(){
  1999. var nSessionTimeout = toNumber(sysf_getSystemInfo("sessiontimeout"));
  2000. var dtDate = new Date();
  2001. var nDate = dtDate.getTime();
  2002. var nDiffTime = 0;
  2003. if(agv_nLastTransactionTime > 0){
  2004. nDiffTime = (nDate - agv_nLastTransactionTime)/1000/60;
  2005. }
  2006. if(nDiffTime > nSessionTimeout){
  2007. //타임아웃
  2008. return false;
  2009. }else{
  2010. //안타임아웃
  2011. return true;
  2012. }
  2013. }
  2014. /****************************************************************************************
  2015. * Function : frmf_textViewPopup
  2016. * Description : text의 내용을 보거나 수정 할 팝업호출
  2017. * Argument : 01.sTitleTxt : String 팝업 화면 타이틀
  2018. * : 02.sCont : String 팝업화면의 textarea에 들어갈 text
  2019. * : 03.bReadonly : true / false (textarea를 readonly로 하지 여부)
  2020. * : 04.nLeft : Number left
  2021. * : 05.nTop : Number top
  2022. * : 06.nWidth : Number width
  2023. * : 07.nHeight : Number height
  2024. * return type : -1 or String rtn (창닫기나 취소 버튼 클릭으로 창을 닫을 경우 -1을 리턴함)
  2025. * Creator : tobesoft
  2026. * ex) var rtn = frmf_textViewPopup(stitle, sCont, false, "","",600,400);
  2027. * if(rtn <> -1)
  2028. * {
  2029. * Dataset09.setColumn(Dataset09.rowposition, "Column0", rtn);
  2030. * }
  2031. ****************************************************************************************/
  2032. function frmf_textViewPopup(sTitleTxt, sCont, bReadonly, nLeft,nTop,nWidth,nHeight)
  2033. {
  2034. if(utlf_isNull(sTitleTxt))
  2035. {
  2036. return;
  2037. }
  2038. this.enable = false;
  2039. var sID = "com_TextDetailView";
  2040. var sURL = "com_hismainxp::com_TextDetailView.xfdl";
  2041. var sArg = {pTitleTxt:sTitleTxt, pCont:sCont, pReadonly:bReadonly};
  2042. if(utlf_isNull(nLeft)) nLeft = "";
  2043. if(utlf_isNull(nTop)) nTop = "";
  2044. if(utlf_isNull(nWidth)) nWidth = 400;
  2045. if(utlf_isNull(nHeight)) nHeight = 235;
  2046. var rtn = frmf_modalInternal(sID, sURL, sArg, false, "", nLeft, nTop, nWidth, nHeight, "", "", "", "P");
  2047. this.enable = true;
  2048. return rtn;
  2049. }
  2050. /****************************************************************************************
  2051. * Function : frmf_findFuncFromForm
  2052. * Description : 화면 URL에 해당하는 폼에서 함수 유무를 체크한다.
  2053. * Argument : 01.sUrl : 화면 URL
  2054. * : 02.sFunc : 함수명
  2055. * return type : Boolean : 함수 존재 유무
  2056. * Creator : tobesoft
  2057. ****************************************************************************************/
  2058. function frmf_findFuncFromForm(sUrl, sFunc){
  2059. return frmf_findTextFromForm(sUrl, "function "+sFunc);
  2060. }
  2061. /****************************************************************************************
  2062. * Function : frmf_findTextFromForm
  2063. * Description : 화면 URL에 해당하는 폼에서 text의 유무를 체크한다.
  2064. * Argument : 01.sUrl : 화면 URL
  2065. * : 02.sText : 찾을 text
  2066. * return type : Boolean : text 존재 유무
  2067. * Creator : tobesoft
  2068. ****************************************************************************************/
  2069. function frmf_findTextFromForm(sUrl, sText){
  2070. var doc = new DomDocument;
  2071. doc.url = sUrl;
  2072. var rtn = doc.load(false);
  2073. utlf_addLog(" doc.load(false) : " + rtn);
  2074. if(!utlf_isNull(doc.documentElement)){
  2075. utlf_addLog(" doc.documentElement is not null " );
  2076. var Script_doc = doc.documentElement.getElementsByTagName("Script");
  2077. for(var i=0 ; i<Script_doc.length ; i++){
  2078. var source = Script_doc.get_item(i).source;
  2079. var nIdx = eval("source.search(/"+sText+"/g)");
  2080. if(nIdx >= 0 )
  2081. return true;
  2082. else
  2083. return false;
  2084. }
  2085. }else{
  2086. utlf_addLog(" doc.documentElement is null " );
  2087. return false;
  2088. }
  2089. }
  2090. /****************************************************************************************
  2091. * Function : frmf_removeTitlebar
  2092. * Description : titlebar와 border를 제거한다.
  2093. * Argument : 01.obj : Form object
  2094. * : 02.sMode : remove mode (dynamic[default] : 메뉴에서 띄워진 팝업을 구분하여 동적으로 titlebar 제거, force : 무조건 titlebar 제거)
  2095. * return type :
  2096. * Creator : 임준호
  2097. ****************************************************************************************/
  2098. function frmf_removeTitlebar(obj:Form, sMode){
  2099. var bRemove = false;
  2100. if(utlf_isNull(sMode)){
  2101. sMode = "dynamic";
  2102. }
  2103. if(sMode == "dynamic"){
  2104. var sOpenType = null;
  2105. try{
  2106. sOpenType = plgv_openType;
  2107. }catch(e){
  2108. sOpenType = null;
  2109. }
  2110. if(sOpenType == "top_menu"){
  2111. bRemove = true;
  2112. }
  2113. }else if(sMode == "force"){
  2114. bRemove = true;
  2115. }
  2116. if(bRemove){
  2117. parent.showtitlebar = false;
  2118. obj.style.margin = "0px 0px 0px 0px";
  2119. obj.parent.border = "0 solid #38424a";
  2120. obj.position.width = obj.position.width-24;
  2121. obj.parent.position.width = obj.parent.position.width-24;
  2122. obj.position.height = obj.position.height-44;
  2123. obj.parent.position.height = obj.parent.position.height-44;
  2124. }
  2125. }
  2126. /****************************************************************************************
  2127. * Function : frmf_setDefaultWorkForm
  2128. * Description : 메인프레임 work영역을 default화면으로 변경한다.
  2129. * Argument :
  2130. * return type :
  2131. * Creator : 임준호
  2132. ****************************************************************************************/
  2133. function frmf_setDefaultWorkForm(){
  2134. var objScrnInfo = new Object();
  2135. objScrnInfo.menuitemnm = "";
  2136. agv_objAppWorkPath.form.div_work.frmf_openFormInternal("com_hismainxp::form_default.xfdl", objScrnInfo);
  2137. }
  2138. /****************************************************************************************
  2139. * Function : frmf_getMainFormParam
  2140. * Description : frmf_openForm에서 인자값을 넘겼을때 받는 form에서 사용한다.
  2141. * Argument :
  2142. * return type :
  2143. * Creator : 임준호
  2144. ****************************************************************************************/
  2145. function frmf_getMainFormParam(){
  2146. var objParam = agv_objMainFormParam;
  2147. agv_objMainFormParam = null;
  2148. return objParam;
  2149. }
  2150. // function frmf_initQuickLink(obj:Form){
  2151. // var objButton = new Button();
  2152. // objButton.init("btn_viewQuickLink", 1236, 0, 1256, 20);
  2153. // obj.addChild("btn_viewQuickLink", objButton);
  2154. // objButton.class = "quicklink";
  2155. // objButton.onclick.addHandler(frmf_btn_viewQuickLink_onlick);
  2156. // objButton.show();
  2157. //
  2158. // var objPopupDiv = new PopupDiv();
  2159. // objPopupDiv.init("pdv_quickLink", 10, 10, 100, 100);
  2160. //
  2161. // }
  2162. //
  2163. // function frmf_btn_viewQuickLink_onlick(){
  2164. // }
  2165. /****************************************************************************************
  2166. * Function : frmf_checkAlone
  2167. * Description : 자신이 최상단 화면인지를 리턴한다.
  2168. * Argument :
  2169. * return type :
  2170. * Creator :
  2171. ****************************************************************************************/
  2172. function frmf_checkAlone(){
  2173. if( (this.frmf_getCurrentFormKind() == "main" && this.name == "div_work") || this.parent == "[object ChildFrame]" ){
  2174. return true;
  2175. }
  2176. return false;
  2177. }
  2178. /********************************************************************************************************************/
  2179. /************************* Caching API ******************************************************************************/
  2180. /********************************************************************************************************************/
  2181. /**********************************************************************************
  2182. * 함수명 : frmf_storeIntoCache
  2183. * 설명 : dataset을 cache에 저장한다.
  2184. * argument : sItemName - cache될 itemname (dataset id)
  2185. * objDs - cache에 저장할 dataset object
  2186. * nDueMin - 유효기간(분) null일 경우 10시간
  2187. * return Type : Boolean - 저장 여부
  2188. * 작성자 : 임준호
  2189. **********************************************************************************/
  2190. function frmf_storeIntoCache(sItemName, objDs:Dataset, nDueMin){
  2191. //quick view 여부
  2192. if(sysf_isQuickView()){
  2193. return false;
  2194. }
  2195. return agv_objAppTopPath.form.storeIntoCache(sItemName, objDs, nDueMin);
  2196. }
  2197. /**********************************************************************************
  2198. * 함수명 : frmf_copyFromCache
  2199. * 설명 : Cache에서 itemname으로 저장된 dataset을 objDs에 복사한다.
  2200. * 해당 itemname으로 복사가 되었으면 true를 복사된 내용이 없으면 false를 반환한다.
  2201. * argument : sItemName - cache될 itemname (dataset id)
  2202. * objDs - 복사하려는 dataset object
  2203. * return Type : Boolean - 복사 여부
  2204. * 작성자 : 임준호
  2205. **********************************************************************************/
  2206. function frmf_copyFromCache(sItemName, objDs:Dataset){
  2207. //quick view 여부
  2208. if(sysf_isQuickView()){
  2209. return false;
  2210. }
  2211. return agv_objAppTopPath.form.copyFromCache(sItemName, objDs);
  2212. }
  2213. /********************************************************************************************************************/
  2214. /************************* 팝업 관련 함수 *************************************************************************/
  2215. /********************************************************************************************************************/
  2216. /**********************************************************************************
  2217. * 함수명 : frmf_setPopArgs
  2218. * 설명 : 팝업 인자값을 추가한다.
  2219. * argument : arrArgs - 팝업 인자값
  2220. * sKey - 인자값 key
  2221. * sValue - 인자값 value
  2222. * return Type : Array - 팝업의 기본 인자값
  2223. * 작성자 : 임준호
  2224. **********************************************************************************/
  2225. function frmf_setPopArgs(arrArgs, sKey, sValue){
  2226. var arrRetArgs = null;
  2227. if(utlf_isNull(arrArgs)){
  2228. arrRetArgs = new Object();
  2229. arrRetArgs[sKey] = sValue;
  2230. }else{
  2231. arrArgs[sKey] = sValue;
  2232. arrRetArgs = arrArgs;
  2233. }
  2234. return arrRetArgs;
  2235. }
  2236. /****************************************************************************************
  2237. * Function : frmf_setPopupPosiotion
  2238. * Description : 팝업(modal, modeless) 위치 설정
  2239. * Argument : 01.sID : 팝업ID
  2240. * : 02.bPrevPos : 이전좌표 사용여부
  2241. * : 03.nMonitor : 모니터 번호
  2242. * : 04.nLeft : left
  2243. * : 05.nTop : top
  2244. * return type : String - left, top 정보
  2245. * Creator : 임준호
  2246. ****************************************************************************************/
  2247. function frmf_setPopupPosiotion(sID, bPrevPos, nMonitor, nLeft, nTop, nWidth, nHeight){
  2248. if(utlf_isNull(bPrevPos)) bPrevPos = true;
  2249. if(bPrevPos){
  2250. //이전좌표 사용
  2251. //quick view 일 경우에 대비
  2252. try{
  2253. // 팝업좌표저장된 top 에서 해당팝업의 좌표를 찾음
  2254. var popLocation = agv_objAppTopPath.form.getPopupLocation(sID);
  2255. if (popLocation != undefined){
  2256. // 좌표가 있으면 해당좌표로 세팅
  2257. //if(utlf_isNull(nLeft)){
  2258. nLeft = popLocation.scrnxpos;
  2259. //}
  2260. //if(utlf_isNull(nTop)){
  2261. nTop = popLocation.scrnypos;
  2262. //}
  2263. }else{
  2264. //이전 좌표가 없으면 중앙으로
  2265. //=================================
  2266. }
  2267. }catch (e){
  2268. sysf_catchTrace(e);
  2269. }
  2270. }else{
  2271. var objScreenInfo = null;
  2272. if(utlf_isNull(nMonitor)){
  2273. var nMoniterIndex = system.getMonitorIndex(application.mainframe.position.left, application.mainframe.position.top); //모니터번호 // cursorx, cursory 에서 mainframe left, top로 변경(20161222. smkim)
  2274. objScreenInfo = system.getScreenRect(nMoniterIndex);
  2275. }else{
  2276. objScreenInfo = system.getScreenRect(nMonitor);
  2277. }
  2278. nScreenLeft = objScreenInfo.left;
  2279. nScreenTop = objScreenInfo.top;
  2280. nScreenRight = objScreenInfo.right;
  2281. nScreenBottom = objScreenInfo.bottom;
  2282. nScreenWidth = nScreenRight - nScreenLeft;
  2283. nScreenHeight = nScreenBottom - nScreenTop;
  2284. //이전좌표 사용 안함
  2285. if(utlf_isNull(nMonitor) && utlf_isNull(nLeft) && utlf_isNull(nTop)){
  2286. //모니터번호와 left, top 모두 null일때는 중앙으로
  2287. if(utlf_isNull(nWidth) || utlf_isNull(nHeight)){
  2288. //팝업의 width와 height가 null이면 0,0에 띄운다.
  2289. nLeft = nScreenLeft;
  2290. nTop = nScreenTop;
  2291. }else{
  2292. nLeft = (nScreenLeft+(nScreenWidth/2))-(nWidth/2);
  2293. nTop = (nScreenTop+(nScreenHeight/2))-(nHeight/2);
  2294. }
  2295. }else{
  2296. if(!utlf_isNull(nMonitor) && utlf_isNull(nLeft) && utlf_isNull(nTop)){
  2297. //모니터번호만 null이 아닐때
  2298. //=================================
  2299. //해당모니터에 중앙으로 위치- 나중에 추가 (아래 두줄은 삭제)
  2300. //nLeft = objScreenInfo.left;
  2301. //nTop = objScreenInfo.top;
  2302. //=================================
  2303. if(utlf_isNull(nWidth) || utlf_isNull(nHeight)){
  2304. //팝업의 width와 height가 null이면 0,0에 띄운다.
  2305. nLeft = nScreenLeft;
  2306. nTop = nScreenTop;
  2307. }else{
  2308. nLeft = (nScreenLeft+(nScreenWidth/2))-(nWidth/2);
  2309. nTop = (nScreenTop+(nScreenHeight/2))-(nHeight/2);
  2310. }
  2311. }else if(!utlf_isNull(nMonitor) && !utlf_isNull(nLeft) && !utlf_isNull(nTop)){
  2312. //모니터번호, left, top 모두 null이 아닐때
  2313. if(nLeft <= nScreenLeft) {
  2314. nLeft = nScreenLeft + nLeft;
  2315. }
  2316. if(nTop <= nScreenTop) {
  2317. nTop = nScreenTop + nTop;
  2318. }
  2319. }else{
  2320. //기타
  2321. if(utlf_isNull(nLeft)) nLeft = 0;
  2322. if(utlf_isNull(nTop)) nTop = 0;
  2323. //nLeft = nScreenLeft+nLeft;
  2324. //nTop = nScreenTop+nTop;
  2325. }
  2326. }
  2327. }
  2328. var m_cnt = system.monitorcount;
  2329. var left = 0;
  2330. var right = 0;
  2331. var top = 0;
  2332. var bottom = 0;
  2333. var objScreenInfo;
  2334. for(var i = 1; i <= m_cnt; i++) {
  2335. objScreenInfo = system.getScreenRect(i);
  2336. if(objScreenInfo.left < left) left = objScreenInfo.left;
  2337. if(objScreenInfo.top < top) top = objScreenInfo.top;
  2338. if(objScreenInfo.right > right) right = objScreenInfo.right;
  2339. if(objScreenInfo.bottom > bottom) bottom = objScreenInfo.bottom;
  2340. }
  2341. if(utlf_isNull(nLeft) || left >= nLeft || (nLeft + 70) >= right) nLeft = 0;
  2342. if(utlf_isNull(nTop) || top >= nTop || (nTop + 70) >= bottom) nTop = 0;
  2343. // if(utlf_isNull(nLeft) || nLeft < 0 || nLeft > system.screenwidth) nLeft = 0;
  2344. // if(utlf_isNull(nTop) || nTop < 0 || nTop > system.screenheight) nTop = 0;
  2345. return nLeft+"|"+nTop;
  2346. }
  2347. /**********************************************************************************
  2348. * 함수명 : frmf_modal
  2349. * 설명 : 화면 id로 Modal Dialog를 실행한다.
  2350. * argument : sID ( Popup Form의 ID )
  2351. * : sScreenID ( 화면ID )
  2352. * : sArg ( Popup Form으로 전달될 Argument )
  2353. * : bPrevPos (이전좌표 사용여부)
  2354. * : nMonitor (모니터 번호)
  2355. * : nLeft ( Popup Form Left Position )
  2356. * : nTop ( Popup Form Top Position )
  2357. * : nWidth ( Popup Form Width )
  2358. * : nHeight ( Popup Form Height )
  2359. * : sStyle (ex. title=true,status=true)
  2360. * - title (default: true) titlebar 표시 여부
  2361. * - status (default: false) statusbar 표시 여부
  2362. * - close (default: true) titlebar의 close 버튼 enable 여부
  2363. * - min (default: false) titlebar의 min 버튼 enable 여부 (resizable이 true일때만 나타난다.)
  2364. * - max (default: false) titlebar의 max 버튼 enable 여부 (resizable이 true일때만 나타난다.)
  2365. * - layered (default: true) 윈도우 투명 여부
  2366. * - resize (default: false) resizable 여부
  2367. * : sProp ( Chile Frame의 모든 Property를 설정 )
  2368. * : objScrnInfo ( 화면관련정보 ex:사용처, 화면권한, 메뉴파라미터)
  2369. * : sOpt - 스타일 옵션 "M" 타이틀바가 있고 메인형식의 팝업, "P" 타이틀바가 없는 형식의 팝업
  2370. * return Type : String ( Dialog창에서 close()에 의해 Return된 값 )
  2371. * 작성자 : 임준호
  2372. * 수정내역 : 1. XP, TF 연동 (20141014. 손병은)
  2373. **********************************************************************************/
  2374. function frmf_modal(sID, sScreenID, sArg, bPrevPos, nMonitor, nLeft, nTop, nWidth, nHeight, sStyle, sProp, objScrnInfo, sOpt)
  2375. {
  2376. var rtn = "";
  2377. // 모달 팝업에대해서 포커스 처리
  2378. // var popup = application.popupframes[sID];
  2379. // if (popup != undefined) {
  2380. // popup.winlevel="top";
  2381. // popup.activate();
  2382. //
  2383. // return;
  2384. // }
  2385. // 화면아이디를 세팅한다.
  2386. if (utlf_isNull(objScrnInfo) == false){
  2387. objScrnInfo.scrnid = sScreenID;
  2388. }
  2389. //var sURL = sysf_getScreenURL(sScreenID);
  2390. var obj = sysf_getScreenInfo(sScreenID, objScrnInfo);
  2391. //trace("scrnurl:"+obj.scrnurl+",scrnurlxp:"+obj.scrnurlxp+", tfyn:"+obj.tfyn);
  2392. if(!utlf_isNull(obj.tfyn) && obj.tfyn=="Y"){
  2393. var refDs;
  2394. var resultref;
  2395. var resultid;
  2396. if(!utlf_isNull(sArg)){
  2397. refDs = sArg.xx_refds;
  2398. resultref = sArg.xx_resultref;
  2399. resultid = sArg.xx_resultid;
  2400. }
  2401. //trace("sScreenID:"+sScreenID+",nMonitor:"+nMonitor + "resultref:"+resultref+",resultid:"+resultid);
  2402. //id, monNo, xPos, yPos, wid, refDs, resultref, resultid, userProp, prevPos, authCode, resizeType
  2403. rtn = xxf_tfModal(sScreenID, nMonitor, nLeft, nTop, sID, refDs, resultref, resultid); //id,monNo,xPos,yPos,wid,ref,resultref,userProp,prevPos, authCode, resizeType
  2404. }else{
  2405. this.getOwnerFrame().form.enable = false; // enable true는 popup_close 이벤트에서 처리 한다.
  2406. rtn = frmf_modalInternal(sID, obj.scrnurlxp, sArg, bPrevPos, nMonitor, nLeft, nTop, nWidth, nHeight, sStyle, sProp, objScrnInfo, sOpt, obj.scrnurlxp_real);
  2407. }
  2408. return rtn;
  2409. }
  2410. /**********************************************************************************
  2411. * 함수명 : frmf_modalInternal
  2412. * 설명 : URL로 Modal Dialog를 실행한다.
  2413. * argument : sID ( Popup Form의 ID )
  2414. * : sURL ( Popup Form URL )
  2415. * : sArg ( Popup Form으로 전달될 Argument )
  2416. * : bPrevPos (이전좌표 사용여부)
  2417. * : nMonitor (모니터 번호)
  2418. * : nLeft ( Popup Form Left Position )
  2419. * : nTop ( Popup Form Top Position )
  2420. * : nWidth ( Popup Form Width )
  2421. * : nHeight ( Popup Form Height )
  2422. * : sStyle (ex. title=true,status=true)
  2423. * - title (default: true) titlebar 표시 여부
  2424. * - status (default: false) statusbar 표시 여부
  2425. * - close (default: true) titlebar의 close 버튼 enable 여부
  2426. * - min (default: false) titlebar의 min 버튼 enable 여부 (resizable이 true일때만 나타난다.)
  2427. * - max (default: false) titlebar의 max 버튼 enable 여부 (resizable이 true일때만 나타난다.)
  2428. * - layered (default: true) 윈도우 투명 여부
  2429. * - resize (default: false) resizable 여부
  2430. * : sProp ( Chile Frame의 모든 Property를 설정 )
  2431. * : objScrnInfo ( 화면관련정보 ex:사용처, 화면권한, 메뉴파라미터)
  2432. * : sOpt - 스타일 옵션 "M" 타이틀바가 있고 메인형식의 팝업, "P" 타이틀바가 없는 형식의 팝업
  2433. * return Type : String ( Dialog창에서 close()에 의해 Return된 값 )
  2434. * 작성자 : 임준호
  2435. **********************************************************************************/
  2436. function frmf_modalInternal(sID, sURL, sArg, bPrevPos, nMonitor, nLeft, nTop, nWidth, nHeight, sStyle, sProp, objScrnInfo, sOpt, sRealUrl)
  2437. {
  2438. //gds_openFormInfo에 팝업 정보 추가
  2439. frmf_setFormInfo(sID, this.name, "Modal");
  2440. var rtn = null;
  2441. var newChild;
  2442. var MyFrame = this.getOwnerFrame();
  2443. //화면 좌표 설정
  2444. var sPopupPosition = frmf_setPopupPosiotion(sID, bPrevPos, nMonitor, nLeft, nTop, nWidth, nHeight);
  2445. nLeft = toNumber(sPopupPosition.split("|")[0]);
  2446. nTop = toNumber(sPopupPosition.split("|")[1]);
  2447. // 모달 팝업에대해서 포커스 처리
  2448. var popup = application.popupframes[sID];
  2449. if (!utlf_isNull(popup)) {
  2450. if(popup.name != this.getOwnerFrame().form.name != popup.form.opener.name) {
  2451. for(var i = 0; i < application.popupframes.length; i++) {
  2452. if(utlf_isNull(application.popupframes[sID + "_" + i])) {
  2453. sID += "_" + i;
  2454. break;
  2455. }
  2456. }
  2457. } else {
  2458. popup.winlevel="top";
  2459. if(popup.openstatus != "maximize") popup.openstatus = "normal";
  2460. popup.activate();
  2461. return;
  2462. }
  2463. }
  2464. newChild = frmf_newChildFrame(sID, sURL, nLeft, nTop, nWidth, nHeight, sStyle, sProp, objScrnInfo, sOpt, nMonitor, "modal");
  2465. try{
  2466. var objfocus = this.getFocus();
  2467. }catch (e){}
  2468. //opener의 uid repository에 팝업 정보 입력
  2469. try{
  2470. sArg = frmf_setPopArgs(sArg, "frmplgv_pid", sID);
  2471. this.FRMGV_OBJ_UID_REPOSITORY.uid_child.push({pid: sID, uid: null});
  2472. }catch(e){}
  2473. //팝업의 titletext를 url의 업무명으로 설정하기위해 args를 선언한다.
  2474. var realUrl = utlf_isNull(sRealUrl) ? sURL : sRealUrl;
  2475. sArg = frmf_setPopArgs(sArg, "frmplgv_titleName", frmf_getBizNameByUrl(realUrl));
  2476. sArg = frmf_setPopArgs(sArg, "frmplgv_sOpt", sOpt);
  2477. rtn = newChild.showModal(sID, MyFrame, sArg, this);
  2478. this.removeChild(newChild.name);
  2479. newChild.destroy();
  2480. newChild = null;
  2481. try{objfocus.setFocus();}catch (e){}
  2482. if( ("x"+rtn == "xNaN") && ( new String(rtn.length).valueOf() == "undefined")) rtn = "";
  2483. if (rtn == null) rtn = "";
  2484. var v_ChkStr = new String(rtn);
  2485. if (v_ChkStr == null) rtn = "";
  2486. if (v_ChkStr.toString().length == 0) rtn = "";
  2487. //if( utlf_isNull(rtn) ) rtn = "";
  2488. //try{ f_setFocus(); }catch (e){}
  2489. return rtn;
  2490. }
  2491. /**********************************************************************************
  2492. * 함수명 : frmf_open
  2493. * 설명 : 화면ID로 Modeless Dialog를 실행한다.
  2494. * argument : sID ( Popup Form의 ID )
  2495. * : sScreenID ( 화면ID )
  2496. * : sArg ( Popup Form으로 전달될 Argument )
  2497. * : bPrevPos (이전좌표 사용여부)
  2498. * : nMonitor (모니터 번호)
  2499. * : nLeft ( Popup Form Left Position )
  2500. * : nTop ( Popup Form Top Position )
  2501. * : nWidth ( Popup Form Width )
  2502. * : nHeight ( Popup Form Height )
  2503. * : sStyle (ex. title=true,status=true)
  2504. * - title (default: true) titlebar 표시 여부
  2505. * - status (default: false) statusbar 표시 여부
  2506. * - close (default: true) titlebar의 close 버튼 enable 여부
  2507. * - min (default: false) titlebar의 min 버튼 enable 여부 (resizable이 true일때만 나타난다.)
  2508. * - max (default: false) titlebar의 max 버튼 enable 여부 (resizable이 true일때만 나타난다.)
  2509. * - layered (default: true) 윈도우 투명 여부
  2510. * - resize (default: false) resizable 여부
  2511. * - opentype (default: nomal) max:팝업을 화면 전체크기로 오픈, normal:지정된 크기로 오픈
  2512. * : sProp ( Chile Frame의 모든 Property를 설정 )
  2513. * : objScrnInfo ( 화면관련정보 ex:사용처, 화면권한, 메뉴파라미터)
  2514. * : sOpt - 스타일 옵션 "M" 타이틀바가 있고 메인형식의 팝업, "P" 타이틀바가 없는 형식의 팝업
  2515. * return Type : Boolean
  2516. * 작성자 : 임준호
  2517. **********************************************************************************/
  2518. function frmf_open(sID, sScreenID, sArg, bPrevPos, nMonitor, nLeft, nTop, nWidth, nHeight, sStyle, sProp, objScrnInfo, sOpt){
  2519. //var sURL = sysf_getScreenURL(sScreenID);
  2520. var obj = sysf_getScreenInfo(sScreenID, objScrnInfo);
  2521. // trace("scrnurl:"+obj.scrnurl+",scrnurlxp:"+obj.scrnurlxp+", tfyn:"+obj.tfyn);
  2522. var sitemid;
  2523. if(!utlf_isNull(objScrnInfo)){
  2524. sitemid = objScrnInfo.itemid;
  2525. }
  2526. if(!utlf_isNull(obj.tfyn) && obj.tfyn=="Y"){
  2527. var refDs;
  2528. var resultref;
  2529. var resultid;
  2530. var openType;
  2531. if(!utlf_isNull(sArg)){
  2532. refDs = sArg.xx_refds;
  2533. resultref = sArg.xx_resultref;
  2534. resultid = sArg.xx_resultid;
  2535. openType = sArg.plgv_openType;
  2536. }
  2537. try{
  2538. // TF는 무조건 팝업으로 뜨도록 함
  2539. if(openType != "top_menu" || utlf_isNull(sitemid)){
  2540. //id, monNo, xPos, yPos, wid, refDs, resultref, resultid, userProp, prevPos, authCode, resizeType
  2541. xxf_tfOpen(sScreenID, nMonitor, nLeft, nTop, sID, refDs, resultref, resultid); //id,monNo,xPos,yPos,wid,ref,resultref,userProp,prevPos, authCode, resizeType
  2542. }else{
  2543. xxf_tfOpenMenuItem(sitemid);
  2544. }
  2545. } catch (e) {
  2546. alert("팝업오픈 중 오류가 발생하였습니다. "+ "|" + e.name + "|" + e.message + "|" + e.number + "|" + e.description);
  2547. }
  2548. }else{
  2549. frmf_openInternal(sID, obj.scrnurlxp, sArg, bPrevPos, nMonitor, nLeft, nTop, nWidth, nHeight, sStyle, sProp, objScrnInfo, sOpt, obj.scrnurlxp_real);
  2550. }
  2551. }
  2552. /**********************************************************************************
  2553. * 함수명 : frmf_openInternal
  2554. * 설명 : URL로 Modeless Dialog를 실행한다.
  2555. * argument : sID ( Popup Form의 ID )
  2556. * : sURL ( Popup Form URL )
  2557. * : sArg ( Popup Form으로 전달될 Argument )
  2558. * : bPrevPos (이전좌표 사용여부)
  2559. * : nMonitor (모니터 번호)
  2560. * : nLeft ( Popup Form Left Position )
  2561. * : nTop ( Popup Form Top Position )
  2562. * : nWidth ( Popup Form Width )
  2563. * : nHeight ( Popup Form Height )
  2564. * : sStyle (ex. title=true,status=true)
  2565. * - title (default: true) titlebar 표시 여부
  2566. * - status (default: false) statusbar 표시 여부
  2567. * - close (default: true) titlebar의 close 버튼 enable 여부
  2568. * - min (default: false) titlebar의 min 버튼 enable 여부 (resizable이 true일때만 나타난다.)
  2569. * - max (default: false) titlebar의 max 버튼 enable 여부 (resizable이 true일때만 나타난다.)
  2570. * - layered (default: true) 윈도우 투명 여부
  2571. * - resize (default: false) resizable 여부
  2572. * - opentype (default: nomal) max:팝업을 화면 전체크기로 오픈, normal:지정된 크기로 오픈
  2573. * : sProp ( Chile Frame의 모든 Property를 설정 )
  2574. * : objScrnInfo ( 화면관련정보 ex:사용처, 화면권한, 메뉴파라미터)
  2575. * : sOpt - 스타일 옵션 "M" 타이틀바가 있고 메인형식의 팝업, "P" 타이틀바가 없는 형식의 팝업
  2576. * return Type : Boolean
  2577. * 작성자 : 임준호
  2578. **********************************************************************************/
  2579. function frmf_openInternal(sID, sURL, sArg, bPrevPos, nMonitor, nLeft, nTop, nWidth, nHeight, sStyle, sProp, objScrnInfo, sOpt, sRealUrl){
  2580. var rtn;
  2581. var newChild;
  2582. var ret;
  2583. //화면 좌표 설정
  2584. var sPopupPosition = frmf_setPopupPosiotion(sID, bPrevPos, nMonitor, nLeft, nTop, nWidth, nHeight);
  2585. nLeft = toNumber(sPopupPosition.split("|")[0]);
  2586. nTop = toNumber(sPopupPosition.split("|")[1]);
  2587. //중복 화면 ID 처리
  2588. var popup = application.popupframes[sID];
  2589. if (!utlf_isNull(popup)) {
  2590. popup.winlevel="top";
  2591. if(popup.openstatus != "maximize") popup.openstatus = "normal";
  2592. popup.activate();
  2593. return;
  2594. }
  2595. try {
  2596. //var MyFrame = null;
  2597. //if(bFixAlign == true) MyFrame = this.getOwnerFrame();
  2598. // 좌표가 없으면 개발자가 정의한 좌표로 세팅
  2599. newChild = frmf_newChildFrame(sID, sURL, nLeft, nTop, nWidth, nHeight, sStyle, sProp, objScrnInfo, sOpt, nMonitor, "modeless");
  2600. //opener의 uid repository에 팝업 정보 입력
  2601. try{
  2602. sArg = frmf_setPopArgs(sArg, "frmplgv_pid", sID);
  2603. this.FRMGV_OBJ_UID_REPOSITORY.uid_child.push({pid: sID, uid: null});
  2604. }catch(e){}
  2605. //팝업의 titletext를 url의 업무명으로 설정하기위해 args를 선언한다.
  2606. var realUrl = utlf_isNull(sRealUrl) ? sURL : sRealUrl;
  2607. sArg = frmf_setPopArgs(sArg, "frmplgv_titleName", frmf_getBizNameByUrl(realUrl));
  2608. sArg = frmf_setPopArgs(sArg, "frmplgv_sOpt", sOpt);
  2609. ret = newChild.showModeless(sID.toString(), null, sArg, this);
  2610. //nLeft = application.mainframe.position.left + (application.mainframe.position.width - nWidth)/2;
  2611. //nTop = application.mainframe.position.top + (application.mainframe.position.height - nHeight)/2;
  2612. } catch (e) {
  2613. alert("팝업오픈 중 오류가 발생하였습니다. "+ "|" + e.name + "|" + e.message + "|" + e.number + "|" + e.description);
  2614. }
  2615. //gds_openFormInfo에 팝업 정보 추가
  2616. frmf_setFormInfo(sID.toString(), this.name, "Modeless");
  2617. return ret;
  2618. }
  2619. /**********************************************************************************
  2620. * 함수명 : frmf_newChildFrame
  2621. * 설명 : Modal/Modeless Popup 처리
  2622. * argument : sID ( Popup Form의 ID )
  2623. * : sURL ( Popup Form URL )
  2624. * : nLeft ( Popup Form Left Position )
  2625. * : nTop ( Popup Form Top Position )
  2626. * : nWidth ( Popup Form Width )
  2627. * : nHeight ( Popup Form Height )
  2628. * : sStyle (ex. title=true,status=true)
  2629. * - title (default: true) titlebar 표시 여부
  2630. * - status (default: false) statusbar 표시 여부
  2631. * - close (default: true) titlebar의 close 버튼 enable 여부
  2632. * - min (default: false) titlebar의 min 버튼 enable 여부 (resizable이 true일때만 나타난다.)
  2633. * - max (default: false) titlebar의 max 버튼 enable 여부 (resizable이 true일때만 나타난다.)
  2634. * - layered (default: true) 윈도우 투명 여부
  2635. * - resize (default: false) resizable 여부
  2636. * - opentype (default: nomal) max:팝업을 화면 전체크기로 오픈, normal:지정된 크기로 오픈
  2637. * - nocenter (default: false) 위치 저장되지 않는 화면 중 중앙에 위치 하지 않도록 한다.
  2638. * : sProp ( Chile Frame의 모든 Property를 설정 )
  2639. * : objScrnInfo ( 화면관련정보 ex:사용처, 화면권한, 메뉴파라미터)
  2640. * : sOpt - 스타일 옵션 "M" 타이틀바가 있고 메인형식의 팝업, "P" 타이틀바가 없는 형식의 팝업
  2641. * return Type : Child Frame Object
  2642. * 작성자 : 임준호
  2643. **********************************************************************************/
  2644. function frmf_newChildFrame(sID, sURL, nLeft, nTop, nWidth, nHeight, sStyle, sProp, objScrnInfo, sOpt, nMonitor, sType){
  2645. var newChild = null;
  2646. //var MyFrame = this.getOwnerFrame();
  2647. var bTitle = true;
  2648. var bStatus = false;
  2649. var bClose = true;
  2650. var bMin = false;
  2651. var bMax = false;
  2652. var bAutoSize = true;
  2653. var bLayered = false;
  2654. var bResize = false;
  2655. var flag;
  2656. var bNoCenter = false;
  2657. var aProp = new Array();
  2658. //resize, min버튼, max버튼 여부가 modal은 default false, modeless는 default true
  2659. if(sType == "modeless"){
  2660. bResize = true;
  2661. bMin = true;
  2662. bMax = true;
  2663. }
  2664. if(utlf_isNull(sID) || utlf_isNull(sURL)) return null;
  2665. newChild = new ChildFrame;
  2666. if(utlf_isNull(nLeft)) newChild.openalign.halign = "center";
  2667. if(utlf_isNull(nTop)) newChild.openalign.valign = "middle";
  2668. if(utlf_isNull(nWidth) || nWidth < 0 || utlf_isNull(nHeight) || nHeight < 0 ){
  2669. nWidth = 0;
  2670. nHeight = 0;
  2671. bAutoSize = true;
  2672. // }else{ // autosize가 false면 anchor 와 충돌 발생(레이아웃 틀어짐)
  2673. // bAutoSize = false;
  2674. }
  2675. if(!utlf_isNull(sStyle)){
  2676. var i, arr, arr1;
  2677. arr = sStyle.split(",");
  2678. for( i = 0 ; i < arr.length ; i++ )
  2679. {
  2680. arr1 = arr[i].split("=");
  2681. arr1[0] = utlf_rTrim(utlf_lTrim(arr1[0]));
  2682. arr1[1] = utlf_rTrim(utlf_lTrim(arr1[1]));
  2683. if(arr1[1].toLowerCase() == "true" ) flag = true;
  2684. else flag = false;
  2685. if(arr1[0].toLowerCase() == "title") bTitle = flag;
  2686. if(arr1[0].toLowerCase() == "status") bStatus = flag;
  2687. if(arr1[0].toLowerCase() == "close") bClose = flag;
  2688. if(arr1[0].toLowerCase() == "min") bMin = flag;
  2689. if(arr1[0].toLowerCase() == "max") bMax = flag;
  2690. if(arr1[0].toLowerCase() == "layered") bLayered = flag;
  2691. if(arr1[0].toLowerCase() == "resize") bResize = flag;
  2692. if(arr1[0].toLowerCase() == "opentype"){
  2693. if(arr1[1].toLowerCase() == "max"){
  2694. //팝업을 전체화면으로 오픈한다. 작업표시줄 상관없이 꽉차게
  2695. if(utlf_isNull(nMonitor)){
  2696. nMonitor = system.getMonitorIndex(system.cursorx, system.cursory); //모니터번호
  2697. }
  2698. var objScreenSize = system.getScreenRect(nMonitor);
  2699. var nScreenLeft = objScreenSize.left;
  2700. var nScreenTop = objScreenSize.top;
  2701. var nScreenRight = objScreenSize.right;
  2702. var nScreenBottom = objScreenSize.bottom;
  2703. var nScreenWidth = nScreenRight - nScreenLeft;
  2704. var nScreenHeight = nScreenBottom - nScreenTop;
  2705. nLeft = nScreenLeft;
  2706. nTop = nScreenTop;
  2707. nWidth = nScreenWidth;
  2708. nHeight = nScreenHeight;
  2709. //bAutoSize = false; // autosize가 false면 anchor 와 충돌 발생(레이아웃 틀어짐)
  2710. }
  2711. }
  2712. if(arr1[0].toLowerCase() == "nocenter") {
  2713. if(arr1[1].toLowerCase() == "true" ) bNoCenter = true;
  2714. }
  2715. }
  2716. }
  2717. if(utlf_isNull(sProp) == false){
  2718. var i;
  2719. aProp = sProp.split(",");
  2720. for( i = 0 ; i < aProp.length ; i++ )
  2721. {
  2722. aProp[i] = aProp[i].split("=");
  2723. aProp[i][0] = utlf_rTrim(utlf_lTrim(aProp[i][0]));
  2724. aProp[i][1] = utlf_rTrim(utlf_lTrim(aProp[i][1]));
  2725. }
  2726. }
  2727. ///// 추가내용////////////////
  2728. //sOpt가 null일때는 타이틀바가 없는 팝업 스타일 적용
  2729. if(utlf_isNull(sOpt)) sOpt = "P";
  2730. //팝업 옵션션에 따른 스타일 적용
  2731. if(sOpt == "M"){
  2732. bTitle = true; //타이틀바 보이게 하기
  2733. newChild.border = "2 solid #38424a";
  2734. }else if(sOpt == "P"){
  2735. newChild.formurl = sURL;
  2736. bTitle = false; //타이틀바 안보이게 하기
  2737. }
  2738. /////////// 추가내용끝////////
  2739. newChild.formurl = sURL;
  2740. ////// sStyle내용 적용( 이부분은 init()호출전에 사용해야 함 )
  2741. newChild.showtitlebar = bTitle;
  2742. newChild.autosize = bAutoSize;
  2743. newChild.layered = bLayered;
  2744. newChild.resizable = bResize;
  2745. //newChild.bordertype = "round 4 4";
  2746. newChild.init(sID, nLeft, nTop, nLeft + nWidth, nTop + nHeight);
  2747. ////// sStyle내용 적용( 이부분은 init()호출후에 사용해야 함 )
  2748. newChild.showstatusbar = bStatus;
  2749. if(sOpt != "P") {
  2750. newChild.titlebar.minbutton.visible = true;
  2751. newChild.titlebar.minbutton.enable = bMin;
  2752. newChild.titlebar.maxbutton.enable = bMax;
  2753. newChild.titlebar.closebutton.enable = bClose;
  2754. }
  2755. //newChild.style.margin = "100px 100px 100px 100px";
  2756. if( agv_objAppTopPath.form.getPopupLocation(sID) == undefined && !bNoCenter){
  2757. newChild.openalign = "center middle";
  2758. }
  2759. // newChild.titlebar.style.background = "@gradation";
  2760. // newChild.titlebar.style.gradation = "linear 0,0 #4b6274 0,100 #2f4758 [49% #586f80] [50% #3a5569]";
  2761. // newChild.titlebar.style.border = "0 none #808080, 0 none #808080, 1 solid #2e4556,0 none #808080";
  2762. // newChild.titlebar.style.bordertype = "normal";
  2763. // newChild.titlebar.style.font = "Tahoma,9,bold antialias";
  2764. // newChild.titlebar.style.color = "#ffffff";
  2765. // newChild.titlebar.style.align = "left middle";
  2766. // newChild.titlebar.style.padding = "0 0 2 0";
  2767. // newChild.titlebar.style.icon = "URL('IMG::ico_title.png')";
  2768. // icon, system symbol 설정
  2769. var isSingle = false;
  2770. try {
  2771. isSingle = (!utlf_isNull(gv_SINGLE));
  2772. } catch(e) {}
  2773. if(isSingle) {
  2774. favicon = lf_getIconImg("ico");
  2775. // application.mainframe.style.icon = "";
  2776. // var test = lf_getIconImg("ico");
  2777. // trace("test : " + test);
  2778. // newChild.style.icon = favicon;
  2779. // application.mainframe.style.icon = test;
  2780. } else {
  2781. var systemcd = sysf_getSystemCd();
  2782. var favicon = "URL('IMG::favicon_031_xp.ico')";
  2783. if(!utlf_isNull(systemcd)) {
  2784. if (systemcd == "HIS032") {
  2785. favicon = "URL('IMG::favicon_032_xp.ico')";
  2786. } else if (systemcd == "HIS033") {
  2787. favicon = "URL('IMG::favicon_033_xp.ico')";
  2788. } else if (systemcd == "MIS030") {
  2789. favicon = "URL('IMG::favicon_030_xp.ico')";
  2790. } else if (systemcd == "MIS033") {
  2791. favicon = "URL('IMG::favicon_MIS033_xp.ico')";
  2792. } else if (systemcd == "CRM030") {
  2793. favicon = "URL('IMG::favicon_CRM030_xp.ico')";
  2794. }
  2795. }
  2796. }
  2797. newChild.style.icon = favicon;
  2798. //MyFrame.addChild(sID, newChild); // 이거 꼭 해야 함
  2799. ////// sProp내용 적용
  2800. // for( i = 0 ; i < aProp.length ; i++ )
  2801. // {
  2802. // frmf_SetProp( "this.getOwnerFrame()."+sID, aProp[i][0], aProp[i][1] );
  2803. // }
  2804. //MyFrame.removeChild(sID); // 이거 꼭 해야 함
  2805. // close 핸들러 지정
  2806. newChild.onclose.setHandler(popup_onclose);
  2807. //quick view 일 경우에 대비
  2808. try {
  2809. if(utlf_isNull(objScrnInfo)){
  2810. //화면 정보 설정
  2811. objScrnInfo = new Object();
  2812. objScrnInfo.scrnid = sID;
  2813. }
  2814. objScrnInfo.type = sType;
  2815. newChild.bgv_objScreenInfo = objScrnInfo; // 화면 정보 세팅
  2816. } catch (e)
  2817. {
  2818. newChild.frmlgv_objScreenInfo = {scrnauth: "11100000", type: sType}; // 화면 정보 세팅
  2819. }
  2820. return newChild;
  2821. }
  2822. function popup_onclose(obj:ChildFrame, e:CloseEventInfo)
  2823. {
  2824. try {
  2825. if(obj.form.lgv_bExcept) return;
  2826. if(obj.bgv_objScreenInfo.type == "modal") // modal 은 화면 열때 enable을 false 시켰기 때문
  2827. this.getOwnerFrame().form.enable = true;
  2828. // if (sysf_isQuickView()==false) {
  2829. // 팝업좌표 위치 저장
  2830. var loc = {scrnxpos: obj.position.left,
  2831. scrnypos: obj.position.top};
  2832. agv_objAppTopPath.form.setPopupLocation(obj.name, loc);
  2833. // }
  2834. //gds_openFormInfo에서 팝업정보 삭제
  2835. obj.form.frmf_deletePopInfo(obj.name);
  2836. //opener의 form uid repository에서 child정보 삭제
  2837. if(!obj.form.utlf_isNull(obj.form.opener)) { // opener 가 있을 때만
  2838. if(obj.form.opener.getOwnerFrame().form.name == "form_work"){
  2839. obj.form.frmf_deleteUidChild(obj.form.opener.getOwnerFrame().form.div_work, obj.form.FRMGV_OBJ_UID_REPOSITORY.uid_myself);
  2840. }else{
  2841. obj.form.frmf_deleteUidChild(obj.form.opener.getOwnerFrame().form, obj.form.FRMGV_OBJ_UID_REPOSITORY.uid_myself);
  2842. }
  2843. }
  2844. //opener.FRMGV_OBJ_UID_REPOSITORY.uid_child = arrUidChildTemp;
  2845. } catch (e) {
  2846. trace("popup_onclose 에러");
  2847. obj.form.sysf_catchTrace(e);
  2848. }
  2849. }
  2850. function frmf_getIconImg() {
  2851. var result = "";
  2852. var prgmname = gds_single.lookup("activeYN", "Y", "prgmname");
  2853. var instcd = gv_currentInstcd;
  2854. if(lf_isNull(instcd)) instcd = "his031";
  2855. if(lf_isNull(prgmname))
  2856. result = "IMG::favicon_031_xp.ico";
  2857. else
  2858. result = "IMG::" + prgmname + instcd.substr(3) + ".png";
  2859. return result;
  2860. }
  2861. /**********************************************************************************
  2862. * 함수명 : frmf_isPopup
  2863. * 설 명 : 자신이 팝업인지 아닌지를 리턴한다.
  2864. * argument :
  2865. * return Type : String
  2866. * 작성자 : 임준호
  2867. **********************************************************************************/
  2868. function frmf_isPopup(){
  2869. //frmplgv_pid -> modal, open 팝업을 열때 항상 pid를 넘겨준다.
  2870. try{
  2871. if (utlf_isNull(frmplgv_pid)){
  2872. return false;
  2873. } else {
  2874. return true;
  2875. }
  2876. }catch(e){
  2877. return false;
  2878. }
  2879. }
  2880. /**********************************************************************************
  2881. * 함수명 : frmf_isPopupRec
  2882. * 설 명 : 자신이 팝업인지 아닌지를 리턴한다.
  2883. * argument :
  2884. * return Type : String
  2885. * 작성자 : 최재원
  2886. **********************************************************************************/
  2887. function frmf_isPopupRec(){
  2888. //frmplgv_pid -> modal, open 팝업을 열때 항상 pid를 넘겨준다.
  2889. try{
  2890. if (utlf_isNull(this.getOwnerFrame().frmplgv_pid)){
  2891. return false;
  2892. } else {
  2893. return true;
  2894. }
  2895. }catch(e){
  2896. sysf_catchTrace(e);
  2897. return false;
  2898. }
  2899. }
  2900. /**********************************************************************************
  2901. * 함수명 : frmf_getPopupId
  2902. * 설 명 : 팝업 ID를 가져온다.
  2903. * argument :
  2904. * return Type : String
  2905. * 작성자 : 임준호
  2906. **********************************************************************************/
  2907. function frmf_getPopupId(){
  2908. return this.parent.name;
  2909. }
  2910. /**********************************************************************************
  2911. * 함수명 : frmf_findPopup
  2912. * 설 명 : 팝업의 Form 객체를 가져온다. 없으면 null
  2913. * argument : sPopupId - 팝업 ID
  2914. * return Type : Form Object
  2915. * 작성자 : 임준호
  2916. **********************************************************************************/
  2917. function frmf_findPopup(sPopupId){
  2918. var objForm = application.popupframes[sPopupId];
  2919. if(!utlf_isNull(objForm)) objForm = application.popupframes[sPopupId].form;
  2920. return objForm;
  2921. }
  2922. /**********************************************************************************
  2923. * 함수명 : frmf_getChildWindow
  2924. * 설 명 : open된 팝업들 중에서 다른 화면으로 바뀌지 않은 팝업의 form object를 리턴한다.
  2925. * child window가 없거나 있더라도 다른 화면으로 바뀌었다면 null을 리턴한다.
  2926. * argument : sPid - 팝업 ID
  2927. * return Type : Form Object
  2928. * 작성자 : 임준호
  2929. **********************************************************************************/
  2930. function frmf_getChildWindow(sPid){
  2931. return frmf_findChildWindow(frmf_getChildUID(sPid));
  2932. }
  2933. /**********************************************************************************
  2934. * 함수명 : frmf_findChildWindow
  2935. * 설 명 : 열려있는 팝업 중에서 현재의 UID가 주어진 UID와 동일한
  2936. * 팝업을 찾아서 리턴한다. 없으면 null
  2937. * argument : sUid - 팝업 UID
  2938. * return Type : Form Object
  2939. * 작성자 : 임준호
  2940. **********************************************************************************/
  2941. function frmf_findChildWindow(sUid){
  2942. var sPid = frmf_getChildPID(sUid);
  2943. return frmf_findPopup(sPid);
  2944. }
  2945. /**********************************************************************************
  2946. * 함수명 : frmf_setFormInfo
  2947. * 설 명 : 팝업정보를 gds_openFormInfo에 저장한다.
  2948. * argument : sPopId - 팝업 ID
  2949. * sParentId - 부모(opener) form ID
  2950. * sKind - 팝업 종류 (modal, modeless)
  2951. * return Type :
  2952. * 작성자 : 임준호
  2953. **********************************************************************************/
  2954. function frmf_setFormInfo(sFormId, sParentId, sKind){
  2955. var nRowNum = null;
  2956. var nFormCount = 0;
  2957. for(var i=0 ; i<gds_openFormInfo.rowcount ; i++){
  2958. var sStoredFormId = gds_openFormInfo.getColumn(i, "id");
  2959. if(sFormId == sStoredFormId){
  2960. nRowNum = i;
  2961. nFormCount++;
  2962. }
  2963. }
  2964. if(nFormCount == 0){
  2965. nRowNum = gds_openFormInfo.addRow();
  2966. }
  2967. gds_openFormInfo.setColumn(nRowNum, "id", sFormId);
  2968. gds_openFormInfo.setColumn(nRowNum, "parent_id", sParentId);
  2969. gds_openFormInfo.setColumn(nRowNum, "kind", sKind);
  2970. gds_openFormInfo.setColumn(nRowNum, "uuid", utlf_getRandomSubmitUUID());
  2971. }
  2972. /**********************************************************************************
  2973. * 함수명 : frmf_getCurrentFormKind
  2974. * 설 명 : 현재 화면의 종류를 조회한다.
  2975. * argument :
  2976. * return Type : kind ("modal", "modeless", "main")
  2977. * 작성자 : 김상목
  2978. **********************************************************************************/
  2979. function frmf_getCurrentFormKind() {
  2980. var currentScrObj = this.getOwnerFrame();
  2981. var type;
  2982. //quick view 일 경우에 대비
  2983. try {
  2984. type = currentScrObj.bgv_objScreenInfo.type;
  2985. } catch (e) {
  2986. // 메뉴에서 여는 메인은 type 정보가 없음
  2987. try {
  2988. type = currentScrObj.frmlgv_objScreenInfo.type;
  2989. } catch (e) {}
  2990. } finally {
  2991. if(utlf_isNull(type)) type = "main";
  2992. }
  2993. return type;
  2994. }
  2995. /**********************************************************************************
  2996. * 함수명 : frmf_getoOpener
  2997. * 설 명 : 화면에 소속된 상황에 따른 opener객체를 가져온다,
  2998. * argument :
  2999. * return Type : main work form, opener, getOwnerFrame()
  3000. * 작성자 : 최재원
  3001. **********************************************************************************/
  3002. function frmf_getoOpener() {
  3003. var oOpener;
  3004. if( frmf_getCurrentFormKind() == "main" ){
  3005. oOpener = frmf_getMainViewer();
  3006. }else{
  3007. if( sysf_getObjType(this) == "Form" ) oOpener = opener;
  3008. else oOpener = this.getOwnerFrame().form;
  3009. }
  3010. return oOpener;
  3011. }
  3012. /**********************************************************************************
  3013. * 함수명 : frmf_deletePopInfo
  3014. * 설 명 : 팝업정보를 gds_openFormInfo에서 삭제한다.
  3015. * argument : sPopId - 팝업 ID
  3016. * return Type : Number - 삭제된 row count
  3017. * 작성자 : 임준호
  3018. **********************************************************************************/
  3019. function frmf_deletePopInfo(sPopId){
  3020. var nRowCnt = gds_openFormInfo.rowcount;
  3021. var nDelRowCnt = 0;
  3022. for(var i=0 ; i<nRowCnt ; i++){
  3023. var sStoredPopId = gds_openFormInfo.getColumn(i, "id");
  3024. if(sStoredPopId == sPopId){
  3025. gds_openFormInfo.deleteRow(i);
  3026. nDelRowCnt++;
  3027. }
  3028. }
  3029. return nDelRowCnt;
  3030. }
  3031. /**********************************************************************************
  3032. * 함수명 : frmf_getChildPopList
  3033. * 설 명 : 폼에서 열린 팝업 목록을 가져온다.
  3034. * argument : objForm - 팝업 목록을 가져올 폼
  3035. * return Type : Array - 팝업ID 목록
  3036. * 작성자 : 임준호
  3037. **********************************************************************************/
  3038. function frmf_getChildPopList(objForm:Form){
  3039. var nRowCnt = gds_openFormInfo.rowcount;
  3040. var sFormId = objForm.name;
  3041. var arrResult = new Array();
  3042. for(var i=0 ; i<nRowCnt ; i++){
  3043. var sParentId = gds_openFormInfo.getColumn(i, "parent_id");
  3044. if(sFormId == sParentId){
  3045. arrResult.push(gds_openFormInfo.getColumn(i, "id"));
  3046. }
  3047. }
  3048. return arrResult;
  3049. }
  3050. /**********************************************************************************
  3051. * 함수명 : frmf_setCloseChildPop
  3052. * 설 명 : 화면전환시 child가 close되도록 저장
  3053. * argument :
  3054. * return Type :
  3055. * 작성자 : 임준호
  3056. **********************************************************************************/
  3057. function frmf_setCloseChildPop(){
  3058. gv_bChildClose = true;
  3059. }
  3060. /**********************************************************************************
  3061. * 함수명 : frmf_closeChildPop
  3062. * 설 명 : 화면전환시 child popup 닫기로 지정된 경우 해당 form의 child popup을 모두 닫는다.
  3063. * argument :
  3064. * return Type :
  3065. * 작성자 : 임준호
  3066. **********************************************************************************/
  3067. function frmf_closeChildPop(){
  3068. var arrPopList = null;
  3069. //if(gv_bChildClose === true){
  3070. arrPopList = frmf_getChildPopList(this);
  3071. for(var i in arrPopList){
  3072. var popup = application.popupframes[arrPopList[i]];
  3073. if(!utlf_isNull(popup)) popup.form.close();
  3074. }
  3075. //}
  3076. }
  3077. /**********************************************************************************
  3078. * 함수명 : frmf_setFocusPop
  3079. * 설 명 : 지정된 팝업을 focus한다.
  3080. * argument : sPopId - 팝업 ID
  3081. * return Type :
  3082. * 작성자 : 임준호
  3083. **********************************************************************************/
  3084. function frmf_setFocusPop(sPopId, topmost){
  3085. var objPop = application.popupframes[sPopId];
  3086. if (!utlf_isNull(objPop)) {
  3087. objPop.winlevel= (topmost) ? "topmost" : "top";
  3088. objPop.activate();
  3089. }
  3090. }
  3091. /**********************************************************************************
  3092. * 함수명 : frmf_setFocusOpener
  3093. * 설 명 : opener를 focus한다.
  3094. * argument :
  3095. * return Type :
  3096. * 작성자 : 임준호
  3097. **********************************************************************************/
  3098. function frmf_setFocusOpener(topmost){
  3099. var sPropertyNm = this.opener.parent.toString();
  3100. if(sPropertyNm == "[object Form]"){
  3101. this.opener.parent.parent.winlevel= (topmost) ? "topmost" : "top";
  3102. this.opener.parent.parent.activate();
  3103. }else if(sPropertyNm == "[object ChildFrame]"){
  3104. this.opener.parent.winlevel= (topmost) ? "topmost" : "top";
  3105. this.opener.parent.activate();
  3106. }
  3107. }
  3108. /**********************************************************************************
  3109. * 함수명 : frmf_setFocus
  3110. * 설 명 : 자기자신을 focus한다.
  3111. * argument :
  3112. * return Type :
  3113. * 작성자 : 임준호
  3114. **********************************************************************************/
  3115. function frmf_setFocus(topmost){
  3116. var sPropertyNm = this.parent.toString();
  3117. if(sPropertyNm == "[object Form]"){
  3118. this.parent.parent.winlevel= (topmost) ? "topmost" : "top";
  3119. this.parent.parent.activate();
  3120. }else if(sPropertyNm == "[object ChildFrame]"){
  3121. this.parent.winlevel= (topmost) ? "topmost" : "top";
  3122. this.parent.activate();
  3123. }
  3124. }
  3125. /**********************************************************************************
  3126. * 함수명 : frmf_openHtml
  3127. * 설명 : HTML Open 팝업(시스템에 설정된 기본 브라우저가 아닌 인터넷 익스플로러가 실행된다.)
  3128. * argument : sUrl - HTML URL
  3129. * return Type : void
  3130. * 작성자 : 임준호
  3131. **********************************************************************************/
  3132. function frmf_openHtml(sUrl){
  3133. system.execBrowser(sUrl);
  3134. }
  3135. /**********************************************************************************
  3136. * 함수명 : frmf_getMainViewer
  3137. * 설명 : main work form 객체를 반환한다.
  3138. * argument :
  3139. * return Type :
  3140. * 작성자 : 임준호
  3141. **********************************************************************************/
  3142. function frmf_getMainViewer(){
  3143. return application.mainframe.VFrameSet.FrameSet.ChildFrameWork.form.div_work;
  3144. }
  3145. /**********************************************************************************
  3146. * 함수명 : frmf_checkOpener
  3147. * 설명 : Opener가 다른 화면으로 변경되었는지 여부를 반환한다.
  3148. * argument :
  3149. * return Type : Boolean - opener 변경 여부
  3150. * 작성자 : 임준호
  3151. **********************************************************************************/
  3152. function frmf_checkOpener(){
  3153. var bRetValue = false;
  3154. if(utlf_isNull(opener)){
  3155. bRetValue = false;
  3156. }else{
  3157. bRetValue = true;
  3158. }
  3159. return bRetValue;
  3160. // var bRetValue = false;
  3161. // var sOpenerScrnid = null;
  3162. //
  3163. // if(frmf_isPopup()){
  3164. // var sPropertyNm = this.opener.parent.toString();
  3165. //
  3166. // if(sPropertyNm == "[object Form]"){
  3167. // //work팝업
  3168. // sOpenerScrnid = opener.parent.bgv_objScreenInfo.scrnid;
  3169. // }else if(sPropertyNm == "[object ChildFrame]"){
  3170. // //일반팝업
  3171. // sOpenerScrnid = opener.name;
  3172. // }
  3173. // if(sOpenerScrnid == plgv_scrnid) bRetValue = true;
  3174. // }
  3175. //
  3176. // return bRetValue;
  3177. }
  3178. /********************************************************************************************************************/
  3179. /************************* 화면이동관련 함수 *********************************************************************/
  3180. /********************************************************************************************************************/
  3181. /**********************************************************************************
  3182. * 함수명 : frmf_openForm
  3183. * 설명 : screen id로 해당 화면을 업무화면 영역에 로딩한다.
  3184. * argument : sScreenID - 업무화면의 화면ID
  3185. * objScrnInfo - 화면권한정보
  3186. * objParam - 인자값
  3187. * EX)))
  3188. * //인자값 넘길때
  3189. * var objParam = new Object();
  3190. * objParam.test1 = "A";
  3191. * objParam.test2 = "B";
  3192. * frmf_openForm("SMZSA20500", null, objParam);
  3193. *
  3194. * //인자값 가져올때
  3195. * //frmf_getMainFormParam 함수는 일회성. 한번 가져오면 인자값이 사라진다.
  3196. * var objParam = frmf_getMainFormParam();
  3197. * trace(objParam.test1);
  3198. * return Type : void
  3199. * 작성자 : 임준호
  3200. **********************************************************************************/
  3201. function frmf_openForm(sScreenID, objScrnInfo, objParam){
  3202. if(utlf_isNull(objScrnInfo)) objScrnInfo = new Object();
  3203. objScrnInfo.scrnid = sScreenID;
  3204. // url 가져오는 방법 변경
  3205. var url = sysf_getScreenInfo(sScreenID, objScrnInfo);
  3206. objScrnInfo.tfyn = url.tfyn;
  3207. objScrnInfo.scrnurlxp_real = url.scrnurlxp_real;
  3208. var bUrl = url.scrnurlxp;
  3209. frmf_openFormInternal(url.scrnurlxp, objScrnInfo, objParam);
  3210. //frmf_openFormInternal(sysf_getScreenURL(sScreenID), objScrnInfo, objParam);
  3211. /*
  3212. alert("1");
  3213. var aUrl = application.mainframe.VFrameSet.FrameSet.ChildFrameWork.form.div_work.url;
  3214. if(bUrl != aUrl){
  3215. alert("URL 변조됨 (" + bUrl + " -> " + aUrl + ")");
  3216. }else{
  3217. alert("정상");
  3218. }
  3219. */
  3220. }
  3221. /**********************************************************************************
  3222. * 함수명 : frmf_openFormInternal
  3223. * 설명 : screen url로 해당 화면을 업무화면 영역에 로딩한다.
  3224. * argument : sUrl - 서버상의 실제 XP FORM URL
  3225. * objScrnInfo - 화면정보가 담긴 오브젝트
  3226. * return Type : void
  3227. * 작성자 : 임준호
  3228. **********************************************************************************/
  3229. function frmf_openFormInternal(sUrl, objScrnInfo, objParam){
  3230. // var sChildFrameId = "ChildFrameWork";
  3231. // var objCF = new ChildFrame(sChildFrameId);
  3232. // objCF.formurl = "com_hismainxp::form_work.xfdl";
  3233. //
  3234. // application.mainframe.VFrameSet.FrameSet.addChild(sChildFrameId, objCF);
  3235. //
  3236. // objCF.openstatus = "maximize";
  3237. // objCF.dragmovetype = "none";
  3238. // objCF.showtitlebar = false;
  3239. // objCF.style.border = "0px solid #ffffff";
  3240. // objCF.autosize = true;
  3241. // objCF.show();
  3242. //
  3243. // //화면에 대한 정보를 로딩한다.
  3244. // objCF.lgv_sUrl = sUrl;
  3245. // objCF.lgv_objScreenInfo = objScrnInfo;
  3246. //trace(objParam);
  3247. agv_objMainFormParam = objParam;
  3248. //gds_openFormInfo에 팝업 정보 추가
  3249. //frmf_setFormInfo("Main", "", "Main");
  3250. application.mainframe.VFrameSet.FrameSet.ChildFrameWork.form.bgv_objScreenInfo = objScrnInfo;
  3251. //trace("===="+application.mainframe.VFrameSet.FrameSet.ChildFrameWork.form.bgv_objScreenInfo.menuitemnm);
  3252. //메뉴명
  3253. var sTitleText = "";
  3254. var stfyn = "N";
  3255. var realUrl = objScrnInfo.scrnurlxp_real;
  3256. if(utlf_isNull(realUrl)) realUrl = sUrl;
  3257. sTitleText = frmf_findTitleTextFromForm(realUrl);
  3258. if(utlf_isNull(sTitleText)) sTitleText = frmf_getBizNameByUrl(realUrl);
  3259. if(sTitleText == "default") sTitleText = "메인화면";
  3260. try {
  3261. if(objScrnInfo.isLogout)
  3262. sTitleText = "로그아웃";
  3263. } catch(e) {}
  3264. //if(utlf_isNull(objScrnInfo.menuitemnm)){
  3265. // sTitleText = frmf_getBizNameByUrl(sUrl);
  3266. if(!utlf_isNull(objScrnInfo)){
  3267. // sTitleText = objScrnInfo.menuitemnm;
  3268. stfyn = objScrnInfo.tfyn;
  3269. sscrnid = objScrnInfo.scrnid;
  3270. sitemid = objScrnInfo.itemid;
  3271. }
  3272. application.mainframe.VFrameSet.FrameSet.ChildFrameWork.form.bgv_sTitleText = sTitleText;
  3273. trace("sscrnid:"+sscrnid + ", stfyn:"+ stfyn + ", sTitleText:"+ sTitleText + ", itemid:"+sitemid);
  3274. if(stfyn != "Y"){
  3275. application.mainframe.VFrameSet.FrameSet.ChildFrameWork.form.div_work.url = "";
  3276. application.mainframe.VFrameSet.FrameSet.ChildFrameWork.form.div_work.url = sUrl;
  3277. //application.mainframe.VFrameSet.FrameSet.ChildFrameWork.form.div_hisweb.visible = false;
  3278. xxf_showTF(false);
  3279. }else{
  3280. var objScrnInfo = new Object();
  3281. objScrnInfo.menuitemnm = "";
  3282. application.mainframe.VFrameSet.FrameSet.ChildFrameWork.form.bgv_objScreenInfo = objScrnInfo;
  3283. application.mainframe.VFrameSet.FrameSet.ChildFrameWork.form.bgv_sTitleText = objScrnInfo.menuitemnm;
  3284. application.mainframe.VFrameSet.FrameSet.ChildFrameWork.form.div_work.url = "";
  3285. application.mainframe.VFrameSet.FrameSet.ChildFrameWork.form.div_work.url = "com_hismainxp::form_default.xfdl";
  3286. xxf_showTF(false);
  3287. // application.mainframe.VFrameSet.FrameSet.ChildFrameWork.form.div_work.url = "";
  3288. // //application.mainframe.VFrameSet.FrameSet.ChildFrameWork.form.div_hisweb.visible = true;
  3289. //
  3290. // xxf_showTF(true);
  3291. //
  3292. // frmf_setTitle(sTitleText, sscrnid);
  3293. //
  3294. // // 함수호출(화면전환)
  3295. // //agv_objAppWorkPath.form.div_hisweb.hisweb.document.parentWindow.execScript("openMenuItem('"+sitemid+"')","JavaScript");
  3296. // xxf_tfOpenMenuItem(sitemid);
  3297. }
  3298. /* TF와의 연계 목적 아래부분 수정. 손병은.
  3299. application.mainframe.VFrameSet.FrameSet.ChildFrameWork.form.div_work.url = "";
  3300. application.mainframe.VFrameSet.FrameSet.ChildFrameWork.form.div_work.url = sUrl;
  3301. */
  3302. }
  3303. /**********************************************************************************
  3304. * 함수명 : frmf_navigate
  3305. * 설명 : screen id로 해당 화면을 업무화면 영역에 로딩한다.
  3306. * argument : sScreenId - 업무화면의 화면ID
  3307. * objScrnInfo - 화면권한정보
  3308. * return Type : void
  3309. * 작성자 : 임준호
  3310. *********************************************************************************
  3311. function frmf_navigate(sScreenId, objScrnInfo){
  3312. frmf_openForm(sScreenID, objScrnInfo);
  3313. }
  3314. */
  3315. /********************************************************************************************************************/
  3316. /************************* 화면권한정보 함수 **********************************************************************/
  3317. /********************************************************************************************************************/
  3318. //var frmlgv_objScreenInfo = new Object(); // 화면에 대한 정보를 담고있는 오브젝트
  3319. /**********************************************************************************
  3320. * 함수명 : frmf_setSpclScrnAuth
  3321. * 설명 : 메뉴권한과 상관없이 강제로 화면의 권한을 지정한다.
  3322. * argument : auth : 권한코드(r:읽기/x:실행/p:출력)
  3323. * flag : true / false (true 인 경우 setScreenBtnDisabled()를 자동으로 호출해서 버튼컨트롤에서 지정한 _auth 를 적용시킨다.) 기본값 true
  3324. * return Type :
  3325. * 작성자 : 김상목
  3326. **********************************************************************************/
  3327. function frmf_setSpclScrnAuth(auth, flag) {
  3328. if(utlf_isNull(this.objects["ds_properties"]))
  3329. dsf_createDs("ds_properties");
  3330. if(ds_properties.rowcount == 0)
  3331. ds_properties.addRow();
  3332. ds_properties.addColumn("auth", "string");
  3333. ds_properties.setColumn(0, "auth", frmf_getAuthCode(auth));
  3334. if (flag == null) {
  3335. flag = true;
  3336. }
  3337. if (flag == true) {
  3338. // TF 그대로 복사 해놓음 추후 구현 필요
  3339. frmf_setScreenBtnDisabled();
  3340. }
  3341. }
  3342. /**********************************************************************************
  3343. * 함수명 : frmf_getAuthCode
  3344. * 설명 : 사용자가 입력하는 권한코드를 실제 코드로 변경해서 반환한다.
  3345. * argument : auth : 권한코드
  3346. * return Type : 10000000, 11000000, 11100000
  3347. * 작성자 : 김상목
  3348. **********************************************************************************/
  3349. function frmf_getAuthCode(auth) {
  3350. var authCode = "";
  3351. switch (auth.toUpperCase()) {
  3352. case 'R': authCode = "10000000"; break;
  3353. case 'X': authCode = "11000000"; break;
  3354. case 'P': authCode = "11100000"; break;
  3355. default : authCode = "";
  3356. }
  3357. return authCode;
  3358. }
  3359. /**********************************************************************************
  3360. * 함수명 : frmf_setScreenBtnDisabled
  3361. * 설명 : 버튼 권한 속성(_auth)에 따라 화면권한(RXP)을 처리한다.
  3362. * argument : documentObj 화면으로부터 obj를 받아 온다.
  3363. * return Type :
  3364. * 작성자 : 김상목
  3365. **********************************************************************************/
  3366. function frmf_setScreenBtnDisabled( documentObj ) {
  3367. // TF 그대로 복사 해놓음 추후 구현 필요
  3368. // if (documentObj == null) {
  3369. // documentObj = document;
  3370. // }
  3371. //
  3372. // var childObjCnt = documentObj.controls.length;
  3373. // var childObj;
  3374. //
  3375. // for (var i=0; i < childObjCnt; i++) {
  3376. // childObj = documentObj.controls.item(i);
  3377. //
  3378. // if (childObj.elementName == "xforms:iviewer") {
  3379. // setScreenBtnDisabled( childObj.document );
  3380. // } else if (childObj.elementName == "xforms:button") {
  3381. // var btnAuth = childObj.attribute("_auth");
  3382. // if(btnAuth.toUpperCase() == "R" || btnAuth.toUpperCase() == "X" || btnAuth.toUpperCase() == "P"){
  3383. // childObj.disabled = !checkAuth(btnAuth);
  3384. // }
  3385. // }
  3386. // }
  3387. }
  3388. /**********************************************************************************
  3389. * 함수명 : frmf_checkAuth
  3390. * 설 명 : 주어진 유형에 해당하는 버튼권한을 가져온다.
  3391. * argument : sAuth - 버튼권한유형 (R: 조회, X:실행/저장, P:출력)
  3392. * return Type : Boolean (버튼권한)
  3393. * 작성자 : 이상준
  3394. **********************************************************************************/
  3395. function frmf_checkAuth(sAuth)
  3396. {
  3397. var f = sAuth.charAt(0);
  3398. var a = frmf_getScreenAuth(sAuth);
  3399. var v = '0';
  3400. switch(f) {
  3401. case 'r': // 조회권한
  3402. case 'R':
  3403. v = a.charAt(0);
  3404. break;
  3405. case 'x': // 처리권한
  3406. case 'X':
  3407. v = a.charAt(1);
  3408. break;
  3409. case 'p':
  3410. case 'P':
  3411. v = a.charAt(2);
  3412. break;
  3413. }
  3414. if (v == '1') {
  3415. return true;
  3416. } else {
  3417. return false;
  3418. }
  3419. }
  3420. /**********************************************************************************
  3421. * 함수명 : frmf_getScreenID
  3422. * 설 명 : 화면아이디를 가져온다.
  3423. * argument : void
  3424. * return Type : String (화면코드)
  3425. * 작성자 : 이상준
  3426. **********************************************************************************/
  3427. function frmf_getScreenID(){
  3428. var ret;
  3429. // quick view 일경우에 대비
  3430. try{
  3431. if(this == "[object Tabpage]" || this == "[object Div]") {
  3432. var url = this.url;
  3433. ret = url.split("::")[1].substr(0,10);
  3434. } else {
  3435. ret = utlf_transNullToEmpty(parent.bgv_objScreenInfo.scrnid).split("_")[0];
  3436. }
  3437. }catch(e){
  3438. ret = this.name.split("_")[0];
  3439. }
  3440. return ret;
  3441. }
  3442. /**********************************************************************************
  3443. * 함수명 : frmf_getMainFormScreenID
  3444. * 설 명 : 메인 form의 화면아이디를 가져온다.
  3445. * argument : void
  3446. * return Type : String (화면코드)
  3447. * 작성자 : 임준호
  3448. **********************************************************************************/
  3449. function frmf_getMainFormScreenID(){
  3450. var ret;
  3451. // quick view 일경우에 대비
  3452. try{
  3453. //trace(this.getOwnerFrame().form.bgv_objScreenInfo.scrnid)
  3454. ret = utlf_transNullToEmpty(this.getOwnerFrame().form.bgv_objScreenInfo.scrnid);
  3455. }catch(e){
  3456. ret = this.name.split("_")[0];
  3457. }
  3458. return ret;
  3459. }
  3460. /**********************************************************************************
  3461. * 함수명 : frmf_getScreenAuth
  3462. * 설 명 : 화면권한코드를 가져온다.
  3463. * argument : void
  3464. * return Type : String (화면권한코드)
  3465. * 작성자 : 이상준
  3466. **********************************************************************************/
  3467. function frmf_getScreenAuth(auth)
  3468. {
  3469. var ret;
  3470. // quick view 일경우에 대비
  3471. try {
  3472. if(utlf_isNull(auth)) {
  3473. if(frmf_isPopup())
  3474. ret = utlf_transNullToEmpty(this.getOwnerFrame().bgv_objScreenInfo.scrnauth);
  3475. else
  3476. ret = utlf_transNullToEmpty(this.getOwnerFrame().form.bgv_objScreenInfo.scrnauth);
  3477. } else {
  3478. switch (auth.toUpperCase()) {
  3479. case 'R': ret = "10000000"; break;
  3480. case 'X': ret = "11000000"; break;
  3481. case 'P': ret = "11100000"; break;
  3482. default : ret = "";
  3483. }
  3484. }
  3485. } catch (e)
  3486. {
  3487. ret = "11100000";
  3488. }
  3489. return ret;
  3490. }
  3491. /**********************************************************************************
  3492. * 함수명 : frmf_getMenuParam
  3493. * 설 명 : 메뉴파라미터를 가져온다.
  3494. * argument : void
  3495. * return Type : String (메뉴파라미터)
  3496. * 작성자 : 이상준
  3497. **********************************************************************************/
  3498. function frmf_getMenuParam()
  3499. {
  3500. var ret;
  3501. // quick view 일경우에 대비
  3502. try {
  3503. if(frmf_isPopup())
  3504. ret = utlf_transNullToEmpty(this.getOwnerFrame().bgv_objScreenInfo.menuparam);
  3505. else
  3506. ret = utlf_transNullToEmpty(this.getOwnerFrame().form.bgv_objScreenInfo.menuparam);
  3507. } catch (e)
  3508. {
  3509. ret = "";
  3510. }
  3511. return ret;
  3512. }
  3513. /**********************************************************************************
  3514. * 함수명 : frmf_getMenuGroupCD
  3515. * 설 명 : 메뉴그룹코드를 가져온다.
  3516. * argument : void
  3517. * return Type : String (메뉴그룹코드)
  3518. * 작성자 : 이상준
  3519. **********************************************************************************/
  3520. function frmf_getMenuGroupCD()
  3521. {
  3522. var sMenuGroupCD = gv_sCurrentAuthGroup.split("|")[0];
  3523. return utlf_transNullToEmpty(sMenuGroupCD);
  3524. }
  3525. /**********************************************************************************
  3526. * 함수명 : frmf_getMenuItemCD
  3527. * 설 명 : 메뉴아이템코드를 가져온다.
  3528. * argument : void
  3529. * return Type : String (메뉴아이템코드)
  3530. * 작성자 : 이상준
  3531. **********************************************************************************/
  3532. function frmf_getMenuItemCD()
  3533. {
  3534. var ret;
  3535. // quick view 일경우에 대비
  3536. try {
  3537. if(frmf_isPopup())
  3538. ret = utlf_transNullToEmpty(this.getOwnerFrame().bgv_objScreenInfo.menuitemcd);
  3539. else
  3540. ret = utlf_transNullToEmpty(this.getOwnerFrame().form.bgv_objScreenInfo.menuitemcd);
  3541. } catch (e)
  3542. {
  3543. ret = "";
  3544. }
  3545. return ret;
  3546. }
  3547. /**********************************************************************************
  3548. * 함수명 : frmf_getPrestDeptCd
  3549. * 설 명 : 메뉴그룹의 사용처 부서코드를 가져온다.
  3550. * argument : void
  3551. * return Type : String (사용처 부서코드)
  3552. * 작성자 : 이상준
  3553. **********************************************************************************/
  3554. function frmf_getPrestDeptCd()
  3555. {
  3556. return utlf_transNullToEmpty(gv_sPrestDeptCd);
  3557. }
  3558. /********************************************************************************************************************/
  3559. /************************* 컴포넌트 공통 함수 ******************************************************************* /
  3560. /********************************************************************************************************************/
  3561. /**********************************************************************************
  3562. * 함수명 : frmf_addComboItem
  3563. * 설명 : 콤보 아이템 추가 함수
  3564. * argument : String comboID - 해당 콤보 아이디
  3565. String sLabel - 추가 할 아이템 Label
  3566. String sValue - 추가 할 아이템 Value
  3567. String nPosition - 추가 할 위치 ( "above" | "below" )
  3568. * return Type : Boolean (정상처리여부)
  3569. * 작성자 : tobesoft
  3570. **********************************************************************************/
  3571. function frmf_addComboItem( comboID, sLabel, sValue, sPosition ) {
  3572. var objCombo = eval(comboID);
  3573. //innerdataset
  3574. if(!((objCombo.innerdataset).toString() == "[object Dataset]"))
  3575. {
  3576. var objDs = eval(objCombo.innerdataset);
  3577. }
  3578. else
  3579. {
  3580. var objDs = objCombo.innerdataset;
  3581. }
  3582. if(utlf_isNull(sLabel) && utlf_isNull(sValue) ) {
  3583. sLabel = "전체";
  3584. sValue = "-";
  3585. }
  3586. if(utlf_isNull(sPosition) ) sPosition = "init";
  3587. if(sPosition == "init" || sPosition == "above")
  3588. {
  3589. var nRow = objDs.insertRow(0);
  3590. objDs.setColumn(nRow, objCombo.codecolumn, sValue);
  3591. objDs.setColumn(nRow, objCombo.datacolumn, sLabel);
  3592. }
  3593. else
  3594. {
  3595. var nRow = objDs.addRow();
  3596. objDs.setColumn(nRow, objCombo.codecolumn, sValue);
  3597. objDs.setColumn(nRow, objCombo.datacolumn, sLabel);
  3598. }
  3599. }
  3600. /**********************************************************************************
  3601. * 함수명 : frmf_addComboItemAll
  3602. * 설명 : 모든 콤보 아이템 추가 함수
  3603. * argument : String comboIDs - 해당 콤보 아이디 예)"combo1|combo2|combo3"
  3604. String label - 추가 할 아이템 Label (default="- 전 체 - ");
  3605. String sVal - 추가 할 아이템 value (default="");
  3606. * return Type : none
  3607. * 작성자 : tobesoft
  3608. ex) var comboIDs = "Combo01|Combo02|Combo03";
  3609. frmf_addComboItemAll( comboIDs, "전체", "all");
  3610. **********************************************************************************/
  3611. function frmf_addComboItemAll( comboIDs, sLabel, sVal) {
  3612. var comboIDArray = comboIDs.split("|");
  3613. if(utlf_isNull(sLabel) ) sLabel = "- 전 체 -";
  3614. if(utlf_isNull(sVal) ) sVal = "";
  3615. for( var i = 0; i < comboIDArray.length; i++ )
  3616. {
  3617. frmf_addComboItem( comboIDArray[i], sLabel, sVal);
  3618. }
  3619. }
  3620. /************************************************************************************************
  3621. * 함수명 : frmf_setInputNodeCurPid
  3622. * 설명 : setInputNodeCurText 함수와 동일한 기능. 환자번호 총 7자리로 0으로 채우는 기능 추가됨.
  3623. * argument : objComp - 컴퍼넌트 object
  3624. mask - 제거할 문자 string
  3625. * return Type : none
  3626. * 작성자 : tobesoft
  3627. ************************************************************************************************/
  3628. function frmf_setInputNodeCurPid( objComp, mask ) {
  3629. var nVal = objComp.value;
  3630. if(utlf_isNull(nVal)){
  3631. objComp.value = "";
  3632. }else{
  3633. if(!utlf_isNull(mask))
  3634. {
  3635. var sRtn = utlf_setReplaceWord(nVal, mask);
  3636. }
  3637. else
  3638. {
  3639. var sRtn =nVal;
  3640. }
  3641. //objComp.value = utlf_lPad(sRtn, 7, "0");
  3642. objComp.value = sRtn;
  3643. }
  3644. sysf_setFormUpdate();
  3645. }
  3646. /************************************************************************************************
  3647. * 함수명 : frmf_setInputNodeCurPid_Change
  3648. * 설명 : 순천향 메인 상단 화면에서 호출하게끔 추가 - 환자번호의 자리수에 맞게 0을 채움
  3649. * argument : ipt_pid - 환자번호
  3650. * return Type : rtn - 환자번호 String
  3651. * 작성자 : tobesoft
  3652. ************************************************************************************************/
  3653. function frmf_setInputNodeCurPid_Change( ipt_pid ) {
  3654. var rtn="";
  3655. if(utlf_isNull(ipt_pid))
  3656. {
  3657. return rtn;
  3658. }
  3659. var forCnt = 7-ipt_pid.length;//[2012.10.13 이성웅 수정] setValue -> makeValue
  3660. for(var i=0; i<forCnt; i++){
  3661. rtn+="0";
  3662. }
  3663. rtn+=ipt_pid;
  3664. return rtn;
  3665. }
  3666. /************************************************************************************************
  3667. * 함수명 : frmf_openImageFileDialog()
  3668. * 설명 : 이미지 파일 선택 다이알로그를 띄운다. 선택한 파일의 크기를 제한하고 싶으면 최대치 byte를 인자로 준다.
  3669. 선택한 파일 경로를 반환한다. 취소하였거나 파일크기가 최대치를 초과했을 경우 ""를 반환한다.
  3670. * argument : Integer maxBytes - 이미지 파일 제한 싸이즈(Byte)
  3671. * return Type : file Path or ""
  3672. * 작성자 : tobesoft
  3673. ************************************************************************************************/
  3674. function frmf_openImageFileDialog(maxBytes)
  3675. {
  3676. vf = new FileDialog;
  3677. vf.filter = "JPEG Files(*.jpg)|*.jpg|GIF Files(*.gif)|*.gif|BMP Files(*.bmp)|*.bmp";
  3678. var objFileList = vf.open("Image",FileDialog.MULTILOAD ,"%MYDOCUMENT%");
  3679. //if((!utlf_isNull(rtn) || rtn > 0)&& (!utlf_isNull(maxBytes) || maxBytes > 0))
  3680. if(!utlf_isNull(objFileList))
  3681. {
  3682. var nFileSize = 0;
  3683. for (var i = 0; i < objFileList.length; i++)
  3684. {
  3685. if (objFileList[i].open(VirtualFile.openRead))
  3686. {
  3687. nFileSize = objFileList[i].getFileSize();
  3688. objFileList[i].close();
  3689. if(nFileSize > maxBytes)
  3690. {
  3691. sysf_messageBox("파일 크기가 최대치("+(maxBytes/1024)+"K)를","E003");
  3692. return "";
  3693. break;
  3694. }
  3695. }
  3696. }
  3697. }
  3698. return objFileList;
  3699. }
  3700. /************************************************************************************************
  3701. * 함수명 : frmf_inputEnterKey
  3702. * 설명 : 컴퍼넌트 이벤트 호출
  3703. * argument : String compId - 컴퍼넌트 아이디
  3704. String sEventObject - EventObject ID
  3705. Object objEventInfo - 이벤트 정보가 포함된 EventInfo 오브젝트
  3706. * return Type : none
  3707. * 작성자 : tobesoft
  3708. ex) var e = new EditClickEventInfo;
  3709. frmf_inputEnterKey("Edit00", "oneditdblclick", e );
  3710. ************************************************************************************************/
  3711. function frmf_inputEnterKey(compId, sEventObject, objEventInfo )
  3712. {
  3713. var objComp = eval(compId);
  3714. eval("objComp."+sEventObject+".fireEvent(objComp,objEventInfo)");
  3715. }
  3716. /************************************************************************************************
  3717. * 함수명 : frmf_getComponents
  3718. * 설명 : 컴퍼넌트 검색
  3719. * argument : String tarNm - 검색할 컴퍼넌트 아이디
  3720. Object obj- Form Object
  3721. * return Type : null / Object
  3722. * 작성자 :
  3723. ex) frmf_getComponents("TextArea00", this, 0);
  3724. [전제] 검색하는 form의 하위에는 검색하는 이름이 하나일 경우
  3725. ************************************************************************************************/
  3726. function frmf_getComponents(tarNm, obj)
  3727. {
  3728. if( utlf_isNull(tarNm) ) return;
  3729. if( utlf_isNull(obj) ) obj = this;
  3730. var tarObj = null;
  3731. var sType;
  3732. for(var i = 0 ; i < obj.components.length; i++ )
  3733. {
  3734. sType = obj.components[i].toString().toUpperCase();
  3735. //trace("sType : "+sType + " " + obj.components[i].name);
  3736. switch(sType) {
  3737. case "[OBJECT POPUPDIV]":
  3738. case "[OBJECT MENU]":
  3739. case "[OBJECT POPUPMENU]":
  3740. continue;
  3741. break;
  3742. case "[OBJECT TABPAGE]":
  3743. case "[OBJECT TAB]":
  3744. case "[OBJECT DIV]":
  3745. default:
  3746. break;
  3747. }
  3748. if( obj.components[i].name == tarNm ){
  3749. tarObj = obj.components[i];
  3750. return obj.components[i];
  3751. }
  3752. if (obj.components[i].components)
  3753. {
  3754. switch(sType) {
  3755. case "[OBJECT TABPAGE]":
  3756. case "[OBJECT TAB]":
  3757. case "[OBJECT DIV]":
  3758. tarObj = frmf_getComponents(tarNm, obj.components[i]);
  3759. if( tarObj != null )
  3760. return tarObj;
  3761. break;
  3762. }
  3763. }
  3764. }
  3765. return tarObj;
  3766. }
  3767. /************************************************************************************************
  3768. * 함수명 : frmf_btnSetEnable
  3769. * 설명 : 버튼 enable false 시 tooltiptext가 나오도록 하기 위한 함수
  3770. * argument : Object obj - 버튼 객체
  3771. boolean enable - true, false
  3772. String tooltiptext - 툴팁 메시지
  3773. * return Type : none
  3774. * 작성자 :
  3775. ex) frmf_btnSetEnable(Button00, true, "enable 툴팁");
  3776. ************************************************************************************************/
  3777. function frmf_btnSetEnable(obj:Button, enable, tooltiptext) {
  3778. if(enable) {
  3779. obj.style.background = "";
  3780. obj.style.gradation = "";
  3781. obj.style.border = "";
  3782. obj.style.color = "";
  3783. obj.style.cursor = "";
  3784. obj.style.shadow = "";
  3785. } else {
  3786. obj.style.background = obj.currentstyle.background;
  3787. obj.style.gradation = "linear 0,0 #ffffffff 0,100 #ebebebff";
  3788. obj.style.border = "2 double #cacacaff #ffffffff";
  3789. obj.style.color = "#808080";
  3790. obj.style.cursor = "arrow";
  3791. obj.style.shadow = "outer 0,0 0 #00000000";
  3792. }
  3793. if(utlf_isNull(tooltiptext)) tooltiptext = "";
  3794. obj.tooltiptext = tooltiptext;
  3795. obj.enableevent = enable;
  3796. }
  3797. /****************************************************************************************
  3798. * Function : frmf_getBizNameByUrl
  3799. * Description : url에서 title명을 가져온다.(업무명)
  3800. * Argument : submitid (String) - submitid
  3801. filepath (String) - 파일경로
  3802. showui (Boolean) - ui 표시 여부
  3803. * return type :
  3804. * Creator : 김상목
  3805. ****************************************************************************************/
  3806. function frmf_LargeFileDownload(submitid, filepath, showui) {
  3807. if (utlf_isNull(filepath)) {
  3808. sysf_messageBox("파일 경로가 올바르지 않습니다.", "E");
  3809. return;
  3810. }
  3811. var fd = new FileDialog;
  3812. var objFilePath = null;
  3813. var multi = false;
  3814. if(typeof(filepath) != "string") {
  3815. objFilePath = fd.open("다운 받을 위치를 선택하여 주십시오", FileDialog.SELFOLDER);
  3816. multi = true;
  3817. } else {
  3818. var filenm = filepath.split(/\/|\\/); // / 또는 \ 로 split 하여 마지막 항목을 default 파일 명으로 사용한다.
  3819. var len = filenm.length;
  3820. filenm = filenm[len-1];
  3821. if(utlf_isNull(filenm)) {
  3822. sysf_messageBox("파일 이름이 올바르지 않습니다.", "E");
  3823. return;
  3824. }
  3825. objFilePath = fd.open("다운 받을 위치를 선택하여 주십시오", FileDialog.SAVE, "", filenm);
  3826. multi = false;
  3827. }
  3828. if(utlf_isNull(objFilePath)) {
  3829. sysf_messageBox("파일 저장 경로가 올바르지 않습니다.", "E");
  3830. return;
  3831. }
  3832. // 현재는 showui 무조건 true
  3833. //if (utlf_isNull(showui)) {
  3834. showui = true;
  3835. //}
  3836. var objArg = new Object();
  3837. objArg.arg_submitid = submitid;
  3838. objArg.arg_filepath = filepath;
  3839. objArg.arg_localfile = objFilePath;
  3840. objArg.arg_showui = showui;
  3841. objArg.arg_multi = multi;
  3842. var mon = sysf_getCurrentMonitorNumber();
  3843. var xpt = system.clientToScreenX(this, this.position.left) + (this.position.width - 330) / 2; // 330 파일다운로드 창 width
  3844. var ypt = system.clientToScreenY(this, this.position.top) + (this.position.height - 127) / 2; // 127 파일다운로드 창 height
  3845. frmf_modalInternal("SPZZZ00600", "com_commonxp::SPZZZ00600_파일다운로드.xfdl", objArg, false, mon, xpt, ypt);
  3846. }]]></Script>