ABAP Tipp - Backup für Reports
Die eigenen Reports mit einem Klick lokal sichern? In diesem Artikel zeigen wir dir wie du das machen kannst und zwar ohne viel Mühe.
Inhaltsverzeichnis
Du benötigst einmal einen Backup deiner bisherigen Programme/Reports die du geschrieben hast? Mit dem heutigen Tipp ist es kein Problem mehr, alles mit einem Klick zu extrahieren und gegebenenfalls zu archivieren. Wir zeigen dir einen effizienten Report, der alles für dich übernimmt.
Definition der Daten
Im ersten Schritt definieren wir die Datenstruktur für die Aufbereitung der zu lesenden Daten. Dazu benötigen wir noch eine Tabelle die den Quellcode nach dem Einlesen enthält. Da es sich um einen einfachen Report handelt, sind die Variablen direkt global deklariert.
" Typen
TYPES:
BEGIN OF ts_data,
objnr TYPE versobjnam,
name TYPE string,
path TYPE string,
END OF ts_data,
tt_data TYPE STANDARD TABLE OF ts_data.
" Daten
DATA:
gt_text TYPE STANDARD TABLE OF abaptxt255,
gw_text TYPE abaptxt255,
gt_data TYPE tt_data,
gw_data TYPE ts_data.
Selektionsbild
Als zweiten Schritt definieren wir das Selektionsbild mit den Ablageparametern. Für welchen User sollen die Daten abgezogen werden (in diesem Fall der eigene User) und in welchem lokalen Ordner sollen die fertigen Dateien gesichert werden.
" Parameter
PARAMETERS:
p_user TYPE syuname DEFAULT sy-uname,
p_path TYPE string LOWER CASE DEFAULT 'C: empcode',
p_test AS CHECKBOX DEFAULT abap_true.
Lesen und Aufbereiten
Über die Tabelle TRDIR liest du alle Includes und Reports ein und bereitest diese in der Datenstruktur auf. Als Ergebnis bekommst du alle Bestandteile in einer internen Tabelle. Natürlich kannst du dir diesen Schritt auch sparen und direkt mit der Aufbereitung und Ausgabe starten.
" Abzug der Daten
SELECT *
FROM trdir
WHERE cnam = @p_user
AND ( name LIKE 'LZ%' OR name LIKE 'SAPLZ%' OR name LIKE 'Z%' ).
INTO TABLE @DATA(gt_dir).
" Dateien übernehmen
LOOP AT gt_dir INTO DATA(gs_dir).
CLEAR gw_data.
gw_data-objnr = gs_dir-name.
gw_data-name = gs_dir-name.
gw_data-path = p_path && gw_data-name && '.txt'.
APPEND gw_data TO gt_data.
ENDLOOP.
Download und Anzeige
Nun verarbeitest du die Daten aus der globalen Tabelle und liest über den READ REPORT Befehl den Inhalt der Ressource ein. Das Testkennzeichen bestimmt, ob der Inhalt nur ausgegeben werden oder die Dateien auf dem Filesystem abgelegt werden sollen.
" Abzug der Daten
LOOP AT gt_data INTO gw_data.
" Daten löschen
CLEAR: gt_text.
" Abruf des Codings
READ REPORT gw_data-objnr INTO gt_text.
IF sy-subrc <> 0.
WRITE: / 'Fehler: ', gw_data-name.
CONTINUE.
ENDIF.
" Testmodus -> keine Dateien schreiben
IF p_test = abap_true.
WRITE: / 'Datei ermittelt: ', gw_data-path.
CONTINUE.
ENDIF.
" Pfad öffnen
cl_gui_frontend_services=>gui_download(
EXPORTING
filename = gw_data-path
write_lf = 'X'
CHANGING
data_tab = gt_text
EXCEPTIONS
OTHERS = 1
).
IF sy-subrc = 0.
WRITE: / 'Datei geschrieben: ', gw_data-path.
ENDIF.
ENDLOOP.
Fazit
Das Einlesen des Quelltextes ist mit leichten Mitteln umgesetzt, ebenso wie das Ablegen auf dem lokalen Rechner. Damit steht dir mit dem Report ein einfaches Werkzeug zur Seite, deinen eigenen Quellcode zu verwalten und in Dateiform zu bringen. Ebenso können alte Reports archiviert und abgelegt werden.