Ansicht
Dokumentation

ABENEXCEPTIONS_SYSTEM_RESPONSE - EXCEPTIONS SYSTEM RESPONSE

ABENEXCEPTIONS_SYSTEM_RESPONSE - EXCEPTIONS SYSTEM RESPONSE

Vendor Master (General Section)   SUBST_MERGE_LIST - merge external lists to one complete list with #if... logic for R3up  
Diese Dokumentation steht unter dem Copyright der SAP AG.
SAP E-Book

Systemverhalten nach einer klassenbasierten Ausnahme

Eine klassenbasierte Ausnahme tritt aus einem der folgenden Gründe in einem Anweisungsblock auf:

In beiden Fällen unterbricht das Auftreten einer klassenbasierten Ausnahme die sequenzielle Verarbeitung des aktuellen Anweisungsblocks und das System verhält sich wie folgt:

  • Wenn die Ausnahme während der Ausführung eines TRY-Blocks einer TRY-Kontrollstruktur auftritt, wird nach einem passenden CATCH-Block als Behandler gesucht. Die Ausführung jedes TRY-Blocks öffnet einen Kontext, der auch als geschützter Bereich bezeichnet wird, in den die Ausführung weiterer TRY-Blöcke eingebettet sein kann. Die Einbettung erfolgt im Regelfall durch den Aufruf von Prozeduren und seltener durch die Schachtelung von TRY-Blöcken im Quelltext. Das System durchsucht ab der Auftrittstelle der Ausnahme die TRY-Kontrollstrukturen der beteiligten TRY-Blöcke von innen nach außen nach dem ersten CATCH-Block, bei dem die Ausnahmeklasse oder eine ihrer Oberklassen aufgeführt ist. Falls ein solcher CATCH-Block gefunden wird, sind zwei Fälle möglich:
  • Wenn bei der CATCH-Anweisung der Zusatz BEFORE UNWIND nicht angegeben ist, wird erst der Kontext, in dem die Ausnahme ausgelöst wurde, inklusive aller darin aufgerufenen Prozeduren und deren lokalen Daten gelöscht. Danach wird der CATCH-Block ausgeführt.

  • Wenn bei der CATCH-Anweisung der Zusatz BEFORE UNWIND angegeben ist, wird der CATCH-Block sofort ausgeführt. Wenn der CATCH-Block bei einer wiederaufsetzbaren Ausnahme mit der Anweisung RESUME verlassen wird, wird die Verarbeitung hinter der auslösenden Stelle wieder aufgesetzt. In allen anderen Fällen wird der Kontext, in dem die Ausnahme ausgelöst wurde, beim Verlassen des CATCH-Blocks gelöscht.

Wenn der CATCH-Block nicht mit einer Anweisung wie RESUME, RETRY oder einer sonstigen Anweisung zum Verlassen eines Verarbeitungsblocks verlassen wird, wird die Verarbeitung standardmäßig hinter dessen TRY-Kontrollstruktur fortgesetzt.
  • Falls in keiner der beteiligten TRY-Kontrollstrukturen eines geschützten Bereichs ein Behandler gefunden wird oder wenn die Ausnahme nicht während der Verarbeitung eines TRY-Blocks einer TRY-Kontrollstruktur auftritt, kommt es an der Auftrittstelle der Ausnahme zu einem Laufzeitfehler. Der Kurzdump des Laufzeitfehlers enthält den Namen der Ausnahmeklasse und den Ausnahmetext. Die Attribute des Ausnahmeobjekts können in der Transaktion ST22 angezeigt werden.

Dabei sind folgende Besonderheiten zu beachten:

  • Wenn bei der Suche nach einem Behandler der Kontext einer Prozedur verlassen wird, wird deren Schnittstelle überprüft. Nur dort deklarierte Ausnahmen können aus der Prozedur propagiert werden. Ausnahmen der Kategorien CX_STATIC_CHECK und CX_DYNAMIC_CHECK müssen explizit deklariert sein, Ausnahmen der Kategorie CX_NO_CHECK sind implizit immer deklariert (dürfen aber auch explizit deklariert werden). Wenn die Ausnahme nicht in der Schnittstelle deklariert ist, wird an der Aufrufstelle der Prozedur die Ausnahme der vordefinierten Klasse CX_SY_NO_HANDLER ausgelöst, wobei in deren Attribut PREVIOUS eine Referenz auf die ursprüngliche Ausnahme hinterlegt wird.
  • Wenn ein Behandler gefunden wird, werden die CLEANUP-Blöcke aller bis dahin erfolglos durchsuchten TRY-Kontrollstrukturen von innen nach außen direkt vor dem Löschen ihres Kontexts ausgeführt. D.h., wenn beim CATCH-Block BEFORE UNWIND angegeben ist, werden die CLEANUP-Blöcke nach Verlassen des Behandlers, ansonsten vor der Behandlung ausgeführt. Ausnahmen, die innerhalb eines CLEANUP-Blocks auftreten, können diesen nicht verlassen, sondern müssen dort behandelt werden.
In folgenden Fällen werden keine CLEANUP-Blöcke ausgeführt:

  • Bei TRY-Kontrollstrukturen, bei denen die Ausnahme in einem CATCH-Block auftritt (ein CATCH-Block gehört nicht zum geschützten Bereich).

Siehe auch:






CPI1466 during Backup   ROGBILLS - Synchronize billing plans  
Diese Dokumentation steht unter dem Copyright der SAP AG.

Length: 6932 Date: 20240523 Time: 180203     sap01-206 ( 103 ms )