ABAPMultichannel Foundation for Utilities

Wie man den HTTP-Statuscode in SAP Netweaver Gateway ändert

Von 20. Januar 2020Januar 22nd, 2020Keine Kommentare

Eine Kundin hatte heute eine Frage zu OData Services, die sicher auch für andere von Interesse sein könnte. Deshalb möchte ich dieser Frage einen kurzen Blog-Beitrag widmen.
Sie fragte, ob es möglich ist, den an einen Nutzer zurückgegebenen HTTP-Statuscode zu verändern.
In Ihrem Szenario wird ein OData Service von einem externen System aufgerufen. Der OData Service prüft, ob eine Datei existiert. Da der Aufruf des OData Service immer erfolgreich ist, erhält Sie immer einen HTTP-Statuscode 200.
Sie haben eine Validierung innerhalb der Implementierung der Entität, ob die Datei existiert oder nicht, und möchten einen Statuscode 4XX statt 200 zurückgeben, wenn die Datei nicht existiert.
Dies ist möglich. In diesem Beitrag möchte ich erklären, wie das geht.

SAP Self Service Accelerator - Multichannel Foundation for Utilities - Self-Service

Was ist ein HTTP-Statuscode und warum ist er von Bedeutung?

Statuscodes werden von einem Server als Antwort auf die Anfrage eines Clients an den Server ausgegeben. HTTP-Antwortstatuscodes zeigen an, ob eine bestimmte HTTP-Anfrage erfolgreich abgeschlossen wurde. Die erste Ziffer des Statuscodes gibt die Klasse von Antworten an. Die Antworten sind in fünf Klassen gruppiert: informative Antworten, erfolgreiche Antworten, Umleitungen, Client-Fehler und Server-Fehler.

Relevant sind für uns in diesem Zusammenhang vor allem zwei Klassen.

  • 4xx Client-Fehler
    Diese Klasse des Statuscodes ist für Situationen gedacht, in denen der Fehler vom Client verursacht worden zu sein scheint. Außer bei der Beantwortung einer HEAD-Anforderung sollte der Server eine Entität enthalten, die eine Erklärung der Fehlersituation enthält und angibt, ob es sich um einen vorübergehenden oder dauerhaften Zustand handelt. Diese Statuscodes sind auf jede Anfragemethode anwendbar. Benutzer-Agenten sollten dem Benutzer jede enthaltene Entität anzeigen.
  • 5xx Server-Fehler
    Antwortstatuscodes, die mit der Ziffer „5“ beginnen, weisen auf Fälle hin, in denen der Server weiß, dass er auf einen Fehler gestoßen ist oder anderweitig nicht in der Lage ist, die Anfrage auszuführen. Außer bei der Beantwortung einer HEAD-Anforderung sollte der Server eine Entität mit einer Erklärung der Fehlersituation enthalten und angeben, ob es sich um einen vorübergehenden oder dauerhaften Zustand handelt. Ebenso sollten die Benutzeragenten dem Benutzer jede enthaltene Entität anzeigen. Diese Antwortcodes sind auf jede beliebige Anfragemethode anwendbar.

Wie man den HTTP-Status ändert, der bei einem OData-Service zurückgesendet wird

HTTP-Statuscode und SAP Netweaver Gateway

Innerhalb des SAP Netweaver Gateway wird der HTTP-Statuscode direkt aus dem Framework gesetzt. Das bedeutet, dass Statuscodes auch direkt aus dem Framework gesetzt werden können, was unseren Statuscode überschreiben kann.

Wir sollten uns daher bewusst sein, dass wir die Situationen immer testen, um unerwartete Situationen zu vermeiden.

HTTP-Statuscode für OData in ABAP programmatisch setzen

Du kannst Statuscodes, z.B. der Klassen 4XX und 5XX, über Ausnahmen steuern. Die Klasse 4XX entspricht geschäftlichen Ausnahmen, während die Klasse 5XX den technischen Ausnahmen entspricht.

Das oben genannte Beispiel ist eher eine geschäftliche Ausnahme und könnte demnach wie folgt aussehen:

Die 4XX Status Codes werden demnach durch das Auslösen einer Ausnahme vom Typ /iwbep/cx_mgw_busi_exception geworfen, werden 5XX Status Codes eine Ausnahme des Typs /iwbep/cx_mgw_tech_exception voraussetzen.

Konstanten für die Statuscode findest du in eben diesen Klassen, bspw. Unter /iwbep/cx_mgw_busi_exception=>gcs_http_status_code-…

Beispiel für einen Anwendungsfall

Ein Beispiel für die Nutzung des Status Codes könnte ein Online Service für ein Energieversorgungsunternehmen sein. SAP bietet hier ein Produkt mit dem Namen Multichannel Foundation for Utilities an. Diese ist Teil der SAP Service Cloud.

Solltest du Kunden beispielsweise Vertragsdokumente per PDF anzeigen wollen, so könntest du vorher prüfen wollen, ob das Dokument existiert. Hierbei kann es sinnvoll sein, eine Fehlermeldung zurück zu geben, falls das Dokument nicht existiert. Das kannst du wie oben dargestellt erreichen.

Du interessierst dich für Beratung oder hast eine Frage zum Thema SAP Multichannel Foundation for Utilities?

Hinterlasse einen Kommentar