这里用到了CL_GUI_INPUT_FIELD。
【其实系统里还有一些其他OO的对象,比如:
CL_GUI_DIALOGBOX_CONTAINER
CL_GUI_TOOLBAR
CL_GUI_PICTURE
CL_GUI_CHART_ENGINE
CL_GUI_COMBOBOX】
上面的很多OO对象,系统也有DEMO。
比如CL_GUI_INPUT_FIELD,系统就有提供相应的DEMO:SAP_LISTBOX_DEMO_AUTO_SUBMIT
系统的DEMO比较复杂,我这里做了更个简单的DEMO。
效果如下:
REPORT ztest.
SELECTION-SCREEN BEGIN OF SCREEN 2000.
SELECTION-SCREEN END OF SCREEN 2000.
DATA: go_docking_container TYPE REF TO cl_gui_docking_container,
go_splitter TYPE REF TO cl_gui_splitter_container,
go_input_con TYPE REF TO cl_gui_container,
go_alv_con TYPE REF TO cl_gui_container,
go_input TYPE REF TO cl_gui_input_field,
go_alv TYPE REF TO cl_gui_alv_grid.
DATA: gt_data TYPE TABLE OF makt,
gt_alv TYPE TABLE OF makt.
CLASS lcl_handle_input_field DEFINITION.
PUBLIC SECTION.
METHODS handle_submit FOR EVENT submit OF cl_gui_input_field IMPORTING input.
ENDCLASS.
CLASS lcl_handle_input_field IMPLEMENTATION.
METHOD handle_submit.
PERFORM handle_submit USING input.
ENDMETHOD.
ENDCLASS.
DATA: go_handle_input_field TYPE REF TO lcl_handle_input_field.
AT SELECTION-SCREEN OUTPUT.
CHECK sy-dynnr = '2000'.
PERFORM get_data.
PERFORM init_object.
START-OF-SELECTION.
CALL SELECTION-SCREEN 2000.
FORM get_data.
APPEND VALUE #( matnr = 'MAT001' maktx = '钢板' ) TO gt_data.
APPEND VALUE #( matnr = 'MAT002' maktx = '钢锭' ) TO gt_data.
APPEND VALUE #( matnr = 'MAT003' maktx = '铁锭' ) TO gt_data.
gt_alv = gt_data.
ENDFORM.
FORM init_object.
DATA: lt_fcat TYPE lvc_t_fcat.
CHECK go_docking_container IS INITIAL.
"创建DOCKING容器
CREATE OBJECT go_docking_container
EXPORTING
extension = 9999
side = cl_gui_docking_container=>dock_at_top.
"容器拆分为上下两部分。上:INPUT输入框;下:ALV
CREATE OBJECT go_splitter
EXPORTING
parent = go_docking_container
rows = 2
columns = 1.
go_splitter->set_row_sash( id = 1
type = cl_gui_splitter_container=>type_movable
value = cl_gui_splitter_container=>false ).
go_splitter->set_row_sash( id = 1
type = cl_gui_splitter_container=>type_sashvisible
value = cl_gui_splitter_container=>false ).
go_splitter->set_row_mode( mode = cl_gui_splitter_container=>mode_absolute ).
go_splitter->set_row_height( id = 1
height = 30 ).
"创建INPUT FIELD
go_input_con = go_splitter->get_container( row = 1 column = 1 ).
CREATE OBJECT go_input
EXPORTING
parent = go_input_con
activate_history = 'X'
activate_find_button = 'X'
button_icon_info = icon_search
button_tooltip_info = 'Search'
activate_auto_submit = 'X'.
CREATE OBJECT go_handle_input_field.
SET HANDLER go_handle_input_field->handle_submit FOR go_input.
"创建ALV
go_alv_con = go_splitter->get_container( row = 2 column = 1 ).
CREATE OBJECT go_alv
EXPORTING
i_parent = go_alv_con.
APPEND VALUE #( fieldname = 'MATNR' coltext = '物料号' ) TO lt_fcat.
APPEND VALUE #( fieldname = 'MAKTX' coltext = '物料描述' ) TO lt_fcat.
go_alv->set_table_for_first_display(
CHANGING
it_outtab = gt_alv
it_fieldcatalog = lt_fcat
EXCEPTIONS
invalid_parameter_combination = 1
program_error = 2
too_many_lines = 3
OTHERS = 4 ).
ENDFORM.
FORM handle_submit USING iv_input.
gt_alv = gt_data.
DELETE gt_alv WHERE maktx NS iv_input.
go_alv->refresh_table_display( ).
ENDFORM.
原文转载:https://mp.weixin.qq.com/s/BZrN-s4DIzC0bdrD4-GXkw