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