MESSAGE passend zur EXCEPTION generieren

Alle Fragen rund um Basisthemen
11 Beiträge • Seite 1 von 1
11 Beiträge Seite 1 von 1

MESSAGE passend zur EXCEPTION generieren

Beitrag von Alexander D. (Expert / 682 / 30 / 84 ) »
hallo zusammen,

ich habe hier in einem Kundenprogramm den Baustein GUI_DOWNLOAD. Bislang wurde nach dem Aufruf des Bausteins der sy-subrc nicht geprüft, das Programm lief auf einen Fehler, weil ein bestimmter Ordner schreibgeschützt war, der Anwender hat davon nichts mitbekommen. Dies möchte ich nun ändern und Fehler für den Benutzer via MESSAGE sichtbar machen. Der klassische Weg wäre nach dem Aufruf mit einem CASE alle möglichen Exceprions durchzugehen

Code: Alles auswählen.

CALL FUNCTION 'GUI_DOWNLOAD' 
...
     EXCEPTIONS 
      FILE_WRITE_ERROR              = 1
      NO_BATCH                           = 2
      GUI_REFUSE_FILETRANSFER  = 3
      INVALID_TYPE                       = 4
      ...
      CONTROL_FLUSH_ERROR      = 21
      OTHERS                               = 22.

CASE SY-SUBRC. 
     WHEN 1. 
        MESSAGE A
     WHEN 2. 
        MESSAGE B
     ...
     WHEN 22. 
        MESSAGE XY
ENDCASE. 
bei 22 Möglichkeiten frage ich mich aber, ob das auch eleganter geht. Hat jemand vielleicht eine Anregung?
schöne Grüße
Alexander

ECC 6.0 EHP 7

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Re: MESSAGE passend zur EXCEPTION generieren

Beitrag von jensschladitz (Specialist / 417 / 0 / 56 ) »
Sali,

mach dir doch eine eigene Message ID mit Message 1 bis 2 z.Bsp. mit dem entsprechenden Text und nach dem Aufruf des FUBA machst du einfach - wenn sy-subrc <> 0 ein message E(sy-subrc)(ID) und das wars - also sagen wir mal - wenn sy-subrc = 1 ->message e001(ID) ===> 'File write Error' oder so - wäre dann etwa der Text .
Das ganze irgendwie in ein Macro packen damit du das aufgelöst bekommst mit dem Sy-subrc.
Denke so könnte es klappen.
Aber die 22 Messages musst du schon schreiben oder du liest die Details zum FUBA - da gibt es eine FUBA (weiss aber gerade nicht wie der heisst) der bringt dir auch die Exceptions zurück na und das müsstest du dann nur lesen ausd der internen Tabelle - aber da würde dann so etwas drin bstehen wie in der Schnittstelle - also FILE_WRITE_ERROR - wenn das textlich ausreichend wäre dann so .


Gruss Jens
thanks Jens

Re: MESSAGE passend zur EXCEPTION generieren

Beitrag von black_adept (Top Expert / 4089 / 127 / 940 ) »
Hallo Alexander,

die meisten der Fehlermeldungen kommen meiner Erfahrung nach nicht vor.
Schnapp dir die offensichtlichsten ( oder die welche dir von den Usern reportiert wurden ) und mache für genau diese eine aussagekräftige Fehlermeldung. Für alle anderen Fehlerreturncodes machst du EINE allgemeingültige Meldung à la "interner Fehler' sy-subrc " beim Datendownload aufgetreten. Fragen Sie den Programmierer Ihres Vertrauens wie sie nun vorzugehen haben " und erweitere deine spezifischen Meldungen nach Bedarf.
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: MESSAGE passend zur EXCEPTION generieren

Beitrag von Alexander D. (Expert / 682 / 30 / 84 ) »
danke soweit für die Anregungen! Die Frage ist mir zwar bei dem Baustein GUI_DOWNLOAD in den Sinn gekommen, sie lässt sich aber natürlich beliebig auf andere Bausteine ausweiten.

@black_adept: es wird sicherlich stimmen und der Großteil der Exceptions wird für die Tonne sein. Man weiss aber nicht unbedingt im Voraus, welche Exceptions wichtig sind und welche nicht, bzw. muss ich immer wieder Anpassungen am Quellcode vornehmen, wenn mal wieder ein Fehler vom User berichtet wurde. Weiterhin möchte ich nach Möglichkeit die Dont-Repeat-Yourself-Methodik einhalten. Der Baustein könnte in mehreren Programmen enthalten sein, jede Änderung wäre dann auf X Programme auszuweiten, das möchte ich nach Möglichkeit vermeiden

@Jens: das mit den Messages wäre ein Weg, wenn ich das nur für einen Baustein machen würde. Da sy-subrc = 7 aber unterschiedliche Aussagen haben könnte, kann ich das nicht mit einer e007(ID) erschlagen. Da wäre der Ansatz über das Auslesen der Details zum FUBA besser, hat jemand vielleicht den Baustein parat? Ich habe ihn bis jetzt nicht finden können.

Was ich mir noch überlegt habe ist eine Z-Tabelle in etwa der Form

- FBNAME
- SUBRC
- LANGU
- TEXT

darüber könnte ich dann die Texte beliebiger Bausteine und Rückgabewerte bequem aus der Tabelle einsteuern. Muss mir da zu dem Thema noch mal Gedanken machen...
schöne Grüße
Alexander

ECC 6.0 EHP 7

Re: MESSAGE passend zur EXCEPTION generieren

Beitrag von black_adept (Top Expert / 4089 / 127 / 940 ) »
FuBa FUNCTION_IMPORT_INTERFACE um das Interface zu lesen und damit die Namen der EXCEPTIONS zu erhalten
Tabelle FUNCT, um zu schauen ob sich jemand die Mühe gemacht hat der EXCEPTION auch eine Kurzbeschreibung zu verpassen, die sprechender ist als der Name der EXCEPTION.

Folgende Benutzer bedankten sich beim Autor black_adept für den Beitrag:
Alexander D.

live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: MESSAGE passend zur EXCEPTION generieren

Beitrag von Alexander D. (Expert / 682 / 30 / 84 ) »
Stefan, vielen Dank! Das sieht gut aus.
Die Tabelle FUNCT ist ja eigentlich genau das, was ich im Kopf hatte
schöne Grüße
Alexander

ECC 6.0 EHP 7

Re: MESSAGE passend zur EXCEPTION generieren

Beitrag von black_adept (Top Expert / 4089 / 127 / 940 ) »
Aber in FUNCT stehen nur die EXCEPTIONS drin, bei denen sich jemand die Mühe gemacht hat einen Kommentar hinter die EXCEPTION zu schreiben - leider.
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: MESSAGE passend zur EXCEPTION generieren

Beitrag von Alexander D. (Expert / 682 / 30 / 84 ) »
ok, es ist schon ägerlich, dass ich die Tabelle weder über SE16N noch über SM30 verfollständigen kann. Wenn ich an dieser Stelle sowohl den von dir genannten Fuba als auch die Tabelle kombiniere, dann kann ich damit schon mal leben. Im glücklichen Fall eines vorhandenen Kommentares wird dieser ausgegeben, sonst eben nur der Text zu der Exception
schöne Grüße
Alexander

ECC 6.0 EHP 7

Re: MESSAGE passend zur EXCEPTION generieren

Beitrag von JHM (Top Expert / 1197 / 1 / 197 ) »
Alexander D. hat geschrieben:Im glücklichen Fall eines vorhandenen Kommentares wird dieser ausgegeben, sonst eben nur der Text zu der Exception
Wird die Exception via MESSAGE RAISING ausgelöst, sind ja die SY-Felder für die Message bereits mit einer "richtigen" Werten gefüllt.
Beim GUI_DOWNLOAD wird m.W. immer über MESSAGE RAISING die Exception ausgelöst, so dass man sich nicht die Mühe einer eigenen Fehlernachricht machen muss.
Gruß Hendrik

Re: MESSAGE passend zur EXCEPTION generieren

Beitrag von Alexander D. (Expert / 682 / 30 / 84 ) »
JHM hat geschrieben:
Alexander D. hat geschrieben: Wird die Exception via MESSAGE RAISING ausgelöst, sind ja die SY-Felder für die Message bereits mit einer "richtigen" Werten gefüllt.
Beim GUI_DOWNLOAD wird m.W. immer über MESSAGE RAISING die Exception ausgelöst, so dass man sich nicht die Mühe einer eigenen Fehlernachricht machen muss.
das stimmt natürlich auch wieder. So wie es aussieht wird diese Vorgehensweise aber nicht durchgehalten, auch nicht im GUI_DOWNLOAD. Man findet im Baustein beide Varianten:

Code: Alles auswählen.

message i013(pc) raising no_authority.
raise invalid_type.
in anderen Bausteinen wird das sicherlich auch nicht anders sein
schöne Grüße
Alexander

ECC 6.0 EHP 7

Re: MESSAGE passend zur EXCEPTION generieren

Beitrag von Alexander D. (Expert / 682 / 30 / 84 ) »
JHM hat geschrieben: Wird die Exception via MESSAGE RAISING ausgelöst, sind ja die SY-Felder für die Message bereits mit einer "richtigen" Werten gefüllt.
Beim GUI_DOWNLOAD wird m.W. immer über MESSAGE RAISING die Exception ausgelöst, so dass man sich nicht die Mühe einer eigenen Fehlernachricht machen muss.
wo wir doch gerade beim Thema waren, hier ein Beispiel dass diese Vorgehensweise auch ihre Tücken haben kann. Frisch aus einem Dump eines von uns gekauften Programms:

Code: Alles auswählen.

* Batchinput-Objekt: Löschen
    call function 'BDC_OBJECT_DELETE'
         exporting
              queue_id         = queue_id
         exceptions
              not_found        = 1
              invalid_datatype = 2
              others           = 3.

    if sy-subrc <> 0.
      message id sy-msgid type sy-msgty number sy-msgno  "<---- Abbruchstelle
              with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    endif.
Der Baustein erzeugt keine Message, sondern RAIST die Exceptions nur, die Message-Variablen werden demnach nicht vorbelegt. Beim Versuch eine Message auszugeben bekommen wir den Dump MESSAGE_TYPE_UNKNOWN mit der Beschreibung "Message-Typ " " ist nicht bekannt".
schöne Grüße
Alexander

ECC 6.0 EHP 7

Seite 1 von 1

Vergleichbare Themen

8
Antw.
4966
Views
Exception ?
von simethandreas » 21.10.2009 14:15 • Verfasst in ABAP® für Anfänger
8
Antw.
725
Views
Exception - MSG
von HH_ABAP » 20.06.2023 08:15 • Verfasst in ABAP® für Anfänger
2
Antw.
2660
Views
BSP Exception
von Moksha » 04.03.2005 12:14 • Verfasst in Web-Dynpro, BSP + BHTML
1
Antw.
2384
Views
com.sap.mw.jco.JCO$Exception: (102) RFC_ERROR_COMMUNICATION
von cschmoel » 18.10.2012 09:12 • Verfasst in Basis
1
Antw.
1911
Views
Exception in BOR Methode
von winter06 » 04.03.2007 19:48 • Verfasst in ABAP Objects®

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.

Unbeantwortete Forenbeiträge

Daten an Tabelle binden
vor 3 Tagen von Bright4.5 1 / 778
aRFC im OO-Kontext
vor 4 Wochen von ralf.wenzel 1 / 2396
Hilfe bei SWEC/SWE2
September 2024 von retsch 1 / 8983