Ausnahmenbehandlung

Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

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

Ausnahmenbehandlung

Beitrag von melindareiz (ForumUser / 5 / 1 / 0 ) »
Halli Hallo,
ich bin ganz neu im Abap und habe Probleme mit Ausnahmenbehandlung. Und zwar, in meinem Prorgramm soll ich eine Nachricht ausgeben, falls beim aufrufen einer Form(PERFORM) eine Exception ensteht. Das Problem ist jedoch das ist nicht die richtige Nachricht ausgegeben wird.
Hier die Code!

Aufrufen der Form ARTDAT_LESEN:

Code: Alles auswählen.

MODULE ARTDAT_LESEN INPUT.

TRY.
TRY .
  PERFORM ARTDAT_LESEN CHANGING zxx_ARTIKEL.
*CATCH ZCX_XX_EXCEPTION INTO g_excref.
  CATCH ZCX_XX_EXCEPTION INTO g_excref.

*  sy-msgid = 'ZXX_ARTIKELM'.

*  imp_msg-msgid = 'ZXX_ARTIKELM'.
*  imp_msg-msgty = 'E'.
*  imp_msg-msgno = 001.


  MESSAGE ID 'ZXX_ARTIKEL' TYPE 'E' NUMBER 001 WITH zxx_artikel-art_nr INTO imp_msg-msgv1.


     g_excref->set_msg( EXPORTING im_msg =  imp_msg ).
     G_EXCREF->get_msg(  ).

     err_text = g_excref->get_text( ).
  MESSAGE err_text TYPE 'E'.
ENDTRY.
CATCH CX_ROOT INTO g_cx_root.
  err_text = g_cx_root->get_text( ).
  WRITE / err_text.
ENDTRY.


Der Form ARTDAT_LESEN:

FORM ARTDAT_LESEN CHANGING ZXX_ARTIKEL TYPE ZXX_ARTIKEL RAISING ZCX_XX_EXCEPTION.


data: kl_objekt TYPE REF TO ZCX_XX_EXCEPTION.

  IF NOT ZXX_ARTIKEL-ART_NR IS INITIAL.
    SELECT SINGLE *
      FROM ZXX_ARTIKEL

      INTO ZXX_ARTIKEL
      WHERE ART_NR = ZXX_ARTIKEL-ART_NR.

  ENDIF.

  IF SY-SUBRC <> 0.

    RAISE EXCEPTION TYPE zcx_xx_exception.


     kl_objekt->get_msg( ).


  ENDIF.


ENDFORM.                    " ARTDAT_LESEN


GET_MSG und SET_MSG Methode:

method SET_MSG.

  create object g_cl_msg EXPORTING im_msg = im_msg.

endmethod.


method GET_MSG.
  DATA: iv_art_nr TYPE z_xx_art_nr.

ex_cl_msg = g_cl_msg.
 ex_cl_msg->show_msg( EXPORTING iv_art_nr = iv_art_nr ).
endmethod.

Und ich kriege diese Meldung, wenn ich den Artikelnummer in einem Field eingebe.

Der Artikel mit Atzikelnummer 0000 existiert nicht.
Anstatatt 0000 sollte von dem Benutzer eingebenene Nummer erscheinen.

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


Re: Ausnahmenbehandlung

Beitrag von melindareiz (ForumUser / 5 / 1 / 0 ) »
Und die Show_msg Methode, zxx_artikel ist eine Nachrichtenklasse

method SHOW_MSG.
MESSAGE E001(zxx_artikel) WITH IV_ART_NR.
endmethod.

Re: Ausnahmenbehandlung

Beitrag von sapnup (ForumUser / 42 / 14 / 12 ) »
Hi Melinda,

eigentlich bist du fast am Ziel. D.h. wenn es im Form einen Exception gibt, dann wird eine Nachricht ausgegeben. Für mich sieht es so aus, dass deine Benutzereingabe nicht in der Struktur ZXX_ARTIKEL landet. ZXX_ARTIKEL-ART_NR hat wohl den Initialwert 000 und das bekommst du auch in deiner Nachricht zu sehen.

Die Zeile "kl_objekt->get_msg( )." kannst du dir sparen, da nach einem RAISE EXCEPTION jeglicher Code ignoriert wird bis ein passender CATCH block gefunden wurde. In deinem Fall ist es der Catch block "CATCH ZCX_XX_EXCEPTION INTO g_excref.", da wird auch die Nachricht generiert, so wie du sie siehst.

Setz bei "PERFORM ARTDAT_LESEN CHANGING zxx_ARTIKEL." einen Brakepoint und doppelklick im Debugger auf " zxx_ARTIKEL". Wenn im Feld ART_NR 0000 steht, dann wird auch in der Nachricht nichts anderes stehen. Dein Problem scheint also irgendwo vorher zu liegen.

MfG

PS: dir fehlt ein [/code] oberhalb von "Und ich kriege diese Meldung, wenn ich den Artikelnummer in einem Field eingebe.".

Folgende Benutzer bedankten sich beim Autor sapnup für den Beitrag:
melindareiz


Re: Ausnahmenbehandlung

Beitrag von melindareiz (ForumUser / 5 / 1 / 0 ) »
Hallo,
zuerst Danke für die Erklärungen.
Ich habe dein Ratschlag befolgt und beim Debugging enthält der Feld ART_NR den Wert, den ich als Benutzer im Dynpro als Artikelnummer eingebe.
Ich hab grade bemerkt, in der GET_MSG-Methode: exporting iv_art_nr = ....<-hier sollte der Inhalt des Feldes zxx_artikel-art_nr stehen.
Das Feld im Screen 0100 deklariert worden:
FIELD ZXX_ARTIKEL-ART_NR MODULE ARTDAT_LESEN ON REQUEST.
Ich weiss nun nicht,wie ich den Inhalt dieses Feldes auslesen kann.

Die Anweisung:

Code: Alles auswählen.

ex_cl_msg->Show_msg( EXPORTING iv_art_nr = zxx_artikel-art_nr ).
funktioniert nicht!
Vielen Dank

Seite 1 von 1

Über diesen Beitrag


Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

Unterstütze die Community und teile den Beitrag für mehr Leser und Austausch

Aktuelle Forenbeiträge

Zugriff auf Daten via Webdav
vor 15 Stunden von msfox 1 / 31
Interne Tabelle
vor 16 Stunden von sap_enthusiast 3 / 162
Zwischensumme Adobe Forms
vor 3 Tagen von Lucyalison 1 / 71

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.

Aktuelle Forenbeiträge

Zugriff auf Daten via Webdav
vor 15 Stunden von msfox 1 / 31
Interne Tabelle
vor 16 Stunden von sap_enthusiast 3 / 162
Zwischensumme Adobe Forms
vor 3 Tagen von Lucyalison 1 / 71

Unbeantwortete Forenbeiträge

Zugriff auf Daten via Webdav
vor 15 Stunden von msfox 1 / 31
Zwischensumme Adobe Forms
vor 3 Tagen von Lucyalison 1 / 71
Group Items auf einer Filterbar
vor einer Woche von Bright4.5 1 / 111