Class definition부분에서 이와 같이 선언하고
handle_on_f4 FOR EVENT onf4 OF cl_gui_alv_grid
IMPORTING sender
e_fieldname
e_fieldvalue
es_row_no
er_event_data
et_bad_cells
e_display,
Implimentation에서 아래와같이 쓰고
METHOD handle_on_f4.
PERFORM handle_on_f4 USING sender
e_fieldname
es_row_no
er_event_data
et_bad_cells
e_display.
ENDMETHOD. "handle_on_f4
*----------------------------------------------------------------------
FORM handle_on_f4 USING sender TYPE REF TO cl_gui_alv_grid
e_fieldname TYPE lvc_fname
es_row_no TYPE lvc_s_roid
er_event_data TYPE REF TO cl_alv_event_data
et_bad_cells TYPE lvc_t_modi
e_display TYPE c.
DATA : dynnum LIKE sy-dynnr,
retfield LIKE dfies-fieldname,
dynprofield LIKE help_info-dynprofld, "참조필드
return_tab LIKE TABLE OF ddshretval WITH HEADER LINE.
DATA : ls_modi TYPE lvc_s_modi.
FIELD-SYMBOLS:
CASE e_fieldname.
WHEN 'COUNTRYFR'.
DATA : BEGIN OF value_tab OCCURS 0,
countryfr LIKE z32_spfli-countryfr,
END OF value_tab.
CLEAR: value_tab, value_tab[].
SELECT DISTINCT countryfr
FROM z32_spfli
INTO CORRESPONDING FIELDS OF TABLE value_tab.
CLEAR: retfield, dynprofield, dynnum, return_tab, return_tab[].
MOVE e_fieldname TO retfield.
MOVE e_fieldname TO dynprofield.
MOVE sy-dynnr TO dynnum.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = retfield
dynpprog = sy-repid
dynpnr = dynnum
dynprofield = dynprofield
display = e_display
value_org = 'S'
TABLES
value_tab = value_tab
return_tab = return_tab
EXCEPTIONS
parameter_error = 1
no_values_found = 2
OTHERS = 3.
READ TABLE return_tab INDEX 1.
ASSIGN er_event_data->m_data->* TO
CLEAR: ls_modi.
ls_modi-row_id = es_row_no-row_id.
ls_modi-fieldname = 'COUNTRYFR'.
ls_modi-value = return_tab-fieldval.
APPEND ls_modi TO
ENDCASE.
er_event_data->m_event_handled = 'X'.
*--------------------------------------------
그런다음에 필드카탈로그에서 서치헬프를 달 필드 속성에 'F4AVAILABL' 'X'를 해주고
뿌리기 전에
FORM f4_build .
gs_f4-fieldname = 'COUNTRYFR'.
gs_f4-register = 'X'.
gs_f4-getbefore = ' '.
gs_f4-chngeafter = ' '.
APPEND gs_f4 TO gt_f4.
CLEAR : gs_f4.
ENDFORM.
으로 하였습니다.
그리고 마찬가지로 DISPLAY 하기 전에
grid->register_f4_for_fields( EXPORTING
it_f4 = gt_f4[] ).
까지 해줘서 서치헬프를 달았는데
수정모드에는 잘 되고
조회모드에서 서치헬프를 누르게 되면
덤프가 떨어집니다.
옵션으로 조회모드에서는 값이 입력이 되지 않게 설정하면 될 것 같은데
어떻게 해야하는 지 잘 모르겠습니다.
힌트 좀 부탁드립니다 ^^
댓글 4
-
슈퍼맨아들
2009.04.16 23:24
-
쿵푸ㅋ
2009.04.16 23:27
이벤트 등록은 했어요 ^-^ 서치헬프는 잘 나와요
예 조회/수정버튼이 있습니다.
-
쿵푸ㅋ
2009.04.16 23:29
제 생각엔 조회모드에서 서치헬프 누르고 값을 선택하면 그 값이 해당 칸에 넣으려다가 막혀있어서
덤프가 나는 것 같은데요,
여기서 어떻게 해야 할까요?
조회모드에서도 서치헬프가 보이게 하고 싶은데 서치헬프 창이 꺼져도 덤프가 나지 않게 하고 싶습니다.
조회모드일 때 값이 들어가는 부분만 플래그 걸어서 안 들어가게 하려고 지금 찾고 있습니다.
-
쿵푸ㅋ
2009.04.17 01:34
해결했어요.
set_first_display grid gs_layout gt_exclude gt_spfli[] gt_fcat.
CALL METHOD grid->register_edit_event
EXPORTING
i_event_id = cl_gui_alv_grid=>mc_evt_modified.
CALL METHOD grid->register_edit_event
EXPORTING
i_event_id = cl_gui_alv_grid=>mc_evt_enter.
CALL METHOD grid->list_processing_events
EXPORTING
i_event_name = 'TOP_OF_PAGE'
i_dyndoc_id = top_doc.
grid->set_ready_for_input( EXPORTING
i_ready_for_input = 0 ).
grid->register_f4_for_fields( EXPORTING
it_f4 = gt_f4[] ).
여기서 DISPLAY를 맨 밑에 써서 안 됐던 거였네요;; 위치가 잘못되서 하하하하
윗부분에 써주니까 제대로 됩니다.
이유는 잘 모르겠군요.
SET HANDLER grid_event_receiver->handle_onf4
FOR grid.
가 빠졌네요.. 누락을 하신 건가요..
소스는 이상이 없는 것 같네요..
조회/수정모드라는건 프로그램에서 조회/수정버튼이 있다는 얘기인가요 ??