Ansicht
Dokumentation

ABENCLEANUP_GUIDL - CLEANUP GUIDL

ABENCLEANUP_GUIDL - CLEANUP GUIDL

TXBHW - Original Tax Base Amount in Local Currency   BAL Application Log Documentation  
Diese Dokumentation steht unter dem Copyright der SAP AG.
SAP E-Book

Aufräumarbeiten nach Ausnahmen

Jede TRY-Kontrollstruktur kann einen CLEANUP-Block enthalten. Wenn eine klassenbasierte Ausnahme im TRY-Block der gleichen TRY -Kontrollstruktur auftritt, aber in einem CATCH-Block einer äußeren TRY-Kontrollstruktur behandelt wird, wird der CLEANUP-Block vor dem Löschen des Kontextes der Ausnahme ausgeführt. Bei der Ausführung eines Behandlers werden daher die CLEANUP- Blöcke aller bis dahin erfolglos nach einem Behandler durchsuchten TRY-Kontrollstrukturen von innen nach außen durchgeführt.

Ob die Ausführung vor oder nach der Behandlung erfolgt, richtet sich nach dem Zusatz BEFORE UNWIND der CATCH-Anweisung. Die CLEANUP-Blöcke werden jedoch nicht ausgeführt, wenn während der Ausnahmebehandlung mit RESUME wieder im Kontext der Ausnahme aufgesetzt wird.

Vor dem Weiterleiten aufräumen

Führen Sie vor dem Weiterleiten einer Ausnahme an darüberliegende Aufrufschichten die notwendigen Aufräumarbeiten im CLEANUP-Block aus.

Jede Ausnahme ändert den Programmfluss und kann dadurch eine ernsthafte Bedrohung für die Konsistenz einer Anwendung darstellen. Wenn man sich dafür entscheidet, eine Ausnahme nicht zu behandeln, sondern weiterzuleiten, muss man dafür sorgen, die aktuelle Softwareschicht in einem konsistenten Zustand zu hinterlassen. Hierfür kann der CLEANUP-Block geeignet implementiert werden, um Aufräumarbeiten auszuführen, bevor die Ausnahme an darüberliegende Softwareschichten weitergeleitet wird.

Folgender Quelltext zeigt die Weiterleitung einer Ausnahme, ohne dass eine vorher geöffnete Ressource - hier ein Datenbank-Cursor - explizit geschlossen wird, was das Schließen des Datenbank-Cursors stillschweigend an eventuelle Ausnahmebehandler delegiert.

TRY.
  OPEN CURSOR db_cursor
    FOR SELECT ...
    ...
  CATCH cx_sy_sql_error INTO exc.
    RAISE EXCEPTION TYPE cx_persistency_error
      EXPORTING previous = exc.
ENDTRY.

Folgender Quelltext zeigt das gleiche Beispiel wie obiges Beispiel, wobei hier aber der Datenbank-Cursor im CLEANUP-Block geschlossen wird.

TRY.
  OPEN CURSOR db_cursor
    FOR SELECT ...
    ...
  CATCH cx_sy_sql_error INTO exc.
    RAISE EXCEPTION TYPE cx_persistency_error
      EXPORTING previous = exc.
  CLEANUP.
    CLOSE CURSOR db_cursor.
ENDTRY.






Vendor Master (General Section)   Addresses (Business Address Services)  
Diese Dokumentation steht unter dem Copyright der SAP AG.

Length: 3195 Date: 20240523 Time: 164928     sap01-206 ( 68 ms )