SAP:SALV刷新按钮事件
SAP SALV刷新事件
1、主程序
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 | *& ---------------------------------------------------------------------* *& Report Z17_04 *& *& ---------------------------------------------------------------------* *& 全屏Classic List模式 *& LIST_DISPLAY : 用SALV显示与传统式REUSE_ALV_LIST_DISPLAY函数输出ALV *& 一样效果的报表。 *& 36、 USER -COMMAND事件是追加在TOOLBAR事件中追加的图标功能的事件。追加当 *& 单击REFRESS按钮时从表SFLIGHT中取得10件数据的逻辑。 *& 问题: 没有搞懂类的定义、实现与子程序之间的顺序 。 *& ---------------------------------------------------------------------* REPORT Z17_36. DATA: gt_itab type table of sflight. DATA: gr_table TYPE REF TO CL_SALV_TABLE. DATA: gr_function type ref to cl_salv_functions_list. " 应用工具栏 DATA: gr_container type ref to cl_gui_custom_container. DATA: OK_CODE type syucomm. SELECT * FROM SFLIGHT INTO CORRESPONDING FIELDS OF TABLE gt_itab up to 25 rows. *& #REGION: 用 屏幕100代替 *cl_salv_table=>factory( * EXPORTING * list_display = abap_true * IMPORTING * r_salv_table = gr_table * CHANGING * t_table = gt_itab * ). *& #region: 应用工具栏 *gr_function = gr_table->get_functions( ). *gr_function->set_default( ). *gr_function->set_all( abap_true ). *& #endregion: 应用工具栏 * *gr_table->display( ). *& #ENDREGION: 用 屏幕100代替 *& 调用自定义的屏幕100 CALL SCREEN 0100. *&---------------------------------------------------------------------* *& CLASS lcl_handle_events DEFINTION *&---------------------------------------------------------------------* CLASS lcl_handle_events DEFINITION. PUBLIC SECTION. methods: on_user_command FOR EVENT added_function of cl_salv_events IMPORTING e_salv_function. ENDCLASS. " lcl_handle_events DEFINITION *& ---------------------------------------------------------------------* *& CLASS lcl_handle_event IMPLEMENTATION *& ---------------------------------------------------------------------* CLASS lcl_handle_events IMPLEMENTATION. METHOD on_user_command. PERFORM handle_user_command USING e_salv_function. ENDMETHOD. " on_user_command ENDCLASS. " lcl_handle_events IMPLEMENTATION DATA: gr_event type ref to lcl_handle_events. data: lr_event TYPE REF TO cl_salv_events_table. " 定义事件变量 *& 屏幕输出后事件 子程序 INCLUDE Z17_36_PBO. *INCLUDE Z17_35_PBO. *INCLUDE z17_04_pbo. *& 屏幕的输入前事件 子程序 INCLUDE Z17_36_PAI. *INCLUDE Z17_35_PAI. *INCLUDE z17_04_pai. *&---------------------------------------------------------------------* *& FORM handle_user_command *&---------------------------------------------------------------------* *& *&---------------------------------------------------------------------* FORM handle_user_command USING p_function type salv_de_function. CASE p_function . when 'REFRESH'. perform refresh. WHEN OTHERS. ENDCASE. ENDFORM. " handle__user_command. *& ---------------------------------------------------------------------* *& FORM REFRESH 刷新事件 *& ---------------------------------------------------------------------* *& *& ---------------------------------------------------------------------* FORM Refresh. SELECT * FROM SFLIGHT INTO CORRESPONDING FIELDS OF TABLE gt_itab UP TO 10 rows . gr_table->refresh( ). ENDFORM. " REFRESH FORM. |
2、屏幕逻辑流
1 2 3 4 5 6 7 | PROCESS BEFORE OUTPUT . * MODULE STATUS_0100. MODULE 0100_PBO. * PROCESS AFTER INPUT. * MODULE USER_COMMAND_0100. MODULE 0100_PAI. |
3、 PAI 子程序
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | * ----------------------------------------------------------------------* ***INCLUDE Z17_36_PAI. * ----------------------------------------------------------------------* *& ---------------------------------------------------------------------* *& Module 0100_PAI INPUT *& ---------------------------------------------------------------------* * text * ----------------------------------------------------------------------* MODULE 0100_PAI INPUT. CASE OK_CODE. WHEN 'BACK' OR 'EXIT' OR 'CANC' . SET SCREEN 0. LEAVE SCREEN. ENDCASE. ENDMODULE. " 0100_PAI INPUT |
4、 PBO子程序
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 | * ----------------------------------------------------------------------* ***INCLUDE Z17_36_PBO. * ----------------------------------------------------------------------* *& ---------------------------------------------------------------------* *& Module 0100_PBO OUTPUT *& ---------------------------------------------------------------------* * text * ----------------------------------------------------------------------* MODULE 0100_PBO OUTPUT . SET PF-STATUS '0100' . IF gr_container is not bound. *& 1. Create Container CREATE OBJECT gr_container exporting container_name = 'CONTAINER' . *& 2. CREATE ALV cl_salv_table=>factory( exporting r_container = gr_container container_name = 'CONTAINER' IMPORTING r_salv_table = gr_table CHANGING t_table = gt_itab ). *& 3. SET ALV BUTTON gr_function = gr_table->get_functions( ). gr_function->set_all( abap_true ). " 追加ALV所有功能 *& 3.1 *& #region: 追加刷新按钮 INCLUDE <icon>. DATA: l_icon TYPE string . l_icon = icon_refresh. gr_function->add_function( name = 'REFRESH' icon = l_icon text = 'REFRESH' tooltip = 'REFRESH' position = if_salv_c_function_position=>right_of_salv_functions ). *& *& #endregion: 追加刷新按钮 *& 3.2 *& #REGION: 注册事件 lr_event = gr_table->get_event( ). Create object gr_event . SET HANDLER gr_event->on_user_command for lr_event . *& #ENDREGION: 注册事件 *& 4. Call alv gr_table->display( ). ENDIF. ENDMODULE. " 0100_PBO OUTPUT |
效果图:
优质生活从拆开始
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了