'SI개발/XPlatform'에 해당되는 글 5건

  1. 2017.06.18 [Xplatform][Miplatform] 그리드 체크박스 1개만 선택
  2. 2016.01.26 문자열의 특정 부분을 지정된 길이만큼 반환하는 문제의 substr비교(오라클, ms sql, 자바, 자바스크립트, xplatform)
  3. 2016.01.19 [XPlatform] 동적그리드 작성시 주의할점
  4. 2016.01.19 [XPlatform] 엑셀 export시 셀서식이 맘대로 안될때
  5. 2016.01.19 [XPlatform] getRowType에서 체크박스 칼럼은 제외하고 싶을때

그리드의 체크박스가 1개만 선택하도록 하는 예제입니다. Xplatform과 넥사크로만 써오다가 이번에 처음으로 마이플랫폼을 접해봤는데, 구현방식이 꽤 달라서, 두개 모두 제시합니다. 마이플랫폼->Xplatform->넥사크로와 같이 버전업이 되어왔는데, 셋중에 Xplatform이 제일 난듯합니다. 넥사크로는 코딩 효율이 너무 떨어지는 단점이 있고요, 창업주3인방이 회사 매각후 나가서 그런걸까요? 차기버전은 좀더 효율성 높고 안정적으로 만들어 주었으면 합니다.

 

1. XPlatform

function Dataset00_onrowposchanged(obj:Dataset, e:DSRowPosChangeEventInfo)
{
     obj.setColumn(e.oldrow, "Column0", false );
}

function Dataset01_oncolumnchanged(obj:Dataset, e:DSColChangeEventInfo)
{
     for(var i=0; i<obj.getColCount(); i++){
          if( obj.getColID(i) != e.columnid )
           obj.setColumn(e.row, obj.getColID(i), false );
     } 
}

 

2. Miplatform

function ABC_CanColumnChange(obj,nRow,strColumnID,varOldValue,varNewValue,nPivotIndex)
{
    this.ABC.fireevent = false;
if(this.ABC.CaseCount("column0==1") > 0 )
{
    for(var i = 0; i< this.ABC.GetRowCount(); i++)
    {
        this.ABC.SetColumn(i, "column0", 0);
    }
}
    this.ABC.SetColumn(nRow, "column0", varNewValue);
    this.ABC.fireevent = true;
}

문제의 substr 때로는 substring이기도 하죠. 둘다 쓰기도 하고요. @_@;; 

언어별로 혹은 DB별로 정리해보겠습니다. (오라클, Mssql, 자바, 자바스크립트, XPlatform)

 

1. Oracle

substr(char, postion, length) - length는 생략가능

 

SELECT SUBSTR('0123456789',2,3) FROM DUAL;

 

결과: 123

 

2. Ms Sql

SUBSTRING(expression ,start , length) - length를 생략할 경우 오류발생

 

SELECT SUBSTRING('0123456789',2,3)

 

결과: 123

 

3. Java

public String substring(int beginIndex)
public String substring(int beginIndex, int endIndex) - 두번째 인자가 길이가 아닌 '종료위치'임에 유의

 

 

"0123456789".substring(2,3)

 

결과: 2

 

4. JavaScript

(1) string.substr(start,length) - length는 생략가능

 

"0123456789".substr(2,3);

 

결과: 234

 

(2) string.substring(start, end) - end index는 생략가능

 

"0123456789".substring(2,3);

 

결과: 2

 

 

5. XPlatform

(1) String.substr(nStart [, nLength ]) - length는 생략가능

 

"0123456789".substr(2,3);

 

결과: 234

 

(2) String.substring(nStart, nEnd)

 

"0123456789".substring(2,3);

 

결과: 2

 

XPlatform이 아주 편하고 국내 SI환경에 적합한데, 고급기능으로 갈수록 무지 힘들어지는 경향이 있습니다. 그중하나가 동적그리드인데요. 공통 Library에 동적그리드 메쏘드가 입맛에 맞는 형태로 등록이 되어있다면 그냥 가져다가 쓰면 되는데, 보통 동적그리드는 공통 모듈에 잘 포함을 안시키더라구요. Lib에 없어도 Grid의 스크립트를 참조해서 원하는 그리드 스크립트를 변수와 조합해서 쓰시면 됩니다.

 

다만, 동적그리드 연동을 하려다보면 dataset의 onvaluechanged이벤트를 많이 쓰게되는데, 여기서 미리 주의를 해주셔야하는 부분이 있습니다.

 

동적 그리드에 데이타를 입히거나 그리드속성을 변경하다보면 데이타셋도 변경되는 로직이 필요하게 마련입니다. 데이타셋 변경할때, onvaluechanged이벤트를 타지 않게끔 다음과 같은 라인을 로직 시작전과 후에 넣어주시는걸 잊지마세요. 초창기때나, 아니면 종종 까먹고 엉뚱한 곳에서 디버깅하다가 시간 낭비하는 경우가 생깁니다. ^^

ds_abc.enableevent = false;

~~~~~~

로직

~~~~~~

ds_abc.enableevent = true;

XPlatform이 편리하긴 한데, 엑셀 세부 사항으로 요건이 나오기 시작하면 골치아파집니다. export를 했는데, (1,114.3)과 같은 값이 입력되어있으면 엑셀에서는 -1,114.3으로 나오게됩니다.

 

이거 해결하려고 지원센터에 문의(게시판)했더니, 여자 개발자분이 지원 담당자였는데, 엑셀의 고유기능이라 지원대상이 아니라고 하더군요. ㄷㄷㄷ

 

이 문제를 해결하려면 그리드 속성으로 해결할 수 밖에 없습니다. displaytype을 normal이나 number등이 아닌, "text"로 변경하셔서 엑셀에서 들어온 값 그대로 받아들이게 하는게 제일 속편합니다. 이거 알아내는데, 한참 걸렸네요(게다가 동적 그리드다보니) ㅋ 진작 답변에서 그렇게 안내해주셨더라면 좋았을텐데.

 

 

getRowType으로 선택된 행의 유형(초기, 추가, 수정, 삭제 등)을 파악하는데요.

그리드에 체크박스가 있는 경우(dataset과 연동) 데이타셋이 수정된 것으로 나옵니다.

이 경우, 이벤트에서 체크박스 클릭전과 후에 다음과 같은 처리를 해준다면 체크박스를 아무리 클릭해도 해당 row의 type을 변경하지 않게됩니다.

 

/*******************************************************************************
* 기      능   : ds_result의 cancolumnchange 이벤트
* 설      명   :
********************************************************************************/
function ds_result_cancolumnchange(obj:Dataset, e:DSColChangeEventInfo)
{
 if(e.columnid == "ROW_CHK" )
 {
  obj.updatecontrol = false; //체크박스만 클릭했을때는 dataset RowType 변경이 없도록 설정
 } 
}

/*******************************************************************************
* 기      능   : ds_result의 oncolumnchanged 이벤트
* 설      명   :
********************************************************************************/
function ds_result_oncolumnchanged(obj:Dataset, e:DSColChangeEventInfo)
{
 if(e.columnid == "ROW_CHK" )
 {
  obj.updatecontrol = true; //체크박스만 클릭했을때는 dataset RowType 변경이 없도록 설정했다가 변경후에는 다시 변경가능하도록 설정
 }
}

1 

글 보관함

카운터

Total : / Today : / Yesterday :
get rsstistory!