TranIOMap 가이드
이 화면은 TranIOMap 에 관한 설명을 위한 예시화면이다.
TranIOMap 관련 속성은 미리 정의된 TranIOMap 거래 정보를 가지고 보다 편리하게 개발하기 위해서 사용된다.
TranIOMap 관련 속성은 TranIOMap 정보가 제공되는 웹 서비스가 있다는 것을 가정한다.
TranIOMap 관련 환경 설정
TranIOMap 관련 속성은 “도구”→“옵션” 메뉴에 팝업 창의 “기타” 탭에서 설정한다.
“기타” 설정 탭에서 Tran I/O Map 사용 부분에 체크하고 서비스 URL을 설정한다.
JSP 설정 방법
TranIOMap 서비스 URL에 대한 샘플 JSP는 툴 설치 디렉토리\template\STUDIO\TRANIOMAP 안에 JSP 파일을 참조한다.
* Depth URL : traniomap_depth_demo.jsp.txt → traniomap_depth_demo.jsp 로 이름 변경후 사용한다.
* Format URL : traniomap_format_demo.jsp.txt → traniomap_format_demo.jsp 로 이름 변경후 사용한다.
TranIOMap 기능 설명
TranIOMap 조회는 “오브젝트 윈도우” 창의 “TranIO-Map” 탭에서 조회할수 있다.
“TranIO-Map” 탭에서 돋보기 아이콘으로 조회 후 조회된 내용을 클릭하면 “오브젝트리스트 윈도우” 창에 “TranIO” 탭에 TranIO 목록이 표시된다.
TranIO 목록에서 항목을 선택하고 스크린으로 드래그 앤 드랍 하게되면 해당 오브젝트가 생성된다.
TranIO 연결 해제는 연결된 오브젝트 우측클릭 후 “트렌젝션 항목해제” 를 사용하거나 “TranIO” 탭에서 항목 우측클릭후 해제 기능을 이용한다.
템플릿 위치: /STUDIO/TRANIOMAP/traniomap
템플릿 파일
traniomap_depth_demo.jsp 스크립트
<%@ page import="java.sql.*" contentType="text/html;charset=UTF-8"%> <%! /** * @File Name : traniomap_depth_demo.jsp * @Description : xFrame TranIOMap Depth 검색 서비스 JSP * @Modification Information * @ * @ 수정일 수정내용 * @ --------- --------- ------------------------------- * @ 2018.09.03 최초생성 * @ 2020.10.06 수정배포 * * @author 소프트베이스 솔루션 개발팀 * @since 2018. 09. 03 * @version 1.0 * @see * * Copyright (C) by Softbase All right reserved. */ %> <%! //Dev@Studio에서 데이터 처리 시 사용하는 구분자 final String FIELD_DEL = String.valueOf((char)0x01); // 필드 final String RECORD_DEL = String.valueOf((char)0x02); // 레코드 final String STARTEND_DEL = String.valueOf((char)0x03); // 데이터 시작, 끝 // 결과 리턴 코드 final String RESULT_SUCCESS = "1"; final String RESULT_FAIL = "0"; public String getDepthOneInfo(String id, String desc) { return id + FIELD_DEL + desc + FIELD_DEL + RECORD_DEL; } public String getDepthTwoInfo(String id, String desc) { return id + FIELD_DEL + desc + FIELD_DEL + RECORD_DEL; } public String getDepthThreeInfo(String id, String desc) { return id + FIELD_DEL + desc + FIELD_DEL + RECORD_DEL; } %> <% // 검색 조건 데이터 String depthType = request.getParameter("depth_type") == null ? "" : request.getParameter("depth_type"); // value: "1", "2", "3" String depthOneValue = request.getParameter("depth_one") == null ? "" : request.getParameter("depth_one"); String depthTwoValue = request.getParameter("depth_two") == null ? "" : request.getParameter("depth_two"); try { StringBuffer resultStr = new StringBuffer(); boolean bReturn = false; // 검색 결과 처리 시작 bReturn = true; // DEMO에서는 성공으로 처리한다. // 데이터 시작 구분값 설정 resultStr.append(STARTEND_DEL); // 성공 코드 설정 resultStr.append(RESULT_SUCCESS); // 데이터 설정 if(depthType.equalsIgnoreCase("1")) { resultStr.append(getDepthOneInfo("CA", "콜센터상담[CA])")); resultStr.append(getDepthOneInfo("MB", "경영관리시스템(IFRS)[MB]")); } else if(depthType.equalsIgnoreCase("2")) { if(depthOneValue.equalsIgnoreCase("CA")) { resultStr.append(getDepthTwoInfo("CAH", "콜센터폰뱅킹[CAH]")); resultStr.append(getDepthTwoInfo("CAN", "스마트브랜치[CAN]")); } else if(depthOneValue.equalsIgnoreCase("MB")) { resultStr.append(getDepthTwoInfo("MBL", "IB통합관리[MBL]")); resultStr.append(getDepthTwoInfo("MBM", "IB자산관리[MBM]")); } else { bReturn = false; } } else if(depthType.equalsIgnoreCase("3")) { if(depthTwoValue.equalsIgnoreCase("CAH")) { resultStr.append(getDepthThreeInfo("FDTERCAH12001S0_I", "고객기본정보 조회 입력 데이터")); resultStr.append(getDepthThreeInfo("FDTERCAH12001S0_CAH12001000", "고객기본정보 화면 출력 데이터")); } else if(depthTwoValue.equalsIgnoreCase("CAN")) { bReturn = false; } else if(depthTwoValue.equalsIgnoreCase("MBL")) { resultStr.append(getDepthThreeInfo("FDTERMBL13001S0_I", "고객이체정보 조회 입력 데이터")); resultStr.append(getDepthThreeInfo("FDTERMBL13001S0_MBL12001000", "고객이체정보 화면 출력 데이터")); resultStr.append(getDepthThreeInfo("FDTERMBL13001S0_MBL12001002", "고객이체정보 전표 출력")); } else if(depthTwoValue.equalsIgnoreCase("MBM")) { bReturn = false; } } else { // depthType이 1,2,3 이 아닐경우 에러 처리 out.print(STARTEND_DEL + RESULT_FAIL + "INVALID DEPTH_TYPE" + FIELD_DEL + RECORD_DEL + STARTEND_DEL); return; } // 데이터 종료 구분값 설정 resultStr.append(STARTEND_DEL); // 리턴 데이터 전송 if(bReturn == true) { out.print(resultStr); } else { // 검색 결과 없을경우 처리 out.print(STARTEND_DEL + RESULT_FAIL + "조회 데이터가 없습니다" + FIELD_DEL + RECORD_DEL + STARTEND_DEL); } } catch(Exception e) { // 에러 발생 시 처리 out.println(STARTEND_DEL + RESULT_FAIL + e.getMessage() + FIELD_DEL + RECORD_DEL + STARTEND_DEL); } %>
traniomap_format_demo.jsp 스크립트
<%@ page contentType="text/html;charset=UTF-8" %> <%@ page import="java.util.*" %> <%@ page import="java.io.*" %> <%! /** * @File Name : traniomap_format_demo.jsp * @Description : xFrame TranIOMap format 검색 서비스 JSP * @Modification Information * @ * @ 수정일 수정내용 * @ --------- --------- ------------------------------- * @ 2018.09.03 최초생성 * @ 2020.10.06 수정배포 * @ 2022.03.29 수정배포 groupid 기능 추가처리(개발툴 22.3.28.3 대응) * * @author 소프트베이스 솔루션 개발팀 * @since 2018. 09. 03 * @version 1.0 * @see * * Copyright (C) by Softbase All right reserved. */ %> <%! //Dev@Studio에서 데이터 처리 시 사용하는 구분자 final String STARTEND_DEL = String.valueOf((char)0x03); // 데이터 시작, 끝 final String FIELD_DEL = String.valueOf((char)0x01); // 필드 항목 final String FORMAT_DEL = String.valueOf((char)0x02); // 포맷 구분자 final String ITEM_DEL = String.valueOf((char)0x04); // 아이템 정보 구분자 final String RESULT_SUCCESS = "1"; final String RESULT_FAIL = "0"; // id: 포맷 ID // desc: 포맷 설명 // inout: 입출력 구분 (예시: 'i'(input), 'o'(output)) // msgType: 메시지 타입 (예시: 'xml', 'flat', 'json'); // device: 디바이스 ('screen', 'pbprt') // formid: 매체 정보 (예시: 화면ID, 임의장표ID, 전표ID, 영수증ID) // yyyymmddhhmmss: 적용 일시 public String getFormatInfo(String id, String desc, String inout, String msgType, String device, String formid, String yyyymmddhhmmss) { return "M" + ITEM_DEL + id + ITEM_DEL + desc + ITEM_DEL + inout + ITEM_DEL + msgType + ITEM_DEL + device + ITEM_DEL + formid + ITEM_DEL + yyyymmddhhmmss + FIELD_DEL; } // id: 데이터 ID // desc: 데이터 설명 // pos: 데이터 위치 // length: 데이터 길이 // dataType: 데이터 형식 (예시: 0(숫자), 1:영문+숫자) 2:숫자+영문+한글) // places: 소수점 이하 숫자 갯수 // defaultValue: 기본값 // metaLength: 메타 데이터 길이 // groupID : 그룹이 존재할경우 그룹ID(22.3.28.3) public String getFieldInfo(String id, String desc, String pos, String length, String dataType, String places, String defaultValue, String metaLength, String groupID) { return "F" + ITEM_DEL + id + ITEM_DEL + desc + ITEM_DEL + pos + ITEM_DEL + length + ITEM_DEL + dataType + ITEM_DEL + places + ITEM_DEL + defaultValue + ITEM_DEL + metaLength + ITEM_DEL + groupID + FIELD_DEL; } // id: 데이터 ID // desc: 데이터 설명 // pos: 데이터 위치 // groupID : 그룹이 존재할경우 그룹ID(22.3.28.3) public String getGridInfo(String id, String desc, String pos, String groupId) { return "G" + ITEM_DEL + id + ITEM_DEL + desc + ITEM_DEL + pos + ITEM_DEL + groupId + FIELD_DEL; } // id: 데이터 ID // desc: 데이터 설명 // pos: 데이터 위치 // dataType: 데이터 형식 (예시: 0(숫자), 1(영문+숫자) 2(숫자+영문+한글) // length: 데이터 길이 // places: 소수점 이하 숫자 갯수 // defaultValue: 기본값 // metaLength: 메타 데이터 길이 public String getColumnInfo(String id, String desc, String pos, String length, String dataType, String places, String defaultValue, String metaLength) { return "C" + ITEM_DEL + id + ITEM_DEL + desc + ITEM_DEL + pos + ITEM_DEL + length + ITEM_DEL + dataType + ITEM_DEL + places + ITEM_DEL + defaultValue + ITEM_DEL + metaLength + FIELD_DEL; } public String getErrorInfo(String errorMsg) { return STARTEND_DEL + RESULT_FAIL + errorMsg + STARTEND_DEL; } %> <% StringBuffer buffer = new StringBuffer(); String formatMultiFlag = request.getParameter("format_multi_flag"); // 0 or 1 String formatId = request.getParameter("format_id"); try { // [전체 데이터 구성] // 데이터 시작/끝 구분자 // 성공/실패 여부값 ("1"/"0") // 거래코드 정보 + 0x02 + 입력인덱스 정보 + 0x02 + 출력인덱스 정보 + 0x02 // 데이터 시작/끝 구분자 buffer.append(STARTEND_DEL); // 데이터 시작/끝 구분자 buffer.append(RESULT_SUCCESS); // 성공/실패 여부 ///////////////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////////////// if(formatId.equalsIgnoreCase("CAH12001S0") || formatId.equalsIgnoreCase("FDTERCAH12001S0_I")) { // 포맷 정보 buffer.append(getFormatInfo("FDTERCAH12001S0_I", "고객기본정보 조회 입력 데이터", "i", "xml", "screen", "", "20190423123456")); // 필드 정보 buffer.append(getFieldInfo("CUST_ID", "고객번호", "1", "6", "0", "0", "", "6", "")); buffer.append(getFieldInfo("ACCT_NO", "계좌번호", "2", "12", "0", "0", "", "12", "")); buffer.append(getGridInfo("CUST_ACCT_LIST_INPUT", "고객 보유 계좌 내역", "3", "")); buffer.append(getColumnInfo("ACCT_NO_INPUT", "계좌번호", "3.1", "12", "0", "0", "", "12")); buffer.append(getColumnInfo("ACCT_TYPE_INPUT", "계좌구분", "3.2", "1", "1", "0", "", "1")); buffer.append(FORMAT_DEL); // 포멧 정보 끝 } if(formatId.equalsIgnoreCase("CAH12001S0") || formatId.equalsIgnoreCase("FDTERCAH12001S0_CAH12001000")) { // 포맷 정보 buffer.append(getFormatInfo("FDTERCAH12001S0_CAH12001000", "고객기본정보 화면 출력 데이터", "o", "xml", "screen", "", "20190423123456")); buffer.append(getFieldInfo("CUST_NAME", "고객명", "1", "30", "2", "0", "", "30", "")); buffer.append(getFieldInfo("CUST_LEVEL", "고객 등급", "2", "1", "1", "0", "", "1", "")); // 그리드 정보 buffer.append(getGridInfo("CUST_ACCT_LIST", "고객 보유 계좌 내역", "3", "")); buffer.append(getColumnInfo("ACCT_NO", "계좌번호", "2.1", "12", "0", "0", "", "12")); buffer.append(getColumnInfo("ACCT_TYPE", "계좌구분", "2.2", "1", "1", "0", "", "1")); buffer.append(getColumnInfo("ACCT_BALANCE", "계좌잔액", "2.3", "17", "0", "0", "", "17")); buffer.append(getColumnInfo("ACCT_RATE", "계좌이율", "2.4", "6", "0", "3", "", "6")); buffer.append(getGridInfo("CUST_TRNS_LIST", "고객 계좌 이체 내역", "3", "")); buffer.append(getColumnInfo("TRNS_ACCT_NO", "계좌번호", "2.1", "12", "0", "0", "", "12")); buffer.append(getColumnInfo("TRNS_ACCT_TYPE", "계좌구분", "2.2", "1", "1", "0", "", "1")); buffer.append(getColumnInfo("TRNS_ACCT_BALANCE", "계좌잔액", "2.3", "17", "0", "0", "", "17")); buffer.append(getColumnInfo("TRNS_CUST_NAME", "고객명", "1", "30", "2", "0", "", "30")); buffer.append(getColumnInfo("TRNS_DATE", "이체일자", "2", "8", "1", "0", "", "8")); buffer.append(getColumnInfo("TRNS_MONEY", "이체금액", "3", "17", "0", "0", "", "17")); buffer.append(getColumnInfo("TRNS_FEE", "수수료", "4", "17", "0", "0", "", "17")); buffer.append(FORMAT_DEL); // 포멧 정보 끝 } if(formatId.equalsIgnoreCase("MBL13001S0") || formatId.equalsIgnoreCase("FDTERMBL13001S0_I")) { // 포맷 정보 buffer.append(getFormatInfo("FDTERMBL13001S0_I", "고객이체정보 조회 입력 데이터", "i", "xml", "screen", "", "20190423123456")); // 필드 정보 buffer.append(getFieldInfo("CUST_ID", "이체일자", "1", "8", "1", "0", "", "8", "")); buffer.append(getFieldInfo("ACCT_NO", "계좌번호", "2", "12", "0", "0", "", "12", "")); buffer.append(FORMAT_DEL); // 포멧 정보 끝 } if(formatId.equalsIgnoreCase("MBL13001S0") || formatId.equalsIgnoreCase("FDTERMBL13001S0_MBL12001000")) { // 포맷 정보 buffer.append(getFormatInfo("FDTERMBL13001S0_MBL12001000", "고객이체정보 화면 출력 데이터", "o", "xml", "screen", "MBL12001000", "20190423123456")); buffer.append(getFieldInfo("CUST_NAME", "고객명", "1", "30", "2", "0", "", "30", "")); buffer.append(getFieldInfo("CUST_LEVEL", "고객 등급", "2", "1", "1", "0", "", "1", "")); // 그리드 정보 buffer.append(getGridInfo("CUST_ACCT_LIST", "고객 보유 계좌 내역", "3", "")); buffer.append(getColumnInfo("ACCT_NO", "계좌번호", "2.1", "12", "0", "0", "", "12")); buffer.append(getColumnInfo("ACCT_TYPE", "이체일자", "2.2", "8", "1", "0", "", "8")); buffer.append(getColumnInfo("ACCT_BALANCE", "이체금액", "2.3", "17", "0", "0", "", "17")); buffer.append(getColumnInfo("TRNS_FEE", "이체수수료", "2.4", "17", "0", "0", "", "17")); buffer.append(getColumnInfo("TRNS_MEMO", "이체메모", "2.4", "30", "2", "0", "", "30")); buffer.append(FORMAT_DEL); // 포멧 정보 끝 } if(formatId.equalsIgnoreCase("MBL13001S0") || formatId.equalsIgnoreCase("FDTERMBL13001S0_MBL12001002")) { // 포맷 정보 buffer.append(getFormatInfo("FDTERMBL13001S0_MBL12001002", "고객이체정보 전표 출력", "o", "xml", "pbprt", "MBL12001002", "20190423123456")); buffer.append(getFieldInfo("CUST_NAME", "고객명", "1", "30", "2", "0", "", "30", "")); buffer.append(getFieldInfo("TRNS_DATE", "이체일자", "2", "8", "1", "0", "", "8", "")); buffer.append(getFieldInfo("TRNS_MONEY", "이체금액", "3", "17", "0", "0", "", "17", "")); buffer.append(getFieldInfo("TRNS_FEE", "수수료", "4", "17", "0", "0", "", "17", "")); buffer.append(FORMAT_DEL); // 포멧 정보 끝 } buffer.append(STARTEND_DEL); // 데이터 시작/끝 구분자 out.print(buffer.toString()); } catch(Exception e) { out.print(getErrorInfo("Error Message: " + e.getMessage())); } %>