Ausnahmeklassen und OTR-Texte

Ausnahmeklassen sollte inzwischen jeder kennen. Nach wie vor gibt es die Möglichkeit, eine Ausnahmeklasse mit T100-Unterstützung oder ohne anzulegen. Ich verwende gerne die reinen Ausnahmeklassen, also ohne die Unterstützung einer T100-Nachricht. Hauptsächlich tue ich dies aus zwei Gründen:

  1. Aus meiner Sicht sind die T100-Nachrichten zu umständlich zu handhaben, da es kein MESSAGE RAISING-Konstrukt für Ausnahmeklassen gibt. Erst ab Release 750 ist der Zusatz RAISE EXCEPTION TYPE … MESSAGE möglich.
  2. Die Zuweisung der Parameter zu der entsprechenden T100-Nachricht finde ich ebenfalls umständlich. Man muss die Attribute, die man für die Ausnahmeklasse definiert hat, den entsprechenden &1 bis &4 Parametern der Nachricht zuordnen.

Zusätzlich könnte man als dritten Grund noch anführen, dass der Meldungstext nicht aus der Ausnahme selber kommen sollte, sondern vom jeweils aufrufenden Programm definiert werden sollte. Darüber könnte man jedoch gut streiten…

T100-Nachricht

Ausnahmeklassen mit T100-Nachricht sind jedoch sehr günstig, wenn es darum geht, Fehlermeldungen zu protokollieren. Da geht aus meiner Sicht kaum ein Weg an dem Application Log vorbei und diesen füllt man am besten mit MESSAGE.

Attribute einer Ausnahme

Eine Ausnahme kann ohne Texte und ohne weitere Attribute verwendet werden. Der Aufruf erfolgt dann einfach per

RAISE EXCEPTION TYPE zcx_demo.

Es ist wieder eine Glaubensfrage, ob man unterschiedliche Ausnahmen auch in unterschiedlichen Ausnahmeklassen definieren sollte, oder ob man mehrere Aspekte in einer Ausnahmeklasse zusammenfassen sollte. Ich mache es mal so, mal so… Das hängt von irgendwas ab, das ich nicht definieren kann. Auf jeden Fall ist eine diskrete Ausnahmeklasse einfacher zu verwenden, als eine mit Attributen. Der Aufruf mit Attributen erfordert nämlich, dass der komplette Name der Ausnahmeklasse erneut verwendet werden muss:

RAISE EXCEPTION TYPE zcx_demo
  EXPORTING
    textid = zcx_demo=>no_data.

Das macht den Quelltext unübersichtlicher und erzeugt eventuell unnötiges code noise. Die Alternative wäre folgende:

RAISE EXCEPTION TYPE zcx_demo_no_data.

OTR-Texte

OTR ist die Abkürzung für Online Text Repository.

Wenn man sich dafür entschieden hat, in der Ausnahmeklasse ein zusätzliches Attribut zu definieren, dann wird zu diesem Attribut, das automatisch immer vom Typ SOTR_CONC ist, eine GUID erzeugt. Diese zum Attribut erzeugte GUID ist ein eindeutiger OTR-Schlüssel.

Attribut NO_DATA mit eindeutige GUID

In der SE24 kann dieser Text einfach im Editor geändert werden.

Ausnahmeklasse ZCX_DEMO mit Attribut NO_DATA

OTR Übersetzung

Mit der Übersetzung kommt man das erste Mal etwas ins Straucheln, denn wenn man meint, über Springen – Übersetzung diese Texte in eine andere Sprache übersetzen zu können, dann bekommt man nur die Meldung „Leere Objektliste“ (TL565).

Die OTR-Texte müssen über die Übersetzungstransaktion SE63 übersetzt werden:

Transaktion SE63

In dem Einstiegsbild muss die OTR-ID, anscheinend auch Konzept genannt, eingegeben werden:

Einstieg zur Übersetzung eines OTR-Kurztextes

Nach Klicken auf Bearbeiten erscheint der bekannte Übersetzungsdialog.

Übersetzen eines OTR-Textes

OTR-Texte bearbeiten

OTR-Texte können unabhängig von der Applikation bearbeitet und erstellt werden. Die Transaktion dafür heißt leider nicht SOTR (diese Transaktion ruft den Testreport zur Überprüfung der SAPoffice Empfangs-API auf), sondern lautet SOTR_EDIT. In das Feld Konzept muss die OTR-GUID eingetragen werden. Hier können Kurztexte als auch Langtexte bearbeitet werden.

Anscheinend hat sich SAP mit den OTR-Texten große Dinge überlegt, denn es kann zu einem Text ein Alias angelegt werden und man kann anscheinend einen Kontext zuordnen. Wofür auch immer man das sinnvoll nutzen könnte…

Folgende Bausteine können genutzt werden, um OTR-Texte zu lesen, zu ändern oder zu löschen:

  • SOTR_GET_CONCEPT
  • SOTR_DELETE_CONCEPT
  • SOTR_CREATE_CONCEPT

OTR-Texte und Eclipse

Die OTR-Texte machen es jedenfalls schwer möglich, Attribute zu einer Ausnahmeklasse in Eclipse anzulegen, denn hierfür muss diese eindeutige OTR-GUID erzeugt werden. Der Umweg, diese GUID in SOTR_EDIT anzulegen, um diese dann in Eclipse einzubinden, ist jedenfalls mehr als umständlich.