# onBeforeDataLoad (event)

> 데이터가 시트에 로드되기 전에 발생하는 이벤트입니다.

> 데이터가 시트 내부에서 파싱되기 전 단계이므로 row 객체가 생성되지 않아 row 객체를 인자로 사용하는 함수는 사용할 수 없습니다.
> 이 시점에서는 이벤트 파라미터인 `data` 객체를 활용하여 데이터를 가공할 수 있습니다.

> 파싱이 완료된 이후에는 onDataLoad이벤트가 발생합니다.

### Syntax

        onBeforeDataLoad:function(paramObject) {

        }
    or
        sheet.bind("onBeforeDataLoad" , function(paramObject) {});

### Parameters

Name | Type | Description
--- | --- | ---
sheet | `object` | 데이터를 로딩할 시트 객체
result | `number` | 1. 서버를 통한 조회 시(doSearch) `0`:성공 `-1`:빈 URL (`예: sheet.doSearch("")`) `-3`:요청 Url이 잘못된 경우나 네트워크 오류 등으로 결과를 받지 못한 경우 `-5`:응답 결과가 빈값인 경우 `-6`:연결 시간 초과((cfg)Timeout 초과) `-7`:잘못된 데이터 형식(대부분 데이터 이상) `이외`:사용자 정의 코드 2. 일반 데이터 조회 시(loadSearchData) `0`:성공 `-7`:잘못된 데이터 형식
data | `object` | 시트에 로딩될 데이터
message | `string` | 조회 결과 `json`에 포함된 `Message` 내용
response | `object` | `response` 객체

### Return

none

### Example

    // 조회 후 오류에 대한 예시
    options.Events = {
        onBeforeDataLoad:function(evtParam){
            if (evtParam.result === -100) {
                alert("세션이 종료되었습니다.\n로그인 화면으로 이동합니다.");
                location.href = "/login.do";
            } else if (evtParam.result < 0) {
                alert("조회 중 오류가 발생하였습니다.\n" + evtParam.message);
            }
        }
    }

    // 조회된 내용에 대한 수정 예시
    options.Events = {
        onBeforeDataLoad:function(evtParam){
            // 조회 결과 데이터
            var DATA = evtParam.data;
            // 조회된 데이터 일부를 수정한다.
            for(var i = 0; i < DATA.length; i++){
                var row = DATA[i];
                // AttrYn 컬럼에 값이 Y 인 경우 ConfirmFinish 컬럼에 "결정완료"를 설정하고
                // 해당 행의 Edit를 막는다. (data 객체를 직접 수정하면 시트에 반영되므로 별도 리턴은 필요 없음)
                if(row["AttrYn"] == "Y"){
                    row["ConfirmFinish"] = "결정완료";
                    row["CanEdit"] = 0;
                }
                // 셀 단위 속성 설정 (컬럼명 + 속성명)
                if(row["price"] >= 10000000){
                    row["priceTextColor"] = "#FF0000";  // price 셀의 글자색을 빨간색으로 설정
                }
            }
        }
    }

    // ibsheet-common.js에서 공통 오류 처리 (공통 이벤트 처리 방법 참고)
    IBSheet.onBeforeCreate = function(obj) {
        var options = obj.options;
        options.Events = options.Events || {};

        // 기존 화면에 설정된 이벤트를 담아둠
        var origEvent = options.Events.onBeforeDataLoad;
        // 공통 이벤트를 먼저 실행하고, 이후 화면단의 이벤트를 실행
        options.Events.onBeforeDataLoad = function(evtParam) {
            // 공통 오류 처리
            if (evtParam.result === -100) {
                alert("세션이 종료되었습니다.");
                location.href = "/login.do";
                return;
            } else if (evtParam.result < 0) {
                alert("오류가 발생하였습니다.\n" + evtParam.message);
                return;
            }
            // 개별 페이지 이벤트 호출
            if (origEvent) return origEvent(evtParam);
        };

        return obj;
    };

    // 조회 결과 json 참고
    {
        //IO,Result,Message 대소문자 주의!
        "IO":{"Result":100,"Message":"정상조회완료"},
        "Data":[ ... ]
    }

### Read More

- 조회 이벤트 발생 순서
- 조회 응답 규격
- 페이징 응답 규격
- doSearch method
- doSearchPaging method
- loadSearchData method
- onReceiveData event
- onDataLoad event
- 공통 이벤트 처리 방법

### Since

product | version | desc
--- | --- | ---
core | 8.0.0.0 | 기능 추가