[율밥퍼] SAP ABAP - ALV HANDLE_DOUBLE_CLICK
더블클릭 이벤트 하는 방법 찾다가
여기까지 흘러들어오셨습니까.

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 잊지마시길
