이번 Standard Function은 "REUSE_ALV_FIELDCATALOG_MERGE"입니다. 앞 글에서는 Dictionary에 대한 Table 및 Structure의 Object들의 Data Element들을 불러오는 "LVC_FIELDCATALOG_MERGE" Function를 알아봤습니다.
하지만, 개발을 하다보면 사실 Dictionary Object을 바로 ALV로 사용하기 보다 Program에서 DATA문이나 TYPES문으로 선언을 하여 사용하는 상황이 많습니다. 이렇게 Program내에서 선언된 Internal Table의 경우 앞 글에서 설명한 "LVC_FIELDCATALOG_MERGE"를 통해 FieldCatalog Data를 가져오기 못합니다.
따라서, 이번에 소개해드리는 " REUSE_ALV_FIELDCATALOG_MERGE" 통해 Program에서 선언된 Internal Table의 FieldCatalog를 생성해보겠습니다.
Signature
Source Code
임의로 DATA문을 통해 예제 코드를 작성해보았습니다.
"=============================================="
"// internal table 선언"
DATA: BEGIN OF gt_spfli OCCURS 0,
carrid LIKE spfli-carrid,
carrname LIKE scarr-carrname,
connid LIKE spfli-connid,
END OF gt_spfli.
"=============================================="
"// Internal table을 기반으로 필드 카탈로그를 자동"
생성하여 ALV에 사용
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
i_program_name = sy-repid
i_internal_tabname = 'GT_SPFLI'
* I_STRUCTURE_NAME =
i_client_never_display = 'X'
i_inclname = sy-repid
* I_BYPASSING_BUFFER =
* I_BUFFER_ACTIVE =
CHANGING
"// slis_t_fieldcat_alv"
ct_fieldcat = gt_fcat_s
EXCEPTIONS
OTHERS = 3.
IF sy-subrc = 0.
"=============================================="
"// slis_t_fieldcat_alv를 lvc_t_fcat로 전환"
CALL FUNCTION 'LVC_TRANSFER_FROM_SLIS'
EXPORTING
"// slis_t_fieldcat_alv 타입의 테이블를 전송"
it_fieldcat_alv = gt_fcat_s
IMPORTING
"// 변환된 lvc_t_fact 타입의 테이블로 반환받음"
et_fieldcat_lvc = gt_fcat
TABLES
it_data = gt_spfli[].
ENDIF
"// 변환된 lvc_t_fact 타입의 테이블로 반환받음"
et_fieldcat_lvc = gt_fcat
해당 코드에서 " LVC_TRANSFER_FROM_SLIS" Function를 사용하게 되는데 처음 Function에서 필드를 읽어오면, 흔히 사용하는 LVC_T_FCAT type으로 불러오는 것이 아닌 " SLIS_FELIDCAT_ALVSLIS" Type으로 가져오기 때문에 이런 Type를 바꿔주는 Function를 사용했습니다.
실행 결과
알아보기
DATA BEGUN OF OCCURS 0을 선언하면 Structure 형태에 Body가 있지만 header line이 없는 테이블이 됩니다. 그래서 같은 이름의 Structure과 Internal Table이 동시에 선언됩니다. OCCURS는 시스템 실행 시 Internal Table에 메모리 할당을 의미합니다. 0은 제한을 두지 않는다는 것 입니다.
주의 사항
- I_PROGRAM_NAME의 프로그램은 항상 Report, Function group, Module pool or Subroutine pool이어야 합니다 즉, INCLUDE를 참조할 수 없습니다.
- 앞에서 설명한 것과 같이 해당 Function으로는 바로 ALV Grid 클래스의 Fieldcatalog를 사용할 수 없습니다. 그 이유는 해당 Function에서 가져오는 Fieldcatalog는 SLIS_T_FIELDCAT_ALV type이기 때문에 변환 없이 사용할 경우 Dump가 떨어지게 됩니다.
- 해당 Function은 프로그램의 Source Code를 Internal Table에 넣어 읽기 때문에 ABAP Editor에서 72글자가 넘어가면 읽지 못해 Dump가 떨어집니다. 그러므로 코드가 열(Cloumn)기준 72글자 이상으로 넘어가지 않도록 주의해야 합니다.
- Internal Table를 선언할 때 type를 사용하는 것이 아닌 LIKE문을 사용해야 합니다.
- 아이콘 및 이미지 필드를 설정하는 경우 속성을 수동으로 설정해줘야 합니다.
'ABAP Standard Function' 카테고리의 다른 글
[ABAP] CONVERSION_EXIT_ALPHA_OUTPUT / Leading Zero 제거 (0) | 2024.12.20 |
---|---|
[ABAP] CLOI__PUT_SIGN_IN_FRONT / "-" 앞으로 가져오기 (0) | 2024.12.19 |
[ABAP] GET_DOMAIN_VALUES / Domain 정보 가져오기 (0) | 2024.12.18 |
[ABAP] LVC_FIELDCATALOG_MERGE / Dictionary table의 field정보 가져오기 (2) | 2024.12.12 |
[ABAP] POPUP_TO_SELECT_MONTH / 연도 및 월 선택 팝업 (3) | 2024.09.25 |