*----------------------------------------------------------------------------------------------
ALV 구현 중 EVENT설정부분에서 이벤트핸들러를 생성해서
각각의 이벤트를 적용하는 부분은 의미를 알겠는데요.
이벤트핸들러를 선언하지 않고 바로 ALV변수에다가
register_edit_event( cl_gui_alv_grid=>mc_evt_modified ) 를
해주는 이유가 궁금합니다. (1번부분)
*----------------------------------------------------------------------------------------------
또, ALV상에 있는 STANDARD TOOLBAR 중에서 예를 들어서 ADD ROW버튼을
클릭할 때, 이부분을 제어하기 위해서 g_event_receiver->handle_command for g_grid,
에서 디버그를 걸고 SY-UCOMM 을 체크해봤지만, ADD ROW 버튼에 해당하는
값이 안잡혀서요. 이부분을 잡으려면 어떻게 해야 하나요? (2번부분)
g_event_receiver->handle_command for g_grid,
*----------------------------------------------------------------------------------------------
좋은 하루 되세요^^!
*----------------------------------------------------------------------------------------------
form set_event .
1번시작)
*...Setting Event
g_grid->register_edit_event( cl_gui_alv_grid=>mc_evt_modified ).
1번끝)
create object g_event_receiver.
set handler:
g_event_receiver->handle_double_click for g_grid,
g_event_receiver->handle_data_changed for g_grid,
g_event_receiver->handle_toolbar for g_grid,
2번시작)
g_event_receiver->handle_command for g_grid,
2번끝)
g_event_receiver->handle_button_click for g_grid.
* GRF_EVENT_RECEIVER->HANDLE_DATA_CHANGED for G_GRID.
*==========================================================
endform. " set_event
댓글 13
-
아밥맨
2008.07.17 07:56
-
하오
2008.07.17 18:46
아밥맨님, register_edit_event 가 명시적으로 data changed 이벤트를 발생시키는건가요?
명시적으로 이벤트핸들러를 g_event_receiver->handle_data_changed for g_grid. 이렇게
선언해줘야 data_changed 이벤트를 제어하는 것과 헛갈려서요.
좀더 연구해보겠습니다. 감사합니다^^
-
꽃미남
2008.07.17 20:10
ADD ROW 버튼이 따로 만드신 툴바버튼이라면 이벤트 메서드를 아래와 같이 선언하시고, 등록하시면
해당 메서드로 이벤트가 트리거 됩니다.
handle_user_command
FOR EVENT user_command OF cl_gui_alv_grid
IMPORTING e_ucomm, -
하오
2008.07.17 20:24
꽃미남님, 스탠다드로 제공하는 툴바버튼을 눌러서, 새로운 행이 추가되고
셀단위당 부분적으로 특정한 작업을 하게 하려고 합니다.
계속 연구중이에요^^;; 감사합니다.
-
꽃미남
2008.07.17 22:09
네..그렇군요.
죄송합니다...
초보가 너무 나선것 같습니다...
답변할때 한번더 생각하고
앞으로 주의 하겠습니다. ^^;
-
꽃미남
2008.07.17 23:16
하오님 해결하셨는지요...?
SAP LIB 찾아보니까..나와있네요..before_user_command 이벤트에서 잡히네요.
실제로 테스트 해보니까 스탠다드 툴바 누르니 BREAK-POINT 잘 걸리고요
아래는 SAP LIB 도움말 발췌한 내용입니다...
Use
The ALV Grid Control triggers this event before the
user_command event if the user has chosen a standard or a self-defined function. You can use this event to perform introductory actions before the relevant function is executed.
See also:
Changing Standard Functions
Event parameter
Meaning
E_UCOMM
TYPE SY-UCOMM
Standard or self-defined function code (standard function codes are constant attributes and prefixed with
MC_FC_ ).
For an overview, see:
Events of Class CL_GUI_ALV_GRID
-
하오
2008.07.18 00:37
꽃미남님, 너무 감사합니다^^ 아까 다른 개발자끼리 얘기하다가, 답을 못찾고 있었는데.
좋은 하루 되세요^^*
-
꽃미남
2008.07.18 00:51
종료 버튼 눌러 주는 센스~! ^^ -
하오
2008.07.18 02:15
꽃미남님, 저도 이벤트 등록해서 ALV에서 기본제공하는 삭제버튼 눌러서 확인하고 있습니다.
이벤트정의는 아래와 같구요.
methods: handle_before_user_command
for event before_user_command of cl_gui_alv_grid
importing e_ucomm.
methods: handle_after_user_command
for event after_user_command of cl_gui_alv_grid
importing e_ucomm.
이벤트구현은 아래와 같습니다.
method handle_before_user_command.
message i000 with 'Before User-Command :' e_ucomm.
endmethod. "HANDLE_BEFORE_USER_COMMAND
method handle_after_user_command.
message i000 with 'After User-Command :' e_ucomm.
endmethod. "HANDLE_after_USER_COMMAND
그리고, 저는 ALV 기본툴바의 삭제버튼을 누를때 디버깅이 여기를 타는지
메시지박스가 뜨는지 확인했으나, 디버깅이 여기를 지나가지 않고 메시지도
안떠서요.
디버깅 하셨다고 해서요. 어떻게 하셨는지 설명 좀 부탁드리겠습니다.
감사합니다^^!
-
꽃미남
2008.07.18 02:23
SET HANDLER 구문으로 이벤트 등록하셨나요?
등록하셨다면 스탠다드 툴바버튼 눌렀을때 before_user_command 이벤트가 트리거 되야되는데요...음..
-
하오
2008.07.18 02:38
예, 기존 이벤트핸들러 등록하는 부분에 아래와 같이 추가를 했습니다.
create object G_EVENT_RECEIVER.
set handler:
G_EVENT_RECEIVER->HANDLE_BEFORE_USER_COMMAND for G_GRID,
G_EVENT_RECEIVER->HANDLE_AFTER_USER_COMMAND for G_GRID,
G_EVENT_RECEIVER->HANDLE_DOUBLE_CLICK for G_GRID,
G_EVENT_RECEIVER->HANDLE_DATA_CHANGED for G_GRID,
G_EVENT_RECEIVER->HANDLE_TOOLBAR for G_GRID,
G_EVENT_RECEIVER->HANDLE_COMMAND for G_GRID,
G_EVENT_RECEIVER->HANDLE_BUTTON_CLICK for G_GRID. -
꽃미남
2008.07.18 03:31
음..방금 테스트 해보니 row 에 관련된 툴바버튼 일때는 그 이벤트를 안타는것 같네요(다른툴바 버튼둘은 타는데...)
음...
꼭 표준툴바버튼 추가, 삭제를 사용하셔야 하는건가요?
저는 일반적으로 추가, 삭제는 표준 툴바 안쓰고(제거해 버림) 따로 툴바버튼 올려서 작업하거든요...
배울때도 그렇게 배웠고요...사용자들이 쓰기에 조금 조잡하다고 했엇나...기억이 잘 안나네...
음...도움이 못되서 죄송합니다...혹시 해결하시면 공유해요~ ㅎㅎ
-
하오
2008.07.18 03:44
꽃미남님, 답변 감사합니다. 우선 종료처리하고 다시 질문 새로 올리는 센스^^v
1번은 데이터체인지드 이벤트 발생 시점 차이입니다.
g_grid->register_edit_event( cl_gui_alv_grid=>mc_evt_modified ).
이것을 해주면 alv에서 해당 셀에 데이터를 입력하고 해당 셀을 벗어나는 순간 data_changed 이벤트가 발생합니다.
반면에 g_grid->register_edit_event( cl_gui_alv_grid=>mc_evt_enter ).
이렇게 해주면 해당 셀을 벗어나는 순간이 아닌,
엔터를 치는 순간 data_changed 이벤트가 발생합니다.
즉, 1개의 셀값을 변경하든 10개의 셀값을 변경하든
엔터를 안치면 데이터체인지 이벤트는 발생하지 않습니다.
도움이 되셨길.