Welcome 微信登录
编程资源 图片资源库 蚂蚁家优选 PDF转换器

首页 / 操作系统 / Linux / 在ALV中按F4显示帮助信息

在用ALV显示数据的时候,有时候,一些列需要更改,客户可能要求像标准程序一样,按F4按钮,弹出该列的相关数据,选择后,反填到单元格中,以下程序是示例程序。
 
REPORT Z_EXAMPLE.
 ************************************************************************
 *                   DATEN DEFINITION                               *
 ************************************************************************
 TYPE-POOLS: slis.
 *———————————————————————*
 *     CLASS lcl_event_receiver DEFINITION
 *———————————————————————*
 class lcl_event_receiver definition.
 public section.
   class-methods:
     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,
     on_data_changed for event data_changed of cl_gui_alv_grid
       importing e_onf4
                  e_onf4_before
                  e_onf4_after
                  er_data_changed
                  e_ucomm
                  sender.
 private section.
   types: ddshretval_table type table of ddshretval.
   class-methods: my_f4
         importing sender       type ref to cl_gui_alv_grid
                   et_bad_cells type lvc_t_modi
                   es_row_no      type lvc_s_roid
                   er_event_data  type ref to cl_alv_event_data
                   e_display      type c
                   e_fieldname    type lvc_fname
         exporting IM_lt_f4   type ddshretval_table.
 endclass.                    “lcl_event_receiver DEFINITION
 
tables: mara.
 TYPES:
        BEGIN OF t_alv,
          matnr   TYPE makt-matnr,
          MTART   type mara-MTART,
          MTBEZ   type t134t-MTBEZ,
          maktx   TYPE makt-maktx,
          spras   TYPE makt-spras,
          Value   Type i,
        END OF t_alv.
 DATA:
     gt_fieldcatalog      TYPE slis_t_fieldcat_alv,
     gt_events            TYPE slis_t_event,
     gw_events            TYPE slis_alv_event,
     gt_data             TYPE TABLE OF t_alv,
     gw_data             TYPE          t_alv,
     g_repid              TYPE sy-repid VALUE sy-repid.
 data: g_grid type ref to cl_gui_alv_grid.
 data: gt_bad_cells type lvc_t_modi.
 data: gt_fieldcat type lvc_t_fcat.
 data: g_row_id type lvc_s_roid-row_id.
 field-symbols: <gs_outtab> type any.
 ************************************************************************
 *                   SELECTION SCREEN                               *
 ************************************************************************
 SELECT-OPTIONS: s_matnr FOR mara-matnr .
 ************************************************************************
 *                   START-OF-SELECTION                             *
 ************************************************************************
 START-OF-SELECTION.
 SELECT mara~matnr makt~maktx mara~MTART t134t~MTBEZ makt~spras
 INTO CORRESPONDING FIELDS OF TABLE gt_data up to 50 rows
 FROM mara
   inner join makt on mara~matnr = makt~matnr and makt~SPRAS = ‘EN’
   inner join t134t on mara~MTART = t134t~MTART and t134t~SPRAS = ‘EN’
 WHERE mara~matnr IN s_matnr.
 
  PERFORM creat_fieldcat.
 PERFORM creat_event_exits.
 CALL FUNCTION ‘REUSE_ALV_GRID_DISPLAY’
   EXPORTING
     i_callback_program = g_repid
     it_fieldcat        = gt_fieldcatalog
     it_events          = gt_events
   TABLES
     t_outtab         = gt_data.
 *———————————————————————*
 * Create Output Field Format
 *———————————————————————*
 FORM creat_fieldcat.
 data     gw_fieldcatalog      TYPE slis_fieldcat_alv.
 
  CLEAR gw_fieldcatalog.
 gw_fieldcatalog-fieldname = ‘MATNR’.
 gw_fieldcatalog-ref_fieldname = ‘MATNR’.
 gw_fieldcatalog-ref_tabname = ‘MAKT’.
 APPEND gw_fieldcatalog TO gt_fieldcatalog.
 
  CLEAR gw_fieldcatalog.
 gw_fieldcatalog-fieldname = ‘MAKTX’.
 gw_fieldcatalog-ref_fieldname = ‘MAKTX’.
 gw_fieldcatalog-ref_tabname = ‘MAKT’.
 APPEND gw_fieldcatalog TO gt_fieldcatalog.
 
  CLEAR gw_fieldcatalog.
 gw_fieldcatalog-fieldname = ‘MTART’.
 gw_fieldcatalog-ref_fieldname = ‘MTART’.
 gw_fieldcatalog-ref_tabname = ‘MARA’.
 gw_fieldcatalog-EDIT     = ‘X’.
 APPEND gw_fieldcatalog TO gt_fieldcatalog.
 
  CLEAR gw_fieldcatalog.
 gw_fieldcatalog-fieldname = ‘MTBEZ’.
 gw_fieldcatalog-ref_fieldname = ‘MTBEZ’.
 gw_fieldcatalog-ref_tabname = ‘T134T’.
 APPEND gw_fieldcatalog TO gt_fieldcatalog.
 
  CLEAR gw_fieldcatalog.
 gw_fieldcatalog-fieldname = ‘VALUE’.
 gw_fieldcatalog-seltext_s = ‘VALUE’.
 gw_fieldcatalog-outputlen = 13.
 APPEND gw_fieldcatalog TO gt_fieldcatalog.
 ENDFORM.                    ” creat_fieldcat
 *———————————————————————*
 *      Form  creat_event_exits
 *———————————————————————*
 FORM creat_event_exits .
 gw_events-name = ‘CALLER_EXIT’.
 gw_events-form = ‘CALLER_EXIT’.
 APPEND gw_events TO gt_events.
 ENDFORM.                    ” creat_event_exits
 *———————————————————————*
 *———————————————————————*
 FORM caller_exit USING ls_data TYPE slis_data_caller_exit.
 DATA: l_ref_alv TYPE REF TO cl_gui_alv_grid.
 data: lt_wa_f4 type lvc_s_f4,
       lt_f4 type lvc_t_f4.
 CALL FUNCTION ‘GET_GLOBALS_FROM_SLVC_FULLSCR’
   IMPORTING
     e_grid = l_ref_alv.
 set handler lcl_event_receiver=>on_f4 for l_ref_alv.
 set handler lcl_event_receiver=>on_data_changed for l_ref_alv.
 lt_wa_f4-fieldname  = ‘MTART’.
 lt_wa_f4-register = ‘X’.
 lt_wa_f4-getbefore  = ‘X’.
 lt_wa_f4-chngeafter = ‘X’.
 append lt_wa_f4 to lt_f4.
 call method l_ref_alv->register_f4_for_fields
   EXPORTING
     it_f4 = lt_f4.
 ENDFORM.                    “CALLER_EXIT
 *&———————————————————————*
 *&      Form  f4_set
 *———————————————————————-*
 form f4_set using r_grid type ref to cl_gui_alv_grid
                   rt_fieldcat type lvc_t_fcat
                   rt_bad_cells type lvc_t_modi
                   r_row_id type lvc_s_roid-row_id
                   rs_outtab.
 g_grid = r_grid.
 gt_fieldcat = rt_fieldcat.
 gt_bad_cells = rt_bad_cells.
 g_row_id   = r_row_id.
 assign rs_outtab to <gs_outtab>.
 endform.                                                    “f4_set
 *&———————————————————————*
 *&      Form  f4
 *&———————————————————————*
 *———————————————————————-*
 form f4 tables it_dummy structure seahlpres
               changing r_shlp type shlp_descr_t
                          r_callcontrol like ddshf4ctrl.
 data: ls_interface type ddshiface.
 data: ls_fieldcat type lvc_s_fcat.
 data: ls_bad_cells type lvc_s_modi.
 data: l_tabix type sy-tabix.
 field-symbols: <l_field>.
 ls_interface-shlpfield = ‘MTBEZ’.
 ls_interface-valfield = ‘MTBEZ’.
 append ls_interface to r_shlp-interface.
 loop at r_shlp-interface into ls_interface.
   l_tabix = sy-tabix.
   check ls_interface-f4field is initial
       and not ls_interface-valtabname is initial.
   read table gt_fieldcat into ls_fieldcat
                with key ref_table = ls_interface-valtabname
                       ref_field = ls_interface-valfield.
   if sy-subrc = 0.
     read table gt_bad_cells into ls_bad_cells
                  with key fieldname = ls_fieldcat-fieldname
                         row_id    = g_row_id.
     if sy-subrc = 0.
       ls_interface-value = ls_bad_cells-value.
       ls_interface-internal = ‘ ‘.
       modify r_shlp-interface from ls_interface index l_tabix.
     else.
       assign component ls_fieldcat-fieldname of structure
                <gs_outtab> to <l_field>.
       if sy-subrc = 0 and
            not ( <l_field> is initial and
                  ls_fieldcat-no_init_ch ca ‘FB’ ).
         ls_interface-value = <l_field>.
         ls_interface-internal = ‘X’.
         modify r_shlp-interface from ls_interface index l_tabix.
       endif.
     endif.
   endif.
 endloop.
 endform.                    “f4
 *———————————————————————*
 *     CLASS lcl_event_receiver IMPLEMENTATION
 *———————————————————————*
 class lcl_event_receiver implementation.
 method on_f4.
   data: ls_f4 type ddshretval,
         lt_f4 type table of ddshretval.
   field-symbols: <itab> type lvc_t_modi.
   data: ls_modi type lvc_s_modi.
   call method my_f4
     EXPORTING
       sender        = sender
       es_row_no   = es_row_no
       er_event_data = er_event_data
       et_bad_cells  = et_bad_cells
       e_display   = e_display
       e_fieldname = e_fieldname
     IMPORTING
       IM_lt_f4      = lt_f4.
   assign er_event_data->m_data->* to <itab>.
   read table lt_f4 into ls_f4 with key fieldname = ‘MTART’.
   if not ls_f4 is initial.
     ls_modi-row_id    = es_row_no-row_id.
     ls_modi-fieldname = ‘MTART’.
     ls_modi-value   = ls_f4-fieldval.
     append ls_modi to <itab>.
     ls_modi-row_id = es_row_no-row_id.
     ls_modi-fieldname = ‘VALUE’.
     if ls_f4-fieldval < ‘D’.
       ls_modi-value = 100.
     elseif ls_f4-fieldval < ‘R’.
       ls_modi-value = 1000.
     else.
       ls_modi-value = 10000.
     endif.
     append ls_modi to <itab>.
   endif.
   read table lt_f4 into ls_f4 with key fieldname = ‘MTBEZ’.
   if not ls_f4 is initial.
     ls_modi-row_id    = es_row_no-row_id.
     ls_modi-fieldname = ‘MTBEZ’.
     ls_modi-value   = ls_f4-fieldval.
     append ls_modi to <itab>.
   endif.
   er_event_data->m_event_handled = ‘X’.
 endmethod.                                                “on_f4
 *———————————————————————*
 *     METHOD on_data_changed                                        *
 *———————————————————————*
 method on_data_changed.
 endmethod.                    “on_data_changed
 *———————————————————————*
 *     METHOD my_f4  insert here your own f4-help                    *
 *———————————————————————*
 method my_f4.
   data: lw_tab      like line of gt_data,
         lt_fcat   type lvc_t_fcat,
         ls_fieldcat type lvc_s_fcat,
         l_tabname type dd03v-tabname,
         l_fieldname type dd03v-fieldname,
         l_help_valu type help_info-fldvalue,
         lt_bad_cell type lvc_t_modi,
         lp_wa     type ref to data.
   field-symbols: <l_field_value> type any,
                    <ls_wa>       type any.
   call method sender->get_frontend_fieldcatalog
     IMPORTING
       et_fieldcatalog = lt_fcat.
   read table gt_data index es_row_no-row_id into lw_tab.
   create data lp_wa like line of gt_data.
   assign lp_wa->* to <ls_wa>.
   <ls_wa> = lw_tab.
   read table lt_fcat with key fieldname = e_fieldname into ls_fieldcat.
   move ls_fieldcat-ref_table to l_tabname.
   move ls_fieldcat-fieldname to l_fieldname.
   assign component ls_fieldcat-fieldname of structure lw_tab to <l_field_value>.
   write <l_field_value> to l_help_valu.
   perform f4_set using sender
                        lt_fcat
                        lt_bad_cell
                        es_row_no-row_id
                        <ls_wa>.
   call function ‘F4IF_FIELD_VALUE_REQUEST’
     EXPORTING
       tabname          = l_tabname
       fieldname        = l_fieldname
       display          = e_display
       value            = l_help_valu
       callback_program = ‘ZTEST7′
       callback_form    = ‘F4′
     TABLES
          return_tab     = IM_lt_f4
        exceptions
           parameter_error  = 1
           no_values_found  = 2
           others         = 3.
 endmethod.                                                “my_f4
 endclass.                    “lcl_event_receiver IMPLEMENTATION