본문 바로가기
프로그래밍/기타 프로그래밍

[SAP/ABAP] EVENT DATA_CHANGED 활용하여 ALV 체크박스(checkbox) 클릭 시 바로 반영하기

by TaeGyeong Lee 2023. 12. 14.

개요

cl_gui_alv_grid 에서 필드 카탈로그를 통해 설정한 체크박스는 체크 후 새로고침해야 인터널 테이블에 해당 체크 값('X')이 저장됩니다. (새로고침 없이 체크박스 체크만 할 경우 인터널 테이블에 반영되지 않음)

이는 매우 불편하므로 DATA_CHANGED 이벤트를 통해 체크 시 바로 인터널 테이블에 반영되도록 만들어 보겠습니다.

 

전제

아래 구현 예제는 다음과 같이 전제합니다.

  • alv를 구현하기 위해 필요한 일반적인 코드가 구현되어 있다. (아래 구현 예제는 이러한 코드가 모두 구현된 후에 추가해야 하는 코드만 서술합니다)
  • 변수 ZCHECKBOX는 구조체 안에 TYPE C LENGTH 1 데이터 타입으로 선언되어 있다.
  • 필드 카탈로그 내 ZCHECKBOX의 EDIT에는 'X' 값이 저장되어 있다. 
  • 사전에 REFRESH PERFORM 이 구현되어 있으며 코드는 아래와 같다.

 REFRESH PERFORM 

단순히 해당 그리드에 REFRESH_TABLE_DISPLAY메소드를 호출한 것입니다.

FORM REFRESH .

  DATA : LS_STABLE TYPE LVC_S_STBL.
  CALL METHOD GC_GRID1->REFRESH_TABLE_DISPLAY
    EXPORTING
      IS_STABLE      = LS_STABLE
      .

ENDFORM.

 

구현

이벤트 클래스 정의부, 실행부에 DATA_CHANGED 핸들러를 작성해주세요.

이벤트 클래스 정의부 

CLASS EVENT DEFINITION.

  PUBLIC SECTION.
...

  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.

ENDCLASS.

 

이벤트 클래스 실행부 

CLASS EVENT IMPLEMENTATION.

...

  METHOD HANDLER_DATA_CHANGED.
    PERFORM ALV_HANDLER_DATA_CHANGED USING ER_DATA_CHANGED E_ONF4 E_ONF4_BEFORE E_ONF4_AFTER E_UCOMM.
  ENDMETHOD.

ENDCLASS.

 

 이벤트 핸들러 FORM 작성 

FORM ALV_HANDLER_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.
  LOOP AT P_DATA_CHANGED->MT_GOOD_CELLS INTO LS_MODI.
    " 체크박스 업데이트
    IF LS_MODI-FIELDNAME = 'ZCHECKBOX'.
      CLEAR : GS_STUDENT.
	
      READ TABLE GT_STUDENT INTO GS_STUDENT INDEX LS_MODI-ROW_ID.
      
      " 인터널 테이블 수정
      MODIFY GT_STUDENT FROM GS_STUDENT INDEX LS_MODI-ROW_ID.
    ENDIF.
  ENDLOOP.

  PERFORM REFRESH.

ENDFORM.

 

 이벤트 객체 생성 및 핸들러 연결 

PBO에서 grid 객체 생성 후 alv 출력 전 아래와 같은 PERFORM을 작성하여 호출해 주세요.

FORM CLASS_EVENT .

  CALL METHOD GC_GRID1->REGISTER_EDIT_EVENT
    EXPORTING
      I_EVENT_ID = CL_GUI_ALV_GRID=>MC_EVT_MODIFIED
          .

  CREATE OBJECT GO_EVENT.

...
    SET HANDLER GO_EVENT->HANDLER_DATA_CHANGED FOR GC_GRID1.

ENDFORM.

 

참고 자료

 

ABAP Class ALV Checkbox 변경시 Data Changed Event 실행

Class ALV 에서 데이터를 수정하면 ALV 에 설정되어 있는 Data Changed Event 가 실행되게 된다. 그런데 개발을 하다 보니 Checkbox 의 경우 기본적으로 Data Changed Event 를 타지 않아서 변경된 내용을 체크 할

www.like2party.net

 

OO ALV with check boxes, icon and popup message to modify the output at runtime. | SAP Blogs

0 1 11,677 In this post we will create an OO alv which is having the check boxes and icons, when the user checks the check box and executes it, then we will get a pop confirmation. Afterwards the the adjacent field value of the checked box will be modified

blogs.sap.com