SAP abap ALV 自定义按钮功能

发布于:2023-01-17 ⋅ 阅读:(712) ⋅ 点赞:(0)

需求:在AL中自定义添加一个按钮功能

1.拷贝一个原有的ALV的GUI ,并添加自己的按钮

se37去到REUSE_ALV_GRID_DISPLAY_LVC函数模块中找到贵状态复制下面这个程序,到自己的程序中去
然后在再复制过去的gui状态上更改相应需求的按钮功能呢
在这里插入图片描述

2~3指定参数

2.使用REUSE_ALV_GRID_DISPLAY_LVC函数模块中的两个参数i_callback_pf_status_set i_callback_user_command
3.然后定义两个子程序分别给到这两个参数,一个是刚才设置的GUI状态名称,另一个是按钮的名称
在这里插入图片描述

4.实现这个两个子程序.

gui状态
在这里插入图片描述
按钮功能
在这里插入图片描述

5.具体代码

*&---------------------------------------------------------------------*
*& Report Z_ALVTMP_DEMO_005_HAOCHAOFEI
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT z_alvtmp_demo_005_haochaofei.

INCLUDE z_alvtmp_demo_005_top_cf.  "定义结构
INCLUDE z_alvtmp_demo_005_sel_cf.  "选择屏幕
INCLUDE z_alvtmp_demo_005_frm_cf.  "获取数据

*INITIALIZATION.
** 初始化程序
*  PERFORM frm_initialization_cf.
*
*START-OF-SELECTION.
**获取数据
*    PERFORM frm_get_data.
**数据处理
*   PERFORM frm_data_process.
*  IF gt_alv IS INITIAL.
*    MESSAGE '系统数据,请重新选择查询条件'
*    TYPE 'S' DISPLAY LIKE 'E'.
*    STOP.
*  ENDIF.
*END-OF-SELECTION.
**显示数据
*PERFORM frm_show_data.

START-OF-SELECTION.
* 获取数据
  PERFORM frm_get_data.
* 数据处理
  PERFORM frm_data_process.
* 显示数据
  PERFORM frm_show_data.

END-OF-SELECTION.

*&---------------------------------------------------------------------*
*&      Form  FRM_SHOW_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_show_data .
*  DATA: lv_datum_txt(10) TYPE c,
*        lv_uzeit_txt(10) TYPE c.
*  WRITE sy-datum TO lv_datum_txt.
*  WRITE sy-uzeit TO lv_uzeit_txt.
*  alv_clear_data.
*  status = 'X'.        "保存按钮
*
*  "IF r_rpt3 NE space or r_rpt4 NE space.
*  l_fm_button = 'X'.  "回车事件
  "ENDIF.
  REFRESH : gt_fieldcat .
  CLEAR gs_layout .
  CLEAR gs_fieldcat .
  CLEAR gs_layout.
  gs_layout-zebra = 'X'.
  gs_layout-cwidth_opt = 'X'.
*  gs_layout-box_fname  = 'SEL'.
  gs_layout-sel_mode = 'A'.
*  gs_layout-edit = 'X'.
*  gs_layout-stylefname = 'CELLSTAB'."设置可编辑信息
  PERFORM frm_fieldcat.
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
    EXPORTING
      i_callback_program       = sy-repid
      i_callback_pf_status_set = 'SET_PF_STATUS'  " GUI状态
      i_callback_user_command  = 'FRM_USERCOMMAND' "按钮
      is_layout_lvc            = gs_layout
      it_fieldcat_lvc          = gt_fieldcat
*     IT_EVENTS                = GT_EVENTS
      i_save                   = 'A'
    TABLES
      t_outtab                 = gt_alv
    EXCEPTIONS
      program_error            = 1
      OTHERS                   = 2.
  IF sy-subrc <> 0.
*     Implement suitable error handling here
  ENDIF.
ENDFORM.
FORM frm_fieldcat.
  PERFORM frm_build_fcat USING :
                                'ZAGSDM ' ''    ''  ''  ''  '公司代码',
                                'ZXSRQ '  ''    ''  ''  ''  '销售日期',
                                'ZXSRY '  ''    ''  ''  ''  '销售人员',
                                'ZXSWL '  ''    ''  ''  ''  '销售物料',
                                'ZXSSL '  ''    ''  ''  ''  '销售数量',
                                'ZXSDJ '  ''    ''  ''  ''  '物料单价',
                                'ZXSJE '  ''    ''  ''  ''  '销售金额'.
ENDFORM.
FORM frm_build_fcat  USING  p_fieldname
       p_outlen p_nozero
  p_ref_table p_ref_field p_reptext.
  gs_fieldcat-fieldname   = p_fieldname .  "字段名
  gs_fieldcat-dd_outlen   = p_outlen.
  gs_fieldcat-no_zero     = p_nozero.
  gs_fieldcat-ref_table   = p_ref_table.
  gs_fieldcat-ref_field   = p_ref_field.
*  gs_fieldcat-edit        = p_edit.
  gs_fieldcat-scrtext_l   = p_reptext   .  "描述
  APPEND gs_fieldcat TO gt_fieldcat.
  CLEAR:gs_fieldcat.
ENDFORM.                    "FRM_BUILD_FCAT
FORM set_pf_status USING i_extab TYPE slis_t_extab.
  DATA:lt_exfcode TYPE TABLE OF sy-ucomm.
  SET PF-STATUS 'STAT_ALV' EXCLUDING lt_exfcode.  " gui状态栏名称
ENDFORM.                    "SET_PF_STATUS

FORM frm_usercommand  USING r_ucomm LIKE sy-ucomm
      rs_selfield TYPE slis_selfield.
  DATA:lv_vbeln        TYPE vbeln_vl,
       lv_message(255).
  DATA stbl TYPE lvc_s_stbl.
  DATA:lv_tabix TYPE sy-tabix.
  stbl-row = 'X'." 基于行的稳定刷新
  stbl-col = 'X'." 基于列稳定刷新
  IF gv_grid IS INITIAL.
    CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR' "获取ALV对象的函数
      IMPORTING
        e_grid = gv_grid.
  ENDIF.
  cl_gui_cfw=>set_new_ok_code( new_code = '/00' )."回车时事件
  CALL METHOD gv_grid->check_changed_data.
  
*在此处可以自定义按钮的具体功能呢

   CASE r_ucomm.
    WHEN 'DIS'.
      MESSAGE  '自定的按钮功能呢' TYPE 'S'.
    WHEN ''.
     .........
   ENDCASE.
   
  CALL METHOD gv_grid->set_frontend_layout
    EXPORTING
      is_layout = gs_layout.

  CALL METHOD gv_grid->refresh_table_display
    EXPORTING
      is_stable = stbl.

ENDFORM.                    "FRM_USERCOMMAND

6.效果

在这里插入图片描述

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到