SMSMP09205_LiveLog.xfdl 87 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <FDL version="1.5">
  3. <TypeDefinition url="..\..\..\default_typedef.xml"/>
  4. <Form id="SMSMP09205" classname="SMSMP09204_테이블정보조회" inheritanceid="" position="absolute 0 0 1351 900" onload="SMSMP09205_onload" oninit="SMSMP09205_oninit" onactivate="SMSMP09205_onactivate" titletext="Log" ontimer="SMSMP09205_ontimer" onkeydown="SMSMP09205_onkeydown">
  5. <Layouts>
  6. <Layout>
  7. <Tab id="tabMain" taborder="9" tabindex="0" scrollbars="autoboth" position="absolute 8 34 1349 895" style="background:beige URL('theme://images/bg_tab_BodyTop.png') stretch 10,26;border:1 none #808080ff ;" anchor="all" onchanged="tabMain_onchanged">
  8. <Tabpages>
  9. <Tabpage id="tabpage1" text="Live Log">
  10. <Layouts>
  11. <Layout>
  12. <TextArea id="txtcontents" taborder="0" position="absolute 3 34 1064 93" anchor="left top right" style="border:1 none #808080ff ;"/>
  13. <Grid id="grdLivelog" taborder="1" binddataset="ds_livelog" autoenter="none" useinputpanel="false" selecttype="multiarea" extendsizetype="row" cellsizingtype="both" autofittype="col" autosizingtype="none" position="absolute 98 132 837 832" anchor="all" tooltiptype="hover" onsize="Grid00_onsize" selectbandtype="allband" areaselecttype="overband" onkeydown="tabMain_tabpage1_Grid00_onkeydown" style="border:1 solid #33bbbbff,0 solid #b0b0b0ff,1 solid #b0b0b0ff,0 solid #b0b0b0ff;font:맑은 고딕,10,bold;" onselectchanged="tabMain_tabpage1_Grid00_onselectchanged" oncellclick="tabMain_tabpage1_Grid00_oncellclick">
  14. <Formats>
  15. <Format id="default">
  16. <Columns>
  17. <Column size="30"/>
  18. <Column size="20"/>
  19. <Column size="34"/>
  20. <Column size="0"/>
  21. <Column size="0"/>
  22. <Column size="0"/>
  23. <Column size="70"/>
  24. <Column size="152"/>
  25. <Column size="56"/>
  26. <Column size="56"/>
  27. <Column size="129"/>
  28. <Column size="251"/>
  29. </Columns>
  30. <Rows>
  31. <Row size="24" band="head"/>
  32. <Row size="60"/>
  33. </Rows>
  34. <Band id="head">
  35. <Cell text="M"/>
  36. <Cell col="1" text="P"/>
  37. <Cell col="2" text="No"/>
  38. <Cell col="3" text="session" autosizecol="none"/>
  39. <Cell col="4" text="user" autosizecol="none"/>
  40. <Cell col="5" text="ip" autosizecol="none"/>
  41. <Cell col="6" text="logtime" autosizecol="none"/>
  42. <Cell col="7" text="package" autosizecol="none"/>
  43. <Cell col="8" text="logtype" autosizecol="none"/>
  44. <Cell col="9" text="DML"/>
  45. <Cell col="10" text="ID"/>
  46. <Cell col="11" text="contents"/>
  47. </Band>
  48. <Band id="body">
  49. <Cell displaytype="checkbox" edittype="checkbox" text="bind:markyn"/>
  50. <Cell col="1" text="expr:ds_livelog.rowposition == currow? '▶':''"/>
  51. <Cell col="2" celltype="body" edittype="text" text="bind:line" autosizerow="none" autosizecol="none"/>
  52. <Cell col="3" displaytype="text" edittype="text" style="align:left top;" text="bind:session" autosizerow="limitmax" autosizecol="none"/>
  53. <Cell col="4" displaytype="text" edittype="text" style="align:left top;selectbackground:#c7158566;" text="bind:user" autosizerow="limitmax" autosizecol="none"/>
  54. <Cell col="5" displaytype="text" edittype="text" style="align:left top;selectbackground:#c7158566;" text="bind:ip" autosizerow="limitmax" autosizecol="none"/>
  55. <Cell col="6" displaytype="text" edittype="text" style="align:center top;" text="bind:logtime" wordwrap="char" autosizerow="limitmax" autosizecol="none"/>
  56. <Cell col="7" displaytype="text" edittype="textarea" style="align:left top;" text="bind:packagenm" wordwrap="char" autosizerow="limitmax" autosizecol="none"/>
  57. <Cell col="8" displaytype="combo" edittype="combo" style="align:left top;" text="bind:logtype" wordwrap="char" combodataset="ds_logtype" combocodecol="logtype" combodatacol="logtype" autosizerow="limitmax" autosizecol="none"/>
  58. <Cell col="9" style="align:left top;" text="bind:dml" wordwrap="none"/>
  59. <Cell col="10" style="align:left top;" text="bind:statementid" wordwrap="char"/>
  60. <Cell col="11" displaytype="text" edittype="textarea" style="align:left top;" text="bind:contents" wordwrap="char" editautoselect="false" editdisplay="edit" editacceptsenter="false" tooltiptype="mouse" autosizerow="limitmax" autosizecol="default"/>
  61. </Band>
  62. </Format>
  63. </Formats>
  64. </Grid>
  65. <Button id="btnPaste" taborder="2" text="붙여넣기" position="absolute 90 4 169 31" style="background:@gradation;" onclick="tabMain_tabpage1_btnPaste_onclick"/>
  66. <Div id="Div00" anchor="left top right" taborder="3" style="background:antiquewhite;border:1 solid #808080ff ;" position="absolute 3 95 1339 130">
  67. <Layouts>
  68. <Layout>
  69. <Combo id="cmbLogtype" taborder="0" codecolumn="logtype" datacolumn="logtype" position="absolute 2 6 93 31" innerdataset="@ds_logtype" anchor="default" onitemchanged="tabMain_tabpage1_Div00_cmbLogtype_onitemchanged"/>
  70. <CheckBox id="chkCopyContainHeader" taborder="1" text="복사 시 헤더 포함" position="absolute 1134 7 1252 26" truevalue="Y" falsevalue="N" anchor="default" visible="false"/>
  71. <Edit id="Edit00" taborder="2" position="absolute 365 6 497 31" anchor="default" onkeydown="tabMain_tabpage1_Div00_Edit00_onkeydown"/>
  72. <Button id="Button00" taborder="3" text="찾기" position="absolute 506 6 564 31" onclick="tabMain_tabpage1_Div00_Button00_onclick" anchor="default" style="background:@gradation;"/>
  73. <CheckBox id="chkSelectSql" taborder="4" text="SQL" value="N" truevalue="Y" falsevalue="N" position="absolute 99 6 145 31" anchor="default" onchanged="tabMain_tabpage1_Div00_chkSelectSql_onchanged"/>
  74. <Button id="btncontentcopy" taborder="5" text="Content Copy" position="absolute 972 4 1076 29" onclick="tabMain_tabpage1_Div00_btncontentcopy_onclick" anchor="default" visible="false"/>
  75. <Combo id="Combo01" taborder="6" innerdataset="@ds_dmltype" codecolumn="dmltype" datacolumn="dmltype" onitemchanged="tabMain_tabpage1_Div00_cmbLogtype_onitemchanged" position="absolute 149 5 240 30" anchor="default"/>
  76. <Edit id="Edit01" taborder="7" position="absolute 288 6 332 31" onkeydown="tabMain_tabpage1_Div00_Edit01_onkeydown" anchor="default"/>
  77. <Button id="Button01" taborder="9" position="absolute 580 6 604 31" text="◀" onclick="tabMain_tabpage1_Div00_Button01_onclick" anchor="default"/>
  78. <Button id="Button02" taborder="10" text="▶" onclick="tabMain_tabpage1_Div00_Button01_onclick" position="absolute 605 6 629 31" anchor="default"/>
  79. <Button id="Button03" taborder="11" text="호출내역" position="absolute 635 5 733 31" onclick="tabMain_tabpage1_Div00_Button03_onclick" anchor="default"/>
  80. <CheckBox id="CheckBox00" taborder="12" text="Wordwrap" position="absolute 742 10 835 23" onchanged="tabMain_tabpage1_Div00_CheckBox00_onchanged" value="true" anchor="default"/>
  81. </Layout>
  82. </Layouts>
  83. </Div>
  84. <Div id="divParam" anchor="all" taborder="4" style="background:#fbeff5ff;border:1 solid #808080ff ;" position="absolute 844 132 1339 831">
  85. <Layouts>
  86. <Layout>
  87. <Grid id="gridParam" taborder="2" binddataset="ds_param" useinputpanel="false" selecttype="cell" position="absolute 3 65 491 695" anchor="all" autosizingtype="none" cellsizingtype="both">
  88. <Formats>
  89. <Format id="default">
  90. <Columns>
  91. <Column size="40"/>
  92. <Column size="81"/>
  93. <Column size="118"/>
  94. </Columns>
  95. <Rows>
  96. <Row size="24" band="head"/>
  97. <Row size="24"/>
  98. </Rows>
  99. <Band id="head">
  100. <Cell celltype="head" text="No"/>
  101. <Cell col="1" text="Code"/>
  102. <Cell col="2" text="Value"/>
  103. </Band>
  104. <Band id="body">
  105. <Cell celltype="head" edittype="text" text="expr:currow"/>
  106. <Cell col="1" edittype="textarea" style="align:left middle;" text="bind:paramCd" tooltiptext="bind:paramCd"/>
  107. <Cell col="2" edittype="textarea" style="align:left middle;" text="bind:paramData" tooltiptext="bind:paramData"/>
  108. </Band>
  109. </Format>
  110. </Formats>
  111. </Grid>
  112. <Combo id="cbDsIndex" taborder="3" codecolumn="codecolumn" datacolumn="datacolumn" onitemchanged="pdivParam_cbDsIndex_onitemchanged" position="absolute 2 8 143 32" anchor="default">
  113. <Dataset id="innerdataset">
  114. <ColumnInfo>
  115. <Column id="codecolumn" size="256"/>
  116. <Column id="datacolumn" size="256"/>
  117. </ColumnInfo>
  118. <Rows>
  119. <Row>
  120. <Col id="codecolumn">cnt</Col>
  121. <Col id="datacolumn">cnt</Col>
  122. </Row>
  123. </Rows>
  124. </Dataset>
  125. </Combo>
  126. <Button id="Button00" taborder="4" text="DS 복사" position="absolute 149 9 215 32" onclick="tabMain_tabpage1_divParam_Button00_onclick" anchor="default"/>
  127. <Edit id="ipt_ds_search" taborder="5" position="absolute 2 38 491 61" ontextchanged="tabMain_tabpage1_divParam_Edit00_ontextchanged" anchor="left top right"/>
  128. <TextArea id="txtSql" taborder="6" wordwrap="char" onsetfocus="txtSql_onsetfocus" onkillfocus="txtSql_onkillfocus" onkeydown="tabMain_tabpage1_txtSql_onkeydown" visible="false" position="absolute 195 83 700 770" anchor="all" style="font:D2Coding,10,antialias;" lengthunit="utf16"/>
  129. </Layout>
  130. </Layouts>
  131. </Div>
  132. <Button id="btn_anlys_log" taborder="8" text="분석" onclick="btn_anlys_log_onclick" position="absolute 4 4 83 31"/>
  133. <Radio id="Radio00" taborder="9" columncount="2" rowcount="0" position="absolute 306 7 457 27" codecolumn="codecolumn" datacolumn="datacolumn" value="Normal" index="0">
  134. <Dataset id="innerdataset">
  135. <ColumnInfo>
  136. <Column id="codecolumn" size="256"/>
  137. <Column id="datacolumn" size="256"/>
  138. </ColumnInfo>
  139. <Rows>
  140. <Row>
  141. <Col id="codecolumn">Normal</Col>
  142. <Col id="datacolumn">Normal</Col>
  143. </Row>
  144. <Row>
  145. <Col id="codecolumn">Batch</Col>
  146. <Col id="datacolumn">Batch</Col>
  147. </Row>
  148. </Rows>
  149. </Dataset>
  150. </Radio>
  151. <Splitter id="Splitter00" position="absolute 837 132 842 831" anchor="left top bottom" style="border:1 solid #7eb1dcff ;bordertype:normal 3 3 ;">
  152. <Formats>
  153. <Format id="default">
  154. <SplitterItems id="items">
  155. <SplitterItem id="item00" bindtype="resize" position="leftortop" offset="0" componentid="grdLivelog"/>
  156. <SplitterItem id="item01" bindtype="resize" position="rightorbottom" offset="0" componentid="divParam"/>
  157. <SplitterItem id="item02" bindtype="resize" position="rightorbottom" offset="0" componentid="divCallStack"/>
  158. </SplitterItems>
  159. </Format>
  160. </Formats>
  161. </Splitter>
  162. <nuMultiCheckbox id="nuMultiCheckbox00"/>
  163. <Grid id="Grid01" taborder="10" useinputpanel="false" position="absolute 2 132 97 290" binddataset="ds_logtype_filter" onmousedown="tabMain_tabpage1_Grid01_onmousedown" style="border:1 solid #33bbbbff,0 solid #b0b0b0ff,1 solid #b0b0b0ff,0 solid #b0b0b0ff;">
  164. <Formats>
  165. <Format id="default">
  166. <Columns>
  167. <Column size="30"/>
  168. <Column size="65"/>
  169. </Columns>
  170. <Rows>
  171. <Row size="24" band="head"/>
  172. <Row size="22"/>
  173. </Rows>
  174. <Band id="head">
  175. <Cell/>
  176. <Cell col="1" text="Type"/>
  177. </Band>
  178. <Band id="body">
  179. <Cell displaytype="checkbox" edittype="checkbox" text="bind:chkyn"/>
  180. <Cell col="1" style="align:center middle;" text="bind:logtype"/>
  181. </Band>
  182. </Format>
  183. </Formats>
  184. </Grid>
  185. <Div id="divCallStack" anchor="all" taborder="11" style="background:aliceblue;border:1 solid #000000ff ;" text="Div00" visible="false" position="absolute 877 376 1371 1061">
  186. <Layouts>
  187. <Layout>
  188. <Grid id="Grid02" taborder="12" binddataset="ds_tree_callstack" useinputpanel="false" position="absolute 2 33 488 680" anchor="all" selecttype="row" treeusecheckbox="false" treeuseexpandkey="true" oncellclick="tabMain_tabpage1_divCallStack_Grid02_oncellclick">
  189. <Formats>
  190. <Format id="default">
  191. <Columns>
  192. <Column size="450"/>
  193. </Columns>
  194. <Rows>
  195. <Row size="24" band="head"/>
  196. <Row size="24"/>
  197. </Rows>
  198. <Band id="head">
  199. <Cell/>
  200. </Band>
  201. <Band id="body">
  202. <Cell displaytype="tree" edittype="tree" text="bind:func" treelevel="bind:depth" autosizecol="limitmin"/>
  203. </Band>
  204. </Format>
  205. </Formats>
  206. </Grid>
  207. <Button id="btnTreeAction" taborder="13" text="펼치기" onclick="divCallStack_btnTreeAction_onclick" position="absolute 4 5 71 30" anchor="default"/>
  208. <Button id="btnTreeAction00" taborder="14" text="접기" onclick="divCallStack_btnTreeAction_onclick" position="absolute 72 5 139 30" anchor="default"/>
  209. <CheckBox id="CheckBox00" taborder="15" text="Relate" position="absolute 156 6 246 29" falsevalue="N" truevalue="Y" value="N" anchor="default"/>
  210. </Layout>
  211. </Layouts>
  212. </Div>
  213. <Button id="btnClearLog" taborder="12" text="지우기" position="absolute 176 5 264 30" onclick="tabMain_tabpage1_btnClearLog_onclick"/>
  214. </Layout>
  215. </Layouts>
  216. </Tabpage>
  217. <Tabpage id="tabpage2" text="DataSet">
  218. <Layouts>
  219. <Layout>
  220. <Grid id="dyGrid" taborder="0" useinputpanel="false" cellsizingtype="both" autofittype="none" position="absolute 7 129 1461 822" anchor="all" selecttype="area" onkeyup="tabMain_tabpage2_dyGrid_onkeyup" autosizingtype="col" autosizebandtype="allband" onkeydown="tabMain_tabpage2_dyGrid_onkeydown">
  221. <Formats/>
  222. </Grid>
  223. <Button id="Button01" taborder="1" text="데이터셋 조회" onclick="Button01_onclick" position="absolute 9 4 110 31"/>
  224. <TextArea id="txtDataset" taborder="2" position="absolute 7 38 1464 119" anchor="left top right"/>
  225. <Button id="Button00" taborder="3" text="Paste" position="absolute 113 4 214 32" onclick="tabMain_tabpage2_Button00_onclick"/>
  226. </Layout>
  227. </Layouts>
  228. </Tabpage>
  229. </Tabpages>
  230. </Tab>
  231. <Button id="btnExportExcel" taborder="10" text="Excel" onclick="tabMain_tabpage2_btnExportExcel_onclick" position="absolute 7 5 88 30"/>
  232. <Button id="btnTest" taborder="11" text="Button00" position="absolute 1556 87 1656 112" onclick="btnTest_onclick" visible="false"/>
  233. <ImageViewer id="ImageViewer00" taborder="12" position="absolute 1772 56 2020 117" imagealign="left top" repeatcount="-1" stretch="fit" visible="false"/>
  234. <TextArea id="TextArea00" taborder="13" position="absolute 163 2 1346 31"/>
  235. <Button id="btnReload" taborder="14" text="R" position="absolute 112 5 145 30" onclick="btnReload_onclick"/>
  236. <Div id="divCapture" taborder="15" text="Div00" position="absolute 943 31 1348 154" style="background:azure;border:1 solid #000000ff ;" anchor="top right">
  237. <Layouts>
  238. <Layout width="405" height="123">
  239. <Button id="Button00" taborder="0" text="열기" position="absolute 4 6 53 32" onclick="Div00_Button00_onclick" anchor="default"/>
  240. <TextArea id="txtCaptureLog" taborder="1" position="absolute 4 78 401 117" wordwrap="none" anchor="default"/>
  241. <Edit id="Edit00" taborder="2" position="absolute 4 38 401 58" anchor="default"/>
  242. <Button id="Button01" taborder="3" text="읽기" position="absolute 56 6 105 32" onclick="Div00_Button01_onclick" anchor="default"/>
  243. <Button id="Button02" taborder="4" text="멈춤" position="absolute 108 6 157 32" onclick="Div00_Button02_onclick" anchor="default"/>
  244. <Button id="btnCaptureLogClear" taborder="5" text="지우기" position="absolute 160 6 209 32" onclick="Div00_btnCaptureLogClear_onclick" anchor="default"/>
  245. <Static id="stMsg" text="--" position="absolute 316 13 395 26" anchor="default" style="align:right middle;"/>
  246. <Button id="btnMoveLog" taborder="6" text="적용" position="absolute 218 6 267 32" onclick="Div00_btnMoveLog_onclick" anchor="default" style="background:@gradation;"/>
  247. <CheckBox id="CheckBox00" taborder="7" position="absolute 275 6 293 31" falsevalue="N" truevalue="Y" anchor="default"/>
  248. <Static id="stCapSize" position="absolute 10 61 207 74" text="Size : " anchor="default"/>
  249. </Layout>
  250. </Layouts>
  251. </Div>
  252. </Layout>
  253. </Layouts>
  254. <Objects>
  255. <Dataset id="ds_livelog" firefirstcount="0" firenextcount="0" useclientlayout="false" updatecontrol="true" enableevent="false" loadkeymode="keep" loadfiltermode="keep" reversesubsum="false" oncolumnchanged="ds_livelog_oncolumnchanged">
  256. <ColumnInfo>
  257. <Column id="line" type="STRING" size="256"/>
  258. <Column id="session" type="STRING" size="256"/>
  259. <Column id="user" type="STRING" size="256"/>
  260. <Column id="ip" type="STRING" size="256"/>
  261. <Column id="logtime" type="STRING" size="256"/>
  262. <Column id="logtype" type="STRING" size="256"/>
  263. <Column id="packagenm" type="STRING" size="256"/>
  264. <Column id="contents" type="STRING" size="99999999"/>
  265. <Column id="dml" type="STRING" size="256"/>
  266. <Column id="statementid" type="STRING" size="256"/>
  267. <Column id="markyn" type="STRING" size="256"/>
  268. <Column id="relate" type="STRING" size="256"/>
  269. </ColumnInfo>
  270. </Dataset>
  271. <Dataset id="ds_param" firefirstcount="0" firenextcount="0" useclientlayout="false" updatecontrol="true" enableevent="true" loadkeymode="keep" loadfiltermode="keep" reversesubsum="false">
  272. <ColumnInfo>
  273. <Column id="paramCd" type="STRING" size="256"/>
  274. <Column id="paramData" type="STRING" size="256"/>
  275. </ColumnInfo>
  276. </Dataset>
  277. <Dataset id="ds_filter" firefirstcount="0" firenextcount="0" useclientlayout="false" updatecontrol="true" enableevent="true" loadkeymode="keep" loadfiltermode="keep" reversesubsum="false">
  278. <ColumnInfo>
  279. <Column id="logtype" type="STRING" size="256"/>
  280. <Column id="dmltype" type="STRING" size="256"/>
  281. </ColumnInfo>
  282. <Rows>
  283. <Row/>
  284. </Rows>
  285. </Dataset>
  286. <Dataset id="ds_cond" firefirstcount="0" firenextcount="0" useclientlayout="false" updatecontrol="true" enableevent="true" loadkeymode="keep" loadfiltermode="keep" reversesubsum="false">
  287. <ColumnInfo>
  288. <Column id="paramIndex" type="STRING" size="256"/>
  289. <Column id="sql" type="STRING" size="99999999"/>
  290. <Column id="liveLog" type="STRING" size="99999999"/>
  291. <Column id="dataSetXml" type="STRING" size="99999999"/>
  292. <Column id="copyContainHeader" type="STRING" size="256"/>
  293. <Column id="logKinds" type="STRING" size="256"/>
  294. <Column id="searchkeyword" type="STRING" size="256"/>
  295. <Column id="linenum" type="STRING" size="256"/>
  296. <Column id="selLine" type="STRING" size="256"/>
  297. <Column id="selrelate" type="STRING" size="256"/>
  298. <Column id="logaddyn" type="STRING" size="256"/>
  299. </ColumnInfo>
  300. <Rows>
  301. <Row>
  302. <Col id="logaddyn"/>
  303. </Row>
  304. </Rows>
  305. </Dataset>
  306. <Dataset id="ds_logtype" firefirstcount="0" firenextcount="0" useclientlayout="false" updatecontrol="true" enableevent="true" loadkeymode="keep" loadfiltermode="keep" reversesubsum="false">
  307. <ColumnInfo>
  308. <Column id="chkyn" type="STRING" size="256"/>
  309. <Column id="logtype" type="STRING" size="256"/>
  310. </ColumnInfo>
  311. </Dataset>
  312. <Dataset id="ds_temp" firefirstcount="0" firenextcount="0" useclientlayout="false" updatecontrol="true" enableevent="true" loadkeymode="keep" loadfiltermode="keep" reversesubsum="false"/>
  313. <Dataset id="ds_cb" firefirstcount="0" firenextcount="0" useclientlayout="false" updatecontrol="true" enableevent="true" loadkeymode="keep" loadfiltermode="keep" reversesubsum="false"/>
  314. <Dataset id="ds_param_0" firefirstcount="0" firenextcount="0" useclientlayout="false" updatecontrol="true" enableevent="true" loadkeymode="keep" loadfiltermode="keep" reversesubsum="false"/>
  315. <Dataset id="ds_tmp_param" firefirstcount="0" firenextcount="0" useclientlayout="false" updatecontrol="true" enableevent="true" loadkeymode="keep" loadfiltermode="keep" reversesubsum="false"/>
  316. <Dataset id="ds_capture_log" firefirstcount="0" firenextcount="0" useclientlayout="false" updatecontrol="true" enableevent="true" loadkeymode="keep" loadfiltermode="keep" reversesubsum="false" onvaluechanged="ds_capture_log_onvaluechanged">
  317. <ColumnInfo>
  318. <Column id="logdata" type="STRING" size="99999999"/>
  319. <Column id="filepath" type="STRING" size="256"/>
  320. <Column id="curpos" type="BIGDECIMAL" size="999999999"/>
  321. <Column id="capsize" type="STRING" size="256"/>
  322. </ColumnInfo>
  323. <Rows>
  324. <Row>
  325. <Col id="logdata"/>
  326. </Row>
  327. </Rows>
  328. </Dataset>
  329. <Dataset id="ds_dmltype" firefirstcount="0" firenextcount="0" useclientlayout="false" updatecontrol="true" enableevent="true" loadkeymode="keep" loadfiltermode="keep" reversesubsum="false">
  330. <ColumnInfo>
  331. <Column id="dmltype" type="STRING" size="256"/>
  332. </ColumnInfo>
  333. </Dataset>
  334. <FilteredDataset id="ds_logtype_filter" enableevent="true" loadkeymode="keep" loadfiltermode="keep" reversesubsum="false" filterstr="logtype != ''" binddataset="@ds_logtype" oncolumnchanged="ds_logtype_filter_oncolumnchanged"/>
  335. <Dataset id="ds_marker" firefirstcount="0" firenextcount="0" useclientlayout="false" updatecontrol="true" enableevent="true" loadkeymode="keep" loadfiltermode="keep" reversesubsum="false">
  336. <ColumnInfo>
  337. <Column id="line" type="BIGDECIMAL" size="256"/>
  338. <Column id="relate" type="STRING" size="256"/>
  339. </ColumnInfo>
  340. </Dataset>
  341. <Dataset id="ds_tree_callstack" firefirstcount="0" firenextcount="0" useclientlayout="false" updatecontrol="true" enableevent="true" loadkeymode="keep" loadfiltermode="keep" reversesubsum="false" onrowposchanged="ds_tree_callstack_onrowposchanged">
  342. <ColumnInfo>
  343. <Column id="depth" type="STRING" size="256"/>
  344. <Column id="func" type="STRING" size="256"/>
  345. <Column id="line" type="STRING" size="256"/>
  346. <Column id="relate" type="STRING" size="256"/>
  347. <Column id="markyn" type="STRING" size="256"/>
  348. </ColumnInfo>
  349. </Dataset>
  350. </Objects>
  351. <Bind>
  352. <BindItem id="item3" compid="tabMain.tabpage1.txtcontents" propid="value" datasetid="ds_cond" columnid="liveLog"/>
  353. <BindItem id="item0" compid="tabMain.tabpage2.txtDataset" propid="value" datasetid="ds_cond" columnid="dataSetXml"/>
  354. <BindItem id="item4" compid="tabMain.tabpage1.Div00.chkCopyContainHeader" propid="value" datasetid="ds_cond" columnid="copyContainHeader"/>
  355. <BindItem id="item5" compid="tabMain.tabpage1.Div00.cmbLogtype" propid="value" datasetid="ds_filter" columnid="logtype"/>
  356. <BindItem id="item6" compid="tabMain.tabpage1.divParam.cbDsIndex" propid="value" datasetid="ds_cond" columnid="paramIndex"/>
  357. <BindItem id="item7" compid="tabMain.tabpage1.Radio00" propid="value" datasetid="ds_cond" columnid="logKinds"/>
  358. <BindItem id="item8" compid="tabMain.tabpage1.Div00.Edit00" propid="value" datasetid="ds_cond" columnid="searchkeyword"/>
  359. <BindItem id="item9" compid="ImageViewer00" propid="image" datasetid="Dataset00" columnid="img"/>
  360. <BindItem id="item1" compid="tabMain.tabpage1.Div00.Combo01" propid="value" datasetid="ds_filter" columnid="dmltype"/>
  361. <BindItem id="item10" compid="tabMain.tabpage1.Div00.Edit01" propid="value" datasetid="ds_cond" columnid="linenum"/>
  362. <BindItem id="item2" compid="tabMain.tabpage1.divParam.txtSql" propid="value" datasetid="ds_cond" columnid="sql"/>
  363. <BindItem id="item12" compid="tabMain.tabpage1.divCallStack.CheckBox00" propid="value" datasetid="ds_cond" columnid="selrelate"/>
  364. <BindItem id="item13" compid="divCapture.Edit00" propid="value" datasetid="ds_capture_log" columnid="filepath"/>
  365. <BindItem id="item14" compid="divCapture.txtCaptureLog" propid="value" datasetid="ds_capture_log" columnid="logdata"/>
  366. <BindItem id="item11" compid="divCapture.CheckBox00" propid="value" datasetid="ds_cond" columnid="logaddyn"/>
  367. <BindItem id="item15" compid="divCapture" propid="text" datasetid="ds_cond" columnid="capsize"/>
  368. <BindItem id="item16" compid="divCapture.stCapSize" propid="text" datasetid="ds_capture_log" columnid="capsize"/>
  369. </Bind>
  370. <InitValue>
  371. <TextArea id="TextArea00" anchor="left top right"/>
  372. </InitValue>
  373. <Script type="xscript4.0"><![CDATA[include "com_commonxp::comm_main.xjs"
  374. var arrDataSet = new Array();
  375. var arrCallStack = new Array();
  376. var objTxtSql = tabMain.tabpage1.divParam.txtSql;
  377. var objdyGrid = tabMain.tabpage2.dyGrid;
  378. var objCbDsIndex = tabMain.tabpage1.divParam.cbDsIndex;
  379. var objGridParam = tabMain.tabpage1.divParam.gridParam;
  380. var objGrdLivelog = tabMain.tabpage1.grdLivelog;
  381. var objDivParm = tabMain.tabpage1.divParam;
  382. var objDivCallStack = tabMain.tabpage1.divCallStack;
  383. var objTree = objDivCallStack.Grid02;
  384. var objDssearch = tabMain.tabpage1.divParam.ipt_ds_search;
  385. var objCaptureLog = divCapture.txtCaptureLog;
  386. var objCaptureMsg = divCapture.stMsg;
  387. var objEdtsearch = tabMain.tabpage1.Div00.Edit00;
  388. var F0 = 111;
  389. function SMSMP09205_oninit(obj:Form, e:InitEventInfo)
  390. {
  391. frmf_initForm(obj);
  392. }
  393. function SMSMP09205_onactivate(obj:Form, e:ActivateEventInfo)
  394. {
  395. tabMain.tabpage1.txtcontents.setFocus();
  396. }
  397. function SMSMP09205_onload(obj:Form, e:LoadEventInfo)
  398. {
  399. grdf_initGrid(objGridParam);
  400. fInitialize();
  401. }
  402. function fSetBackground (currow)
  403. {
  404. var retBackground = "";
  405. if (ds_livelog.rowposition == currow)
  406. {
  407. retBackground = "#f768cc";
  408. }
  409. else if (ds_livelog.getColumn(currow, "logtype") == "SQL")
  410. {
  411. retBackground = "#ECE0F8";
  412. }
  413. else if (ds_livelog.getColumn(currow, "logtype") == "CALL")
  414. {
  415. retBackground = "#efeff5";
  416. }
  417. else if (ds_livelog.getColumn(currow, "logtype") == "PARAM")
  418. {
  419. retBackground = "#F5D0A9";
  420. }
  421. else
  422. {
  423. retBackground = "";
  424. }
  425. return retBackground ;
  426. }
  427. function fInitialize()
  428. {
  429. //var sExprBackgournd = "EXPR((logtype == 'SQL' ? '#ECE0F8': (logtype == 'CALL' ? '#efeff5': (logtype == 'PARAM' ? '#F5D0A9': ''))))";
  430. //var sExprBackgournd = "EXPR(fSetBackground(currow))" ;
  431. // var sExprBackgournd = "EXPR("
  432. // + " (ds_livelog.rowposition == currow ? '#f768cc'"
  433. // + ": (markyn == 1 ? '#ffff00' "
  434. // + ": (logtype == 'SQL' ? '#ECE0F8'"
  435. // + ": (logtype == 'CALL' ? '#efeff5'"
  436. // + ": (logtype == 'PARAM' ? '#F5D0A9'"
  437. // + ": '')"
  438. // + ")))))" ;
  439. // var sExprBackgournd = "EXPR("
  440. // + " (ds_livelog.rowposition == currow ? '#c0c0c0'"
  441. // + ": (logtype == 'SQL' ? '#ECE0F8'"
  442. // + ": (logtype == 'CALL' ? '#efeff5'"
  443. // + ": (logtype == 'PARAM' ? '#F5D0A9'"
  444. // + ": '')"
  445. // + "))))" ;
  446. var sExprBackgournd = "EXPR("
  447. + " (ds_livelog.rowposition == currow ? '#c0c0c0'"
  448. + ": (logtype == 'SQL' ? ''"
  449. + ": (logtype == 'CALL' ? ''"
  450. + ": (logtype == 'PARAM' ? ''"
  451. + ": '')"
  452. + "))))" ;
  453. var sExprForegournd = "EXPR("
  454. + " (markyn == 1 ? 'red' "
  455. + ": '')"
  456. + ")";
  457. sExprBackgournd = "";
  458. for (var i = 0; i <= objGrdLivelog.getCellCount("head") - 1; i++)
  459. {
  460. if (i != 8)
  461. {
  462. sExprBackgournd = "EXPR("
  463. + " (ds_livelog.rowposition == currow ? '#ffff9d'"
  464. + ": (logtype == 'SQL' ? ''"
  465. + ": (logtype == 'CALL' ? ''"
  466. + ": (logtype == 'PARAM' ? ''"
  467. + ": '')"
  468. + "))))" ;
  469. }
  470. else
  471. {
  472. sExprBackgournd = "EXPR("
  473. + " (ds_livelog.rowposition == currow ? '#ffff9d'"
  474. + ": (logtype == 'SQL' ? '#ECE0F8'"
  475. + ": (logtype == 'CALL' ? '#efeff5'"
  476. + ": (logtype == 'PARAM' ? '#F5D0A9'"
  477. + ": '')"
  478. + "))))" ;
  479. }
  480. objGrdLivelog.setCellProperty("Body", i, "background" , sExprBackgournd);
  481. objGrdLivelog.setCellProperty("Body", i, "background2", sExprBackgournd);
  482. objGrdLivelog.setCellProperty("Body", i, "color" , sExprForegournd);
  483. objGrdLivelog.setCellProperty("Body", i, "color2" , sExprForegournd);
  484. //objGrdLivelog.setCellProperty("Body", i, "font" , "D2Coding,9,antialias");
  485. }
  486. // sExprBackgournd = "EXPR("
  487. // + " (ds_livelog.rowposition == currow ? '#c0c0c0'"
  488. // + ": (logtype == 'SQL' ? '#ECE0F8'"
  489. // + ": (logtype == 'CALL' ? '#efeff5'"
  490. // + ": (logtype == 'PARAM' ? '#F5D0A9'"
  491. // + ": '')"
  492. // + "))))" ;
  493. // {
  494. // var i = 8;
  495. // objGrdLivelog.setCellProperty("Body", i, "background" , sExprBackgournd);
  496. // objGrdLivelog.setCellProperty("Body", i, "background2", sExprBackgournd);
  497. // objGrdLivelog.setCellProperty("Body", i, "color" , sExprForegournd);
  498. // objGrdLivelog.setCellProperty("Body", i, "color2" , sExprForegournd);
  499. // }
  500. //objGrdLivelog.Band.style.selectfont = "맑은 고딕,9";
  501. var treeitemexpr = "expr:(markyn == 1 ? 'theme://images/icon_leveldown_over.png': 'theme://images/icon_treecollapse.png')";
  502. objTree.setCellProperty("Body", 0, "treeitemimage" , treeitemexpr);
  503. objTree.setCellProperty("Body", 0, "treecollapseimage" , treeitemexpr);
  504. objTree.setCellProperty("Body", 0, "treeexpandimage" , treeitemexpr);
  505. objTxtSql.position.x = 2;
  506. objTxtSql.position.y = 0;
  507. objTxtSql.position.width = objGridParam.position.width + 3;
  508. objTxtSql.position.height = objGridParam.position.height + objGridParam.position.y;
  509. objDivCallStack.position.x = objDivParm.position.x;
  510. objDivCallStack.position.y = objDivParm.position.y;
  511. objDivCallStack.position.width = objDivParm.position.width;
  512. objDivCallStack.position.height = objDivParm.position.height;
  513. ds_cond.setColumn(0, "logKinds", "Normal");
  514. dsf_addRow(ds_logtype, [{col:"chkyn", val:"1"}, {col:"logtype", val:""}]);
  515. dsf_addRow(ds_logtype, [{col:"chkyn", val:"1"},{col:"logtype", val:"CALL"}]);
  516. dsf_addRow(ds_logtype, [{col:"chkyn", val:"1"},{col:"logtype", val:"DEBUG"}]);
  517. dsf_addRow(ds_logtype, [{col:"chkyn", val:"1"},{col:"logtype", val:"SQL"}]);
  518. dsf_addRow(ds_logtype, [{col:"chkyn", val:"1"},{col:"logtype", val:"SQL-BIND"}]);
  519. dsf_addRow(ds_logtype, [{col:"chkyn", val:"1"},{col:"logtype", val:"PARAM"}]);
  520. dsf_addRow(ds_logtype, [{col:"chkyn", val:"1"},{col:"logtype", val:"INFO"}]);
  521. dsf_addRow(ds_dmltype, [{col:"dmltype", val:""}]);
  522. dsf_addRow(ds_dmltype, [{col:"dmltype", val:"SELECT"}]);
  523. dsf_addRow(ds_dmltype, [{col:"dmltype", val:"INSERT"}]);
  524. dsf_addRow(ds_dmltype, [{col:"dmltype", val:"UPDATE"}]);
  525. dsf_addRow(ds_dmltype, [{col:"dmltype", val:"DELETE"}]);
  526. dsf_addRow(ds_dmltype, [{col:"dmltype", val:"MERGE"}]);
  527. ds_cond.setColumn(0, "logaddyn", "N");
  528. }
  529. function fRemoveLine(pStr, lineCount)
  530. {
  531. var retStr = "";
  532. if ( ! utlf_isNull(pStr) )
  533. {
  534. var arrLines = pStr.split("\r");
  535. for (var i = lineCount; i < arrLines.length; i++)
  536. {
  537. retStr += arrLines[i] + "\r";
  538. }
  539. }
  540. return retStr;
  541. }
  542. function fCommentLine(pStr, lineCount)
  543. {
  544. var retStr = "";
  545. if ( ! utlf_isNull(pStr) )
  546. {
  547. var arrLines = pStr.split("\r");
  548. var inx = -1;
  549. for (var i = 0; i < arrLines.length; i++)
  550. {
  551. if ( !utlf_isNull(arrLines[i]) )
  552. inx += 1;
  553. if ( inx < lineCount )
  554. arrLines[i] = "/* " + arrLines[i] + " */";
  555. retStr += arrLines[i] + "\r";
  556. }
  557. }
  558. // 마지막 개행문자 제거
  559. return retStr.substr(0, retStr.length - 1);
  560. }
  561. function lftrace(pMsg)
  562. {
  563. //trace(pMsg);
  564. }
  565. function fIsSql(pContent)
  566. {
  567. pContent = pContent.replace("\t", " ");
  568. pContent = pContent.replace("\n", " ");
  569. var arrTmp = pContent.split("\r");
  570. var crlfCnt = arrTmp.length;
  571. var sqlyn = false;
  572. if (crlfCnt > 0)
  573. {
  574. pContent = pContent.replace("\r", " ");
  575. var strTmp = pContent.toUpperCase();
  576. if ( strTmp.indexOf(" SELECT ") > 0
  577. || strTmp.indexOf(" INSERT ") > 0
  578. || strTmp.indexOf(" UPDATE ") > 0
  579. || strTmp.indexOf(" DELETE ") > 0
  580. || strTmp.indexOf(" MERGE ") > 0
  581. )
  582. sqlyn = true;
  583. }
  584. return sqlyn;
  585. }
  586. function fSetContents(pContents, lastline, nRow, nDepth)
  587. {
  588. var contents = pContents;
  589. var sCallFunc = "";
  590. // 로그 타입을 변경하자.
  591. if ( contents.substr(0, 7) == "log sql"
  592. || contents.substr(0, 14) == "execute query "
  593. || contents.trim().substr(0, 14) == "execute update"
  594. || contents.trim().substr(0, 15) == "execute batch |"
  595. || fIsSql(contents)
  596. )
  597. {
  598. if ( contents.substr(0, 14) == "execute query " )
  599. {
  600. ds_livelog.setColumn(nRow, "logtype", "SQL-BIND");
  601. }
  602. else
  603. {
  604. ds_livelog.setColumn(nRow, "logtype", "SQL");
  605. }
  606. // dml Set
  607. var dml = fSetDml(contents, nRow);
  608. if ( contents.trim().substr(0, 14) == "execute update"
  609. // || contents.trim().substr(0, 15) == "execute batch |"
  610. )
  611. {
  612. // SQL인지 판단
  613. if ( fIsSql(ds_livelog.getColumn(nRow-1, "contents")) )
  614. {
  615. ds_livelog.setColumn(nRow - 1, "logtype", "SQL");
  616. var tmpcnts = ds_livelog.getColumn(nRow-1, "contents");
  617. fSetDml(tmpcnts , nRow - 1);
  618. if (contents.indexOf('?') >= 0)
  619. {
  620. ds_livelog.setColumn(nRow, "logtype", "SQL-BIND");
  621. }
  622. }
  623. }
  624. var nStrPos = lastline.indexOf("/*");
  625. var nEndPos = lastline.lastIndexOf("*/");
  626. if ( nStrPos >= 0 )
  627. lastline = lastline.substr(nStrPos, nEndPos + 2);
  628. else
  629. lastline = "";
  630. if ( contents.substr(0, 14) == "execute query "
  631. || contents.substr(0, 14) == "execute batch "
  632. )
  633. {
  634. var tmp = fCommentLine(contents, 1);
  635. var arrTmpLine = tmp.split("\r");
  636. contents = "";
  637. for (var i = 0; i < arrTmpLine.length - 2; i++)
  638. {
  639. contents += arrTmpLine[i] + "\r"; //(i == arrTmpLine.length - 1 ?"":"\r");
  640. }
  641. var nStrPos = lastline.indexOf("/*");
  642. var nEndPos = lastline.lastIndexOf("*/");
  643. if ( nStrPos >= 0)
  644. lastline = lastline.substr(nStrPos, nEndPos + 2);
  645. contents = lastline + "\r" + contents + "\r" + lastline + "\r ;";
  646. }
  647. else
  648. {
  649. //trace("lastline : " + lastline);
  650. switch (dml)
  651. {
  652. case "SELECT":
  653. case "INSERT":
  654. contents = lastline + "\r" + fCommentLine(contents, 1) + "\r ;";
  655. break;
  656. case "MERGE":
  657. case "DELETE":
  658. case "UPDATE":
  659. contents = lastline + "\r" + contents + "\r ;";
  660. break;
  661. }
  662. }
  663. var arrTmp = lastline.split(" ");
  664. ds_livelog.setColumn(nRow, "statementid", arrTmp[2]);
  665. ds_livelog.setColumn(nRow, "contents", contents);
  666. ds_livelog.setColumn(nRow , "relate", arrCallStack.toString());
  667. }
  668. // Call Stack
  669. else if ( contents.indexOf("() starts.") >= 0 )
  670. {
  671. ds_livelog.setColumn(nRow, "logtype", "CALL");
  672. nDepth += 1;
  673. var objString = "";
  674. ds_livelog.setColumn(nRow, "contents", objString.padLeft(nDepth, "#") + "" + contents);
  675. var id = contents.substr(0, contents.indexOf(" "));
  676. if (id != "executeQuery" && id != "executeBatch" && id != "executeUpdate")
  677. {
  678. ds_livelog.setColumn(nRow, "statementid", id);
  679. // 관련
  680. arrCallStack.push(nRow + 1);
  681. ds_livelog.setColumn(nRow , "relate", arrCallStack.toString());
  682. // CallStack 적용하기
  683. var row = ds_tree_callstack.addRow();
  684. ds_tree_callstack.setColumn(row, "depth", nDepth);
  685. ds_tree_callstack.setColumn(row, "func", id);
  686. ds_tree_callstack.setColumn(row, "line", nRow + 1);
  687. ds_tree_callstack.setColumn(row, "relate", arrCallStack.toString());
  688. ds_tree_callstack.setColumn(row, "markyn", 0);
  689. }
  690. else
  691. {
  692. ds_livelog.setColumn(nRow, "logtype", "INFO");
  693. ds_livelog.setColumn(nRow , "relate", arrCallStack.toString());
  694. }
  695. }
  696. else if ( contents.indexOf("() ends.") >= 0 )
  697. {
  698. var cnts = utlf_transNullToEmpty(ds_livelog.getColumn(nRow, "contents"));
  699. cnts = cnts.replace("\t", "");
  700. ds_livelog.setColumn(nRow, "logtype", "CALL");
  701. var objString = "";
  702. ds_livelog.setColumn(nRow, "contents", objString.padLeft(nDepth, "#") + "" + contents);
  703. nDepth -= 1;
  704. var id = contents.substr(0, contents.indexOf("("));
  705. if (id != "executeQuery" && id != "executeBatch" && id != "executeUpdate")
  706. {
  707. // ds_livelog.setColumn(nRow, "statementid", id);
  708. ds_livelog.setColumn(nRow , "relate", arrCallStack.toString());
  709. arrCallStack.pop();
  710. }
  711. else
  712. {
  713. ds_livelog.setColumn(nRow, "logtype", "INFO");
  714. ds_livelog.setColumn(nRow , "relate", arrCallStack.toString());
  715. }
  716. }
  717. else
  718. {
  719. // ltrace("aa : " +contents.trim().substr(0, 18) );
  720. // var re1 = new RegExp("\([0-9]+\)", "g");
  721. // var re2 = new RegExp("\[[0-9]+\]", "g");
  722. if ( contents.indexOf("[0]") >= 0
  723. || contents.indexOf("[1]") >= 0
  724. || contents.indexOf("[2]") >= 0
  725. || contents.indexOf("[3]") >= 0
  726. || contents.indexOf("[4]") >= 0
  727. || contents.indexOf("[5]") >= 0
  728. || contents.indexOf("[6]") >= 0
  729. || contents.indexOf("[7]") >= 0
  730. || contents.indexOf("[8]") >= 0
  731. || contents.indexOf("[9]") >= 0
  732. || contents.indexOf("(0)") >= 0
  733. || contents.indexOf("(1)") >= 0
  734. || contents.indexOf("(2)") >= 0
  735. || contents.indexOf("(3)") >= 0
  736. || contents.indexOf("(4)") >= 0
  737. || contents.indexOf("(5)") >= 0
  738. || contents.indexOf("(6)") >= 0
  739. || contents.indexOf("(7)") >= 0
  740. || contents.indexOf("(8)") >= 0
  741. || contents.indexOf("(9)") >= 0
  742. || contents.trim().substr(0, 19) == "execute batch param"
  743. )
  744. {
  745. ds_livelog.setColumn(nRow, "logtype", "PARAM");
  746. ds_livelog.setColumn(nRow, "contents", contents);
  747. }
  748. else
  749. {
  750. ds_livelog.setColumn(nRow, "contents", contents);
  751. }
  752. ds_livelog.setColumn(nRow , "relate", arrCallStack.toString());
  753. }
  754. return nDepth;
  755. }
  756. function btn_anlys_log_onclick(obj:Button, e:ClickEventInfo)
  757. {
  758. this.killTimer(54);
  759. fAnalysisLiveLog(ds_cond.getColumn(0, "logKinds"), "N");
  760. ds_logtype_filter.enableevent = false;
  761. for(var i = 0; i < ds_logtype_filter.rowcount; i++)
  762. {
  763. ds_logtype_filter.setColumn(i, "chkyn", "1");
  764. }
  765. ds_logtype_filter.enableevent = true;
  766. ds_marker.clearData();
  767. }
  768. function fClearLogConfig()
  769. {
  770. ds_marker.clearData();
  771. ds_tree_callstack.clearData();
  772. ds_livelog.clearData();
  773. ds_cond.setColumn (0, "selLine", -1);
  774. ds_filter.setColumn(0, "logtype", "");
  775. ds_filter.setColumn(0, "dmltype", "");
  776. }
  777. function fAnalysisLiveLog(logKinds, addYn)
  778. {
  779. try {
  780. ds_tree_callstack.enableevent = false;
  781. ds_livelog.updatecontrol = false;
  782. ds_livelog.enableevent = false;
  783. var logcontents = ds_cond.getColumn(0, "liveLog");
  784. if ( utlf_isNull ( logcontents ) )
  785. {
  786. throw new Error("999", "입력된 값이 없습니다.");
  787. }
  788. this.setWaitCursor(true,true);
  789. var nRow = -1;
  790. var contents = "";
  791. var tmpcontent = "";
  792. var arrcontent = "";
  793. var arrTmp;
  794. var user = "";
  795. var ip = "";
  796. var logtime = "";
  797. var logtype = "";
  798. var packagenm = "";
  799. var lastline = "";
  800. var nDepth = -1;
  801. var bIsStartRow = false;
  802. var row = 0;
  803. var startRow = 0;
  804. var line = 0;
  805. if (addYn == "N")
  806. {
  807. // 초기화
  808. fClearLogConfig();
  809. startRow = 0;
  810. }
  811. else
  812. {
  813. startRow = ds_livelog.rowcount;
  814. line = startRow;
  815. }
  816. var logline = logcontents.split("\n");
  817. // 로그 한 줄씩 읽어드림.
  818. for (var i = startRow; i < logline.length + startRow ; i++)
  819. {
  820. if ( logKinds == "Normal")
  821. {
  822. var sessionLength = logline[row].indexOf("[");
  823. var session = logline[row].substr(0,sessionLength);
  824. if ( utlf_isNum(session) )
  825. {
  826. if ( nRow >= 0 )
  827. {
  828. nDepth = fSetContents(contents, lastline, nRow, nDepth);
  829. }
  830. tmpcontent = logline[row].substr(sessionLength);
  831. arrcontent = tmpcontent.split("]");
  832. arrTmp = arrcontent[0].trim().substr(0).split("=");
  833. user = arrTmp[2].trim().substr(0, arrTmp[2].trim().length - 3);
  834. ip = arrTmp[3].trim();
  835. line += 1;
  836. logtime = arrcontent[1].trim().substr(1);
  837. logtype = arrcontent[2].trim().substr(1);
  838. packagenm = arrcontent[3].trim().substr(1);
  839. var arrTmp = packagenm.split(".");
  840. packagenm = arrTmp[2] + "_" + arrTmp[3];
  841. for (var j = 4; j < arrTmp.length; j++)
  842. packagenm += "\r" + arrTmp[j];
  843. var statementid = "";
  844. nRow = fDataSetAddRow(line, session, user, ip, logtime.trim(), logtype, packagenm, statementid);
  845. contents = "";
  846. for (var j = 4; j < arrcontent.length; j++)
  847. contents += arrcontent[j].trim() + (j == arrcontent.length - 1 ? "" : "]");
  848. contents += "\r";
  849. }
  850. else
  851. {
  852. contents += logline[row];
  853. if ( !utlf_isNull (logline[row].trim()) )
  854. lastline = logline[row].trim();
  855. }
  856. }
  857. else if ( logKinds == "Batch" )
  858. {
  859. arrcontent = logline[row].split("]");
  860. logtime = arrcontent[0].trim().substr(1);
  861. if ( utlf_isValidDateTime(logtime, "YYYY.MM.DD hh:mm:ss") )
  862. {
  863. if ( nRow >= 0 )
  864. {
  865. nDepth = fSetContents(contents, lastline, nRow, nDepth);
  866. }
  867. line += 1;
  868. session = arrcontent[1].trim().substr(1);
  869. logtype = arrcontent[2].trim().substr(1);
  870. packagenm = arrcontent[3].trim().substr(1);
  871. nRow = fDataSetAddRow(line, session, user, ip, logtime.trim(), logtype, packagenm);
  872. contents = "";
  873. for (var j = 4; j < arrcontent.length; j++)
  874. contents += arrcontent[j].trim() + (j == arrcontent.length - 1 ? "" : "]");
  875. contents += "\r";
  876. }
  877. else
  878. {
  879. contents += logline[row];
  880. if ( !utlf_isNull (logline[row].trim()) )
  881. lastline = logline[row].trim();
  882. }
  883. }
  884. row ++;
  885. }
  886. //trace(contents);
  887. nDepth = fSetContents(contents, lastline, nRow, nDepth);
  888. ds_livelog.updatecontrol = true;
  889. ds_livelog.enableevent = true;
  890. if (addYn == "N")
  891. {
  892. fSetRowpostionLivelog(0);
  893. }
  894. else
  895. {
  896. fSetRowpostionLivelog(startRow);
  897. }
  898. ds_tree_callstack.enableevent = true;
  899. //ds_livelog.updatecontrol = true;
  900. }catch(e)
  901. {
  902. alert("exception : " + e.description);
  903. this.killTimer(54);
  904. }
  905. finally{
  906. this.setWaitCursor(false,true);
  907. ds_tree_callstack.enableevent = true;
  908. ds_livelog.updatecontrol = true;
  909. ds_livelog.enableevent = true;
  910. }
  911. }
  912. function fDataSetAddRow(line, session, user, ip, logtime, logtype, packagenm, statementid)
  913. {
  914. var nRow = ds_livelog.addRow();
  915. ds_livelog.setColumn(nRow, "line", line);
  916. ds_livelog.setColumn(nRow, "session", session);
  917. ds_livelog.setColumn(nRow, "user", user);
  918. ds_livelog.setColumn(nRow, "ip", ip);
  919. ds_livelog.setColumn(nRow, "logtime", logtime);
  920. ds_livelog.setColumn(nRow, "logtype", logtype);
  921. ds_livelog.setColumn(nRow, "packagenm", packagenm);
  922. //ds_livelog.setColumn(nRow, "statementid", statementid);
  923. return nRow ;
  924. }
  925. // 붙여넣기 버튼
  926. function tabMain_tabpage1_btnPaste_onclick(obj:Button, e:ClickEventInfo)
  927. {
  928. var sClipText = system.getClipboard("CF_TEXT");
  929. //lftrace( sClipText );
  930. if ( ! utlf_isNull(sClipText) )
  931. {
  932. ds_cond.setColumn(0, "liveLog", sClipText);
  933. // 로그 분석
  934. fAnalysisLiveLog(ds_cond.getColumn(0, "logKinds"), "N");
  935. if (tabMain.tabpage1.Div00.chkSelectSql.value == "Y")
  936. {
  937. ds_filter.setColumn(0, "logtype", "SQL");
  938. ds_livelog.filter ("logtype == 'SQL';");
  939. }
  940. }
  941. }
  942. // logtype 필터 콤보박스
  943. function tabMain_tabpage1_Div00_cmbLogtype_onitemchanged(obj:Combo, e:ItemChangeEventInfo)
  944. {
  945. var logtype = utlf_transNullToEmpty(ds_filter.getColumn(0, "logtype"));
  946. var dmltype = utlf_transNullToEmpty(ds_filter.getColumn(0, "dmltype"));
  947. if ( utlf_isNull(logtype) && utlf_isNull(dmltype) )
  948. {
  949. ds_livelog.filter ("");
  950. ds_logtype_filter.enableevent = false;
  951. for (var i = 0; i < ds_logtype_filter.rowcount; i++)
  952. {
  953. ds_logtype_filter.setColumn(i, "chkyn", "1");
  954. }
  955. ds_logtype_filter.enableevent = true;
  956. }
  957. else
  958. {
  959. var filter = "";
  960. filter += " ( logtype == '" + logtype + "' || '" + logtype + "' == '') " ;
  961. filter += "&& ( dml == '" + dmltype + "' || '" + dmltype + "' == '')" ;
  962. ds_livelog.filter (filter);
  963. ds_logtype_filter.enableevent = false;
  964. for (var i = 0; i < ds_logtype_filter.rowcount; i++)
  965. {
  966. if (logtype == ds_logtype_filter.getColumn(i, "logtype"))
  967. {
  968. ds_logtype_filter.setColumn(i, "chkyn", "1");
  969. }
  970. else
  971. {
  972. ds_logtype_filter.setColumn(i, "chkyn", "0");
  973. }
  974. }
  975. ds_logtype_filter.enableevent = true;
  976. }
  977. }
  978. function ds_logtype_filter_oncolumnchanged(obj:FilteredDataset, e:DSColChangeEventInfo)
  979. {
  980. var logtype = "(1 == 0 ";
  981. var dmltype = utlf_transNullToEmpty(ds_filter.getColumn(0, "dmltype"));
  982. for(var i = 0; i < ds_logtype_filter.rowcount; i++)
  983. {
  984. if ( utlf_transNullToEmpty(ds_logtype_filter.getColumn(i, "chkyn")) == "1" )
  985. {
  986. logtype += " || logtype == '" + ds_logtype_filter.getColumn(i, "logtype") + "'";
  987. }
  988. }
  989. logtype += ")";
  990. var filter = logtype;
  991. //filter += " ( logtype == '" + logtype + "' || '" + logtype + "' == '')" ;
  992. filter += "&& ( dml == '" + dmltype + "' || '" + dmltype + "' == '')" ;
  993. ds_livelog.filter (filter);
  994. }
  995. // Parameter Json 파일을 Dataset으로 만듬.
  996. function fSetParamDataset(pData, ds)
  997. {
  998. var sTmp = "";
  999. var paramCd, paramData;
  1000. var bStart = false;
  1001. var bEnd = false;
  1002. var nRow = -1;
  1003. /*lftrace(" ds : " + ds + ", pData : " + pData ); */
  1004. //lftrace("ds :::: " + ds);
  1005. dsf_createDs ("ds_param_" + ds);
  1006. var ds = eval("ds_param_" + ds);
  1007. if( utlf_isNull(ds.getColumnInfo("paramCd")) )
  1008. ds.addColumn("paramCd", "string");
  1009. if( utlf_isNull(ds.getColumnInfo("paramData")) )
  1010. ds.addColumn("paramData", "string");
  1011. ds.clearData();
  1012. // lftrace("pData : " + pData);
  1013. for (var i = 0; i < pData.length; i++)
  1014. {
  1015. if ( bStart )
  1016. {
  1017. sTmp += pData.charAt(i);
  1018. }
  1019. if ( pData.charAt(i) == "}" )
  1020. {
  1021. sTmp = sTmp.substr(0, sTmp.length-1);
  1022. var arrToken = sTmp.split(":");
  1023. paramCd = arrToken[0];
  1024. paramData = arrToken[1];
  1025. //lftrace(" Add Row()");
  1026. nRow = ds.addRow();
  1027. ds.setColumn(nRow, "paramCd" , paramCd);
  1028. ds.setColumn(nRow, "paramData", paramData);
  1029. bStart = false;
  1030. sTmp = "";
  1031. }
  1032. if ( pData.charAt(i) == "{" )
  1033. {
  1034. bStart = true;
  1035. }
  1036. }
  1037. }
  1038. function indexOfRev(str, key, inx)
  1039. {
  1040. var retIndex = -1;
  1041. for(var i = inx; i >= 0; i--)
  1042. {
  1043. if (str.charAt(i) == key)
  1044. {
  1045. retIndex = i;
  1046. break;
  1047. }
  1048. }
  1049. return retIndex ;
  1050. }
  1051. // Parameter 파일을 파싱
  1052. function fGetParameter(rowposition)
  1053. {
  1054. var nDsCount = 0;
  1055. var sLine = "";
  1056. var contents = ds_livelog.getColumn(ds_livelog.rowposition, "contents");
  1057. ds_param_0.clearData();
  1058. // Normal
  1059. if ( contents.indexOf("execute batch param") < 0)
  1060. {
  1061. var nFirstPos = -1;
  1062. var nEndPos = -1;
  1063. var nDsFirstPos = 0;
  1064. var nDsEndPos = -1;
  1065. var dsName = "";
  1066. var dsPreName = "";
  1067. var arrDsNames = new Array();
  1068. var nDsIndex = 0;
  1069. var bNullDs = false;
  1070. nDsCount = 0;
  1071. var tmpWord = "";
  1072. var arrTerm = new Array();
  1073. var ch = "";
  1074. var dsData = "";
  1075. // ValueObjectAssembler
  1076. if ( contents.substr(0, 1).trim() == "{")
  1077. {
  1078. //lftrace("ValueObjectAssembler : " + contents);
  1079. for (var i = 0; i < 10 ; i++)
  1080. {
  1081. arrTerm[i] = false;
  1082. }
  1083. for(var i = 0; i < contents.length; i++)
  1084. {
  1085. ch = contents.charAt(i);
  1086. switch (ch)
  1087. {
  1088. case "{":
  1089. if (arrTerm[6] == true || arrTerm[7] == true)
  1090. {
  1091. tmpWord += ch;
  1092. continue;
  1093. //trace(ch + " : " + (arrTerm[0] == true ? "Y" : "N") + ", " + (arrTerm[1] == true ? "Y" : "N") + ", " + (arrTerm[2] == true ? "Y" : "N") + ", " + (arrTerm[3] == true ? "Y" : "N") + ", " + (arrTerm[4] == true ? "Y" : "N") + ", " + (arrTerm[5] == true ? "Y" : "N") + ", " + (arrTerm[6] == true ? "Y" : "N") + ", " + (arrTerm[7] == true ? "Y" : "N") + ", " + " tmpword : " + tmpWord);
  1094. }
  1095. if (arrTerm[0] == false) // DataSet List Start
  1096. {
  1097. //lftrace("시작");
  1098. arrTerm[0] = true; // DataSet List Start
  1099. arrTerm[1] = true; // DsName
  1100. }
  1101. break;
  1102. case "=":
  1103. if (arrTerm[6] == true || arrTerm[7] == true)
  1104. {
  1105. tmpWord += ch;
  1106. continue;
  1107. }
  1108. if ( arrTerm[1] == true ) // DsName Start
  1109. {
  1110. dsName = tmpWord.replace("\r", "").replace(" ","");
  1111. tmpWord = "";
  1112. arrTerm[1] = false; // DsName End
  1113. arrTerm[2] = true; // DataSet Start
  1114. arrTerm[3] = false; // DataSet End
  1115. }
  1116. break;
  1117. case "}":
  1118. if (arrTerm[6] == true || arrTerm[7] == true)
  1119. {
  1120. tmpWord += ch;
  1121. continue;
  1122. }
  1123. break;
  1124. case ",":
  1125. if (arrTerm[6] == true || arrTerm[7] == true)
  1126. {
  1127. tmpWord += ch;
  1128. continue;
  1129. }
  1130. if( arrTerm[2] == true && tmpWord.trim().substr(0, 4) == "null")
  1131. {
  1132. lftrace("DataSet Data is null ");
  1133. var ds = fSetParamDataset("", dsName + "_" + nDsIndex);
  1134. arrDsNames[nDsCount] = dsName + "_" + nDsIndex;
  1135. nDsCount++;
  1136. tmpWord = "";
  1137. arrTerm[1] = true;
  1138. arrTerm[2] = false;
  1139. arrTerm[3] = true;
  1140. }
  1141. else if(arrTerm[6] == false)
  1142. {
  1143. arrTerm[1] = true; // DsName
  1144. }
  1145. break;
  1146. case "[":
  1147. if (arrTerm[6] == true || arrTerm[7] == true)
  1148. {
  1149. tmpWord += ch;
  1150. //trace(ch + " : " + (arrTerm[0] == true ? "Y" : "N") + ", " + (arrTerm[1] == true ? "Y" : "N") + ", " + (arrTerm[2] == true ? "Y" : "N") + ", " + (arrTerm[3] == true ? "Y" : "N") + ", " + (arrTerm[4] == true ? "Y" : "N") + ", " + (arrTerm[5] == true ? "Y" : "N") + ", " + (arrTerm[6] == true ? "Y" : "N") + ", " + (arrTerm[7] == true ? "Y" : "N") + ", " + " tmpword : " + tmpWord);
  1151. continue;
  1152. }
  1153. if ( arrTerm[4] == false && arrTerm[5] == false)
  1154. {
  1155. arrTerm[4] = true; // DataSet Index Start
  1156. }
  1157. else if ( arrTerm[5] == true) // DataSet Index End
  1158. {
  1159. arrTerm[6] = true; // DataSet Start
  1160. }
  1161. break;
  1162. case "]":
  1163. if (arrTerm[7] == true)
  1164. {
  1165. tmpWord += ch;
  1166. //trace(ch + " : " + (arrTerm[0] == true ? "Y" : "N") + ", " + (arrTerm[1] == true ? "Y" : "N") + ", " + (arrTerm[2] == true ? "Y" : "N") + ", " + (arrTerm[3] == true ? "Y" : "N") + ", " + (arrTerm[4] == true ? "Y" : "N") + ", " + (arrTerm[5] == true ? "Y" : "N") + ", " + (arrTerm[6] == true ? "Y" : "N") + ", " + (arrTerm[7] == true ? "Y" : "N") + ", " + " tmpword : " + tmpWord);
  1167. continue;
  1168. }
  1169. if (arrTerm[4] == true && arrTerm[6] == false)
  1170. {
  1171. nDsIndex = tmpWord.trim();
  1172. //lftrace("DsName /" + dsName + "/ DataSet Index /" + tmpWord.trim() + "/");
  1173. tmpWord = "";
  1174. arrTerm[5] = true; // DataSet Index End
  1175. }
  1176. else if (arrTerm[6] == true )
  1177. {
  1178. dsData = tmpWord.trim();
  1179. //lftrace("DataSet Data /"+tmpWord.trim() +"/");
  1180. var ds = fSetParamDataset(tmpWord.trim(), dsName + "_" + nDsIndex );
  1181. arrDsNames[nDsCount] = dsName + "_" + nDsIndex;
  1182. nDsCount++;
  1183. arrTerm[4] = false;
  1184. arrTerm[5] = false;
  1185. arrTerm[6] = false;
  1186. tmpWord = "";
  1187. }
  1188. break;
  1189. case "\"":
  1190. //lftrace(" afdafd : " + tmpWord.trim());
  1191. if (arrTerm[7] == true)
  1192. {
  1193. arrTerm[7] = false;
  1194. }
  1195. else
  1196. {
  1197. arrTerm[7] = true;
  1198. }
  1199. break;
  1200. default:
  1201. tmpWord += ch;
  1202. break;
  1203. }
  1204. //trace(ch + " : " + (arrTerm[0] == true ? "Y" : "N") + ", " + (arrTerm[1] == true ? "Y" : "N") + ", " + (arrTerm[2] == true ? "Y" : "N") + ", " + (arrTerm[3] == true ? "Y" : "N") + ", " + (arrTerm[4] == true ? "Y" : "N") + ", " + (arrTerm[5] == true ? "Y" : "N") + ", " + (arrTerm[6] == true ? "Y" : "N") + ", " + (arrTerm[7] == true ? "Y" : "N") + ", " + " tmpword : " + tmpWord);
  1205. }
  1206. }
  1207. else
  1208. {
  1209. lftrace("ValueObject");
  1210. for (var i = 0; i < 10 ; i++)
  1211. {
  1212. arrTerm[i] = false;
  1213. }
  1214. lftrace("contents : " + contents);
  1215. // contents = contents.replace("(", " ");
  1216. // contents = contents.replace(")", " ");
  1217. for (var i = 0; i < contents.length; i++)
  1218. {
  1219. ch = contents.charAt(i);
  1220. switch (ch)
  1221. {
  1222. case "[":
  1223. if (arrTerm[0] == false && arrTerm[1] == false) // DS Index Start
  1224. {
  1225. arrTerm[0] = true; // DS Index Start
  1226. }
  1227. else if (arrTerm[1] == true && arrTerm[3] == false)
  1228. {
  1229. //lftrace("tmpWord : " + tmpWord);
  1230. arrTerm[2] = true; // Ds Content Start
  1231. tmpWord = "";
  1232. }
  1233. else
  1234. {
  1235. tmpWord += ch;
  1236. }
  1237. break;
  1238. case "]":
  1239. if (arrTerm[0] == true && arrTerm[2] == false) // Ds Index Start ?
  1240. {
  1241. arrTerm[1] = true; // Ds Index End
  1242. }
  1243. else if (arrTerm[2] == true && arrTerm[3] == false) // Ds Conent Start ?
  1244. {
  1245. arrTerm[0] = false;
  1246. arrTerm[1] = false;
  1247. arrTerm[2] = false;
  1248. lftrace("Ds Conent : " + tmpWord);
  1249. dsName = nDsCount;
  1250. lftrace("tmpWord : " + tmpWord);
  1251. var ds = fSetParamDataset(tmpWord, dsName);
  1252. arrDataSet.push(ds);
  1253. arrDsNames[nDsCount] = dsName;
  1254. nDsCount ++;
  1255. }
  1256. else
  1257. {
  1258. tmpWord += ch;
  1259. }
  1260. break;
  1261. case "(":
  1262. if (arrTerm[0] == false && arrTerm[1] == false) // DS Index Start
  1263. {
  1264. arrTerm[0] = true; // DS Index Start
  1265. }
  1266. else
  1267. {
  1268. tmpWord += ch;
  1269. }
  1270. break;
  1271. case ")":
  1272. if (arrTerm[0] == true && arrTerm[2] == false) // Ds Index Start ?
  1273. {
  1274. arrTerm[1] = true; // Ds Index End
  1275. }
  1276. else
  1277. {
  1278. tmpWord += ch;
  1279. }
  1280. break;
  1281. case "\"":
  1282. if (arrTerm[3] == false) // 따움표 시작?
  1283. {
  1284. arrTerm[3] = true;
  1285. }
  1286. else
  1287. {
  1288. arrTerm[3] = false;
  1289. }
  1290. break;
  1291. default:
  1292. //if (arrTerm[0] == true)
  1293. tmpWord += ch;
  1294. break;
  1295. }
  1296. }
  1297. }
  1298. // Parameter Dataset이 여러 개 인 경우 Combo에 세팅을 함.
  1299. if ( nDsCount >= 0)
  1300. {
  1301. var cbds = objCbDsIndex.innerdataset;
  1302. var nRow = -1;
  1303. cbds.clearData();
  1304. for (var i = 0; i < nDsCount; i++)
  1305. {
  1306. nRow = cbds.addRow();
  1307. cbds.setColumn(nRow, "codecolumn", arrDsNames[i]);
  1308. cbds.setColumn(nRow, "datacolumn", arrDsNames[i] );
  1309. // cbds.setColumn(nRow, "datacolumn", i);
  1310. }
  1311. ds_cb.copyData(cbds);
  1312. //ds_cond.setColumn(0, "paramIndex", "0");
  1313. if (utlf_isNull(arrDsNames[0]))
  1314. arrDsNames[0] = "0";
  1315. ds_cond.setColumn(0, "paramIndex", arrDsNames[0]);
  1316. var ds = eval("ds_param_" + ds_cond.getColumn(0, "paramIndex") );
  1317. tabMain.tabpage1.divParam.gridParam.binddataset = ds;
  1318. ds.rowposition = 0;
  1319. }
  1320. }
  1321. else // Batch
  1322. {
  1323. fGetParameterBatch(rowposition);
  1324. }
  1325. }
  1326. // Parameter 가져오기
  1327. function fGetParameterBatch(rowposition)
  1328. {
  1329. var nDsCount = 0;
  1330. var sLine = "";
  1331. var contents = ds_livelog.getColumn(ds_livelog.rowposition, "contents");
  1332. ds_param_0.clearData();
  1333. var sLines = contents.replace("execute batch param","");
  1334. var arrParam = sLines.split(", ");
  1335. var nRow = -1;
  1336. dsf_createDs("ds_param_0");
  1337. var ds = eval("ds_param_0");
  1338. if( utlf_isNull(ds.getColumnInfo("paramCd")) )
  1339. ds.addColumn("paramCd", "string");
  1340. if( utlf_isNull(ds.getColumnInfo("paramData")) )
  1341. ds.addColumn("paramData", "string");
  1342. ds.clearData();
  1343. for (var i = 0; i < arrParam.length; i++)
  1344. {
  1345. nRow = ds.addRow();
  1346. ds.setColumn(nRow, "paramCd", i);
  1347. if ( arrParam[i].lastIndexOf("[") >= 0)
  1348. arrParam[i] = arrParam[i].substr(arrParam[i].lastIndexOf("[")+1);
  1349. if ( arrParam[i].lastIndexOf("]") >= 0)
  1350. arrParam[i] = arrParam[i].substr(0, arrParam[i].lastIndexOf("]"));
  1351. ds.setColumn(nRow, "paramData", arrParam[i]);
  1352. }
  1353. nDsCount = 1;
  1354. // Parameter Dataset이 여러 개 인 경우 Combo에 세팅을 함.
  1355. if ( nDsCount >= 0)
  1356. {
  1357. var arrDsNames = new Array();
  1358. var cbds = objCbDsIndex.innerdataset;
  1359. var nRow = -1;
  1360. cbds.clearData();
  1361. for (var i = 0; i < nDsCount; i++)
  1362. {
  1363. nRow = cbds.addRow();
  1364. cbds.setColumn(nRow, "codecolumn", "0");
  1365. cbds.setColumn(nRow, "datacolumn", "0");
  1366. }
  1367. ds_cb.copyData(cbds);
  1368. //ds_cond.setColumn(0, "paramIndex", "0");
  1369. if (utlf_isNull(arrDsNames[0]))
  1370. arrDsNames[0] = "0";
  1371. ds_cond.setColumn(0, "paramIndex", arrDsNames[0]);
  1372. var ds = eval("ds_param_" + ds_cond.getColumn(0, "paramIndex") );
  1373. tabMain.tabpage1.divParam.gridParam.binddataset = ds;
  1374. ds.rowposition = 0;
  1375. }
  1376. }
  1377. function fSelectFuncRelate(relate)
  1378. {
  1379. var nRow = ds_tree_callstack.findRow("relate", relate);
  1380. // trace("fSelectFuncRelate : "+ nRow);
  1381. if (nRow >= 0)
  1382. {
  1383. var line = ds_tree_callstack.getColumn(nRow, "line");
  1384. fSelectFunc(line);
  1385. }
  1386. }
  1387. // Line 으로 CallStack에 있는 함수 선택
  1388. function fSelectFunc(line)
  1389. {
  1390. var nRow = ds_tree_callstack.findRow("line", line);
  1391. lftrace("fSelectFunc nRow : " + nRow + ", line : " + line);
  1392. if ( nRow >= 0 )
  1393. {
  1394. var rtn = objTree.getTreeRow(nRow);
  1395. if (rtn > -1)
  1396. {
  1397. objTree.setTreeStatus(rtn, true);
  1398. }
  1399. else
  1400. {
  1401. var nParentRow = objTree.getTreeParentRow(nRow);
  1402. var nTopParentRow = nRow;
  1403. while (nParentRow != -1)
  1404. {
  1405. nParentRow = objTree.getTreeParentRow(nTopParentRow);
  1406. nTopParentRow --;
  1407. }
  1408. for(var i = nTopParentRow; i < nRow; i++)
  1409. {
  1410. objTree.setTreeStatus(objTree.getTreeRow(i), true);
  1411. }
  1412. }
  1413. if (ds_tree_callstack.rowposition == nRow)
  1414. ds_tree_callstack.rowposition = 0;
  1415. ds_tree_callstack.rowposition = nRow;
  1416. //tabMain.tabpage1.divCallStack.Grid02.updateToDataset();
  1417. }
  1418. }
  1419. function tabMain_tabpage1_Grid00_oncellclick(obj:Grid, e:GridClickEventInfo)
  1420. {
  1421. fSelectCell(e.cell);
  1422. }
  1423. function fSelectCell(cell, treeSelYn)
  1424. {
  1425. var sRtnText = "";
  1426. if (ds_livelog.rowposition == ds_cond.getColumn(0, "selLine")
  1427. && ds_livelog.getColumn(ds_livelog.rowposition, "logtype") != "SQL"
  1428. && ds_livelog.getColumn(ds_livelog.rowposition, "logtype") != "SQL-BIND"
  1429. )
  1430. {
  1431. // trace("중복 " + ds_livelog.rowposition );
  1432. // return;
  1433. }
  1434. ds_cond.setColumn(0, "selLine", ds_livelog.rowposition );
  1435. var sLine = "";
  1436. if (cell > 6)
  1437. {
  1438. ds_livelog.enableevent = false;
  1439. switch ( ds_livelog.getColumn(ds_livelog.rowposition, "logtype") )
  1440. {
  1441. case "PARAM":
  1442. objDivParm.visible = true;
  1443. try{
  1444. this.setWaitCursor(true, true);
  1445. fGetParameter(ds_livelog.rowposition);
  1446. objTxtSql.visible = false;
  1447. }catch(e) {
  1448. trace("exception " + e.description + " , " +( e.number & 0xFFFF));
  1449. ds_cond.setColumn(0, "sql", ds_livelog.getColumn(ds_livelog.rowposition, "contents"));
  1450. objTxtSql.visible = true;
  1451. objTxtSql.setFocus();
  1452. }
  1453. finally {
  1454. this.setWaitCursor(false, true);
  1455. }
  1456. break;
  1457. case "SQL":
  1458. case "SQL-BIND":
  1459. case "DEBUG":
  1460. case "INFO":
  1461. objDivParm.visible = true;
  1462. var contents = ds_livelog.getColumn(ds_livelog.rowposition, "contents");
  1463. ds_cond.setColumn(0, "sql", contents);
  1464. objTxtSql.visible = true;
  1465. objTxtSql.setFocus();
  1466. break;
  1467. case "CALL":
  1468. objDivParm.visible = true;
  1469. if (!utlf_isNull(ds_livelog.getColumn(ds_livelog.rowposition, "statementid")))
  1470. {
  1471. var packagenm = ds_livelog.getColumn(ds_livelog.rowposition, "packagenm");
  1472. var statmentid = ds_livelog.getColumn(ds_livelog.rowposition, "statementid");
  1473. ds_cond.setColumn(0, "sql", packagenm + ".java\r\r" + statmentid );
  1474. }
  1475. else
  1476. {
  1477. ds_cond.setColumn(0, "sql", ds_livelog.getColumn(ds_livelog.rowposition, "contents"));
  1478. }
  1479. objTxtSql.visible = true;
  1480. break;
  1481. default:
  1482. objTxtSql.visible = true;
  1483. ds_cond.setColumn(0, "sql", ds_livelog.getColumn(ds_livelog.rowposition, "contents"));
  1484. // objTxtSql.visible = false;
  1485. // objDivParm.visible = false;
  1486. if( !utlf_isNull(this.objects["ds_param_0"]))
  1487. ds_param_0.clearData();
  1488. dsf_deleteDs("ds_param_0");
  1489. /*ds_param_0.clearData();*/
  1490. break;
  1491. }
  1492. // CallStack Select
  1493. if (treeSelYn != "N")
  1494. {
  1495. fSelectFuncRelate(ds_livelog.getColumn(ds_livelog.rowposition, "relate"));
  1496. }
  1497. ds_livelog.enableevent = true;
  1498. }
  1499. }
  1500. function pdivParam_cbDsIndex_onitemchanged(obj:Combo, e:ItemChangeEventInfo)
  1501. {
  1502. objCbDsIndex.updateToDataset();
  1503. objGridParam.binddataset = eval("ds_param_" + ds_cond.getColumn(0, "paramIndex") );
  1504. //lftrace ("ds_param_" + ds_cond.getColumn(0, "paramIndex"));
  1505. }
  1506. function txtSql_onkillfocus(obj:TextArea, e:KillFocusEventInfo)
  1507. {
  1508. //objTxtSql.visible = false;
  1509. }
  1510. function Button01_onclick(obj:Button, e:ClickEventInfo)
  1511. {
  1512. dsf_createDs("ds_dyGrid");
  1513. ds_dyGrid.loadXML( ds_cond.getColumn(0, "dataSetXml") );
  1514. fSetGridbyDataset(ds_dyGrid, "tabMain.tabpage2.dyGrid");
  1515. tabMain.tabpage2.dyGrid.binddataset = ds_dyGrid;
  1516. }
  1517. function fSetGridbyDataset(pDs, pGridNm)
  1518. {
  1519. var sColumns = "";
  1520. var sHead = "";
  1521. var sBody = "";
  1522. var sSummary = "";
  1523. var grid = eval(pGridNm);
  1524. lftrace("grid " + grid);
  1525. for(var i=0 ; i<pDs.getColCount() ; i++)
  1526. {
  1527. var colId = pDs.getColID(i);
  1528. var colSize = (i<= 3) ? 100 : 200;
  1529. colSize = colId.length * 100;
  1530. var colType = (i<= 3) ? "normal" : "number";
  1531. colType = "textarea";
  1532. var displaytype = "text";
  1533. var colAlign = (i< 2) ? " left top" : "left top";
  1534. var colAlign = (i== 2) ? "left top" : "left top";
  1535. // 헤드 - 칼럼 사이즈
  1536. sColumns += '<Col size="'+colSize+'"/>\n'
  1537. // 헤드 - 칼럼 명
  1538. if (i<= 2 || i>=pDs.getColCount()-3) {
  1539. sHead += '<Cell col="'+i+'" text="'+colId+'"/>\n'
  1540. } else {
  1541. sHead += '<Cell col="'+i+'" text="'+colId+'"/>\n'
  1542. //sHead += '<Cell col="'+i+'" text="'+colId.substr(4,2)+"/"+colId.substr(6,2)+'"/>\n'
  1543. }
  1544. // 바디 - 타입, 정렬, 바인드:칼럼 명
  1545. if (i == 0) {
  1546. sBody += '<Cell col="'+i+'"';
  1547. sBody += ' displaytype="'+displaytype+'"';
  1548. sBody += ' edittype="'+colType+'"';
  1549. sBody += ' style="align:'+colAlign+'"';
  1550. sBody += ' text="bind:'+colId+'"';
  1551. //sBody += ' subsumtext="소계"';
  1552. sBody += '/>\n';
  1553. } else {
  1554. sBody += '<Cell col="'+i+'"';
  1555. sBody += ' displaytype="'+displaytype+'"';
  1556. sBody += ' edittype="'+colType+'"';
  1557. sBody += ' style="align:'+colAlign+';';
  1558. //sBody += ' bkcolor="expr:iif(rowlevel&gt;0,&apos;honeydew&apos;,&apos;default&apos;)"';
  1559. sBody += 'background:EXPR(getRowLevel(currow)&gt;0?&quot;honeydew&quot;:&quot;default&quot;);';
  1560. sBody += 'background2:EXPR(getRowLevel(currow)&gt;0?&quot;honeydew&quot;:&quot;default&quot;);"';
  1561. sBody += ' text="bind:'+colId+'"';
  1562. sBody += '/>\n';
  1563. }
  1564. // 서머리 - 타입, 정렬, 값
  1565. // sSummary += '<Cell col="'+i+'"';
  1566. //
  1567. // sSummary += ' displaytype="'+colType+'"';
  1568. // sSummary += ' style="align:'+colAlign+'"';
  1569. //
  1570. // if (i< 3) {
  1571. // sSummary += ' text=""';
  1572. // }else if (i==3){
  1573. // sSummary += ' text="합계"';
  1574. // }else if (i == pDs.getColCount()) {
  1575. // sSummary += ' text="expr:toNumber(Math.round(getSum(&quot;'+pDs.getColID(i-2)+'&quot;)/getSum(&quot;'+pDs.getColID(i-1)+'&quot;)*100&#32;,1),0,0,0)"';
  1576. // } else {
  1577. //
  1578. // sSummary += ' text="expr:getSum(&quot;'+colId+'&quot;)"';
  1579. // }
  1580. //
  1581. // sSummary += '/>\n';
  1582. }
  1583. // 그리드 기본 Formats
  1584. var sFormat = '<Formats>\n';
  1585. sFormat += '<Format id="default">\n';
  1586. sFormat += '<Columns>\n';
  1587. sFormat += sColumns;
  1588. sFormat += '</Columns>\n';
  1589. sFormat += '<Rows>\n';
  1590. sFormat += '<Row band="head" size="24"/>\n';
  1591. sFormat += '<Row band="body" size="24"/>\n';
  1592. sFormat += '<Row band="summ" size="24"/>\n';
  1593. sFormat += '</Rows>\n';
  1594. sFormat += '<Band id="head">\n';
  1595. sFormat += sHead;
  1596. sFormat += '</Band>\n';
  1597. sFormat += '<Band id="body">\n';
  1598. sFormat += sBody;
  1599. sFormat += '</Band>\n';
  1600. sFormat += '<Band id="summary">\n';
  1601. sFormat += sSummary;
  1602. sFormat += '</Band>\n';
  1603. sFormat += '</Format>\n';
  1604. sFormat += '</Formats>\n';
  1605. // 동적그리드 할당
  1606. grid.formats = sFormat;
  1607. }
  1608. function tabMain_tabpage1_Grid00_onkeydown(obj:Grid, e:KeyEventInfo)
  1609. {
  1610. switch(e.keycode)
  1611. {
  1612. case "67": // C
  1613. if (e.ctrlKey)
  1614. {
  1615. fCopyGridData(objGrdLivelog, e.shiftKey);
  1616. }
  1617. break;
  1618. case F0 + 4:
  1619. var tmpBuffer = "";
  1620. for (var i = 0; i < ds_livelog.rowcount; i++)
  1621. {
  1622. tmpBuffer += ds_livelog.getColumn(i, "contents") + "\n\n";
  1623. }
  1624. system.clearClipboard();
  1625. system.setClipboard("CF_TEXT", tmpBuffer);
  1626. break;
  1627. case F0 +1: // F1
  1628. var selRow = ds_livelog.rowposition;
  1629. if ( ds_livelog.getColumn(selRow, "markyn") == 1)
  1630. ds_livelog.setColumn(selRow, "markyn", 0);
  1631. else
  1632. ds_livelog.setColumn(selRow, "markyn", 1);
  1633. }
  1634. return;
  1635. if (e.keycode == 67 && e.ctrlKey) // Ctlr + C
  1636. {
  1637. fCopyGridData(objGrdLivelog, e.shiftKey);
  1638. } else if (e.keycode == F0 + 4)
  1639. {
  1640. var tmpBuffer = "";
  1641. for (var i = 0; i < ds_livelog.rowcount; i++)
  1642. {
  1643. tmpBuffer += ds_livelog.getColumn(i, "contents") + "\n\n";
  1644. }
  1645. system.clearClipboard();
  1646. system.setClipboard("CF_TEXT", tmpBuffer);
  1647. }
  1648. // lftrace("e keycoee : " + e.keycode);
  1649. }
  1650. function fCopyGridData(objGrid, IsContainHeader)
  1651. {
  1652. var oBindDs = eval(objGrid.binddataset);
  1653. var sClipboard = "";
  1654. trace("IsContainHeader : " + IsContainHeader);
  1655. if ( IsContainHeader)
  1656. {
  1657. for (var j = objGrid.selectstartcol; j <= objGrid.selectendcol; j++)
  1658. {
  1659. if (j < objGrid.selectendcol)
  1660. {
  1661. sClipboard += utlf_transNullToEmpty(objGrid.getCellProperty("Head", j, "text")) + "\t";
  1662. }
  1663. else
  1664. {
  1665. sClipboard += utlf_transNullToEmpty(objGrid.getCellProperty("Head", j, "text"));
  1666. }
  1667. }
  1668. //sClipboard = sClipboard.substr(0, sClipboard.length - 1);
  1669. sClipboard += "\n";
  1670. }
  1671. for (var i = objGrid.selectstartrow; i <= objGrid.selectendrow; i++)
  1672. {
  1673. for (var j = objGrid.selectstartcol; j <= objGrid.selectendcol; j++)
  1674. {
  1675. var nCol = utlf_transNullToEmpty(objGrid.getCellProperty("Body", j, "text").replace("bind:", ""));
  1676. sClipboard += oBindDs.getColumn(i , nCol ) + "\t";
  1677. }
  1678. sClipboard = sClipboard.substr(0, sClipboard.length - 1);
  1679. sClipboard += "\n";
  1680. }
  1681. sClipboard = sClipboard.substr(0, sClipboard.length - 1);
  1682. system.clearClipboard();
  1683. system.setClipboard("CF_TEXT", sClipboard);
  1684. return ;
  1685. }
  1686. function tabMain_tabpage2_dyGrid_onkeydown(obj:Grid, e:KeyEventInfo)
  1687. {
  1688. if (e.keycode == 67 && e.ctrlKey) // Ctlr + C
  1689. {
  1690. fCopyGridData(tabMain.tabpage2.dyGrid, e.shiftKey);
  1691. }
  1692. }
  1693. function tabMain_tabpage2_btnExportExcel_onclick(obj:Button, e:ClickEventInfo)
  1694. {
  1695. switch (tabMain.tabindex)
  1696. {
  1697. case 0:
  1698. grdf_exportExcel(objGrdLivelog, "DataSet", "DataSet", false, "", "open", false, "", true);
  1699. break;
  1700. case 1:
  1701. grdf_exportExcel(objdyGrid, "DataSet", "DataSet", false, "", "open", false, "", true);
  1702. break;
  1703. }
  1704. }
  1705. function tabMain_tabpage1_Div00_Button00_onclick(obj:Button, e:ClickEventInfo)
  1706. {
  1707. tabMain.tabpage1.Div00.Edit00.updateToDataset();
  1708. if ( ! utlf_isNull (ds_cond.getColumn(0, "searchkeyword") ))
  1709. {
  1710. var startRow = -1;
  1711. if ( ds_livelog.rowposition >= ds_livelog.rowcount )
  1712. startRow = -1;
  1713. else
  1714. startRow = ds_livelog.rowposition + 1;
  1715. ds_livelog.enableevent = false;
  1716. var searchkeyword = "";
  1717. var findRow = -1;
  1718. searchkeyword = ds_cond.getColumn(0, "searchkeyword").trim().toLowerCase();
  1719. findRow = ds_livelog.findRowExpr("contents.toString().toLowerCase().indexOf('" + searchkeyword + "') >= 0 ", startRow );
  1720. ds_livelog.enableevent = true;
  1721. trace("findRow : " + findRow);
  1722. // ds_livelog.rowposition 설정
  1723. fSetRowpostionLivelog((findRow >= 0? findRow:0));
  1724. lftrace("startRow : " + startRow + ", findRow : " + findRow);
  1725. }
  1726. }
  1727. function btnTest_onclick(obj:Button, e:ClickEventInfo)
  1728. {
  1729. var objImage = new Image;
  1730. var obj =this.getOwnerFrame();
  1731. objImage = obj.saveToImageObject();
  1732. var varImage = objImage.getBinary();
  1733. Dataset00.setColumn(0, "img", varImage)
  1734. }
  1735. function fSetDml(contents, nRow)
  1736. {
  1737. // dml Set
  1738. var strDml = "MERGE,UPDATE,DELETE,INSERT,SELECT";
  1739. var arrDml = strDml.split(",");
  1740. // 문자열 처리 하기가 너무 어렵네..ㅜㅜ
  1741. var tmpContents = contents.replace("execute update","");
  1742. tmpContents = tmpContents.replace("\t"," ");
  1743. tmpContents = tmpContents.replace("\r"," ");
  1744. tmpContents = tmpContents.replace("\n"," ");
  1745. tmpContents = tmpContents.toUpperCase();
  1746. ds_livelog.setColumn(nRow, "dml", "SELECT");
  1747. //trace("arrDml.length : " + arrDml.length);
  1748. for (var i = 0; i < arrDml.length; i++)
  1749. {
  1750. if ( tmpContents.indexOf(" " + arrDml[i] + " ") >= 0 )
  1751. {
  1752. ds_livelog.setColumn(nRow, "dml", arrDml[i]);
  1753. return arrDml[i];
  1754. }
  1755. }
  1756. }
  1757. function tabMain_tabpage1_divParam_Button00_onclick(obj:Button, e:ClickEventInfo)
  1758. {
  1759. var ds = eval("ds_param_" + ds_cond.getColumn(0, "paramIndex") );
  1760. ds_temp.copyData(ds);
  1761. }
  1762. function tabMain_tabpage1_txtSql_onkeydown(obj:TextArea, e:KeyEventInfo)
  1763. {
  1764. var sql =ds_cond.getColumn(0, "sql");
  1765. //lftrace(e.keycode);
  1766. switch (e.keycode)
  1767. {
  1768. case F0 + 3: // F3
  1769. if (ds_temp.rowcount > 0)
  1770. {
  1771. var arrParam = sql.split("?");
  1772. var tmpSql = "";
  1773. for (var i = 0; i < ds_temp.rowcount; i++)
  1774. {
  1775. tmpSql += arrParam[i] + "'" + ds_temp.getColumn(i , "paramData") + "'";
  1776. //sql = sql.replace("?", "'" + ds_temp.getColumn(i , "paramData") + "'");
  1777. }
  1778. tmpSql += arrParam[i];
  1779. system.clearClipboard();
  1780. system.setClipboard("CF_TEXT", tmpSql);
  1781. alert("Copy");
  1782. }
  1783. break;
  1784. case F0 + 4: // F4
  1785. if ( !utlf_isNull(this.opener) )
  1786. {
  1787. var scrid = "SMSMP09204";
  1788. var selecttext = tabMain.tabpage1.divParam.txtSql.getSelectedText();
  1789. if ( !utlf_isNull(selecttext) )
  1790. {
  1791. selecttext = selecttext.trim();
  1792. selecttext = selecttext.toUpperCase();
  1793. if ( selecttext.indexOf(".") >= 0 )
  1794. {
  1795. var objArr = selecttext.split(".");
  1796. selecttext = objArr[1];
  1797. }
  1798. fOpenTableInfoPopup(selecttext);
  1799. }
  1800. }
  1801. break;
  1802. }
  1803. }
  1804. function fOpenTableInfoPopup(selecttext)
  1805. {
  1806. if ( !utlf_isNull(this.opener) || true )
  1807. {
  1808. var scrid = "SMSMP09204";
  1809. var objForm = frmf_findPopup("SMSMP09204");
  1810. if (utlf_isNull(objForm))
  1811. {
  1812. frmf_open(scrid, "SMSMP09204", "", "", 0, 500, 500, "", "", "", "", "", "M");
  1813. }
  1814. else
  1815. {
  1816. objForm.lf_setTablename(selecttext);
  1817. frmf_setFocusPop(scrid);
  1818. }
  1819. }
  1820. }
  1821. function tabMain_tabpage2_Button00_onclick(obj:Button, e:ClickEventInfo)
  1822. {
  1823. var sClipText = system.getClipboard("CF_TEXT");
  1824. //lftrace( sClipText );
  1825. if ( ! utlf_isNull(sClipText) )
  1826. {
  1827. ds_cond.setColumn(0, "dataSetXml", sClipText);
  1828. dsf_createDs("ds_dyGrid");
  1829. ds_dyGrid.loadXML( ds_cond.getColumn(0, "dataSetXml") );
  1830. fSetGridbyDataset(ds_dyGrid, "tabMain.tabpage2.dyGrid");
  1831. tabMain.tabpage2.dyGrid.binddataset = ds_dyGrid;
  1832. }
  1833. }
  1834. function tabMain_tabpage1_divParam_Edit00_ontextchanged(obj:Edit, e:TextChangedEventInfo)
  1835. {
  1836. obj.updateToDataset();
  1837. var ds = eval("ds_param_" + ds_cond.getColumn(0, "paramIndex") );
  1838. var filterValue = tabMain.tabpage1.divParam.ipt_ds_search.value.toUpperCase() ;
  1839. var filter = "";
  1840. if (filterValue != "")
  1841. {
  1842. filter = "String(paramCd).toUpperCase().indexOf('" + filterValue + "') > -1 || String(paramData).toUpperCase().indexOf('" + filterValue + "') > -1";
  1843. }
  1844. ds.filter(filter);
  1845. }
  1846. function tabMain_tabpage1_Div00_btncontentcopy_onclick(obj:Button, e:ClickEventInfo)
  1847. {
  1848. if (ds_livelog.rowcount > 0)
  1849. {
  1850. var tmpBuffer = "";
  1851. system.clearClipboard();
  1852. for (var i = 0; i < ds_livelog.rowcount; i++)
  1853. {
  1854. tmpBuffer += ds_livelog.getColumn(i, "contents") + "\n";
  1855. }
  1856. system.setClipboard("CF_TEXT", tmpBuffer);
  1857. }
  1858. }
  1859. function lftrace(msg)
  1860. {
  1861. trace(msg);
  1862. }
  1863. function tabMain_tabpage1_Div00_chkSelectSql_onchanged(obj:CheckBox, e:CheckBoxChangeEventInfo)
  1864. {
  1865. if (e.postvalue == "Y")
  1866. {
  1867. ds_filter.setColumn(0, "logtype", "SQL");
  1868. ds_filter.setColumn(0, "dmltype", "");
  1869. }
  1870. else
  1871. {
  1872. ds_filter.setColumn(0, "logtype", "");
  1873. ds_filter.setColumn(0, "dmltype", "");
  1874. }
  1875. tabMain_tabpage1_Div00_cmbLogtype_onitemchanged(null, null);
  1876. }
  1877. function tabMain_tabpage1_Div00_Edit01_onkeydown(obj:Edit, e:KeyEventInfo)
  1878. {
  1879. switch (e.keycode)
  1880. {
  1881. case "13":
  1882. obj.updateToDataset();
  1883. var line = utlf_transNullToEmpty(ds_cond.getColumn(0, "linenum"));
  1884. fGotoLine(line);
  1885. break;
  1886. }
  1887. }
  1888. function tabMain_tabpage1_Div00_Edit00_onkeydown(obj:Edit, e:KeyEventInfo)
  1889. {
  1890. switch (e.keycode)
  1891. {
  1892. case "13":
  1893. tabMain_tabpage1_Div00_Button00_onclick();
  1894. break;
  1895. }
  1896. }
  1897. function ds_livelog_oncolumnchanged(obj:Dataset, e:DSColChangeEventInfo)
  1898. {
  1899. switch (e.columnid)
  1900. {
  1901. case "markyn":
  1902. var useYn = e.newvalue == "1" ? "Y" : "N";
  1903. fSetLogMarker(ds_livelog.getColumn(ds_livelog.rowposition, "line"), useYn);
  1904. //fSetLogMarker(ds_livelog.getColumn(ds_livelog.rowposition, "relate"), useYn);
  1905. break;
  1906. }
  1907. }
  1908. function fGetLivelogRelate(line)
  1909. {
  1910. var nRow = ds_livelog.findRow("line", line);
  1911. var retRelate = "";
  1912. if (nRow >= 0)
  1913. {
  1914. retRelate = ds_livelog.getColumn(nRow, "relate");
  1915. }
  1916. return retRelate;
  1917. }
  1918. function fSetLogMarker(line, useYn)
  1919. {
  1920. var nRow = -1;
  1921. var relate = fGetLivelogRelate(line);
  1922. if (useYn == "Y")
  1923. {
  1924. nRow = ds_marker.addRow();
  1925. ds_marker.setColumn(nRow, "line", line);
  1926. ds_marker.setColumn(nRow, "relate", relate)
  1927. ds_marker.updateSortGroup("S:line");
  1928. nRow = ds_tree_callstack.findRow ("relate", relate);
  1929. if(nRow >=0)
  1930. {
  1931. ds_tree_callstack.setColumn(nRow, "markyn", 1);
  1932. }
  1933. }
  1934. else
  1935. {
  1936. var relate = ""
  1937. nRow = ds_marker.findRow("line", line);
  1938. if (nRow >= 0)
  1939. {
  1940. relate = ds_marker.getColumn(nRow, "relate");
  1941. ds_marker.deleteRow(nRow);
  1942. nRow = ds_marker.findRow("relate", relate);
  1943. if (nRow < 0)
  1944. {
  1945. nRow = ds_tree_callstack.findRow ("line", line);
  1946. if(nRow >=0)
  1947. {
  1948. ds_tree_callstack.setColumn(nRow, "markyn", 0);
  1949. }
  1950. }
  1951. }
  1952. }
  1953. }
  1954. function fGetLogMarker(curPos, moveflag)
  1955. {
  1956. var retMark = -1;
  1957. var nRow = -1;
  1958. var nPos = -1;
  1959. if (ds_marker.rowcount > 0)
  1960. {
  1961. switch (moveflag)
  1962. {
  1963. case "P": // 이전
  1964. nPos = ds_marker.findRowExpr("line < " + curPos);
  1965. if (nPos >= 0)
  1966. {
  1967. retMark = ds_marker.getColumn(nPos, "line");
  1968. }
  1969. else
  1970. {
  1971. retMark = ds_marker.getColumn(ds_marker.rowcount - 1, "line");
  1972. }
  1973. break;
  1974. case "N": // 다음
  1975. nPos = ds_marker.findRowExpr("line > " + curPos);
  1976. if (nPos >= 0)
  1977. {
  1978. retMark = ds_marker.getColumn(nPos, "line");
  1979. }
  1980. else
  1981. {
  1982. retMark = ds_marker.getColumn(0, "line");
  1983. }
  1984. break;
  1985. }
  1986. //trace("curPos : " + curPos + " , nPos : " + nPos + ", retMark : " + retMark);
  1987. return retMark;
  1988. }
  1989. }
  1990. // ds_livelog.rowposition 설정
  1991. function fSetRowpostionLivelog(row)
  1992. {
  1993. if (ds_livelog.rowposition == row)
  1994. {
  1995. ds_livelog.rowposition = 0;
  1996. }
  1997. objGrdLivelog.selecttype = "row";
  1998. ds_livelog.rowposition = row;
  1999. objGrdLivelog.selecttype = "multiarea";
  2000. fSelectCell(8);
  2001. }
  2002. function fGotoLine(line)
  2003. {
  2004. //trace("fGotoLine line : " + line);
  2005. if ( !utlf_isNull(line) )
  2006. {
  2007. nRow = ds_livelog.findRow("line", line);
  2008. //trace("nRow :" + nRow + ", line : " + line);
  2009. if (nRow >= 0)
  2010. {
  2011. // ds_livelog.rowposition 설정
  2012. fSetRowpostionLivelog(nRow);
  2013. fSelectFunc(line);
  2014. }
  2015. }
  2016. }
  2017. function tabMain_tabpage1_Div00_Button01_onclick(obj:Button, e:ClickEventInfo)
  2018. {
  2019. //trace("ds_livelog.rowposition : " + ds_livelog.rowposition);
  2020. var line = fGetLogMarker( ds_livelog.getColumn(ds_livelog.rowposition, "line"), (obj.text == "◀" ? "P" : "N") );
  2021. if (line >= 0)
  2022. {
  2023. fGotoLine(line);
  2024. fSelectCell(8, "N");
  2025. }
  2026. }
  2027. function tabMain_tabpage1_Div00_Button03_onclick(obj:Button, e:ClickEventInfo)
  2028. {
  2029. if (objDivCallStack.visible)
  2030. {
  2031. objDivCallStack.visible = false;
  2032. objDivParm.position.height = objGrdLivelog.position.height;
  2033. }
  2034. else
  2035. {
  2036. var height = objDivParm.position.height / 2;
  2037. objDivCallStack.visible = true;
  2038. objDivParm.position.height = height;
  2039. objDivCallStack.position.y = height + objDivParm.position.y;
  2040. objDivCallStack.position.height = height;
  2041. }
  2042. }
  2043. function divCallStack_btnTreeAction_onclick(obj:Button, e:ClickEventInfo)
  2044. {
  2045. var expend ;
  2046. switch(obj.text)
  2047. {
  2048. case "펼치기":
  2049. case "접기":
  2050. for (var i = 0; i < ds_tree_callstack.rowcount; i++)
  2051. {
  2052. objTree.setTreeStatus(i, (obj.text == "펼치기"? true : false));
  2053. }
  2054. break;
  2055. }
  2056. }
  2057. function tabMain_tabpage1_divCallStack_Grid02_oncellclick(obj:Grid, e:GridClickEventInfo)
  2058. {
  2059. //trace("e.clickitem : " + e.clickitem);
  2060. if ( ! (e.clickitem == "treebutton" || e.clickitem == "image"))
  2061. {
  2062. var selRow = ds_tree_callstack.rowposition;
  2063. if (ds_cond.getColumn(0, "selrelate") == "Y")
  2064. {
  2065. var filter = "relate.toString().indexOf('" + ds_tree_callstack.getColumn(selRow, "relate") + "') >= 0";
  2066. ds_livelog.filter(filter);
  2067. // ds_livelog.rowposition 설정
  2068. fSetRowpostionLivelog(0);
  2069. }
  2070. else
  2071. {
  2072. ds_livelog.filter("");
  2073. fGotoLine( ds_tree_callstack.getColumn(selRow, "line") );
  2074. }
  2075. fSelectCell(8, "N");
  2076. //trace("ds_tree_callstack : " + ds_tree_callstack.rowposition);
  2077. }
  2078. }
  2079. ////////////////////// todo
  2080. function fLivelogFilter()
  2081. {
  2082. var filter = "";
  2083. var logtype = utlf_transNullToEmpty(ds_filter.getColumn(0, "logtype"));
  2084. var dmltype = utlf_transNullToEmpty(ds_filter.getColumn(0, "dmltype"));
  2085. if ( utlf_isNull(logtype) && utlf_isNull(dmltype) )
  2086. {
  2087. ds_livelog.filter (filter);
  2088. ds_logtype_filter.enableevent = false;
  2089. for (var i = 0; i < ds_logtype_filter.rowcount; i++)
  2090. {
  2091. ds_logtype_filter.setColumn(i, "chkyn", "1");
  2092. }
  2093. ds_logtype_filter.enableevent = true;
  2094. }
  2095. else
  2096. {
  2097. filter = "";
  2098. filter += " ( logtype == '" + logtype + "' || '" + logtype + "' == '') " ;
  2099. filter += "&& ( dml == '" + dmltype + "' || '" + dmltype + "' == '')" ;
  2100. ds_livelog.filter (filter);
  2101. ds_logtype_filter.enableevent = false;
  2102. for (var i = 0; i < ds_logtype_filter.rowcount; i++)
  2103. {
  2104. if (logtype == ds_logtype_filter.getColumn(i, "logtype"))
  2105. {
  2106. ds_logtype_filter.setColumn(i, "chkyn", "1");
  2107. }
  2108. else
  2109. {
  2110. ds_logtype_filter.setColumn(i, "chkyn", "0");
  2111. }
  2112. }
  2113. ds_logtype_filter.enableevent = true;
  2114. }
  2115. }
  2116. function btnReload_onclick(obj:Button, e:ClickEventInfo)
  2117. {
  2118. this.reload();
  2119. }
  2120. function SMSMP09205_onkeydown(obj:Form, e:KeyEventInfo)
  2121. {
  2122. //trace("e.keycode : " + e.keycode);
  2123. switch(e.keycode)
  2124. {
  2125. case 79: // O
  2126. if(e.ctrlKey)
  2127. {
  2128. Div00_Button00_onclick(null,null);
  2129. }
  2130. break;
  2131. case 81: //Q
  2132. if (e.ctrlKey)
  2133. objEdtsearch.setFocus();
  2134. break;
  2135. case 87: //W
  2136. if (e.ctrlKey)
  2137. objDssearch.setFocus();
  2138. break;
  2139. case 69: //E
  2140. if (e.ctrlKey)
  2141. {
  2142. Div00_btnMoveLog_onclick();
  2143. }
  2144. break;
  2145. case 82: // R
  2146. if (e.ctrlKey)
  2147. {
  2148. if (tabMain.tabpage1.Div00.chkSelectSql.value == "Y")
  2149. {
  2150. tabMain.tabpage1.Div00.chkSelectSql.value = "N"
  2151. }
  2152. else
  2153. {
  2154. tabMain.tabpage1.Div00.chkSelectSql.value = "Y"
  2155. }
  2156. // ds_filter.setColumn(0, "logtype", "SQL");
  2157. // ds_filter.setColumn(0, "dmltype", "");
  2158. // tabMain_tabpage1_Div00_cmbLogtype_onitemchanged(null, null);
  2159. // }
  2160. // else
  2161. // {
  2162. // tabMain.tabpage1.Div00.chkSelectSql.value = "Y";
  2163. // }
  2164. }
  2165. break;
  2166. case 27: // Esc
  2167. ds_cond.setColumn(0, "liveLog", "");
  2168. ds_livelog.clearData();
  2169. ds_capture_log.setColumn(0, "logdata", "");
  2170. break;
  2171. case 111 + 3: // F3
  2172. Div00_btnMoveLog_onclick();
  2173. break;
  2174. case 111 + 5: // F5
  2175. fOpenTableInfoPopup("");
  2176. break;
  2177. }
  2178. }
  2179. function Div00_Button00_onclick(obj:Button, e:ClickEventInfo)
  2180. {
  2181. fOpenLog();
  2182. objCaptureMsg.text = "열기";
  2183. }
  2184. function fOpenLog()
  2185. {
  2186. ds_capture_log.clearData();
  2187. ds_capture_log.addRow();
  2188. var fd = new FileDialog;
  2189. var vFile = fd.open("FileOpen", FileDialog.LOAD);
  2190. var rnt = vFile.open(VirtualFile.openRead | VirtualFile.openText);
  2191. var bSuccess = vFile.seek(0, VirtualFile.seekBegin);
  2192. //var bData = new Buffer(vFile.read(vFile.getFileSize()));
  2193. var logdata = vFile.read(vFile.getFileSize(), "euc-kr");
  2194. //var logdata = new Buffer(vFile.read(vFile.getFileSize()));
  2195. ds_capture_log.setColumn(0, "filepath", vFile.fullpath);
  2196. //ds_capture_log.setColumn(0, "logdata", logdata);
  2197. ds_capture_log.setColumn(0, "logdata", "");
  2198. ds_capture_log.setColumn(0, "curpos", vFile.getFileSize());
  2199. vFile.close();
  2200. fEditSetCaretPos(objCaptureLog);
  2201. this.setTimer(54, 1000);
  2202. }
  2203. function Div00_Button01_onclick(obj:Button, e:ClickEventInfo)
  2204. {
  2205. var filepath = ds_capture_log.getColumn(0, "filepath");
  2206. var vFile = new VirtualFile(filepath, VirtualFile.openRead | VirtualFile.openText);
  2207. if ( !utlf_isNull(filepath))
  2208. {
  2209. ds_capture_log.setColumn(0, "curpos", vFile.getFileSize());
  2210. }
  2211. this.setTimer(54, 1000);
  2212. objCaptureMsg.text = "준비";
  2213. }
  2214. function fReadLog()
  2215. {
  2216. this.killTimer(54);
  2217. var filepath = ds_capture_log.getColumn(0, "filepath");
  2218. var vFile = new VirtualFile(filepath, VirtualFile.openRead | VirtualFile.openText);
  2219. var curpos = parseInt(ds_capture_log.getColumn(0, "curpos"));
  2220. var logdata = ds_capture_log.getColumn(0, "logdata");
  2221. var bSuccess = vFile.seek(curpos);
  2222. var readsize = vFile.getFileSize() - curpos;
  2223. var capData = vFile.read(readsize);
  2224. capData = capData.replace("\n", "\r\n");
  2225. // var sline = vFile.readLine("\n", "UTF-8");
  2226. // var capData = sline + "\r\n";
  2227. // while (sline)
  2228. // {
  2229. // capData += sline + "\r\n";
  2230. // sline = vFile.readLine("\n", "UTF-8");
  2231. // trace("sline : " + sline);
  2232. // }
  2233. if ( !utlf_isNull(capData))
  2234. {
  2235. logdata += capData;
  2236. ds_capture_log.setColumn(0, "logdata", logdata);
  2237. ds_capture_log.setColumn(0, "curpos", vFile.getFileSize());
  2238. }
  2239. vFile.close();
  2240. this.setTimer(54, 1000);
  2241. }
  2242. function fPrintDs(ds:Dataset)
  2243. {
  2244. var prtmsg = "######## " + ds.name + "\n";
  2245. for (var row = 0; row < ds.rowcount; row++)
  2246. {
  2247. for(var col = 0; col < ds.colcount; col++)
  2248. {
  2249. var colinfo = ds.getColumnInfo(col)
  2250. prtmsg += (col == 0 ? " [" + row + "] " : ", ") + colinfo.name + " : " + ds.getColumn(row, col);
  2251. }
  2252. prtmsg += "\n ";
  2253. }
  2254. }
  2255. function fEditSetCaretPos(edt:TextArea)
  2256. {
  2257. edt.updateToDataset();
  2258. edt.setFocus();
  2259. edt.setCaretPos(-1);
  2260. edt.vscrollbar.pos = edt.getLength()-1;
  2261. }
  2262. function SMSMP09205_ontimer(obj:Form, e:TimerEventInfo)
  2263. {
  2264. //trace("execute timer : " );
  2265. if (ds_capture_log.rowcount > 0)
  2266. {
  2267. var filepath = ds_capture_log.getColumn(0, "filepath");
  2268. var vFile = new VirtualFile(filepath, VirtualFile.openRead | VirtualFile.openText);
  2269. var curPos = parseInt(ds_capture_log.getColumn(0, "curpos"));
  2270. // trace( " curPos : " + curPos + ", vFile.getFileSize() : " + vFile.getFileSize());
  2271. if ( curPos < vFile.getFileSize())
  2272. {
  2273. objCaptureMsg.text = "읽는 중";
  2274. fReadLog();
  2275. fEditSetCaretPos(objCaptureLog);
  2276. objCaptureMsg.text = "읽기 완료";
  2277. }
  2278. else
  2279. {
  2280. objCaptureMsg.text = "대기 중";
  2281. }
  2282. }
  2283. }
  2284. function Div00_Button02_onclick(obj:Button, e:ClickEventInfo)
  2285. {
  2286. this.killTimer(54);
  2287. objCaptureMsg.text = "멈춤";
  2288. }
  2289. function Div00_btnCaptureLogClear_onclick(obj:Button, e:ClickEventInfo)
  2290. {
  2291. ds_capture_log.setColumn(0, "logdata", "");
  2292. }
  2293. function Div00_btnMoveLog_onclick(obj:Button, e:ClickEventInfo)
  2294. {
  2295. var logdata = ds_capture_log.getColumn(0, "logdata");
  2296. if ( !utlf_isNull(logdata) )
  2297. {
  2298. ds_cond.setColumn(0, "liveLog", logdata);
  2299. fAnalysisLiveLog(ds_cond.getColumn(0, "logKinds"), ds_cond.getColumn(0, "logaddyn"));
  2300. ds_capture_log.setColumn(0, "logdata", "");
  2301. }
  2302. }
  2303. function tabMain_tabpage1_btnClearLog_onclick(obj:Button, e:ClickEventInfo)
  2304. {
  2305. fClearLogConfig();
  2306. ds_cond.setColumn(0, "liveLog", "");
  2307. }
  2308. function tabMain_onchanged(obj:Tab, e:TabIndexChangeEventInfo)
  2309. {
  2310. switch (e.postindex)
  2311. {
  2312. case 0:
  2313. divCapture.visible = true;
  2314. break;
  2315. case 1:
  2316. divCapture.visible = false;
  2317. break;
  2318. }
  2319. }
  2320. function ds_capture_log_onvaluechanged(obj:Dataset, e:DSColChangeEventInfo)
  2321. {
  2322. var logdata = ds_capture_log.getColumn(0, "logdata");
  2323. if ( !utlf_isNull (logdata) )
  2324. {
  2325. divCapture.btnMoveLog.style.background = "red";
  2326. }
  2327. else
  2328. {
  2329. divCapture.btnMoveLog.style.background = "@gradation";
  2330. }
  2331. if (! utlf_isNull(logdata))
  2332. {
  2333. ds_capture_log.setColumn(0, "capsize", logdata.length);
  2334. }
  2335. }
  2336. function tabMain_tabpage1_Div00_CheckBox00_onchanged(obj:CheckBox, e:CheckBoxChangeEventInfo)
  2337. {
  2338. if (e.postvalue)
  2339. {
  2340. objTxtSql.wordwrap = "char";
  2341. }
  2342. else
  2343. {
  2344. objTxtSql.wordwrap = "none";
  2345. }
  2346. }
  2347. ]]></Script>
  2348. </Form>
  2349. </FDL>