FORM ALV_EVENTS_GET USING VALUE(FP_EVENT).
DATA LS_EVENT TYPE SLIS_ALV_EVENT.
CASE FP_EVENT.
WHEN 'P'.
LS_EVENT-NAME = SLIS_EV_PF_STATUS_SET.
LS_EVENT-FORM = 'PF_STATUS_SET'.
WHEN 'U'.
LS_EVENT-NAME = SLIS_EV_USER_COMMAND.
LS_EVENT-FORM = 'USER_COMMAND'.
WHEN 'T'.
LS_EVENT-NAME = SLIS_EV_TOP_OF_PAGE.
LS_EVENT-FORM = 'TOP_OF_PAGE'.
WHEN 'D'.
LS_EVENT-NAME = SLIS_EV_DATA_CHANGED.
LS_EVENT-FORM = 'DATA_CHANGED'.
ENDCASE.
IF GT_EVENTS[] IS INITIAL.
CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
EXPORTING
I_LIST_TYPE = 0 "Simple List
IMPORTING
ET_EVENTS = GT_EVENTS.
ENDIF.
READ TABLE GT_EVENTS TRANSPORTING NO FIELDS
WITH KEY NAME = LS_EVENT-NAME.
IF SY-SUBRC = 0.
MODIFY GT_EVENTS FROM LS_EVENT INDEX SY-TABIX.
ELSE.
APPEND LS_EVENT TO GT_EVENTS.
ENDIF.
ENDFORM. " ALV_EVENTS_GET
FORM ALV_GRID_DISPLAY TABLES FT_OUTTAB.
* USING PF_EDIT_SET.
G_PROGRAM = SY-REPID.
GS_GRIDSET-EDT_CLL_CB = 'X'. "PF_EDIT_SET.
" 엔터키/자료가 바뀌면 바로 반응한다.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
* I_BYPASSING_BUFFER = ' '
* I_BUFFER_ACTIVE = 'X'
I_CALLBACK_PROGRAM = G_PROGRAM
I_CALLBACK_PF_STATUS_SET = 'PF_STATUS_SET'
I_CALLBACK_USER_COMMAND = 'USER_COMMAND'
I_GRID_SETTINGS = GS_GRIDSET
IS_LAYOUT = GS_LAYOUT
IT_FIELDCAT = GT_FIELDCAT[]
IT_SORT = GT_SORT
I_SAVE = G_SAVE
IS_VARIANT = GS_VARIANT
IT_EVENTS = GT_EVENTS[]
IMPORTING
E_EXIT_CAUSED_BY_CALLER = G_EXIT_CAUSED_BY_CALLER
ES_EXIT_CAUSED_BY_USER = GS_EXIT_CAUSED_BY_USER
TABLES
T_OUTTAB = FT_OUTTAB
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2.
* refresh
IF GS_EXIT_CAUSED_BY_USER CS 'X'.
SET SCREEN 0.
ENDIF.
ENDFORM. " ALV_GRID_DISPLAY
다음 과 같이 연결해주 었는데
FORM USER_COMMAND USING fp_ucomm LIKE sy-ucomm
fs TYPE slis_selfield.
CASE fp_ucomm.
* 더블클릭
WHEN '&IC1'.
MESSAGE i999(zmfi) WITH 'dodopapa.'.
WHEN 'POST'.
ENDCASE.
fs-refresh = 'X'.
fs-row_stable = 'X'.
fs-col_stable = 'X'.
ENDFORM. "USER_COMMAND
위의 폼에서 받아서 처리해야하자나요 근데 alv에서 더블 클릭 및 이것 저것 이벤트 발생시키면
오류가 생겨요 디버깅 하니까. user_command form까지 안들어가는것 같은데 맵핑이 제대로 안된것 같아요
뭐가 문제일까요?
댓글 4
-
아밥고지를 찾아서
2009.04.04 01:11
-
SAYA
2009.04.04 01:40
alv 함수에서 사용할 이벤트를 한꺼번에 등록해서 적용할때
IT_EVENTS = GT_EVENTS[]
이것을 사용합니다.
개별적으로 사용한다면
I_CALLBACK_USER_COMMAND = 'USER_COMMAND'
I_CALLBACK_PF_STATUS_SET = 'PF_STATUS_SET'
이렇게 사용을 하구요.
위의 경우는 gt_events 를 사용하고 ..
i_callback ~ 부분은 주석처리해도 됩니다.
alv 함수에서 exporting, importing 에 넘겨주는 parameter 를 꼭 필요한 것만 셋팅해서
넘겨주고 에러가 없으면 하나씩 추가해 가면서 테스트 하시는게 좋을 것 같네요.
-
아밥고지를 찾아서
2009.04.04 02:36
캄사 캄사 합니다. 오늘도 즐거운 하루 되세요
-
쥬앙
2009.04.07 01:28
클래스 ALV 사용하면 좀 편하지 않나요 ??
거기에 더불클릭 명령 Implement 문 이던가.. 거기 해당 명령에 대한 기능 추가하여 사용하고 있는데요 흠..
한가지 질문 더 추가요.. 저기 보면
I_CALLBACK_USER_COMMAND = 'USER_COMMAND' 이란 부분과
LS_EVENT-NAME = SLIS_EV_USER_COMMAND.
LS_EVENT-FORM = 'USER_COMMAND'. 라는 부분있자나요
왜 두곳에 다 넣는거죠.. 제 생각에는 한곳에만 넣어도 된다고 생각하는데 말이죠?