ABAP:F4 F4IF_INT_TABLE_VALUE_REQUEST

ABAP:F4
F4IF_INT_TABLE_VALUE_REQUEST

TYPE-POOLS:slis.

CLASS lcl_event_receiver DEFINITION DEFERRED.
DATA: gt_fcat TYPE lvc_t_fcat,
gs_fcat TYPE lvc_s_fcat,
gt_f4 TYPE lvc_t_f4,
gs_f4 TYPE lvc_s_f4,
gs_event TYPE slis_alv_event,
gt_event TYPE slis_t_event,
gs_layout TYPE lvc_s_layo,
gs_glay TYPE lvc_s_glay.

DATA: event_receiver TYPE REF TO lcl_event_receiver,
go_grid TYPE REF TO cl_gui_alv_grid.

DATA: BEGIN OF gs_data ,
pernr TYPE persno,
nachn TYPE nachn,
gesch TYPE gesch,
END OF gs_data,
gt_data LIKE TABLE OF gs_data.

DATA: BEGIN OF gs_f4value,
gesch TYPE gesch,
ztext TYPE TEXT,
END OF gs_f4value,
gt_f4value LIKE TABLE OF gs_f4value.

————————————————————————————————————————

  • CLASS LCL_EVENT_RECEIVER DEFINITION
    ———————————————————————————————————————-
    CLASS lcl_event_receiver DEFINITION.
    PUBLIC SECTION.
    METHODS:
    handle_f4 FOR EVENT onf4 OF cl_gui_alv_grid
    IMPORTING e_fieldname
    e_fieldvalue
    es_row_no
    er_event_data
    et_bad_cells
    e_display.
    ENDCLASS.
    ———————————————————————————————————————-
  • CLASS LCL_EVENT_RECEIVER IMPLEMENTATION
    ———————————————————————————————————————-
    CLASS lcl_event_receiver IMPLEMENTATION.
    METHOD handle_f4.
    PERFORM f_f4_help USING e_fieldname
    es_row_no.
    er_event_data->m_event_handled = ‘x’ .
    PERFORM refresh_table_alv.
    ENDMETHOD.
    ENDCLASS.

START-OF-SELECTION.
PERFORM f_get_data.
PERFORM f_show_data.

FORM f_get_data .
SELECT pernr nachn FROM pa0002 INTO CORRESPONDING FIELDS OF TABLE gt_data
WHERE begda LE sy-datum AND endda GE sy-datum.
CLEAR gs_f4value.
gs_f4value-gesch = 1.
gs_f4value-ztext = ‘男’.
APPEND gs_f4value TO gt_f4value.
CLEAR gs_f4value.
gs_f4value-gesch = 2.
gs_f4value-ztext = ‘女’.
APPEND gs_f4value TO gt_f4value.
ENDFORM.

FORM f_show_data .
DEFINE %%fcat.
CLEAR gs_fcat.
gs_fcat-fieldname = &1.
gs_fcat-scrtext_l = &2.
IF &1 = ‘GESCH’.
gs_fcat-EDIT = ‘X’.
gs_fcat-f4availabl = ‘X’.
ENDIF.
APPEND gs_fcat TO gt_fcat.
END-OF-DEFINITION.
%%fcat: ‘PERNR’ ‘人员编号’,
‘NACHN’ ‘姓名’,
‘GESCH’ ‘性别’.
gs_event-name = ‘CALLER_EXIT’.
gs_event-FORM = ‘F_CALLER_EXIT’.
APPEND gs_event TO gt_event.
gs_glay-edt_cll_cb = ‘X’.
CALL FUNCTION ‘REUSE_ALV_GRID_DISPLAY_LVC’
EXPORTING
i_callback_program = sy-cprog
i_callback_pf_status_set = ‘PF_STATUS_SET’
it_fieldcat_lvc = gt_fcat
it_events = gt_event
i_grid_settings = gs_glay
TABLES
t_outtab = gt_data.
ENDFORM.

FORM f_caller_exit USING e_grid TYPE slis_data_caller_exit.
gs_f4-fieldname = ‘GESCH’.
gs_f4-register = ‘X’.

  • gs_f4-getbefore = ‘X’.
  • gs_f4-chngeafter = ‘X’.
    INSERT gs_f4 INTO TABLE gt_f4.
    CALL FUNCTION ‘GET_GLOBALS_FROM_SLVC_FULLSCR’
    IMPORTING
    e_grid = go_grid.
    CREATE OBJECT event_receiver.
    SET HANDLER event_receiver->handle_f4 FOR go_grid.
    CALL METHOD go_grid->register_f4_for_fields
    EXPORTING
    it_f4 = gt_f4[].
    ENDFORM.

FORM f_f4_help USING e_fieldname TYPE lvc_fname es_row_no TYPE lvc_s_roid.
DATA: lt_ddshretval TYPE STANDARD TABLE OF ddshretval,
ls_ddshretval TYPE ddshretval.

CHECK e_fieldname = ‘GESCH’.
REFRESH lt_ddshretval.

CALL FUNCTION ‘F4IF_INT_TABLE_VALUE_REQUEST’
EXPORTING
retfield = ‘GESCH’ "
dynpprog = sy-repid
dynpnr = sy-dynnr
dynprofield = ‘GESCH’
value_org = ‘S’
callback_program = sy-repid
TABLES
value_tab = gt_f4value
return_tab = lt_ddshretval
EXCEPTIONS
parameter_error = 1
no_values_found = 2
OTHERS = 3.

IF sy-subrc = 0 AND lt_ddshretval IS NOT INITIAL .
CLEAR ls_ddshretval.
READ TABLE lt_ddshretval INTO ls_ddshretval INDEX 1.
IF ls_ddshretval-fieldval IS NOT INITIAL.
CLEAR gs_data.
READ TABLE gt_data INTO gs_data INDEX es_row_no-row_id.
gs_data-gesch = ls_ddshretval-fieldval.
MODIFY gt_data FROM gs_data INDEX es_row_no-row_id
TRANSPORTING gesch.
ENDIF.
ENDIF.
ENDFORM.

FORM refresh_table_alv .
DATA: ls_stbl TYPE lvc_s_stbl.
ls_stbl-row = ‘X’."
ls_stbl-col = ‘X’.
CALL METHOD go_grid->refresh_table_display
EXPORTING
is_stable = ls_stbl.
ENDFORM.
ABAP:F4 F4IF_INT_TABLE_VALUE_REQUEST