# 저장시 데이터 규격 (saving structure)

저장 작업을 위해 서버 호출 후 서버에서 리턴되어야 할 `응답 데이터 형식`을 정의합니다.

## 저장시 데이터 규격

- 서버에서 클라이언트(시트)로 전달되는 json 구조는 아래와 같습니다.
- `Result` 값은 저장 `성공/실패` 여부를 판단하는 기준으로 사용되며, `0` 이상의 값은 `정상` 저장, 0보다 작은 `음수` 값은 저장 중 `오류`로 처리됩니다.
- `Message` 값은 `Result`에 대한 설명 메시지이며, 해당 값은 onAfterSave 이벤트의 `result`, `message` 파라미터로 전달됩니다.
- 저장 결과가 정상(`Result >= 0`)인 경우, `입력/수정` 상태의 행은 `조회` 상태로 돌아가고 `삭제` 상태의 행은 시트에서 `제거` 됩니다.
  정상 저장 시 메시지 표시가 필요한 경우, onAfterSave 이벤트에서 직접 처리할 수 있습니다.
- 저장 결과가 실패(`Result < 0`)인 경우, `기존 상태를 유지`하며 doSave함수는 종료됩니다.

    // 서버에서 시트로 보낼 응답 규격
    //성공
    {
    "IO": {
        "Result" : 0 ,
        "Message" : "저장 되었습니다."
     }
    }

    //실패
    {
    "IO": {
        "Result" : -100,
        "Message" : "오류내용..."
      }
    }

- 리턴되는 값에 `IO` 또는 `Result` 와 같은 속성이 없는 경우, 다음 기준에 따라 처리됩니다.

리턴되는 결과 | 서버상태 | 처리 형태
--- | --- | ---
`IO` 안에 `Result`가 없는 경우 | 200 | 성공으로 판단. onAfterSave이벤트에 result는 0리턴
결과가 아무것도 없는 경우 | 200 | 실패로 판단. onAfterSave이벤트에 result는 -5리턴
서버에서 오류가 발생한 경우 | 400이상의 값 | 실패로 판단. onAfterSave이벤트에 result는 -3 리턴

- `IO.Result`가 실패 코드(`Result < 0`)이고 `Message`가 있을 경우, 해당 내용을 오류 메세지로 표시합니다.
- `Message`가 없는 경우에는`알 수 없는 오류`로 표시합니다.

Result | Description | Message(ko, en.js)
--- | --- | ---
0 | 정상 |
-3 | 요청 Url이 잘못된 경우나 네트워크 오류 등으로 결과를 받지 못한 경우(404,500등의 에러) | Url의 주소를 찾을 수 없습니다. (ResultErrNotFound)
-5 | 응답 결과가 빈값인 경우 | Url에서 응답이 없습니다. (ResultErrEmptyResponse)
-6 | 연결 시간 초과((cfg)Timeout 초과) | 연결시간이 초과됐습니다. (ResultErrRequestTimeout)
-7 | 잘못된 데이터 형식(데이터 이상) | 데이터 형식이 잘못됐습니다. ResultErrBadDataFormat)
그외 | 사용자 정의 코드 `IO`에 정의된 내용을 `onAfterSave`의 `result`와 `message`파라미터에서 확인가능 |

- 저장 작업시 서버에서 리턴한 결과는 onAfterSave이벤트를 통해 확인하실 수 있습니다.

### Read More

- acceptChangedData method
- applySaveResult method
- doSave method
- getSaveString method
- getSaveJson method
- onAfterSave event

### Since

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