CL_SALV_TABLE
SALV는 기능이 제한적인 대신 사용방법이 간단하여, CBO 프로그램 내에서 간단하게 리스트를 보여주거나 팝업 형태로 보여줄때 간편하게 사용 할 수 있습니다.
또한, Full Screen으로 사용할 경우 해당 리포트가 백그라운드 작업을 돌릴 경우 스풀에 화면리 리스트로 남게되어 아주 편리합니다.
# 사용 예시
REPORT YSALV_TABLE.
CLASS LCL_HANDLE_EVENTS DEFINITION.
PUBLIC SECTION.
METHODS:
ON_DOUBLE_CLICK FOR EVENT DOUBLE_CLICK OF CL_SALV_EVENTS_TABLE
IMPORTING ROW COLUMN,
ON_LINK_CLICK FOR EVENT LINK_CLICK OF CL_SALV_EVENTS_TABLE
IMPORTING ROW COLUMN,
ON_USER_COMMAND FOR EVENT ADDED_FUNCTION OF CL_SALV_EVENTS
IMPORTING E_SALV_FUNCTION
.
ENDCLASS.
CLASS LCL_HANDLE_EVENTS IMPLEMENTATION.
METHOD ON_DOUBLE_CLICK.
MESSAGE I000(0K) WITH '더블클릭' ROW COLUMN.
ENDMETHOD.
METHOD ON_LINK_CLICK.
ENDMETHOD.
METHOD ON_USER_COMMAND.
PERFORM HANDLE_USER_COMMAND USING E_SALV_FUNCTION.
ENDMETHOD.
ENDCLASS.
DATA: GO_EVENTS TYPE REF TO LCL_HANDLE_EVENTS.
DATA: GO_SALV TYPE REF TO CL_SALV_TABLE.
FORM CALL_SALV TABLES FT_ITAB
USING LO_SALV TYPE REF TO CL_SALV_TABLE
FV_TITLE.
DATA : LO_FUNCTIONS TYPE REF TO CL_SALV_FUNCTIONS_LIST,
LO_DISPLAY TYPE REF TO CL_SALV_DISPLAY_SETTINGS,
LO_LAYOUT TYPE REF TO CL_SALV_LAYOUT,
LS_PROGRAM TYPE SALV_S_LAYOUT_KEY,
LO_COLUMNS TYPE REF TO CL_SALV_COLUMNS_TABLE,
LO_COLUMN TYPE REF TO CL_SALV_COLUMN_TABLE,
LS_COLOR TYPE LVC_S_COLO,
LO_SELECTION TYPE REF TO CL_SALV_SELECTIONS,
LO_SORTS TYPE REF TO CL_SALV_SORTS,
LO_AGGR TYPE REF TO CL_SALV_AGGREGATIONS,
LO_FILTER TYPE REF TO CL_SALV_FILTERS,
LO_EVENT_TAB TYPE REF TO CL_SALV_EVENTS_TABLE.
DATA: LV_LVC_TITLE TYPE LVC_TITLE.
MOVE FV_TITLE TO LV_LVC_TITLE.
"ALV 생성
CALL METHOD CL_SALV_TABLE=>FACTORY
IMPORTING
R_SALV_TABLE = LO_SALV
CHANGING
T_TABLE = FT_ITAB[].
"ALV 의 기능키 표시
* LO_FUNCTIONS = LO_SALV->GET_FUNCTIONS( ).
** LO_FUNCTIONS->SET_DEFAULT( ).
* LO_FUNCTIONS->SET_ALL( ).
LO_SALV->SET_SCREEN_STATUS(
PFSTATUS = 'SALV_STATUS'
REPORT = SY-REPID
SET_FUNCTIONS = LO_SALV->C_FUNCTIONS_ALL ).
"ALV 선택 모드 설정
LO_SELECTION = LO_SALV->GET_SELECTIONS( ).
LO_SELECTION->SET_SELECTION_MODE( IF_SALV_C_SELECTION_MODE=>ROW_COLUMN ).
"ALV의 레이아웃 셋팅(줄무늬 패턴, 헤더 텍스트 등)
LO_DISPLAY = LO_SALV->GET_DISPLAY_SETTINGS( ).
LO_DISPLAY->SET_STRIPED_PATTERN( CL_SALV_DISPLAY_SETTINGS=>TRUE ).
LO_DISPLAY->SET_LIST_HEADER( LV_LVC_TITLE ).
"ALV의 레이아웃 저장 기능 활성화
LO_LAYOUT = LO_SALV->GET_LAYOUT( ).
LS_PROGRAM-REPORT = SY-REPID.
LS_PROGRAM-HANDLE = SY-DYNNR.
LO_LAYOUT->SET_KEY( LS_PROGRAM ).
LO_LAYOUT->SET_DEFAULT( ABAP_TRUE ).
LO_LAYOUT->SET_SAVE_RESTRICTION( CL_SALV_LAYOUT=>RESTRICT_NONE ). "기본값 및 사용자 레이아웃 제한 없음
"ALV 열(필드카타로그) 설정
LO_COLUMNS = LO_SALV->GET_COLUMNS( ).
LO_COLUMNS->SET_OPTIMIZE( ABAP_TRUE ). "열 너비 최적화
LO_COLUMN ?= LO_COLUMNS->GET_COLUMN( 'WERKS' ).
LO_COLUMN->SET_VISIBLE( CL_SALV_COLUMN_TABLE=>FALSE ). "열 숨김 (레이아웃 설정에서는 표시)
LO_COLUMN ?= LO_COLUMNS->GET_COLUMN( 'MATNR' ).
LO_COLUMN->SET_TECHNICAL( CL_SALV_COLUMN_TABLE=>TRUE ). "열 숨김 (레이아웃에서도 숨김)
LO_COLUMN ?= LO_COLUMNS->GET_COLUMN( 'ZINT4' ).
LO_COLUMN->SET_LONG_TEXT( '정수' ). "열 내역 설정(긴 내역)
LO_COLUMN->SET_MEDIUM_TEXT( '정수' ). "열 내역 설정(중간 내역)
LO_COLUMN->SET_SHORT_TEXT( '정수' ). "열 내역 설정(짧은 내역)
LO_COLUMN ?= LO_COLUMNS->GET_COLUMN( 'MAKTX' ).
LS_COLOR = VALUE #( COL = 5 INT = 0 INV = 0 ).LO_COLUMN->SET_COLOR( LS_COLOR ). "열 색상 설정
LO_COLUMN ?= LO_COLUMNS->GET_COLUMN( 'DMBTR' ).
LO_COLUMN->SET_CELL_TYPE( IF_SALV_C_CELL_TYPE=>HOTSPOT ). "HOT SPOT 설정
"ALV 정렬
LO_SORTS = LO_SALV->GET_SORTS( ).
LO_SORTS->ADD_SORT( 'MAKTX' ).
"ALV 컬럼의 합계
LO_AGGR = LO_SALV->GET_AGGREGATIONS( ).
LO_AGGR->ADD_AGGREGATION( 'MENGE' ).
"ALV 컬럼 필터
LO_FILTER = LO_SALV->GET_FILTERS( ).
LO_FILTER->ADD_FILTER(
COLUMNNAME = 'MEINS'
SIGN = 'I'
OPTION = 'EQ'
LOW = 'EA'
).
"ALV 이벤트 설정
LO_EVENT_TAB = LO_SALV->GET_EVENT( ).
CREATE OBJECT GO_EVENTS.
SET HANDLER GO_EVENTS->ON_DOUBLE_CLICK FOR LO_EVENT_TAB.
SET HANDLER GO_EVENTS->ON_USER_COMMAND FOR LO_EVENT_TAB.
"ALV 를 팝업으로 실행
* LO_SALV->SET_SCREEN_POPUP(
* START_COLUMN = 1
* END_COLUMN = 100
* START_LINE = 1
* END_LINE = 20 ).
"ALV 표시
LO_SALV->DISPLAY( ).
ENDFORM.
*&---------------------------------------------------------------------*
*& Form HANDLE_USER_COMMAND
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> E_SALV_FUNCTION
*&---------------------------------------------------------------------*
FORM HANDLE_USER_COMMAND USING I_UCOMM TYPE SALV_DE_FUNCTION.
CASE I_UCOMM.
WHEN 'ADJUST'.
PERFORM ADJUST_LAST_NUMBER.
ENDCASE.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form ADJUST_LAST_NUMBER
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM ADJUST_LAST_NUMBER .
DATA: LO_SELECTIONS TYPE REF TO CL_SALV_SELECTIONS.
DATA: LT_ROWS TYPE SALV_T_ROW.
DATA: LV_NUMBER TYPE NRIV-NRLEVEL.
LO_SELECTIONS = GO_SALV->GET_SELECTIONS( ).
LT_ROWS = LO_SELECTIONS->GET_SELECTED_ROWS( ).
IF LT_ROWS[] IS INITIAL.
MESSAGE I006(0K).
EXIT.
ENDIF.
LOOP AT LT_ROWS INTO DATA(LS_ROWS).
"READ TABLE GT_REMOT INTO DATA(LS_REMOT) INDEX LS_ROWS.
IF SY-SUBRC NE 0.
CONTINUE.
ENDIF.
ENDLOOP.
GO_SALV->REFRESH( ).
MESSAGE S018(00).
ENDFORM.
# 참고로, LVC_T_FCAT 타입의 필드카탈로그를 SALV에 사용하려면 아래와 같이 하면 됩니다.
CL_SALV_CONTROLLER_METADATA=>SET_LVC_FIELDCATALOG( T_FIELDCATALOG = IT_FIELDCAT
R_COLUMNS = GO_SALV->GET_COLUMNS( )
R_AGGREGATIONS = GO_SALV->GET_AGGREGATIONS( ) ).
'ABAP > Function|Class' 카테고리의 다른 글
[Class] CL_AUTH_OBJECTS_TO_SQL - 사용자의 보유 권한으로 SQL 조건문 생성 (1) | 2024.10.29 |
---|---|
[Class] CL_GUI_TEXTEDIT (0) | 2024.10.24 |
[Function] POPUP_GET_VALUES_DB_CHECKED - 필드값 입력 팝업 (0) | 2023.12.18 |
[Function] POPUP_GET_VALUES - 필드값 입력 팝업 (0) | 2023.12.18 |
[Class] SUBMIT으로 ALV 데이터 조회 - CL_SALV_BS_RUNTIME_INFO (1) | 2023.12.04 |
댓글