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

  • 相关阅读:
    ZIP压缩算法详细分析及解压实例解释
    nyoj 269 VF
    骨牌覆盖问题 KxM
    骨牌覆盖问题
    省赛总结...
    归并排序求逆序对
    「JLOI2014」松鼠的新家
    「JSOI2011」任务调度
    「JSOI2010」找零钱的洁癖
    「JSOI2011」棒棒糖
  • 原文地址:https://www.cnblogs.com/javawebsoa/p/3020006.html
Copyright © 2011-2022 走看看