XPLATFORM 101

- Dataset > Search


앞에서 콤보 컴포넌트를 다루면서 search 메소드를 사용해
입력된 검색어에 대해 필터링을 다루는 방법을 보았습니다.

하지만 해당 메소드는 정확하게 일치하는 글자만을 가지고 온다는 제약이 있습니다.
요구사항에 따라 이런 기능을 확장할 필요도 있겠죠.
Search 예제는 최근 포털 검색창에서 많이 사용하는 '자동완성'과 같은 기능을 보여주고 있습니다.

Edit 컴포넌트에서 ontextchanged 이벤트를 사용하고
입력된 단어를 자소에 맞는 영문으로 변환하여
처리하여 줍니다.
그렇게 변환된 코드는 해당하는 검색어의 영문코드와 비교하여 필터링됩니다.

이때 검색어의 영문코드를 미리 등록해놓지 않고
초기 로딩시 데이터셋에 추가해줍니다.
function SuggestSample_onload(obj:Form, e:LoadEventInfo)
{
var count = dsFind.getRowCount();
var i;
for(i=0;i<count;i++)
{
var text = dsFind.getColumn(i,"text");
var code = GetSpliceTextE(text);
dsFind.setColumn(i,"pseudocode",code);
}
}


코드에 사용된 아이디어는 이미 많은 곳에서 사용하고 있습니다.
아래 글을 참고하면 도움이 되실듯 합니다.

검색어 자동완성

* 예제 코드를 보면 include 를 사용해 외부 코드를 활용하고 있습니다.
자바스크립트에서는 include 를 지원하지 않기 때문에 외부 코드를 활용하는데 어려움이 있는데
엑스플랫폼에서는 그런 어려움은 없네요. ^^

* 요즘 스마트폰을 보면 대부분 초성검색을 지원합니다.
예제에서도 초성에 대한 코드값만 추출하면 동일한 기능을 만들어낼 수 있습니다.

http://cafe.naver.com/xplatform101/187 
XPLATFORM 101

- Dataset > Filter


엑스플랫폼에서 필터링 처리는 아주 편하게 할 수 있습니다.

기능이 강력한 만큼 잘 알고 써야 겠죠.


예제에서는 특이하게 filter() 메소드와 filterstr 속성을 둘 다 사용했습니다.

비교를 위해서 그렇게 사용한것 같은데..


filter() 메소드는 앞에서도 계속 언급했지만 다시 한번 살펴보도록 하겠습니다.

해당 메소드는 데이터셋에서 조건식을 만족하는 Row만 보이게 하는 메소드입니다.


메소드가 실행되면서 onrowsetchanged 이벤트가 발생합니다.

조건을 해제하려면 빈 문자열("")을 지정해서 메소드를 실행하면 됩니다.

필터 조건을 지정하고 빈 메소드를 실행하면 filterstr 속성에 영향을 미칩니다.


filterstr 은 데이터셋을 필터링 처리할 표현식을 지정하는 속성입니다.

객체 속성으로 current와 default를 가지고 있어 지정된 값을 확인하거나 설정할 수 있습니다.

속성을 지정하면 해당 조건으로 필터링이 처리됩니다.

그리고 필터링이 완료되면서 onrowsetchanged 이벤트가 발생합니다.


결국에는 filter 메소드가 filterstr 속성에 영향을 미치기 때문에

어느 것을 써도 상관은 없은 것 같지만...


* like 조건을 문자열에서 처리하는 방식은 보통 indexOf를 사용합니다.

ds_Employ.filter("String(emp_name).indexOf('" + ed_name.value + "') >= 0");


* filterstr을 사용하는 초기화는 다음과 같이 할 수 있습니다.

ds_Employ.filterstr = "";

http://cafe.naver.com/xplatform101/185 

XPLATFORM 101

- Dataset > 소계(getSum)


그리드 부분에서도 언급했지만 소계는 간단한 정규식만으로 처리가 가능합니다.

getSum 메소드를 사용해서 각 항목의 합계를 처리하는데

여기에 주의할점은 각 항목이 Int, Float, BigDecimal 형태일 경우만 합계가 처리됩니다.

그렇지 않은 경우 0으로 처리됩니다.

문자열을 그냥 연산자로 더하게 되면 문자열끼리 더해지는 형태가 되지만

getSum 메소드에서는 이와는 다르게 처리하고 있습니다.



예제에서도 String 유형을 어떻게 처리하는지 다루고 있습니다.


expr: getSum("parseInt(COL_STR)") 이나 expr: getSum("parseFloat(Column1)") 와 같이

타입을 변경해주어야 합니다.

http://cafe.naver.com/xplatform101/184