ABAP SPLITTER技术总结及使用技巧
ABAP SPLITTER技术总结及使用技巧
SPLITTER的两种实现方式:
1.切割CONTAINER方式
使用时需引用cl_gui_splitter_container类
DATA lo_container TYPE REF TO cl_gui_splitter_container.
DATA lo_left TYPE REF TO cl_gui_custom_container.
实例化container后再以此实例化SPLITTER CONTORL
CREATE OBJECT lo_left “实例化container
EXPORTING
container_name = 'LEFT_CON'. “画好的container名称
CREATE OBJECT lo_container “实例化SPLITTER CONTORL
EXPORTING
parent = lo_left
rows = 2
columns = 1.
这里的行/列代表把container 切割成几行几列,上面这个例子就是将container切割成了两行一列的上下两个部分
之后就可以用来实例化你所需要的窗口类控件了,比如alv_grid或TREE CONTORL
*建立树对象
CREATE OBJECT lo_tree
EXPORTING
parent = lo_container->get_container( row = 1 column = 1 )
node_selection_mode = cl_gui_simple_tree=>node_sel_mode_single.
将container的第一行第一列分配给树对象
*建立ALV对象
CREATE OBJECT lo_alv
EXPORTING
i_parent = lo_container->get_container( row = 2 column = 1 ).
将container的第二行第一列分配给ALV对象
效果如下:
这种方法较为简单,效果也很明显,缺点是无法使用画屏的方式来生成想要的控件,而且分块是偶数个,一旦超过两块整个报表就会显得很杂乱,该方法适合用来直接生成窗口类控件
2.切割SCREEN方式
使用时需引用cl_dynpro_splitter类
DATA splitter TYPE REF TO cl_dynpro_splitter.
START-OF-SELECTION.
CREATE OBJECT splitter
EXPORTING
splitter_name = 'SPLITTER'.
CALL SCREEN 100.
MODULE set_status OUTPUT.
SET PF-STATUS 'SCREEN_100'.
ENDMODULE.
MODULE set_sash OUTPUT.
splitter->set_sash( ).
ENDMODULE.
MODULE cancel.
LEAVE PROGRAM.
ENDMODULE.
MODULE get_sash INPUT.
splitter->get_guisash( ).
ENDMODULE.
在我看来这是种比较玄学的方式,我只是在SAP中找到了一个名为DEMO_DYNPRO_SPLITTER_CONTROL的DEMO程序,然而我并不知道如何直接在屏幕上画出splitter来,每次使用时需要先复制这个程序再做修改
进入屏幕绘制器后画风是这个样子滴
splitter两边各分配了一块子屏幕,只能编辑大小无法添加其他屏幕控件,然而我用了一种比较挫的方法勉强添加了一些屏幕控件,
方法就是先将屏幕下载,对其文本编辑后再上载回程序
我尝试着在上面添加了一小块子屏幕做为顶端
屏幕变成了这样
我已经尽力了
这种splitter方式的强大之处就是你可以在子屏幕上做普通画屏能做的任何事,完全可以在其中一块子屏幕上再调用第一种SPLITTER方式: