SAP: 创建ALV GRID容器
SAP 创建ALV GRID容器
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 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 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 | *& ---------------------------------------------------------------------* *& Report Z15_12 *& 可执行程序 *& ---------------------------------------------------------------------* *& *& 创建 ALV GRID 容器 *& 注意每个程序都需要激活方可执行 *& ---------------------------------------------------------------------* REPORT Z15_12. DATA: CON1_REF TYPE REF TO CL_GUI_CUSTOM_CONTAINER. " 定义容器, 参照 自定义控件" 其中自定义控件命名为CON1 DATA: G_GRID TYPE REF TO CL_GUI_ALV_GRID. "定义ALV变量,参照 CL_GUI_ALV_GRID类" DATA: GS_VARIANT like DISVARIANT, "" 列表变量 gs_cs_variant like disvariant. DATA: GT_SFLIGHT TYPE TABLE OF SFLIGHT. " 要显示在屏幕上的内表 DATA: gs_layout type lvc_s_layo . DATA: gt_toolbar TYPE ui_functions . DATA: gt_sort TYPE lvc_t_sort. " 排序 PARAMETERS: p_var like disvariant-variant. " 参数变量 *& 设置GRID布局 PERFORM setting_layout CHANGING gs_layout . *& 根据用户显示或隐藏布局按钮 PERFORM setting_toolbar. *& 排序 PERFORM setting_sort. *& 显示检索帮助 AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_var. *& gs_variant-report = sy-repid. CALL FUNCTION 'REUSE_ALV_VARIANT_F4' EXPORTING IS_VARIANT = gs_variant * I_TABNAME_HEADER = * I_TABNAME_ITEM = * IT_DEFAULT_FIELDCAT = I_SAVE = 'A' * I_DISPLAY_VIA_GRID = ' ' IMPORTING * E_EXIT = ES_VARIANT = gs_variant EXCEPTIONS NOT_FOUND = 1 PROGRAM_ERROR = 2 OTHERS = 3. IF SY-SUBRC <> 0. * Implement suitable error handling here p_var = gs_variant-variant . ENDIF. FORM setting_layout CHANGING p_layout type lvc_s_layo. p_layout-cwidth_opt = 'X' . " 自动调节长度 p_layout-grid_title = 'get_current_cell Method TEST' . "标题栏" p_layout-sel_mode = 'D' . " 选择模式:可选择多行" p_layout-zebra = 'X' . "指定条纹(STRIPE)属性" ENDFORM. " setting_layout. *& 根据用户显示或隐藏布局按钮 FORM setting_toolbar. DATA : l_exclude TYPE UI_FUNC. l_exclude = cl_gui_alv_grid=>mc_fc_save_variant. APPEND l_exclude TO gt_toolbar. l_exclude = cl_gui_alv_grid=>mc_fc_maintain_variant. APPEND l_exclude TO gt_toolbar. ENDFORM. " SETTING_TOOLBAR *& 排序 子程序 FORM setting_sort. DATA: ls_sort TYPE lvc_s_sort. ls_sort-spos = '1' . " 排序顺序 ,整形数字 ls_sort-fieldname = 'CARRID'. " 排序字段名称 ls_sort-up = 'X' . " 升序 或 LS_SORT-DOWN = 'X' " 降序 ls_sort-subtot = 'X' . " 显示合计 APPEND ls_sort to gt_sort . ENDFORM. " setting_sort. CLASS lcl_event_receiver DEFINITION. PUBLIC SECTION . " 声明双击事件方法 METHODS: handle_double_click FOR EVENT DOUBLE_CLICK OF CL_GUI_ALV_GRID IMPORTING e_row e_column. ENDCLASS. CLASS lcl_event_receiver IMPLEMENTATION. METHOD handle_double_click. " 双击事件方法的实现 " LEAVE TO SCREEN 0 . ENDMETHOD. ENDCLASS. " LCL_event_receiver. DATA: event_receiver type ref to lcl_event_receiver . * CREATE OBJECT event_receiver. * 注册事件Handler方法 * SET HANDLER event_receiver->handle_double_click FOR g_grid . *& *& 查询数据,然后调用屏幕100. START- OF -SELECTION. SELECT * FROM SFLIGHT INTO TABLE GT_SFLIGHT UP TO 25 ROWS . CALL SCREEN 100. gs_variant-report = sy-repid. gs_variant-username = sy-uname. *& *& 创建 AVL控件 INCLUDE Z15_12_PBO. *INCLUDE Z15_11_PBO. * INCLUDE Z15_10_PBO. * MODULE user_command_0100 INPUT. DATA: l_row type i, l_value type c, l_col type i, ls_row type lvc_s_row, ls_col type lvc_s_col, ls_roid type lvc_s_roid. DATA: ls_scroll type lvc_s_stbl. ls_scroll-row = 'X' . ls_scroll-col = 'X' . *& 模式-> 选择:ABAP对象模式 ,(继续)-> 调用方法, 在接口栏=G_GRID, 类/接口栏= CL_GUI_ALV_GRID, 方法栏= get_current_cell CALL METHOD G_GRID->GET_CURRENT_CELL IMPORTING E_ROW = l_row E_VALUE = l_value E_COL = l_col ES_ROW_ID = ls_row ES_COL_ID = ls_col ES_ROW_NO = ls_roid. *& 重新查询已经显示在ALV的输出表时使用的方法。 CALL METHOD G_GRID->REFRESH_TABLE_DISPLAY EXPORTING IS_STABLE = ls_scroll I_SOFT_REFRESH = 'X' * EXCEPTIONS * FINISHED = 1 * others = 2 . IF SY-SUBRC <> 0. * Implement suitable error handling here ENDIF. ENDMODULE. " user_command_0100. |
2、 创建 PBO 子程序
命名为 Z15_12_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 | * ----------------------------------------------------------------------* ***INCLUDE Z15_12_PBO. * ----------------------------------------------------------------------* *& ---------------------------------------------------------------------* *& Module INIT_CON OUTPUT *& ---------------------------------------------------------------------* * text * ----------------------------------------------------------------------* MODULE INIT_CON OUTPUT . *& 1、创建容器对象 IF CON1_REF IS INITIAL. " 如果容器是空的,创建容器对象" CREATE OBJECT CON1_REF EXPORTING CONTAINER_NAME = 'CON1' . *& 2、创建 ALV GRID 控件 对象 CREATE OBJECT G_GRID EXPORTING I_PARENT = CON1_REF . * EXCEPTIONS * error_cnt1_create = 1 * error_cnt1_init = 2 * error_cnt1_link = 3 * error_dp_create = 4 * OTHERS = 5. * if sy-subrc <> 0. * MESSAGE ID sy-msgid TYPE sy-msgty number sy-msgno * with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 . * endif. ENDIF. " CON1_REF" CREATE OBJECT event_receiver. * 注册事件Handler方法 SET HANDLER event_receiver->handle_double_click FOR g_grid . *& *& 模式-> 选择:ABAP对象模式 ,(继续)-> 调用方法, 在接口栏=G_GRID, 类/接口栏= CL_GUI_ALV_GRID, 方法栏= SET_TABLE_FOR_FIRST_DISPLAY *& 3、 ALV GRID显示数据方法 CALL METHOD g_grid->set_table_for_first_display EXPORTING I_STRUCTURE_NAME = 'SFLIGHT' i_save = 'A' is_variant = gs_variant i_default = ' ' is_layout = gs_layout it_toolbar_excluding = gt_toolbar CHANGING It_OUTTAB = GT_SFLIGHT it_sort = gt_sort. ENDMODULE. " INIT_CON OUTPUT |
3、屏幕逻辑流程序
1 2 3 4 5 6 | PROCESS BEFORE OUTPUT . * MODULE STATUS_0100. MODULE init_con. * PROCESS AFTER INPUT. MODULE USER_COMMAND_0100. |
优质生活从拆开始
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了