如何隐藏SALV表格?嵌套容器绑定SALV不显示问题求助
问题:嵌套容器中SALV表格绑定叶子容器时不可见
我需要实现多个SALV表格的切换显示,同一时间仅展示一个。方案是将每个SALV绑定到公共父容器下的独立叶子容器,通过调用容器的set_visible(abap_false)方法隐藏未选中的容器。
容器层级结构如下:
CL_GUI_CUSTOM_CONTAINER <-- 屏幕绘制的自定义容器'CC1000' |-CL_GUI_SPLITTER_CONTAINER <-- 拆分容器 |-CL_GUI_SIMPLE_CONTAINER <-- 左侧容器 |-CL_GUI_SIMPLE_CONTAINER <-- 右侧容器 |-CL_GUI_SIMPLE_CONTAINER <-- 叶子容器
实际测试发现:当SALV表格绑定到叶子容器时完全不可见,但直接绑定到右侧容器(叶子容器的父容器)时就能正常显示。
我的设计逻辑是:右侧容器始终可见,多个叶子容器作为它的子容器,同一时间仅显示一个叶子容器,每个叶子容器绑定不同的SALV表格,用户通过左侧视图列表触发切换。
SAP官方文档提到:
由于容器本身就是控件,因此可以嵌套它们。
最小复现代码
创建屏幕1000,并在其中添加名为'CC1000'的自定义容器。以下代码中,若将lo_salv_table绑定到leaf_container,SALV不可见;绑定到right_container则可见。
REPORT ztest. class lcl_report definition final. public section. class-methods: class_constructor, display. protected section. CLASS-DATA: gt_sflight type table of sflight. private section. endclass. CLASS lcl_report IMPLEMENTATION. method display. TYPES: begin of ty_s_view, name type FPB_OBJECT, view type ref to cl_gui_container, end of ty_s_view, ty_t_views type standard table of ty_s_view with key name. DATA: lo_column_table type ref to cl_salv_column_table, lo_salv_viewlist type ref to cl_salv_table, lo_salv_table type ref to cl_salv_table, lt_views type ty_t_views. data(lo_custom_container) = new cl_gui_custom_container( container_name = 'CC1000' ). data(lo_splitter_container) = new cl_gui_splitter_container( parent = lo_custom_container rows = 1 columns = 2 ). lo_splitter_container->set_column_width( EXPORTING id = 1 width = 15 ). data(left_container) = lo_splitter_container->get_container( row = 1 column = 1 ). data(right_container) = lo_splitter_container->get_container( row = 1 column = 2 ). data(leaf_container) = new cl_gui_simple_container( parent = right_container ). lt_views = value #( ( name = 'View 1' view = leaf_container ) ). cl_salv_table=>factory( EXPORTING r_container = left_container IMPORTING r_salv_table = lo_salv_viewlist CHANGING t_table = lt_views ). lo_salv_viewlist->get_functions( )->set_all( abap_false ). cast cl_salv_columns_table( lo_salv_viewlist->get_columns( ) )->set_optimize( ). lo_column_table ?= cast cl_salv_columns_table( lo_salv_viewlist->get_columns( ) )->get_column( columnname = 'NAME' ). lo_column_table->set_cell_type( value = if_salv_c_cell_type=>hotspot ). lo_salv_viewlist->get_display_settings( )->set_striped_pattern( value = abap_true ). cl_salv_table=>factory( EXPORTING r_container = leaf_container IMPORTING r_salv_table = lo_salv_table CHANGING t_table = gt_sflight ). lo_salv_viewlist->display( ). lo_salv_table->display( ). endmethod. METHOD class_constructor. SELECT * FROM SFLIGHT INTO TABLE gt_sflight. ENDMETHOD. endclass. MODULE status_1000 OUTPUT. * SET PF-STATUS 'xxxxxxxx'. * SET TITLEBAR 'xxx'. lcl_report=>display( ). ENDMODULE. START-OF-SELECTION. CALL SCREEN 1000.
内容的提问来源于stack exchange,提问作者Cutter
相关产品推荐
相关产品推荐

