• SAP abap ALV 自定义按钮功能


    需求:在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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 122
    • 123
    • 124
    • 125
    • 126
    • 127
    • 128
    • 129
    • 130
    • 131
    • 132
    • 133
    • 134
    • 135
    • 136
    • 137
    • 138
    • 139
    • 140
    • 141
    • 142
    • 143
    • 144
    • 145
    • 146
    • 147
    • 148
    • 149

    6.效果

    在这里插入图片描述

  • 相关阅读:
    SpringBoot轻松实现项目集成Knife4j接口文档
    前端线上图片生成马赛克
    kicad源代码研究:symbol properties窗口中为SCH_SYMBOL添加或删除一个sch_field
    关于JWT
    查找字符串中的子串-C版
    2023.11.15使用bootstrap做一个简洁的注册页面
    C++ Reference: Standard C++ Library reference: C Library: ctime
    分享 TiDB Dashboard 会话
    vue学习总结
    《动手学深度学习 Pytorch版》 4.4 模型选择、欠拟合和过拟合
  • 原文地址:https://blog.csdn.net/weixin_49198221/article/details/126347467