ABAP 언어에 대한 개념을 정리하는 포스팅입니다.
작성자는 ABAP에 대한 전문가가 아니며, 작성된 정보가 부정확할 수 있으니 게시글은 참고 목적으로만 봐주시면 감사하겠습니다.
ALV Events
SAP 프로그램 실행 시 흐름 순서는 다음과 같습니다.
실행 -> INITIALIZATION -> SELECTION-SCREEN -> AT SELECTION-SCREEN -> START OF SELECTION -> Display List Buffer as List
INITIALIZATION: 프로그램 실행을 위한 Parameter, Select-Options의 초기값을 세팅할 때 사용
SELECTION-SCREEN: 실행 조건을 입력 받는 화면, 조건을 입력하고 F8(실행)을 누르면 조건에 맞는 데이터가 출력,
초기 화면은 1000번 스크린
* 데이터를 출력하기 위해선 SQL 문을 이용하여 데이터를 조회해야 한다.
AT SELECTION-SCREEN: 사용자가 1000번 스크린에서 입력 필드 값이 변동되었을 때 실행되는 이벤트 INITIALIZATION 다음에 선언할 수 있으며, 선택 사항
START OF SELECTION: 프로그램 실행 시 데이터를 조회하기 위한 이벤트
Event에는 여러 가지 종류가 있습니다. 그 종류에 대해 알아보겠습니다.
알아볼 이벤트 종류는 Hotspot_Click, Toolbar, Double_Click, User_Command입니다.
먼저 이벤트를 정의해야 합니다. 이벤트는 T-Code : SE24에서 CL_GUI_ALV_GRID를 검색하신 후 Events 탭 페이지에서 확인할 수 있습니다.
이벤트를 정의하기 위해선 아래와 같이 구문을 입력해주시면 됩니다.
CLASS LCL_EVENT DEFINITION.
PUBLIC SECTION.
CLASS-METHODS:
ON_DOUBLE_CLICK FOR EVENT DOUBLE_CLICK OF CL_GUI_ALV_GRID " 1
IMPORTING ES_ROW_NO E_COLUMN,
ON_HOTSPOT_CLICK FOR EVENT HOTSPOT_CLICK OF CL_GUI_ALV_GRID " 2
IMPORTING ES_ROW_NO,
ON_TOOLBAR FOR EVENT TOOLBAR OF CL_GUI_ALV_GRID " 3
IMPORTING E_OBJECT,
ON_USER_COMMAND FOR EVENT USER_COMMAND OF CL_GUI_ALV_GRID " 4
IMPORTING E_UCOMM.
ENDCLASS.
1. DOUBLE_CLICK 이벤트입니다.
DOUBLE_CLICK 이벤트는 셀을 더블클릭할 때의 이벤트입니다. DOUBLE_CLICK 이벤트를 정의하고 구현할 때 더블 클릭 시 어떤 이벤트를 구현할 지 설정할 수 있습니다.
-DOUBLE_CLICK 이벤트에 사용되는 파라미터는 다음과 같습니다.
E_ROW: 현재 선택된 라인 인덱스 번호, E_COLUMN: 현재 선택된 칼럼 이름, ES_ROW_NO: 현재 선택된 ROW_ID
2. HOTSPOT_CLICK 이벤트입니다.
HOTSPOT_CLICK 이벤트는 HOTSPOT으로 선언된 컬럼을 마우스로 클릭했을 때 발생하는 이벤트입니다.
HOTSPOT으로 지정할 칼럼은 필드 카탈로그로 선언 시 HOTSPOT 속성으로 선언되어야 합니다.
-HOTSPOT_CLICK 이벤트에 사용되는 파라미터는 다음과 같습니다.
E_ROW_ID: 현재 선택된 라인 인덱스 번호, E_COLUMN_ID: 현재 선택된 컬럼 이름, ES_ROW_ID: 현재 선택된 ROW_ID
3. TOOLBAR 이벤트입니다,
TOOLBAR 이벤트를 통해 ALV에서 기본적으로 제공되는 아이콘 외에 개발자가 직접 아이콘을 추가할 수 있습니다.
TOOLBAR 이벤트는 ALV 그리드에 아이콘만 추가할 뿐 아이콘을 클릭했을 때 동작을 부여하는 것은 USER_COMMAND 이벤트에서 진행해야 합니다.
-TOOLBAR 이벤트에 사용되는 파라미터는 다음과 같습니다.
E_OBJECT: TOOLBAR의 기능을 저장하는 테이블 타입의 오브젝트, E_INTERACTIVE: FLAG가 설정되어 있으면, 이벤트가 호출될 때 SET_TOOLBAR_INTERACTIVE 메소드를 호출하여 툴바를 초기화.
4. USER_COMMAND 이벤트입니다.
USER_COMMAND 이벤트는 TOOLBAR 이벤트를 통해 추가한 아이콘에 기능을 부여하는 이벤트입니다.
-USER_COMMAND 이벤트에 사용되는 파라미터는 다음과 같습니다.
E_UCOMM: 추가한 버튼의 펑션 코드
이벤트 구현 코드 예시
CLASS LCL_EVENT_HANDLER IMPLEMENTATION.
METHOD ON_HOTSPOT_CLICK.
READ TABLE GT_DATA INTO GS_DATA INDEX ES_ROW_NO-ROW_ID.
IF SY-SUBRC = 0.
CALL SCREEN 110
STARTING AT 10 2.
ENDIF.
ENDMETHOD.
METHOD ON_TOOLBAR.
DATA: LS_BUTTON TYPE STB_BUTTON.
LS_BUTTON-BUTN_TYPE = 3.
APPEND LS_BUTTON TO E_OBJECT->MT_TOOLBAR.
CLEAR: LS_BUTTON.
LS_BUTTON-FUNCTION = 'FC1'.
LS_BUTTON-ICON = ICON_CUSTOMER.
LS_BUTTON-TEXT = 'Early Booked Top 5 Customer'.
LS_BUTTON-QUICKINFO = 'Early Booked Top 5 Customer'.
APPEND LS_BUTTON TO E_OBJECT->MT_TOOLBAR.
ENDMETHOD.
METHOD ON_USER_COMMAND.
CASE E_UCOMM.
WHEN 'FC1'.
CALL SCREEN 120
STARTING AT 10 2.
ENDCASE.
ENDMETHOD.
ENDCLASS.
ALV Methods
1. get_current_cell: ALV 그리드 컨트롤에서 커서가 놓인 위치의 값과 속성들을 반환합니다.
선택된 셀이 존재하지 않으면 라인의 Row 값은 0을 반환합니다.
CALL METHOD <참조 변수 이름>->GET_CURRENT_CELL
IMPORTING
E_ROW = <I(정수) 타입 변수>
E_VALUE = <C(문자) 타입 변수>
E_COL = <I(정수) 타입 변수>
ES_ROW_ID = <LVC_S_ROW 스트럭처 타입 변수>
ES_COL_ID = <LVC_S_COL 스트럭처 타입 변수>
ES_ROW_NO = <LVC_S_ROID 스트럭처 타입 변수>
메소드에 사용되는 파라미터는 다음과 같습니다.
E_ROW: ALV 그리드 컨트롤의 현재 라인 인덱스
E_VALUE: ALV 그리드 컨트롤의 현재 셀의 값
E_COL: ALV 그리드 컨트롤의 현재 칼럼 이름
ES_ROW_ID: 아웃풋 테이블의 현재 라인 타입과 인덱스에 대한 정보 구조
ES_COL_ID: 아웃풋 테이블의 현재 칼럼과 필드명에 대한 정보 구조
ES_ROW_NO: 현재 선택된 ROW_ID
2. get_frontend_layout: 현재 설정된 레이아웃 정보를 가져온다.
CALL METHOD <참조 변수 이름>->GET_FRONTEND_LAYOUT
IMPORTING
E_LAYOUT = <LVC_S_LAYO 스트럭처 타입 변수>
3. get_selected_cells: 현재 선택된 복수의 셀 정보를 LVC_T_CELL 타입의 테이블로 반환한다. 즉, 현재 선택된 셀들의 필드명, 인덱스 등의 정보를 가져온다.
CALL METHOD <참조 변수 이름>->GET_SELECTED_CELLS
IMPORTING
ET_CELL = <LVC_T_CELL 스트럭처 타입 변수>
4. get_selected_columns: 선택된 칼럼들의 정보를 LVC_T_COL 타입의 테이블로 반환한다.
CALL METHOD <참조 변수 이름>->GET_SELECTED_COLUMNS
IMPORTING
ET_INDEX_COLUMNS = <LVC_T_COL 스트럭처 타입 변수>
5. get_selected_rows: 선택된 여러 라인의 정보를 LVC_T_ROW 타입의 테이블로 반환한다.
CALL METHOD <참조 변수 이름>->GET_SELECTED_ROWS
IMPORTING
ET_INDEX_ROWS = <LVC_T_ROW 스트럭처 타입 변수>
6. refresh_table_display: 이미 화면에 조회된 ALV의 아웃풋 테이블을 다시 조회할 때 사용하는 메소드
CALL METHOD <참조 변수 이름>->REFRESH_TABLE_DISPLAY
IMPORTING
IS_STABLE = <LVC_S_STBL 스트럭처 타입 변수>
I_SOFT_REFRESH = <char01 타입 변수>
메소드에 사용되는 파라미터는 다음과 같습니다.
LS_STABLE: 라인과 컬럼 위치를 기억하여 재조회하고, 이전의 위치에 화면을 보이게 한다.
I_SOFT_REFRESH: Sort, Filter, Sum 등 현 ALV 그리드의 레이아웃 세팅을 그대로 유지하면서 Refresh를 실행한다.