You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何隐藏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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 08:13:12