Übung Schrödinger: 11 Ausnahmen (ABAP)

Aus MattWiki
Version vom 13. April 2018, 21:01 Uhr von Matt (Diskussion | Beiträge) (Die Seite wurde neu angelegt: „Nachfolgend finden sich drei Listings aus den Übungsaufgaben zum Thema Ausnahmen aus Kapitel 11 des Buchs "Schrödinger programmiert ABAP". == Arten von Ausn…“)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)

Nachfolgend finden sich drei Listings aus den Übungsaufgaben zum Thema Ausnahmen aus Kapitel 11 des Buchs "Schrödinger programmiert ABAP".

Arten von Ausnahmen

Ausnahmen können auf drei wegen erzeugt werden:

  1. EXCEPTIONS-Parameter abgefangen mit SY-SUBRC
  2. CATCH SYSTEM-EXCEPTIONS (Obsolet)
  3. Ausnahmeklasse

EXCEPTIONS mit SUBRC

REPORT zsch_matt_exc.

DATA: gd_icon TYPE string VALUE 'ICON_GREEN_LIGHT',
      gd_result TYPE string.

START-OF-SELECTION.

  CALL FUNCTION 'ICON_CREATE'
    EXPORTING
      name                  = gd_icon
    IMPORTING
      result                = gd_result
    EXCEPTIONS
      icon_not_found        = 1
      outputfield_too_short = 2
      OTHERS                = 3.

  CASE sy-subrc.
    WHEN 0.
      WRITE: / 'Icon gefunden:', gd_result.
    WHEN 1.
      WRITE: / 'Icon nicht gefunden.'.
    WHEN 2.
      WRITE: / 'Output-Feld zu klein.'.
    WHEN OTHERS.
      WRITE: / 'Es ist eine unbekannte Ausnahme aufgetreten.'.
  ENDCASE.

Ausnahmeklassen

EXCEPTIONS-Übungsbeispiel mit Internetzugriff und Interfaces

Programm zum Aufruf einer API per HTTP, die eine Antwort in Form von JSON liefert.

Dabei werden die Exceptions der einzelnen Schritte jeweils abgefangen.

REPORT zsch_matt_exc_getit.

* Verbindungsdaten
DATA: gr_client TYPE REF TO if_http_client, "Client für Anfrage
      gd_host TYPE string VALUE 'openlibrary.org', "Datenquelle
      gd_service TYPE string VALUE '80', "HTTPS-Port
      gd_path TYPE string VALUE '/api/books?bibkeys=ISBN:9781592293117&jscmd=data&format=json',
      gd_errortext TYPE string, "Fehlertext der Anfrage
      gd_timeout TYPE i, "Langläufer?
      gd_subrc LIKE sy-subrc. "Fehler bei Anfrage

* Datenausgabe
DATA: gd_data TYPE string, "Die Daten vom Response
      gt_fields TYPE tihttpnvp, "Felder aus dem Header
      gs_field LIKE LINE OF gt_fields,
      gt_data TYPE stringtab, "Zerhackte Ergebnisdaten
      gs_data LIKE LINE OF gt_data.

* Hauptprogramm
START-OF-SELECTION.

* Client-Objekt für die Kommunikation instanzieren
  CALL METHOD cl_http_client=>create
    EXPORTING
      host               = gd_host
      service            = gd_service
      scheme             = cl_http_client=>schemetype_http
    IMPORTING
      client             = gr_client
    EXCEPTIONS
      argument_not_found = 1
      plugin_not_active  = 2
      internal_error     = 3
      OTHERS             = 4.
  IF sy-subrc <> 0.
    WRITE: / 'Initialisierung des Clients fehlgeschlagen, subrc = ',sy-subrc.
    EXIT.
  ENDIF.

* Request-Methode auf GET setzen
  CALL METHOD gr_client->request->set_method(
    if_http_request=>co_request_method_get ).

* Protokollversion HTTP/1.0 setzen
  gr_client->request->set_version(
    if_http_request=>co_protocol_version_1_0 ).

* Request-URI setzen
  cl_http_utility=>set_request_uri(
    request = gr_client->request
    uri = gd_path ).

* Senden des Requests
  CALL METHOD gr_client->send
    EXPORTING
      timeout                    = gd_timeout
    EXCEPTIONS
      http_communication_failure = 1
      http_invalid_state         = 2
      http_processing_failed     = 3
      OTHERS                     = 4.

* Fehlerbehandlung
  IF sy-subrc <> 0.
    CALL METHOD gr_client->get_last_error
      IMPORTING
        code    = gd_subrc
        message = gd_errortext.
    WRITE: / 'Kommunikationsfehler beim send',
           / 'Fehlercode: ', gd_subrc, 'Fehlernachricht: ', gd_errortext.
    EXIT.
  ENDIF.

* Empfangen der Ergebnisse
  CALL METHOD gr_client->receive
    EXCEPTIONS
      http_communication_failure = 1
      http_invalid_state         = 2
      http_processing_failed     = 3
      OTHERS                     = 4.
  IF sy-subrc <> 0.
    CALL METHOD gr_client->get_last_error
      IMPORTING
        code    = gd_subrc
        message = gd_errortext.
    WRITE: / 'Kommunikationsfehler beim receive',
           / 'Fehlercode: ', gd_subrc, 'Fehlernachricht: ', gd_errortext.
    EXIT.
  ENDIF.

* Ausgabe der Daten
* Header-Daten der Übertragung
  CALL METHOD gr_client->response->get_header_fields
    CHANGING
      fields = gt_fields.

* Ausgabe der Header Fields auf Standardliste
  ULINE.
  WRITE: / 'Header Fields'.
  ULINE.
  LOOP AT gt_fields INTO gs_field.
    WRITE: / 'header_name', gs_field-name, 'header_value', gs_field-value.
  ENDLOOP.

* Response-Daten ermitteln aus Response-Objekt
  gd_data = gr_client->response->get_cdata( ).

  ULINE.
  WRITE: / 'Data'.
  ULINE.
  SPLIT gd_data AT '{' INTO TABLE gt_data.
  LOOP AT gt_data INTO gs_data.
    WRITE: / gs_data.
  ENDLOOP.

* Schließen der Verbindung
  CALL METHOD gr_client->close
    EXCEPTIONS
      http_invalid_state = 1
      OTHERS             = 2.
  IF sy-subrc <> 0.
    CALL METHOD gr_client->get_last_error
      IMPORTING
        code    = gd_subrc
        message = gd_errortext.
    WRITE: / 'Kommunikationsfehler beim close',
           / 'Fehlercode: ', gd_subrc, 'Fehlernachricht: ', gd_errortext.
    EXIT.
  ENDIF.