안녕하심까
이번엔 Data Changed Event에서 사용가능한 프로토콜 메소드를 사용하는 방법을 소개해보도록 하겠슴당
정확한 이름으로는.. ADD_PROTOCOL_ENTRY이고
ALV 이벤트인 DATA CHANGED에서 사용 가능한 메소드 입니돵
보통 오류메세지를 띄울때 많이 사용되고 있어욤!
Data Changed는 지난번 포스팅에서 데이터 변경이 인지 되었을 때 발생하는 이벤트라고 설명했움.
이 메소드는 ALV에 데이터 변경이 일어나고나서,

ALV에 로그 팝업 창에 보여질 메세지 설정하는 겁니다
(CELL의 에러가 해결될 때까지 계속 유지.)
제대로된 값을 입력하거나?
아에 지워버릴때까지 다른거 저장도 못함요 ㅜㅋㅋㅋ
ALV 유효성체크할때 좋겠쥬?
일단 기본적인 로직 보여드리겠슴다
그 CLS의 Data Changed Event안의 로직입니다
LOOP AT PO_DATA_CHANGED->MT_GOOD_CELLS INTO DATA(LS_MOD_CELL).
READ TABLE GT_REGI INTO DATA(LS_REGI) INDEX LS_MOD_CELL-ROW_ID.
CASE LS_MOD_CELL-FIELDNAME.
WHEN 'NAME'.
IF LS_MOD_CELL-VALUE IS NOT INITIAL.
SELECT SINGLE MATNR
FROM MARA
WHERE MATNR = LS_MOD_CELL-VALUE.
IF SY-SUBRC = 0.
CALL METHOD PO_DATA_CHANGED->MODIFY_CELL
EXPORTING
I_ROW_ID = LS_MOD_CELL-ROW_ID
I_FIELDNAME = 'MATNR'
I_VALUE = LS_MOD_CELL-VALUE.
ELSE.
CALL METHOD PO_DATA_CHANGED->ADD_PROTOCOL_ENTRY
EXPORTING
I_MSGID = 'ZMDMM10' "메세지ID
I_MSGTY = 'E' "에러니깐 당연히 타입 E
I_MSGNO = '004' "&&&& (메세지 번호)
I_MSGV1 = '존재하지 않는 자재번호 입니다.' "표시할 메세지
I_FIELDNAME = LS_MOD_CELL-FIELDNAME "대상필드명
I_ROW_ID = LS_MOD_CELL-ROW_ID. "대상 행 번호
ENDIF.
이런식으로 유효성 체크 하곤합니다.
(혹시 어디에 어떻게 넣는지 모르겠으면 위의 링크를 확인하십시옹)
앙앙

물론 메세지는
I_MSGV1 / I_MSGV2 / I_MSGV3 / I_MSGV4
요렇게 있는데 저는 한개만 있으면 돼서나머진 지웠어욤
메세지 클래스 ZMDMM10의 004번 메세지는
& & & &
이렇게 들어가있습니다.
4가지 텍스트를 조합하여 사용할 수 있움.
암튼!!!
존재하는 자재번호인지 확인 후!
있으면 데이터를 변경해주고, 없다면 이렇게 프로토콜 메세지를 띄워줍니다.
제대로된 값 변경하기전까진 다른 버튼 누를 수가 없답니다.
(값을 모두 지우면 가능)
넘 쉬운 ADD_PROTOCOL_ENTRY 메소드 에러메세지 띄우기 너무 좋죵?
현업에서도 이런식으로 에러메세지 많이 띄운답니다.
아 그런데 꼭 Data Changed Event에서만 사용하는건 아녀유
다르게 사용하고 싶은 분들을 위해...
조금더 알려다르자믄용
"프로토콜 클래스를 참조하는 객체를 선언해줍니당당
DATA : GO_CHANGED_PROTOCOL TYPE REF TO CL_ALV_CHANGED_DATA_PROTOCOL.
CREATE OBJECT GO_CHANGED_PROTOCOL "객체 만들어 주시구염
EXPORTING
I_CALLING_ALV = GO_GRID. "요건 클래스 그리드 ㅎㅎ
"필드카탈로그를 넣어줘야합니당
GO_CHANGED_PROTOCOL->MT_FIELDCATALOG = GT_FCAT."다만 COLTEXT에 데이터를 넣어놔야함
CALL METHOD PO_DATA_CHANGED->ADD_PROTOCOL_ENTRY
EXPORTING
I_MSGID = 'ZMDMM10' "메세지ID
I_MSGTY = 'E' "에러니깐 당연히 타입 E
I_MSGNO = '004' "&&&& (메세지 번호)
I_MSGV1 = '존재하지 않는 자재번호 입니다.' "표시할 메세지
I_FIELDNAME = LS_MOD_CELL-FIELDNAME "대상필드명
I_ROW_ID = LS_MOD_CELL-ROW_ID. "대상 행 번호
CALL METHOD GO_CHANGED_PROTOCOL->DISPLAY_PROTOCOL. "메세지 출력
그러면 다음에 또 유용한 내용 들고 오겠심더

'밥린이의 아밥TIP' 카테고리의 다른 글
[율밥퍼] SAP ABAP - T code 정리 (0) | 2023.09.19 |
---|---|
[율밥퍼] SAP ABAP - DEFINE문 ( ABAP 매크로) (0) | 2023.09.15 |
[율밥퍼] SAP ABAP- ALV HANDLE_ON_F4 (0) | 2023.09.14 |
[율밥퍼] SAP ABAP - ALV HANDLE_DOUBLE_CLICK (0) | 2023.09.13 |
[율밥퍼] SAP ABAP - ALV HANDLE_HOTSPOT(Feat. Parameter ID 찾기) (0) | 2023.09.12 |