BSP-Seiten als Service - Problem bei HTTP-Request

ABAP Web Dynpro, BusinessServerPages; Erstellung von Webapplikationen.
4 Beiträge Seite 1 von 1
4 Beiträge Seite 1 von 1

BSP-Seiten als Service - Problem bei HTTP-Request

Beitrag von Xilukarim (ForumUser / 11 / 3 / 0 ) » 23. Aug 2019 13:04

Es gibt hier leider keine Lösung, siehe stackoverflow.

Hallo BSP-Spezialisten,

ich versuche gerade BSP-Seiten als Datendienst zu verwenden. Ich habe eine BSP-Seite, die beim Aufruf direkt aufgrund von Parametern ein Ergebnis im JSON-Format zurückgibt. (Ich weiss, das es dazu eigentlich auch andere Techniken gibt, aber mir scheint das eine recht einfache Sache zu sein).

Ich rufe den Dienst über einen HTTP-Request auf, nur habe ich das Problem, dass sich die BSP-Seite aus einer HTML-Seite mit Javascript (XMLHttpRequest) nicht aufrufen lässt. Aus einem Excel-Makro heraus funktioniert es, und mit dem Tool "Advanced Rest Client" funktioniert es ebenfalls.

Der funktionierende Excel-Code ist folgender:

Code: Alles auswählen.

  Dim XMLhttp: Set XMLhttp = CreateObject("msxml2.xmlhttp")
  Dim response As String

  Dim strURL As String: strURL = "http://meinSapServer:80XX/sap/bc/bsp/sap/meineBSPSeite"
  
  XMLhttp.Open "GET", strURL, False
  XMLhttp.setRequestHeader "Authorization", "Basic <BASE64-Code für Username:Passwort>"
  XMLhttp.send ""
  response = XMLhttp.responseText
  MsgBox XMLhttp.Status & " " & XMLhttp.statusText
  MsgBox response
In response stehen die gewünschten Daten drin.

Der nicht funktionierende Javascript-Code ist folgender (eingebettet zum Testen in eine lokale Webseite):

Code: Alles auswählen.

	var xmlHttp = new XMLHttpRequest();
	xmlHttp.open( "GET", UrlWieInExcel, false ); 
	xmlHttp.setRequestHeader("Authorization", "Basic " + <BASE64-Code für Username:Passwort>);
	
	try {
		xmlHttp.send( "" ); ##### --> FEHLER! #####
	} catch(err) {
		alert(err);
	}

	return xmlHttp.responseText;

ich bekomme kein Ergebnis, dafür an der markierten Stelle einen geworfenen Fehler "NetworkError: A network error occurred."

Das Javascript habe in verschieden Browsern probiert (Firefox, Chrome und Edge)

Hat vielleicht eine Idee, wo das Problem sein könnte, oder wo mein JavaScript-Code fehlerhaft ist?

VG
Xilukarim
Zuletzt geändert von Xilukarim am 4. Sep 2019 09:42, insgesamt 1-mal geändert.
ECC 6.07
Netweaver 7.40


Re: BSP-Seiten als Service - Problem bei HTTP-Request

Beitrag von jocoder (ForumUser / 68 / 0 / 14 ) » 26. Aug 2019 13:00

Im GET-Request werden normalerweise keine Daten gesendet. Zudem wird mit einem Event-Handler auf die Antwort reagiert.
Folgender JavaScript-Code sollte kein Fehler werfen:

Code: Alles auswählen.

var xmlHttp = new XMLHttpRequest();
xmlHttp.open( "GET", UrlWieInExcel, false ); 
xmlHttp.setRequestHeader("Authorization", "Basic " + <BASE64-Code für Username:Passwort>);
var response;

xmlHttp.addEventListener('load', function(event) {
   if (xmlHttp.status >= 200 && xmlHttp.status < 300) {
      console.log(xmlHttp.responseText);
      response = xmlHttp.responseText;
   } else {
      console.warn(xmlHttp.statusText, xmlHttp.responseText);
   }
});
xmlHttp.send();

return response;

Die Befehle console.log und console.warn dienen für das Debugging. Im Firefox werden beispielsweise die die Log-Sätze mit einem Rechtsklick "Element untersuchen" sichtbar.

Re: BSP-Seiten als Service - Problem bei HTTP-Request

Beitrag von Xilukarim (ForumUser / 11 / 3 / 0 ) » 27. Aug 2019 09:44

Hallo jocoder,

danke für die Antwort, ich bin jetzt etwas weitergekommen. Ich bekomme keinen Fehler mehr, dafür mag der SAP-Server meine Anfrage nicht.

Ich bekomme folgende Konsolenmeldung:
Quellübergreifende (Cross-Origin) Anfrage blockiert: Die Gleiche-Quelle-Regel verbietet das Lesen der externen Ressource auf http:meinServer:80xx/sap/bc/bsp/sap/meineSeite. (Grund: CORS-Kopfzeile 'Access-Control-Allow-Origin' fehlt).

Ich habe etwas im Internet recherchiert, dass heisst anscheinend, dass der SAP-Server die Anfrage ablehnt, weil die Anfrage von einer Webseite kommt (meine lokale Seite), die er nicht in seiner Liste der erlaubten Seiten aufgelistet hat. Es gibt Requests-header wie z.B. Origin oder Host, die vorgaukeln können, von einer anderen Seite zu kommen, aber diese sind auf meinem SAP-Server nicht erlaubt - Verständlich!

Ich frage mich aber nur, warum aus Excel heraus der Request funktioniert? Die Anfrage von Excel ist ja auch aus einer fremden Quelle.....

EDIT:
Ich wusste nicht, dass CORS ein Sicherheitsmechanismus des Browsers ist, um zu verhindern, dass unerwünschte Seiten(-bestandteile) geladen werden dürfen. Der sendende Server kann andere Server freigeben über die o.g. Liste, damit der Browser weiß, dass er davon nachladen darf. Unser SAP-Server hat aber wahrscheinlich aus Sicherheitsgründen keine Server für einen solchen Prozess freigegeben. Das ist wohl auch der Grund, warum es von Excel funktioniert, weil dort kein CORS-Prozess aktiv ist. Ich habe gelesen, das CORS bei bestimmten Aufrufen unterdrückt werden kann, das werde ich nochmal weiterverfolgen.

Ich bin aber trotzdem dankbar für weitere Vorschläge oder auch eventuell eine Verfeinerung der Erklärung.

VG
Xilukarim
ECC 6.07
Netweaver 7.40

Re: BSP-Seiten als Service - Problem bei HTTP-Request

Beitrag von Xilukarim (ForumUser / 11 / 3 / 0 ) » 30. Aug 2019 16:32

ich habe noch mehr Sachen versucht und habe, da es eher kein SAP-Problem ist, bei stackoverflow ein Posting abgesetzt, da könnt ihr auch noch die weiteren Versuche nachlesen.
ECC 6.07
Netweaver 7.40

Seite 1 von 1

Aktuelle Forenbeiträge

Mini-SAP Einstiegs Logo ändern
vor 12 Stunden von Tron 2 / 157
CSV-Daten in richtige Infotyp-spalte(itab)
Gestern von DeathAndPain 3 / 74
Datum vorbelegen Select-Option in Variante gelöst
Gestern von DeathAndPain 11 / 289
Lookup Tabelle in Methode lesen und erweitern
Gestern von DeathAndPain 10 / 257
BOPF Key auslesen S4
Gestern von Tron 2 / 44

Unbeantwortete Forenbeiträge

CMR-Frachtbrief PDF Druckprogramm S4/HANA
vor 2 Tagen von ichse18577 1 / 44
Absenderland in Transaktion BP setzen
vor 5 Tagen von SAP_ENTWICKLER 1 / 118
Funktionsbaustein QPMK_MSTCHA_VERS_CREATE
vor einer Woche von SAP_ENTWICKLER 1 / 150
OLE 2 Excel Datum konvertieren
vor einer Woche von Kerstin 1 / 117