Sie sind auf Seite 1von 50

Odata - Grundlagen / Webservices 1

1 OData-Services

So verwenden Sie benutzerdefinierte OData-Services in der SAPUI5-Anwendung


In diesem Beispiel zu SAP Netweaver Gateway und OData wird ein benutzerdefinierter OData-Service verwendet. Wir lernen, wie CRUD-Operationen
mit den OData ausgeführt werden.. Im eigentlichen Projekt führen wir die OData-Services jedoch nicht als eigenständige Links aus. OData finden ihre
Verwendung in SAPUI5-Anwendungen. SAPUI5-Anwendungen können eine Verbindung zur Backend-Datenbank herstellen, Informationen aus dem
System lesen und Informationen in der Backend-Datenbank erstellen / ändern.
==================== OData Service Anlage ============================================
OData
OData ist das Akronym für "Open Data Protocol". Das Protokoll besteht aus einer Reihe von Regeln, die beim Aufbau des Services berücksichtigt
werden müssen. Die OData-Schnittstelle ist ein offener Standard, der von jeder Anwendung, jedem Programm, jeder Software oder jedem Gerät der
Nicht-SAP-Welt verwendet werden kann, die über das HTTP (s) -Protokoll eine Verbindung mit SAP herstellen und manipulieren (lesen, schreiben,)
können.Die Kommunikationsform ist ein XML- oder JSON-Dokument. Da das Protokoll HTTP-basiert ist, kann jede Programmiersprache mit HTTP-
Stack zum Konsumieren von OData-Diensten verwendet werden.
Stateless
Jede einzelne HTTP-Anforderung, die vom Webserver empfangen wird, wird vergessen, nachdem eine Antwort gesendet wurde. Webserver erinnern
sich nicht an die vorherige Anforderung oder erinnern sich nicht daran. Dies nennt man stateless.
RESTful
OData ist eine von REST inspirierte Technologie zum Lesen, Schreiben und Ändern von Informationen im Web (nicht nur SAP). REST =
REpresenational State Transfer. REST ist ein Architekturstil, der einen einfachen und leichten Mechanismus für die Kommunikation zwischen
Maschinen verwendet. Es ist eine Alternative zu RPC (Remote Procedure Calls) und Web Services. REST ist ressourcenbasiert, im Gegensatz zu RPC
oder SOAP, die aktionsbasiert sind. Das REST-Protokoll setzt voraus, dass der Server vier Anforderungstypen bedienen
kann: GET, POST, PUT und DELETE. Diese Vorgänge repräsentieren die Datenoperationen Abrufen, Aktualisieren, Einfügen und Löschen. Sie werden
über ein Zuordnungsprotokoll an die Servermethoden angepasst. REST setzt voraus, dass jede Servermethode als einer der oben genannten
Vorgänge über einen Verteilungsmechanismus aufgerufen werden kann, der eine Zuordnung zwischen dem Pfad des URI (Uniform Resource
Identifier), der Ressource und den Parametern impliziert.

Durch das Interface zwischen Servern und Clients wird die Architektur vereinfacht, die ermöglicht, dass sich jeder Teil unabhängig entwickeln kann.

Ressourcenbasiert
Ressourcen sind das zentrale Element für REST. Eine Ressource stellt eine Informationsquelle dar, die mit einem URI adressiert werden kann. Der
Server gibt Repräsentationen der Information an den Client (HTML, XML, JSON) zurück. Der Server antwortet auf URIs. Jede Ressource auf dem
Server verfügt über eine eigene Adresse oder einen URI.

Wie überprüfen Sie, ob Ihr System über SAP Netweaver Gateway verfügt?

In NW 7.3 und vor NW 7.3 hatte SAP Netweaver Gateway drei Add-Ons, nämlich GW_CORE, IW_FND und IW_BEP. Die Komponenten GW_CORE
und IW_FND wurden für Gateway Server-Funktionen benötigt, während IW_BEP für Gateway Backend-Funktionen verwendet wurde.

Praxis ==================================================================================================

1.1 Datenmodell definieren

Gehen Sie zum T-Code SEGW (SAP Gateway Service Builder).

Klicken Sie auf das Symbol "Projekt anlegen", geben Sie den Namen des Projekts, die Beschreibung und das Paket (oder das lokale) ein und speichern
Sie es.

Das Projekt wird mit vier Ordnern erstellt, Datenmodell, Dienstimplementierung, Laufzeitartefakte und Dienstwartung. Beachten Sie, dass das
Datenmodell außerdem drei Unterordner enthält, Entitätstypen, Zuordnungen und Entitätssätze. Alle Ordner sind standardmäßig leer.

ABAP-Grundlagen DDIC
Odata - Grundlagen / Webservices 2

Klicken Sie mit der rechten Maustaste auf den Ordner Datenmodell und importieren Sie die DDIC-Struktur EKKO. Geben Sie den Namen des
Entitätstyps und die ABAP-Struktur an, deren Felder Sie in Ihren Entitätstyp importieren möchten. Vergessen Sie nicht, das Kontrollkästchen für Entity
Set zu aktivieren.

Klicken Sie auf Weiter und wählen Sie die Felder aus den EKKO-Strukturen aus, die Sie Ihrem Entitätstyp hinzufügen möchten.

Wählen Sie als Nächstes den Schlüssel für Ihre Struktur / Ihren Entitätstyp und Ihren Entitätssatz aus. In unserem Beispiel ist es Ebeln.

Nachdem Sie auf "Fertig stellen" geklickt haben, klicken Sie auf die Schaltfläche "Speichern" und überprüfen Sie den Ordner "Eigenschaften und
Serviceimplementierung ".

ABAP-Grundlagen DDIC
Stadt-Stuttgart Odata - Grundlagen / Webservices 3

An dieser Stelle importieren wir einen weiteren Entitätstyp namens POItem aus EKPO, indem wir die oben genannten Schritte ausführen.

SAP EWM embedded 9.6 Integrata-Cegos Uebungen


Stadt-Stuttgart Odata - Grundlagen / Webservices 4

Aus dem obigen Bild geht hervor, dass jeder Entitätstyp einen eigenen Ordner für Eigenschaften und Navigationseigenschaften hat. Und jedes
Serviceimplementation-Entityset verfügt über eigene Vorgänge (Create, GetEntity, Update, Delete usw.).

1.2 Implementieren / Registrieren des Dienstes

Klicken Sie auf das Symbol Generieren und dann auf OK. Geben Sie die Paket- und Transportnummer an oder speichern Sie den Service als lokales
Objekt. Sie sollten die Erfolgsmeldung wie unten gezeigt erhalten.

SAP EWM embedded 9.6 Integrata-Cegos Uebungen


Stadt-Stuttgart Odata - Grundlagen / Webservices 5

Bitte beachten Sie, dass der Name des technischen Services der tatsächliche Servicename ist, den das externe System aufrufen muss. Zwei Klassen,
Model Provider Class (MPC) und Data Provider Class (DPC), werden zusammen mit Base und Extended Class generiert.
Die Modellanbieterklasse erbt von / IWBEP / CL_MGW_ABS_MODEL und die Datenanbieterklasse erbt von / IWBEP / CL_MGW_ABS_DATA. Das
folgende Bild zeigt die Beziehung zwischen den generierten Klassen und ihren Oberklassen (Eltern).

Service zum Servicekatalog hinzufügen (Service zum Gateway Hub registrieren)


Gehen Sie zu Ihrem Gateway Hub (Front-End-System) und führen Sie t-code /IWFND/MAINT_SERVICE - Services aktivieren und verwalten aus.
Speichern Sie diesen T-Code in Ihrer Favoritenliste . Sie benötigen die Transaktion für diverse OData-Dienste.

Unser Service wurde noch nicht zum Servicekatalog hinzugefügt. Nachdem wir den Service zum Servicekatalog hinzugefügt haben, ist unser Service
für die Außenwelt verfügbar.

SAP EWM embedded 9.6 Integrata-Cegos Uebungen


Stadt-Stuttgart Odata - Grundlagen / Webservices 6

Klicken Sie auf die Schaltfläche Service hinzufügen, geben Sie Ihren Backend-Systemalias LOCAL und den Namen des externen Dienstes an (unser
Fall ZGW_PO_SRV). Sie erhalten den von Ihnen erstellten Service im Backend. Klicken Sie darauf und es wird der Name des Dienstes (technisch /
extern) zusammen mit dem technischen Namen des Modells (ZGW_PO_MDL) angezeigt und klicken Sie auf Speichern.

Kehren Sie zum Bildschirm Servicekatalog zurück.


Finden Sie Ihren Service, klicken Sie darauf. Es wird im Fenster "System Aliase" in der unteren rechten Ecke angezeigt. Testen Sie Ihren Service.

1.3 Testen Sie Ihren Service.

Starten Sie T-Code / IWFND / GW_CLIENT. Sie können auch über die Option Browser testen. Im Moment verwenden wir die Option SAP Gateway
Client

SAP EWM embedded 9.6 Integrata-Cegos Uebungen


Stadt-Stuttgart Odata - Grundlagen / Webservices 7

Vorausgesetzt, Sie sind berechtigt (Objekt S_SERVICE) klicken Sie auf die Schaltfläche Ausführen. Der Statuscode 200 wird zurückgeliefert , d. H. der
Zugriff war erfolgreich.

Im obigen Bild hat unser URI (/ /sap/opu/odata/sap/ZGW_PO_SRV/?$format=xml) das Format XML. Ändern Sie es in JSON. Sowohl xml als auch json
informieren, dass sie zwei Entitätssätze haben.

Lassen Sie uns nun die Metadaten des OData-Services überprüfen. Im Laienbegriff bedeutet Metadaten die Struktur und Eigenschaften oder das
vollständige Skelett (Detailsicht XML).

Es zeigt die Namen der Entitätstypen (Arbeitsbereich / Struktur). In unserem OData-Service haben wir zwei Entitätstypen (POHeader und POItem). Es
werden auch die Entity Set-Namen (interne Tabellen) angezeigt, (POHeaderSet und POItemSet). Am Ende der Seite sehen Sie einen Link. Dies ist der
Link, über den Ihr Dienst im Webbrowser geöffnet wird. Kopieren Sie den Link und fügen Sie ihn in Ihren Browser ein (Sie müssen Ihre SAP- - Front-
End Anmeldeinformationen angeben).

Beispiel: http://tz4.training.lan:8001/sap/opu/odata/sap/ZGW_PO_SRV/$metadata

Wenn Sie ein Nicht-SAP-Webentwickler sind, der diesen SAP-OData-Service nutzen muß kann so die Details der Strukturen kennenlernen , damit Sie
sie in Ihrer Nicht-SAP-Anwendung verwenden können. Als erstes verwenden SIe also die URI-Option /?$format=xml um die Details zu überprüfen.
Wenn Sie etwas Falsches in den URI eingeben oder Ihr URI nicht funktioniert, wird die Meldung "Transaktion / IWFND / ERROR_LOG auf SAP
Gateway Hub-System ausführen" angezeigt, um das Problem zu finden. Überprüfen Sie die Nachricht für die URI durch den Aufruf
/IWFND/ERROR_LOG - Fehlerprotokoll von SAP Gateway.
Ein Uniform Resource Identifier (Abk. URI, englisch für einheitlicher Bezeichner für Ressourcen) ist ein Identifikator und besteht aus einer
Zeichenfolge, die zur Identifizierung einer abstrakten oder physischen Ressource dient. URIs werden zur Bezeichnung von Ressourcen (wie Webseiten,
sonstigen Dateien, Aufruf von Webservices, aber auch z. B. E-Mail-Empfängern) im Internet und dort vor allem im WWW eingesetzt.

SAP EWM embedded 9.6 Integrata-Cegos Uebungen


Stadt-Stuttgart Odata - Grundlagen / Webservices 8

1.4 Fehlerprotokoll von SAP Gateway

Überprüfen Sie die Ergebnisse zum Aufruf /IWFND/ERROR_LOG - Fehlerprotokoll von SAP Gateway

In unserem Backend-System haben wir im T-Code SEGW die Entity Types / Set erstellt, den Service aktiviert und registriert. Die MPC und die DPC
wurden erzeugt. Die DPC-Methoden wurden jedoch nicht neu definiert. Wir müssen unseren ABAP-Code und unsere Logik schreiben, um Daten aus
dem Backend-System abzurufen und das Entity Set (interne Tabelle) zu füllen. Sobald der Entitätssatz gefüllt ist, können wir die Ausgabe in unserem
OData-Serviceaufruf sehen.
Wechseln Sie in die DPC-Erweiterungsklasse und nicht in der Basisklasse in den Änderungsmodus (wir arbeiten in der Erweiterungsklasse, da wir die
geerbte Klasse erweitern).

Setzen Sie den Cursor auf die Methode, die Sie neu definieren möchten. Drücken Sie das Symbol zur Neudefinition der Methode und drücken Sie die
Eingabetaste. Es wird automatisch der generierter Code angezeigt.

SAP EWM embedded 9.6 Integrata-Cegos Uebungen


Stadt-Stuttgart Odata - Grundlagen / Webservices 9

1.5 Lesen von Bestellungen

Schreiben wir nun eine kleine Anweisung, um 10 Einträge aus der Bestellungstabelle EKKO in der Methode abzurufen und zu aktivieren.
=====================================
SELECT * UP TO 10 ROWS FROM ekko INTO CORRESPONDING FIELDS OF TABLE et_entityset. 

=====================================

Testen Sie erneut mit der Transaktion /IWFND/GW_CLIENT - SAP Gateway Client

Das Ergebnis ist einwandfrei

SAP EWM embedded 9.6 Integrata-Cegos Uebungen


Stadt-Stuttgart Odata - Grundlagen / Webservices 10
1.6 Entwicklung detaillieren

Wählen Sie die Methode "POHEADERSET_GET_ENTITY" aus und klicken Sie auf das Symbol "Methode neu definieren", wie im vorherigen Step
erläutert. Alternativ können wir mit der rechten Maustaste auf die Methode klicken und die Option "Neu definieren" auswählen.

Wechseln Sie in die DPC-Erweiterungsklasse und nicht in der Basisklasse in den Änderungsmodus (wir arbeiten in der Erweiterungsklasse, da wir die
geerbte Klasse erweitern).

Setzen Sie den Cursor auf die Methode, die Sie neu definieren möchten. Drücken Sie das Symbol zur Neudefinition der Methode und drücken Sie die
Eingabetaste. Es wird automatisch der generierter Code angezeigt.

Entfernen Sie den automatisch generierten Code und verwenden Sie Code ähnlich dem unten in Methode POHEADERSET_GET_ENTITY gezeigten
Beispiel.

=========================================

DATA : ls_key_tab LIKE LINE OF it_key_tab,


lv_ebeln TYPE ekko-ebeln.
 
* IT_KEY_TAB has key name and value
READ TABLE it_key_tab INTO ls_key_tab
WITH KEY name = 'Ebeln'. " Case sensitive
IF sy-subrc EQ 0.
lv_ebeln = ls_key_tab-value.
ENDIF.
 
* Select one PO entry
SELECT SINGLE * FROM ekko INTO CORRESPONDING FIELDS OF er_entity
WHERE ebeln = lv_ebeln.

SAP EWM embedded 9.6 Integrata-Cegos Uebungen


Stadt-Stuttgart Odata - Grundlagen / Webservices 11
===========================================

>Aktivieren Sie den Sourcecode und testen Sie das Ergebnis

1.7 Finden Sie ihren Service im Servicepfad

Um den Standard-ICF-Pfad zu finden, geben Sie den Dienstnamen im T-Code SICF ein und führen Sie ihn aus. Expandieren Sie die Knoten bis Sie den
Servicenamen erreichen. In unserem Beispiel lautet der ICF-Pfad sap-> opu-> odata-> sap-> zgw_po_srv.

1.8 Erstellen Sie eine Assoziation

Erstellen und überprüfen Sie eine Assoziation. Starten Sie SEGW, klicken Sie unter Datenmodell mit der rechten Maustaste auf den Zuordnungsordner
und erstellen Sie Ihre erste Zuordnung.

Sie müssen den Schlüssel (Konzept für abhängige Eigenschaften wie Fremdschlüssel) zwischen der Hauptentität und der abhängigen Entität angeben.

Klicken Sie auf das Symbol "Fertig stellen", und Zuordnung, Navigationseigenschaft und Zuordnungssatz werden generiert. Generieren Sie ihre
Artefakte zur Aktualisierung.

Lassen Sie uns überprüfen, wie die Metadaten des Services aussehen, nachdem wir die oben genannte Zuordnung hinzugefügt haben

SAP EWM embedded 9.6 Integrata-Cegos Uebungen


Stadt-Stuttgart Odata - Grundlagen / Webservices 12

Wir haben den folgenden URI verwendet, um einen Eintrag des Bestellkopfs in unseren vorherigen Artikeln abzurufen. Wenn Sie diesmal erneut
versuchen, denselben URI auszuführen, werden Sie feststellen, dass ein zusätzlicher Link vorhanden ist. Dieser zusätzliche neue Link verfügt über die
Abfrageoption mit der oben erstellten Navigationseigenschaft.

Das Ergebnis des POHeaderSet mit einem Primärschlüssel als Abfrageoption zeigt einen neuen href-Link. Es gibt den Hinweis, dass wir zu den
Bestellpositionendaten navigieren können, indem wir der Option Abfrage die Navigationseigenschaft hinzufügen.
Wenn Sie einen Eintrag des obigen Ergebnisses erweitern, können Sie einen alternativen Link anzeigen, um genau den einen Bestellartikel zu erhalten.
Der alternative Link zum Abrufen eines bestimmten Bestellpostens wird im Ergebnis der POHeaderSet-Abfrage angezeigt.

1.9 Definition des Positionszugriffes

Definieren Sie die POItem-Methoden für READ- und QUERY-Operationen .


Start SEGW ZGW_PO-> Service Implementation-> POItemSet-> GetEntity (Read) -> Rechtsklick -> Gehen Sie zur ABAP Workbench.

SAP EWM embedded 9.6 Integrata-Cegos Uebungen


Stadt-Stuttgart Odata - Grundlagen / Webservices 13

Sie erhalten eine Information, dass die Methode nicht implementiert wurde. Fahren Sie fort, Sie gelangen zum Class Builder-Bildschirm. Definieren Sie
die Methode "POITEMSET_GET_ENTITY" neu.

Entfernen Sie den automatisch generierten kommentierten Code und schreiben Sie Ihre Logik, um die Daten abzurufen. Sie können den folgenden
Code verweisen. Der Importparameter IT_KEY_TAB enthält den Feldnamen und den Wert der Schlüsselfelder, die voraussichtlich an die Methode
übergeben werden (normalerweise als Parameter des URI).

============================================
    data: ls_key_tab type /iwbep/s_mgw_name_value_pair,
          lv_ebeln   type ebeln,
          lv_ebelp   type ebelp.

* Get the key property values
    read table it_key_tab into ls_key_tab with key name = 'Ebeln' .
    if sy-subrc = 0.

SAP EWM embedded 9.6 Integrata-Cegos Uebungen


Stadt-Stuttgart Odata - Grundlagen / Webservices 14
      lv_ebeln = ls_key_tab-value.
    endif.

* Get the key property values
    read table it_key_tab into ls_key_tab with key name = 'Ebelp' .
    if sy-subrc = 0.
      lv_ebelp = ls_key_tab-value.
    endif.

* Select one row
    select single * from ekpo into corresponding fields of er_entity
    where ebeln = lv_ebeln
    and ebelp = lv_ebelp.
=========================================
>Aktivieren Sie den Quellcode
Definieren Sie in ähnlicher Weise die Methode "POITEMSET_GET_ENTITYSET" neu, um Ihre Logik zum Abrufen des Datenarrays, d. H. Der internen
Tabelle, zu schreiben. Sie können sich auf das folgende Template beziehen.
=========================================
    data: ls_key_tab type /iwbep/s_mgw_name_value_pair,
          lv_ebeln   type ebeln.

* Get the key property values
    read table it_key_tab with key name = 'Ebeln' into ls_key_tab.
    if sy-subrc = 0.
      lv_ebeln = ls_key_tab-value.
    endif.

    if lv_ebeln is not initial.

      select * from ekpo into corresponding fields of table et_entityset
      where ebeln = lv_ebeln.
    else.

      select * up to 10 rows from ekpo into corresponding fields of table et_entityset.

    endif.

=============================================

1.10 Testen Sie die Erweiterung

Jetzt können wir alle Abfrageoperationen für POItemSet ausführen, die wir für das POHeaderSet durchgeführt haben.
- /sap/opu/odata/sap/ZGW_PO_SRV/POItemSet

- /sap/opu/odata/sap/ZGW_PO_SRV/POItemSet?$format=json

SAP EWM embedded 9.6 Integrata-Cegos Uebungen


Stadt-Stuttgart Odata - Grundlagen / Webservices 15

- /sap/opu/odata/sap/ZGW_PO_SRV/POItemSet(Ebeln='4500000000',Ebelp='00010')

- /sap/opu/odata/sap/ZGW_PO_SRV/POItemSet?$select=Ebeln,Ebelp,Werks
Ziehen Sie nur drei Felder aus dem Datenmodell.

==============================================

Navigation : /sap/opu/odata/sap/ZRW_PO_SRV/POHeaderSet('4500000000')?$expand=HeadToItemNav

SAP EWM embedded 9.6 Integrata-Cegos Uebungen


Stadt-Stuttgart Odata - Grundlagen / Webservices 16
2 WebServices

2.1 Beispielbaustein erkennen

Web Services sind die Bausteine moderner, service-orientierter Software-Architekturen. Durch den Einsatz von Web Services können IT-Infrastrukturen
Schritt für Schritt in service-orientierte Architekturen umgewandelt werden.
Ein Web Service ist eine modularisierte, ausführbare Einheit, die in heterogenen Systemlandschaften über Systemgrenzen hinweg aufgerufen werden
kann. Basierend auf übergebenen Eingabeparametern, wird eine Ausgabe ermittelt, die an den Aufrufer zurückgeschickt wird. Web Services dienen
beispielsweise dazu, eine Kreditkartenprüfung vorzunehmen, eine Währung umzurechnen, eine Preisanfrage an einen Anbieter zu richten oder eine
Nachbestellung aufzugeben. Auch können industrielle Hersteller ihren Kunden, Partnern und Lieferanten Web Services zur Implementierung in deren
Programmen zur Verfügung stellen, um übergreifende Supply-Chain-Lösungen einzurichten.

SAP NetWeaver implementiert die grundlegenden Standards für Web Services: eXtensible Markup Language (XML), Simple Object Access Protocol
(SOAP), Web Service Definition Language (WSDL) und Universal Description, Discovery, and Integration (UDDI). 
Web Services und Web-Service-Standards entwickeln sich rasch, immer neue Standards werden von Standardisierungsgremien aufgestellt. Erweiterte
Standards wie Sicherheitsstandards oder zusätzliche Protokolle werden kontinuierlich durch SAP in das Web Service Framework integriert.

Unternehmen können ihre Lösungen durch die Verwendung von ABAP und Java Web Services erweitern.
Das Web Service Framework umfasst:
●  die Entwicklungsumgebung der ABAP Engine
●  die Entwicklungsumgebung der J2EE Engine
●  Werkzeuge zur Unterstützung der UDDI-Registrierung und
●  eine interoperable SOAP-Runtime (ABAP und J2EE Engine)
Die Verarbeitung von SOAP-Requests erfolgt über das  Internet Communication Framework.

Folgende SAP Hinweise zu RFC- und ICF-Sicherheitsthemen sollten Sie beachten:


●  43417  (RFC Software Development Kit)
●  618516  (Einschränkung des Zugriffs auf das RFC-Server Programm RFCEXEC bzw.
  RFCEXEC.EXE).
●  128447  (Trusted Systems Netzwerk für RFC-Kommunikation)
●  532918  (RFC Trace-Generierung)
●  668252  (Berechtigungen für Remote Debugging im ICF)
●  110612    (Konfiguration des SAP-Gateway)
●  64016  (Gateway Monitoring)

Grundsätzlich können Sie für ICF-Benutzer alle Benutzertypen (System-, Dialog-, Einzel- und Sammelbenutzer) verwenden.

1. Legen Sie eine Funktionsgruppe und einen Funktionsbaustein an

Transaktion : SE80 im Commandofeld eingeben

Paket anlegen : Z_WEBSERVICES

Menuepfad Workbench  Objekt bearbeiten

SAP EWM embedded 9.6 Integrata-Cegos Uebungen


Stadt-Stuttgart Odata - Grundlagen / Webservices 17

anlegen > <

Paket Z_WEBSERVICES
Kurzbeschreibung Repository Objekte für Webservices
Anwendungskomponente bc
Softwarekomponente HOME
Transportschicht ZID3

> < enter

SAP EWM embedded 9.6 Integrata-Cegos Uebungen


Stadt-Stuttgart Odata - Grundlagen / Webservices 18

anlegen > <

> < sichern

> < enter

> < Hierarchie

SAP EWM embedded 9.6 Integrata-Cegos Uebungen


Stadt-Stuttgart Odata - Grundlagen / Webservices 19

Funktionsgruppe z_fg_uebung1_00
Kurztext Funktionsgruppe WebService 00
Verantwortlicher PWD

> <

> < sichern

SAP EWM embedded 9.6 Integrata-Cegos Uebungen


Stadt-Stuttgart Odata - Grundlagen / Webservices 20

> < enter

Funktionsbaustein Z_FB_UEBUNG1_00
Funktionsgruppe Z_FG_UEBUNG1_00
Kurztext Webservice Baustein

> <

Import Parameter (Cut & Paste)

P1_TEXT TYPE STRING


P2_TEXT2 TYPE STRING
P3_NUMC TYPE NUMC10 Numerisches Characterfeld der Länge 10
P4_NUMC TYPE NUMC05 10 Numerisches Feld der Länge 5

Der Baustein braucht mindestens einen Exportparameter und kann beliebig viele Importparameter haben. Auch Tabellen oder Felder können als
Parameter angegeben werden.

Export Parameter (Cut & Paste)

P5_TEXT TYPE STRING


P6_ERGEBNIS TYPE NUMC10 Numerisches Characterfeld der Länge 10

Ausnahmen

P3_NULLWERT p3_nullwert

SAP EWM embedded 9.6 Integrata-Cegos Uebungen


Stadt-Stuttgart Odata - Grundlagen / Webservices 21

Quelltext
if p3_numc eq 0.
   raise p3_nullwert.
endif.
p5_text = p1_text && p2_text2.
p6_ergebnis = p3_numc + p4_numc.

> < aktivieren


> < testen

> < ausführen

SAP EWM embedded 9.6 Integrata-Cegos Uebungen


Stadt-Stuttgart Odata - Grundlagen / Webservices 22

Ergebnis

Remotefähigleit einstellen

Parameter auf Wertübergabe stellen

> < aktivieren


> < testen

SAP EWM embedded 9.6 Integrata-Cegos Uebungen


Stadt-Stuttgart Odata - Grundlagen / Webservices 23

2. Legen Sie einen Webservice-Definition an

Web Services können auf zwei Arten bereitgestellt werden:

Inside-Out

RFC-fähige Funktionsbausteine, Funktionsgruppen (die einen RFC-fähigen Funktionsbaustein enthalten) und BAPIs können ohne zusätzlichen
Programmieraufwand als Web Service bereitgestellt werden. Der Service existiert im System und kann nach außen publiziert werden (Inside-Out)

Outside-In

Für den Aufruf eines Service werden mit Hilfe eines WSDL-Dokumentes Entwicklungsobjekte eines Service, der außerhalb des Systems beschrieben
wurde, in das jeweilige Entwicklungssystem generiert (Outside-In).

In der SICF muss der Webservice im Pfad sap/bc/srt/rfc/sap/ <service Name des Webservices> aktiviert sein. Außerdem muss, um überhaupt
Webservices nutzen zu können der Service sap/bc/srt/wsdl ebenfalls aktiviert sein.

Der Webservice kann von extern über einen Systemuser von SAP angesprochen werden. Dieser braucht mindestens die folgenden
Berechtigungsobjekte: 
SAP_BC_WEBSERVICE_SERVICE_USER 
SAP_BC_WEBSERVICE_CONSUMER

Wizzard Aktion Service Provider

SAP EWM embedded 9.6 Integrata-Cegos Uebungen


Stadt-Stuttgart Odata - Grundlagen / Webservices 24

> <

> <

SAP EWM embedded 9.6 Integrata-Cegos Uebungen


Stadt-Stuttgart Odata - Grundlagen / Webservices 25

> <

> <

SAP EWM embedded 9.6 Integrata-Cegos Uebungen


Stadt-Stuttgart Odata - Grundlagen / Webservices 26

> <

> <

SAP EWM embedded 9.6 Integrata-Cegos Uebungen


Stadt-Stuttgart Odata - Grundlagen / Webservices 27

> <
> <

> < aktivieren

SAP EWM embedded 9.6 Integrata-Cegos Uebungen


Stadt-Stuttgart Odata - Grundlagen / Webservices 28

> < enter

> < enter

portType  (Schnittstellentypen)

Eine Menge von abstrakten Operationen (vier Typen von ausgetauschten Nachrichten):
One-way: Der Service bekommt eine Input-Message vom Client.
Request-response: Der Service bekommt einen Request (Input-Message) vom Client und sendet eine Antwort (Output-Message).
Solicit-response: Der Service sendet eine Message und erwartet eine Antwort vom Client.
Notification: Der Service sendet eine Output-Message. In WSDL 2.0 wurde die Bezeichnung zu Interface geändert.

3. Testen Sie ihre Webservice-Definition

> < testen

Request-Vorlage generieren

> < enter

SAP EWM embedded 9.6 Integrata-Cegos Uebungen


Stadt-Stuttgart Odata - Grundlagen / Webservices 29

> < ausführen

Response / Request betrachten

SAP EWM embedded 9.6 Integrata-Cegos Uebungen


Stadt-Stuttgart Odata - Grundlagen / Webservices 30

Parameter P1 extern umbenennen

> < aktivieren

> < testen


> < XML-Editor

Parameter anpassen

> < sichern

> < enter

> < ausführen

SAP EWM embedded 9.6 Integrata-Cegos Uebungen


Stadt-Stuttgart Odata - Grundlagen / Webservices 31

Die Interface-Pattern Zustandslos (XI 3.0-kompatibel), Zustandslos, Zustandsbehaftet und TU&C/C weisen jedem Service-Interface die Art der
auszuführenden Kommunikation zu. Zustandslose Kommunikation bedeutet, dass von der Messaging-Laufzeit kein Speichern eines Zustandes beim
Provider unterstützt wird, sobald die Messaging-Laufzeit den Message-Austausch erfolgreich abgeschlossen hat.

Je nach Interface-Pattern bietet der Service-Interface-Editor unterschiedliche Operation-Pattern und Modi an. Ein zustandsbehafteter Service behält
seinen Status im Rahmen einer HTTP-Session bei mehreren Aufrufen vom gleichen Service-Consumer.

Sicherheitsprofil

Im Sicherheitsprofil wählen Sie die Art der Authentifizierung beim Aufruf des Web-Service durch einen Service-Consumer. Sie bestimmen, in welcher
Form die Transportsicherheit, d.h. die Sicherung des Datentransfers, zwischen Consumer und Provider stattfinden soll.

SAP EWM embedded 9.6 Integrata-Cegos Uebungen


Stadt-Stuttgart Odata - Grundlagen / Webservices 32

Operationsprofil

Das Operationsprofil hat den Standardwert Synchron . Wenn Sie im Schnittstellenprofil den Status Zustandsbehaftet wählen, können Sie für alle
Operationen außer Synchron auch Synchron Commit und Synchron Rollback wählen.

Blockierung

Der Aufruf eines Proxys (genauer: das Übergeben einer Message an die Message-Infrastruktur) führt zum Blockieren des Aufrufers, bis die Business-
Antwort empfangen und dem Aufrufer zurückgegeben wurde.

Commit Handling

Commit/Rollback-Steuerung durch Framework

Das Framework ist für den Abschluss von Transaktionen (Commit oder Rollback) verantwortlich. Von der Anwendung wird nur signalisiert, ob ein
COMMIT oder ROLLBACK auszuführen ist.

Transaction Handling

Beschreibung des transaktionalen Verhaltens der der Message Infrastruktur. Transaktionale Verarbeitung bedeutet, dass die Messages, die der
Messaging-Infrastruktur übergeben werden, bis zum Abschluss der Transaktion (LUW) gesammelt werden. Abhängig von der Art der
Transaktionsbeendigung (Commit/Rollback), werden die Messages verworfen oder für anschließende Verarbeitung gespeichert. Der transaktionale
Zusammenhang wird nicht auf die Server-Seite übertragen.

Reliable Message Exchange

Mit Web Services Reliable Messaging kann:

 der Sender einer Message feststellen, ob sie vom gewünschten Empfänger empfangen wurde und entsprechende Maßnahmen einleiten,
wenn dies nicht der Fall sein sollte

 der Empfänger der Message sicher sein, dass er sie erhält, trotz häufig nicht vorauszusehender Probleme mit Netzwerken oder der Software

SAP EWM embedded 9.6 Integrata-Cegos Uebungen


Stadt-Stuttgart Odata - Grundlagen / Webservices 33
RT Intrinsic Features

Art des Message-Austauschs

 One Way

Es werden Daten vom Sender zum Empfänger transferiert, ohne dass eine Antwort von der Anwendung erwartet wird.

 Request Response

Der Message-Austausch besteht aus einer Anfrage und einer Antwort auf Anwendungsebene.

4. Analysieren Sie die Webservice-Definition

Services werden durch sechs XML- Hauptelemente definiert:

types (Datentypen)
Definition der Datentypen, die zum Austausch der messages benutzt werden.

message (Nachricht)
Abstrakte Definitionen der übertragenen Daten, bestehend aus mehreren logischen Teilen, von denen jeder mit einer Definition innerhalb eines
Datentypsystems verknüpft ist.

portType (Schnittstellentypen)
Eine Menge von abstrakten Operationen (vier Typen von ausgetauschten Nachrichten):
One-way: Der Service bekommt eine Input-Message vom Client.
Request-response: Der Service bekommt einen Request (Input-Message) vom Client und sendet eine Antwort (Output-Mesxsage).
Solicit-response: Der Service sendet eine Message und erwartet eine Antwort vom Client.
Notification: Der Service sendet eine Output-Message.In WSDL 2.0 wurde die Bezeichnung zu Interface geändert.

binding (Bindung)
Bestimmt das konkrete Protokoll und Datenformat für die Arbeitsschritte und Nachrichten, die durch einen bestimmten Port-Typ gegeben sind.

port (Port)
Spezifiziert eine Adresse für eine Bindung, also eine Kommunikationsschnittstelle, üblicherweise ein URI. In WSDL 2.0 wurde die Bezeichnung zu
Endpoint geändert.

service (Service)
Fasst die Menge von Ports eines Port-Typs zusammen.^

===============================================================================
<wsdl:portType name="z_sd_uebung_1_00">
<wsdl:documentation>
- <sapdoc:sapdoc xmlns:sapdoc="urn:sap:esi:documentation">
<sapdoc:docitem docURL="http://paris.sap.integrata.net:8000/sap/bc/esdt/docu/sd_text?sap-
client=800&sd_name=Z_SD_UEBUNG_1_00" />
  <sapdoc:docitem applicationComponent="BC" />
  </sapdoc:sapdoc>
  </wsdl:documentation>
- <wsp:Policy>
  <wsp:PolicyReference URI="#IF_IF_z_sd_uebung_1_00" />
  </wsp:Policy>
- <wsdl:operation name="ZFbUebung100">
- <wsp:Policy>
  <wsp:PolicyReference URI="#OP_IF_OP_ZFbUebung100" />
  </wsp:Policy>
  <wsdl:input message="tns:ZFbUebung100" />
  <wsdl:output message="tns:ZFbUebung100Response" />
  </wsdl:operation>
  </wsdl:portType>
==============================================================================?
Durch das Element <operation> innerhalb <portType> wird eine Funktion " ZFbUebung100" definiert, die einen Input bekommt und einen Output
zurückgibt. Der Input sind Texte und Werte " ZFbUebung100", der Output damit das Ergebnis der Operationen " ZFbUebung100Response ". Die
Reihenfolge der <input>- und <output>-Elemente legt fest, dass diese Operation eine Request-Response-Operation werden soll. Ändert man die

SAP EWM embedded 9.6 Integrata-Cegos Uebungen


Stadt-Stuttgart Odata - Grundlagen / Webservices 34
Reihenfolge (z.B. Zuerst <output> dann <input>) oder lässt man eines der beiden Elemente ganz weg, dann ändert sich auch das "Message
Exchange Pattern (MEP)". Dies ermöglicht z.B. auch Operationen zu definieren, die nur einen Request abgeben und nicht auf eine Response warten.
Als Programmierer muss man noch festlegen, welche Parameter die Eingabe und die Ausgabe erwarten. Dies geschieht durch das <message>-
Element. In unserem Beispiel wird bei der Operation " ZFbUebung100" im <input>-Tag auf die Message " ZFbUebung100" und
im <output>-Tag auf die Message " ZFbUebung100Response" verwiesen.
=================================================================
<wsdl:message name="ZFbUebung100">
  <wsdl:part name="parameters" element="tns:ZFbUebung100" />
  </wsdl:message>
<wsdl:message name="ZFbUebung100Response">
  <wsdl:part name="parameter" element="tns:ZFbUebung100Response" />
  </wsdl:message>
================================================================
Im <message>-Element werden einzelne Parameter zu einer Gruppe zusammengefasst, so dass diese für mehrere Operationen zur Verfügung stehen.
In unserem Beispiel hat das Message-Element " ZFbUebung100" einen Parameter <part> vom Typ " ZFbUebung100" sowie ein Message-Element "
ZFbUebung100Response" vom Typ " ZFbUebung100Response"
Wie bei einer Funktion kann man auch den Eintrag dieser Parameter use="required" erzwingen oder mit use="optional" optional handhaben.. 

==================================================================
<wsdl:types>
<xsd:schema attributeFormDefault="qualified" targetNamespace="urn:sap-com:document:sap:rfc:functions">
<xsd:simpleType name="numeric10">
<xsd:restriction base="xsd:string">
  <xsd:maxLength value="10" />
  <xsd:pattern value="\d*" />
  </xsd:restriction>
  </xsd:simpleType>
<xsd:simpleType name="numeric5">
- <xsd:restriction base="xsd:string">
  <xsd:maxLength value="5" />
  <xsd:pattern value="\d*" />
  </xsd:restriction>
  </xsd:simpleType>
- <xsd:simpleType name="string">
  <xsd:restriction base="xsd:string" />
  </xsd:simpleType>
  </xsd:schema>
<xsd:schema attributeFormDefault="qualified" targetNamespace="urn:sap-com:document:sap:soap:functions:mc-style"
xmlns:n0="urn:sap-com:document:sap:rfc:functions">
<xsd:import namespace="urn:sap-com:document:sap:rfc:functions" />
<xsd:element name="ZFbUebung100">
<xsd:complexType>
<xsd:sequence>
  <xsd:element name="P2Text2" type="n0:string" minOccurs="0" />
  <xsd:element name="P3Numc" type="n0:numeric10" />
  <xsd:element name="P4Numc" type="n0:numeric5" />
  </xsd:sequence>
  </xsd:complexType>
  </xsd:element>
<xsd:element name="ZFbUebung100Response">
- <xsd:complexType>
- <xsd:sequence>
  <xsd:element name="P5Text" type="n0:string" />
  <xsd:element name="P6Ergebnis" type="n0:numeric10" />
  </xsd:sequence>
  </xsd:complexType>
  </xsd:element>
  </xsd:schema>
  </wsdl:types>
==================================================================
Nun müssen die Typen (String, Integer, eigener Typ) zwischen <wsdl:types> und </wsdl:types> für die Parameter definiert werden. Die Typen werden
gesondert innerhalb der <types>..</types>-Tags definiert. Dabei können gemäß  XSD komplexe und einfache Datentypen definiert werden. "
ZFbUebung100Response" ist hier ein komplexer Datentyp, der Ergebnisparameter transferiert. Ein SimpleType <xsd:simpleType
name="numeric10"> darf weder XML-Kindelemente enthalten noch XML-Attribute besitzen.
Komplexe Typen in Ergänzung zu den einfachen Typen bieten komplexe XML-Datentypdefinitionen die Möglichkeit, Elementenstrukturen
zusammenhängend zu definieren. Solche Strukturen können weitere Elemente und Attribute beinhalten. Hier wird ein neuer
Typ "ZFbUebung100Response " mit entsprechenden Kindelementen " P5Text " und
"P6Ergebnis ".Durch <xsd:sequence> wird eine Liste von Kindelementen spezifiziert. Jedes dieser Elemente kann keinmal, einmal oder mehrfach
auftreten Attribute minOccurs und maxOccurs). Falls kein occurs-Attribut vorhanden ist, wird in beiden Fällen der Default-Wert 1 verwendet. Man kann
auch einen neuen Elementtypen erzeugen, indem man einen bereits vorhandenen Elementtyp beschränkt <xsd:restriction base="xsd:string">
Dafür müssen alle Elemente aufgezählt werden und dabei kann man beliebige Einschränkungen verteilen.

Choice
Merkmale: Aus einer Anzahl von Elementen darf, falls kein anderer Wert über Max/MinOccurs gesetzt, ein Element vorkommen. Ansonsten auch
mehrere möglich.
Reihenfolge beliebig. Durch das MaxOccurs ist es möglich zu sagen, dass Elemente mehrfach und die Reihenfolge beliebig ist

SAP EWM embedded 9.6 Integrata-Cegos Uebungen


Stadt-Stuttgart Odata - Grundlagen / Webservices 35

===================================================================
<xsd:element name="Tier" type=”tier”>
<xsd:complexType name=”tier”>
<xsd:choice>
<xsd:element name="Affe" type="xsd:string"/>
<xsd:element name="Tiger" type="xsd:string "/>
<xsd:element name="Leopard" type="xsd:string"/>
<xsd:element name="Maus" type="xsd:string "/>
</xsd:choice>
</xsd:complexType>
</xsd:element>
==================================================================

All
Merkmale: Jedes Element darf einmal vorkommen.
Reihenfolge spielt keine Rolle.
===================================================================
<xsd:element name="Einkaufsliste" type=”einkaufsliste”>
<xsd:complexType name=”einkaufsliste”>
<xsd:all>
<xsd:element name="Kaese" type="xsd:string"/>
<xsd:element name="Milch" type="xsd:string "/>
<xsd:element name="Butter" type="xsd:string"/>
<xsd:element name="Wurst" type="xsd:string "/>
</xsd:all>
</xsd:complexType>
</xsd:element>
===================================================================
2.1.1 Einfache Typen[Bearbeiten]

XML Schema stellt einige grundlegende atomare Datentypen bereit. Die atomaren Datentypen enthalten die „klassischen“ Typen, wie sie zum Teil auch
in anderen Typsystemen (z. B. C, Java oderSQL) spezifiziert sind:

 xs:string
 xs:decimal
 xs:integer
 xs:float
 xs:boolean
 xs:date
 xs:time

SAP EWM embedded 9.6 Integrata-Cegos Uebungen


Stadt-Stuttgart Odata - Grundlagen / Webservices 36

5. Legen Sie ein Binding zum Provider-Service an

Starten Sie den SOAMANAGER

Sie verwenden SOA-Manager für die vollständige Konfiguration von Service-Providern und Consumer-Proxys eines lokalen Systems. Folgende
Aufgabenbereiche werden beschrieben:

Technische Konfiguration

Sie müssen zunächst einen Host und Port zuordnen, um mit dem zentralen SAP NetWeaver Administrator aus dem SOA Manager heraus arbeiten zu
können.

SAP EWM embedded 9.6 Integrata-Cegos Uebungen


Stadt-Stuttgart Odata - Grundlagen / Webservices 37

Dann steigen Sie ein über Web-Service-Konfiguration

SAP EWM embedded 9.6 Integrata-Cegos Uebungen


Stadt-Stuttgart Odata - Grundlagen / Webservices 38

Suchen Sie ihre Service-Definition Suchausdruck Z* + start

Markieren der Zeile + Apply Selection anklicken

Legen Sie eine Service an

SAP EWM embedded 9.6 Integrata-Cegos Uebungen


Stadt-Stuttgart Odata - Grundlagen / Webservices 39

Einstellungen übernehmen + Konfiguration definieren + sichern

SAP EWM embedded 9.6 Integrata-Cegos Uebungen


Stadt-Stuttgart Odata - Grundlagen / Webservices 40

WSDL-Dokument für gewähltes Binding/Service öffnen

URL über Cut & Paste kopieren

http://train07.sap.integrata.net:8001/sap/bc/srt/wsdl/srvc_0050568C6BDF1EE3A4C3B26138DE4452/wsdl11/allinone/ws_policy/document?sap-
client=001

http://paris.sap.integrata.net:8000/sap/bc/srt/wsdl/srvc_0050568C18441EE78BB338A5C5F4BB40/wsdl11/allinone/ws_policy/document?sap-client=800

6. Legen Sie eine Consumer Webservice-Definition an

Wizzard aufrufen

SAP EWM embedded 9.6 Integrata-Cegos Uebungen


Stadt-Stuttgart Odata - Grundlagen / Webservices 41

Service Consumer wählen + weiter

Externe WSDL wählen

SAP EWM embedded 9.6 Integrata-Cegos Uebungen


Stadt-Stuttgart Odata - Grundlagen / Webservices 42

Url als Basis wählen + weiter

Url zuordnen + weiter

SAP EWM embedded 9.6 Integrata-Cegos Uebungen


Stadt-Stuttgart Odata - Grundlagen / Webservices 43

Paket zuordnen, Präfix zuordnen + weiter + fertigstellen

User eingeben

SAP EWM embedded 9.6 Integrata-Cegos Uebungen


Stadt-Stuttgart Odata - Grundlagen / Webservices 44

Service Consumer aktivieren

Generierte Datentypen sichten + testen

7. Legen Sie einen Port an

SAP EWM embedded 9.6 Integrata-Cegos Uebungen


Stadt-Stuttgart Odata - Grundlagen / Webservices 45

>Apply Selection<

Port anlegen

SAP EWM embedded 9.6 Integrata-Cegos Uebungen


Stadt-Stuttgart Odata - Grundlagen / Webservices 46

Einstellung übernehmen

Auswahl übernehmen + sichern

8. Testen Sie den Consumer-Webservice

SAP EWM embedded 9.6 Integrata-Cegos Uebungen


Stadt-Stuttgart Odata - Grundlagen / Webservices 47

Testen des Consumer Services

Ausführen

Ergebnis

SAP EWM embedded 9.6 Integrata-Cegos Uebungen


Stadt-Stuttgart Odata - Grundlagen / Webservices 48

9. Verbrauchen Sie den Consumer Webservice im Programmablauf

==========================================================

report  z_sd_uebung_1_00.
data: proxy type ref to z00_co_z_sd_uebung_1_00.
data output type z00_zfb_uebung100response.
data input type z00_zfb_uebung100.
input-p1text  = 'Roland '.
input-p2text2 = 'Kirsch '.
input-p3numc  = 4.
input-p4numc  = 5.

try .
    create object proxy.
    try .
      try.
          call method proxy->zfb_uebung100
            exporting
              input  = input
            importing
              output = output.
        catch cx_ai_system_fault .
        catch cx_ai_application_fault .
      endtry.

    endtry.
  catch cx_ai_system_fault.

endtry.
======================================================
>testen<

3 Ermitteln aller ZPROGRAMME die gelaufen sind

Transaktion ST03N

4 SAP Code Inspector (SCI)

Mit dem Code Inspector (Transaktionscode SCI) können Sie Einzelobjekte bzw. Objektmengen auf Performance, Sicherheit, Syntax und die
Einhaltung von Namenskonventionen prüfen. Sie können auch statistische Informationen ermitteln oder nach bestimmten ABAP-Worten (Tokens)
suchen. Im Code Inspector können Sie Inspektionen definieren, die mit Hilfe von Prüfvarianten bestimmte Objektmengen untersuchen.
Als Ergebnis einer Inspektion erhalten Sie Informationen, Warnungen und Fehler zu verschiedenen Eigenschaften der untersuchten Objekte

Starten Sie den Code Inspektor über

> <

SAP EWM embedded 9.6 Integrata-Cegos Uebungen


Stadt-Stuttgart Odata - Grundlagen / Webservices 49

> <

Sichten Sie die Bestandteile des Codeinspektor-Laufes

> <

SAP EWM embedded 9.6 Integrata-Cegos Uebungen


Stadt-Stuttgart Odata - Grundlagen / Webservices 50

> <

> <

SAP EWM embedded 9.6 Integrata-Cegos Uebungen

Das könnte Ihnen auch gefallen