XPLATFORM 101
지난번에 이벤트에 대해 이야기하면서
미투데이 API로 제공되는 글을 어떻게 가져오는지 다루었습니다.
혹시 못보셨다면 아래 글을 참고하세요.

이벤트가 어떻게 처리되는지 다루는 내용이었기 때문에
버튼 이벤트를 어떻게 처리하는지만 다루었습니다.
이제 좀 제대로 된 셜리의 이야기를 들어볼 수 있는
간단한 애플리케이션을 만들어봅시다.

먼저 화면 디자인은 아래 그림과 같습니다.


그냥 '셜리 불러오기'라는 버튼 하나와
간단한 그리드 하나만 있습니다.
그리드를 처음 생성하면 아무것도 보이지 않을 겁니다.
그리드에서는 본문, 댓글수, 미투수만 보이게 할텐데 조금 뒤에서 다루겠습니다.

그리고 데이터를 받아서 처리해주어야 하기 때문에
Dataset을 하나 만듭니다. 컬럼은 아래와 같이 설정합니다.


여기에서는 나중에 작업 편의를 위해 실제 XML 값의 요소를 컬럼 id로 설정했습니다.
미투데이 API에서 제공하는 XML 구조는 아래 링크를 참고하시구요.

그리고 Rows 항목에 적당히 테스트할 데이터를 집어넣습니다.
컬럼의 크기를 조정하기 위한 것이니 1개만 넣으면 됩니다.

이제 그리드에 Dataset을 바인딩해주어야 합니다.
binddataset 속성을 직접 채워주거나 Design 모드에서 Dataset을 마우스로 드래그해서 그리드위에 올려놓으면 됩니다.
이렇게 하고 불러온 데이터를 연결해주면서 데이터를 기준으로 그리드의 포맷을 만들어지면
아래와 같은 그림이 나올겁니다.
 


상단 헤더도 XML 요소값을 그대로 사용했고 텍스트가 너무 길어 제대로 표현되지 않습니다.
포맷을 자동으로 맞추어주는 것은 좋지만 뭔가 맘에 들지 않습니다.
이 경우에는 이미 들어올 데이터의 유형을 알고 있기 때문에
그리드의 포맷을 약간 수정해줄 수 있습니다.

Design 모드에서 그리드를 더블클릭하게 되면 Grid Contents Editor 가 나타납니다.
여기서 그리드와 관련된 다양한 속성을 수정할 수 있습니다.
먼저 헤더에 표시될 이름을 바꾸어봅시다.

해당하는 컬럼의 헤더를 선택하고 text 값을 수정합니다.


헤더값을 다 수정했으면 각 컬럼의 길이를 조금씩 조정해줍니다.
본문이 가장 길고 나머지 댓글이나 미투는 숫자만 표시되기 때문에
그렇게 길게 표기할 필요는 없습니다.

컬럼의 길이를 수정할때에는 해당 컬럼 영역을 선택해야 합니다.
형광색으로 표기되는 부분이 선택된 영역입니다.


컬럼을 선택하고 size 값을 수정해주거나 컬럼과 컬럼를 엑셀에서 하듯이 마우스로 조정해줄 수 있습니다.
마찬가지 방법으로 헤더나 본문의 로우에 대한 크기를 수정해줄 수 있습니다.

그리고 헤더나 데이터 모두 기본적으로 가운데 정렬을 제공하는데
본문의 경우에는 왼쪽 정렬을 시키고 글자가 제공되는 셀의 크기를 벗어나는 경우에
내려쓰기를 하려고 합니다.
이런 경우에는 본문의 로우 영역을 선택하고 wordwrap 속성과 align 속성을 수정해주면 됩니다.


Cell에서 wordwrap 속성은 5가지가 있습니다. 여기에 정규표현식을 추가할 수도 있구요.
- none : 사용하지 않습니다. 기본값
- word : 멀티바이트 문자단위에 대해 단어단위로 새로운 라인에 출력
- english : 영문자 단위에 대해 단어단위로 새로운 라인에 출력
- both : 영문자와 멀티바이트 둘 다 적용
- char : 글자(캐릭터) 단위로 개행

차이가 좀 명확하지는 않지만 하여간 그렇다고 합니다. 

자 이제 이렇게 하면 그리드 포맷에 대한 설정이 어느정도 작업되었습니다.
이제 데이터를 가져오는 부분을 살펴보도록 하겠습니다.

앞에서 본 것처럼 DomDocument 의 url 속성으로 미투데이 API 주소를 설정하고
버튼 클릭시 DomDocument 가 로드되도록 하고 onload 이벤트를 걸었습니다.
그렇게 하면 이벤트를 타고 API에서 제공하는 전체 DOM 구조가 넘어옵니다.

하지만 그렇게 하면 우리가 원하는 Dataset 구조가 아닙니다.
Dataset 구조를 만들기 위해서는 약간의 작업이 필요합니다.

먼저 해당 XML 파일의 구조를 알려주어야 합니다.
XML 파일을 보면 posts 요소 아래 post 요소가 중첩되어 있는 것을 알 수 있습니다.
var Rows = obj.getElementsByPath('/posts/post');

이렇게 하면 Rows 라는 오브젝트에 각 본문단위로 데이터가 담겨지게 됩니다.
이제 각 데이터를 Dataset에 넣어주어야 합니다.
이미 Dataset에서 데이터 구조에 맞게 컬럼 ID가 설정되었기 때문에 이를 활용할 것입니다.

반복문에서 넘어온 데이터 숫자만큼 반복하면서 Dataset에 로우를 추가합니다.
for(var i = 0; i < Rows.length;i++)
{
var Row = Rows[i];
var nCurRow = Dataset00.addRow();
for(var nCol = 0; nCol < Dataset00.getColCount(); nCol++)
{
    var ColVal = Row.getElementsByPath(Dataset00.getColID(nCol));
    if(ColVal.length == 0) continue;
    Dataset00.setColumn(nCurRow, Dataset00.getColID(nCol), ColVal.get_item(0).textContent);    
}
}

addRow()는 새로운 로우를 추가하는 메소드입니다. 새로운 로우를 추가하면서
해당 로우의 위치 인덱스값을 던져줍니다.

그리고 setColumn() 메소드는 로우의 위치값, 컬럼의 인덱스값에 해당 데이터를 설정해줍니다.
이렇게 하면 선택된 Dataset에 데이터가 설정됩니다.

이제 마지막으로 테스트했던 데이터가 보이지 않도록
form의 onload 이벤트에 Dataset의 deleteAll() 메소드를 배정해줍니다.
아니면 그냥 데이터를 날려버려도 무관합니다.


자 이렇게 간단하게 셜리의 미투데이를 가져올 수 있는 간단한 애플리케이션을 만들었습니다.
그런데 이렇게 올려진 글만 보려고 이런걸 만드는 건 아니거든요.
다음 번에는 사진을 어떻게 가져올 수 있는지 살펴보도록 하겠습니다.

* 해당 파일은 아래에서 확인할 수 있습니다.
XPLATFORM 101
엑스플랫폼에서 이벤트를 생성하는 방법은 여러가지가 있지만
일반적으로 태그내에서 바로 생성하는 방법과
이벤트에 핸들러 함수를 추가하는 방식이 있습니다.

버튼과 같은 시각적으로 보여지는 부분은 디자인 모드에서
해당 속성 창을 확인하고 적절한 함수를 생성해서 이벤트를 처리하는 스크립트를 추가하면 됩니다.
UX스튜디오에서는 속성창에서 이벤트 입력란을 더블클릭하면 자동으로 함수를 생성하고
스크립트를 추가할 준비가 됩니다.


이벤트 핸들러 함수를 추가하는 방식은 주로 동적으로 생성되는 개체와 관련되어 있습니다.
예를 들어 미투데이에서 셜리의 최근 포스팅을 가져오는 스크립트를 필요로 한다면 다음과 같이 작성할 수 있습니다.


미투데이에서 특정 아이디의 최신 포스팅을 가져오는 xml은 다음과 같이 요청할 수 있습니다.
http://me2day.net/api/get_posts/[미투데이 사용자아이디].[응답형식]

미투데이에서는 응답형식으로 xml과 json을 지원합니다.
일단 여기서는 xml을 사용해봅니다.

xml 형식으로 가져오는 데이터를 다루기 위해 DomDocument 개체를 사용합니다.
DomDocument 는 위의 예제와 같이 새로운 개체를 생성하고 url 값을 지정한 후에 load() 메소드를 실행해주면 됩니다.
이때 데이터를 가져오고나면 onload 라는 이벤트가 발생하는데 태그가 아니기때문에
이벤트를 처리해줄 방법이 없습니다.

그래서 지원되는 형식이 addHendler 입니다.
[개체].[이벤트].addHandler([이벤트 핸들러 함수]) 와 같은 형식으로 사용하면 됩니다.

이벤트 핸들러 함수의 형식은 API를 직접 확인하고 추가해주어야 합니다.


그럼 아래와 같이 데이터를 확인할 수 있습니다.


일단은 이벤트 리스너가 이렇게 동작한다는 것까지만..^^

http://cafe.naver.com/xplatform101/93 
XPLATFORM 101
엑스플랫폼은 애플리케이션을 실행시키기 위해 다양한 파일을 필요로 합니다.
그리고 각 파일은 애플리케이션과 연계되어 순서를 가지게 됩니다.

jsp나 asp와 같은 웹 애플리케이션에 익숙한 상태에서는
그냥 서버에 파일을 올리면 알아서 서버에서 HTML 형태로 브라우저에 날려주는 형식이 익숙하기 때문에
이런 여러가지 설정 파일이 왜 있어야 하는것인지 잘 이해하기 어렵습니다.

jsp나 asp는 서버에서 사용자에게 필요한 HTML 문서를 만들어서 날려주는 형식인데
엑스플랫폼이나 실버라이트, 플렉스와 같은 RIA 플랫폼의 경우에는 사용자 PC에 엔진이 설치되어 있는 상태에서
필요한 데이터 유형이나 명령이 담긴 파일을 내려주어 화면을 구현하는 형식입니다.
직접적인 화면 렌더링을 클라이언트에서 처리하기 때문에 서버쪽 트랜잭션 부하를 줄일 수 있고
동적인 화면 구성이 가능합니다.

http://www.esps.or.kr

먼저 엑스플랫폼 애플리케이션이 어떻게 동작하는지 살펴보겠습니다.

(1) Error File
- 에러 메시지가 담긴 파일이며 별도 지정하지 않으면 기본 파일을 사용합니다.
- 이때 사용되는 파일은 errordefine.xml 파일입니다.
(UX 스튜디오 설치 폴더에서 찾을 수 있습니다).
운영환경에서는 XLauncher.errorfile = "http://xxx.xx.x.xx/XP/real_errordefine.xml"; 와 같은 식으로 애플리케이션별 구성이 가능합니다.

(2) ADL File
- 애플리케이션의 기본 구조를 정의한 파일입니다.
프로젝트 만들기 - XADL http://cafe.naver.com/xplatform101/13 에서 설명한 것처럼
화면을 그리기 위한 여러가지 정보를 확인합니다.

(2-1) License 체크
- 상황에 따라 다르긴 하지만 해당 시점에서 라이센스를 체크합니다.
비정상적인 경우에는 여기서 종료가 됩니다.

(3) Type Definition File
- 애플리케이션의 환경 정보를 담고 있습니다. 사용되는 오브젝트나 업그레이드를 위한 정보를 담습니다.
내용을 확인하고 애플리케이션에 필요한 컴포넌트를 사용할 준비를 시켜줍니다.

(4) Global Variable File
- 애플리케이션에서 사용하는 글로벌 변수를 가져옵니다.

(5) Theme File 
- 애플리케이션에서 사용하는 테마 설정을 가져옵니다.

(6) CSS File
- 사용자가 추가적으로 정의한 CSS 파일을 가져옵니다.
테마보다 높은 우선순위로 적용됩니다.

(7) include Script File
- ADL에 등록된 스크립트에서 include로 포함된 스크립트 파일을 가져옵니다.

(8) Form File
- ADL MainFrame에서 사용하는 Form 파일입니다. xfdl 파일이 되겠죠.

(8-1) Type Definition File
- 폼에 따라 별도의 Type Definition 정의가 있다면 새로운 설정을 불러옵니다.
대부분의 경우에는 동일하게 사용합니다.

(8-2) CSS File
- 역시 별도로 사용할 경우에 사용합니다.

(8-3) Object 연관 File
- image, subform url, buffer, dataset file 정보

(8-4) include Script File
- Form에 등록된 스크립트에서 include로 포함된 스크립트 파일을 가져옵니다.

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