안녕하세요. excel 업로드 기능 구현 도중에 궁금한 점이 생겨 질문드립니다.
먼저, ASLM_EXCEL_TO_INTERNAL_TABLE Function을 사용해 gt_intern 테이블에 col value 값을 넣어주고
그 뒤에 gt_excel 테이블에 필드별로 값을 넣어주고 gt_alv 테이블을 사용해 alv에 띄워주려 합니다.
궁금한 점은 데이터 정합성 체크를 아래 2가지 방법 중 보통 어떤 방식을 사용하는지, 그 이유는 무엇인지 궁금합니다.
1) gt_excel 테이블 전체 필드를 char 타입으로 설정하여 값을 받아준 뒤, gt_excel -> gt_alv로 loop를 돌릴 때 데이터 정합성 체크 로직 작성
2) gt_excel 테이블 전체 필드를 alv에 띄워줄 필드 타입으로 설정하여, gt_intern -> gt_excel로 loop를 돌릴 때 데이터 정합성 체크 로직 작성
제가 생각한 장점은 아래와 같습니다.
1) : gt_intern에서 gt_excel 로 받아올 때 원래 타입과 맞지 않는 형식의 데이터까지 다 받아올 수 있음, 데이터 정합성 체크 로직 모듈화 가능할 것 같음
2) : 1)의 과정을 한 번의 loop문 안에서 수행하는 느낌
안녕하세요.
개인적으로는 [1번 방식]을 선호합니다.
문자형식으로 모든 필드를 받아야 오류없이 일단 바인딩하고 필드별 정합성 체크 핸들링이 쉽습니다.
예를 들어 날짜/숫자/금액 의 경우 한국과 글로벌의 각 형식이 다르기 때문에,
일단 데이터를 받은 뒤 날짜/숫자/금액 형식에 대한 특수문자 판단 및 제거 후 정합성을 어떻게 체크할 지 고민할 수 있습니다.
또한 한 행의 2개 이상 필드의 오류를 체크하고 표시하기 편합니다.
[2번 방식]은 타입정의 필드에 직접적으로 바인딩하기 때문에 정합성 고민을 하기도 전에 Convert 관련 런타임 오류가 발생합니다.
Convert 관련 런타임 오류를 Exception으로 각각 처리해주어야 하며, 바인딩시 발생하는 Non-Catchable Exception은 핸들링도 불가능합니다.
또한, 한 행의 2개이상의 오류를 동시에 잡아내려면 더 많은 예외 로직구성이 필요합니다.
따라서, 2번 방식의 이점은 없다고 생각합니다.
2번 방식으로도 모든 필드에 대해 Exception 처리를 해준다면 1번 방식처럼 처리가 가능합니다.
하지만, 그 처리 자체가 불필요한 부가적인 오버헤드(간접비용)입니다.