zoukankan      html  css  js  c++  java
  • 在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

  • 相关阅读:
    HYSBZ 3813 奇数国
    HYSBZ 4419 发微博
    HYSBZ 1079 着色方案
    HYSBZ 3506 排序机械臂
    HYSBZ 3224 Tyvj 1728 普通平衡树
    Unity 3D,地形属性
    nginx 的naginx 种包含include关键字
    Redis 出现NOAUTH Authentication required解决方案
    mysql 8.0出现 Public Key Retrieval is not allowed
    修改jar包里的源码时候需要注意的问题
  • 原文地址:https://www.cnblogs.com/javawebsoa/p/3020006.html
Copyright © 2011-2022 走看看