我找到了想在线使用的树Salv的demo program,但是由于它使用740语法,因此我必须先对其进行转换。这也是学习更多有关新语法的好机会。

我已经做了几乎所有的事情,但是在VALUE上遇到了麻烦。阅读此wiki entry等内容对我无济于事。

740中的原始代码:

" Treenodes einfügen
LOOP AT it_spfli ASSIGNING FIELD-SYMBOL(<c>) GROUP BY <c>-carrid.

  DATA(it_cp) = VALUE ty_it_spfli( FOR <cp> IN GROUP <c> ( <cp> ) ).

  DATA(o_parent) = o_tree->get_nodes( )->add_node( related_node   = ''
                                                   relationship   = cl_gui_column_tree=>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 #( <c>-carrid ) ).

  IF lines( it_cp ) > 1.
    o_parent->get_item( 'CARRID' )->set_type( if_salv_c_item_type=>button ).
    o_parent->get_item( 'CARRID' )->set_value( 'all' ).
  ENDIF.

  LOOP AT GROUP <c> ASSIGNING FIELD-SYMBOL(<f>).
    DATA(o_carrid) = o_tree->get_nodes( )->add_node( related_node = o_parent->get_key( )
                                                     relationship = cl_gui_column_tree=>relat_last_child
                                                     data_row     = <f>
                                                     row_style    = if_salv_c_tree_style=>intensified
                                                     text         = CONV #( <f>-connid ) ).

    o_carrid->get_item( 'CARRID' )->set_type( if_salv_c_item_type=>checkbox ).
    o_carrid->get_item( 'CARRID' )->set_editable( abap_true ).
  ENDLOOP.
ENDLOOP.


700中的新代码,除了带有VALUE的行:

" new variables added to convert code to 700
DATA: o_nodes  TYPE REF TO cl_salv_nodes,
      o_parent TYPE REF TO cl_salv_node,
      o_carrid TYPE REF TO cl_salv_node,
      o_item   TYPE REF TO cl_salv_item,
      o_key    TYPE lvc_nkey.

DATA: h_collapsed_icon TYPE salv_de_tree_image VALUE 'icon_closed_folder',
      h_expanded_icon TYPE salv_de_tree_image VALUE 'icon_open_folder',
      h_text_carrid TYPE lvc_value.

DATA: it_cp TYPE STANDARD TABLE OF ty_it_spfli.

SORT it_spfli BY carrid.

" Treenodes einfügen
LOOP AT it_spfli ASSIGNING <c>.

  AT NEW carrid.

    it_cp = value TY_IT_SPFLI( for <CP> in GROUP <c> ( <CP> ) ).  <--- Here

    o_nodes = o_tree->get_nodes( ).

    h_text_carrid = <c>-carrid.

    o_parent = o_nodes->add_node( related_node   = ''
                                  relationship   = cl_gui_column_tree=>relat_last_child
                                  collapsed_icon = h_collapsed_icon
                                  expanded_icon  = h_expanded_icon
                                  row_style      = if_salv_c_tree_style=>intensified
                                  text           = h_text_carrid ).

    IF LINES( it_cp ) > 1.
      o_item = o_parent->get_item( 'CARRID' ).
      o_item->set_type( if_salv_c_item_type=>button ).
      o_item->set_value( 'all' ).
    ENDIF.

  ENDAT.

  o_key = o_parent->get_key( ).

  o_carrid = o_nodes->add_node( related_node = o_key
                                relationship = cl_gui_column_tree=>relat_last_child
                                data_row     = <c>
                                row_style    = if_salv_c_tree_style=>intensified
                                text         = h_text_carrid ).

  o_item = o_parent->get_item( 'CARRID' ).
  o_item->set_type( if_salv_c_item_type=>checkbox ).
  o_item->set_editable( abap_true ).

ENDLOOP.


我的问题是:


我是否通过使用LOOP AT ... GROUP BY正确转换了AT NEW
如何用VALUE转换行?


预先感谢您的帮助。

最佳答案

您无法像以前那样进行转换。按CARRID分组的原始代码的外循环与AT NEW完全不同,因为它会生成一个临时的组表,您可以在任何地方使用它。没有它,您应该提前生成组。

我没有验证代码,但是为了模拟GROUP BY,然后轻松进行其余的转换而不必重写太多,我将为原始的每个CARRID创建一个嵌套表:

DATA: BEGIN OF ls_spfli_carrid_group,
        carrid  TYPE carrid,
        flights TYPE ty_it_spfli,
      END OF ls_spfli_carrid_group,
      lt_spfli_carrid_group LIKE STANDARD TABLE OF ls_spfli_carrid_group.

SORT it_spfli BY carrid.
LOOP AT it_spfli INTO ls_spfli.
  AT NEW carrid.
    it_spfli
    ls_spfli_carrid_group-carrid = ls_spfli-carrid.
    REFRESH ls_spfli_carrid_group-flights.
    APPEND ls_spfli_carrid_group TO lt_spfli_carrid_group.
  ENDAT.
  APPEND ls_spfli TO ls_spfli_carrid_group-flights.
ENDLOOP.

LOOP AT lt_spfli_carrid_group INTO ls_spfli_carrid_group.
  it_cp = ls_spfli_carrid_group-flights.
  ...
  LOOP AT ls_spfli_carrid_group-flights INTO ls_flight. "Should be like the LOOP AT GROUP
  ENDLOOP.
ENDLOOP.

10-04 23:28
查看更多