Entdecken Sie eBooks
Kategorien
Entdecken Sie Hörbücher
Kategorien
Entdecken Sie Zeitschriften
Kategorien
Entdecken Sie Dokumente
Kategorien
1 OData-Services
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 ==================================================================================================
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.
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.).
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.
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).
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.
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.
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
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.
Ü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.
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
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.
=========================================
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.
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
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.
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.
* 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.
=============================================
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/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
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.
Grundsätzlich können Sie für ICF-Benutzer alle Benutzertypen (System-, Dialog-, Einzel- und Sammelbenutzer) verwenden.
Paket Z_WEBSERVICES
Kurzbeschreibung Repository Objekte für Webservices
Anwendungskomponente bc
Softwarekomponente HOME
Transportschicht ZID3
Funktionsgruppe z_fg_uebung1_00
Kurztext Funktionsgruppe WebService 00
Verantwortlicher PWD
> <
Funktionsbaustein Z_FB_UEBUNG1_00
Funktionsgruppe Z_FG_UEBUNG1_00
Kurztext Webservice Baustein
> <
Der Baustein braucht mindestens einen Exportparameter und kann beliebig viele Importparameter haben. Auch Tabellen oder Felder können als
Parameter angegeben werden.
Ausnahmen
P3_NULLWERT p3_nullwert
Quelltext
if p3_numc eq 0.
raise p3_nullwert.
endif.
p5_text = p1_text && p2_text2.
p6_ergebnis = p3_numc + p4_numc.
Ergebnis
Remotefähigleit einstellen
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
> <
> <
> <
> <
> <
> <
> <
> <
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.
Request-Vorlage generieren
Parameter anpassen
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.
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
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.
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
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.
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
==================================================================
<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
===================================================================
<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
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.
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
Wizzard aufrufen
User eingeben
>Apply Selection<
Port anlegen
Einstellung übernehmen
Ausführen
Ergebnis
==========================================================
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<
Transaktion ST03N
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
> <
> <
> <
> <
> <