ABAP-OOALV的实现例子
1 REPORT y4_b4_ooalv. 2 3 TYPES:BEGIN OF ty_data , 4 box(1) , 5 matnr TYPE mara-matnr, 6 mtart TYPE mara-mtart, 7 mbrsh TYPE mara-mbrsh, 8 matkl TYPE mara-matkl, 9 matnr1 TYPE mara-matnr, 10 maktx TYPE makt-maktx, 11 END OF ty_data . 12 13 DATA:gt_data TYPE TABLE OF ty_data . 14 15 *ALV相关变量 16 DATA:gs_alv TYPE REF TO cl_gui_alv_grid, "ALV类 17 gs_con TYPE REF TO cl_gui_custom_container, "容器类 18 g_dock TYPE REF TO cl_gui_docking_container, 19 gt_fieldcat TYPE lvc_t_fcat, "列格式 20 gs_fieldcat TYPE lvc_s_fcat, "列格式-结构 21 gs_stable TYPE lvc_s_stbl, "光标 22 gs_layout TYPE lvc_s_layo, "输出格式 23 gt_output TYPE STANDARD TABLE OF sflight, 24 ok_code TYPE sy-ucomm. 25 26 START-OF-SELECTION. 27 PERFORM frm_select. 28 29 END-OF-SELECTION. 30 CALL SCREEN 9000. 31 32 MODULE status_9000 OUTPUT. 33 34 SET PF-STATUS 'STATUS_9000'. 35 SET TITLEBAR 'TEXT01'. 36 37 ENDMODULE. 38 39 MODULE init OUTPUT. 40 41 IF gs_alv IS INITIAL. 42 PERFORM frm_create_alv. 43 "设置布局 44 PERFORM frm_set_layout. 45 "设置字段目录 46 PERFORM frm_set_fieldcat. 47 "ALV展示 48 PERFORM frm_alv_out. 49 ELSE. 50 PERFORM frm_refresh_alv. 51 ENDIF. 52 53 ENDMODULE. 54 55 MODULE user_command_9000 INPUT. 56 DATA(lv_code) = ok_code. 57 CLEAR ok_code. 58 CASE lv_code. 59 WHEN '&F03' OR '&F12' OR '&F15'. 60 LEAVE TO SCREEN 0. 61 WHEN 'SEARCH'. 62 PERFORM frm_select. 63 WHEN OTHERS. 64 ENDCASE. 65 ENDMODULE. 66 67 FORM frm_select . 68 69 SELECT matnr, 70 mtart, 71 mbrsh, 72 matkl 73 INTO CORRESPONDING FIELDS OF TABLE @gt_data 74 FROM mara . 75 76 ENDFORM . 77 78 FORM frm_set_fieldcat. 79 DATA: lv_name TYPE lvc_s_fcat-fieldname, 80 lv_scrtext TYPE lvc_s_fcat-scrtext_l. 81 82 REFRESH:gt_fieldcat. 83 PERFORM frm_build_fieldcat USING : 84 'BOX' 'X' '' '' '' '' '' '勾选' , 85 'MATNR' '' '' 'X' 'MARA' 'MATNR' '' '物料编码' , 86 'MTART' '' '' 'X' 'MARA' 'MATNR' '' '物料类型' , 87 'MATNR1' 'X' '' 'X' '' '' 'X' '物料1' , 88 'MAKTX' '' '' 'X' 'MARA' 'MATNR' '' '物料描述1' . 89 90 ENDFORM. 91 92 FORM frm_build_fieldcat USING pv_fieldname 93 pv_edit 94 pv_no_out 95 pv_no_zero 96 pv_ref_table 97 pv_ref_field 98 pv_f4 99 pv_reptext. 100 101 CLEAR gs_fieldcat. 102 gs_fieldcat-fieldname = pv_fieldname. 103 gs_fieldcat-edit = pv_edit. 104 gs_fieldcat-no_out = pv_no_out. 105 gs_fieldcat-no_zero = pv_no_zero. 106 gs_fieldcat-ref_table = pv_ref_table. 107 gs_fieldcat-ref_field = pv_ref_field. 108 gs_fieldcat-f4availabl = pv_f4. 109 gs_fieldcat-coltext = pv_reptext. 110 gs_fieldcat-reptext = pv_reptext. 111 gs_fieldcat-scrtext_l = pv_reptext. 112 gs_fieldcat-scrtext_m = pv_reptext. 113 gs_fieldcat-scrtext_s = pv_reptext. 114 115 APPEND gs_fieldcat TO gt_fieldcat. 116 117 ENDFORM. 118 119 FORM frm_set_layout . 120 gs_layout-zebra = 'X'. 121 gs_layout-cwidth_opt = 'X'. 122 ENDFORM. 123 124 FORM frm_refresh_alv. 125 126 gs_stable-row = 'X'. 127 gs_stable-col = 'X'. 128 129 CALL METHOD gs_alv->refresh_table_display 130 EXPORTING 131 is_stable = gs_stable. 132 133 ENDFORM. 134 135 FORM frm_alv_out. 136 137 DATA : gt_exclude TYPE ui_functions. 138 DATA : ls_exclude TYPE ui_func. 139 DATA : lv_save, 140 ls_variant TYPE disvariant. 141 lv_save = 'A'. 142 ls_exclude = cl_gui_alv_grid=>mc_fc_loc_insert_row . 143 APPEND ls_exclude TO gt_exclude. 144 ls_exclude = cl_gui_alv_grid=>mc_fc_loc_delete_row . 145 APPEND ls_exclude TO gt_exclude. 146 ls_exclude = cl_gui_alv_grid=>mc_fc_loc_append_row . 147 APPEND ls_exclude TO gt_exclude. 148 ls_exclude = cl_gui_alv_grid=>mc_fc_loc_copy_row . 149 APPEND ls_exclude TO gt_exclude. 150 CALL METHOD gs_alv->set_table_for_first_display 151 EXPORTING 152 * i_buffer_active = 153 * i_bypassing_buffer = 154 * i_consistency_check = 155 * i_structure_name = 156 is_variant = ls_variant 157 i_save = lv_save 158 * i_default = 'X' 159 is_layout = gs_layout 160 * is_print = 161 * it_special_groups = 162 it_toolbar_excluding = gt_exclude 163 * it_hyperlink = 164 * it_alv_graphics = 165 * it_except_qinfo = 166 * ir_salv_adapter = 167 CHANGING 168 it_outtab = gt_data 169 it_fieldcatalog = gt_fieldcat 170 * it_sort = 171 * it_filter = 172 EXCEPTIONS 173 invalid_parameter_combination = 1 174 program_error = 2 175 too_many_lines = 3 176 OTHERS = 4. 177 IF sy-subrc <> 0. 178 * Implement suitable error handling here 179 ENDIF. 180 181 ENDFORM. 182 183 FORM frm_create_alv. 184 185 "后台运行,没有GUI,会有错误。 186 "判断是否后台运行 187 IF cl_gui_alv_grid=>offline( ) IS INITIAL. 188 189 "前台运行 190 "创建容器 191 CREATE OBJECT gs_con 192 EXPORTING 193 container_name = 'GC_CON'. "customer control控件的名称 194 195 "将ALV植入到容器中 196 CREATE OBJECT gs_alv 197 EXPORTING 198 i_parent = gs_con. 199 ELSE . 200 201 "后台运行 202 CREATE OBJECT gs_alv EXPORTING i_parent = g_dock. 203 204 ENDIF . 205 206 ENDFORM .
9000屏幕的代码
1 PROCESS BEFORE OUTPUT. 2 MODULE status_9000. 3 MODULE init . 4 * 5 PROCESS AFTER INPUT. 6 MODULE user_command_9000.
屏幕
设置动态大小
隐藏ALV上方的按钮
设置 OK_CODE