[SAP] CLASS_EVENT

이안·2024년 2월 20일

SAP

목록 보기
30/30
post-thumbnail

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

2. EVENT_TOOLBAR

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.

5)실행 부 PERFORM 생성 + TOOLBAR기능 로직 구현

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.

5) 실행 부 PERFORM 생성 + 기능 로직 구현

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.

5) 실행 부 PERFORM 생성 + HOTSPOT기능 로직 구현

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.

5) 실행 부 PERFORM 생성 + 기능 로직 구현

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.

0개의 댓글