동적 Internal Table 구성을 위한 핵심 원리는 실행 시점에 테이블 구조를 확정하고, 그 구조로 내부테이블을 생성한 뒤 필요한 데이터를 채워 사용하는 데 있습니다. 먼저 DDIC 메타데이터를 조회해 필드 정보를 얻습니다. DDIF_FIELDINFO_GET로 선택한 DDIC 테이블 또는 뷰의 필드명, 길이, 타입, 텍스트 정보를 읽어 들여 필드 카탈로그를 만듭니다. 이 과정에서 비어 있거나 출력 용도로 제외할 필드는 걸러내고, 각 필드에 대한 텍스트 및 출력 길이 정보도 함께 채웁니다.
생성된 필드 카탈로그를 바탕으로 런타임에 Dynamically Structured Internal Table을 생성합니다. CL_ALV_TABLE_CREATE=>CREATE_DYNAMIC_TABLE를 호출하여 gr_data를 REF TO DATA 형태로 얻고, 그 뒤gr_data를 가리키는 필드심볼을 ASSIGN하여 실제 내부테이블처럼 사용합니다. 이 방식은 구조가 사전에 고정되지 않는 상황에 적합하며, ASSIGN COMPONENT를 통해 컬럼별 접근도 가능해집니다.
데이터 조회는 DDIC 테이블 이름을 동적으로 사용하여 SELECT 문을 실행합니다. 선택한 테이블의 데이터를 동적으로 구성된 내부테이블로 가져오기 위해 CORRESPONDING FIELDS OF TABLE
화면 구성은 PBO에서 ALV Grid와 Docking Container를 최초에 한 번만 생성하도록 하고, 이후 화면 재출력 시점에는 기존 객체를 재활용합니다. ALV 레이아웃은 줄무늬 표시, 컬럼 폭 자동 최적화, 다중 선택 등의 설정을 적용합니다. 출력은 최초 한 번은 set_table_for_first_display로 데이터를 바인딩하고, 이후에는 refresh_table_display로 화면 위치를 안정적으로 갱신합니다.
이 예제의 핵심은 실행 전에 내부테이블 구조가 정해져 있지 않다는 점으로, DDIC 정보를 바탕으로 동적 필드 카탈로그를 만들고, 이를 이용해 동적 내부테이블을 생성한 뒤 데이터 조회와 화면 출력을 연결하는 흐름에 있습니다. 필요 시 ASSIGN 및 필드심볼 활용과 런타임 구조 생성의 자세한 활용법이 추가 설명으로 제공됩니다.
#
ABAP
#
ALV
#
Dynamic
#
SAP
#
SI
#
SM
#
개발