[Nexacro N] Dataset savedOrg — 원본 데이터 보관
Nexacro N Dataset이 서버에서 받은 원본 값을 어떻게 savedOrg에 보관하는지, getOrgColumn·restoreColumn·resetData·acceptRow의 동작 원리와 활용 패턴을 설명합니다.
지난 글에서 rowType으로 행의 변경 상태를 추적하는 법을 다뤘습니다. Dataset은 rowType과 함께 **원본 값(savedOrg)**도 내부에 보관합니다. 사용자가 값을 수정해도 원본이 사라지지 않기 때문에, 언제든 수정 전 값을 되찾거나 비교할 수 있습니다.
savedOrg란?
transaction()으로 서버에서 데이터를 받으면 Dataset은 각 행의 값을 두 곳에 저장합니다.
- current: 현재 편집 중인 값 (화면에 표시)
- savedOrg: 서버에서 받았을 때의 원본 값
사용자가 setColumn()으로 값을 바꾸면 current만 변경되고 savedOrg는 그대로 남습니다.
getOrgColumn — 원본 값 읽기
// 현재 값과 원본 값 동시 조회
var orgVal = ds.getOrgColumn(i, "DEPT_NM"); // savedOrg 값
var curVal = ds.getColumn(i, "DEPT_NM"); // current 값
trace("원본: " + orgVal); // "개발팀"
trace("현재: " + curVal); // "개발1팀" (수정 후)
restoreColumn — 특정 셀 원본 복원
개별 셀을 원본으로 되돌립니다. 행 전체가 아니라 컬럼 단위로 취소할 때 사용합니다.
// 특정 행의 DEPT_NM 컬럼만 원본으로
ds.restoreColumn(i, "DEPT_NM");
// 복원 후 rowType도 자동 재계산
// 다른 컬럼도 원본과 같다면 rowType → NORMAL
resetData — 전체 행 원본 복원
Dataset 전체를 savedOrg 기준으로 되돌립니다. 사용자가 “취소” 버튼을 눌렀을 때 가장 많이 씁니다.
function btn_cancel_onclick(obj, e) {
// 변경된 모든 행·컬럼을 원본으로 복원
this.dsSave.resetData();
// rowType이 모두 NORMAL로 바뀌고
// INSERT 행은 제거, DELETE 행은 복원됨
}
acceptRow — 수동 커밋
서버 저장 없이 현재 값을 새로운 원본으로 확정할 때 씁니다. savedOrg를 현재 값으로 덮어쓰고 rowType을 NORMAL로 변경합니다.
// 특정 행만 수동 커밋 (rowType → NORMAL)
ds.acceptRow(i);
// 전체 행 커밋
for (var r = 0; r < ds.rowcount; r++) {
ds.acceptRow(r);
}
주로 클라이언트 단에서 스텝별 처리 후 중간 상태를 확정해야 할 때 씁니다.
변경 감지 패턴
savedOrg를 이용해 화면이 열린 후 변경이 있는지 확인하는 패턴입니다.
function fn_hasChanges() {
for (var i = 0; i < ds.rowcount; i++) {
if (ds.getRowType(i) != Dataset.ROWTYPE.NORMAL) {
return true;
}
}
return false;
}
// 페이지 이동 전 미저장 경고
function btn_move_onclick(obj, e) {
if (fn_hasChanges()) {
if (!confirm("저장하지 않은 변경이 있습니다.")) return;
}
this.gfn_movePage("nextPage");
}
savedOrg 저장 시점 정리
| 시점 | savedOrg 갱신 |
|---|---|
transaction() 성공 콜백 | 전체 행 갱신 |
loadXML() 호출 | 전체 행 갱신 |
acceptRow(i) 호출 | 해당 행만 갱신 |
setColumn() 호출 | 갱신 없음 (current만 변경) |
resetData() 호출 | 역방향 — savedOrg로 current 덮어씀 |
지난 글: [Nexacro N] Dataset rowType — 행 상태 추적
다음 글: [Nexacro N] Dataset 행 추가·수정·삭제
읽어주셔서 감사합니다. 😊