Table/Structure 의 필드 리스트 조회
DDIF_FIELDINFO_GET
SALV 를 이용한 간단한 리포트
테이블이나 구조의 필드 리스트를 조회할때 SE11, SE16N 같은 표준 트랜잭션을 많이 이용하고 있습니다.
표준 트랜잭션이 여러 많은 기능을 제공하고 데이터도 바로 조회할 수 있어서 편리하죠.
다만, 엑셀 작업을 하기 위해 필드 리스트를 복사 하거나 필드의 추가정보(변환루틴, 참조 필드 등)을 보려면 이것 저것 왔다 갔다 해야 하나보니 약간의 불편함이 있더라고요...
그래서, 별거 아니긴 하지만 SAP에서 제공하는 필드정보 조회 Function(DDIF_FIELDINFO_GET)과 SALV를 이용하여 아주 간단한 리포트를 만들어 봤습니다.
#1. Report 소스코드
REPORT ZCMR9002.
PARAMETERS: P_TABNAM TYPE DD02L-TABNAME MEMORY ID DTB OBLIGATORY, "테이블/구조명
P_LANGU TYPE SY-LANGU DEFAULT SY-LANGU OBLIGATORY. "필드내역의 언어
DATA: GT_DFIES_TAB TYPE STANDARD TABLE OF DFIES.
START-OF-SELECTION.
CLEAR GT_DFIES_TAB.
"테이블/구조의 필드 정보 조회
CALL FUNCTION 'DDIF_FIELDINFO_GET'
EXPORTING
TABNAME = P_TABNAM
LANGU = P_LANGU
TABLES
DFIES_TAB = GT_DFIES_TAB
EXCEPTIONS
NOT_FOUND = 1
INTERNAL_ERROR = 2
OTHERS = 3
.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE 'S'
NUMBER SY-MSGNO WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4
DISPLAY LIKE 'E'.
ENDIF.
END-OF-SELECTION.
IF GT_DFIES_TAB[] IS NOT INITIAL.
"SALV로 리포트 표시
PERFORM CALL_SALV TABLES GT_DFIES_TAB.
ENDIF.
*&---------------------------------------------------------------------*
*& Form CALL_SALV
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM CALL_SALV TABLES FT_ITAB.
DATA : LR_SALV TYPE REF TO CL_SALV_TABLE,
LR_FUNCTIONS TYPE REF TO CL_SALV_FUNCTIONS_LIST,
LR_DISPLAY TYPE REF TO CL_SALV_DISPLAY_SETTINGS,
LR_LAYOUT TYPE REF TO CL_SALV_LAYOUT,
LS_PROGRAM TYPE SALV_S_LAYOUT_KEY,
LR_COLUMNS TYPE REF TO CL_SALV_COLUMNS_TABLE,
LR_COLUMN TYPE REF TO CL_SALV_COLUMN_TABLE,
LS_COLOR TYPE LVC_S_COLO,
LR_SELECTION TYPE REF TO CL_SALV_SELECTIONS,
LR_SORTS TYPE REF TO CL_SALV_SORTS,
LR_AGGR TYPE REF TO CL_SALV_AGGREGATIONS,
LR_FILTER TYPE REF TO CL_SALV_FILTERS,
LR_EVENT_TAB TYPE REF TO CL_SALV_EVENTS_TABLE.
DATA: LV_LVC_TITLE TYPE LVC_TITLE.
SELECT
DDLANGUAGE,
DDTEXT
FROM DD02T
WHERE TABNAME EQ @P_TABNAM
AND AS4LOCAL EQ 'A'
INTO TABLE @DATA(LT_DD02T).
IF SY-SUBRC EQ 0.
SORT LT_DD02T BY DDLANGUAGE.
READ TABLE LT_DD02T INTO DATA(LS_DD02T) WITH KEY
DDLANGUAGE = SY-LANGU BINARY SEARCH.
IF SY-SUBRC NE 0.
READ TABLE LT_DD02T INTO LS_DD02T WITH KEY DDLANGUAGE = 'E' BINARY SEARCH.
IF SY-SUBRC NE 0.
READ TABLE LT_DD02T INTO LS_DD02T INDEX 1.
ENDIF.
ENDIF.
CONCATENATE P_TABNAM '-' LS_DD02T-DDTEXT INTO LV_LVC_TITLE SEPARATED BY SPACE.
ENDIF.
"ALV 생성
CALL METHOD CL_SALV_TABLE=>FACTORY
IMPORTING
R_SALV_TABLE = LR_SALV
CHANGING
T_TABLE = FT_ITAB[].
"ALV 의 기능키 표시
LR_FUNCTIONS = LR_SALV->GET_FUNCTIONS( ).
* LR_FUNCTIONS->SET_DEFAULT( ).
LR_FUNCTIONS->SET_ALL( ).
"ALV 선택 모드 설정
LR_SELECTION = LR_SALV->GET_SELECTIONS( ).
LR_SELECTION->SET_SELECTION_MODE( IF_SALV_C_SELECTION_MODE=>ROW_COLUMN ).
"ALV의 레이아웃 셋팅(줄무늬 패턴, 헤더 텍스트 등)
LR_DISPLAY = LR_SALV->GET_DISPLAY_SETTINGS( ).
LR_DISPLAY->SET_STRIPED_PATTERN( CL_SALV_DISPLAY_SETTINGS=>TRUE ).
LR_DISPLAY->SET_LIST_HEADER( LV_LVC_TITLE ).
"ALV의 레이아웃 저장 기능 활성화
LR_LAYOUT = LR_SALV->GET_LAYOUT( ).
LS_PROGRAM-REPORT = SY-REPID.
LS_PROGRAM-HANDLE = '100'.
LR_LAYOUT->SET_KEY( LS_PROGRAM ).
LR_LAYOUT->SET_DEFAULT( ABAP_TRUE ).
LR_LAYOUT->SET_SAVE_RESTRICTION( CL_SALV_LAYOUT=>RESTRICT_NONE ).
"ALV 열(필드카타로그) 설정
LR_COLUMNS = LR_SALV->GET_COLUMNS( ).
LR_COLUMNS->SET_OPTIMIZE( ABAP_TRUE ). "열 너비 최적화
"ALV 정렬
LR_SORTS = LR_SALV->GET_SORTS( ).
LR_SORTS->ADD_SORT( 'POSITION' ).
"ALV 표시
LR_SALV->DISPLAY( ).
ENDFORM.
'ABAP > 소스코드' 카테고리의 다른 글
[Class] Progress Indicator 처리용 Common Class (0) | 2023.05.24 |
---|---|
[Report] Client copy 후 번호범위 자동 조정 프로그램 (1) | 2023.05.24 |
[Include] Progress Indicator 처리용 Common Include (0) | 2023.05.10 |
[ABAP] HMAC 암호화(HMACSHA256) 소스코드 (0) | 2023.05.09 |
[SAP/User-Exit] 회사코드 탐색 도움말 불필요 항목 제외처리 (0) | 2023.05.07 |
댓글