Control in ABAP-Liste

Ich habe vor kurzem ein altes Programm von mir wiedergefunden und gemerkt, dass ich noch gar nichts darüber geschrieben habe…

Am besten zeige ich, worum es geht:

Control in ABAP-Liste

Zu sehen ist eine mit WRITE erzeugte Liste in der zwei Controls (Picture-Control und SALV-Table) eingebunden sind.

Wie ist sowas möglich? Keine Ahnung, aber es geht. Was nicht geht: Bei AT LINE-SELECTION kann man zwar die Controls unsichtbar schalten, aber danach gibt es keine Möglichkeit mehr, sie beim Zurückspringen in die Grundliste wieder sichtbar zu machen.

Code

REPORT NO STANDARD PAGE HEADING.

DATA:
  go_cont_pic  TYPE REF TO cl_gui_custom_container,
  go_cont_alv  TYPE REF TO cl_gui_custom_container,
  go_pic       TYPE REF TO cl_gui_picture,
  gt_data      TYPE spfli_tab,
  go_alv       TYPE REF TO cl_salv_table.

AT LINE-SELECTION.
  go_cont_pic->set_visible( space ).
  go_cont_alv->set_visible( space ).
  WRITE: / 'Double click on a list line'.

START-OF-SELECTION.


  WRITE: /5 'WARNING', at 20 'Check your flights'.

  PERFORM pic.
  PERFORM grid.
  skip to line 9.
  WRITE 'additional text'.

FORM pic.
  CHECK go_cont_pic IS NOT BOUND.

  CREATE OBJECT go_cont_pic
    EXPORTING
      container_name = ''
      repid          = 'SAPMSSY0'
      dynnr          = '0120'.

  go_cont_pic->set_top( 10 ).
  go_cont_pic->set_left( 10 ).
  go_cont_pic->set_width( 100 ).
  go_cont_pic->set_height( 52 ).

  go_pic = new #( parent = go_cont_pic ).

  go_pic->load_picture_from_sap_icons( icon_warning ).
  go_pic->set_display_mode( go_pic->display_mode_stretch ).

ENDFORM.

FORM grid.
  CHECK go_cont_alv IS NOT BOUND.

  CREATE OBJECT go_cont_alv
    EXPORTING
      container_name = ''
      repid          = 'SAPMSSY0'
      dynnr          = '0120'.

  go_cont_alv->set_top( 10 ).
  go_cont_alv->set_left( 150 ).
  go_cont_alv->set_width( 800 ).
  go_cont_alv->set_height( 50 ).

  SELECT * FROM spfli INTO CORRESPONDING FIELDS OF TABLE gt_data UP TO 2 ROWS.

  TRY.
      cl_salv_table=>factory(
        EXPORTING
          r_container    = go_cont_alv
        IMPORTING
          r_salv_table   = go_alv
        CHANGING
          t_table        = gt_data
      ).
      go_alv->display( ).
    CATCH cx_salv_msg.    "

  ENDTRY.

ENDFORM.