META시스템에 표준용어를 일괄로 등록하기 위한 'META 일괄등록 문서'를 만드는 작업입니다.
컬럼매핑정의서의 TO-BE컬럼을 정비하고, 표준용어가 없을 경우 이를 등록하기 위함입니다.
최근의 차세대 프로젝트는 META용어를 정비하는 것으로 시작됩니다.
실제 W은행, K카드, H은행의 차세대를 진행하며 사용했던 프로그램입니다.
■ 순서
1. META시스템의 일괄등록 양식을 내려받기 합니다.
2. 일괄등록 양식 템플릿에 맞춰 등록할 표준용어를 엑셀문서로 생성합니다.
3. 생성된 문서를 META시스템의 '엑셀 불러오기' 기능을 이용하여 용어를 등록합니다.
※ 1번과 3번은 META시스템마다 약간의 차이가 있으며
여기에서는 2번에 해당하는 작업을 프로그램화 하였습니다.
■ SOURCE
/**
* 표준용어 등록문서 생성
* - 컬럼매핑정의서의 "미등록 용어"를 일괄등록 양식에 맞춰 등록문서를 생성한다.
*/
private static void createMetaTerm( ArrayList<ArrayList<String>> arr2AT ) {
System.out.println( "■ META 표준용어 등록문서 생성 START" );
HashMap<String, ArrayList<ArrayList<String>>> ma2MetaTermUp = new HashMap<String, ArrayList<ArrayList<String>>>(); // 담당자별 META 등록문서
HashMap<String, String> mapDupReg = new HashMap<String, String>(); // 중복용어 제거용
for( int iRow = 0; iRow < arr2AT.size(); iRow++ ) {
ArrayList<String> arrATRow = arr2AT.get( iRow );
String strTerm = arrATRow.get( T논리명 ); // TOBE컬럼한글명
// <상태>가 '삭제'이거나 '표준용어'이면 SKIP.
// <담당자:기타>이면 SKIP.
if( arrATRow.get( 상태 ).contains( "삭제" ) ) continue;
if( !arrATRow.get( 상태 ).equals( "미등록 용어" ) || arrATRow.get( 담당자 ).equals( "기타" ) ) continue;
if( mapDupReg.containsKey( strTerm ) ) continue;
mapDupReg.put( strTerm, "" );
// [표준용어] 등록양식 생성
ArrayList<ArrayList<String>> arr2MetaTermUp = new ArrayList<ArrayList<String>>(); // META 등록문서
ArrayList<String> arrMetaTermUpRow = new ArrayList<String>();
if( ma2MetaTermUp.containsKey( arrATRow.get( 담당자 ) ) ) arr2MetaTermUp = ma2MetaTermUp.get( arrATRow.get( 담당자 ) );
// 생성문서 Template 생성
for( int iCol = 0; iCol < 21; iCol++ ) arrMetaTermUpRow.add( "" ); // 21개 항목
// No
String strNo = ( arr2MetaTermUp.size() + 1 ) + "";
// 논리명기준구분
String strTermKorDiv = "";
for( int k = 단어분할시작; k < arrATRow.size(); k++ ) {
if( !arrATRow.get( k ).isEmpty() ) {
if( strTermKorDiv.isEmpty() ) strTermKorDiv += arrATRow.get( k );
else strTermKorDiv += ";" + arrATRow.get( k );
}
}
ArrayList<String> arrMetaDmn = maMetaDmn.get( arrATRow.get( 1 ) ); // 도메인정보 매핑
String strTmp = "";
if( strTermKorDiv.lastIndexOf( ";" ) >= 0 ) {
strTmp = strTermKorDiv.substring( strTermKorDiv.lastIndexOf( ";" ) );
if( strTmp.equals( ";" + arrMetaDmn.get(0) ) ) strTermKorDiv = strTermKorDiv.substring( 0, strTermKorDiv.lastIndexOf( ";" ) );
}
// 물리명기준구분
String strTermEngDiv = "";
String[] saTEng = arrATRow.get( T물리명 ).split( "\\_" );
for( int k = 0; k < saTEng.length; k++ ) {
if( strTermEngDiv.isEmpty() ) strTermEngDiv += saTEng[k];
else strTermEngDiv += ";" + saTEng[k];
}
// DATA Setting
arrMetaTermUpRow.set( 0, strNo ); // No.
arrMetaTermUpRow.set( 1, arrATRow.get(1) ); // 선택
arrMetaTermUpRow.set( 2, "신규/변경" ); // 요청구분(*)
arrMetaTermUpRow.set( 3, "" ); // 등록유형
arrMetaTermUpRow.set( 4, "" ); // 검증결과
arrMetaTermUpRow.set( 5, "TO-BE" ); // 표준분류(*)
arrMetaTermUpRow.set( 6, arrATRow.get(19) ); // 표준용어논리명(*)
arrMetaTermUpRow.set( 7, arrATRow.get(18) ); // 표준용어물리명(*)
arrMetaTermUpRow.set( 8, strTermKorDiv ); // 논리명기준구분
arrMetaTermUpRow.set( 9, strTermEngDiv ); // 물리명기준구분
arrMetaTermUpRow.set( 10, arrMetaDmn.get(0) ); // 도메인논리명
arrMetaTermUpRow.set( 11, arrMetaDmn.get(1) ); // 도메인물리명
arrMetaTermUpRow.set( 12, "" ); // 도메인그룹
arrMetaTermUpRow.set( 13, arrMetaDmn.get(2) ); // 인포타입논리명
arrMetaTermUpRow.set( 14, arrATRow.get(20) ); // 데이터타입
arrMetaTermUpRow.set( 15, arrATRow.get(21) ); // 길이
arrMetaTermUpRow.set( 16, arrATRow.get(22) ); // 소수점
arrMetaTermUpRow.set( 17, "아니요" ); // 암호화여부
arrMetaTermUpRow.set( 18, arrATRow.get(25) ); // 설명(*)
arrMetaTermUpRow.set( 19, "" ); // 요청일시
arrMetaTermUpRow.set( 20, "" ); // 요청자명
arr2MetaTermUp.add( arrMetaTermUpRow );
ma2MetaTermUp.put( arrATRow.get( 담당자 ), arr2MetaTermUp );
}
// META 등록문서 출력
String strTitle = "No, 선택, 요청구분(*), 등록유형, 검증결과, " +
"표준분류(*), 표준용어논리명(*), 표준용어물리명(*), 논리명기준구분, 물리명기준구분, " +
"도메인논리명, 도메인물리명, 도메인그룹, 인포타입논리명, 데이터타입, " +
"길이, 소수점, 암호화여부, 설명(*), 요청일시, 요청자명";
for( String strKey : ma2MetaTermUp.keySet() ) {
XlsFile.writeArr2( "C:/workspace/컬럼매핑정의서/결과_프로그램/META_표준용어_등록문서_" + strKey , strTitle, ma2MetaTermUp.get( strKey ) );
}
}
private static void createMetaTerm( ArrayList<ArrayList<String>> arr2AT ) {
인자로 받는 arr2AT는 '컬럼매핑정의서를 2차원배열 형태로 읽은 정보'입니다.
if( !arrATRow.get( 상태 ).equals( "미등록 용어" ) || arrATRow.get( 담당자 ).equals( "기타" ) ) continue;
[상태] [담당자] 등은 컬럼매핑정의서 배열Index값인데, 가독성을 위해 '상수Const'로 한글명을 명시한것 입니다.
몇 년전에 K은행 프로젝트를 할때, 담당고객이 한 질문이 기억나네요.
"왜 테이블과 컬럼의 물리명을 '영문'으로 써요? 그냥 한글로 하면 되지 않나요?"
실제 K은행의 물리모델은 한글명을 사용하고 있었습니다.
그 말을 듣고 보니 변수도 그렇고, 테이블도 그렇고 모두 한글을 지원하는데, 왜 영문으로만 쓰고 있을까요?
여튼, 여기서는 가독성을 위해 한글로 명시한 것이며, 실제로는 배열의 Index값입니다.
// 논리명기준구분
String strTermKorDiv = "";
for( int k = 단어분할시작; k < arrATRow.size(); k++ ) {
if( !arrATRow.get( k ).isEmpty() ) {
if( strTermKorDiv.isEmpty() ) strTermKorDiv += arrATRow.get( k );
else strTermKorDiv += ";" + arrATRow.get( k );
}
}
논리명/물리명기준구분이 있습니다.
META표준용어의 물리명은 [단어]와 [단어]를 '_'로 연결하여 사용합니다.
Ex) 한글고객명 : KOR_CUS_NM
그런데, META를 등록하기 위해서 '논리/물리명기준구분'을 사용하는데, 이것은 [단어]들의 구분입니다.
META시스템을 사용해 보시면 아시겠지만, [단어분할]을 하면 ';'으로 단어를 구분합니다.
Ex) 한글고객명 : KOR;CUS;NM
그래서, 물리명을 ';'로 분할하여 세팅하는 로직입니다.
※ 참고
- 링크 ☞ 2차원배열 형태로 텍스트파일 읽기
끝.
'프로젝트 > 프로젝트 알아보기' 카테고리의 다른 글
계정계, 정보계, DW, 단위업무... 너희들은 누구니? (0) | 2020.01.01 |
---|---|
컬럼매핑정의서로 ER-Win( ERD ) 일괄등록문서 생성하기 (0) | 2019.12.30 |
컬럼매핑정의서로 이행매핑정의서 생성하기 (0) | 2019.12.30 |
[프로젝트] 컬럼매핑정의서로 테이블정의서 생성하기 (0) | 2019.12.25 |
[산출물] 테이블정의서 (0) | 2019.12.25 |