Exceptions und Vererbung

Getting started ... Alles für einen gelungenen Start.
3 Beiträge / Seite 1 von 1
3 Beiträge Seite 1 von 1

Exceptions und Vererbung

Beitrag von SaskuAc (Specialist / 246 / 18 / 27 ) » 8. Nov 2018 13:43

Hallo miteinander,

ich bin etwas verwirrt. ( wie so oft )
Wir haben einen Report, der die Entgeltnachweise der Mitarbeiter verschlüsselt übermittelt. Läuft soweit auch ganz gut. Nun haben wir allerdings einen Dump bekommen. Die Fehlerursache habe ich schon herausgefunden - und zwar war es eine ungültige E-Mail Adresse ( kein @ ).

In diesem Fall wird die Exception "CX_ADDRESS_BCS" geworfen.

Was mich jetzt verwirrt ist, wir haben im programm die Methode "set_recipient":

Code: Alles auswählen.

    IF iv_smtpadr IS NOT INITIAL.

      mo_send_request->add_recipient(
        i_recipient  = cl_cam_address_bcs=>create_internet_address( iv_smtpadr )
        i_copy       = iv_cc
        i_blind_copy = iv_bcc ).

      mv_recipient = iv_smtpadr.

    ELSEIF iv_uname IS NOT INITIAL.

      mo_send_request->add_recipient(
        i_recipient  = cl_sapuser_bcs=>create( iv_uname )
        i_copy       = iv_cc
        i_blind_copy = iv_bcc ).

      mv_recipient = iv_uname.

    ENDIF.

  ENDMETHOD.    
Hier wird die Exception geworfen. Nun ist es aber so, dass ich beim Aufruf der Methode die Exception "CX_BCS" - die Superklasse von "CX_ADDRESS_BCS" - abfange.. ungefähr so:

Code: Alles auswählen.

""" some stuff 
try. 
   " some stuff
   go_mail->set_recipient( iv_smtpadr = p_smailc ) 
   " some stuff 
 catch cx_bcs into data(exc). 
" some stuff 
endtry. 
Meine Vermutung ist, dass der dump aufkommt, weil in der Definition der Methode kein Raising geschrieben wurde ( also in der set_recipient Methode ) und er dann einfach abbricht, obwohl im Stack drüber ein Exception Handling stattfindet.

Nun 1. Ist meine Vermutung korrekt? Weil wenn nein, wenn er die Exception nach oben reichen sollte, dann müsste doch der Catch-Block mit CX_BCS abfangen, oder?
2. Und das ist jetzt generell die Frage, fängt in ABAP eigentlich auch die Super-/Oberklasse alle exceptions ab die in der Vererbungshierarchie unter ihr stehen? ( Sollte ja eigentlich durch die OO-Beziehung "Ist ein" der Fall sein )


Re: Exceptions und Vererbung

Beitrag von black_adept (Top Expert / 3217 / 54 / 559 ) » 8. Nov 2018 15:33

Moin SaskuAc,

@1) Vermutlich nicht. [ zur 2. Frage in 1): Wenn die Prämisse schon falsch ist, kann jede beliebige Folgerung gezogen werden ]
@2) Ja

Nachtrag zu 1) Der typische Fehler hier ist, dass in einer der Methoden in der Aufrufhierarchie zwischen deinem TRY-CATCH-Block und dem RAISE EXCEPTION vergessen wurde die Exception bekannt zu machen, so dass das Weiterreichen der Ausnahme nicht durchgängig ist. Bei dir wäre das wahrscheinlich die Methode SET_RECIPIENT
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Exceptions und Vererbung

Beitrag von ralf.wenzel (Top Expert / 3372 / 146 / 213 ) » 9. Nov 2018 08:11

Ich hoffe, ich habe die Frage richtig verstanden. Eine Ausnahme (oder eine Oberklasse dieser Ausnahme) muss aus aus der Schnittstelle der Methode hervorgehen, sonst wird sie nicht weitergereicht und ist ein ungefangene Ausnahme.Dann knallt das. Und ja, die Vererbung hat unter anderem den Sinn, dass der Eintrag einer Ausnahmeklasse alle Subklassen mit einschließt.


Ralf

Seite 1 von 1

Aktuelle Forenbeiträge

Business Partner Konzept
vor 2 Stunden von msfox 3 / 218
Exception Handling FuBa test
vor 9 Stunden von ichse18577 1 / 40
CDS-Views / AMDP für HCM
vor 13 Stunden von RaCDigger 6 / 316
Kreditlimitprüfung Obligo
vor 17 Stunden von SAP_ENTWICKLER 3 / 163

Unbeantwortete Forenbeiträge

Exception Handling FuBa test
vor 9 Stunden von ichse18577 1 / 40
Verursachervormerkung OCM manuell anlegen
vor 6 Tagen von Aba 1 / 127
Auflösen MILL_OC - Auftragszusammenfassung
vor einer Woche von tofralu 1 / 109
Löschen von archivierten Drucklisten
vor einer Woche von Asaph 1 / 99