ABAP 简单容器分割 split

涉及类:
cl_gui_splitter_container
cl_gui_container

代码重点:
*1.  拆分界面
  CREATE OBJECT gs_split
    EXPORTING
      link_dynnr = sy-dynnr
      link_repid = sy-repid
      parent     = cl_gui_container=>screen0
      rows       = 1
      columns    = 3
      name       = 'GS_SPLIT'.

2.  "取得每个子屏的容器对象
  CALL METHOD gs_split->get_container
    EXPORTING
      row       = 1
      column    = 1
    RECEIVING
      container = gs_cont1.
3.容器与ALV关联
CREATE OBJECT gv_alv1
    EXPORTING
      i_parent = gs_cont1.

运行效果:

ABAP 简单容器分割 split


test代码如下:

ABAP 简单容器分割 split

 

REPORT  ztest_0003.
INCLUDE ZTEST_0003_TOP.
INCLUDE ZTEST_0003_CLASS.
INCLUDE ZTEST_0003_FRM.
INCLUDE ZTEST_0003_PBO.
INCLUDE ZTEST_0003_PAI.
END-OF-SELECTION.
  CALL SCREEN 9000.
 


INCLUDE ZTEST_0003_TOP
"分割容器
DATA gs_split TYPE REF TO cl_gui_splitter_container.
DATA gs_split2 TYPE REF TO cl_gui_splitter_container.
DATA gs_cont1 TYPE REF TO cl_gui_container.
DATA gs_cont2 TYPE REF TO cl_gui_container.
DATA gs_cont3 TYPE REF TO cl_gui_container.

DATA: gs_fieldcat  TYPE lvc_s_fcat,   "lvc_s_fcat
      gt_fieldcat1 TYPE lvc_t_fcat,   "清单观察器控制的字段目录Add By Code_Tool
      gt_fieldcat2 TYPE lvc_t_fcat,   "清单观察器控制的字段目录Add By Code_Tool
      gs_layout1   TYPE lvc_s_layo,   "ALV 控制: 布局结构Add By Code_Tool
      gs_layout2   TYPE lvc_s_layo.   "ALV 控制: 布局结构Add By Code_Tool

DATA:gv_alv1       TYPE REF TO  cl_gui_alv_grid,
     gv_alv2       TYPE REF TO cl_gui_alv_grid,
     gv_container1 TYPE REF TO cl_gui_custom_container,
     gv_container2 TYPE REF TO cl_gui_custom_container,
     gt_exclude1   TYPE ui_functions,
     gt_exclude2   TYPE ui_functions,
     gt_fcode      TYPE TABLE OF sy-ucomm. "排除

TYPES: BEGIN OF gty_data,
         num(5),
         num_ms1(10),
         num_ms2(10),
         num_ms3(10),
       END OF gty_data.

DATA : gt_data1 TYPE TABLE OF gty_data WITH HEADER LINE,
       gt_data2 TYPE TABLE OF gty_data WITH HEADER LINE.
DATA:lv_num_1(5) VALUE 10000,
     lv_num_2(5) VALUE 20000.

DO 200 TIMES.
  ADD 1 TO lv_num_1.
  gt_data1-num = lv_num_1.
  gt_data1-num_ms1 = lv_num_1 && '_ms1'.
  gt_data1-num_ms2 = lv_num_1 && '_ms2'.
  gt_data1-num_ms3 = lv_num_1 && '_ms4'.
  APPEND gt_data1.
  CLEAR gt_data1.

  ADD 1 TO lv_num_2.
  gt_data2-num = lv_num_2.
  gt_data2-num_ms1 = lv_num_2 && '_ms1'.
  gt_data2-num_ms2 = lv_num_2 && '_ms2'.
  gt_data2-num_ms3 = lv_num_2 && '_ms4'.
  APPEND gt_data2.
  CLEAR gt_data2.

ENDDO.
 
 
INCLUDE ZTEST_0003_CLASS.
*&---------------------------------------------------------------------*
*& CLASS LCL_EVENT_RECEIVER DEFINITION
*&---------------------------------------------------------------------*
CLASS lcl_event_receiver DEFINITION.
  PUBLIC SECTION.
    CLASS-METHODS hotspot_click FOR EVENT hotspot_click OF cl_gui_alv_grid
      IMPORTING e_row_id
                  e_column_id
                  es_row_no sender.
    CLASS-METHODS handle_user_command FOR EVENT user_command OF cl_gui_alv_grid
      IMPORTING e_ucomm sender.
    CLASS-METHODS handle_double_click FOR EVENT double_click OF cl_gui_alv_grid
      IMPORTING e_row e_column es_row_no sender.
    CLASS-METHODS handle_toolbar FOR EVENT toolbar OF cl_gui_alv_grid
      IMPORTING e_object e_interactive.
    CLASS-METHODS handle_modify FOR EVENT data_changed OF cl_gui_alv_grid
      IMPORTING er_data_changed.

ENDCLASS.                    "LCL_EVENT_RECEIVER DEFINITION
*&---------------------------------------------------------------------*
*& CLASS LCL_EVENT_RECEIVER DEFINITION
*&---------------------------------------------------------------------*
CLASS lcl_event_receiver IMPLEMENTATION.
  METHOD hotspot_click.

  ENDMETHOD.

  METHOD handle_user_command.

  ENDMETHOD.
  METHOD handle_double_click.

  ENDMETHOD.
  METHOD handle_toolbar.

  ENDMETHOD.
  METHOD handle_modify."修改数据

  ENDMETHOD.
ENDCLASS.                    "LCL_EVENT_RECEIVER IMPLEMENTATION
 
 
INCLUDE ZTEST_0003_FRM.
*&---------------------------------------------------------------------*
*& Form FRM_SPLIT_SCREEN
*&---------------------------------------------------------------------*
*& 拆分屏幕
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_split_screen .
*  拆分界面
  CREATE OBJECT gs_split
    EXPORTING
      link_dynnr = sy-dynnr
      link_repid = sy-repid
      parent     = cl_gui_container=>screen0
      rows       = 1
      columns    = 3
      name       = 'GS_SPLIT'.

*  CALL METHOD gs_split->set_border
*    EXPORTING
*      border = cl_gui_cfw=>false.
*  CALL METHOD gs_split->set_row_height
*    EXPORTING
*      id     = 1
*      height = 60.
*  CALL METHOD gs_split->set_visible
*    EXPORTING
*      visible = 'X'.


  "取得每个子屏的容器对象
  CALL METHOD gs_split->get_container
    EXPORTING
      row       = 1
      column    = 1
    RECEIVING
      container = gs_cont1.


  CALL METHOD gs_split->get_container
    EXPORTING
      row       = 1
      column    = 2
    RECEIVING
      container = gs_cont2.

  CREATE OBJECT gs_split2
    EXPORTING
      link_dynnr = sy-dynnr
      link_repid = sy-repid
      parent     = gs_cont2
      rows       = 3
      columns    = 3
      name       = 'GS_SPLIT'.
  CALL METHOD gs_split2->get_container
    EXPORTING
      row       = 2
      column    = 2
    RECEIVING
      container = gs_cont3.

ENDFORM.

*&---------------------------------------------------------------------*
*& Form FRM_SCREEN_ALV
*&---------------------------------------------------------------------*
*& 将屏幕和alv进行关联
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_screen_alv .
  "创建ALV网格对象
  CREATE OBJECT gv_alv1
    EXPORTING
      i_parent = gs_cont1.

*  CREATE OBJECT gv_alv2
*    EXPORTING
*      i_parent = gs_cont2.
  CREATE OBJECT gv_alv2
    EXPORTING
      i_parent = gs_cont3.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_SHOW_FIRST_ALV
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_show_first_alv .
  PERFORM frm_set_fieldcat TABLES gt_fieldcat1.
  CALL METHOD gv_alv1->set_table_for_first_display
    EXPORTING
      i_save               = 'A'
      i_default            = 'X'
      is_layout            = gs_layout1
      it_toolbar_excluding = gt_exclude1
    CHANGING
      it_outtab            = gt_data1[]
      it_fieldcatalog      = gt_fieldcat1[].

  SET HANDLER lcl_event_receiver=>handle_user_command FOR gv_alv1.
  SET HANDLER lcl_event_receiver=>handle_toolbar      FOR gv_alv1.
  SET HANDLER lcl_event_receiver=>handle_double_click FOR gv_alv1.
  SET HANDLER lcl_event_receiver=>hotspot_click       FOR gv_alv1.
  CALL METHOD gv_alv1->set_toolbar_interactive.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_SHOW_SECOND_ALV
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_show_second_alv .
  PERFORM frm_set_fieldcat TABLES gt_fieldcat2.
  CALL METHOD gv_alv2->set_table_for_first_display
    EXPORTING
      i_save               = 'A'
      i_default            = 'X'
      is_layout            = gs_layout2
      it_toolbar_excluding = gt_exclude2[]
    CHANGING
      it_outtab            = gt_data2[]
      it_fieldcatalog      = gt_fieldcat2[].

  SET HANDLER lcl_event_receiver=>hotspot_click FOR gv_alv2.
  SET HANDLER lcl_event_receiver=>handle_modify FOR gv_alv2.

* 设置enter事件
  CALL METHOD gv_alv2->register_edit_event
    EXPORTING
      i_event_id = cl_gui_alv_grid=>mc_evt_enter
    EXCEPTIONS
      error      = 1
      OTHERS     = 2.
  CALL METHOD gv_alv2->set_toolbar_interactive.
  CALL METHOD cl_gui_control=>set_focus
    EXPORTING
      control = gv_alv2.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_SET_FIELDCAT
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*&      --> GT_FIELDCAT2
*&---------------------------------------------------------------------*
FORM frm_set_fieldcat  TABLES   pt_fieldcat TYPE lvc_t_fcat.
  REFRESH pt_fieldcat.

  DEFINE %%fieldcat.
    gs_fieldcat-fieldname   = &1.
    gs_fieldcat-scrtext_s   = &2.
    gs_fieldcat-scrtext_m   = &2.
    gs_fieldcat-scrtext_l   = &2.
    gs_fieldcat-seltext     = &2.
    APPEND gs_fieldcat TO pt_fieldcat.
    CLEAR gs_fieldcat.
  END-OF-DEFINITION.

  %%fieldcat :
  'NUM'     'NUM' ,
  'NUM_MS1' 'NUM_MS1',
  'NUM_MS2' 'NUM_MS2',
  'NUM_MS3' 'NUM_MS3'.
ENDFORM.
 
 
INCLUDE ZTEST_0003_PBO.
 
*&---------------------------------------------------------------------*
*& Module STATUS_9000 OUTPUT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
MODULE status_9000 OUTPUT.
  SET PF-STATUS 'GUI9000'.
  SET TITLEBAR 'TITLE9000'.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module INITIAL_ALV OUTPUT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
MODULE initial_alv OUTPUT.
  CHECK gv_alv1 IS INITIAL.

*  1.划分屏幕
  PERFORM frm_split_screen.

*2.将屏幕和alv关联
  PERFORM frm_screen_alv.

*3.屏幕展示数据
  PERFORM frm_show_first_alv.
  PERFORM frm_show_second_alv.
ENDMODULE.
 
INCLUDE ZTEST_0003_PAI.
*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_9000  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE user_command_9000 INPUT.

ENDMODULE.
*&---------------------------------------------------------------------*
*&      Module  MODULE_EXIT  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE module_exit INPUT.
  LEAVE PROGRAM.
ENDMODULE.