ABAP ALV F4帮助

Posted SAP-小伙儿

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ABAP ALV F4帮助相关的知识,希望对你有一定的参考价值。

ALV F4帮助, 选值保存到ALV。

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.

FORM pf_status_set USING rt_extab TYPE slis_t_extab.
  SET PF-STATUS STATUS_ALV.
ENDFORM.

 

以上是关于ABAP ALV F4帮助的主要内容,如果未能解决你的问题,请参考以下文章

ABAP f4帮助输入多个值

ABAP 年月F4

ABAP 年月F4

ABAP 年月F4

怎么用ABAP 代码判断,,某程序的某个屏幕上,输出了 ALV 且 计算 输出ALV 的内表有 多少个字段?

ABAP ALV 怎么用?