하잉
오늘은 HOTSPOT에 대해서 알려드리도록 하겠슴당
나만 따라와~

ALV HOTSPOT EVENT란
조회 데이터중 특정 CELL을 클릭하면 실행되는 이벤트다.
특징으로는 밑줄이 쳐져있음.

더블클릭 이벤트랑 비슷합니당.
일단 먼저 선언부(DEFINITION)과 실행부(IMPLEMENTATION)을
소개합니다.
*----------------------------------------------------------------------*
* CLASS LCL_EVT_RECEIVER3 DEFINITION DEFERRED
*----------------------------------------------------------------------*
CLASS: LCL_EVT_RECEIVER DEFINITION DEFERRED.
DATA: GO_EVENT TYPE REF TO LCL_EVT_RECEIVER.
*----------------------------------------------------------------------*
* CLASS LCL_EVT_RECEIVER DEFINITION
*----------------------------------------------------------------------*
CLASS LCL_EVT_RECEIVER DEFINITION.
METHODS HANDLE_HOTSPOT_CLICK
FOR EVENT HOTSPOT_CLICK OF CL_GUI_ALV_GRID
IMPORTING E_ROW_ID
E_COLUMN_ID.
ENDCLASS.
클래스 선언을 해주시고~
*&---------------------------------------------------------------------*
*& CLASS LCL_EVT_RECEIVER IMPLEMENTATION
*&---------------------------------------------------------------------*
CLASS LCL_EVT_RECEIVER IMPLEMENTATION.
METHOD HANDLE_HOTSPOT_CLICK.
PERFORM HOTSPOT_CLICK USING E_ROW_ID
E_COLUMN_ID.
ENDMETHOD. "handle_hotspot_click
ENDCLASS. "LCL_RECIVR IMPLEMENTATION
클래스 정의
참쉽죠잉..
여느때와 같이
이제 PERFORM문 안을 꾸며주면 됩니다.
핫스팟 내부 제 로직을 보여드릴게요.
*&---------------------------------------------------------------------*
*& Form HOTSPOT_CLICK
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
FORM HOTSPOT_CLICK USING PV_ROW_ID
PV_COLUMN_ID.
READ TABLE GT_LIST INTO DATA(LS_LIST) INDEX PV_ROW_ID .
CHECK SY-SUBRC = 0.
CASE PV_COLUMN_ID.
WHEN'MATNR'.
SET PARAMETER ID 'MAT' FIELD LS_LIST-MATNR.
SET PARAMETER ID 'WRK' FIELD LS_LIST-WERKS.
SET PARAMETER ID 'CSV' FIELD LS_LIST-STLAN.
CALL TRANSACTION 'CS03' AND SKIP FIRST SCREEN.
ENDCASE.
ENDFORM.
진짜 간단하죠?
보통 핫스팟은 이런식으로
CALL TRANSACTION을 해서
마스터 정보를 바로 볼 수 있도록 하는데용
이렇게 쓰기도하고 전에 저는
핫스팟으로 POP UP창을 띄워도 봤네여 ㅎㅎ.
사실 여기서 쓰인
E_ROW_ID(=PV_ROW_ID)와
E_COLUMN_ID(PV_COLUMN_ID)의
TYPE을 PERFORM문 안에 적을 필요는 없지만(로직상)
혹시 궁금ㅎㅏ거나 알아야하시는 분들을 위해
알려드립니당.
HOTSPOT EVENT PARAMETER TYPE.
PV_ROW_ID TYPE LVC_S_ROW.
PV_COLUMN_ID TYPE LVC_S_COL.
자근데.. HOTSPOT을 이용하기 위해선
여기서 끝이 아닙니도..
일단 다른 이벤트와 마찬가지로
PBO(ALV그리는곳)에 이벤트 설정을
해줍니당.

TOP에 글로벌로 선언해도 돼영 )

이렇게 GO_EVENT를 CREATE 해주시고
SET HANDLER에 저렇게 넣어주시면 됨.
근데 이게 끝이 아님 키키
핫스팟은 필드카탈로그에 설정을 해주셔야합니당.
필드카탈로그 부분에
DATA : LS_FCAT TYPE LVC_S_FCAT.
LS_FCAT-FIELDNAME = 'BUKRS'.
LS_FCAT-COLTEXT = '회사코드'.
LS_FCAT-HOTSPOT = 'X'.
APPEND LS_FCAT TO GT_FCAT.
CLEAR LS_FCAT.
이건 제 코드와 다른 예시입니다.
GT_FCAT으로 글로벌로 선언하셨다면 이런식으로
FIELD_CATALOG의 HOTSPOT에
ABAP_TRUE(X)값을 주면 끝.
(제 로직같은경우는 로컬로 선언했기 때문에
GT_FCAT이아닌 LT_FCAT으로
서브루틴 파라미터로 받겠죠?)
여기서 끝내기 아쉬우니껜..
한가지 TIP을 드리겠습니당.
PARAMETER ID 찾는 방법
SET PARAMETER ID 'MAT' FIELD LS_LIST-MATNR.
SET PARAMETER ID 'WRK' FIELD LS_LIST-WERKS.
SET PARAMETER ID 'CSV' FIELD LS_LIST-STLAN.
CALL TRANSACTION 'CS03' AND SKIP FIRST SCREEN.
아니 CALL TRANSACTION할건데
각 필드에 값 어떻게 넣어서
마스터정보화면 불러오지?ㅠ
저 PARAMETER ID는 어떻게 아는거야..
하시는 분들을 위해 적음
(사실 교육생시절 몰라서 맨날 이런것도 구글링함 ㅠㅠ)
일단 여기서 내가 불러오는건
CS03
(/NCS03이나 /OCS03 티코드 치고 들어가보자.)

자재 필드 / 플랜트 필드 / BOM 용도 필드에
값을 집어넣은 채로 데이터를
불러오고싶다
그러려면 PARAMETER ID를 알아야함.
저기 필드를 클릭하고
F1을 누른다.

저기 빨간 동그라미를 누른다.
저게 바로 '기술 정보'다.
기술 정보 버튼을 누르면

저기서 매개변수 ID가 PARAMETER ID다.
아니면 한가지 방법이 또 있다.
바로 딕셔너리@
역시 닉값한다 사전이다.
Dictionar에서 내가 알고자하는 Parameter ID의
Data Element를 들어간다.

저렇게 매개변수 ID(=Parameter ID)가 나와있음
덤으로 Search Help(=탐색도움말) 이름도
알수있음.
꿀팁.

이제 일을 하자..
나도 일해야지..
'밥린이의 아밥TIP' 카테고리의 다른 글
| [율밥퍼] SAP ABAP- ALV HANDLE_ON_F4 (0) | 2023.09.14 |
|---|---|
| [율밥퍼] SAP ABAP - ALV HANDLE_DOUBLE_CLICK (0) | 2023.09.13 |
| [율밥퍼] SAP ABAP - ALV DATA CHANGED FINISHED (1) | 2023.09.11 |
| [율밥퍼] SAP ABAP - ALV HANDLE_DATA_CHANGED (0) | 2023.09.08 |
| [율밥퍼] SAP ABAP - ALV HANDLE_USER_COMMAND(Feat. SENDER) (0) | 2023.09.07 |