반응형

컬럼매핑정의서(테이블정의서)에 신규컬럼 일괄 추가하기

 

 

차세대급 프로젝트를 진행하면, 모델을 새로 정비하게 됩니다.
이때 F/W에서 세팅하는 시스템 컬럼을 일괄로 추가할때가 많이 있습니다.
대표적으로 "최초등록일시, 최초등록직원, 최종변경일시, 최종변경직원"등이 있습니다.

전체 테이블에 반영이 되어야 하는데, 테이블의 수가 많으면 만만치 않은 작업이 됩니다.
엑셀로 테이블 목록을 만들고, 컬럼을 작성해서 추가할 순 있지만, 컬럼순서의 일련번호를 해결하지 못합니다.
어찌어찌 할 수는 있으나, 귀찮은 작업임에는 분명합니다.

테이블의 마지막에 신규컬럼을 추가하는 프로그램을 작성해 보겠습니다.

□ 개요

 

  - 컬럼매핑정의서 정보를 읽어온다.( 컬럼 추가를 위한 기초데이터 )
  - 각 테이블에 추가하려고 하는 컬럼이 있는지 체크한다.( 없는 테이블만 추가 )
  - 테이블별 추가할 컬럼 목록을 생성한다.
  - 컬럼매핑정의서에 컬럼을 추가한다.
  - [테이블][컬럼순서]로 Ordering한다.( 수작업 - 다른 Section에서 다루겠습니다. )

* SOURCE

    private final static int T테이블 = 16; 
    private final static int T논리명 = 19; 
     
    public static void main(String[] args) { 
         
        // 컬럼매핑정의서 READ 
        ArrayList<ArrayList> arr2AT = TxtFile.readArr2AT( "C:/workspace/컬럼매핑정의서/컬럼매핑정의서.dat" ); 
         
        // 추가할 컬럼정보 
        ArrayList arrAddCol = new ArrayList(); 
        arrAddCol.add( "최종변경GUID" );  // 한글컬럼명 
        arrAddCol.add( "" );  // 영문컬럼명 
         
        ArrayList<ArrayList> arr2ATNew = new ArrayList<ArrayList>(); 

        for( int i = 0; i < arr2AT.size(); i++ ) { 
             
            ArrayList arrLine = arr2AT.get( i ); 
             
            String strTblBef = "";  // 이전테이블 
            String strTbl    = "";  // 현재테이블 
             
            boolean bExsit = false; 
             
            // 첫번째Row는 타이틀임으로 SKIP. 
            if( i == 0 ) continue; 
            if( arrLine.get( 23 ).contains( "삭제" ) ) continue;  // 삭제된 테이블은 제외. 
             
            if( strTblBef.isEmpty() ) strTblBef = arrLine.get( T테이블 ); 
             
            strTbl = arrLine.get( T테이블 ); 
             
            if( arrLine.get( T논리명 ).equals( arrAddCol.get( 0 ) ) ) bExsit = true; 
             
            // 테이블이 변경되면, 시스템 컬럼의 없을 경우 추가한다. 
            if( !strTblBef.equals( strTbl ) ) { 
                 
                // 컬럼매핑정의서 양식에 맞춰, 테이블에 추가할 신규컬럼 정보를 생성한다. 
                // 테이블의 기본정보 + 신규컬럼 정보 
                if( !bExsit ) arr2ATNew.add( addColumn( arrAddCol, arr2AT.get( i - 1 )  ) ); 
                 
                strTblBef = strTbl; 
                bExsit = false; 
            } 
        } 
         
        // 컬럼매핑정의서에 신규컬럼정보를 추가한다. 
        for( int i = 0; i < arr2ATNew.size(); i++ ) arr2AT.add( arr2ATNew.get( i ) ); 
    } 
     
    // 임시용-시스템 컬럼 추가 
    private static ArrayList addColumn( ArrayList arrAddCol, ArrayList arrLine ) { 
         
        @SuppressWarnings("unchecked") 
        ArrayList arrNewLine = (ArrayList) arrLine.clone(); 
         
        // ASIS정보 삭제 
        for( int i =  6; i < 13; i++ ) arrNewLine.set( i, "" ); 
        for( int i = 18; i < 26; i++ ) arrNewLine.set( i, "" ); 
        for( int i = 27; i < arrLine.size(); i++ ) arrNewLine.set( i, "" ); 
         
            // 컬럼순서 
            String strOrd = ""; 
            if( arrLine.get( 13 ).isEmpty() ) arrLine.set( 13, "0" ); 
            strOrd = ( Integer.parseInt( arrLine.get( 13 ) ) + 1 ) + ""; 
         
        arrNewLine.set( 11, "N" );                 // NULL허용여부 
        arrNewLine.set( 13, strOrd );              // 컬럼순서 
        arrNewLine.set( 18, arrAddCol.get( 1 ) );  // 영문컬럼명 
        arrNewLine.set( 19, arrAddCol.get( 0 ) );  // 한글컬럼명   
        arrNewLine.set( 24, "시스템 컬럼 추가" );  // 비고 
         
        return arrNewLine; 
    } 


컬럼매핑정의서의 하단에 일괄로 신규컬럼을 추가하였습니다.
생성된 Excel-file을 열어서 Ordering를 해주면 완성됩니다.

간단히 소스를 살펴보겠습니다.

 

  ArrayList<ArrayList> arr2AT = TxtFile.readArr2AT( "C:/workspace/컬럼매핑정의서/컬럼매핑정의서.dat" );

  TxtFile.readArr2AT() 파일을 핸들링하기 위해 만들어둔 함수입니다.
  2중ArrayList( 2차원 배열 )로 데이터를 읽어옵니다. 소스는 하단의 링크를 참고하세요.

  // 첫번째Row는 타이틀임으로 SKIP.
  if( i == 0 ) continue;
  if( arrLine.get( 23 ).contains( "삭제" ) ) continue;  // 삭제된 테이블은 제외.
  
  컬럼매핑정의서의 첫번째 행은 엑셀문서의 '타이틀'입니다.
  그리고, arrLine.get( 23 )정보는 컬럼의 [상태]를 관리하는 정보입니다.
  타이틀이거나, 삭제된 컬럼(테이블)이면 제외하고 처리하기 위한 로직입니다.

  addColumn( arrAddCol, arr2AT.get( i - 1 )  )

  arrAddCol : 신규컬럼 정보
  arr2AT.get( i - 1 ) : 이전 행의정보, 테이블의 기본정보를 가져오기 위함입니다.
  
  strOrd = ( Integer.parseInt( arrLine.get( 13 ) ) + 1 ) + "";

  컬럼의 순서를 계산하는 로직입니다.
  이전 컬럼의 [컬럼순서] + 1을 하여 컬럼의 순서를 채번합니다.

※ 참고

    - 링크 ☞ [파일핸들링] 2차원배열로 파일 읽기

    - ArrayList.contains( {DATA} ) : 배열의 값중에 {DATA}가 있는지를 체크함.
    - ArrayList.set( {Index}, {Value} ) : {Index}위치에 {Value}를 저장함.( {Index}위치의 배열이 생성되어 있어야 함 )

    - String.isEmpty() : 문자열이 빈값인지 체크함.( null은 체크하지 못함 )

반응형