【ABAP:如何在输入后不用敲回车,也能执行搜索】【转载】

这里用到了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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值