Abapteur Note
필드 카탈로그 자동 생성(REUSE_ALV_FIELDCATALOG_MERGE) 본문
ALV를 띄우다 보면 어마어마한 개수의 필드를 가진 인터널 테이블을 마주하곤 한다.
이럴 때 사용하면 유용한 함수이다.
하지만 이 함수의 문제는 새로운 필드가 추가되거나 삭제되었을 때 이를 반영하려면 SE80을 한번 나갔다 와야한다.
버퍼 문제라고 하는데 자세한 건 모르겠다.
DATA: BEGIN OF GT_SPFLI OCCURS 0,
CARRID LIKE SPFLI-CARRID,
CONNID LIKE SPFLI-CONNID,
CITYFROM LIKE SPFLI-CITYFROM,
CARRNAME LIKE SCARR-CARRNAME,
END OF GT_SPFLI.
DATA GS_SPFLI LIKE LINE OF GT_SPFLI.
DATA LT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV.
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
I_PROGRAM_NAME = SY-REPID " Internal table declaration program
I_INTERNAL_TABNAME = 'GT_SPFLI'
I_BYPASSING_BUFFER = 'X'
I_BUFFER_ACTIVE = 'X'
I_INCLNAME = SY-REPID " Data declaration include name
CHANGING
CT_FIELDCAT = LT_FIELDCAT[] " Field catalog with field descriptions
.
CALL FUNCTION 'LVC_TRANSFER_FROM_SLIS'
EXPORTING
IT_FIELDCAT_ALV = LT_FIELDCAT " Field Catalog
IMPORTING
ET_FIELDCAT_LVC = GT_FIELDCAT " Field Catalog
TABLES
IT_DATA = GT_SPFLI " Data Table
.
여기서 중요한 것은 꼭 인터널테이블은 OCCUR 즉 헤더라인이 존재하는 인터널테이블로 생성해야 한다.
또한, 필드 내용들은 모두 LIKE로 선언되어야 인식이 가능하다. (INCLUDE, TYPE 모두 안 먹히는 것 같다.)
REUSE_ALV_FIELDCATALOG_MERGE로 필드 카탈로그를 생성하고, LVC_TRANSFER_FROM_SLIS를 통해 Class ALV에 맞도록 변환한다.
보통 내가 ALV를 만드는 방법은 CLASS ALV이니 꼭 변환 과정이 필요하다.
(2024.10.24 update)
DATA LT_FCAT TYPE KKBLO_T_FIELDCAT.
REFRESH LT_FCAT.
CALL FUNCTION 'K_KKB_FIELDCAT_MERGE'
EXPORTING
I_CALLBACK_PROGRAM = SY-CPROG " Internal table declaration program
I_TABNAME = 'GS_SCARR' " Name of table to be displayed
I_INCLNAME = SY-REPID
CHANGING
CT_FIELDCAT = LT_FCAT " Field Catalog with Field Descriptions
EXCEPTIONS
INCONSISTENT_INTERFACE = 1
OTHERS = 2
.
IF SY-SUBRC <> 0.
MESSAGE '필드 카탈로그 조회 실패' TYPE 'W'.
ELSE.
CALL FUNCTION 'LVC_TRANSFER_FROM_KKBLO'
EXPORTING
IT_FIELDCAT_KKBLO = LT_FCAT
IMPORTING
ET_FIELDCAT_LVC = GT_FCAT.
ENDIF.
위 방법이 더 간편함.
특이한 점은 I_TABNAME에 테이블이 아니라 스트럭쳐를 넣어야 한다.
'SAP > ABAP' 카테고리의 다른 글
TOP OF PAGE (0) | 2024.10.23 |
---|---|
DATA_CHANGED METHOD (1) | 2024.10.15 |
문자열 다루기(SHIFT) (0) | 2024.06.18 |
리스트 박스 (0) | 2024.06.07 |
셀렉트 스크린 제어(SCREEN) (0) | 2024.06.07 |