메쏘드 정의하듯이 똑같이 메쏘드 다 정의했구요
확인하려고 하는데 안되서 왜그런지 디버깅 떠보니깐 f4메쏘드 자체를 아예 안타네요 ㅠ
data_changed 메쏘드는 제대로 타서 메쏘드를 제대로 정의하지 않거나 하지는 않은거 같은데
다만 왜그런지 의심되는게 있다면 처음에 테이블 도메인값에 value range를 설정했다가 지우고
액티브 다 시킨 다음에 메쏘드를 만들었거든요 ㅠ 근데 자꾸 메쏘드 안타네요... 도와주세요 아밥님들 ㅠ
일단 제가 메쏘드 정의해논 코드는 올려놓을꼐요ㅠㅠ
''''
========================================메쏘드 정의하고
CLASS lcl_event_receiver DEFINITION.
PUBLIC SECTION.
METHODS : handle_data_changed
FOR EVENT data_changed OF cl_gui_alv_grid
IMPORTING er_data_changed,
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.
ENDCLASS. "(LCL_EVENT_RECEIVER DEFINITION)
CLASS lcl_event_receiver IMPLEMENTATION.
METHOD handle_data_changed.
PERFORM data_changed USING er_data_changed.
ENDMETHOD. "handle_data_changed
METHOD handle_on_f4.
PERFORM on_f4 USING e_fieldname
es_row_no
er_event_data
et_bad_cells.
ENDMETHOD. "handle_on_f4
ENDCLASS. "LCL_EVENT_RECEIVER IMPLEMENTATION
========================================set handeler 도 정의했고 참고로 같이 넣어놓은 data_changed 는 매우 잘됩니다 ㅠㅠ
IF sy-batch IS INITIAL.
CALL METHOD g_grid->register_edit_event
EXPORTING
i_event_id = cl_gui_alv_grid=>mc_evt_modified.
ENDIF.
CREATE OBJECT g_event_receiver.
SET HANDLER g_event_receiver->handle_data_changed FOR g_grid.
SET HANDLER g_event_receiver->handle_on_f4 FOR g_grid.
======================================== f4 이니깐 필드 카테고리도 정의했고
WHEN 'CLASS'.
ls_fcat-edit = 'X'.
ls_fcat-coltext = '대분류'.
ls_fcat-f4availabl = 'X'.
======================================== f4쪽 코딩
: 메쏘드 자체를 안타서 코딩이 제대로 됐는지는 아예 확인을 못했어요 ㅠ 일단 오류는 없음 ㅠ
FORM on_f4 USING p_fieldname TYPE lvc_fname
p_es_row_no TYPE lvc_s_roid
p_er_event_data TYPE REF TO cl_alv_event_data
p_et_bad_cells TYPE lvc_t_modi.
FIELD-SYMBOLS:
DATA: ls_f4 TYPE lvc_s_modi,
l_class TYPE zeclass. " TYPE 에 DATA ELEMENT씀
ASSIGN p_er_event_data->m_data->* TO
ls_f4-fieldname = p_fieldname.
ls_f4-row_id = p_es_row_no-row_id.
READ TABLE itab INDEX ls_f4-row_id.
CASE p_fieldname.
WHEN 'CLASS'.
PERFORM f4_class CHANGING l_class.
IF l_class IS NOT INITIAL.
MOVE l_class TO itab-class.
MODIFY itab INDEX ls_f4-row_id.
ENDIF.
ENDCASE.
p_er_event_data->m_event_handled = 'X'.
CALL METHOD g_grid->refresh_table_display
EXPORTING
is_stable = gt_stbl
i_soft_refresh = c_x
EXCEPTIONS
finished = 1
OTHERS = 2.
IF sy-subrc <> 0.
ENDIF.
ENDFORM.
다 제대로 된거 같은데 왜 안되는지 모르겠어요 ㅠㅠ 도와주세요 아밥님들 ㅠㅠㅠㅠ
메시지는 팝업창으로 : No input help is available 이렇게 떠요 ㅠ
ALV에 CLASS필드에 대한 F4세팅을 해주어야하는데 빠진듯 싶네요. 확인한번 해보세요.
DATA: GT_LVC_F4 TYPE LVC_T_F4,
GS_LVC_F4 TYPE LVC_S_F4.
CLEAR GS_LVC_F4.
GS_LVC_F4-FIELDNAME = 'CLASS'.
GS_LVC_F4-REGISTER = 'X'.
GS_LVC_F4-GETBEFORE = 'X'.
GS_LVC_F4-CHNGEAFTER = 'X'.
APPEND GS_LVC_F4 TO GT_LVC_F4.
CALL METHOD G_GRID->REGISTER_F4_FOR_FIELDS
EXPORTING
IT_F4 = GT_LVC_F4.