ALV-Listen im CL_SALV_TABLE – Teil 1

Mit der Klasse cl_salv_table kann man ohne großen Aufwand selektierte Daten in einer ALV darstellen. Auf die Möglichkeiten der Klasse möchte ich in loser Folge hinweisen. Als erstes ein einfaches Beispiel, wie man schnell die Daten ausgeben kann. Für das Beispiel wollen wir einfach ohne Kriterien ein paar Datensätze aus der Tabelle SPFLI lesen.

Also zunächst werden 20 Datensätze wahllos aus der Tabelle gelesen. Die Erzeugung des ALV-Objektes erfolgt dann über die statische Factory-Methode aus der Klasse cl_salv_table. Im Importing-Paramter bekommt man dann das Objekt go_alv zurück und im Changing-Parameter steht die Ergebnistabelle, die im ALV angezeigt werden soll. Der Aufruf des ALV erfolgt dann einfach über die Methode display().

Der komplette Quellcode sieht dann so aus:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
REPORT ztest_salv_full.
 
DATA: gt_spfli TYPE STANDARD TABLE OF spfli.
DATA: go_alv TYPE REF TO cl_salv_table.
 
"Erzeugen von Testdaten
SELECT * FROM spfli
INTO CORRESPONDING FIELDS OF TABLE gt_spfli
UP TO '20' ROWS.
 
"ALV-Objekt erzeugen mit statischer Factory-Methode
TRY.
  cl_salv_table=>factory(
     EXPORTING
       list_display = if_salv_c_bool_sap=>false "TRUE für Listenausgabe
     IMPORTING
       r_salv_table = go_alv "Rückgabe des ALV-Objektes
     CHANGING
       t_table = gt_spfli ). "Tabelle für Anzeige
CATCH cx_salv_msg.
"Fehlerbehandlung
ENDTRY.
 
"ALV im FullScreen anzeigen
go_alv->display( ).

Aufruf go_alv->display()

Wenn das ALV statt im Fullscreen in einem Popup aufgerufen werden, dann muss vor der Display-Methode eine andere Methode aufgerufen werden, der die Größe des Pop-up-Fenster definiert:

* Vorbereitung für Aufruf des ALV im Popup
go_alv->set_screen_popup(
  EXPORTING
    start_column = '5'
    end_column   = '110'
    start_line   =  '5'
    end_line     = '20' ).

Eingefügt vor der Display-Methode sieht das Ergebnis nun so aus:

Darstellung der Daten im Popup

Möchte man die ALV-Liste in einem Container anzeigen, dann muss zusätzlich ein Container-Objekt angelegt werden und der Aufruf der Factory-Methode ändert sich etwas. In dem Bespiel wurde auch ein Dummy-Selektionsscreen hinzugefügt, damit es überhaupt einen Screen gibt, in dem der Container angedockt werden kann. Der komplette Quellcode sieht wie folgt aus:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
REPORT ztest_salv_container.
 
DATA: gt_spfli TYPE STANDARD TABLE OF spfli.
DATA: go_alv TYPE REF TO cl_salv_table.
DATA: go_container TYPE REF TO cl_gui_docking_container.
 
PARAMETERS: p_select TYPE xfeld.
 
AT SELECTION-SCREEN OUTPUT.
 
"Erzeugen von Testdaten
SELECT * FROM spfli
    INTO CORRESPONDING FIELDS OF TABLE gt_spfli
    UP TO '20' ROWS.
 
  "Erzeugen des Containers
  CHECK go_container IS NOT BOUND.
  CREATE OBJECT go_container
    EXPORTING
      repid                       = sy-repid  " Report an dem der Container angedockt werden soll
      side                        = cl_gui_docking_container=>dock_at_top    " Stelle des Andockens
    EXCEPTIONS
      cntl_error                  = 1
      cntl_system_error           = 2
      create_error                = 3
      lifetime_error              = 4
      lifetime_dynpro_dynpro_link = 5
      OTHERS                      = 6.
  IF sy-subrc <> 0.
    ""Fehlerbehandlung
  ENDIF.
 
"ALV-Objekt erzeugen mit statischer Factory-Methode
TRY.
    cl_salv_table=>factory(
      EXPORTING
        r_container   = go_container
      IMPORTING
        r_salv_table   =  go_alv     "Rückgabe des ALV-Objektes
      CHANGING
        t_table        = gt_spfli ). "Tabelle für Anzeige
  CATCH cx_salv_msg.
    "Fehlerbehandlung
ENDTRY.
 
go_alv->display( ).

Das Ergebnis ist entsprechend, dass im Selektionsbild oben ein Container mit der ALV-Liste angedockt wird:

ALV-Liste im Container

Fazit: mit der Klasse cl_salv_table kann schnell und unkompliziert eine ALV-Liste erstellt werden.

1 Trackback / Pingback

  1. ALV-Listen im CL_SALV_TABLE – Teil 2 – Laufzeitfehler

Teil mir was mit