Ansicht
Dokumentation

ABENEXCEPTIONS_PROCEDURES - EXCEPTIONS PROCEDURES

ABENEXCEPTIONS_PROCEDURES - EXCEPTIONS PROCEDURES

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

Klassenbasierte Ausnahmen in Prozeduren

Wenn eine klassenbasierte Ausnahme in einer Prozedur nicht behandelt wird, versucht das System, sie an den Aufrufer der Prozedur zu propagieren. In der Schnittstelle einer Prozedur müssen die Ausnahmen deklariert werden, die aus der Prozedur propagiert werden können. Dadurch weiß der Aufrufer, welche Ausnahmen er von der Prozedur erwarten kann. Klassenbasierte Ausnahmen sind in drei Kategorien unterteilt, die festlegen, ob eine explizite Deklaration erfolgen muss und wie diese überprüft wird.

Bei Methoden und Unterprogrammen erfolgt die Deklaration mit dem Zusatz RAISING der Anweisungen METHODS und FORM. Bei Funktionsbausteinen und Methoden globaler Klassen werden klassenbasierte Ausnahmen dadurch in der Schnittstelle deklariert, dass auf der entsprechenden Registerkarte des formularbasierten Class bzw. Function Builders das Ankreuzfeld Ausnahmeklassen markiert wird. Der Zusatz RAISING erscheint dann als Kommentar zur Anweisung FUNCTION. Die Deklaration einer Ausnahmeklasse in einer Schnittstelle ist polymorph. Sie deklariert gleichzeitig sämtliche Unterklassen.

Bei der Deklaration mit RAISING kann festgelegt werden, ob eine wiederaufsetzbare Ausnahme, die aus einer Prozedur propagiert wird, die Eigenschaft der Wiederaufsetzbarkeit behält oder nicht. Nur wenn für eine wiederaufsetzbare Ausnahme bei jeder Parameterschnittstelle, die sie während der Propagierung passiert, der Zusatz RESUMABLE angegeben ist, bleibt sie wiederaufsetzbar. Eine nicht-wiederaufsetzbare Ausnahme wird beim Propagieren durch eine Schnittstelle durch den Zusatz RESUMABLE bei RAISING nicht wiederaufsetzbar gemacht.

Nicht-deklarierte Ausnahmen können eine Prozedur nicht verlassen, sondern führen zur Verletzung der Schnittstelle, wenn sie nicht innerhalb der Prozedur behandelt werden. Eine Verletzung der Schnittstelle löst eine Ausnahme der vordefinierten Klasse CX_SY_NO_HANDLER aus, deren Ausnahmeobjekt im Attribut PREVIOUS eine Referenz auf die ursprüngliche Ausnahme enthält.

Die höchste Ebene eines Programms, in die Ausnahmen propagiert werden können, sind Verarbeitungsblöcke ohne lokale Datenbereiche, also Ereignisblöcke oder Dialogmodule. Hier müssen alle dort auftretenden Ausnahmen behandelt werden, andernfalls kommt es zu einem Laufzeitfehler.

Beim Propagieren von Ausnahmen aus Prozeduren gelten folgende Einschränkungen:

  • Bei der Definition eines statischen Konstruktors können keine Ausnahmen deklariert werden, d.h., Ausnahmen können einen statischen Konstruktor nicht verlassen. Für einen Verwender einer Klasse steht in der Regel nämlich nicht fest, ob er der erste Verwender ist und ob er vom statischen Konstruktor propagierte Ausnahmen behandeln muss oder nicht.

Mit SUBMIT ... AND RETURN oder CALL TRANSACTION aufgerufene Programme können keine Ausnahmen an den Aufrufer propagieren, da Ausnahmeobjekte an die interne Sitzung eines Programms gebunden sind.

Hinweise

  • Das Auftreten einer Ausnahme vom Typ CX_SY_NO_HANDLER weist immer auf einen Programmierfehler innerhalb einer Prozedur hin, in der vergessen wurde, eine Ausnahme der Kategorie CX_DYNAMIC_CHECK oder CX_STATIC_CHECK zu verhindern, lokal zu behandeln oder zu deklarieren. Bei der Behandlung von Ausnahmen vom Typ CX_SY_NO_HANDLER sollte deshalb nicht versucht werden, die ursprüngliche Ausnahme zu behandeln, sondern der Programmverantwortliche informiert werden. Bei Ausnahmen vom Typ CX_STATIC_CHECK bekommt er dies auch von der Syntaxprüfung gemeldet.
  • Wenn nach einer Verletzung der Schnittstelle die Ausnahme CX_SY_NO_HANDLER nicht behandelt wird, wird der Laufzeitfehler durch die ursprüngliche Ausnahme ausgelöst und der zugehörige Kurzdump beschreibt diese. Dies weist darauf hin, dass primär die ursprüngliche Ausnahme von der Prozedur verhindert, behandelt oder deklariert werden soll. Der Kurzdump soll nicht bewirken, dass statt dessen die Ausnahme CX_SY_NO_HANDLER behandelt wird.





BAL_S_LOG - Application Log: Log header data   Addresses (Business Address Services)  
Diese Dokumentation steht unter dem Copyright der SAP AG.

Length: 6143 Date: 20240523 Time: 174630     sap01-206 ( 109 ms )