Ansicht
Dokumentation

ABAPRAISE_EXCEPTION_CLASS - RAISE EXCEPTION CLASS

ABAPRAISE_EXCEPTION_CLASS - RAISE EXCEPTION CLASS

Fill RESBD Structure from EBP Component Structure   General Data in Customer Master  
Diese Dokumentation steht unter dem Copyright der SAP AG.
SAP E-Book

RAISE EXCEPTION

Kurzreferenz



RAISE $[RESUMABLE$] EXCEPTION
  ${ ${TYPE cx_class $[message$] $[EXPORTING p1 = a1 p2 = a2 ...$]$}

  $| oref $}.

Zusätze:

1. ... RESUMABLE

2. ... EXPORTING p1 = a1 p2 = a2 ...

Wirkung

Diese Anweisung unterbricht die Ausführung des aktuellen Anweisungsblocks und löst eine klassenbasierte Ausnahme aus. Sie kann an jeder Stelle eines Verarbeitungsblocks stehen. Die Anweisung unterbricht den Programmablauf und sucht wie in Systemverhalten nach einer klassenbasierten Ausnahme beschrieben nach einem Behandler. Je nach Definition des Behandlers wird der Kontext der Ausnahme vor oder nach dem Ausführen des Behandlers abgebaut, wobei Aufräumarbeiten ausgeführt werden können. Nur wenn der Zusatz RESUMABLE angegeben ist, kann die Verarbeitung während der Behandlung auch wieder hinter der Anweisung RAISE EXCEPTION aufgesetzt werden, ohne dass der Kontext abgebaut wird.

  • Wenn der Zusatz TYPE angegeben ist, wird eine Ausnahme der Ausnahmeklasse cx_class ausgelöst und, falls benötigt, ein Ausnahmeobjekt erzeugt. Hinter TYPE kann jede an dieser Stelle sichtbare Ausnahmeklasse cx_class angegeben werden.
  • Mit dem Zusatz EXPORTING können den Eingabeparametern des Instanzkonstruktors Aktualparameter zugeordnet werden.

  • Mit dem Zusatz message kann das Ausnahmeobjekt mit einer Nachricht verknüpft werden.

  • Wenn oref angegeben ist, wird beim Auslösen der Ausnahme kein neues Ausnahmeobjekt erzeugt. Für oref muss eine Objektreferenzvariable angegeben werden, die auf ein bereits vorhandenes Ausnahmeobjekt zeigt. Der statische Typ von oref muss eine Ausnahmeklasse, also eine Unterklasse von CX_ROOT oder diese Klasse selbst sein. Bei oref handelt es sich um eine allgemeine Ausdrucksposition. Im vorhandenen Ausnahmeobjekt werden die internen Attribute, welche die Stelle der Ausnahme beschreiben und die mit der Methode GET_SOURCE_POSITION ausgelesen werden können, auf die Stelle der RAISE-Anweisung umgesetzt.

Die Anweisung RAISE EXCEPTION darf nicht in einer Methode oder einem Funktionsbaustein verwendet werden, in deren Schnittstelle nicht-klassenbasierte Ausnahmen deklariert sind. Weiterhin schließt sie die gleichzeitige Verwendung der Anweisungen CATCH SYSTEM-EXCEPTIONS zur obsoleten Behandlung von abfangbaren Laufzeitfehlern oder RAISE bzw. MESSAGE RAISING zum Auslösen von nicht-klassenbasierten Ausnahmen in Funktionsbausteinen und Methoden im aktuellen Verarbeitungsblock aus.

Hinweise

  • Bei Verwendung des Zusatzes TYPE wird aus Performance-Gründen ein Ausnahmeobjekt nur dann erzeugt, wenn es auch benötigt wird, d.h.
  • wenn in einer umgebenden TRY-Kontrollstruktur ein passender CATCH- oder CLEANUP-Block mit dem Zusatz INTO aufgeführt ist,

  • wenn die Ausnahme nicht abgefangen wird und es zu einem Laufzeitfehler kommt.

Prinzipiell können Ausnahmen aber immer so betrachtet werden, als wenn eine Instanz eines Ausnahmeobjekts erzeugt wird. Einen Unterschied in der Verhaltensweise kann es nur dann geben, wenn bei der Objekterzeugung eine unbehandelte Ausnahme des Instanzkonstruktors die ursprüngliche Ausnahme ersetzt. Dieser Fall dürfte aber nie auftreten.
  • Bei der Angabe von oref kann entweder ein über NEW bzw. CREATE OBJECT instanziertes Ausnahmeobjekt verwendet oder eine bereits abgefangene Ausnahme während der Ausnahmebehandlung nochmals ausgelöst werden.
  • Wenn eine abgefangene Ausnahme nochmals ausgelöst wird, ist zu beachten, dass das Ausnahmeobjekt nicht unverändert bleibt, sondern die Informationen zur Stelle der Ausnahme geändert werden. Wenn die ursprünglichen Informationen an einen äußeren Behandler propagiert werden sollen, kann eine neue Ausnahme der gleichen Klasse ausgelöst werden, an deren Parameter PREVIOUS des Konstruktors das ursprüngliche Ausnahmeobjekt übergeben wird. Eventuell genügt es auch, die ursprüngliche Ausnahme implizit zu propagieren, d.h. nicht mit RAISE erneut auszulösen. Das zugehörige ursprüngliche Ausnahmeobjekt kann dann falls erforderlich im CLEANUP-Block ausgewertet werden.
  • Die Ausnahmeklasse hinter TYPE kann nur statisch angegeben werden. Um eine Ausnahme dynamisch auszulösen, kann mit der dynamischen Variante von CREATE OBJECT ein Ausnahmeobjekt erzeugt und dieses über oref angegeben werden.
  • Wenn eine Prozedur über das Auslösen einer Ausnahme verlassen wird, wird der Inhalt der Formalparameter, für welche die Wertübergabe definiert ist, nicht den jeweiligen Aktualparametern zugewiesen.
  • Der Zusatz THROW in einem bedingten Ausdruck ermöglicht es, eine klassenbasierte Ausnahme an einer Operandenposition auszulösen.

Beispiel

Auslösen einer Ausnahme cx_demo in einer Methode.

Beispiel

Erneutes Auslösen einer abgefangenen Ausnahme der Klasse cx_demo über das Ausnahmeobjekt.

Beispiel

Auslösen einer Ausnahme über ein dynamisch erzeugtes Ausnahmeobjekt.

Ausnahmen, RAISE

Zusatz 1

... RESUMABLE

Wirkung

Mit dem Zusatz RESUMABLE wird eine Ausnahme als wiederaufsetzbare Ausnahme ausgelöst. Bei der Behandlung einer solchen Ausnahme in einem CATCH-Block kann mit der Anweisung RESUME direkt hinter die auslösende Anweisung zurückgesprungen werden, wenn der Kontext der Ausnahme nicht vor der Behandlung gelöscht wurde.

Hinweise

  • Wenn eine Ausnahme mit RESUMABLE als wiederaufsetzbare Ausnahme ausgelöst wird, liegt es am Behandler, ob die Verarbeitung wieder hinter RAISE EXCEPTION aufgesetzt wird oder die Verarbeitung des aktuellen Kontexts vollständig abgebrochen wird. Beim Auslösen der Ausnahme muss mit beidem gerechnet werden. Insbesondere ist darauf zu achten, dass eventuelle CLEANUP-Blöcke nur beim Löschen des Kontexts ausgeführt werden.
  • Beim Propagieren von Ausnahmen der Arten CX_STATIC_CHECK und CX_DYNAMIC_CHECK, die wiederaufsetzbar ausgelöst wurden, kann die Eigenschaft der Wiederaufsetzbarkeit verloren gehen, wenn nicht in jeder beteiligten Schnittstelle beim Zusatz RAISING zur Deklaration der Ausnahme auch der Zusatz RESUMABLE angegeben ist.
  • Beim Propagieren von Ausnahmen der Arten CX_NO_CHECK geht die Eigenschaft der Wiederaufsetzbarkeit nie verloren. Ausnahmen der Art CX_NO_CHECK sollten aber nur mit Vorsicht wiederaufsetzbar ausgelöst werden, und es muss sichergestellt sein, dass eine Prozedur dann immer auch das gewünschte Verhalten zeigt.

Beispiel

Auslösen einer wiederaufsetzbaren Ausnahme cx_demo mit dem Zusatz RESUMABLE in einer Methode.

Zusatz 2

... EXPORTING p1 = a1 p2 = a2 ...

Wirkung

Mit dem Zusatz EXPORTING können den Eingabeparametern des Instanzkonstruktors der Ausnahmeklasse passende Aktualparameter zugeordnet werden. Die Syntax ist wie bei der Anweisung CREATE OBJECT

Wie bei normalen Methodenaufrufen handelt es sich bei a1, a2, ... um allgemeine Ausdruckspositionen, d.h. es können neben Datenobjekten auch Funktionen und Ausdrücke als Aktualparameter übergeben werden. In diesem Fall gelten spezielle Regeln.

Hinweis

Der Instanzkonstruktor einer Ausnahmeklasse hat einen wichtigen Eingabeparameter TEXTID, der den Ausnahmetext für die aktuelle Ausnahme bestimmt.

  • An diesen Parameter sollten ausschließlich die Konstanten der Ausnahmeklasse übergeben werden, die einen statischen Ausnahmetext der Ausnahmeklasse spezifizieren.
  • Die Übergabe einer Textangabe als Aktualparameter an den Parameter TEXTID ist nicht im Verwendungsnachweis dieses Textes enthalten. Zum Beispiel enthält der Verwendungsnachweis einer Nachricht diese dynamische Verwendung der Nachricht nicht.

Mit dem Zusatz MESSAGE können beliebige Nachrichten der Ausnahme zugeordnet werden. Dieser Zusatz kann nicht in Verbindung mit dem Parameter TEXTID angegeben werden.

Beispiel

Explizites Auslösen einer vordefinierten Ausnahme, wobei ein anderer als der Standard-Ausnahmetext ausgewählt und dessen Platzhalter &TOKEN& durch die Übergabe eines Wertes an das gleichnamige Attribut gefüllt wird.






RFUMSV00 - Advance Return for Tax on Sales/Purchases   Addresses (Business Address Services)  
Diese Dokumentation steht unter dem Copyright der SAP AG.

Length: 13397 Date: 20240523 Time: 123531     sap01-206 ( 241 ms )