nuMultiCheckbox.xjs 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <Script type="xscript4.0"><![CDATA[class nuMultiCheckbox extends Div
  3. {
  4. /*******************************************************************************
  5. * 멤버변수
  6. ******************************************************************************/
  7. private var PADDING_SIZE = 10;
  8. private var TEXT_WIDTH = 12;
  9. private var MARGIN_SIZE = 22;
  10. private var oBindDataset;
  11. private var sBindColumn;
  12. private var sDispText;
  13. private var aCheckBox;
  14. public var _draw = false; //Grid 를 다시 그릴지 여부 (처음에 한번 그린다음에 true로 바뀜
  15. public var _head; // 헤더 명칭 ('^' 로 구분됨)
  16. public var _col; // 컬럼 갯수
  17. public var _truevalue; // true 값
  18. public var _falsevalue; // false 값
  19. public var _binddataset; // bind dataset
  20. public var _bindcol; // bind col
  21. public var _bindheadcol; // bind head col
  22. public var _bindType; // bind type 을 지정한다 'row' 일 경우 dataset row 기준으로 데이타 바인딩, 'col(default)' 일 경우 dataset col 기준으로 데이타 바인딩
  23. //public var _required = ""; //필수 항목 컬럼들
  24. //public var _msgkey = "";
  25. public var _defaultvalue; //공통코드 기본값(A : 전체)
  26. public var _paddingsize;
  27. public var _changedFunc; //체크값이 변경되었을 경우 실행할 함수명 2016.10.07 추가
  28. private var oBindDataset;
  29. private var _bCheckAll = false;
  30. //2015.12.10 by 이봉욱 - 기록서식에서 컨트롤 사용 시 checkbox 스타일 관련 속성추가
  31. public var _isMedirec; //기록서식에서 사용여부(true일 때 기록서식에서 사용하는 ckeckbox로 인식함)
  32. public var _medirecChkStyle; //checkbox style ==> classid (ex : ck_medirec)
  33. public var _medirecChkleading; //checkbox 행간격(ex: 16)
  34. private var RUNAFTERLOAD = null;
  35. /*******************************************************************************
  36. * 생성자 && OnDraw
  37. ******************************************************************************/
  38. /**
  39. * @desc 생성자 생성에 필요한 값들을 정의하자.
  40. * @param sName - 객체이름
  41. * @param iLeft
  42. * @param iTop
  43. * @param iRight
  44. * @param iBottom
  45. */
  46. function nuMultiCheckbox( sName, iLeft, iTop, iRight, iBottom ) {
  47. if( !isNull(sName) )
  48. this.name = sName;
  49. if( !isNull(iLeft) )
  50. this.position.left = iLeft;
  51. if( !isNull(iTop) )
  52. this.position.top = iTop;
  53. if( !isNull(iRight) )
  54. this.position.right = iRight;
  55. if( !isNull(iBottom) )
  56. this.position.bottom = iBottom;
  57. aCheckBox = new Array();
  58. }
  59. /**
  60. * 객체를 그릴때마다 기본적으로 호출되는 함수
  61. * checkbox를 그리자.
  62. */
  63. function OnDraw(Canvas, EventArgs)
  64. {
  65. DefaultDraw(Canvas.getPainter());
  66. if(_draw==true)return;
  67. //checkbox 생성
  68. reDraw();
  69. _draw = true;
  70. if( RUNAFTERLOAD != null ) {
  71. RUNAFTERLOAD();
  72. RUNAFTERLOAD = null;
  73. }
  74. }
  75. /**
  76. * @desc multicheckbox 를 다시 그린다.
  77. */
  78. function reDraw() {
  79. if( !isNull(_binddataset) ) {
  80. oBindDataset = eval(_binddataset);
  81. oBindDataset.onrowposchanged.addHandler( bindDataset_onrowposchanged );
  82. }
  83. //0. col text 와 col size를 dataset 기준으로 결정하자.
  84. var iColSize = 0;
  85. var aDispText;
  86. if( isNull( oBindDataset ) ) return;
  87. if( _bindType == "row" ) {
  88. //row bindtype 일때 head 를 ds 에서 가지고 올거냐 아니면 _head 에서 가지고 올거냐 결정
  89. if( isNull(_bindheadcol) ) {
  90. aDispText = _head.split("^");
  91. iColSize = _col;
  92. if( isNull(iColSize) || iColSize < 1 ) return; //row bindtype 이 아닐때 return
  93. } else {
  94. aDispText = new Array();
  95. for( var i=0; i<oBindDataset.rowcount; i++) {
  96. var sHead = oBindDataset.getColumn(i, _bindheadcol);
  97. aDispText[i] = sHead;
  98. }
  99. iColSize = aDispText.length;
  100. }
  101. } else {
  102. aDispText = _head.split("^");
  103. iColSize = _col;
  104. if( isNull(iColSize) || iColSize < 1 ) return; //row bindtype 이 아닐때 return
  105. }
  106. if( isNull(_binddataset) || isNull(_bindcol) ) return;
  107. if( isNull(_truevalue) ) {
  108. _truevalue = "true";
  109. }
  110. if( isNull(_falsevalue) ) {
  111. _falsevalue = "false";
  112. }
  113. //1. 기존에 등록되어 있는 obj 를 지우자.
  114. //trace("aCheckBox.length->" + aCheckBox.length);
  115. for( var i=0; i<aCheckBox.length; i++ ) {
  116. var objCheckBox = aCheckBox[i];
  117. this.removeChild( objCheckBox.name );
  118. // Destroy Object
  119. objCheckBox.destroy();
  120. objCheckBox = null;
  121. }
  122. aCheckBox = new Array(); //array 초기화
  123. //2. 전체(_defaultvalue == 'A') 가 포함되어 있다면.!!
  124. if( _defaultvalue == 'A' ) {
  125. var aTmp = new Array("전체");
  126. aDispText = aTmp.concat( aDispText );
  127. iColSize++;
  128. //trace("aDispText->" + aDispText + " iColSize->" + iColSize);
  129. }
  130. //3. column 마다 최대 길이를 알아내오자.
  131. var iColCnt = (isNull(_col) ? 0 : _col);
  132. var aMaxColSize = new Array();
  133. if( _isMedirec == "true"){
  134. for(var i = 0; i < iColSize; i++){
  135. this.scrollbars = "none";
  136. var iWidthx = fn_getTextSize(aDispText[i], "Dotum", 9) + (MARGIN_SIZE - 2);
  137. if( aMaxColSize[i%iColCnt] < iWidthx || aMaxColSize[i%iColCnt] == null){
  138. aMaxColSize[i%iColCnt] = iWidthx;
  139. }
  140. //trace( aMaxColSize[i%iColCnt] ) ;
  141. }
  142. } else {
  143. for(var i=0; i<iColSize; i++) aMaxColSize[i] = 0;
  144. var iRowIdx = 0;
  145. var iColIdx = 0;
  146. for(var i=0; i<iColSize; i++) {
  147. var sHeader = "";
  148. if( aDispText.length > i )
  149. sHeader = aDispText[i];
  150. //trace("i->" + i + " iColCnt->" + iColCnt + " iColIdx->" + iColIdx);
  151. if( aMaxColSize[iColIdx] < sHeader.length ) {
  152. aMaxColSize[iColIdx] = sHeader.length;
  153. }
  154. if( (i+1) % iColCnt == 0 ) {
  155. iColIdx = 0;
  156. } else {
  157. iColIdx++;
  158. }
  159. }
  160. }
  161. //trace("aMaxColSize->" + aMaxColSize);
  162. //4. checkbox 를 그리기 시작하자.
  163. var iLeft = 0;
  164. var iWidth = 150;
  165. var iTop = 0;
  166. iRowIdx = 0; //줄번호
  167. iColIdx = 0; //col번호
  168. if( isNull(_paddingsize) ) _paddingsize = 0;
  169. else _paddingsize = parseInt(_paddingsize);
  170. for(var i=0; i<iColSize; i++) {
  171. //header
  172. var sHeader = "";
  173. if( aDispText.length > i )
  174. sHeader = aDispText[i];
  175. var iMaxColSize = aMaxColSize[ iColIdx ];
  176. //trace("iColSize->" + iColSize + " i->" + i + " iColIdx->" + iColIdx + " iMaxColSize->" + iMaxColSize);
  177. if(_isMedirec == "true"){
  178. iWidth = aMaxColSize[i%iColCnt];
  179. //trace("# " + iWidth);
  180. }else{
  181. //사이즈 지정 checkbox_size(22px) + 한글자넓이 * 텍스트길이
  182. iWidth = MARGIN_SIZE + (TEXT_WIDTH * iMaxColSize);
  183. }
  184. //left, top 좌표값 지정
  185. if( iColCnt == 0 ) {
  186. iTop = 0;
  187. } else {
  188. //2015.12.10 by 이봉욱 - 기록서식 컨트롤 간의 행간격 설정값 변경 기능 추가
  189. if(_isMedirec == "true"){
  190. if(!isNull(_medirecChkleading)){
  191. iTop = _medirecChkleading * iRowIdx;
  192. }
  193. }else{
  194. iTop = MARGIN_SIZE * iRowIdx;
  195. }
  196. //지정한 col 갯수만큼이 되면 줄바꿈
  197. if( i % iColCnt == 0 ) {
  198. iLeft = 0;
  199. }
  200. }
  201. if( (i+1) % iColCnt == 0 ) {
  202. iRowIdx ++;
  203. iColIdx = 0;
  204. } else {
  205. iColIdx++;
  206. }
  207. //새로운 checkbox 생성---------------------------------------
  208. var objId = "CheckBox"+i;
  209. var objCheckBox;
  210. //2015.12.10 by 이봉욱 - 기록서식 컨트롤 스타일 설정값 변경 기능 추가
  211. if(_isMedirec == "true"){
  212. if(!isNull(_medirecChkStyle)){ //서식 스타일 적용할 때
  213. objCheckBox = new CheckBox(objId, iLeft + 2, iTop + 2, iLeft + iWidth, iTop + 16);
  214. objCheckBox.class = _medirecChkStyle;
  215. }else{ //서식 스타일 적용하지 않을 때(EX 간호 : FMMNR01000)
  216. objCheckBox = new CheckBox(objId, iLeft, iTop, iLeft + iWidth, iTop + 20);
  217. }
  218. }else{
  219. objCheckBox = new CheckBox(objId, iLeft, iTop, iLeft + iWidth, iTop + 20);
  220. }
  221. this.addChild(objId, objCheckBox);
  222. objCheckBox.onclick.addHandler( nuMultiCheckBox_onclick );
  223. //김종현 수정 - 20130812 : 체크박스에서 space 클릭시 데이타 반영 안됨 처리
  224. objCheckBox.onchanged.addHandler( nuMultiCheckBox_onchanged );
  225. objCheckBox.text = sHeader;
  226. objCheckBox.show();
  227. //새로운 checkbox 생성---------------------------------------
  228. objCheckBox.truevalue = _truevalue;
  229. objCheckBox.falsevalue = _falsevalue;
  230. if( _bCheckAll ) objCheckBox.value = _truevalue;
  231. //trace( objId + ":" + iLeft + ":" + iWidth );
  232. aCheckBox[i] = objCheckBox;
  233. //left 좌표값 이동
  234. if( _paddingsize > 0 ) {
  235. //2017.06.02 서식에서 _paddingsize 사용 시 체크박스가 겹처지는 오류 수정
  236. if(_isMedirec == "true"){
  237. iLeft += iWidth + _paddingsize;
  238. }else{
  239. iLeft += _paddingsize;
  240. }
  241. } else {
  242. //2017.10.16 서식에서 기본 padding없이 컨트롤 생성 되도록 수정 요청
  243. //iLeft += iWidth + PADDING_SIZE;
  244. if(_isMedirec == "true"){
  245. iLeft += iWidth + _paddingsize;
  246. }else{
  247. iLeft += iWidth + PADDING_SIZE;
  248. }
  249. }
  250. }
  251. setBindDataset(); //초기값 설정
  252. //2015.05.13 데이터셋의 갯수가 많아서 스크롤을 생성해야 할 경우가 발생하여 추가
  253. this.resetScroll();
  254. //2016.08.24 checkbox를 생성하기 전에 enable 처리가 되었다면 다시 그리기 위해 예외처리
  255. if(this.enable == false) {
  256. this.enable = true;
  257. this.enable = false;
  258. }
  259. }
  260. /*******************************************************************************
  261. * 확장함수
  262. ******************************************************************************/
  263. /**
  264. * @desc checkbox에 필요한 값을 dataset에서 읽어와서 바인드하자
  265. */
  266. function setBindDataset() {
  267. if( isNull(oBindDataset) ) return;
  268. var iBaseIdx = 0;
  269. if( _defaultvalue == 'A' ) iBaseIdx = 1;
  270. if( _bindType == "row" ) {
  271. for(var i=0; i<aCheckBox.length - iBaseIdx; i++) {
  272. var objCheckBox = aCheckBox[iBaseIdx + i]; //'전체'가 포함되어 있을때 idx 가 한칸 뒤로
  273. if( oBindDataset.rowcount <= i ) continue;
  274. // 2013.08.28 이길용 수정, setCheckVall시에 이벤트 타는것 방지.
  275. objCheckBox.enableevent = false;
  276. var sBindVal = oBindDataset.getColumn( i, _bindcol );
  277. objCheckBox.value = sBindVal;
  278. objCheckBox.enableevent = true;
  279. }
  280. } else {
  281. var sBindVal = oBindDataset.getColumn( oBindDataset.rowposition, _bindcol );
  282. if( isNull(sBindVal) ) return;
  283. for(var i=0; i<aCheckBox.length - iBaseIdx; i++) {
  284. var objCheckBox = aCheckBox[iBaseIdx + i]; //'전체'가 포함되어 있을때 idx 가 한칸 뒤로
  285. // 2013.08.28 이길용 수정, setCheckVall시에 이벤트 타는것 방지.
  286. objCheckBox.enableevent = false;
  287. if( sBindVal.length > i ) {
  288. objCheckBox.value = sBindVal.charAt(i);
  289. } else {
  290. objCheckBox.value = "";
  291. }
  292. objCheckBox.enableevent = true;
  293. }
  294. }
  295. }
  296. /**
  297. * @desc checkbox에 값이 변경되면 dataset에 값을 바인드하자.
  298. */
  299. function getBindDataset() {
  300. if( isNull(oBindDataset) ) return;
  301. var iBaseIdx = 0;
  302. if( _defaultvalue == 'A' ) iBaseIdx = 1;
  303. if( _bindType == "row" ) {
  304. for(var i=0; i<aCheckBox.length - iBaseIdx; i++) {
  305. var objCheckBox = aCheckBox[iBaseIdx + i]; //'전체'가 포함되어 있을때 idx 가 한칸 뒤로
  306. if( oBindDataset.rowcount <= i ) continue;
  307. oBindDataset.setColumn( i, _bindcol, objCheckBox.value );
  308. }
  309. } else {
  310. var sBindVal = "";
  311. for( var i=0; i<aCheckBox.length - iBaseIdx; i++ ) {
  312. var objCheckBox = aCheckBox[iBaseIdx + i]; //'전체'가 포함되어 있을때 idx 가 한칸 뒤로
  313. sBindVal += objCheckBox.value;
  314. }
  315. //trace(sBindVal);
  316. oBindDataset.setColumn( oBindDataset.rowposition, _bindcol, sBindVal );
  317. }
  318. }
  319. /**
  320. * checkbox 전체를 체크하자.
  321. * @param isChecked - true 전체선택, false 전체선택해제
  322. */
  323. public function checkedAll( isChecked ) {
  324. if( isNull( isChecked ) ) isChecked = true;
  325. _bCheckAll = isChecked; //전체 check flag 기억해두자.
  326. var sBindVal = this._falsevalue;
  327. if( isChecked ) sBindVal= this._truevalue;
  328. /*
  329. var iBaseIdx = 0;
  330. if( _defaultvalue == 'A' ) iBaseIdx = 1;
  331. for(var i=0; i<aCheckBox.length - iBaseIdx; i++) {
  332. var objCheckBox = aCheckBox[iBaseIdx + i]; //'전체'가 포함되어 있을때 idx 가 한칸 뒤로
  333. objCheckBox.value = sBindVal;
  334. }
  335. */
  336. for(var i=0; i<aCheckBox.length; i++) {
  337. var objCheckBox = aCheckBox[i]; //'전체'가 포함되어 있을때 idx 가 한칸 뒤로
  338. objCheckBox.value = sBindVal;
  339. }
  340. getBindDataset();
  341. }
  342. /**
  343. * 공통코드를 바인드
  344. */
  345. function setCode( dat ) {
  346. //-------------------------------------------------------------
  347. var objDate1 = new Date();
  348. var iStartTime = objDate1.getTime();
  349. //-------------------------------------------------------------
  350. // 여기는 무조건 단일값 -------------------------------------------
  351. var bizType = dat.biztype;
  352. var code = dat.code;
  353. var colnum = dat.colnum;
  354. var selecttype = dat.selecttype;
  355. var sortcolumn = "cd_nm";
  356. var sortmethod = "asc";
  357. // var sortcolumn = dat.sortcolumn==undefined?"":;
  358. // var sortmethod = dat.sortmethod==undefined?"":;
  359. // 여기는 무조건 단일값 -------------------------------------------
  360. //기존 소스랑 충돌 나지 않도록 기본 방식대로 ds name 을 만들어 내자.
  361. var componentName = getComponentFullName();
  362. if(isNull(componentName)) {
  363. trace("nuCombo componentName is Null");
  364. return;
  365. }
  366. var dsName = "ds_"+componentName+"_"+code;
  367. var dsMultiCheckbox = getDataSet(dsName);
  368. var sourceDs;
  369. if (bizType == "ZZ") {
  370. sourceDs = eval( "ds_"+code );
  371. } else if (bizType == "HC") {
  372. sourceDs = eval( "ds_HC_"+code );
  373. } else if (bizType == "AD") {
  374. sourceDs = eval( "ds_AD_"+code );
  375. } else if (bizType == "PM") {
  376. sourceDs = eval( "ds_PM_"+code );
  377. } else if (bizType == "AL") {
  378. sourceDs = eval( "ds_AL_"+code );
  379. } else if (bizType == "MI") {
  380. sourceDs = eval( "ds_MI_"+code );
  381. }
  382. //기존 Dataset 이 존재하면 복사시키자.
  383. if ( sourceDs != null && sourceDs != undefined ) {
  384. dsMultiCheckbox.copyData(sourceDs);
  385. } else {
  386. //필터 ds 지정
  387. var filtDs = new FilteredDataset();
  388. filtDs.name = "filtDs";
  389. //parent.addChild("filtDs", filtDs);
  390. //값 복사해올 gds_ds 지정
  391. if (bizType == "ZZ") {
  392. filtDs.binddataset = gds_zz_code;
  393. } else if (bizType == "HC") {
  394. filtDs.binddataset = gds_hc_code;
  395. } else if (bizType == "AD") {
  396. filtDs.binddataset = gds_ad_code;
  397. } else if (bizType == "PM") {
  398. filtDs.binddataset = gds_pm_code;
  399. } else if (bizType == "AL") {
  400. filtDs.binddataset = gds_al_code;
  401. }else if (bizType == "MI") {
  402. filtDs.binddataset = gds_mi_code;
  403. }
  404. //값복사 시작
  405. filtDs.filter("cd_grup_id.toString() == '"+code+"'");
  406. if (filtDs.rowcount ==0) {
  407. //여기서는 값이 없으면 submit 을 타지 않는다. 주의
  408. //trace(dsName + " filtDs.rowcount ==0");
  409. } else {
  410. dsMultiCheckbox.copyData(filtDs);
  411. }
  412. //parent.removeChild("filtDs");
  413. }
  414. //정렬
  415. // if( !isNull(sortcolumn) ) {
  416. // if( !isNull(sortmethod) ) sortmethod = "asc";
  417. // dsMultiCheckbox.keystring = "S:" + (sortmethod == "asc" ? "+" : "-") + sortcolumn;
  418. // }
  419. //check
  420. dsMultiCheckbox.addColumn("checked", "string");
  421. this._binddataset = dsName;
  422. this._bindcol = "checked";
  423. this._bindheadcol = "cd_nm";
  424. this._bindType = "row"
  425. this._col = colnum;
  426. this._falsevalue = "N";
  427. this._truevalue = "Y";
  428. this._defaultvalue = selecttype;
  429. this._draw = "true";
  430. reDraw();
  431. //-------------------------------------------------------------
  432. var objDate2 = new Date();
  433. var iEndTime = objDate2.getTime();
  434. //trace("setCode end [start:" +iStartTime+ "] [end:" +iEndTime+ "] [total:" +(iEndTime-iStartTime)+ "ms]----------------------------------------------------------------------");
  435. //-------------------------------------------------------------
  436. return dsName;
  437. }
  438. /**
  439. *
  440. * Parameter : cdgrupid - 공통코드 그룹ID
  441. * sortfiled - 정렬구분 (cdid, cdnm, dispseq(default))
  442. * sortmethod - asc(default), desc
  443. * supcdgrupid - 하위 코드군 ID
  444. * supcdid - 하위코드군의 코드ID
  445. * defaultvalue - 공통코드 기본값(A : 전체, S : 선택), null(default)
  446. *
  447. * 한 화면에 하나의 코드군ID의 Dataset이 존재한다.
  448. */
  449. function setCodeOld( cdgrupid, sortfield, sortmethod, supcdgrupid, supcdid, defaultvalue) {
  450. //-------------------------------------------------------------
  451. var objDate1 = new Date();
  452. var iStartTime = objDate1.getTime();
  453. //-------------------------------------------------------------
  454. //trace("[" + cdgrupid + "].setCode start [" +iStartTime+ "]----------------------------------------------------------------------");
  455. ownCode = cdgrupid;
  456. var iRow = 0;
  457. var componentName = getComponentFullName();
  458. if(isNull(componentName)) {
  459. trace("nuCombo componentName is Null");
  460. return;
  461. }
  462. var dsName = "ds_"+componentName+"_"+ownCode;
  463. var dsCombo = getDataSet(dsName);
  464. var dsSend = getDataSet("ds_send");
  465. var dsCmd = getDataSet("ds_cmd");
  466. var inDs = "";
  467. var outDs = "";
  468. // 공통코드 콤보 데이터셋 초기화
  469. dsCombo.clear();
  470. dsCombo.addColumn("cd_id", "string");
  471. dsCombo.addColumn("cd_nm", "string");
  472. // outDs 초기화
  473. dsSend.clear();
  474. dsSend.addColumn("cdgrupid", "string");
  475. dsSend.addColumn("supcdgrupid", "string");
  476. dsSend.addColumn("supcdid", "string");
  477. dsSend.addColumn("sortfield", "string");
  478. dsSend.addColumn("sortmethod", "string");
  479. iRow = dsSend.addRow();
  480. dsSend.setColumn(iRow, "cdgrupid", ownCode);
  481. dsSend.setColumn(iRow, "supcdgrupid", supcdgrupid);
  482. dsSend.setColumn(iRow, "supcdid", supcdid);
  483. dsSend.setColumn(iRow, "sortfield", isNull(sortfield)?"dispseq":sortfield);
  484. dsSend.setColumn(iRow, "sortmethod", isNull(sortmethod)?"asc":sortmethod);
  485. dsCmd.clear();
  486. dsCmd.addColumn("minimum","string");
  487. dsCmd.addColumn("join","string");
  488. jRow = dsCmd.addRow();
  489. dsCmd.setColumn(jRow,"minimum","true");
  490. dsCmd.setColumn(jRow,"join","false");
  491. // inDs, outDs 설정
  492. inDs = "cmd=ds_cmd req=ds_send";
  493. outDs = dsName+"="+ownCode;
  494. if(isNull(supcdgrupid)){
  495. submit("TRZMC00101",inDs,outDs,false);
  496. }else{
  497. submit("TRZMC00102",inDs,outDs,false);
  498. }
  499. this.innerdataset = dsName;
  500. this.codecolumn = "cd_id";
  501. this.datacolumn = "cd_nm";
  502. if(!isNull(defaultvalue)){
  503. if(defaultvalue == "A"){
  504. insertDefaultRow(dsCombo,"전체");
  505. }else if(defaultvalue == "S"){
  506. insertDefaultRow(dsCombo,"선택");
  507. }
  508. }else{
  509. insertDefaultRow(dsCombo,"");
  510. }
  511. this.index = 0;
  512. //-------------------------------------------------------------
  513. var objDate2 = new Date();
  514. var iEndTime = objDate2.getTime();
  515. trace("nuMultiCheckbox [" + cdgrupid + "].setCodeOld end [start:" +iStartTime+ "] [end:" +iEndTime+ "] [total:" +(iEndTime-iStartTime)+ "ms]----------------------------------------------------------------------");
  516. //-------------------------------------------------------------
  517. }
  518. /**
  519. * @desc 값 반환
  520. * @param sGubun 구분자
  521. * @return check 된 code value
  522. */
  523. public function getCheckVal( sGubun ) {
  524. if( isNull(oBindDataset) ) return;
  525. if( isNull(sGubun) ) sGubun = "^";
  526. var sRtn = "";
  527. for( var i=0; i<oBindDataset.rowcount; i++ ) {
  528. var sChk = oBindDataset.getColumn( i, "checked" );
  529. var sCdId = oBindDataset.getColumn( i, "cd_id" );
  530. //trace( i + ":" + sChk + ":" + this._truevalue + ":" + sCdId );
  531. if( sChk == this._truevalue ) {
  532. if( sRtn != "" ) sRtn += sGubun;
  533. sRtn += sCdId;
  534. }
  535. }
  536. return sRtn;
  537. }
  538. /**
  539. * @desc 값 바인드
  540. * @param sBindVal 바인드 시킬 코드 값
  541. * @param sGubun 구분자
  542. */
  543. public function setCheckVal( sBindVal, sGubun ) {
  544. if( isNull(oBindDataset) ) {
  545. if( !isNull(_binddataset) ){
  546. RUNAFTERLOAD = function() {
  547. setCheckVal(sBindVal, sGubun);
  548. //2016.08.22 by 이봉욱 서식에서 같은 데이터셋을 참조할 경우 예외처리
  549. if( _isMedirec == "true" ){
  550. for( var i=0; i<oBindDataset.rowcount; i++ ) {
  551. oBindDataset.setColumn( i, "checked", this._falsevalue );
  552. }
  553. }
  554. };
  555. }
  556. return;
  557. }
  558. //if( isNull(oBindDataset) ) return;
  559. if( isNull(sBindVal) ) return;
  560. if( isNull(sGubun) ) sGubun = "^";
  561. var aBindVal = sBindVal.split( sGubun );
  562. for( var i=0; i<oBindDataset.rowcount; i++ ) {
  563. oBindDataset.setColumn( i, "checked", this._falsevalue );
  564. }
  565. for( var i=0; i<aBindVal.length; i++ ) {
  566. var sBindVal = aBindVal[i];
  567. var cdCol = "cd_id";
  568. if( _isMedirec == "true" )
  569. cdCol = "valcd";
  570. var iFindRow = oBindDataset.findRow(cdCol, sBindVal);
  571. //trace( "파인드로우 : " + iFindRow);
  572. if( iFindRow != -1 ) {
  573. oBindDataset.setColumn( iFindRow, "checked", this._truevalue );
  574. }
  575. }
  576. setBindDataset();
  577. }
  578. //innerdataset을 구하기 위해 추가. 2019.02.28 한지현대리 요청
  579. public function getInnerdataset()
  580. {
  581. var oForm = getBaseForm();
  582. var tmpDs = oForm.objects[_binddataset];
  583. return tmpDs;
  584. }
  585. private function getBaseForm(){
  586. var oForm = this;
  587. while( isNull((oForm = oForm.parent).url) ){
  588. if( oForm.toString() == "[object Form]" )
  589. break;
  590. }
  591. return oForm;
  592. }
  593. /*******************************************************************************
  594. * 유틸함수
  595. ******************************************************************************/
  596. /**
  597. * @desc 입력값이 null에 해당하는 경우 모두를 한번에 체크한다.
  598. * @param sValue 체크할 문자열( 예 : null 또는 undefined 또는 "" 또는 "abc" )
  599. * @return sValue가 undefined, null, NaN, "", Array.length = 0인 경우 = true, 이외의 경우 = false
  600. */
  601. private function isNull(sValue)
  602. {
  603. if( new String(sValue).valueOf() == "undefined") return true;
  604. if( sValue == null ) return true;
  605. if( ("x"+sValue == "xNaN") && ( new String(sValue.length).valueOf() == "undefined" ) ) return true;
  606. if( sValue.length == 0 ) return true;
  607. return false;
  608. }
  609. /**
  610. * @desc 현재 컨트롤의 전체이름을 반환한다.
  611. * @param
  612. * @return fullName : 현재 컨트롤의 전체이름
  613. */
  614. private function getComponentFullName(){
  615. var fullName = "";
  616. var obj = this;
  617. while(!isNull(obj.parent.name) && (obj.parent.toString().toUpperCase() != "[OBJECT CHILDFRAME]")){
  618. fullName = obj.name + (isNull(fullName)?"":"_") + fullName;
  619. obj = obj.parent;
  620. }
  621. //trace("[nuMultiCheckbox] This Component Full name : " + fullName);
  622. return fullName;
  623. }
  624. /*******************************************************************************
  625. * Event 영역
  626. ******************************************************************************/
  627. /**
  628. * @desc checkbox를 클릭했을때
  629. */
  630. function nuMultiCheckBox_onclick(obj:CheckBox, e:ClickEventInfo)
  631. {
  632. return; //김종현 수정 space bar로 처리 시 문제 발생 20130812
  633. //trace("nuMultiCheckBox_onclick");
  634. if( _defaultvalue == 'A' ) {
  635. var objCheckBox = aCheckBox[0];
  636. if( objCheckBox.name == obj.name ) {
  637. if( objCheckBox.value == this._truevalue ) {
  638. checkedAll();
  639. } else {
  640. checkedAll(false);
  641. }
  642. } else {
  643. if( obj.truevalue == obj.value ) {
  644. var isAll = true;
  645. for(var i=1; i<aCheckBox.length; i++ ) {
  646. if( aCheckBox[i].truevalue != aCheckBox[i].value ) {
  647. isAll = false;
  648. break;
  649. }
  650. }
  651. if( isAll )
  652. objCheckBox.value = objCheckBox.truevalue;
  653. } else {
  654. objCheckBox.value = objCheckBox.falsevalue;
  655. }
  656. }
  657. }
  658. getBindDataset();
  659. }
  660. //김종현 20130812 추가
  661. function nuMultiCheckBox_onchanged(obj:CheckBox,e:CheckBoxChangeEventInfo)
  662. {
  663. if( _defaultvalue == 'A' ) {
  664. var objCheckBox = aCheckBox[0];
  665. if( objCheckBox.name == obj.name ) {
  666. if( objCheckBox.value == this._truevalue ) {
  667. checkedAll();
  668. } else {
  669. checkedAll(false);
  670. }
  671. } else {
  672. if( obj.truevalue == obj.value ) {
  673. var isAll = true;
  674. for(var i=1; i<aCheckBox.length; i++ ) {
  675. if( aCheckBox[i].truevalue != aCheckBox[i].value ) {
  676. isAll = false;
  677. break;
  678. }
  679. }
  680. if( isAll )
  681. objCheckBox.value = objCheckBox.truevalue;
  682. } else {
  683. // 2016.05.17 전체가 아닌 그 외 체크박스 하나만 체크를 풀면, 전체가 풀리는 오류 수정
  684. //objCheckBox.value = objCheckBox.falsevalue;
  685. obj.value = obj.falsevalue;
  686. objCheckBox.onchanged.removeHandler( nuMultiCheckBox_onchanged );
  687. objCheckBox.value = objCheckBox.falsevalue;
  688. objCheckBox.onchanged.addHandler( nuMultiCheckBox_onchanged );
  689. // 2016.05.17 수정 끝 -------------------------------------------
  690. }
  691. }
  692. }
  693. getBindDataset();
  694. //2016.10.07 by 이봉욱 추가
  695. //화면에서 지정한 함수 실행
  696. if(!isNull(_changedFunc)){
  697. eval(_changedFunc + "(getCheckVal());");
  698. }
  699. }
  700. //김종현 20130812 end
  701. /**
  702. * @desc dataset의 rowposition 이 변경되었을때
  703. */
  704. function bindDataset_onrowposchanged(obj:Dataset, e:DSRowPosChangeEventInfo)
  705. {
  706. //trace("bindDataset_onrowposchanged");
  707. setBindDataset();
  708. }
  709. /*
  710. * Function Name : fn_getTextSize
  711. * Description : Text Size 반환
  712. * Parameter : 사이즈를 계산할 문자열, 폰트네임, 폰트사이즈
  713. * Return : 계산된 Size
  714. * Example : fn_getTextSize("XPLATFORM", "Dotum", 9);
  715. */
  716. function fn_getTextSize(sString, sFontName, nFontSize)
  717. {
  718. var objFont = new Font;
  719. objFont.size = nFontSize;
  720. objFont.name = sFontName;
  721. var objPainter = this.canvas.getPainter();
  722. var objTextSize = objPainter.getTextSize(sString, objFont);
  723. return objTextSize.cx;
  724. }
  725. }
  726. ]]></Script>