doSave, getSaveJson, getSaveString 등 저장 API 호출 시 셀별로 순회하며 발생하는 사용자 정의 유효성 검사 이벤트입니다.
doSave에서는 onSave 다음에 발생하며,getSaveJson/getSaveString에서는 이 이벤트만 발생합니다.
셀 순회는 컬럼 단위로 진행됩니다 (첫 컬럼의 모든 행 → 다음 컬럼의 모든 행 순서).
필수입력 등 시스템 정의 검사(validRequired,validSize,validEditMask,validResultMask)와 별개로, 업무 로직에 따른 검증을 처리합니다.
유효성 검사 기준에 맞지 않으면true를 리턴하여 진행 중인 저장을 중단할 수 있습니다.
options.Events = {
onValidation: function(evtParam) {
}
};
// 또는
sheet.bind("onValidation", function(evtParam) {});
| Name | Type | Description |
|---|---|---|
| sheet | object |
현재 유효성 검사가 진행되고 있는 시트 객체 |
| row | object |
현재 유효성 검사가 진행되고 있는 셀의 데이터 로우 객체 |
| col | string |
현재 유효성 검사가 진행되고 있는 셀의 열 이름 |
boolean
// 컬럼별로 다른 검증 로직 적용 (공통 헬퍼 사용)
options.Events = {
onValidation: function(evtParam) {
var sheet = evtParam.sheet;
var row = evtParam.row;
var col = evtParam.col;
// 검증 대상이 아닌 컬럼은 즉시 통과 (불필요한 if 분기 실행 방지)
if (col !== "Amount" && col !== "StartDate") return;
var value = sheet.getValue(row, col);
// 공통 헬퍼: 메시지 표시 + OK 시 문제 셀로 편집모드 진입 + 저장 중단 신호
function alertAndFocus(msg) {
sheet.showMessageTime({
message: msg,
buttons: ["OK"],
func: function() {
// sheet.focus(row, col); // 포커스만 (편집모드 진입 X)
sheet.startEdit(row, col); // 포커스 + 편집모드 진입
}
});
return true;
}
// Amount 컬럼: 0 이상이어야 함
if (col === "Amount" && value < 0) {
return alertAndFocus("Amount는 0 이상이어야 합니다.");
}
// StartDate 컬럼: 같은 행의 EndDate보다 이전이어야 함
if (col === "StartDate") {
var endDate = sheet.getValue(row, "EndDate");
if (endDate && value > endDate) {
return alertAndFocus("시작일은 종료일보다 이전이어야 합니다.");
}
}
}
}
| product | version | desc |
|---|---|---|
| core | 8.2.0.19 | 기능 추가 |