필드 카탈로그를 공부하다가 LVC_FIELDCATALOG_MERGE에 대해서도 한번 찾아보라는 지령을 받아버렸다
최근에 듣고있던 ABAP 수업에서는 한번도 본 적 없는데 도대체 어디서 굴러온 함수인지
Field Catalog
ALV에서 Field Catalog는 어떤 필드를 보여줄지, 컬럼 제목 등 표시할 데이터의 포맷을 설정하는 Internal Table
DATA: gs_fcat TYPE lvc_s_fcat.
DATA: gt_fcat TYPE lvc_t_fcat.
Internal Table의 데이터 타입은 lvc_t_fcat
이 테이블 타입의 Work Area는 lvc_s_fcat으로 선언해서 사용한다
CLEAR gs_fcat.
gs_fcat-fieldname = 'CARRID'.
gs_fcat-tech = abap_on.
APPEND gs_fcat TO gt_fcat.
CLEAR gs_fcat.
gs_fcat-fieldname = 'CONNID'.
gs_fcat-tech = abap_on.
APPEND gs_fcat TO gt_fcat.
Work Area에 한 필드의 필드명과 표시할 데이터의 포맷을 같이 담은 뒤 gt_fcat에 추가하는 방식
해당 테이블은 CL_GUI_ALV_GRID 클래스의 set_table_for_first_display 함수를 사용할 때 it_fieldcatalog parameter에 넘겨준다
그러면 놀랍게도 테이블에 속성이 적용된다
LVC_FIELDCATALOG_MERGE
Merge라는 단어가 들어가길래 필드 카탈로그 테이블들을 병합해주나 라고 생각했지만...
LVC_FIELDCATALOG_MERGE는 Field Catalog를 미리 세팅하는 함수
Field Name을 전부 선언해줘야하는 이 상황이 불편하다면 해당 함수를 한번 쯤 사용해보면 좋겠다
CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
EXPORTING
i_structure_name = 'SFLIGHT'
CHANGING
ct_fieldcat = gt_fcat.
이렇게 사용하면 'SFLIGHT' 테이블 ( 구조 ) 에 있는 필드를 자동으로 gt_fcat에 기본 설정값으로 준다

LOOP AT gt_fcat INTO gs_fcat.
CASE gs_fcat-fieldname.
WHEN 'CARRID' OR 'CONNID' OR 'FLDATE'.
gs_fcat-emphasize = 'C410'.
WHEN 'SEATSMAX' OR 'SEATSOCC'.
IF gv_str EQ TEXT-l03 OR gv_str EQ TEXT-l04.
gs_fcat-tech = abap_on.
ENDIF.
WHEN 'SEATSMAX_B' OR 'SEATSOCC_B'.
IF gv_str EQ TEXT-l02 OR gv_str EQ TEXT-l04.
gs_fcat-tech = abap_on.
ENDIF.
WHEN 'SEATSMAX_F' OR 'SEATSOCC_F'.
IF gv_str EQ TEXT-l02 OR gv_str EQ TEXT-l03.
gs_fcat-tech = abap_on.
ENDIF.
WHEN 'CLASS'.
gs_fcat-tech = abap_on.
ENDCASE.
MODIFY gt_fcat FROM gs_fcat.
ENDLOOP.
LOOP와 CASE문을 이용해서 그 외 필드들을 채워넣는 과정
코드가 짧아지는 것도 아닌데 해당 함수를 왜 사용해야하죠?
가장 큰 이유, 하드코딩은 언제든 좋지 않기 때문
만약 gs_fcat-fieldname에 값을 주다가 오타가 났다고 가정하자
그럼 테이블을 출력하자 마자 빠른 덤프를 확인할 수 있다
또 다른 예시, 만약 gs_fcat에 fieldname 값을 주지 않고 gt_fcat에 append 하면?
역시 테이블을 출력하자마자 빠른 덤프 확인이 가능하다
lvc_fieldcatalog_merge 함수를 사용하면 일단 gt_fcat이 세팅되고 alv 테이블 확인이 가능해진다
그러니 가급적 해당 함수를 사용하도록 하자
'ABAP Study' 카테고리의 다른 글
| [ABAP] ALV Layout 색상변경 (0) | 2026.01.06 |
|---|---|
| [ABAP] Grid ALV & Class (2) | 2025.12.29 |