Fehler bei CATCH-Abfangung

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

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

Fehler bei CATCH-Abfangung

Beitrag von STDIN (ForumUser / 39 / 16 / 0 ) »
Hallo zusammen,

über einen Selection-Screen übergebe ich meinen Report einen Dateipfad. Um zunächst zu überprüfen ob dieses Verzeichnis existiert, verwende ich die Klasse cl_hcs_directory_access und die dazugehörige Methode directory_exists. Dies funktioniert auch soweit, bis ich versuche den CATCH abzufangen. Das heißt, wenn ich ein existierendes Verzeichnis übergebe, bekomme ich eine Fehlermeldung, dass ein Fehler während des Zugriffs auf mein Verzeichnis aufgetreten ist. Wenn ich es debugge, komme ich innerhalb der Klasse auf den Fehler: Last dir scan has not be finished.
Kann mir jemand weiterhelfen, was ich beim Abfangen des CASE falsch mache?

Code: Alles auswählen.

DATA: ld_text TYPE string.
DATA: lr_catch TYPE REF TO cx_hcs_directory_access_error.

TRY.
      CALL METHOD cl_hcs_directory_access=>directory_exists
        EXPORTING
          i_name   = pp_filepath
        RECEIVING
          r_exists = lv_r_exists.
    CATCH cx_hcs_directory_access_error INTO lr_catch.
      ld_text = lr_catch->get_text( ).
ENDTRY.

Vielen Dank schon mal. :)
Zuletzt geändert von STDIN am 02.04.2020 13:28, insgesamt 2-mal geändert.

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


Re: Fehler bei CATCH-Abfangung

Beitrag von STDIN (ForumUser / 39 / 16 / 0 ) »
Beim Aufruf von get_longtext( ) statt get_text( ) funktioniert es.

Aber kann mir evtl. jemand erklären, warum es bei der Verwendung von get_text( ) zu einem Fehler kommt?



Da war ich wohl zu schnell mit der Lösung...

Update: Beim Aufruf von get_longtext( ) statt get_text( ) funktioniert es einmal und einmal nicht.

Re: Fehler bei CATCH-Abfangung

Beitrag von jocoder (Specialist / 338 / 3 / 101 ) »
Das mit dem Aufruf get_longtext() oder get_text() hat nichts mit der Fehlerursache zu tun.
Der Fehler hat vermutlich eher damit zu tun, dass die C-Funktion C_DIR_READ_FINISHED nicht ordnungsgemäß abgeschlossen wurde. Was liefert denn ein Breakpoint vor der C-Funktion C_DIR_READ_START (Variablen l_errno, l_errmsg)?

Re: Fehler bei CATCH-Abfangung

Beitrag von STDIN (ForumUser / 39 / 16 / 0 ) »
jocoder hat geschrieben:
02.04.2020 14:17
Das mit dem Aufruf get_longtext() oder get_text() hat nichts mit der Fehlerursache zu tun.
Der Fehler hat vermutlich eher damit zu tun, dass die C-Funktion C_DIR_READ_FINISHED nicht ordnungsgemäß abgeschlossen wurde. Was liefert denn ein Breakpoint vor der C-Funktion C_DIR_READ_START (Variablen l_errno, l_errmsg)?

Kann ich momentan leider nicht sagen, da es mittlerweile dauerhaft klappt (ohne, dass ich etwas weiter verändert habe).

Re: Fehler bei CATCH-Abfangung

Beitrag von STDIN (ForumUser / 39 / 16 / 0 ) »
Ich wollte eben einen Fehlerfall abfangen und habe deswegen ein nicht existierendes Verzeichnis angegeben. Während des debuggens erkennt er, dass das Verzeichnis nicht existiert (C_DIR_READ_START):

L_ERRNO: 2
L_ERRMSG: opendir: No such file or directory

Allerdings springt er nachfolgend in meinem Report über den Catch hinweg und führt das Programm trotzdem aus.

Re: Fehler bei CATCH-Abfangung

Beitrag von edwin (Specialist / 300 / 9 / 68 ) »
Hi,
schaue dir mal den Rückgabeparameter R_EXISTS an, da bekommst du mitgeteilt, ob das Verzeichnis existiert oder nicht, die Exception CX_HCS_DIRECTORY_ACCESS_ERROR wird bei nicht existierendem Verzeichnis nicht geworfen. Schau Dir mal den CATCH Block der Methode "DIRECTORY_EXISTS" und da steht :
IF l_exception->textid <> cx_hcs_directory_access_error=>directory_could_not_be_read. RAISE EXCEPTION..

Code: Alles auswählen.

...
    CATCH cx_hcs_directory_access_error INTO l_exception.
      IF l_exception->textid <> cx_hcs_directory_access_error=>directory_could_not_be_read.
        RAISE EXCEPTION TYPE cx_hcs_directory_access_error
          EXPORTING
            previous      = l_exception
            directoryname = i_name.
      ENDIF
...
die Exception CX_HCS_DIRECTORY_ACCESS_ERROR wird nur bei schwerwiegenden Fehlern geworfen, siehe die Methode "GET_DIRECTORY_CONTENT" eine Stufe tiefer:

Code: Alles auswählen.

...
    when 2 or " Cannot use that pattern.
         3 or " Internal error.
         4.   " Last dir scan has not be finished.
      l_subrc = sy-subrc.
      raise exception type cx_hcs_directory_access_error
        exporting
          textid        = cx_hcs_directory_access_error=>internal_error
          internalerror = l_subrc
          errno         = l_errno
          errmsg        = l_errmsg.
..
* oder bei :
    call 'C_DIR_READ_NEXT' id 'TYPE'   field l_type        "#EC CI_CCALL
                           id 'NAME'   field l_name
                           id 'LEN'    field l_len
*                           ID 'OWNER'  FIELD l_owner
                           id 'MTIME'  field l_mtime
*                           ID 'MODE'   FIELD l_mode
                           id 'ERRNO'  field l_errno
                           id 'ERRMSG' field l_errmsg.

    case sy-subrc.

      when 1.   " No more slots available.
        exit.

      when 3.   " Internal error.
          l_subrc = sy-subrc + 10.
          raise exception type cx_hcs_directory_access_error
            exporting
              textid        = cx_hcs_directory_access_error=>internal_error
              internalerror = l_subrc
              errno         = l_errno
              errmsg        = l_errmsg.
...
willst du die Exception haben, solltest du direkt cl_hcs_directory_access=>get_directory_content aufrufen, dann bekommst du sie auch

/Edwin

Folgende Benutzer bedankten sich beim Autor edwin für den Beitrag:
STDIN


Re: Fehler bei CATCH-Abfangung

Beitrag von STDIN (ForumUser / 39 / 16 / 0 ) »
Aso, ich verstehe. Vielen Dank. :)

Seite 1 von 1

Vergleichbare Themen

4
Antw.
2945
Views
TRY-CATCH für Blockinsert
von 3xplor3r » 25.05.2016 08:57 • Verfasst in ABAP® für Anfänger
4
Antw.
1670
Views
Aus Catch zurückkehren
von ostpower » 21.07.2014 14:21 • Verfasst in ABAP® für Anfänger
1
Antw.
983
Views
TRY CATCH RETRY ENDTRY
von SAP_ENTWICKLER » 09.02.2015 12:16 • Verfasst in ABAP® Core
0
Antw.
1194
Views
Fehler
von Romantica » 09.07.2007 14:15 • Verfasst in ABAP® für Anfänger
2
Antw.
4284
Views
BAPI_BUPA_CENTRAL_CHANGE Fehler
von ABAP_User » 17.10.2012 13:12 • Verfasst in ABAP® Core

Ü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

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

Zwischensumme Adobe Forms
vor 4 Tagen von Lucyalison 1 / 71
Group Items auf einer Filterbar
vor einer Woche von Bright4.5 1 / 111
tRFC Transaktionen SM58
vor 4 Wochen von A6272 1 / 141