데이터 규격 (appendix)

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

시트 생성시 데이터 형식

//IBSheet.create()에 data 속성을 통해 생성시 데이터 구조
IBSheet.create({
    id:"sheet", // 생성할 시트의 id
    el:"sheetDiv", // 시트를 생성할 Dom 객체 및 id
    options: options, // 생성될 시트의 속성
    // 생성될 시트의 정적데이터
    data: [
            {"sa_name":"홍길동","sa_no":"940154","sa_dept":"A021"},
            {"sa_name":"김지수","sa_no":"950757","sa_dept":"B022"}
        ]
});

doSearch나 loadSearchData 메소드를 통한 데이터 로드

// Data 속성안에 배열형태로 데이터 구성
{"Data":
    [
        {"sa_name":"홍길동","sa_no":"940154","sa_dept":"A021"},
        {"sa_name":"김지수","sa_no":"950757","sa_dept":"B022"}
    ]
}

doSearchPaging 메소드를 통한 데이터 로드

// Data 속성안에 배열형태로 데이터 구성 (cfg)PageLength 에서 설정한 개수만큼
{"Data":
    [
        {"sa_name":"홍길동","sa_no":"940154","sa_dept":"A021"},
        {"sa_name":"김지수","sa_no":"950757","sa_dept":"B022"}
    ],
 "Total":25410      //<-- DB상의 전체건수 전체 건수
}

조회 후 서버 응답 데이터 규격

// Data 속성안에 배열형태로 데이터 구성
{"Data":
    [
        {"sa_name":"홍길동","sa_no":"940154","sa_dept":"A021"},
        {"sa_name":"김지수","sa_no":"950757","sa_dept":"B022"}
    ],
  "IO": {"Result": 0, Message: "조회 성공"}
}

조회 데이터 내에 Row property,Cell property 적용(중요)

// 조회 데이터 안에 Row property에 해당하는 내용을 데이터와 함께 적용
{"Data":
    [
        //                                       행의 색상을 붉은색으로 표시
        {"sa_name":"홍길동","sa_no":"940154",...      , Color:"#FF8888"},
        //                                             행 편집 불가
        {"sa_name":"김지수","sa_no":"950757",...      , CanEdit:0}
    ]
}
// 조회 데이터 안에 "컬럼명+Cell Property" 형식으로 설정시 Cell 기능 부여
{"Data":
    [
        //                                     sn_id cell 글자색 설정
        {"sn_id":"209321","lot":"k0923123",  sn_idTextColor:"#FF0000"},
        //                                     lot cell 편집 불가
        {"sn_id":"209327","lot":"r2019283",   lotCanEdit:0},
        //  pos 컬럼(Enum타입)에 item을 해당 셀만 다르게 설정
        {"pos":"A02", posEnum: "|성남시|부천시|광명시|화성시", posEnumKeys: "|A00|A01|A02|A03"}
    ]
}

조회 데이터 내에 JSON Event 적용

// 조회 데이터에 JSON 이벤트를 포함할수 있습니다.
{"Data":
    [
        //           sa_name컬럼의 값 수정시 sawonPop() 함수 호출
        {"sa_name":"홍길동",sa_nameOnChange:"sawonPop"},
    ],
}

조회 작업시 서버에서 리턴 된 데이터는 onReceiveData, onBeforeDataLoad, onDataLoad 이벤트를 통해 확인하실 수 있습니다.

Tree 데이터 로드

일반적인 Tree 데이터 형태

// Items 속성안에 자식 행을 추가하는 형태로 구성
{"Data":
    [
        //1 Depth
        {sProduct:"내부 시스템 개발 사업",sCustomer:"B사",sDate:"20180116", sCustomerRowSpan:2,
            //2 Depth
            Items:[
                {sProduct:"글로벌 통합 인사시스템",sKind:"프로젝트", sCount:"1",sPrice:"192"},
                {sProduct:"LEGACY SW 공급",sKind:"소프트웨어", sCount:"1",sPrice:"420"}
            ]
        },
        //1 Depth
        {sProduct:"복무급여고도화시스템",sCustomer:"D사",sDate:"20171031",
            //2 Depth
            Items:[
                {sProduct:"병원 전자구매 및 조달시스템",sKind:"납품",sCount:"1",sPrice:"303",sDiscount:"10" }
            ]
        },
        //1 Depth
        {sProduct:"2017~2018 솔루션 납품 및 판매",sCustomer:"E사",sDate:"20170520",
            //2 Depth
            Items:[
                {sProduct:"병원 개발/CDP 구축",sKind:"프로젝트",sCount:"1",sPrice:"29"},
                {sProduct:"성능개량사업 군수지원교보재",sKind:"프로젝트",sCount:"1",sPrice:"15.5",sDiscount:"5"},
                {sProduct:"SHE시스템 구축",sKind:"프로젝트",sCount:"1",sPrice:"79"},
                {sProduct:"Cost Quotation System",sKind:"프로젝트",sCount:"1",sPrice:"3"},
                {sProduct:"전사업무지원시스템",sKind:"프로젝트",sCount:"1",sPrice:"59.5"},
                {sProduct:"통합판매관리시스템",sKind:"프로젝트",sCount:"1",sPrice:"39"},
                {sProduct:"E-HR시스템",sKind:"유지보수",
                    //3 Depth
                    Items:[
                        {sProduct:"물산 E-HR시스템",sKind:"기타",sCount:"1",sPrice:"4"},
                        {sProduct:"제조 E-HR시스템",sKind:"기타",sCount:"1",sPrice:"4" }
                    ]
                },
                {sProduct:"건설 외주실적 단가시스템",sKind:"납품",sCount:"1",sPrice:"95"},
                {sProduct:"인재육성시스템",sKind:"프로젝트",sCount:"1",sPrice:"7"},
                {sProduct:"웹사이트 액티브X제거 관련 SW 구매",sKind:"프로젝트", sCount:"1",sPrice:"22.5" }
        ]}
    ]
}

간단한 Tree 데이터 형태

var treeData = {
    "Data":[
        {Level:1 ,sProduct:"병원 개발/CDP 구축",sKind:"프로젝트",sCount:"1",sPrice:"29"},
        {Level:2 ,sProduct:"성능개량사업 군수지원교보재",sKind:"프로젝트",sCount:"1",sPrice:"15.5",sDiscount:"5"},
        {Level:3 ,sProduct:"SHE시스템 구축",sKind:"프로젝트",sCount:"1",sPrice:"79"},
        {Level:2 ,sProduct:"Cost Quotation System",sKind:"프로젝트",sCount:"1",sPrice:"3"},
        {Level:3 ,sProduct:"전사업무지원시스템",sKind:"프로젝트",sCount:"1",sPrice:"59.5"},
        {Level:3 ,sProduct:"통합판매관리시스템",sKind:"프로젝트",sCount:"1",sPrice:"39"},
    ]
}

위와같이 Level을 통해 각 행의 Depth를 가져온 후 데이터 로드시점에서 ibsheet-common.js에서 제공하는 convert함수를 통해 변환하여 로드한다. (Level의 대소문자 주의)

var convertData = IBSheet.v7.convertTreeData(treeData);
sheet.loadSearchData(convertData));

getChangedData 메소드로 수정된 데이터만 추출시

// 서버에 request로 보내지는 Data 객체는 다음과 같은 사항을 포함
// 1) 변경 대상이 되는 셀의 행 id
// 2) 셀 변경 사항의 종류(추가/삭제/변경)
// 3) 변경 대상이 되는 셀의 열이름을 프로퍼티로 하고 해당하는 프로퍼티의 값으로 변경된 데이터 값
Data: {"IO": { }, "Changes": [{"id": "AR1", "Changed": 1, "열이름": "변경된 값"}]}

저장 작업 후 서버 응답 데이터 규격

// 서버에서 시트로 보낼 응답 규격
{"IO": {"Result": 0 , Message:"저장 되었습니다."}} // 성공 시
{"IO": {"Result": -100, Message:"오류내용..." }} // 실패 시 Result 값을 음수로 설정.

실패 했을 경우 IO.Message가 있을 경우 IO.Message 에 설정된 내용을 메세지로 표시하고, 없는 경우에는 IO.Result 값에 따라 아래의 표의 기준에 해당하는 에러 메세지를 언어팩에서 가져와 표시합니다.

Result Code Message 언어팩 변수명
-1 Url의 값이 없습니다. "ResultErrEmptyURL"
-2 Url의 값이 잘못됐습니다. "ResultErrBadURL"
-3 Url의 주소를 찾을 수 없습니다. "ResultErrNotFound"
-4 문서 형식이 잘못됐습니다. "ResultErrBadDocumentFormat"
-5 Url에서 응답이 없습니다. "ResultErrEmptyResponse"
-6 연결시간이 초과됐습니다. "ResultErrRequestTimeout"
-7 데이터 형식이 잘못됐습니다. "ResultErrBadDataFormat"
-8 ~ 알 수 없는 오류 "ResultErrUnknown"
// 서버 예제
<%@ page language="java" contentType="application/json; charset=UTF-8"  pageEncoding="UTF-8"%>
<%@ page import="java.util.*, org.json.*"%>
<%
    request.setCharacterEncoding("utf-8");
    response.setContentType("application/json");
    response.setStatus(200);

    JSONObject result = new JSONObject(); // 서버에서 시트로 보낼 JSON 형식의 통신 관련 객체
    JSONObject IO = new JSONObject(); // 결과를 담고 있는 객체
    try {
        if(조건) {
            IO.put("Result", 0); // 결과를 담고 있는 객체에 Result 프로퍼티로 성공/실패 여부를 보냅니다. 0으로 설정 시 성공. -2 ~ -9로 설정 시 실패. 실패하는 경우 시트에서 오류 메시지를 띄웁니다.
            IO.put("Message", "성공"); // 서버에서 시트로 전달할 메시지(onAfterSave 이벤트의 message 인자로 받을 수 있습니다)
        } else {
            IO.put("Result", -200);
            IO.put("Message", "실패");
        }

        result.put("IO", IO);
    } catch(Exception ex) {
        result.put("Exception", ex);
    }
    out.print(result);
%>

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

Read More

Since

product version desc
core 8.0.0.0 기능 추가