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.