前言
今天休息日,因为下雨在家也很无聊,突然想到了以前的一个需求就是报表展示多个ALV,当初我的解决办法就是画固定的控件来进行展示这些存放不同数据的ALV,今天通过网上各位大顾的博客来研究了一下ABAP 分屏 控件拆分,展示可调节的ALV,分享给大家,也算是自己的一个小笔记,如有什么问题,希望指出,虚心纠正!
一、实现步骤
1.相关定义
代码如下(示例):
*&---------------------------------------------------------------------*
* DEFIEN DATA
*&---------------------------------------------------------------------*
DATA:go_docking01 TYPE REF TO cl_gui_docking_container, " 动态自适应
go_container01 TYPE REF TO cl_gui_container, " 容器1
go_container02 TYPE REF TO cl_gui_container, " 容器2
go_container03 TYPE REF TO cl_gui_container, " 容器3
go_container04 TYPE REF TO cl_gui_container, " 容器4
go_splitter TYPE REF TO cl_gui_splitter_container, " 拆分用1
go_splitter2 TYPE REF TO cl_gui_splitter_container, " 拆分用1
go_grid01 TYPE REF TO cl_gui_alv_grid,
go_grid02 TYPE REF TO cl_gui_alv_grid,
go_grid03 TYPE REF TO cl_gui_alv_grid.
2.容器创建、控件拆分
代码如下(示例):
* 实例化分屏对象,放置于docking_container
CREATE OBJECT go_docking01
EXPORTING
repid = sy-repid
dynnr = '9000'
extension = 2050
side = cl_gui_docking_container=>dock_at_bottom.
* 把屏幕分割成一行两列
CREATE OBJECT go_splitter
EXPORTING
link_dynnr = sy-dynnr
link_repid = sy-repid
parent = go_docking01
rows = 1 " 1行
columns = 2 " 2列
EXCEPTIONS
OTHERS = 1.
IF sy-subrc <> 0.
MESSAGE e000(tree_control_msg).
ENDIF.
*对分好的两个container分配对应的容器
* 控件分配到容器
*--------LEFT SIDE----------------------------------------------------*
CALL METHOD go_splitter->set_column_width
EXPORTING
id = 1
width = 40. " 控件宽度
CALL METHOD go_splitter->get_container
EXPORTING
row = 1
column = 1
RECEIVING
container = go_container01.
*--------RIGHT SIDE ----------------------------------------------------*
CALL METHOD go_splitter->set_column_width
EXPORTING
id = 2
width = 60. " 控件宽度
CALL METHOD go_splitter->get_container
EXPORTING
row = 1
column = 2
RECEIVING
container = go_container02.
* 将第一行第二例的容器go_container2,分成两行一列
CREATE OBJECT go_splitter2
EXPORTING
link_dynnr = sy-dynnr
link_repid = sy-repid
parent = go_container02
rows = 2
columns = 1.
* 为分好的两个容器,分配container
CALL METHOD go_splitter2->get_container
EXPORTING
row = 1
column = 1
RECEIVING
container = go_container03.
CALL METHOD go_splitter2->get_container
EXPORTING
row = 2
column = 1
RECEIVING
container = go_container04.
二、效果展示
如下:
总结
无非是我们用cl_gui_docking_container产生一个动态的容器,然后把一个容器拆分成多个屏幕,分别再进行数据展示。