# onReceiveData (event)

> 데이터 조회 시(doSearch, doSearchPaging, loadSearchData), 시트가 데이터를 받은 직후 발생하는 이벤트입니다.

> onBeforeDataLoad 이벤트 보다 먼저 발생합니다.

> `true(1)`를 리턴하면 이후 데이터 파싱 작업과 관련 이벤트가 모두 중단됩니다.

### Syntax

        onReceiveData:function(paramObject) {

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

### Parameters

Name | Type | Description
--- | --- | ---
sheet | `object` | 데이터를 로딩할 시트 객체
data | `string` | 서버에서 조회된 데이터
response | `object` | `response` 객체
type | `string` | 조회/엑셀/텍스트 여부 (`Search`, `EXCEL`, `TEXT`)

### Return

string | object

### Example

    // 조회된 내용에 대한 수정 예시
    options.Events = {
        onReceiveData: function(evtParam) {
            var DATA = evtParam.data; // 조회 결과 데이터
            var parseData = JSON.parse(DATA); // string으로 들어오는 data parsing

            // 조회된 데이터 일부를 수정한다
            /**
             * 조회 데이터 구조
             * { data: [{}, {}], etc: []}
             */
            for (var i = 0; i < parseData.data.length; i++){
                var row = parseData.data[i];
                // AttrYn 컬럼에 값이 Y 인 경우 ConfirmFinish 컬럼에 "결정완료"를 설정
                if (row["AttrYn"] == "Y") {
                    row["ConfirmFinish"] = "결정완료";
                    row["CanEdit"] = 0;
                }
            }

            return parseData; // 파싱 후 수정된 데이터 return
        }
    }

    // 외부 API(공공데이터 등) 응답을 IBSheet 데이터 구조로 변환하는 예시
    // doSearchPaging은 AJAX가 내장되어 있으므로 서버 응답을 가공할 수 있는 시점은 이 이벤트뿐입니다.
    options.Events = {
        onReceiveData: function(evtParam) {
            var response = JSON.parse(evtParam.data);
            // 외부 API 응답 구조를 IBSheet 구조로 변환
            var result = {
                Data: response.items.map(function(item) {
                    return {
                        name: item.serviceName,
                        code: item.serviceCode,
                        status: item.activeYn
                    };
                }),
                Total: response.totalCount
            };
            return result;
        }
    }

    // doSearch로 트리 조회 시 Level 기반 데이터를 Items 구조로 변환
    // doSearch는 AJAX가 내장되어 있으므로 변환할 수 있는 시점은 이 이벤트뿐입니다.
    options.Events = {
        onReceiveData: function(evtParam) {
            var data = JSON.parse(evtParam.data);
            return IBSheet.v7.convertTreeData(data);
        }
    }

### Return으로 넘겨야 하는 데이터 구조

> 기본 구조: `{Data: [{...}, {...}]}`
> doSearchPaging의 경우 `Total` 필수: `{Total: 건수, Data: [{...}]}`
> loadSearchData는 배열만 `[{...}, {...}]` 으로도 가능
> 트리 구조: 트리 응답 규격 참고
> 상세 내용은 조회 응답 규격, 페이징 응답 규격을 참고하세요.

### Read More

- 조회 이벤트 발생 순서
- doSearch method
- doSearchPaging method
- loadSearchData method
- onDataLoad event

### Since

product | version | desc
--- | --- | ---
core | 8.0.0.19 | 기능 추가
core | 8.0.0.24 | `loadSearchData` 사용시에도 이벤트 발생하도록 추가
core | 8.0.0.26 | `type` 추가
core | 8.1.0.73 | 데이터 파싱 중단 기능 추가