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

使用cl_salv_tree无法展开根父节点的技术问题

解决ALV Tree父节点无法展开的问题

问题原因

你的代码存在两个关键问题导致父节点无法正常展开:

  1. 节点关系常量误用:调用add_node时使用了cl_gui_column_tree=>relat_last_child,但cl_salv_tree需要使用自身类库的常量cl_salv_node=>relat_last_child,错误的常量会导致节点层级关系未被正确识别。
  2. 变量类型不匹配:lv_bebertext定义为结构类型t357,直接赋值字符串存在类型转换风险,可能影响节点创建逻辑。

修正后的代码

以下是调整后的完整代码,修复了上述问题:

REPORT z_salv_tree_expand.

TYPES: BEGIN OF ty_kennzahlen,
         beber TYPE t357-beber,
         fing  TYPE t357-fing,
       END OF ty_kennzahlen.

DATA: go_tree       TYPE REF TO cl_salv_tree,
      gr_node       TYPE REF TO cl_salv_node,
      gr_nodes      TYPE REF TO cl_salv_nodes,
      gr_main_key   TYPE lvc_nkey,
      gt_kennzahlen TYPE STANDARD TABLE OF ty_kennzahlen,
      lv_bebertext  TYPE string.

PARAMETERS dummy.

AT SELECTION-SCREEN OUTPUT.
  IF go_tree IS NOT BOUND.
    CALL METHOD cl_salv_tree=>factory
      EXPORTING
        r_container = cl_gui_container=>screen0
      IMPORTING
        r_salv_tree = go_tree
      CHANGING
        t_table     = gt_kennzahlen.

    gr_nodes = go_tree->get_nodes(  ).

    " 添加父节点,使用cl_salv_tree专属的关系常量
    gr_node = gr_nodes->add_node(
             related_node   = ''
             relationship   = cl_salv_node=>relat_last_child
             collapsed_icon = CONV #( icon_closed_folder )
             expanded_icon  = CONV #( icon_open_folder )
             row_style      = if_salv_c_tree_style=>intensified
             text           = CONV #( 'Gesamt'(012) ) ).
    gr_main_key = gr_node->get_key( ).

    " 添加子节点,保持常量一致性
    DATA(lt_kennzahlen) = VALUE string_table( ( `Child 1` ) ( `Child 2` ) ).
    LOOP AT lt_kennzahlen INTO lv_bebertext.
      gr_node = gr_nodes->add_node(
          related_node   = gr_main_key
          relationship   = cl_salv_node=>relat_last_child
          collapsed_icon = CONV #( icon_closed_folder )
          expanded_icon  = CONV #( icon_open_folder )
          row_style      = if_salv_c_tree_style=>intensified
          text           = CONV #( lv_bebertext ) ).
    ENDLOOP.

    " 展开父节点及所有子节点
    gr_node = gr_nodes->get_node( node_key = gr_main_key ).
    gr_node->expand( EXPORTING complete_subtree = abap_true ).

    go_tree->get_tree_settings( )->set_hierarchy_size( 50 ).
    go_tree->display( ).
  ENDIF.

核心修改说明

  • 替换节点关系常量为cl_salv_node=>relat_last_child,确保ALV Tree能正确识别父子节点层级。
  • 将lv_bebertext类型改为string,避免结构类型赋值字符串的潜在问题。

内容的提问来源于stack exchange,提问作者SBECK1

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 09:20:26