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:
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( ).
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:
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:
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:
Fazit: mit der Klasse cl_salv_table kann schnell und unkompliziert eine ALV-Liste erstellt werden.
Leave a Reply