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.
DATAgs_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 STRLENgs_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.

        search this website

Regotz Michel