ABAP에서 구조(structure)의 구성 요소를 동적으로 가져와야 하는 경우가 있습니다. cl_abap_typedescr와 cl_abap_structdescr 클래스를 사용하여 구조의 구성 요소를 가져오는 방법을 설명하겠습니다.
DATA: ls_sflight TYPE sflight.
DATA: lo_struct TYPE REF TO cl_abap_structdescr,
lt_comp TYPE abap_component_tab,
ls_comp TYPE abap_componentdescr.
lo_struct ?= cl_abap_typedescr=>DESCRIBE_BY_DATA( ls_sflight ).
lt_comp = lo_struct->GET_COMPONENTS( ).
LOOP AT lt_comp INTO ls_comp.
WRITE: ls_comp-name.
ENDLOOP.
예제) 같은 구조체 내에서 값이 달라진 구조체 명을 찾고 싶을 때.
FIELD-SYMBOLS: <fs1> TYPE ANY,
<fs2> TYPE ANY.
SELECT * INTO CORRESPONDING FIELDS OF ls_sflight FROM sflight
UP TO 1 ROWS
WHERE carrid EQ 'AA'.
ENDSELECT.
ls_sflight2 = ls_sflight.
ls_sflight2-carrid = 'LH'.
ls_sflight2-connid = '0400'.
LOOP AT lt_comp INTO ls_comp.
CLEAR: lv_cond, lv_str, lv_str2.
ASSIGN COMPONENT ls_comp-name OF STRUCTURE ls_sflight TO <fs1>.
IF sy-subrc EQ 0 AND <fs1> IS ASSIGNED.
ASSIGN COMPONENT ls_comp-name OF STRUCTURE ls_sflight2 TO <fs2>.
IF sy-subrc EQ 0 AND <fs2> IS ASSIGNED.
IF <fs1> <> <fs2>.
lv_str = <fs1>.
lv_str2 = <fs2>.
CONCATENATE ls_comp-name lv_str lv_str2 INTO lv_cond SEPARATED BY space.
ENDIF.
ENDIF.
ENDIF.
WRITE: / lv_cond.
ENDLOOP.
'IT > SAP' 카테고리의 다른 글
Classical way to ABAP OO style of coding (0) | 2025.04.22 |
---|---|
[BC] SAP ABAP 테스트 서버 가지고 놀기 (0) | 2024.04.24 |
[BC] SAP Memory Management(3) - 실습, RSMEMORY, Troubleshooting (0) | 2024.04.15 |
[BC] SAP Memory Management(2) - SAP Memory Allocation (0) | 2024.04.12 |
[BC] SAP Memory Management(1) - SAP Architecture (1) | 2024.04.12 |