본문 바로가기
SAP/ABAP

[SAP ABAP] ALV 툴바 DELETE 버튼 추가

by 먼가먼가 2024. 12. 3.
728x90
SMALL

 

 

ABAP 프로그램에서 Delete 버튼을 추가하고 그 버튼을 클릭했을 때 특정 로직(예 : 선택한 행 삭제, 메시지 팝업 등)이 동작하도록 프로그램을 다음과 같이 구현 해보도록 하겠습니다.

 

품목조회 ALV 툴바 행삭제버튼

 

 

1. 핸들러 클래스 정의 및 이벤트 등록

 - 이벤트를 구현할 핸들러를 등록 합니다.

CLASS lcl_event_receiver DEFINITION.

  PUBLIC SECTION.
  
      METHODS : handle_user_command "이벤트 커스터마이즈
                FOR EVENT user_command OF cl_gui_alv_grid
                IMPORTING e_ucomm.
  
      METHODS : handle_toolbar "툴바 버튼 커스터마이즈
                FOR EVENT toolbar OF cl_gui_alv_grid
                IMPORTING e_object
                          e_interactive.

ENDCLASS. "LCL_EVENT_RECEIVER DEFINITION


CLASS lcl_event_receiver IMPLEMENTATION.

  METHOD handle_user_command.
    PERFORM alv_user_command USING e_ucomm.
  ENDMETHOD.       
  
    METHOD handle_toolbar.
    PERFORM alv_event_toolbar USING e_object
                                    e_interactive.
  ENDMETHOD.                    "HANDLE_TOOLBAR
  
  
ENDCLASS. "LCL_EVENT_RECEIVER

 

 

2. 행 삭제 생성

FORM ALV_EVENT_TOOLBAR  USING    P_OBJECT
                                 TYPE REF TO CL_ALV_EVENT_TOOLBAR_SET
                                 P_INTERACTIVE.

      DATA: LS_TOOLBAR TYPE STB_BUTTON.

      CLEAR LS_TOOLBAR.
    MOVE 'DEL'            TO ls_toolbar-function. "INT에 APPEND
    MOVE icon_delete_row TO ls_toolbar-icon.  " 행삭제 아이콘
    MOVE '행삭제'          TO ls_toolbar-quickinfo.
    MOVE '행삭제'          TO ls_toolbar-text.
    MOVE ' '               TO ls_toolbar-disabled.
    APPEND ls_toolbar TO P_OBJECT->mt_toolbar.

ENDFORM.                    " ALV_EVENT_TOOLBAR

 

 

3. 행 삭제 버튼 클릭시 이벤트 구현

 

FORM ALV_USER_COMMAND  USING    P_UCOMM.

  DATA : LT_ROWS TYPE LVC_T_ROW,
         LS_ROWS LIKE LINE OF LT_ROWS.
  DATA: L_SCROLL TYPE LVC_S_STBL.


  CASE P_UCOMM.

    WHEN 'DEL'.
      PERFORM DEL_MARKED_ROWS.

  ENDCASE.

ENDFORM.                    " ALV_USER_COMMAND

FORM DEL_MARKED_ROWS .

DATA : LV_ANSWER.

  "선택행 정보 가져오기
  CLEAR: ET_INDEX_ROWS, ES_INDEX_ROWS.

    CALL METHOD GRID1->GET_SELECTED_ROWS
    IMPORTING
      ET_INDEX_ROWS = ET_INDEX_ROWS.

  IF ET_INDEX_ROWS IS INITIAL.
    MESSAGE S003 DISPLAY LIKE 'W'.
    EXIT.
  ENDIF.

"삭제확인 메시지 확인 버튼 구현
CALL FUNCTION 'POPUP_TO_CONFIRM'
  EXPORTING
   TITLEBAR                    = '삭제 확인'
   TEXT_QUESTION               = '삭제 하시겠습니까?'
   TEXT_BUTTON_1               = '예'
   ICON_BUTTON_1               = 'ICON_OKAY'
   TEXT_BUTTON_2               = '아니오'
   ICON_BUTTON_2               = 'ICON_CLOSE'
   DEFAULT_BUTTON              = '1'
   DISPLAY_CANCEL_BUTTON       = 'X' "<-- 문장 지우면 취소 버튼 사라짐 -->"

 IMPORTING
   ANSWER                      = LV_ANSWER.


IF LV_ANSWER <> '1'. "<--- '예'가 아니라면 중단한다. --->"
  EXIT.
ENDIF.

ENDFORM.                    " DEL_MARKED_ROWS

 

4. ALV 스탠다드에 행삭제 툴바 Exclude

 - 화면에 구현될 ALV에 행삭제 툴바를 exclude 합니다.

FORM p1170_exclude_tb_functions USING value(p_0381).

  FIELD-SYMBOLS : <table> TYPE ui_functions.

  DATA : ls_exclude   TYPE ui_func.
  DATA : l_table_name LIKE feld-name.

  CONCATENATE p_0381 '[]' INTO  l_table_name.
  ASSIGN     (l_table_name)    TO <table>.

  PERFORM p1000_append_exclude_functions
  TABLES <table>
  USING : CL_GUI_ALV_GRID=>MC_FC_LOC_DELETE_ROW,    " 삭제 버튼

ENDFORM. " P1170_EXCLUDE_TB_FUNCTIONS

 

5. 툴바버튼 이벤트 확인

 - 삭제 확인 메시지가 팝업 되는 것을 확인할 수 있습니다.

삭제 메시지 팝업

 

728x90
LIST