Ausnahmen abfangen

Die Objektorientierung mit ABAP®: Vererbung, Dynamische Programmierung, GUI Controls (u.a. ALV im OO).
13 Beiträge • Seite 1 von 1
13 Beiträge Seite 1 von 1

Ausnahmen abfangen

Beitrag von dawns (ForumUser / 99 / 0 / 0 ) »
Hi, mit der Klasse cl_gui_alv_tree lese ich unten den Inhalt eines knotens aus. nun existiert dieser knoten nicht mehr und es wird die Ausnahme node_not_found geschmissen. wie kann ich diese nun abfangen?
würde die ausnahme gerne abfangen und den knoten dann einfach erstellen.

* read parent-node (with new cons.no)
CALL METHOD ref_work->get_outtab_line
EXPORTING
i_node_key = <ls_soko_node>-node_start
IMPORTING
e_outtab_line = ls_line.


ich dachte das das irgendwie so funktioniert:
CATCH node_not_found.
....
endcatch.

aber er erkennt die ausnahme "node_not_found" nicht...?

danke im voraus
mfg dawns

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


Beitrag von DeathGuardian (Expert / 759 / 0 / 3 ) »
Probiers mal so:

Code: Alles auswählen.

CALL METHOD ref_work->get_outtab_line 
EXPORTING 
i_node_key = <ls_soko_node>-node_start 
IMPORTING 
e_outtab_line = ls_line
EXCEPTIONS
NODE_NOT_FOUND = 1
OTHERS = 2 .
IF sy-subrc NE 0.
* hier was machen
ENDIF.

Beitrag von dawns (ForumUser / 99 / 0 / 0 ) »
hab ich schon. da kommt aber der gewohnte programmabbruch. also ich komme erst gar nicht zu der if-abfrage...
habt ihr sonst noch ideen... zumindest wie fange ich ausnahmen ab...?

Beitrag von DeathGuardian (Expert / 759 / 0 / 3 ) »
Die Ausnahme NODE_NOT_FOUND ist ja eine Ausnahme der Methode wo du aufrufst und die kann man nur so abfangen wie ich es in meinem letzten Post gezeigt habe, nämlich über die Exceptions-Parameter.
Eine Anere Möglichkeit gibt es nicht.

Die Exceptions sorgen nämlich dafür, das kein Dump entsteht und man selber eingreifen kann, da dank diesen "nur" der sy-subrc geändert wird.

Code: Alles auswählen.

*start deines codings
CALL METHOD ref_work->get_outtab_line 
EXPORTING 
i_node_key = <ls_soko_node>-node_start 
IMPORTING 
e_outtab_line = ls_line  "hier Punkt weg
*ende deines Codings / start dessen was du anhängen musst
EXCEPTIONS 
NODE_NOT_FOUND = 1 
OTHERS = 2 . 
IF sy-subrc NE 0. 
* hier was machen 
ENDIF. 

Beitrag von uh (Specialist / 158 / 0 / 1 ) »
Hallo dawns,

so wie es DG geschrieben hat, stimmt das. Möglich wäre aber noch, dass deine Methode weitere Methoden/Funktionen aufruft, die die gleiche Ausnahme erzeugen. Wenn dann der Aufrufer diese Ausnahme nicht behandelt, bricht das Programm an der Stelle ab. D.h. die Ausnahme muss vom direkten Aufrufer behnadelt werden.
Wenn du den Dump aus der ST22 postest, könnten wir evtl. erkennen, ob das der Grund ist.

Grüße

Udo

Beitrag von ralf.wenzel (Top Expert / 3920 / 199 / 280 ) »
uh hat geschrieben:so wie es DG geschrieben hat, stimmt das. Möglich wäre aber noch, dass deine Methode weitere Methoden/Funktionen aufruft, die die gleiche Ausnahme erzeugen. Wenn dann der Aufrufer diese Ausnahme nicht behandelt, bricht das Programm an der Stelle ab. D.h. die Ausnahme muss vom direkten Aufrufer behnadelt werden.
Wenn du den Dump aus der ST22 postest, könnten wir evtl. erkennen, ob das der Grund ist
Genau das wollte ich auch antworten, das ist wohl die Ursache. Und wenn schon zwei der Meinung sind, kann das so falsch nicht sein.



Ralf
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Beitrag von DeathGuardian (Expert / 759 / 0 / 3 ) »
uh hat geschrieben:Hallo dawns,

so wie es DG geschrieben hat, stimmt das. Möglich wäre aber noch, dass deine Methode weitere Methoden/Funktionen aufruft, die die gleiche Ausnahme erzeugen. Wenn dann der Aufrufer diese Ausnahme nicht behandelt, bricht das Programm an der Stelle ab. D.h. die Ausnahme muss vom direkten Aufrufer behnadelt werden.
Wenn du den Dump aus der ST22 postest, könnten wir evtl. erkennen, ob das der Grund ist.

Grüße

Udo
In dem Fall, müsstest dann mal das OSS danach durchforsten ;)

Beitrag von dawns (ForumUser / 99 / 0 / 0 ) »
besten dank :)
ihr seit dir besten
thx
Zuletzt geändert von dawns am 20.05.2008 13:43, insgesamt 1-mal geändert.

Beitrag von uh (Specialist / 158 / 0 / 1 ) »
Hallo Dawns,

wo ist das Wichtigste???????

Beim Quellcode wird die Abbruchstelle genau markiert. Beispiel:

26 MESSAGE ID 'CNDP' TYPE 'X' NUMBER 007 RAISING CNTL_SYSTEM_ERROR.
27 WHEN 2.
28 * method_call_error
>>>>> MESSAGE ID 'CNDP' TYPE 'X' NUMBER 006 RAISING CNTL_ERROR.
30 WHEN 3.

Bei der Zeile mit ">>>>>" liegt der Hase im Pfeffer.

Bitte noch einmal posten..

Total gespannt

Udo

Beitrag von dawns (ForumUser / 99 / 0 / 0 ) »
habs nun, wie oben geschrieben funktioniert es. ich hatte etwas überlesen :(

danke nochmals :)

Beitrag von uh (Specialist / 158 / 0 / 1 ) »
Ich könnte darauf wetten, was du überlesen hast. Bei uns wäre das ein klarer Fall für die Kaffeekasse!!!

Grüße und Kopf hoch

Udo

Beitrag von dawns (ForumUser / 99 / 0 / 0 ) »
@Udo, euch 2 Euro für die Kaffeetasse rüberwerf, es wird nicht mehr vorkommen^^

Nun habe ich erneut das Problem, es wird jetzt allerdings die Ausnahme "relat_node_not_found" der Klasse CL_GUI_ALV_TREE (Methode: add_node) geworfen.

Code: Alles auswählen.

*               read parent-node (with new cons.no)
                CALL METHOD ref_work->get_outtab_line
                  EXPORTING
                    i_node_key     = <ls_soko_node>-node_start
                  IMPORTING
                    e_outtab_line  = ls_line
                  EXCEPTIONS
                    node_not_found = 1
                    OTHERS         = 2.
                IF sy-subrc NE 0. "node was deleted
*                 create folder
                  CONCATENATE text-007 <ls_soko_node>-node_name INTO
                              lv_node_text SEPARATED BY space.
                  <ls_soko_node>-soko-/lot/refnr = <ls_soko_node>-node_name.
                  ls_node_layout-dragdropid = handle_drop.
*                 add node
                  CALL METHOD ref_work->add_node
                    EXPORTING
                      i_relat_node_key     = <ls_soko_node>-node_start
                      i_relationship       = cl_gui_column_tree=>relat_last_child
                      is_outtab_line       = <ls_soko_node>-soko
                      i_node_text          = lv_node_text
                      is_node_layout       = ls_node_layout
                    IMPORTING
                      e_new_node_key       = ls_selected_node
                    EXCEPTIONS
                      relat_node_not_found = 1
                      node_not_found       = 2
                      OTHERS               = 3.
                  IF sy-subrc IS NOT INITIAL.
                    BREAK-POINT.
                  ENDIF.
ST22:

Ausnahmebedingung "RELAT_NODE_NOT_FOUND" ausgelöst

Was ist passiert?
Das laufende ABAP-Programm ist auf eine nicht vorhergesehene Situation
gestoßen.

Fehleranalyse
In dem Programm "CL_ALV_TREE_BASE==============CP" wurde durch eine
RAISE-Anweisung die Exception
(Ausnahmebedingung) "RELAT_NODE_NOT_FOUND" ausgelöst.
Da die Exception nicht durch ein in der Aufrufhierarchie darüber-
liegendes Programm abgefangen ist, wurde die Verarbeitung abgebrochen.

Kurztext zur Ausnahmebedingung:
Eine ausführliche Dokumentation der Ausnahmebedingung finden Sie
über Transaktion SE37 (Funktionsbibliothek). Den gerufenen
Funktionsbaustein können Sie der Anzeige der aktiven Aufrufe
entnehmen.

Quellcode:

Code: Alles auswählen.

000020   METHOD add_model_node .
000030
000040     DATA: ls_nodes_wa TYPE treev_node,
000050           ls_c_p_manager_wa TYPE c_p_manager_line,
000060           l_column_tree_node_key TYPE tv_nodekey,
000070           ls_item_layout_wa TYPE lvc_s_lyin,
000080           l_new_node_key TYPE lvc_nkey.
000090
000100     FIELD-SYMBOLS: <tab1> TYPE STANDARD TABLE.
000110
000120     ASSIGN mt_outtab->* TO <tab1>.
000130
000140   * get new node key
000150     l_new_node_key = m_node_key_count.
000160     m_node_key_count = m_node_key_count + 1.
000170
000180   * check if parent node must be set as folder
000190     IF NOT i_relat_node_key IS INITIAL.
000200       IF i_relationship = cl_gui_column_tree=>relat_first_child OR
000210          i_relationship = cl_gui_column_tree=>relat_last_child.
000220         READ TABLE mt_c_p_manager INTO ls_c_p_manager_wa
000230                     WITH TABLE KEY node_key = i_relat_node_key.
000240         IF sy-subrc <> 0.
     >           RAISE relat_node_not_found.
000260         ENDIF.
000270         IF ls_c_p_manager_wa-layout-isfolder IS INITIAL OR
000280            ls_c_p_manager_wa-layout-expander IS INITIAL.
000290           ls_c_p_manager_wa-layout-isfolder = 'X'.
000300           ls_c_p_manager_wa-layout-expander = 'X'.
000310           MODIFY TABLE mt_c_p_manager FROM ls_c_p_manager_wa
000320                                            TRANSPORTING layout-isfolder
000330                                                         layout-expander.
000340           CALL METHOD me->queue_append_node
000350                       EXPORTING i_node_key = i_relat_node_key
000360                                 i_mode     = 'U'.
000370         ENDIF.
000380       ENDIF.
000390     ENDIF.
Er springt bei mir gar nicht in die if-abfrage (siehe meine source), folglich bleibt er auch nicht beim "break-point" stehen, sondern es folgt vorher ein programmabbruch.
Was bedeutet diese Ausnahme? ich kann damit nix anfangen.. bzw, wie kann ich sie abfangen/beheben?
thx im voraus
mfg dawns

Beitrag von uh (Specialist / 158 / 0 / 1 ) »
Das ist genau die Schlamperei, von der ich schon geschrieben habe. Der direkte Aufrufer (hier ADD_NODE) sollte die Exception abfangen (und weitergeben).

Dir bleibt also nichts anderes übrig, als dafür zu sorgen, dass du die Methode ADD_NODE richtig aufrufst - ODER - Du bemühst das OSS.

Seite 1 von 1

Vergleichbare Themen

0
Antw.
1736
Views
Mehrere Ausnahmen abfangen
von Mr_Blonde » 21.11.2006 12:24 • Verfasst in ABAP® Core
17
Antw.
5338
Views
Abfangen von /h
von zzcpak » 29.06.2005 16:09 • Verfasst in Basis
0
Antw.
1246
Views
SAPSQL_INVALID_FIELDNAME abfangen?
von Darken » 17.11.2005 09:26 • Verfasst in ABAP® für Anfänger
28
Antw.
16404
Views
Benutzereingaben abfangen
von marc1 » 05.12.2005 12:41 • Verfasst in ABAP Objects®
8
Antw.
5576
Views
ALV Button abfangen
von Mr. ABAP » 16.03.2006 17:31 • Verfasst in ABAP Objects®

Über diesen Beitrag


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

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.