밥린이의 아밥TIP

[율밥퍼] SAP ABAP - ALV HANDLE_DOUBLE_CLICK

율밥퍼 2023. 9. 13. 06:58

 

더블클릭 이벤트 하는 방법 찾다가

여기까지 흘러들어오셨습니까.

자 잘 따라 오십쇼.

Double Click Event란?

특정 Cell이나 ROW를 더블클릭하면 발생하는 Event입니다.


 

참 직관적이쥬?

요건 핫스팟과 달리 밑줄 없음

 

 

일단 먼저 선언부(DEFINITION)과 실행부(IMPLEMENTATION)을 소개합니다.

 

DEFINITION

CLASS LCL_EVT_RECEIVER DEFINITION.

METHODS HANDLE_DOUBLE_CLICK
      FOR EVENT DOUBLE_CLICK OF CL_GUI_ALV_GRID
      IMPORTING E_ROW
                E_COLUMN
                ES_ROW_NO
                SENDER.

ENDCLASS.
 

IMPLEMENTATION

CLASS LCL_EVT_RECEIVER IMPLEMENTATION.

  METHOD HANDLE_DOUBLE_CLICK.

    PERFORM DOUBLE_CLICK USING E_ROW
                               E_COLUMN
                               ES_ROW_NO
                               SENDER.

  ENDMETHOD.                    "handle_double_click

ENDCLASS.
 

자 이제 PERFORM문 안에 로직을 꾸려봅시당..

FORM DOUBLE_CLICK  USING PV_ROW    TYPE LVC_S_ROW
                         PV_COLUMN TYPE LVC_S_COL
                         PS_ROW_NO TYPE LVC_S_ROID
                         PO_SENDER.

CHECK PV_ROW-ROWTYPE IS INITIAL.

READ TABLE GT_LIST INTO GS_LIST INDEX PV_ROW-INDEX.

 IF SY-SUBRC = 0.

    CASE PV_COLUMN.
      WHEN 'MATNR'.
        SET PARAMETER ID 'MAT' FIELD GS_LIST-MATNR.
        CALL TRANSACTION 'MM03' AND SKIP FIRST SCREEN.
    ENDCASE.

 ENDIF.

ENDFORM.

 

이렇게 퍼폼문 안에 적어주면 끝입니당..

 

로직을 시작하기에 앞서 ROWTYPE이 빈값인지 아닌지 체크해주고,

(이유는 밑에 적어놓음)

 

선택된 행의 더블클릭 이벤트를 발생시킬 필드에 대한

로직을 적어내려가면 됩니다:)

 

이게 다에요 ㅠㅠ.

 

 

 

여기서 각 받아오는 파라미터들에 대해 설명해드릴게용.

 

1. E_ROW(=PV_ROW) TYPE LVC_S_ROW

: ROWTYPE과 TABLE INDEX 데이터를 가지고 온다.

 

위 로직에서

 

PV_ROW-ROWTYPE이 INITIAL값인지 아닌지 체크하는 이유는

 

만약 ALV에서 합계라던가..소계, 평균값 등등

 

기본적인 라인이나 셀을 더블클릭 하지 않았을 때 빈값이 아니게 됩니다.

 

즉! 제대로된 라인이나 셀을 선택했을때만 빈값이 들어있습니다.

 

우리는 더블클릭된 라인의 정보를 읽어서 무언가의 EVENT를 발생시켜야하기 때문에,

보통 빈값인지 아닌지 체크하고 시작해야 합니다.

 

 

 

 

2. E_COLUMN(=PV_COLUMN) TYPE LVC_S_COL

: 내가 더블클릭한 곳이 어떤 필드인지 담겨있습니다.

 

PV_COLUMN-FIELDNAME에 담긴 값이

내가 EVENT를 발생시키고자 하는 특정 필드인지 아닌지 확인 할 수 있습니다.

 

만약 라인이 아닌 특정 셀에만 더블클릭 이벤트를 발생시키고자 하자면

 

위의 예시 로직처럼 해도 되지만,

 

처음에

CHECK PV_ROW-ROWTYPE IS INITIAL AND PV_COLUMN = 'MATNR'.
 

이런식으로 시작할 수 있을 것도 같네요:)

 

 

 

 

3. E_ROW_NO(=PV_ROW_NO) TYPE LVC_ROID

: 이것도 인덱스 정보가 담겨있습니다.

 

PV_ROW_NO-ROW_ID여기에 몇번째 라인인지 담겨있습니다.

 

PV_ROW-INDEX와 같은내용을 담고있지만,

 

차이는 타입입니다,.

 

PV_ROW-INDEX는

TYPE N LENGHT 10이고,

 

PV_ROW_NO-ROW_ID는

TYPE I LENGTH 4다.

 

 

 

 

 

 

언제나 그렇듯..

PBO ALV 생성하는 곳에

SET HANDLER 잊지마시길