1. CLASS_EVENT
EVENT사용을 위한 클래스 생성
1) 정의 부
CLASS 클래스 명 DEFINITION
PUBLIC SECTION
METHODS METHOD명 FOR EVENT 이벤트 명
OF CL_GUI_ALV_GRID
IMPORTING INPUT값
ENDCLASS.
2) 실행 부
CLASS 클래스 명 IMPLEMENTATION
METHOD 메소드 명
“LOGIC 구현“
ENDMETHOD
ENDCLASS
3) 객체 변수 생성
DATA : 객체 명 TYPE REF TO 클래스 명
4) 객체 생성
CREATE OBJECT 객체 명
5) HANDLER 선언
DATA : 객체 명 TYPE REF TO 클래스 명
CREATE OBJECT 객체 명
SET HANDLER 객체 명-> 메소드 명 FOR GRID
1) INCLUDE 생성
INCLUDE ZCLASS_EVENT_CLS.
2) EVENT 확인
3) 정의 부 생성
METHODS HANDLER_TOOLBAR FOR EVENT TOOLBAR
OF CL_GUI_ALV_GRID
IMPORTING E_OBJECT
E_INTERACTIVE.
4) 실행 부 생성
METHOD HANDLER_TOOLBAR.
PERFORM ALV_HANDLER_TOOLBAR USING E_OBJECT E_INTERACTIVE.
ENDMETHOD.
FORM ALV_HANDLER_TOOLBAR USING P_OBJECT TYPE REF TO CL_ALV_EVENT_TOOLBAR_SET
P_INTERACTIVE.
DATA : LS_TOOLBAR TYPE STB_BUTTON.
LS_TOOLBAR-FUNCTION = 'TEXT'.
LS_TOOLBAR-ICON = ICON_CHECKED.
LS_TOOLBAR-QUICKINFO = 'INFOMATION'.
APPEND LS_TOOLBAR TO P_OBJECT->MT_TOOLBAR.
ENDFORM.
6) EVENT 변수 생성 / EVENT 객체 생성 / HANDLER 생성
DATA : GO_EVENT TYPE REF TO EVENT.
CREATE OBJECT GO_EVENT.
SET HANDLER GO_EVENT->HANDLER_TOOLBAR FOR GC_GRID.
3. EVENT_USERCOMMAND
1) INCLUDE 생성
INCLUDE ZCLASS_EVENT_CLS.
2) EVENT 확인
3) 정의 부 생성
METHODS HANDLER_USER_COMMAND FOR EVENT USER_COMMAND
OF CL_GUI_ALV_GRID
IMPORTING E_UCOMM.
4) 실행 부 생성
METHOD HANDLER_USER_COMMAND.
PERFORM ALV_HANDLER_USER_COMMAND USING E_UCOMM.
ENDMETHOD.
FORM ALV_HANDLER_USER_COMMAND USING P_UCOMM.
CASE P_UCOMM.
WHEN 'TEXT'.
MESSAGE '학생정보데이터입니다' TYPE 'I'.
ENDCASE.
ENDFORM.
6) EVENT 변수 생성 / EVENT 객체 생성 / HANDLER 생성
DATA : GO_EVENT TYPE REF TO EVENT.
CREATE OBJECT GO_EVENT.
SET HANDLER GO_EVENT->HANDLER_USER_COMMAND FOR GC_GRID.
4. EVNET_HOTSPOT
1) INCLUDE 생성
INCLUDE ZCLASS_EVENT_CLS.
2) EVENT 확인
3) 정의 부 생성
METHODS HANDLE_HOTSPOT_CLICK FOR EVENT HOTSPOT_CLICK
OF CL_GUI_ALV_GRID
IMPORTING E_ROW_ID
E_COLUMN_ID
ES_ROW_NO.
4) 실행 부 생성
METHOD HANDLE_HOTSPOT_CLICK.
PERFORM ALV_HANDLE_HOTSPOT_CLICK USING E_ROW_ID
E_COLUMN_ID
ES_ROW_NO.
ENDMETHOD.
FORM ALV_HANDLE_HOTSPOT_CLICK USING P_ROW_ID TYPE LVC_S_ROW
P_COLUMN_ID TYPE LVC_S_COL
P_ROW_NO TYPE LVC_S_ROID.
CASE P_COLUMN_ID-FIELDNAME.
WHEN 'ZCODE'.
READ TABLE GT_STUDENT INTO GS_STUDENT INDEX P_ROW_NO-ROW_ID.
SET PARAMETER ID 'XUS' FIELD GS_STUDENT-ZCODE.
CALL TRANSACTION 'SU01'.
ENDCASE.
ENDFORM.
6) EVENT 변수 생성 / EVENT 객체 생성 / HANDLER 생성
DATA : GO_EVENT TYPE REF TO EVENT.
CREATE OBJECT GO_EVENT.
SET HANDLER GO_EVENT->HANDLE_HOTSPOT_CLICK FOR GC_GRID.
7) HOTSPOT 필드 카탈로그 정의
GS_FIELDCAT-HOTSPOT = 'X'.
5. EVENT_DOUBLECLICK
1) INCLUDE 생성
INCLUDE ZCLASS_EVENT_CLS.
2) EVENT 확인
3) 정의 부 생성
METHODS HANDLE_DOUBLE_CLICK FOR EVENT DOUBLE_CLICK
OF CL_GUI_ALV_GRID
IMPORTING E_ROW
E_COLUMN
ES_ROW_NO.
4) 실행 부 생성
METHOD HANDLE_DOUBLE_CLICK.
PERFORM ALV_HANDLE_DOUBLE_CLICK USING E_ROW
E_COLUMN
ES_ROW_NO.
ENDMETHOD.
FORM ALV_HANDLE_DOUBLE_CLICK USING P_ROW TYPE LVC_S_ROW
P_COLUMN TYPE LVC_S_COL
P_ROW_NO TYPE LVC_S_ROID.
DATA : LV_CHAR(2).
DATA : LV_MESSAGE(10).
* CASE P_COLUMN-FIELDNAME.
* WHEN 'ZPERNR'.
CLEAR GS_STUDENT.
LV_CHAR = P_ROW_NO-ROW_ID.
READ TABLE GT_STUDENT INTO GS_STUDENT INDEX P_ROW_NO-ROW_ID.
IF SY-SUBRC = 0.
LV_CHAR = P_ROW_NO-ROW_ID.
CONCATENATE LV_CHAR '번째데이터입니다' INTO LV_MESSAGE.
MESSAGE LV_MESSAGE TYPE 'I'.
ENDIF.
* ENDCASE.
ENDFORM.
6) EVENT 변수 생성 / EVENT 객체 생성 / HANDLER 생성
DATA : GO_EVENT TYPE REF TO EVENT.
CREATE OBJECT GO_EVENT.
SET HANDLER GO_EVENT->HANDLE_DOUBLE_CLICK FOR GC_GRID.
6. EVENT_DATACHANGED
1) 데이터 정합성 체크
2) SCREEN과 ITAB의 동기화
CALL METHOD GC_GRID->REGISTER_EDIT_EVENT
EXPORTING
I_EVENT_ID = CL_GUI_ALV_GRID=>MC_EVT_MODIFIED
* EXCEPTIONS
* ERROR = 1
* others = 2
.
IF SY-SUBRC <> 0.
* Implement suitable error handling here
ENDIF.
3) EVENT 확인
4) 정의 부 생성
METHODS HANDLER_DATA_CHANGED FOR EVENT DATA_CHANGED
OF CL_GUI_ALV_GRID
IMPORTING ER_DATA_CHANGED
E_ONF4
E_ONF4_BEFORE
E_ONF4_AFTER
E_UCOMM.
5) 실행 부 생성
METHOD HANDLER_DATA_CHANGED.
PERFORM ALV_HANDELR_DATA_CHANGED USING ER_DATA_CHANGED
E_ONF4
E_ONF4_BEFORE
E_ONF4_AFTER
E_UCOMM.
ENDMETHOD.
6) PERFROM 작성
FORM ALV_HANDELR_DATA_CHANGED USING P_DATA_CHANGED TYPE REF TO CL_ALV_CHANGED_DATA_PROTOCOL
P_ONF4
P_ONF4_BEFORE
P_ONF4_AFTER
P_UCOMM.
DATA : LS_MODI TYPE LVC_S_MODI.
DATA : LV_LEN(02).
CLEAR : LS_MODI, LV_LEN.
LOOP AT P_DATA_CHANGED->MT_GOOD_CELLS INTO LS_MODI.
IF LS_MODI-FIELDNAME = 'ZTEL'.
READ TABLE GT_STUDENT INTO GS_STUDENT INDEX LS_MODI-ROW_ID.
IF LS_MODI-VALUE IS INITIAL.
GS_STUDENT-ICON = ICON_LED_RED.
ELSE.
LV_LEN = STRLEN( LS_MODI-VALUE ).
IF LV_LEN = '11'.
GS_STUDENT-ICON = ICON_LED_GREEN.
ELSE.
GS_STUDENT-ICON = ICON_LED_YELLOW.
ENDIF.
ENDIF.
MODIFY GT_STUDENT FROM GS_STUDENT INDEX LS_MODI-ROW_ID.
CLEAR GS_STUDENT.
ENDIF.
ENDLOOP.
PERFORM REFRESH.
PERFORM REFRESH.
ENDFORM.
7) EVENT 변수 생성
8) EVENT 객체 생성
9) HANDLER 생성
SET HANDLER GO_EVENT->HANDLER_DATA_CHANGED FOR GC_GRID.
7. EVENT_DATACHANGED_FINISHED
1) EVENT 확인
2) 정의 부 생성
METHODS HANDLER_DATA_CHANGED_FINISHED FOR EVENT DATA_CHANGED_FINISHED
OF CL_GUI_ALV_GRID
IMPORTING E_MODIFIED
ET_GOOD_CELLS.
3) 실행 부 생성
METHOD HANDLER_DATA_CHANGED_FINISHED.
PERFORM ALV_DATA_CHANGED_FINISHED USING E_MODIFIED ET_GOOD_CELLS.
ENDMETHOD.
4) PERFROM 작성
FORM ALV_DATA_CHANGED_FINISHED USING P_MODIFIED
PT_GOOD_CELLS TYPE LVC_T_MODI.
DATA : LS_MODI TYPE LVC_S_MODI.
CLEAR LS_MODI.
LOOP AT PT_GOOD_CELLS INTO LS_MODI.
IF LS_MODI-FIELDNAME = 'ZTEL'.
READ TABLE GT_STUDENT INTO GS_STUDENT INDEX LS_MODI-ROW_ID.
IF GS_STUDENT-ICON NE ICON_LED_GREEN.
DELETE TABLE GT_STUDENT FROM GS_STUDENT.
ENDIF.
CLEAR GS_STUDENT.
ENDIF.
ENDLOOP.
ENDFORM.
5) EVENT 변수 생성
6) EVENT 객체 생성
7) HANDLER 생성
SET HANDLER GO_EVENT->HANDLER_DATA_CHANGED_FINISHED FOR GC_GRID.