RecordSet 객체를 사용하면 Flash Remoting에서 반환한 RecordSet 객체를 조작하거나 클라이언트측 RecordSet 객체를 생성할 수 있습니다. 레코드세트는 여러 가지 방법으로 레코드 목록을 페치(fetch)하고, 액세스하고 조작하기 위한 함수가 있는 레코드 목록입니다.
응용프로그램 서버에 생성된 레코드세트는 일반적으로 데이터베이스 질의 결과로 구성됩니다. RecordSet 객체의 각 레코드는 유형이 지정되지 않은 ActionScript 객체로 나타납니다. RecordSet 객체에서 개별 레코드는 색인 번호로 식별됩니다. 색인은 0에서 시작합니다. 레코드세트를 정렬하거나 RecordSet에 레코드를 추가하거나 RecordSet에서 레코드를 삭제하면 색인이 변경됩니다.
레코드의 각 필드는 객체의 필드로 나타납니다. 응용프로그램 서버에서 만들어진 RecordSet 객체의 필드 이름은 서버측 RecordSet에 정의된 필드의 이름과 같습니다. 로컬 RecordSet 객체의 필드 이름은 new RecordSet() 함수 호출에서 정의한 필드 이름입니다.
RecordSet 객체를 사용하려면 다음과 같이 include 명령을 사용하여 Flash 동영상의 첫 번째 프레임에 있는 NetServices ActionScript 클래스 파일을 가져와야 합니다. 이 클래스 파일에는 RecordSet ActionScript 클래스도 포함되어 있습니다.
#include "NetServices.as"
RecordSet 객체의 메소드 요약
-------------------------
메소드 : 설명
new RecordSet : 새 로컬 RecordSet 객체를 생성합니다.
RecordSet.addItem : RecordSet 객체에 레코드를 삽입합니다.
RecordSet.addItemAt : RecordSet 객체의 지정한 색인에 레코드를 삽입합니다.
RecordSet.addView : RecordSet 객체가 변경되면 통지를 받을 객체를 정의합니다.
RecordSet.filter : 원래 RecordSet 객체에서 선택한 레코드가 포함된 새 RecordSet 객체를 생성합니다.
RecordSet.getColumnNames : RecordSet 객체의 모든 열 이름을 반환합니다.
RecordSet.getItemAt : 색인이 유효하고 레코드를 즉시 사용할 수 있으면 레코드를 반환합니다.
RecordSet.getItemID : 레코드 ID를 반환합니다.
RecordSet.getLength : RecordSet 객체의 레코드 개수를 반환합니다.
RecordSet.getNumberAvailable : 서버에서 다운로드한 레코드 개수를 반환합니다.
RecordSet.removeAll : RecordSet 객체에서 모든 레코드를 제거합니다.
RecordSet.removeItemAt : RecordSet 객체에서 지정한 레코드를 제거합니다.
RecordSet.replaceItemAt : 지정한 색인의 레코드를 바꿉니다.
RecordSet.setDeliveryMode : 응용프로그램 서버와 연결된 RecordSet의 배달 모드를 변경합니다.
RecordSet.setField : 레코드에 있는 한 필드의 값을 새 값으로 바꿉니다.
RecordSet.sort : 사용자가 지정한 비교 함수를 사용하여 모든 레코드를 정렬합니다.
RecordSet.sortItemsBy : 새 복사본을 만들지 않고 RecordSet 객체의 모든 레코드를 정렬합니다.
RecordSet 객체의 특성 요약
-----------------------
특성(읽기 전용) : 설명
RecordSet.isFullyPopulated : RecordSet 객체가 완전히 채워졌는지 여부를 결정합니다.
RecordSet.isLocal : RecordSet 객체가 로컬에 있는지 아니면 응용프로그램 서버에 연결되어 있는지 여부를 결정합니다.
columnNames 각 문자열이 RecordSet 열 중 한 열의 이름인 문자열 배열입니다.
[반환 값]
새 로컬 RecordSet 객체를 반환합니다.
[설명]
방법: 새 로컬 RecordSet을 생성합니다. 처음에는 RecordSet이 비어 있습니다. 로컬 RecordSet 객체는 응용프로그램 서버에서 데이터를 다운로드하지 않으므로 데이터 배달과 관련된 RecordSet 함수는 로컬 RecordSet 객체에 사용할 수 없습니다.
[예]
다음 예는 새 로컬 RecordSet 객체를 생성합니다.
#include "NetServices.as"
var productList = new RecordSet(["ProductName", "Price", "Color"]);
object RecordSet 객체가 변경되면 통지를 받을 ActionScript 객체입니다.
[반환 값]
없음
[설명]
방법: RecordSet 객체가 변경되면 통지를 받을 ActionScript 객체를 정의합니다. 이 객체에는 매개변수 한 개와 이벤트 설명자 객체 한 개를 사용하는 modelChanged 함수가 포함되어 있어야 합니다. 다음 테이블에서는 이벤트 설명자 메시지와 메시지에 대한 설명이 나옵니다.
메시지 : 설명
{event:"sort"} : RecordSet이 정렬되었습니다.
{event:"updateAll"} : RecordSet이 변경되었습니다(예: 새 뷰 추가).
방법: 색인이 유효하고 레코드를 즉시 사용할 수 있으면 레코드를 반환합니다. 요청한 레코드 색인 번호가 0보다 작거나 가장 큰 레코드 번호보다 크면 null을 반환합니다. 색인 번호는 유효하지만 요청한 레코드가 아직 다운로드되지 않았으면 "진행 중"이라는 문자열을 반환합니다. RecordSet 색인을 정렬하거나 레코드를 삭제 또는 제거하면 RecordSet 색인이 변경됩니다.
에러 처리
에러 조건
발생하는 작업
에러 메시지
범위를 벗어난 색인
Null이 반환되고, Flash MX 출력 창과 디버그 콘솔에 에러 메시지가 보고됩니다.
GETITEMAT: RecordSet 색인이 범위를 벗어났습니다.
[예]
다음 예는 getItemAt 함수를 보여 줍니다.
#include "NetServices.as"
var productList = new RecordSet(["ProductName","Price","Color"]);
productList.addItem({ProductName :"수저",Price :77,Color :"0x987654"});
var record = productList.getItemAt(0);
지정한 색인의 레코드에 해당하는 고유 ID로 색인이 범위를 벗어나면 null을 반환합니다.
[설명]
방법: 지정한 색인의 레코드에 해당하는 고유 ID를 반환합니다. RecordSet 객체는 각 레코드에 고유한 ID를 할당합니다. ID는 RecordSet 객체 내에 있는 레코드와 연결된 별도의 항목이며 레코드의 일부가 아닙니다. 레코드 색인과 달리 레코드 ID는 RecordSet을 정렬하거나 레코드를 추가 또는 삭제하더라도 변경되지 않습니다. 레코드를 삭제하면 레코드 ID가 폐기되어 해당 RecordSet에는 다시 사용되지 않습니다. 또한 ID는 RecordSet이 변경될 때 최종 사용자가 선택한 항목을 유지하기 위해 ListBox 객체가 사용합니다.
[예]
다음 예는 RecordSet에서 레코드 ID를 검색합니다.
#include "NetServices.as"
var productList =new RecordSet(["ProductName","Price","Color"]);
productList.addItem({ProductName :"수저",Price :77,Color :"0x987654"});
var recordID =productList.getItemID(0);
방법: RecordSet 객체의 지정한 색인에 있는 레코드를 바꿉니다. 지정한 색인은 기존 레코드를 식별해야 합니다. 레코드의 내용이 레코드 매개변수의 내용으로 바뀝니다. 레코드 ID는 변경되지 않습니다. replaceItemAt 함수를 사용할 때는 다음과 같은 상황이 발생하지 않도록 하십시오.
범위를 벗어난 색인
레코드 매개변수가 객체가 아닙니다.
레코드 매개변수에 알 수 없는 필드가 있거나 필드가 누락되었습니다.
RecordSet 객체가 응용프로그램 서버와 연결되어 있는데 아직 완전히 채워지지 않았습니다.
에러 조건 : 발생하는 작업 : 에러 메시지
범위를 벗어난 색인 : RecordSet 객체가 변경되지 않습니다.
RecordSet 객체가 서버와 연결되어 있는데 완전히 채워지지 않았습니다. : RecordSet 객체가 변경되지 않고 출력 창과 디버그 콘솔에 에러 메시지가 보고됩니다. : 일부 RecordSet 객체에 대해 작업할 수 없습니다.
레코드 매개변수가 객체가 아닙니다. : RecordSet 객체에 레코드가 추가됩니다.
레코드 매개변수에 알 수 없는 필드가 있거나 필드가 누락되었습니다. : RecordSet 객체에 레코드가 추가됩니다.
에러 처리
[예]
다음 예는 replaceItemAt 함수를 보여 줍니다.
#include "NetServices.as"
var productList =new RecordSet(["ProductName","Price","Color"]);
var itemToAdd = {ProductName:"마술 풍선",Price:1,Color:"0xb00fed"};
productList.addItem(itemToAdd);
myListBox.setDataProvider(productList);
var replacementItem ={ProductName:"샴푸", Price:2, Color:"0xd00d1e"};
productList.replaceItemAt(0,replacementItem);
방법: 레코드에 있는 한 필드의 값을 새 값으로 바꿉니다. setField 함수를 사용할 때는 다음과 같은 상황이 발생하지 않도록 하십시오.
범위를 벗어난 색인
레코드 매개변수가 객체가 아닙니다.
레코드 매개변수에 알 수 없는 필드가 있거나 필드가 누락되었습니다.
RecordSet 객체가 응용프로그램 서버와 연결되어 있는데 아직 완전히 채워지지 않았습니다.
에러 조건 : 발생하는 작업 : 에러 메시지
RecordSet 객체가 서버와 연결되어 있는데 완전히 채워지지 않았습니다. : RecordSet 객체가 변경되지 않고 Flash MX 출력 창과 디버그 콘솔에 에러 메시지가 보고됩니다. : 일부 RecordSet 객체에 대해 작업할 수 없습니다.
범위를 벗어난 색인 : RecordSet 객체가 변경되지 않습니다.
알 수 없는 필드 이름 : RecordSet 객체가 변경되지 않습니다.
에러 처리
[예]
다음 예는 setField 함수를 보여 줍니다.
#include "NetServices.as"
var productList =new RecordSet(["ProductName","Price","Color"]);
var itemToAdd ={ProductName:"마술 풍선",Price:1,Color:"0x987654"};
productList.addItem(itemToAdd);
var replacementValue ="flashmx";
productList.setField(0,"ProductName",replacementValue);
mode 배달 모드를 식별합니다. 사용할 수 있는 옵션은 ondemand(기본 값), fetchall 및 page입니다.
pagesize (선택 사항) fetchall 모드에서 페이지 크기에 해당하는 항목이 page 모드에서는 각 서버 요청에서 페치(fetch)할 레코드 개수입니다.
numPrefetchPages (선택 사항) page 모드에서 사전에 페치(fetch)할 페이지 개수입니다.
[반환 값]
없음
[설명]
방법: 응용프로그램 서버와 연결된 RecordSet의 배달 모드를 변경합니다. 응용프로그램 서버와 연결된 RecordSet은 특정 데이터 배달 모드에서 언제든지 작동합니다. 지연 중인 응용프로그램 서버 요청이 완료되도록 할 때를 제외하고 새 모드 설정은 즉시 적용됩니다. 모드 설정은 변경할 수 있습니다.
RecordSet 객체에 대해 이 함수를 호출하기 전에는 ondemand 모드에서 작동합니다. ondemand 모드를 사용할 때는 다른 매개변수가 필요하지 않습니다. fetchall 모드를 사용할 때는 pagesize 매개변수를 제공해야 합니다. 전체 RecordSet이 일련의 요청으로 응용프로그램 서버에서 페치(fetch)됩니다. 각 요청은pagesize 매개변수에 지정된 레코드 개수만 페치(fetch)합니다.
page 모드를 사용할 때는 pagesize와 preFetchPages 매개변수를 제공해야 합니다. page 모드에서 getItemAt 함수를 사용하여 레코드를 요청하면 RecordSet 객체는 요청된 레코드가 포함된 페이지 뒤의 preFetchPages 페이지를 클라이언트에서 사용할 수 있는지 또는 서버에서 요청되었는지 확인합니다. numPrefetch 페이지가 0이면 현재 페이지만 페치(fetch)됩니다.
RecordSet이 완전히 채워진 경우에는 setDeliveryMode 함수가 적용되지 않습니다.
에러 처리
에러 조건 : 발생하는 작업 : 에러 메시지
알 수 없는 모드 문자열 : RecordSet 객체가 변경되지 않고 출력 창과 디버그 콘솔에 에러 메시지가 보고됩니다. : SETDELIVERYMODE: 알 수 없는 모드 문자열
filterFunction 두 개의 매개변수를 사용하고 true나 false를 반환하는 ActionScript 함수입니다. 첫 번째 매개변수는 RecordSet 객체의 단일 레코드입니다. 레코드가 결과 RecordSet 객체에 포함되어야 할 때는 이 함수가 true를 반환합니다.
context 호출자가 제공한 문맥 값입니다.
[반환 값]
복사본이 아닌 filter 함수가 선택한 모든 레코드에 대한 참조가 있는 새 RecordSet 객체입니다.
[설명]
방법: Record 객체의 각 레코드에 대해 한 번씩 filter 함수를 호출하고, filter 함수가 true를 반환한 모든 레코드를 새 RecordSet 객체에 수집하여 새 Record 객체를 생성합니다. 새 RecordSet 객체의 레코드 순서는 원래 Record 객체의 레코드 순서와 같습니다. 필터링하는 동안 원래 RecordSet 객체가 통과되는 순서는 정의되지 않습니다.
완전히 채워지지 않은 RecordSet 객체에 사용하면 현재 사용할 수 있는 레코드만 필터링됩니다. 새 RecordSet 객체는 원래 RecordSet 객체의 뷰 목록이나 서버측 RecordSet 객체와의 연결을 상속하지 않습니다.
[예]
다음 예는 RecordSet 객체의 필터된 뷰를 보여 주는 목록 상자 UI 구성 요소를 작성하는 방법을 보여 줍니다.