XPLATFORM 101
VirtualFile 은 그 자체만으로는 아무런 역할을 하지 못합니다.
뭔가 파일이 연결이 되어야 일을 할 수 있죠.

그래서 생성자에서 기본적으로 파일을 연결하게 됩니다.
생성자를 사용하는 것이 open() 메소드를 사용하는 것과 동일합니다.
var vfile = new VirtualFile("abc.txt",VirtualFile.openRead);
생성자나 open() 메소드는 2개의 파라미터를 가집니다.

첫번째 값은 파일명입니다. 
경로를 가지지 않으면 내문서에 있는 파일을 찾습니다.
경로를 지정할 수 있긴 한데 내문서를 기준으로 상대경로로만 접근할 수 있습니다.

두번째 값은 파일을 다루는 옵션입니다.
사용할 수 있는 옵션은 다음과 같습니다.
VirtualFile.openRead
 : 파일을 읽습니다. 쓰기는 안됩니다.
VirtualFile.openWrite
 : 파일을 새로 만듭니다. 파일이 있어도 만듭니다. 파일을 쓸 수 있습니다.
VirtualFile.openAppend
 : 파일의 끝에 내용을 추가할 경우에 사용합니다. 기존 파일 뒤에 내용을 추가합니다.
VirtualFile.openCreate
 : openRead와 비슷한데 파일이 없으면 만들어줍니다. 있으면 있는 걸 열어주고. 쓰기는 안됩니다.
VirtualFile.openRead | VirtualFile.openWrite
 : openCreate와 비슷한것 같은데 차이가 있으면 따로 언급하겠습니다.
추가적인 옵션을 텍스트파일인지 바이너리 파일인지에 따라 
VirtualFile.openText 또는 VirtualFile.openBinary 를 사용합니다.

앞에서 FileDialog를 사용하면 VirtualFile 객체를 반환한다고 했는데
해당 단계에서는 파일을 선택하고 해당 파일의 정보를 가져왔을 뿐이고
open() 메소드를 사용해야 실제 파일을 다룰 수 있게 됩니다.
var vfile = this.FileDialog00.open("FileOpen", FileDialog.LOAD);
vfile.open(VirtualFile.openRead);
그래서 한단계 더 코드를 필요로 합니다.

이제 VirtualFile은 파일로서 다루어질 준비가 되었습니다.
간단하게 파일 크기를 확인하는 getFileSize() 메소드를 사용해볼 수 있습니다.
trace(vfile.getFileSize());
해당 파일 크기를 확인해볼 수 있습니다. ^^

http://cafe.naver.com/xplatform101/316 
XPLATFORM 101
엑스플랫폼에서 FileDialog를 사용해서 로컬 PC에 있는 파일에 접근하게 되면
선택된 파일을 VirtualFile 형태로 생성해줍니다.

예를 들어 스크립트에서 아래와 같이 메소드를 호출하게 되면
파일 대화상자가 뜨고 파일을 선택하면 선택된 파일에 대한 정보가
VirtualFile 형태로 만들어집니다.
var a = this.FileDialog00.open("FileOpen", FileDialog.LOAD);
a 라는 변수를 디버그 모드에서 확인해보면 다음과 같습니다.



object VirtualFile 이라는 항목을 확인할 수 있습니다.
선택된 파일명과 경로, 전체경로를 확인해볼 수 있습니다.


그럼 VirtualFile 이란 뭘까요?
그냥 파일이면 파일이지 무슨 VirtualFile 이란것을 따로 만들었을까요?

기본적인 의도는 애플리케이션 개발자가 악의적으로 사용자의 시스템에 접근할 수 없도록 차단하려는 의도입니다.
이런 장치가 없다면 애플리케이션이 사용자 PC의 시스템파일을 파괴하거나 악의적인 실행파일을
심어버릴 수 있습니다.
때문에 사용자가 모르게 시스템 자원에 접근하는 것을 원천적으로 차단하고 있습니다.
(물론 사용자가 선택하는 경우에는 이런 제약이 없습니다).

이렇게 파일을 가져오게 되면 접근상에는 제약이 있지만
파일을 읽거나 쓸 수 있고 몇 가지 추가적인 작업을 할 수 있습니다.

좀 더 자세한 내용은 다음 번에 살펴보도록 하겠습니다. 

http://cafe.naver.com/xplatform101/314 
XPLATFORM 101
엑스플랫폼을 처음 다루면서 개념잡기가 어려운 것 중에 하나가
데이터셋에 대한 이야기입니다.
데이터를 쉽게 다루기 위해 만들어진 도구이지만 아무래도 처음 쓰기에는 어려움이 있습니다.
하지만 잘 사용하면 강력한 도구가 됩니다.
마치 스마트폰 처럼 말이죠.

어떻게 데이터셋 개념을 잡았는데 FilteredDataset 라는 것이 나타나서
정신을 혼란하게 만듭니다. 그래서 간단하게 이를 정리해보고자 합니다.

1. FilteredDataset 는 데이터를 독립적으로 사용할 수 있나?
일반적으로 데이터셋을 만드록 데이터를 설정하면 컬럼에 대한 정보와 데이터(Row)에 대한 정보를
기록합니다. 이런 정보는 소스에 기록되구요.
하지만 FilteredDataset 는 이런 정보를 가지고 있지 않습니다. 유일하게 가지고 있는 것은 binddataset 입니다.
독립적으로 데이터를 가지고 있는 것이 아니라 바인딩된 데이터셋을 기준으로
logical 한 데이터를 가지는 형식입니다.

2. FilteredDataset 을 왜 쓰는 거죠?
아래 그림과 같이 2개의 그리드가 있고 1번 그리드에서 특정 항목을 선택하면 선택된 group 데이터만
2번 그리드에 보여준다고 합시다. 이때 1번 데이터셋에는 영향을 주지 않고 2번 그리드에 표현되는 항목만
처리를 해주어야 하기 때문에 뭔가 별도의 장치가 필요합니다.
이럴 경우에 별도의 장치로 FilteredDataset 을 사용할 수 있습니다.


자 이제 예제를 보겠습니다.
예제는 위의 그림처럼 2개의 그리드가 있고 1번 그리드에서 항목을 선택하면 선택된 group 데이터만 2번 그리드에
보여주도록 할 것입니다.
화면 소스는 특별할 것이 없으니 UX스튜디오에서 확인해보시고
스크립트를 보겠습니다.
function Grid00_oncellclick(obj:Grid, e:GridClickEventInfo)
{
var group_nm = this.Dataset00.getColumn(e.row, 'group');
this.FilteredDataset00.filter("group=='"+group_nm+"'");
}
그리드의 특정 셀(항목)을 클릭하게되면 GridClickEventInfo라는 객체가 전달됩니다.
이 안에는 선택된 셀에 대한 여러 정보가 담겨져있습니다.
여기에서는 선택된 row에서 group 이라는 컬럼의 정보를 가져오게 하고
이를 FilteredDataset00 에서 필터링  조건으로 적용시킵니다.
그럼 선택할때마다 2번 그리드의 데이터가 바뀌는 효과를 볼 수 있습니다.
function Button00_onclick(obj:Button,  e:ClickEventInfo)
{
this.Dataset00.setColumn(Dataset00.rowposition,1,Edit00.value);
}

function Button01_onclick(obj:Button,  e:ClickEventInfo)
{
this.FilteredDataset00.setColumn(FilteredDataset00.rowposition,1,Edit00.value);
}
그리고 4개의 버튼을 배치했는데
원본 데이터셋과 FilteredDataset 사이에 데이터를 수정시 어떻게 영향을 미치는지 확인할 수 있습니다.
setColumn() 메소드는 지정된 row, column 에 해당하는 데이터를 지정된 값으로 변경시킵니다.
양쪽 다 수정시 서로 영향을 미치게 되지만 데이터셋에는 최초 로딩된 데이터를 따로 가지고 있기 때문에
언제든지 복구시킬 수 있습니다.
function Button02_onclick(obj:Button,  e:ClickEventInfo)
{
this.Dataset00.filter("group=='A'");
}

function Button03_onclick(obj:Button,  e:ClickEventInfo)
{
this.FilteredDataset00.filter("group=='B'");
}
하지만 데이터셋에서 필터를 적용하는 경우에는 FilteredDataset 에서 참조하는 원본이 바뀌는 것이기 때문에
FilteredDataset 에서 어떻게 복구할 수 있는 방법이 없습니다.
상황에 따라 다양하게 사용해보면 좀 더 많은 팁을 얻을 수 있지 싶습니다.

* 첨부된 파일은 압축을 풀어서 참조하시면 됩니다.
* 예제로 살펴보는 이라고 제목을 붙였는데 예제가 좀 아쉽네요. ㅠㅠ

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