Spool anzeigen und die Spoolinhalte in eine ITAB schreiben
Diese Programm zeigt den aktuellsten Spool deines Users an oder man kann einen beliebigen andere Spoolnummer aufrufen. Desweiteren werden all Spoolinhalte in eine ITAB geschrieben.
*&---------------------------------------------------------------------*
*& Report Z_SPOOL
*&
*&---------------------------------------------------------------------*
*& Regotz Michel
*& Dieses Programm zeigt einen Spool an.
*& Desweiteren werden alle Spoolinhalte in eine ITAB geschrieben
*&---------------------------------------------------------------------*
REPORT z_spool.
*&---------------------------------------------------------------------*
*& Datendekleration
*&---------------------------------------------------------------------*
"Types
TYPES:
BEGIN OF rspo1000,
line
TYPE rspo1000,
END
OF rspo1000.
"Datendeklerationen für Daten aus einem Spool in eine ITAB lesen.
DATA: gs_spool TYPE tsp01sys,
gt_data TYPE
TABLE OF rspo_ds,
gs_data TYPE rspo_ds,
gt_output TYPE
TABLE OF rspo_index,
gs_output TYPE rspo_index,
gf_line_count TYPE rststype-linelength,
"itab
struktur der Rückgabe Tabelle gt_data
gt_itab TYPE
TABLE OF rspo_ds,
gs_itab TYPE rspo_ds,
"itab
mit einer Spalte
gt_out TYPE
TABLE OF rspo1000,
gs_out TYPE rspo1000,
gf_count TYPE n
LENGTH 4.
"Datendekleration Spoolnummer holen
DATA: gf_spoolname TYPE rspo2name,
gf_spoolnr LIKE tsp01-rqident,
gs_tsp01 TYPE tsp01.
*&---------------------------------------------------------------------*
*& Selektionsbild
*&---------------------------------------------------------------------*
PARAMETER p_spooln LIKE tsp01sys-rqident.
*&---------------------------------------------------------------------*
*& At Selection-Screen Ouput
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Spoolnummer holen
*&---------------------------------------------------------------------*
"Lesen der aktuellsten Spoolnummer des angemeldeten Users
AT SELECTION-SCREEN OUTPUT.
SELECT * FROM tsp01 INTO gs_tsp01
WHERE rqowner = sy-uname
ORDER
BY rqcretime ASCENDING.
gf_spoolnr = gs_tsp01-rqident.
ENDSELECT.
"Spoolnummer
im Slelektionscreen eintragen
p_spooln = gf_spoolnr.
*&---------------------------------------------------------------------*
*& Start of Selection
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Hole aller Eigenschaften
*&---------------------------------------------------------------------*
START-OF-SELECTION.
"Hole
die Spooldaten aus der TSP01.
CALL
FUNCTION 'RSPO_ISELECT_TSP01'
EXPORTING
rfcsystem = sy-sysid
rqident = p_spooln
IMPORTING
tsp01_elem = gs_spool
EXCEPTIONS
error = 1
OTHERS = 2.
IF sy-subrc
<> 0.
"Mache
nichts
ELSE.
MESSAGE 'Die
Spool Eigenschaften konnten nicht bezogen werden' TYPE 'I'.
ENDIF.
*&---------------------------------------------------------------------*
*& Inhalte des Spools lesen
*&---------------------------------------------------------------------*
CALL
FUNCTION 'RSPO_IRETURN_RAW_DATA'
EXPORTING
rq = gs_spool
TABLES
line_buffer = gt_data
page_index = gt_output
EXCEPTIONS
error = 1
OTHERS = 2.
IF sy-subrc
<> 0.
"Mache
nichts
ELSE.
MESSAGE 'Die
Inhalte des Spools konnten nicht gelesen werden' TYPE 'I'.
ENDIF.
*&---------------------------------------------------------------------*
*& Interne Tabelle säubern für eine HTML Ausgabe zu erzeugen
*&---------------------------------------------------------------------*
"Dieses
Symbol und dieses Symbol - durch ein Leerzeichen ersetzen.
LOOP
AT gt_data INTO gs_data.
TRANSLATE gs_data-data_line USING '─
'.
TRANSLATE gs_data-data_line USING ' '.
APPEND gs_data TO gt_itab.
ENDLOOP.
"Bestimmte
Zellen aus der Tabelle löschen und neue Zeilen hinzufügen
LOOP
AT gt_itab INTO gs_itab.
"Bei
der Länge 265 Zeile löschen count 1 setzen
IF gs_itab-data_len = '00265'.
DELETE
TABLE gt_itab FROM gs_itab.
gf_count = 1.
ELSEIF gs_itab-data_len = '00145'.
"Bei
der Länge 145 Zeile löschen
DELETE
TABLE gt_itab FROM gs_itab.
"Leere
Zeilen löschen
ELSEIF gs_itab-data_line IS
INITIAL.
DELETE
TABLE gt_itab FROM gs_itab.
ELSE.
"Wenn
COUNT = 1 eine Zeile einfügen
IF gf_count = 1.
gs_itab-data_line = '-----------------------------------------'.
INSERT gs_itab INTO gt_itab.
CLEAR gf_count.
ENDIF."mache
nichts
ENDIF.
ENDLOOP.
*&---------------------------------------------------------------------*
*& Spoolauftrag anzeigen
*&---------------------------------------------------------------------*
"Jetzt
möchten wir die Daten anzeigen, falls der Dokumententyp 'LIST' ist
IF gs_spool-rqdoctype = 'LIST'.
"Initialisierung
der Funktion RSPO_SPOOLDATA_WRITE
CALL
FUNCTION 'RSPO_SPOOLDATA_WRITE_INIT'.
LOOP
AT gt_data INTO gs_data.
"Falls
ein Seitenumbruch auf einer neuen Seite weiterfahren.
IF gs_data-precol = 'P' AND gs_data-data_line(1)
= '
'.
NEW-PAGE.
CONTINUE.
ENDIF.
"Ermitteln
der Zeilen Länge
IF gs_data-data_len IS
INITIAL.
"Falls
Count Data_len nicht gefüllt ist aber data_line trotzdem.
gf_line_count = STRLEN( gs_data-data_line ).
ELSE.
gf_line_count = gs_data-data_len.
ENDIF.
IF gf_line_count
> 1.
"wandelt
Daten, die bereits im Spooler stehen zurück in WRITE-Befehle,
"so
daß sie in eine ABAP/4-Liste ausgegeben werden.
CALL
FUNCTION 'RSPO_SPOOLDATA_WRITE'
EXPORTING
spool_data = gs_data-data_line
data_length = gf_line_count
EXCEPTIONS
data_too_short = 1
OTHERS = 2.
IF sy-subrc
<> 0.
"Mache
nichts
ELSE.
MESSAGE 'Der
Spool konnte nicht angezeigt werden' TYPE 'I'.
ENDIF.
ELSE.
"Falls
die Zeile leer mache ein Skip
SKIP.
ENDIF.
ENDLOOP.
ELSEIF gs_spool-rqdoctype = 'OTF'.
"mache
nichts
ELSEIF gs_spool-rqdoctype = 'RAW'.
"mache
nichts
ELSEIF gs_spool-rqdoctype = 'SMART'.
"mache
nichts
ENDIF.