- 20. Januar 2011
  19 Kommentare
ABAP-Webservices mit dem SOA-Manager anlegen

Gerade im SAP-Umfeld ist es interessant, im produktiven System verfügbare Informationen auch anderen Nicht-SAP-Systemen zugänglich machen zu können. Webservices sind ein effektives Mittel um Systeme ohne große Umwege direkt miteinander kommunizieren zu lassen. Mit SAP NetWeaver 7.0 SP14 steht nun auch die Transaktion SOAMANAGER zur Verfügung, die den Umgang mit Webservices deutlich einfacher macht. Dieses Howto beschreibt anhand eines einfachen Beispiels die Vorgehensweise, um mit ABAP und dem SOAMANAGER einen SAP Webservice zur Verfügung zu stellen.

Wir unterstützen Sie bei der Konfiguration und Absicherung Ihrer Schnittstellen.

Ob Sie Webservices absichern wollen oder einfach Unterstützung bei der initialen Konfiguration haben möchten, wir bieten Ihnen unsere kompetenten Berater an: SAP Basis und SAP Security Berater von RZ10
Unsere Referenzen finden Sie hier.

Tobias Harmes   Kontaktieren Sie mich: Telefon 0211.175403-22 oder per E-Mail info@rz10.de
In einem unverbindlichen Gespräch kann ich mit Ihnen über Ihre Ausgangslage sprechen und Ihnen Möglichkeiten aufzeigen. Selbstverständlich können wir danach auch ein unverbindliches Angebot unterbreiten.Fachbereichsleiter Tobias Harmes

Überblick

  1. Voraussetzungen
  2. Einen Funktionsbaustein und Webservice im ABAP anlegen
  3. Den Webservice mit soapUI nutzen

Voraussetzungen:

  • Eine funktionierende Transaktion SOAMANAGER (ab SAP NetWeaver 7.0 SP14)
  • Entwicklerzugriff und ABAP Kenntnisse , Transaktion SE80
  • Einen technischen User für den eingeschränkten Zugriff (Benutzertyp Kommunikation)
  • Einen Konsumenten, das heißt einen Webservice-Nutzer (zum Testen ist das Webservices-Test-Tool soapUI gut geeignet)

Einen Funktionsbaustein und Webservice im ABAP anlegen

Reihenfolge für das Anlegen eines Webservice im Überblick:

  1. RFC-fähigen Funktionsbaustein anlegen
  2. Input/Export-Parameter definieren
  3. Das Programm
  4. Webservice anlegen
  5. Service im SOAMANAGER browsen und WSDL-Link speichern
  • RFC-fähigen Funktionsbaustein anlegen

    Unser Beispiel wird ein Webservice sein, dem zwei Zahlen übergeben werden und der daraufhin die Summe der beiden Zahlen zurück gibt.
    Dafür in der Transaktion SE80 einen Funktionsbaustein anlegen und dabei in den Eigenschaften „Remote fähiger Baustein“ anwählen.

  • Input/Export-Parameter definieren

    Die Parameter definieren den Webservice, die Verwendung von Tabellen und Changing sind hier nicht vorgesehen.

    Die Import-Parameter bestimmen die Werte, die an den Webservice übergeben werden. In dem Bespiel die beiden Zahlen, die von unserem Programm addiert werden sollen. Die Parameter sollten Optional sein, damit man später das WSDL-Dokument (siehe unten) abrufen kann und als Wert übergeben werden.


    Der Export-Parameter definiert die Rückgabe.


    Diese Parameter müssen unbedingt vorher festgelegt werden und sollten sich später auch nicht mehr ändern, da ansonsten sich die ganze Webservice-Definition ändert und somit für Konsumenten nicht mehr nutzbar ist.

  • Das Programm


    Das Programm sichern und aktivieren.

  • Webservice anlegen

    Über einen Rechts-klick auf den Funktionsbaustein kann man einen Web Service Wizard starten.









    Der Webservice ZTH_WS_TESTING ist damit definiert und einsatzbereit.

  • Service im SOAMANAGER browsen und WSDL-Link speichern

    Bevor der Webservice durch andere Systeme genutzt werden kann, benötigen diese eine Beschreibung, wie und mit welchem Parametern der Webservice funktioniert. Diese Definition steckt in einem WSDL-Dokument und wird zum Konsumieren des Webservices im ABAP und anderen externen System benötigt. Die Transaktion SOAMANAGER öffnet einen Browser für den Zugriff auf das SOA-Management und bietet die Möglichkeit eine Download-URL für das WSDL-Dokument zu ermitteln.



    Zunächst muss der neue Service selektiert werden.


    Der markierte Link öffnet das WSDL-Dokument. Hinweis: Das Browserfenster wird unter Umständen im Hintergrund geöffnet.


    Die URL aus der Adressleiste speichern.

Den Webservice mit soapUI nutzen

Das Webservice Testing Tool soapUI ist als OpenSource-Tool unter http://www.soapui.org/ verfügbar und bietet die Möglichkeit schnell einfacher Webservice Funktionstests durchzuführen. Ideal also, um unseren eben angelegten Webservice zu testen.


„New soapUI Project“ auswählen und in dem Dialog die vorher gespeicherten WSDL-URL einfügen.


Technischen User angeben.


Es sollen die Zahlen 200 und 400 addiert werden. Wichtig ist etwaige Kommentare wie z.B. <!–OPTIONAL–> zu entfernen. Diese können beim Aufruf des Webservices Probleme bereiten.


Über den Button „Auth“ am unteren Rand müssen die Benutzerdaten für den Aufruf hinterlegt werden.


Auf „Submit Request“ links oben gehen. Die Antwort des Webservices (die Summe der beiden Zahlen) erscheint danach auf der rechten Seite. Damit ist der Webservice erfolgreich getestet!

Jetzt das kostenlose eBook zum Thema SAP Basis downloaden:


Download-Link für Dokument via Email



Jetzt das kostenlose eBook mit ausgewählten Fachartikeln aus 2015/2016 downloaden:


SHARE


19 Responses to ABAP-Webservices mit dem SOA-Manager anlegen

Frank Hachenberg - 17. März 2011 | 15:31

Hallo Herr Harmes,

vielen Dank für die tolle Doku. Hat uns das Leben gerade sehr vereinfacht.

Mit freundlichen Grüßen

Frank Hachenberg

Antworten
sven moeller - 31. März 2011 | 13:03

super doku! gibts da auch eine mit der ich auf diese aufbauen kann

zb um nen sinnvollen web service für das ides system zu bauen?

Antworten
tobias_harmes - 15. April 2011 | 15:42

Hallo Herr Möller.
Im SAPnet gibt es auch einiges an Ressourcen zum Thema. Die Anleitung auf dieser Seite kann auch für ein IDES-System verwendet werden.
Viele Grüße,
Tobias Harmes

Antworten
Stefan Schnell - 11. April 2011 | 14:40

Hallo Herr Harmes,
auch von mir ein Dankeschön für die gute Dokumentation, sie hat mir sehr geholfen.
Beste Grüße
Stefan Schnell

Antworten
Sebastian Simon - 28. April 2011 | 12:08

Hallo Herr Harmes,

erstmal ein großes Dabke für die einfache Einführung. Gibt es dazu vllt noch weiterführenden Dokumentationen.

Bei mir gibt es leider das Problem, dass es beim starten der Übertragung ein Fehler gibt. Der Quelltext wird ordentlich angzeigt aber nach dem Drücken auf den grünen Pfeil bekomme ich diese Fehlermeldung:

ERROR:java.net.ConnectException: Connection refused: connect
java.net.ConnectException: Connection refused: connect
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(Unknown Source)
at java.net.PlainSocketImpl.connectToAddress(Unknown Source)
at java.net.PlainSocketImpl.connect(Unknown Source)
at java.net.SocksSocketImpl.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at java.net.Socket.(Unknown Source)
at java.net.Socket.(Unknown Source)
at org.apache.commons.httpclient.protocol.DefaultProtocolSocketFactory.createSocket(DefaultProtocolSocketFactory.java:80)
at org.apache.commons.httpclient.protocol.DefaultProtocolSocketFactory.createSocket(DefaultProtocolSocketFactory.java:122)
at org.apache.commons.httpclient.HttpConnection.open(HttpConnection.java:707)
at com.eviware.soapui.impl.wsdl.support.http.SoapUIMultiThreadedHttpConnectionManager$HttpConnectionAdapter.open(SoapUIMultiThreadedHttpConnectionManager.java:1666)
at org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry(HttpMethodDirector.java:387)
at org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:171)
at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:397)
at com.eviware.soapui.impl.wsdl.submit.transports.http.HttpClientRequestTransport.sendRequest(HttpClientRequestTransport.java:202)
at com.eviware.soapui.impl.wsdl.WsdlSubmit.run(WsdlSubmit.java:123)
at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source)
at java.util.concurrent.FutureTask.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)

Ich nehme an, dass er die URL wsdl nicht aufmachen kann. Ich habe alle Benutzerdaten eingegeben.

Vielen Dank

Sebastian Simon

Antworten
Tobias Harmes - 8. Mai 2011 | 13:21

Hallo Herr Simon.

Sie können sich das WSDL-Dokument im Browser ansehen. Dort müsste es einen Eintrag „soap:address location“ geben. Die Nummer hinter dem „:“ ist der Port, auf dem die Anfrage von soapUI probiert wird. Bitte prüfen Sie einmal lokal auf Ihrem Rechner ob eine Firewall oder ein Virenscanner Verbindungen auf diesem Port unterbindet. Sie können außerdem in der Transaktion SMICM nachprüfen, welche Port-Einstellung Sie auf Ihrem System haben (Springen->Parameter->Anzeigen). Dort sollte unter Services ein Eintrag á la icm/server_port_0 = PROT=HTTP,PORT=n auftauchen, wobei n gleich dem Port sein sollte, den Sie in der WSDL gefunden haben. Und wie immer gilt: das ICM-Log bietet auch hier wertvolle Hinweise.

Viele Grüße,
Tobias Harmes

Antworten
Gerd Hagebölling - 22. Juli 2011 | 09:45

Hallo Hr. Harmes

Danke für die prima Doku.

Gibt es eine solche Doku auch für die Einstellungen auf dem SOAMANAGER-Reiter „Technische Konfiguration“
( Sinn und Zweck, was muß wo eingetragen werden und wo bekomme ich diese Info her ).

Viele Grüße

Gerd Hagebölling

Antworten
Tobias Harmes - 20. August 2011 | 16:45

Hallo Herr Hagebölling.
Bisher nicht, ich setze das mal auf die Todo-Liste. Leider funktioniert im SOA Manager auch die Online-Hilfe regelmäßig nicht. Auf help.sap.com gibt es mit Working with the SOA Manager eine gute Übersicht über die einzelnen Funktionen.
VG, Tobias Harmes

Antworten
Fredy Häner - 25. August 2011 | 12:59

Hallo Herr Harmes

Danke für die super Anleitung, leider funktioniert bei mir der Link bei der Transaktion SOAMANAGER ->
„WSDL-Dokument für gewähltes Binding öffnen“ nicht.
Ich erhalte immer folgende Meldung
Fehler: Keine Daten zum Bindingschlüssel „“

Können Sie mir sagen, wo und wie ich diese Daten zum Bindingschlüssel eingeben kann?

Freundliche Grüsse
Fredy Häner

Antworten
Fredy Häner - 31. August 2011 | 08:55

Hallo Herr Harmes,
Danke für die Unterstützung, es lag jedoch nicht am falschen Mandanten. Ich musste den Service manuell erstellen und damit hat es funktioniert.

Viele Grüsse
Fredy Häner

Antworten
Holger Nitsch - 18. Oktober 2011 | 10:51

Hallo Herr Harmes,

tolle Doku für den Bereich SAP als Service Provider.
Nun möchte ich aber aus SAP heraus einen fremden Webservice aufrufen, wobei dazu die fremde WSDL benötigt wird.
Wann darf ich dazu mit einer Doku von Ihnen rechnen ?

Gruß
H. Nitsch

Antworten
Marcel - 19. März 2012 | 13:51

Hallo Herr Harmes,
ich kann beim Schritt „Öffnen des WSDL Dokumentes“ kein Dokument auswählen. Über das Suchergebnis finde ich meinen Funktionsbaustein und die Service Definition.
Zudem habe ich Services 0 / Endprodukt 0.

Welchen Schritt habe ich vergessen?

Vielen Dank für Ihre Hilfe.
Gruß
M. Schick

Antworten
Tobias Harmes - 22. März 2012 | 12:33

Hallo Herr Schick.
Sie können auf dem Reiter Konfigurationen einen Service mit dem Button „Service anlegen“ anlegen. Dann sollte das WSDL-Dokument in der Übersicht verfügbar sein. Normalerweise passiert das automatisch, aber über die genannte Funktion kann man es manuell nachholen. Für den Namen wähle ich immer Externer Name = Interner Name = Service Name = Endpunktname. Wenn mein Funktionsbaustein ZTH_WS_TESTING heißt, dann heißt mein Service normalerweise auch so.
Viele Grüße,
Tobias Harmes

Antworten
Ronald Dartsch - 19. April 2012 | 10:21

Hallo Her Harmes,

diese wunderbare Doku hat mich ein ganzes Stück weitergebracht. Danke dafür!
Nun habe ich noch das Problem, dass ich einen SAP-Service aus einem Infopath-Formular aufrufen möchte, aber gerne einen festen SAP-User hinterlegen würde, damit man sich nicht bei jedem Request neu authentifizieren muss. Ist das möglich?

Viele Grüße
Ronald Dartsch

Antworten
Thomas Weber - 21. November 2012 | 11:36

Hallo Herr Harmes !

Was hab ich falsch gemacht wenn, im SOAMANAGER beim Apply auf das Webservice folgende Fehlermeldungen erscheinen:
„SRT Framework Ausnahme. Fehler beim Lesen der Variante „ZWEBSERVICE“ der Service Definition „ZWEBSERVICE“. Sie besitzen keine Berechtigung zur Anzeige.

Am User kanns nicht liegen, der hat SAP_ALL

Wie haben 3 Mandanten, bei der WEB-Service-Administration wird nicht der Standardmandant, sondern ein anderer angeboten (der Eintrag „in System“ neben dem „Start“ Button).

Antworten
Winfried Janssen - 3. Januar 2014 | 12:56

Danke für die Einführung. Meine Frage wäre noch wie ich Daten aus SAP an den Webservice sende

. Funktionsbaustein
. Programm zum Aufruf des Bausteins
. Destination ?

Grüße

Winfried Janssen

Antworten

Schreiben Sie einen Kommentar

Bitte füllen Sie alle mit * gekennzeichneten Felder aus. Ihre E-Mail Adresse wird nicht veröffentlicht.