Code: Alles auswählen.
RAISE EXCEPTION TYPE ZCX_ENNOS_FEHLERKLASSE
EXPORTING
textid = ZCX_ENNOS_FEHLERKLASSE=>FEHLER
fehlercode = 5.
Folgende Benutzer bedankten sich beim Autor a-dead-trousers für den Beitrag:
ewx
Wie oben beschrieben müsstest du das immer den Aufrufer erledigen lassen oder den "Abfänger" der Ausnahme bevor die Meldung ausgegeben wird.ralf.wenzel hat geschrieben:Was spricht dagegen, entsprechende Variablen in der Message zu verwenden?
Code: Alles auswählen.
MESSAGE gx_error TYPE 'E'.
Ich würde den Begriff "effizient" vorziehen...a-dead-trousers hat geschrieben: Ich und Enno sind halt nur faule Programmierer [...]
hmmm... Das könnte zumindest für meinen Fall genau die Lösung sein, die ich brauche...ewx hat geschrieben:Eventuell kann man was reißen, in dem man GET_TEXT redefiniert.
Nur leider wird die Methode nicht aufgerufen beiCode: Alles auswählen.
MESSAGE gx_error TYPE 'E'.
ABAP-Hilfe hat geschrieben:MESSAGE - { oref TYPE mtype }
DAS ist faul!ralf.wenzel hat geschrieben:Das mit der Effizienz ist so eine Sache. Es gibt Leute, die aus Effizienzgründen sy-marky als Universalflag verwenden.
Jein. Einerseits hast du IMHO Recht, dass die Funktion, die die Exception wirft, keine aussagekräftige Meldung erzeugen muss. Es würde evtl. reichenralf.wenzel hat geschrieben: Zum Problem kann ich leider nichts sagen, weil ich eigentlich seit geraumer Zeit die Messages erst im Aufrufer setze, weil ich die Message für GUI-abhängig halte. Sprich: Die Klasse mit der Business-Logik setzt eine Ausnahme und (zum Beispiel) der Report mit der GUI-Logik setzt anhand der Ausnahmeklasse die Message.
Code: Alles auswählen.
RAISE EXCEPTION TYPE zcx_abc
exporting
textid = zcx_abc=>keine_berechtigung
user = 'XYZ'.
Das liegt im Auge des Betrachters.ewx hat geschrieben:DAS ist faul!ralf.wenzel hat geschrieben:Das mit der Effizienz ist so eine Sache. Es gibt Leute, die aus Effizienzgründen sy-marky als Universalflag verwenden.
Weil die Exception Class nicht GUI-abhängig sein sollte. Finde ich.ewx hat geschrieben:Der Aufrufer muss dann entscheiden, wie die Meldung aussieht; die kann ja je nach Kontext anders sein.
Aber: Sie muss ja nicht anders sein. Und gerade, wenn Fehler protokolliert werden, ist es einfacher, die originäre Meldung zu verwenden ohne diese nochmal aufbereiten zu müssen. Und warum sollte das nicht die Exception-Class selbst übernehmen?
ewx hat geschrieben:Hast die Doku schneller gefunden, als ich...
Ich versteh das so: Wenn deine Exceptionklasse KEINE Nachrichtenklasse verwendet (weil bei IF_T100_MESSAGE gibt es ja den T100KEY der stattdessen herangezogen wird) würde die Aufbereitung sehrwohl über die GET_TEXT und GET_LONGTEXT laufen.ABAP-Hilfe hat geschrieben:Aus Kompatibilitätsgründen kann diese Variante auch noch für Klassen verwendet werden, die nur das Interface IF_MESSAGE implementieren. In diesem Fall werden im referenzierten Objekt automatisch die Interfacemethoden GET_TEXT und GET_LONGTEXT aufgerufen und deren Rückgabewert als Kurztext bzw. Langtext der Nachricht verwendet. Die Systemfelder sy-msgid und sy-msgno werden in diesem Fall nicht spezifisch gefüllt. Die Wurzelklasse aller Ausnahmeklassen, CX_ROOT, implementiert das Interface IF_MESSAGE. In Ausnahmeklassen, die nicht das Interface IF_T100_MESSAGE implementieren, besorgen die Interfacemethoden GET_TEXT und GET_LONGTEXT die im OTR (Online Text Repository) abgelegten Ausnahmetexte von Ausnahmeobjekten, die dann mit dieser Variante der MESSAGE-Anweisung als Nachricht ausgegeben werden können.