SAP®-Schnittstellenprogrammierung

Werbung
Michael Wegelin, Michael Englbrecht
SAP - Schnittstellenprogrammierung
®
Bonn 폷 Boston
Auf einen Blick
1
Grundlagen der SAP-Schnittstellenprogrammierung .......................................................
17
2
Remote Function Call mit ABAP .............................. 105
3
Remote Function Call mit C ..................................... 163
4
Remote Function Call mit Java ................................ 279
5
IDocs und ALE .......................................................... 355
6
SOAP ........................................................................ 401
Inhalt
Einführung .................................................................................. 13
1
Grundlagen der SAP-Schnittstellenprogrammierung 17
1.1
1.2
1.3
1.4
1.5
2
SAP NetWeaver Application Server .............................
1.1.1 SAP-Lösungen und SAP NetWeaver ...............
1.1.2 SAP NetWeaver Application Server ABAP ......
1.1.3 SAP NetWeaver Application Server Java .........
Sicherheit ...................................................................
1.2.1 Sicherheit in heterogenen Landschaften .........
1.2.2 User Management Engine ..............................
1.2.3 KeyStores: Authentifizierung, Signierung,
Verschlüsselung .............................................
Authentifizierung und Autorisierung ...........................
1.3.1 Single Sign-on mit dem SAP NetWeaver
Portal .............................................................
1.3.2 Sichere Integration externer Systeme .............
Programmierung des SAP NetWeaver Application
Servers ABAP ..............................................................
1.4.1 ABAP Dictionary ............................................
1.4.2 Authentifizierung und Autorisierung ..............
1.4.3 Nummernkreise .............................................
1.4.4 Funktionsbausteine ........................................
1.4.5 Verbuchungsbausteine ...................................
1.4.6 Anwendungsfunktionalität und
Benutzeroberflächen ......................................
Überblick über die Schnittstellentechnologien von SAP
1.5.1 Dateischnittstelle ...........................................
1.5.2 Remote Function Call (RFC) ...........................
1.5.3 Business Application Programming Interface
(BAPI) ............................................................
1.5.4 Application Link Enabling (ALE) .....................
1.5.5 SOAP .............................................................
17
18
20
34
39
40
44
47
50
51
56
68
68
74
75
75
78
79
81
81
83
94
97
103
Remote Function Call mit ABAP .............................. 105
2.1
RFC-Funktionsbausteine in ABAP ............................... 105
2.1.1 Funktionsbausteine zum Lesen ....................... 105
2.1.2 Aufruf per sRFC .............................................. 108
7
Inhalt
2.1.3
2.2
2.3
2.4
2.5
3
111
117
122
124
126
129
134
134
136
157
Remote Function Call mit C ..................................... 163
3.1
3.2
3.3
3.4
3.5
3.6
8
Funktionsbausteine zum Löschen und
Ändern ..........................................................
Transaktionaler RFC ...................................................
Queued RFC ..............................................................
2.3.1 qRFC mit Ausgangswarteschlange ..................
2.3.2 qRFC mit Ausgangs- und
Eingangswarteschlange ..................................
Background-RFC ........................................................
Business-Objekte und BAPIs ......................................
2.5.1 Entwicklung von Business-Objekten ..............
2.5.2 Entwicklung von BAPIs ..................................
2.5.3 Business-Objekt »Helpvalues« ........................
SAP NetWeaver RFC SDK ..........................................
3.1.1 Inhalte des SAP NetWeaver RFC SDKs ...........
3.1.2 Kompilieren und Linken ................................
Einfache SAP NetWeaver RFC-Clients ........................
3.2.1 Aufbau eines SAP NetWeaver RFC-Clients .....
3.2.2 Einfache Parameter .......................................
3.2.3 Strukturierte Parameter .................................
3.2.4 Tabellenparameter ........................................
Komplexe SAP NetWeaver RFC-Clients ......................
3.3.1 Aufruf von BAPIs ...........................................
3.3.2 Transaktionaler RFC .......................................
3.3.3 Queued RFC ..................................................
SAP NetWeaver RFC-Server .......................................
3.4.1 Installation der Funktionen ............................
3.4.2 Anmeldung am Gateway ...............................
3.4.3 Implementierung der Funktionen ..................
3.4.4 Transaktionaler RFC .......................................
Klassisches RFC SDK ..................................................
3.5.1 C-RFC-Bibliothek ...........................................
3.5.2 Inhalte des klassischen RFC SDKs ..................
3.5.3 Verbindungstests ...........................................
3.5.4 Kompilieren und Linken ................................
Einfache RFC-Clients und RFC-Parameter ...................
3.6.1 Aufbau eines RFC-Client-Programms .............
3.6.2 Einfache Parameter .......................................
3.6.3 Strukturierte Parameter .................................
3.6.4 Tabellenparameter ........................................
163
164
165
170
170
178
180
181
184
184
187
198
199
202
203
204
208
217
217
218
220
222
225
225
236
239
243
Inhalt
3.7
3.8
4
Komplexere RFC-Clients .............................................
3.7.1 Aufruf von BAPIs ............................................
3.7.2 Transaktionaler RFC .......................................
3.7.3 Queued RFC ..................................................
RFC-Server ..................................................................
3.8.1 Anmeldung am Gateway ................................
3.8.2 Installation und Ausführung der Funktionen ...
3.8.3 Dispatching ....................................................
3.8.4 Transaktionaler RFC .......................................
246
246
249
255
256
259
261
269
271
Remote Function Call mit Java ................................ 279
4.1
4.2
4.3
4.4
4.5
4.6
SAP Java Connector ....................................................
4.1.1 Installation .....................................................
4.1.2 Architektur des SAP Java Connectors ..............
4.1.3 Programmierung mit dem SAP Java Connector
4.1.4 Verarbeitung von Tabellen und Strukturen .....
4.1.5 Transaktionaler RFC .......................................
4.1.6 Queued RFC ..................................................
4.1.7 Metadatenverarbeitung ..................................
SAP Enterprise Connector ...........................................
4.2.1 Erzeugen von Proxy-Klassen ...........................
4.2.2 Programmierung des Clients ...........................
Nutzung generischer Backend-Modelle .......................
4.3.1 Generische Proxy-Klassen ...............................
4.3.2 Klassenabhängigkeiten ...................................
4.3.3 Konfiguration der Destinationen ....................
4.3.4 Implementierung ...........................................
RFC-Server ..................................................................
4.4.1 Serverseitiges und clientseitiges Repository ....
4.4.2 Programmierung eines einfachen JCo-Servers
4.4.3 Registrieren eines Funktions-Handlers ............
4.4.4 Verwaltung von Transaktionen .......................
JCo RFC Provider Service ............................................
SAP NetWeaver Portal Connector Framework .............
4.6.1 Java Connector Architecture ...........................
4.6.2 System Landscape des Portals ........................
4.6.3 Einführung in die Portalprogrammierung ........
4.6.4 Anwendungsbeispiel des Connector
Frameworks ...................................................
279
280
281
283
293
296
298
300
302
303
307
309
310
312
313
316
325
326
329
330
333
335
339
339
341
344
348
9
Inhalt
5
IDocs und ALE .......................................................... 355
5.1
5.2
5.3
5.4
5.5
6
356
356
360
363
369
369
375
376
381
381
383
385
385
388
389
390
391
396
398
SOAP ........................................................................ 401
6.1
6.2
6.3
10
IDocs .........................................................................
5.1.1 Entwicklung von IDocs ..................................
5.1.2 Erzeugung von IDocs .....................................
5.1.3 Eingangsverarbeitung von IDocs ....................
Application Link Enabling ..........................................
5.2.1 Konfiguration von ALE ..................................
5.2.2 Test und Monitoring .....................................
5.2.3 ALE-Schnittstelle für BAPIs ............................
IDoc-Programmierung mit dem SAP NetWeaver
RFC SDK ....................................................................
5.3.1 IDoc-Empfänger ............................................
5.3.2 IDoc-Sender ..................................................
IDoc-Programmierung mit dem klassischen RFC SDK
5.4.1 IDoc-Empfänger ............................................
5.4.2 IDoc-Sender ..................................................
IDoc-Programmierung mit Java und Java Connector ...
5.5.1 Vorbereitung zur Verwendung der IDocBibliotheken ..................................................
5.5.2 Client-Anwendung für IDocs .........................
5.5.3 IDoc-Server ...................................................
5.5.4 Konfiguration für den Versand von IDocs ......
Inside-Out-Webservices und -Webclients mit
dem AS ABAP ............................................................
6.1.1 ABAP-SOAP-Webservice ...............................
6.1.2 ABAP-SOAP-Webclient .................................
Outside-In-Webservices und -Webclients mit
dem AS ABAP ............................................................
6.2.1 System Landscape Directory ..........................
6.2.2 Service-Interfaces ..........................................
6.2.3 ABAP-SOAP-Proxys .......................................
Webservices und Webclients mit dem AS Java ...........
6.3.1 Webservice-Infrastruktur im AS Java ..............
6.3.2 Webservice-Provider mit J2EE .......................
6.3.3 Webservice-Clients ........................................
6.3.4 Adaptiver Webservice mit Web Dynpro .........
401
402
410
415
416
417
420
425
425
429
437
442
Inhalt
6.4
6.5
6.6
Webservice-Programmierung mit dem
SAP NetWeaver Composition Environment .................
6.4.1 Implementierung des Inside-Out-Szenarios ....
6.4.2 Implementierung des Outside-In-Szenarios ....
6.4.3 Webservice-Client-Programmierung ...............
SOAP-Programmierung mit Java .................................
6.5.1 Java API for XML Web Services ......................
6.5.2 Implementierung eines Webservice-Clients ....
6.5.3 Implementierung eines Webservice-Providers
SOAP-Programmierung mit C# ...................................
443
444
452
456
465
465
466
467
469
Anhang ........................................................................... 475
A
B
Literaturhinweise .................................................................. 475
Die Autoren .......................................................................... 477
Index ........................................................................................... 479
11
Einführung
In dieser 2., aktualisierten und erweiterten Auflage unseres Handbuches zur SAP-Schnittstellenprogrammierung finden Sie detaillierte
technische Informationen darüber, wie SAP-Systeme untereinander
und mit externen Systemen kommunizieren können.
Diese Informationen werden mit lauffähigen und ausprogrammierten
Programmierbeispielen illustriert, die Ihnen die Umsetzung in der
Praxis erleichtern. Hier lassen wir unsere Erfahrungen als Trainer und
Schnittstellenentwickler einfließen. Dabei berücksichtigen wir die
vier wichtigen Programmiersprachen ABAP, C, Java und C#.
Zielgruppe
Dieses Buch wendet sich an Entwickler, die ihre Programme mit
SAP-Systemen integrieren möchten, an technische Berater, die ihren
Kunden Integrationsmöglichkeiten empfehlen möchten, und an
SAP-Kunden, die einen fundierten Einblick in die Integrationsprogrammierung wünschen.
Aufbau
Das Buch besitzt folgenden grundlegenden Aufbau:
왘
Kapitel 1, »Grundlagen der SAP-Schnittstellenprogrammierung«,
beginnt mit einem Überblick über die gesamte Thematik und führt
die Beispielanwendung ein, die uns während des ganzen Buches
begleiten wird. Mit dieser Beispielanwendung werden Bestellungen von Buchhändlern an Großhändler und von Großhändlern an
Verlage verwaltet.
왘
In den Kapiteln 2 bis 4 geht es dann um Remote Function Call
(RFC). Dies ist eine SAP-Schnittstellentechnologie, mit der Funktionsbausteine in anderen Systemen aufgerufen werden können.
Kapitel 2, »Remote Function Call mit ABAP«, beleuchtet das
Thema aus der Perspektive von ABAP, Kapitel 3, »Remote Function Call mit C«, erläutert die Programmierung mit C und Kapitel 4,
»Remote Function Call mit Java«, die Programmierung mit Java.
13
Einführung
Auch die Entwicklung und Verwendung von Business Application
Programming Interfaces (BAPIs) wird in diesen Kapiteln erklärt.
왘
Kapitel 5, »IDocs und ALE«, erläutert Application Link Enabling
(ALE). Diese SAP-Technologie erlaubt es Anwendungen, Informationen in Form von Intermediate Documents (IDocs) auszutauschen. Sie baut selbst wieder auf RFC auf.
왘
Nach den SAP-Technologien RFC und ALE wendet sich Kapitel 6,
»SOAP«, dem gleichnamigen Protokoll zu. Dieser offene Webstandard ermöglicht es Anwendungen, Informationen in Form von
XML-Dokumenten über HTTP oder andere Protokolle auszutauschen, und wird heutzutage von nahezu allen Entwicklungsplattformen unterstützt, wie wir am Beispiel von C# zeigen werden.
Neben dem Inside-Out-Ansatz, der von vorhandenen Funktionsbausteinen ausgeht, erläutern wir auch den Outside-In-Ansatz. Bei
diesem Ansatz beschreiben Sie zuerst die Schnittstellen, generieren dann aus der Schnittstellenbeschreibung heraus die Klassen,
die die technische Kommunikation realisieren, und nutzen dann
diese Klassen bei der Implementierung der Anwendung.
Für diese 2. Auflage haben wir den gesamten Text und alle Programmierbeispiele überarbeitet und auf den neuesten Stand gebracht. Insbesondere behandelt Kapitel 3 nun neben dem klassischen RFC SDK
auch das SAP NetWeaver RFC SDK. Der Abschnitt zur SAP Exchange
Infrastructure 3.0 in Kapitel 7 der Vorauflage wurde gestrichen, dafür
sind die Ausführungen zum Enterprise Services Repository aus Kapitel 7 nun aktualisiert in Kapitel 6 zu finden.
Zusatzinformationen
Wichtige Hinweise und Zusatzinformationen werden in Form von
grau hinterlegten Kästen gesondert hervorgehoben. Diese Kästen
haben unterschiedliche Schwerpunkte und sind mit verschiedenen
Symbolen markiert:
왘
Achtung: Seien Sie bei der Durchführung der Aufgabe oder des
Schrittes besonders vorsichtig, der mit einem Ausrufezeichen markiert ist. Eine Erklärung, warum hier Vorsicht geboten ist, ist beigefügt.
왘
Hinweis: Wird das besprochene Thema erläutert und vertieft,
macht ein Doppelpfeil Sie darauf aufmerksam.
14
Einführung
왘
Tipp: Nützliche Tipps und Shortcuts, die Ihnen die Arbeit erleichtern, sind mit einem Pluszeichen gekennzeichnet.
Systemvoraussetzungen
Das Buch eignet sich sowohl als Nachschlagewerk als auch als Lehrbuch bei der Programmierung von Schnittstellen zwischen SAP- und
Nicht-SAP-Systemen. Es werden grundlegende Techniken der
Schnittstellenprogrammierung vorgestellt und praxisnah erläutert.
Um die Beispiele nachvollziehen zu können, wurde so weit wie möglich darauf geachtet, dass Sie die benötigte Software kostenlos im SAP
Developer Network (http://sdn.sap.com) im Download-Bereich finden. Die jeweiligen Systemvoraussetzungen für die Installation entnehmen Sie den entsprechenden Download-Seiten der einzelnen
Produkte.
왘
Für die Implementierung der ABAP-Beispiele kann das Entwicklungs-Release 7.0 EHP2 SP6 unter Windows verwendet werden.
Die Installation ist dabei einfach und schnell durchzuführen, und
es sind nach Abschluss der Installation keine weiteren Konfigurationsschritte erforderlich.
왘
Für das Nachvollziehen der standalone Java-Beispiele können Sie
jede Java-Entwicklungsumgebung verwenden. Die Programmierbeispiele liegen jedoch als Eclipse-Projekte vor, sodass sich die
Verwendung dieser IDE anbietet.
왘
Für die Java-Themen kamen zusätzlich noch zwei SAP-Applikationsserver zum Einsatz: zum einen der SAP NetWeaver Application Server Java (Release 7.0), zum anderen das SAP NetWeaver
Composition Environment (Release 7.0 EHP2). Im SAP Developer
Network finden Sie für das Ausprobieren der auf dem SAP NetWeaver Composition Environment basierenden Beispiele eine
Trial-Version. Diese läuft nach 90 Tagen ab und kann nicht verlängert werden. Zusätzlich benötigen Sie für das Nachvollziehen der
Java-Beispiele eine Installation des Java-Stacks in Release 7.0. Leider gibt es hierfür momentan keine Trial-Version. Die Entwicklungswerkzeuge sind sowohl für das SAP NetWeaver Composition
Environment als auch für SAP NetWeaver 7.0 jeweils im Download enthalten.
15
Einführung
Beispiele zu diesem Buch
Alle Codebeispiele können Sie sich von der Bonus-Seite zu diesem
Buch herunterladen. Den Link zur Bonus-Seite finden Sie unter
http://www.sap-press.de/2829. Alternativ können Sie auch unter
http://www.sap-press.de/bonus-seite den vorne im Buch abgedruckten
Zugangscode eingeben.
Danksagung
Dieses Buch beruht auf vielen öffentlich zugänglichen Quellen von
SAP: der Online-Hilfe auf http://help.sap.com sowie den Blogs, Diskussionsforen und White Papers des SAP Developer Networks
(http://sdn.sap.com). Eine große Hilfe waren uns auch die SAP NetWeaver Development Subscription und später die SAP NetWeaver
Trial-Versionen, denn alle Beispiele sind auf Anwendungsservern
dieser SAP-Angebote entstanden. Ein herzliches Dankeschön geht an
dieser Stelle an die SAP AG für die großartige Software und an alle
Menschen, die sie entwickelt oder dabei geholfen haben.
Großer Dank gilt auch unseren Lektoren Stefan Proksch und Maike
Lübbers bei Galileo Press. Stefan Proksch hat uns auf die Idee
gebracht, dieses Buch zu schreiben. Er hat vor allem diese 2. Auflage
als Lektor begleitet. Er und Maike Lübbers in der ersten Auflage
haben dafür gesorgt, dass das Buch auch von anderen Menschen
außer den beiden Autoren gelesen und verstanden werden kann.
Michael Wegelin dankt zudem Vera, Tabea und Benedict für ihre
Unterstützung und Geduld. Das Leben mit ihnen ist spannend, lustig
und einfach wunderbar.
Michael Englbrecht möchte Michaela, Domenik und Sophie für ihr
Verständnis und ihre Geduld danken. Ohne die drei wäre vieles nicht
möglich und alles nur halb so schön.
Michael Wegelin
Geschäftsführender Gesellschafter,
10 point software GmbH, Neu-Ulm
Michael Englbrecht
Senior Consultant,
10 point software GmbH, Neu-Ulm
16
Dieses Kapitel beschreibt detailliert die Schnittstellenprogrammierung in ABAP mit RFC und BAPIs. Sie lernen, wie Sie RFCFunktionsbausteine zum Lesen, Schreiben und Ändern von
Datensätzen entwickeln können, und nutzen diese Funktionsbausteine bei der Entwicklung eines Business-Objektes und
seiner BAPIs.
2
Remote Function Call mit ABAP
Der Remote Function Call (RFC) ist die SAP-Schnittstellentechnologie, mit der Funktionsbausteine in einem anderen System aufgerufen
werden können. In diesem Kapitel beschreiben wir die Spielarten des
RFCs und gehen auf Business-Objekte und ihre BAPIs (Business
Application Programming Interfaces) als spezielle RFC-Funktionsbausteine ein. Wir zeigen anhand des Beispiels, das wir in Abschnitt 1.4,
»Programmierung des SAP NetWeaver Application Servers ABAP«,
eingeführt haben, die Programmierung von RFC-Clients und RFCServern mit der Programmiersprache ABAP.
2.1
RFC-Funktionsbausteine in ABAP
Im Folgenden entwickeln Sie einige Funktionsbausteine in ABAP, mit
denen Sie Kundenbestellungen anlegen, ändern und löschen können.
Diese Funktionsbausteine sollen von externen Systemen verwendbar, das heißt RFC-fähige Funktionsbausteine sein. Sie legen für diese
Funktionsbausteine die Funktionsgruppe ZIFP im Kundennamensraum an. Zur Erinnerung: Funktionsgruppen sind ein spezieller Typ
von ABAP-Programmen, die Funktionsbausteine enthalten.
2.1.1
Funktionsbausteine zum Lesen
Zuerst legen Sie Funktionsbausteine zum Lesen von Kundenaufträgen
und Lieferantenbestellungen an. Jede Bestellung ist eindeutig durch
ihre ORDERID definiert. Dem Besteller ist diese ORDERID jedoch in der
105
Kundenaufträge
und Lieferantenbestellungen
2
Remote Function Call mit ABAP
Regel nicht bekannt, da sie beim Anlegen eines Kundenauftrags auf
Lieferantenseite erstellt wird. Daher benötigen Sie zunächst einmal
einen Funktionsbaustein, der Ihnen eine Tabelle sämtlicher Bestellnummern (ORDERID) bei gegebenem Bestelltyp und optionaler REFID
liefert. Wird nur der Bestelltyp angegeben, gibt der Funktionsbaustein alle Bestellnummern dieses Typs zurück. Wird die REFID (die
Kundenbestellnummer) angegeben, gibt er die Lieferantenbestellnummer zu einer Kundenbestellnummer zurück. Listing 2.1 zeigt den
Quellcode des Funktionsbausteins Z_IFP_ORER_GETLIST, der diese
Aufgabe erledigt.
FUNCTION z_ifp_order_getlist.
*"--------------------------------------------------------*"*"Lokale Schnittstelle:
*" IMPORTING
*"
VALUE(IM_ORDERTYPE) TYPE ZIFPORDERTYPE DEFAULT 'SO'
*"
VALUE(IM_REFID)
TYPE ZIFPREFID OPTIONAL
*" TABLES
*"
TA_ORDERS STRUCTURE ZIFPORDER
*" EXCEPTIONS
*"
NOT_AUTHORIZED
*"
NO_DATA
*"--------------------------------------------------------AUTHORITY-CHECK OBJECT 'ZIFPORDER' ID 'ACTVT' FIELD '03'.
IF sy-subrc NE 0.
RAISE not_authorized.
ENDIF.
IF NOT im_refid IS INITIAL.
* Bestellungen mit gegebener REFID selektieren
SELECT * FROM zifporder INTO TABLE ta_orders WHERE
type = im_ordertype AND
refid = im_refid.
ELSE.
* Bestellungen ohne REFID selektieren
SELECT * FROM zifporder INTO TABLE ta_orders WHERE
type = im_ordertype.
ENDIF.
IF sy-subrc NE 0.
RAISE no_data.
ENDIF.
ENDFUNCTION.
Listing 2.1 Funktionsbaustein »Z_IFP_ORDER_GETLIST«
106
RFC-Funktionsbausteine in ABAP
Dieser Funktionsbaustein definiert in seiner Schnittstelle die beiden
optionalen Importparameter IM_ORDERTYPE und IM_REFID. IM_
ORDERTYPE ist mit dem Vorschlagswert 'SO' (für Sales Order, Kundenauftrag) versehen, sodass der Funktionsbaustein nach Kundenaufträgen sucht, falls IM_ORDERTYPE beim Aufruf nicht explizit mit 'PO' (für
Purchase Order, Lieferantenbestellung) belegt wird. Die gefundenen
Bestellungen schreibt der Funktionsbaustein in den Tabellenparameter TA_ORDERS.
Der Funktionsbaustein prüft zunächst, ob der Aufrufer die Berechtigung hat, Bestellungen zu lesen. Darf der Aufrufer keine Bestellungen lesen, löst der Funktionsbaustein die Ausnahme NOT_AUTHORIZED
aus. Danach liest der Funktionsbaustein über einen SELECT-Befehl
Bestellungen aus der Datenbank und berücksichtigt dabei in der
WHERE-Klausel die Importparameter. Findet er keine Daten, löst er die
Ausnahme NO_DATA aus.
Der nächste Funktionsbaustein, Z_IFP_ORDER_GETDETAIL, liefert
Details zu einer Bestellung bei bekannter ORDERID. Listing 2.2 zeigt
den Quellcode dieses Funktionsbausteins. Die Schnittstelle definiert
einen Importparameter für die ORDERID, einen Exportparameter für
den Bestellkopf, einen Tabellenparameter für die Bestellpositionen
sowie die Ausnahmen NOT_AUTHORIZED und NO_DATA.
FUNCTION z_ifp_order_getdetail.
*"--------------------------------------------------------*"*"Lokale Schnittstelle:
*" IMPORTING
*"
VALUE(IM_ORDERID)
TYPE ZIFPORDERID
*" EXPORTING
*"
VALUE(EX_ORDERHEAD) TYPE ZIFPORDER
*" TABLES
*"
TA_ORDERPOS STRUCTURE ZIFPORDERPOS
*" EXCEPTIONS
*"
NOT_AUTHORIZED
*"
NO_DATA
*"--------------------------------------------------------AUTHORITY-CHECK OBJECT 'ZIFPORDER' ID 'ACTVT' FIELD '03'.
IF sy-subrc NE 0.
RAISE not_authorized.
ENDIF.
* Bestellkopf lesen
SELECT SINGLE * FROM zifporder INTO ex_orderhead
WHERE orderid = im_orderid.
107
Berechtigungsprüfung
2.1
2
Remote Function Call mit ABAP
IF sy-subrc NE 0.
RAISE no_data.
ELSE.
* Bestellpositionen lesen
SELECT * FROM zifporderpos INTO TABLE ta_orderpos
WHERE orderid = im_orderid.
ENDIF.
ENDFUNCTION.
Listing 2.2 Funktionsbaustein »Z_IFP_ORDER_GETDETAIL«
Skalare und
strukturierte
Parameter
Der Importparameter IM_ORDERID muss beim Aufruf die ORDERID der
gewünschten Bestellung enthalten. Der Importparameter ist vom Typ
ZIFPORDERID, bezieht sich demnach direkt auf ein Datenelement.
Daher ist er ein sogenannter skalarer Parameter. Der Exportparameter EX_ORDERHEAD enthält nach dem Aufruf die Kopfdaten der Bestellung, der Tabellenparameter TA_ORDERPOS die Bestellpositionen.
Wird im Importparameter IM_ORDERID eine nicht vorhandene
ORDERID eingegeben, wird die Ausnahme NO_DATA ausgelöst, und
Export- und Tabellenparameter bleiben initial. Der Exportparameter
ist vom Typ ZIFPORDER, er bezieht sich demnach auf eine transparente
Tabelle im ABAP Dictionary. Er ist ein strukturierter Parameter.
Übergabe per Wert
Sowohl Import- als auch Exportparameter eines RFC-fähigen Funktionsbausteins müssen per Wert übergeben werden. Eine Referenzübergabe ist nicht möglich. Achten Sie auch bei den Funktionsbausteinen darauf, dass bei den Eigenschaften das Optionsfeld Remote
ausgewählt ist.
2.1.2
Aufruf per sRFC
Listing 2.3 zeigt den Quelltext eines Reports, der die beiden Funktionsbausteine über sRFC aufruft. Dies läuft über die ABAP-Anweisung CALL FUNCTION ... DESTINATION p_dest ... ab. Die Variable
p_dest wurde mit der PARAMETERS-Anweisung deklariert und ist vom
Typ RFCDEST. Die PARAMETERS-Anweisung sorgt dafür, dass für den
Report ein Selektionsbild generiert wird, das beim Start angezeigt
wird. Das Selektionsbild enthält ein Eingabefeld, in das der Benutzer
einen Wert für die Variable p_dest eingeben kann. Der Wert muss
der Name einer gültigen RFC-Destination sein, die mittels Transaktion SM59 gepflegt wurde.
108
RFC-Funktionsbausteine in ABAP
*&--------------------------------------------------------*& Report ZIFP_ORDERS_READ
*&--------------------------------------------------------REPORT zifp_orders_read.
DATA:
it_orderhead TYPE STANDARD TABLE OF zifporder,
wa_orderhead TYPE zifporder,
it_orderpos TYPE STANDARD TABLE OF zifporderpos,
wa_orderpos TYPE zifporderpos,
msg_text(80) TYPE c.
PARAMETERS:
p_dest TYPE rfcdest.
START-OF-SELECTION.
* ORDERID-Liste besorgen
CALL FUNCTION 'Z_IFP_ORDER_GETLIST'
DESTINATION p_dest
TABLES
ta_orders
= it_orderhead
EXCEPTIONS
not_authorized
= 1
no_data
= 2
system_failure
= 3 MESSAGE msg_text
communication_failure = 4 MESSAGE msg_text
OTHERS
= 5.
IF sy-subrc <> 0.
WRITE:/ msg_text.
ENDIF.
* Alle Bestellungen ausgeben
LOOP AT it_orderhead INTO wa_orderhead.
WRITE:/
wa_orderhead-orderid COLOR COL_KEY,
wa_orderhead-type,
wa_orderhead-refid,
wa_orderhead-buyer,
wa_orderhead-seller,
wa_orderhead-orderdate.
* Bestelldetails besorgen
CALL FUNCTION 'Z_IFP_ORDER_GETDETAIL'
DESTINATION p_dest
EXPORTING
im_orderid
= wa_orderhead-orderid
*
IMPORTING
*
EX_ORDERHEAD
=
TABLES
ta_orderpos
= it_orderpos
109
2.1
2
Remote Function Call mit ABAP
EXCEPTIONS
not_authorized
= 1
no_data
= 2
system_failure
= 3 MESSAGE msg_text
communication_failure = 4 MESSAGE msg_text
OTHERS
= 5.
IF sy-subrc <> 0.
WRITE:/ msg_text.
ENDIF.
* Bestelldetails ausgeben
LOOP AT it_orderpos INTO wa_orderpos.
WRITE:/
wa_orderpos-orderid COLOR COL_KEY,
wa_orderpos-orderpos COLOR COL_KEY,
wa_orderpos-matid,
wa_orderpos-mattext,
wa_orderpos-ordercount,
wa_orderpos-price,
wa_orderpos-currency.
ENDLOOP.
ULINE.
ENDLOOP.
Listing 2.3 Report »ZIFP_ORDERS_READ«
Systemausnahmen
Wie der Quellcode in Listing 2.3 illustriert, sollte der Aufrufer nicht
nur auf Ausnahmen reagieren, die in der Schnittstelle der Funktionsbausteine definiert werden, sondern zusätzlich auch auf die beiden
Systemausnahmen system_failure und communication_failure. Die
Ausnahme system_failure wird bei Systemfehlern beispielsweise
dann ausgelöst, wenn der aufgerufene Funktionsbaustein im Zielsystem nicht existiert. Die Ausnahme communication_failure wird bei
Kommunikationsfehlern ausgelöst, zum Beispiel wenn das Zielsystem nicht erreichbar ist oder die angegebene Destination nicht
gepflegt wurde. Bei beiden Fehlern kann über den MESSAGE-Zusatz die
Systemnachricht in einer Variablen vom Typ C gespeichert werden,
um damit Systeminformationen über den Fehler anzeigen zu können.
Neben den Destinationen, die mit Transaktion SM59 gepflegt werden, gibt es noch die drei Standarddestinationen SPACE, 'NONE' und
'BACK'. Ist p_dest initial bzw. wird stattdessen die Konstante SPACE
verwendet, wird der Funktionsbaustein lokal aufgerufen. Enthält
p_dest den Wert 'NONE', wird der Funktionsbaustein ebenfalls lokal
aufgerufen. Allerdings wird der Aufruf zum Gateway der aktuellen
110
RFC-Funktionsbausteine in ABAP
SAP-Instanz geleitet und so behandelt, als ob er von außen käme.
Steht Ihnen nur ein System zur Verfügung, können Sie diese Destination für einen RFC-Test verwenden. Möchten Sie aus einem RFC-Baustein einen Funktionsbaustein im rufenden System aufrufen, können
Sie dazu die Destination 'BACK' verwenden. Sie dient zum Rückruf in
den Aufrufer.
Nach jedem CALL FUNCTION erfolgt auf dem rufenden System implizit
ein Commit auf der Datenbank. Änderungen an der Datenbank, die
vor dem Funktionsaufruf mit INSERT, UPDATE, MODIFY oder DELETE
vorgenommen wurden, können danach nicht mehr rückgängig
gemacht werden. Auch im aufgerufenen System findet ein impliziter
Commit auf der Datenbank statt, das heißt, jeder RFC-Funktionsaufruf entspricht einem Dialogschritt. Daher eignet sich der synchrone
RFC in dieser Form nur zum Lesen, nicht aber dazu, systemübergreifende Transaktionen zu realisieren.
2.1.3
Impliziter
DatenbankCommit
Funktionsbausteine zum Löschen und Ändern
Listing 2.4 zeigt den Quellcode des Funktionsbausteins Z_IFP_ORDER_
CHANGE, mit dem die Daten einer Bestellung geändert werden
können.
FUNCTION z_ifp_order_change.
*"---------------------------------------------------------*"*"Lokale Schnittstelle:
*" IMPORTING
*"
VALUE(IM_ORDERHEADER) TYPE ZIFPORDER
*"
VALUE(IM_ORDERHEADERX) TYPE ZIFPORDERX
*"
VALUE(IM_TESTRUN)
TYPE CHAR1 DEFAULT SPACE
*"
VALUE(IM_COMMIT)
TYPE CHAR1 DEFAULT SPACE
*" TABLES
*"
TA_ORDERPOS STRUCTURE ZIFPORDERPOS
*"
TA_ORDERPOSX STRUCTURE ZIFPORDERPOSX
*" EXCEPTIONS
*"
NOT_AUTHORIZED
*"
NO_DATA
*"
NO_LOCK
*"---------------------------------------------------------DATA:
orderheader_old TYPE zifporder,
orderpos_old
TYPE zifporderpos,
orderpos_new
TYPE zifporderpos,
orderposx
TYPE zifporderposx.
111
Bestelldaten
ändern
2.1
2
Remote Function Call mit ABAP
*
*
*
*
*
AUTHORITY-CHECK OBJECT 'ZIFPORDER' ID 'ACTVT' FIELD '02'.
IF sy-subrc NE 0.
RAISE not_authorized.
ENDIF.
Sperre setzen
CALL FUNCTION 'ENQUEUE_EZIFPORDER'
EXPORTING
orderid = im_orderheader-orderid
EXCEPTIONS
OTHERS = 1.
IF sy-subrc <> 0.
RAISE no_lock.
ENDIF.
Kopfdaten lesen
SELECT SINGLE * FROM zifporder
INTO orderheader_old
WHERE orderid = im_orderheader-orderid.
IF sy-subrc <> 0.
Nichts gefunden: Sperre entfernen
CALL FUNCTION 'DEQUEUE_EZIFPORDER'
EXPORTING
orderid = im_orderheader-orderid.
RAISE no_data.
ELSE.
IF im_testrun IS INITIAL.
Änderungen in Kopfdaten vornehmen
IF NOT im_orderheaderx-type IS INITIAL.
orderheader_old-type
= im_orderheader-type.
ENDIF.
IF NOT im_orderheaderx-refid IS INITIAL.
orderheader_old-refid
= im_orderheader-refid.
ENDIF.
IF NOT im_orderheaderx-buyer IS INITIAL.
orderheader_old-buyer
= im_orderheader-buyer.
ENDIF.
IF NOT im_orderheaderx-seller IS INITIAL.
orderheader_old-seller
= im_orderheader-seller.
ENDIF.
IF NOT im_orderheaderx-orderdate IS INITIAL.
orderheader_old-orderdate =
im_orderheader-orderdate.
ENDIF.
Verbuchungsbaustein für Kopfdaten aufrufen
CALL FUNCTION 'Z_IFP_V_UPDATE_ORDER'
IN UPDATE TASK
112
RFC-Funktionsbausteine in ABAP
*
*
*
*
*
EXPORTING
im_orderheader = orderheader_old.
ENDIF.
ENDIF.
Schleife über die zu ändernden Bestellpositionen
LOOP AT ta_orderpos INTO orderpos_new.
READ TABLE ta_orderposx INTO orderposx INDEX sy-index.
Bestellposition von Datenbank lesen
SELECT SINGLE * FROM zifporderpos
INTO orderpos_old
WHERE
orderid = orderpos_new-orderid AND
orderpos = orderpos_new-orderpos.
IF sy-subrc <> 0.
Nichts gefunden: Sperre lösen
CALL FUNCTION 'DEQUEUE_EZIFPORDER'
EXPORTING
orderid = im_orderheader-orderid.
ROLLBACK WORK.
RAISE no_data.
ELSE.
IF im_testrun IS INITIAL.
Bestellposition wie gewünscht ändern
IF NOT orderposx-matid IS INITIAL.
orderpos_old-matid
= orderpos_new-matid.
ENDIF.
IF NOT orderposx-mattext IS INITIAL.
orderpos_old-mattext
= orderpos_new-mattext.
ENDIF.
IF NOT orderposx-ordercount IS INITIAL.
orderpos_old-ordercount = orderpos_new-ordercount.
ENDIF.
IF NOT orderposx-price IS INITIAL.
orderpos_old-price
= orderpos_new-price.
ENDIF.
IF NOT orderposx-currency IS INITIAL.
orderpos_old-currency
= orderpos_new-currency.
ENDIF.
Verbuchungsbaustein für Bestellposition aufrufen
CALL FUNCTION 'Z_IFP_V_UPDATE_ORDERPOS'
IN UPDATE TASK
EXPORTING
im_orderpos = orderpos_old.
ENDIF.
ENDIF.
113
2.1
2
Remote Function Call mit ABAP
ENDLOOP.
* Falls gewünscht, COMMIT WORK absetzen
IF im_commit = 'X'.
COMMIT WORK.
CALL FUNCTION 'DEQUEUE_ALL'.
ENDIF.
ENDFUNCTION.
Listing 2.4 Funktionsbaustein »Z_IFP_ORDER_CHANGE«
Der Funktionsbaustein hat den strukturierten Importparameter
IM_ORDER_HEADER für die Kopfdaten und den Tabellenparameter
TA_ORDERPOS für die Positionsdaten der Bestellung. Über das Feld
IM_ORDER_HEADER-ORDERID wird die Bestellung eindeutig identifiziert.
Der Funktionsbaustein nimmt die Datenbankänderungen nicht
direkt vor, sondern ruft die Verbuchungsbausteine aus Abschnitt
1.4.5, »Verbuchungsbausteine«, mit dem Zusatz IN UPDATE TASK auf.
Der optionale Importparameter IM_COMMIT steuert, ob der Funktionsbaustein selbst ein COMMIT WORK absetzt.
X-Parameter mit
Änderungs-Flags
Für jeden Importparameter mit den zu ändernden Daten hat der
Funktionsbaustein einen zweiten Importparameter. In diesem zweiten Parameter kann der Aufrufer angeben, welche der übergebenen
Daten im ersten Parameter tatsächlich geändert werden sollen. Dies
ist notwendig, da ABAP keine NULL-Werte kennt und deshalb einem
RFC-Funktionsbaustein keine NULL-Werte in den Parametern übergeben werden können. Ist ein Importparameter initial, kann daher
der Funktionsbaustein nicht entscheiden, ob der Aufrufer den entsprechenden Wert in der Datenbank auf den Initialwert ändern
möchte oder ob die Daten nicht geändert werden sollen.
Der Funktionsbaustein hat daher die beiden zusätzlichen Parameter
IM_ORDERHEADERX und TA_ORDERPOSX. Der Importparameter IM_
ORDERHEADERX ist vom Typ ZIFPORDERX. Dieser Typ hat bis auf MANDT
und ORDERID die gleichen Komponenten wie die transparente Tabelle
ZIFPORDER, allerdings sind alle Komponenten vom Typ CHAR1. Eine
Komponente des Parameters IM_ORDERHEADERX ist mit 'X' belegt,
wenn der Wert der jeweiligen Komponente des Bestellkopfes durch
den Wert im Importparameter IM_ORDERHEADER ersetzt werden soll.
Entsprechendes gilt für den Importparameter TA_ORDERPOSX, der vom
Zeilentyp ZIFPORDERPOSX ist.
114
RFC-Funktionsbausteine in ABAP
Zunächst prüft der Funktionsbaustein, ob der Aufrufer die Berechtigung zum Ändern von Bestellungen hat. Falls nicht, löst er die Ausnahme NOT_AUTHORIZED aus. Ist der Aufrufer berechtigt, eine Bestellung zu ändern, setzt der Funktionsbaustein eine exklusive
Schreibsperre auf die Bestellung und all ihre Positionen. Schlägt das
Setzen der Sperre fehl, wird die Ausnahme NO_LOCK ausgelöst, und es
werden keine Änderungen vorgenommen. Konnte die Sperre erfolgreich gesetzt werden, werden die Änderungen vorgenommen.
Exklusive
Schreibsperre
Vor dem Aufruf der Verbuchungsbausteine prüft der Funktionsbaustein, ob die Bestellung und die Bestellpositionen existieren. Falls
nicht, wird die Sperre wieder gelöscht, ein ROLLBACK WORK initiiert
und die Ausnahme NO_DATA ausgelöst.
Am Schluss überprüft der Funktionsbaustein den Importparameter
IM_COMMIT. Falls dieser Parameter mit 'X' belegt wird, führt der
Funktionsbaustein ein COMMIT WORK aus und löst die gesetzten Sperren. Auf diese Art und Weise können mehrere Änderungen in einer
Logical Unit of Work (LUW) vorgenommen werden. Erst der letzte
Funktionsbaustein in der Änderungsserie muss dann mit IM_COMMIT
= 'X' versorgt werden. Die Verwendung von Verbuchungsbausteinen innerhalb einer SAP-LUW haben wir in Abschnitt 1.4.5, »Verbuchungsbausteine«, erläutert.
Die Funktionsbausteine Z_IFP_ORDER_DELETE und Z_IFP_ORDER_
DELETEPOS zum Löschen einer Bestellung und zum Löschen einer
Bestellposition sind analog aufgebaut, nur werden diesmal nicht die
kompletten Daten übergeben, sondern lediglich die ORDERID und die
ORDERPOS. Diese identifizieren die zu löschenden Datensätze eindeutig. Listing 2.5 zeigt den Funktionsbaustein Z_IFP_ORDER_DELETE.
FUNCTION Z_IFP_ORDER_DELETE.
*"--------------------------------------------------------*"*"Lokale Schnittstelle:
*" IMPORTING
*"
VALUE(IM_ORDERID) TYPE ZIFPORDERID
*"
VALUE(IM_COMMIT) TYPE CHAR1 DEFAULT SPACE
*" EXCEPTIONS
*"
NOT_AUTHORIZED
*"
NO_DATA
*"
NO_LOCK
*"--------------------------------------------------------AUTHORITY-CHECK OBJECT 'ZIFPORDER' ID 'ACTVT' FIELD '06'.
IF sy-subrc NE 0.
115
Daten löschen
2.1
2
Remote Function Call mit ABAP
RAISE not_authorized.
ENDIF.
* Sperre setzen
CALL FUNCTION 'ENQUEUE_EZIFPORDER'
EXPORTING
orderid = im_orderid
exceptions
others = 1.
IF sy-subrc <> 0.
RAISE no_lock.
ENDIF.
* Datensatz lesen
SELECT SINGLE COUNT( * ) FROM zifporder
WHERE orderid = im_orderid.
IF sy-subrc <> 0.
* Nicht gefunden: Sperre lösen
CALL FUNCTION 'DEQUEUE_EZIFPORDER'
EXPORTING
orderid = im_orderid.
RAISE no_data.
ELSE.
* Verbuchungsbaustein zum Löschen aufrufen
CALL FUNCTION 'Z_IFP_V_DELETE_ORDER'
IN UPDATE TASK
EXPORTING
im_orderid = im_orderid.
ENDIF.
IF im_commit = 'X'.
* Falls gewünscht, COMMIT WORK absetzen und Sperre lösen
COMMIT WORK.
CALL FUNCTION 'DEQUEUE_ALL'.
ENDIF.
ENDFUNCTION.
Listing 2.5 Funktionsbaustein »Z_IFP_ORDER_DELETE«
Aufruf über sRFC
Der Aufruf dieser drei Funktionsbausteine kann mit dem synchronen
RFC vorgenommen werden. Im Fall der Exception communication_
failure kann der Aufruf später problemlos wiederholt werden.
Denn selbst wenn die Funktionsbausteine trotz des Kommunikationsfehlers auf dem Zielsystem ausgeführt wurden, ändert ein nochmaliger Aufruf nichts am Zustand der Datenbank im Zielsystem. Im
schlechtesten Fall wird der Datensatz unnötigerweise nochmals geändert, das heißt, es wird versucht, einen schon gelöschten Datensatz
nochmals zu löschen.
116
Transaktionaler RFC
2.2
2.2
Transaktionaler RFC
Wie Abschnitt 2.1, »RFC-Funktionsbausteine in ABAP«, erläutert, ist
es problematisch, Datensätze in einem entfernten System mittels
sRFC zu ändern oder zu löschen. Das Anlegen von Datensätzen per
sRFC ist noch heikler, da nun im Fehlerfall der Aufruf nicht einfach
wiederholt werden kann, da sonst möglicherweise Datensätze doppelt angelegt würden.
Aufruf über tRFC
Besser ist es daher, die Funktionsbausteine, die Daten ändern oder
neu anlegen, mit einem transaktionalen RFC aufzurufen. Transaktional bedeutet in diesem Fall, dass im aufrufenden System die übergebenen Parameter gespeichert werden und der Aufruf mit Transaktion SM58 nochmals wiederholt werden kann.
Einen tRFC-Aufruf realisieren Sie dadurch, dass Sie beim Aufruf den
Zusatz IN BACKGROUND TASK verwenden. Dieser Zusatz muss vor dem
DESTINATION-Zusatz stehen. Zum Zeitpunkt des Aufrufs wird der
Funktionsbaustein auf dem Zielsystem noch nicht ausgeführt, sondern der Aufruf wird mitsamt seinen Parametern und einer Transaktions-ID in den Tabellen ARFCSSTATE und ARFCSDATA im lokalen
System gespeichert. Erst beim COMMIT WORK erfolgt der Aufruf im Zielsystem. Ist der Aufruf erfolgreich, werden die Einträge in den Vormerktabellen ARFCSSTATE und ARFCSDATA gelöscht.
Ist das Zielsystem nicht erreichbar, kann automatisch ein Job erzeugt
werden, der den Aufruf mit derselben Transaktions-ID wiederholt.
Die Anzahl der Wiederholungsversuche und die Länge des Intervalls
zwischen den Wiederholungen werden bei der Pflege der Destination mit Transaktion SM59 bei den tRFC-Optionen hinterlegt. Es
empfiehlt sich jedoch eher, die tRFC-Statustabellen mit Transaktion
SM58 regelmäßig zu überwachen und abgebrochene Aufrufe von
dort aus manuell zu wiederholen, nachdem das Kommunikationsproblem beseitigt wurde.
Bricht der Remote-Funktionsbaustein mit einem Fehler ab, führt das
Zielsystem automatisch den Befehl ROLLBACK WORK aus. Auf dem aufrufenden System wird kein Job zur Wiederholung des Aufrufs eingeplant. Der Fehler, der im Zielsystem aufgetreten ist, wird in den
tRFC-Statustabellen protokolliert. Auch in diesem Fall kann der abgebrochene Aufruf aus Transaktion SM58 wiederholt werden.
117
Verhalten im
Fehlerfall
2
Remote Function Call mit ABAP
Falls mit dem Befehl COMMIT WORK auch die lokale Verbuchung
angestoßen wird, wird die Logical Unit of Work (LUW) im Zielsystem
nur dann ausgeführt, wenn die lokale Verbuchung fehlerfrei abgeschlossen wurde.
Beim Aufruf mit dem Zusatz IN BACKGROUND TASK können Sie weder
den Zusatz EXPORTING verwenden noch auf Ausnahmen hin testen,
die in der Schnittstelle des Funktionsbausteins definiert wurden. Beides steht erst fest, wenn der Funktionsbaustein im Zielsystem tatsächlich ausgeführt wurde, und dies ist frühestens nach dem COMMIT
WORK der Fall.
Spezielle
Funktionsbausteine
Alle Funktionsbausteine, die im Quellsystem mit dem Zusatz IN
BACKGROUND TASK aufgerufen werden, bilden im Zielsystem eine Logical Unit of Work (LUW). Sie werden im Zielsystem innerhalb einer
einzigen Datenbanktransaktion abgearbeitet. Bricht ein Funktionsbaustein ab, erfolgt automatisch ein ROLLBACK im Zielsystem. Die
LUW wird durch eine Transaktions-ID identifiziert. Diese Transaktions-ID kann im aufrufenden System über den Funktionsbaustein
ID_OF_BACKGROUNDTASK ermittelt werden, der vor dem COMMIT WORK
aufgerufen werden muss. Mit dem Funktionsbaustein STATUS_OF_
BACKGROUNDTASK kann unter Angabe der Transaktions-ID der Ausführungsstatus der LUW ermittelt werden. Dieser Funktionsbaustein
muss im lokalen System nach dem COMMIT WORK aufgerufen werden.
Soll die LUW im Zielsystem nicht sofort ausgeführt werden, können
Sie vor dem COMMIT WORK Datum und Uhrzeit der Ausführung über
den Funktionsbaustein START_OF_BACKGROUNDTASK festlegen.
Bei den beiden vorliegenden Funktionsbausteinen kann der Fall eintreten, dass der betreffende Datensatz gesperrt ist. Dann brechen die
beiden Funktionsbausteine mit einem RAISE ab. Wie beschrieben,
können Sie in Transaktion SM58 die LUW nochmals ausführen lassen. Alternativ könnten Sie aber auch den Funktionsbaustein
RESTART_OF_BACKGROUNDTASK aufrufen, damit im rufenden System der
Job wieder eingeplant wird.
Funktionsbausteine zum
Anlegen
Listing 2.6 zeigt einen Funktionsbaustein, mit dem eine Bestellung
angelegt werden kann. Als Importparameter werden die Details der
neu anzulegenden Bestellung übergeben. Der Funktionsbaustein
prüft wie üblich, ob der Aufrufer eine Bestellung anlegen kann.
Danach erzeugt er eine Bestellnummer, die er im Exportparameter
EX_ORDERID zurückgibt.
118
Transaktionaler RFC
FUNCTION z_ifp_order_create.
*"--------------------------------------------------------*"*"Lokale Schnittstelle:
*" IMPORTING
*"
VALUE(IM_ORDERHEADER) TYPE ZIFPORDER
*"
VALUE(IM_TESTRUN)
TYPE CHAR1 DEFAULT SPACE
*"
VALUE(IM_COMMIT)
TYPE CHAR1 DEFAULT SPACE
*" EXPORTING
*"
VALUE(EX_ORDERID)
TYPE ZIFPORDERID
*" TABLES
*"
TA_ORDERPOS STRUCTURE ZIFPORDERPOS
*" EXCEPTIONS
*"
NOT_AUTHORIZED
*"
NO_NUMBER
*"
NO_LOCK
*"--------------------------------------------------------AUTHORITY-CHECK OBJECT 'ZIFPORDER' ID 'ACTVT' FIELD '01'.
IF sy-subrc NE 0.
RAISE not_authorized.
ENDIF.
CALL FUNCTION 'NUMBER_GET_NEXT'
EXPORTING
nr_range_nr = '01'
object
= 'ZIFPORDER'
IMPORTING
number
= im_orderheader-orderid
EXCEPTIONS
OTHERS
= 1.
IF sy-subrc <> 0.
RAISE no_number.
ENDIF.
CALL FUNCTION 'ENQUEUE_EZIFPORDER'
EXPORTING
orderid
= im_orderheader-orderid
EXCEPTIONS
OTHERS = 1.
IF sy-subrc <> 0.
RAISE no_lock.
ENDIF.
IF im_testrun IS INITIAL.
CALL FUNCTION 'Z_IFP_V_CREATE_ORDER'
IN UPDATE TASK
EXPORTING
im_orderheader = im_orderheader
TABLES
im_orderpos
= ta_orderpos.
119
2.2
2
Remote Function Call mit ABAP
IF im_commit = 'X'.
COMMIT WORK.
CALL FUNCTION 'DEQUEUE_ALL'.
ENDIF.
ENDIF.
ex_orderid = im_orderheader-orderid.
ENDFUNCTION.
Listing 2.6 Funktionsbaustein »Z_IFP_ORDER_CREATE«
Aufruf über tRFC
Funktionsbausteine zum Anlegen von Datensätzen werden in der
Regel per transaktionalem RFC aufgerufen, wie Listing 2.7 zeigt. Der
Report ZIFP_ORDER_CREATE liest einen Lieferantenauftrag aus der
lokalen Datenbank, um mit diesen Daten eine Kundenbestellung im
Lieferantensystem anzulegen. Der Aufruf erfolgt transaktional, da der
Aufrufer im Fall eines communication_failure nicht weiß, ob der
Datensatz im Zielsystem bereits angelegt wurde. Bei einem nochmaligen Aufruf würde dann nämlich ein zweiter Datensatz erzeugt.
Wird der Funktionsbaustein jedoch transaktional aufgerufen, werden
im aufrufenden System die übergebenen Parameter gespeichert, und
der Aufruf kann bei einem communication_failure mit Transaktion
SM58 problemlos nochmals wiederholt werden. Es ist auf jeden Fall
sichergestellt, dass der Funktionsbaustein im Zielsystem nur einmal
ausgeführt wird.
*&------------------------------------------------------*& Report ZIFP_ORDER_CREATE
*&------------------------------------------------------REPORT zifp_order_create.
PARAMETERS:
pa_id TYPE zifporder-orderid,
p_dest TYPE rfcdes-rfcdest value check.
DATA:
orderheader TYPE zifporder,
it_orderpos TYPE STANDARD TABLE OF zifporderpos,
msg_text(80) TYPE c.
AT SELECTION-SCREEN.
* Prüfen, ob es die ausgewählte Lieferantenbestellung gibt
SELECT SINGLE * FROM zifporder
INTO orderheader
WHERE
orderid
= pa_id AND
type
= 'PO'.
IF sy-subrc <> 0.
120
Transaktionaler RFC
2.2
Message e001(zifp).
endif.
START-OF-SELECTION.
* Lieferantenbestellung aus Quelle als Kundenauftrag an Ziel
*
Bestelltyp auf Kundenauftrag setzen
orderheader-type = 'SO'.
*
ORDERID auf REFID setzen
orderheader-refid = orderheader-orderid.
*
Positionsdaten lesen
SELECT * FROM zifporderpos INTO TABLE it_orderpos
WHERE
orderid = pa_id.
*
Kundenauftrag im Zielsystem erzeugen
CALL FUNCTION 'Z_IFP_ORDER_CREATE'
IN BACKGROUND TASK
DESTINATION p_dest
EXPORTING
im_orderheader
= orderheader
im_commit
= 'X'
TABLES
ta_orderpos
= it_orderpos
EXCEPTIONS
system_failure
= 1 MESSAGE msg_text
communication_failure = 2 MESSAGE msg_text
OTHERS
= 3.
IF sy-subrc <> 0.
WRITE:/ msg_text.
ROLLBACK WORK.
ENDIF.
COMMIT WORK.
Listing 2.7 Report »ZIFP_ORDER_CREATE«
Beim Aufruf des Funktionsbausteins über den transaktionalen RFC
erhalten Sie jedoch weder die Exportparameter noch eine eventuell
im Funktionsbaustein ausgelöste Ausnahme zurück. Sie wissen hier
daher nicht, welche ORDERID der erzeugte Kundenauftrag im Zielsystem erhalten hat bzw. ob der Auftrag überhaupt erzeugt werden
konnte. Daher wird dem Kundenauftrag im Feld REFID die Nummer
der ursprünglichen Lieferantenbestellung mitgegeben. Mit dem
Funktionsbaustein Z_IFP_ORDER_GETLIST können Sie über die REFID
nach den Kundenaufträgen suchen und damit die ORDERID ermitteln.
Exportparameter
nicht zugänglich
Ein etwas anderer Weg wird zum Beispiel bei BAPIs beschritten. Hier
werden auch ändernde oder erzeugende Funktionsbausteine per
Transaktionsmodell bei BAPIs
121
2
Remote Function Call mit ABAP
sRFC aufgerufen. Damit kann das rufende System Exportparameter
und Ausnahmen sofort erfahren. Der RFC-Funktionsbaustein nimmt
die Verbuchung jedoch nicht unmittelbar vor, sondern ruft einen
Verbuchungsbaustein mit dem Zusatz IN UPDATE TASK auf. Damit im
Zielsystem die Verbuchung angestoßen wird, ruft das lokale System
das BAPI BAPI_COMMIT_WORK im Zielsystem auf. Dieses BAPI enthält
im Wesentlichen die Codezeile COMMIT WORK und löst damit die Verbuchung im Zielsystem aus. Unsere Funktionsbausteine Z_IFP_
ORDER_CHANGE, Z_IFP_ORDER_DELETE und Z_IFP_ORDER_CREATE sind so
gestaltet, dass sie für eine BAPI-Implementierung wiederverwendet
werden können.
2.3
Queued RFC
Logical Units of Work, die über tRFC erstellt wurden, werden im Zielsystem unabhängig voneinander ausgeführt. Insbesondere bei Netzwerkproblemen ist damit nicht garantiert, dass die Reihenfolge des
Aufrufs der Funktionsbausteine im lokalen und die ihrer Abarbeitung
im Zielsystem dieselbe ist. Um diese Reihenfolge zu gewährleisten,
kann ab Basis-Release 4.5B der queued RFC (qRFC) eingesetzt werden.
qRFC-Architektur
qRFC ist eine Erweiterung von tRFC. Diese Erweiterung besteht aus
einer zusätzlichen Schicht zwischen der sendenden bzw. der empfangenden Anwendung und der tRFC-Schicht. Das qRFC-Kommunikationsmodell unterscheidet drei Szenarien, die in Abbildung 2.1
dargestellt sind:
왘
tRFC
Dieses Szenario können Sie verwenden, wenn die Daten von hintereinander ausgeführten Funktionsbausteinen nicht miteinander
verbunden sind. Die rufende Anwendung im Client-System verwendet tRFC, um sicherzustellen, dass die Daten im Serversystem
nur einmal verarbeitet werden. Die Reihenfolge, in der die gerufenen Funktionsbausteine abgearbeitet werden, ist nicht garantiert.
Falls Übertragungsfehler auftreten, kann es durchaus sein, dass
später abgesetzte tRFC-Funktionsaufrufe im Empfangssystem früher abgearbeitet werden.
왘
qRFC mit Ausgangswarteschlange
In diesem Szenario verwendet das sendende System eine Ausgangswarteschlange (Outbound Queue), um die Serialisierung der
122
Queued RFC
Daten sicherzustellen. Die aufgerufenen Funktionsmodule werden
in der Ausgangswarteschlange des sendenden Systems gespeichert, und es ist damit garantiert, dass sie genau einmal und genau
in der Aufrufreihenfolge im empfangenden System abgearbeitet
werden. Das Empfangssystem hat dabei keine Kenntnis von der
Existenz der Ausgangswarteschlange im sendenden System. Dieses
Szenario kann daher auch mit externen tRFC-Servern eingesetzt
werden. Der Code im externen tRFC-Server muss dazu nicht geändert werden.
왘
qRFC mit Ausgangs- und Eingangswarteschlange
Hier gibt es zusätzlich zur Ausgangswarteschlange im sendenden
System auch eine Eingangswarteschlange (Inbound Queue) im
empfangenden System. Selbst wenn das empfangende System eine
Eingangswarteschlange bereitstellt, gibt es im sendenden System
immer eine Ausgangswarteschlange, weil diese dazu dient, die Aufrufe zu serialisieren. Die Eingangswarteschlange im empfangenden
System dagegen trennt die Übertragung der Aufrufe von deren
Verarbeitung. Die übertragenen Aufrufe werden so lange in der
Eingangswarteschlange gespeichert, bis die Anwendung oder ein
Standardprozess, der QIN-Scheduler, die Verarbeitung anstoßen.
Die RFC-Bibliothek stellt Funktionen zur Verfügung, mit denen externe Clients per tRFC Funktionsaufrufe in eine Eingangswarteschlange eines empfangenden SAP-Systems einstellen können.
Sendende
Anwendung
Empfangende
Anwendung
Ausgangswarteschlange
QINScheduler
QOUTScheduler
Eingangswarteschlange
tRFC
tRFC
tRFC
tRFC mit Ausgangswarteschlange
tRFC mit Eingangswarteschlange
Abbildung 2.1 qRFC-Kommunikationsszenarien
123
2.3
2
Remote Function Call mit ABAP
2.3.1
qRFC mit Ausgangswarteschlange
Um eine qRFC-LUW in eine Ausgangswarteschlange zu stellen, müssen Sie vor dem qRFC-Aufruf den Namen der Ausgangswarteschlange
angeben, indem Sie den Funktionsbaustein TRFC_SET_QUEUE_NAME
lokal aufrufen. Mit COMMIT WORK schließen Sie dann die LUW ab. Listing 2.8 zeigt ein Beispiel, das eine qRFC-LUW in eine Queue mit dem
Namen ZIFPQUEUE stellt. Die LUW besteht aus mehreren Aufrufen des
Funktionsbausteins Z_IFP_ORDER_CREATE.
*&---------------------------------------------------------*
*& Report ZIFP_QRFC
*&---------------------------------------------------------*
REPORT zifp_qrfc.
DATA:
orderheader
TYPE zifporder,
it_orderheader TYPE STANDARD TABLE OF zifporder,
it_orderpos
TYPE STANDARD TABLE OF zifporderpos.
SELECT-OPTIONS:
so_id FOR orderheader-orderid.
PARAMETERS:
p_dest TYPE rfcdes-rfcdest VALUE CHECK.
AT SELECTION-SCREEN.
* Prüfen, ob die Lieferantenbestellungen existieren
SELECT * FROM zifporder
INTO TABLE it_orderheader
WHERE
orderid IN so_id AND
type
= 'PO'.
IF sy-subrc <> 0.
MESSAGE e001(zifp).
ENDIF.
START-OF-SELECTION.
* qRFC initialisieren
CALL FUNCTION 'TRFC_QUEUE_INITIALIZE'.
CALL FUNCTION 'TRFC_SET_QUEUE_NAME'
EXPORTING
qname
= 'ZIFPQUEUE'
EXCEPTIONS
invalid_queue_name = 1
OTHERS
= 2.
CHECK sy-subrc EQ 0.
* Für jede Lieferantenbestellung einen
* Kundenauftrag erzeugen
LOOP AT it_orderheader INTO orderheader.
124
Queued RFC
2.3
orderheader-type = 'SO'.
orderheader-refid = orderheader-orderid.
* Positionen zum Auftrag lesen
SELECT * FROM zifporderpos INTO TABLE it_orderpos
WHERE
orderid = orderheader-orderid.
* Kundenauftrag im Zielsystem anlegen
CALL FUNCTION 'Z_IFP_ORDER_CREATE'
IN BACKGROUND TASK
DESTINATION p_dest
EXPORTING
im_orderheader
= orderheader
im_commit
= ' '
TABLES
ta_orderpos
= it_orderpos.
ENDLOOP.
COMMIT WORK.
Listing 2.8 qRFC mit Ausgangswarteschlange
Die Abarbeitung der Ausgangswarteschlangen wird durch den
QOUT-Scheduler veranlasst, den Sie mit Transaktion SMQS überwachen können. Sobald eine LUW im sendenden System abgeschlossen
wurde, geschieht zweierlei:
왘
Die Zieldestination wird beim QOUT-Scheduler registriert.
왘
Der QOUT-Scheduler wird aktiviert und arbeitet die Warteschlangen zu dieser Zieldestination ab.
QOUT-Scheduler
Überwachung der Ausgangswarteschlange
Damit Sie mit der Monitoring-Transaktion SMQ1 für die Überwachung der
ausgehenden Warteschlangen im Normalfall überhaupt etwas sehen, müssen Sie zu einem kleinen Trick greifen: In Transaktion SMQS für den
QOUT-Scheduler klicken Sie auf den Button Deregistrierung, um Ihre
Zieldestination beim QOUT-Scheduler zu deregistrieren. Wenn Sie dann
den Report ZIFP_QRFC in Listing 2.8 ausführen, sehen Sie die Ausgangswarteschlange ZIFPQUEUE in Transaktion SMQ1, dem qRFC-Monitor für
die Ausgangswarteschlangen. Wählen Sie diese Ausgangswarteschlange in
Transaktion SMQ1, und lassen Sie sich die Details anzeigen.
Wenn Sie den im Kasten beschriebenen Trick anwenden, sehen Sie
sämtliche LUWs einer Ausgangswarteschlange. Wenn Sie eine LUW
auswählen und sich wiederum die Details anzeigen lassen, sehen Sie
die Funktionsbausteine in dieser LUW (siehe Abbildung 2.2). Aus
125
Logical Units of
Work einer
Ausgangswarteschlange
2
Remote Function Call mit ABAP
diesem Bildschirm können Sie dann die Ausgangswarteschlange
manuell an das Zielsystem senden.
Abbildung 2.2 Funktionsbausteine in Ausgangswarteschlange
Zieldestination
registrieren
Normalerweise registrieren Sie jedoch die Zieldestination manuell
oder automatisch beim QOUT-Scheduler. Dieser arbeitet dann die
Ausgangswarteschlange sofort ab, sobald die LUW mit einem COMMIT
WORK abgeschlossen wird.
2.3.2
qRFC mit Ausgangs- und Eingangswarteschlange
Um eine tRFC-LUW im empfangenden System zunächst in eine Eingangswarteschlange zu stellen, muss vor jedem einzelnen tRFC-Aufruf im sendenden System der Name der Eingangswarteschlange
durch einen lokalen Aufruf des Funktionsbausteins TRFC_SET_QIN_
PROPERTIES angegeben werden. Optional kann mit diesem Parameter
auch der Name der Ausgangswarteschlange angegeben werden, der
sonst gleich dem Namen der Eingangswarteschlange gewählt wird.
Listing 2.9 zeigt ein Beispiel.
*&---------------------------------------------------------*
*& Report ZIFP_QRFC_IN
*&--------------------------------------------------------REPORT zifp_qrfc_in.
DATA:
orderheader
TYPE zifporder,
it_orderheader TYPE STANDARD TABLE OF zifporder,
it_orderpos
TYPE STANDARD TABLE OF zifporderpos.
SELECT-OPTIONS:
so_id FOR orderheader-orderid.
PARAMETERS:
p_dest TYPE rfcdes-rfcdest VALUE CHECK.
AT SELECTION-SCREEN.
126
Queued RFC
* Prüfen, ob Lieferantenbestellungen existieren
SELECT * FROM zifporder
INTO TABLE it_orderheader
WHERE
orderid IN so_id AND
type
= 'PO'.
IF sy-subrc <> 0.
MESSAGE e001(zifp).
ENDIF.
START-OF-SELECTION.
* qRFC initialisieren
CALL FUNCTION 'TRFC_QUEUE_INITIALIZE'.
* Zu jeder Lieferantenbestellung einen Kundenauftrag
* im Zielsystem anlegen
LOOP AT it_orderheader INTO orderheader.
orderheader-type = 'SO'.
orderheader-refid = orderheader-orderid.
* Bestellpositionen zum Auftrag lesen
SELECT * FROM zifporderpos INTO TABLE it_orderpos
WHERE
orderid = orderheader-orderid.
* Eigenschaften der Eingangswarteschlange setzen
CALL FUNCTION 'TRFC_SET_QIN_PROPERTIES'
EXPORTING
qout_name
= 'ZIFPQUEUE'
qin_name
= 'ZIFPQUEUE'
EXCEPTIONS
invalid_queue_name
= 1
OTHERS
= 2.
CHECK sy-subrc EQ 0.
* Kundenauftrag im Zielsystem anlegen
CALL FUNCTION 'Z_IFP_ORDER_CREATE'
IN BACKGROUND TASK
DESTINATION p_dest
EXPORTING
im_orderheader
= orderheader
im_commit
= ' '
TABLES
ta_orderpos
= it_orderpos.
ENDLOOP.
COMMIT WORK.
Listing 2.9 qRFC mit Eingangswarteschlange
Eine tRFC-LUW wird in eine Ausgangswarteschlange mit dem Namen
ZIFPQUEUE gestellt. Im empfangenden System wird diese LUW nicht
127
2.3
2
Remote Function Call mit ABAP
sofort abgearbeitet, sondern in eine Eingangswarteschlange mit dem
Namen ZIFPQUEUE gestellt. Die LUW besteht wiederum aus mehreren
Aufrufen des Funktionsbausteins Z_ORDER_CREATE. Vor jedem Aufruf
wird der Name der Eingangswarteschlange mit TRFC_SET_QIN_
PROPERTIES angegeben.
Monitoring
Die Abarbeitung der Eingangswarteschlange erfolgt nicht automatisch. Daher sehen Sie in Transaktion SMQ2, dem qRFC-Monitor für
Eingangswarteschlangen, auch sofort einen Eintrag für ZIFPQUEUE im
Zielsystem, nachdem Sie den Report ZIFP_QRFC_IN aus Listing 2.9 im
Sendesystem ausgeführt haben. Wählen Sie diese Eingangswarteschlange in Transaktion SMQ2, und lassen Sie sich die Details anzeigen. Sie sehen dann sämtliche LUWs in dieser Eingangswarteschlange. Wenn Sie eine LUW auswählen und sich wiederum die
Details anzeigen lassen, sehen Sie die Funktionsbausteine in dieser
LUW wie in Abbildung 2.3. Aus diesem oder dem vorangegangenen
Bild können Sie dann die Abarbeitung der Eingangswarteschlange im
Zielsystem veranlassen.
Abbildung 2.3 Funktionsbausteine in Eingangswarteschlange
Abarbeitung mit
»TRFC_QIN_
RESTART«
Die Verarbeitung der Funktionsbausteine in der Eingangswarteschlange erfolgt nicht automatisch, sondern kann durch den Aufruf
des Funktionsbausteins TRFC_QIN_RESTART von der Anwendung
selbst angestoßen werden. Dieser Funktionsbaustein kann entweder
aus einem Batch-Programm im Empfängersystem oder per RFC aus
dem Sendersystem aufgerufen werden. Diesem Funktionsbaustein
muss der Queue-Name übergeben werden.
QIN-Scheduler
Damit nicht jede qRFC-Anwendung ihren eigenen Scheduler zum
Anstoß der Queue-Verarbeitung schreiben muss, gibt es einen QINScheduler, der registrierte Queues automatisch abarbeitet. Die Registrierung einer Eingangs-Queue erfolgt dabei entweder programmatisch über den Funktionsbaustein QIWK_REGISTER oder von Hand über
den qRFC-Monitor für den QIN-Scheduler, Transaktion SMQR.
128
Background-RFC
2.4
Abbildung 2.4 zeigt diese Transaktion nach der Registrierung der Eingangswarteschlange ZIFPQUEUE.
Abbildung 2.4 Registrierung einer Eingangswarteschlange
Der asynchrone RFC (aRFC) dient der Verteilung von Aufgaben auf
mehrere SAP-Systeme. Mit dem Zusatz STARTING NEW TASK t kann ein
Funktionsbaustein asynchron auf einem anderen System gestartet
werden. Dabei ist t ein zeichenartiges Datenobjekt, mit dem der Programmierer der Task einen Namen gibt. Unter Angabe dieses
Namens kann er später Informationen zu der Task abfragen. Auch
beim aRFC können zum Zeitpunkt des Aufrufs keine Exportparameter und Ausnahmen entgegengenommen werden. Da aRFC aber für
externe Systeme nicht zur Verfügung steht, spielt er bei der Schnittstellenprogrammierung keine Rolle.
2.4
Background-RFC
Seit Release 7.0 EHP1 (Support Package Stack 04) von SAP NetWeaver
gibt es parallel zum besprochenen tRFC, qRFC und aRFC den Background-RFC (bgRFC). Alles, was Sie bislang mit tRFC, qRFC oder aRFC
realisiert haben, können Sie auch mit dem neuen bgRFC erreichen.
Der bgRFC bietet jedoch darüber hinaus verbesserte Leistungsfähigkeit, ein vereinheitlichtes objektorientiertes Programmiermodell
sowie erweiterte Funktionen für Programmierer und Administratoren. SAP empfiehlt, für neue Anwendungen den bgRFC einzusetzen
und alte Anwendungen, die noch tRFC und qRFC verwenden, nach
und nach zu migrieren.
129
Parallelisierung mit
dem aRFC
2
Remote Function Call mit ABAP
bgRFC-Szenarien
Der bgRFC kennt zwei Szenarien, die auch miteinander kombiniert
werden können:
왘
Outbound-Szenario
Die Aufrufe der Funktionsbausteine werden im rufenden System
aufgezeichnet und nach dem Abschluss der LUW durch COMMIT
WORK zu einem anderen System transportiert, in dem sie in der Reihenfolge des Aufrufs ausgeführt werden.
왘
Inbound-Szenario
Die Aufrufe der Funktionsbausteine werden im rufenden System
aufgezeichnet. Sie werden nach Abschluss der LUW durch COMMIT
WORK zu einem Anwendungsserver im selben System transportiert,
auf dem sie in der Reihenfolge des Aufrufs ausgeführt werden.
Das Inbound-Szenario dient demnach lediglich der Lastverteilung
innerhalb eines Systems und ersetzt den aRFC. Damit ist das
Inbound-Szenario für die Kommunikation mit entfernten Systemen
nicht relevant, daher soll hier nur das Inbound-Szenario betrachtet
werden, das den tRFC und den qRFC für die Kommunikation mit
fremden Systemen ersetzt.
bgRFC-Client
Ein ABAP-Client, der bgRFC verwenden möchte, geht in fünf Schritten vor:
왘
Ein Destination-Objekt erzeugen
Dazu ruft der Client die Klassenmethode CREATE der Klasse CL_
BGRFC_DESTINATION_OUTBOUND auf.
왘
Ein Unit-Objekt erzeugen
Dazu ruft der Client die Methode CREATE_TRFC_UNIT oder CREATE_
QRFC_UNIT des soeben erzeugten Destination-Objektes auf.
왘
Das Unit-Objekt gegebenenfalls einer Queue zuweisen
Dazu ruft der Client die Methode ADD_QUEUE_NAME_OUTBOUND des
soeben erzeugten Unit-Objektes auf.
왘
Die Funktionsbausteine aufrufen
Dazu verwendet der Client den Zusatz IN BACKGROUND UNIT und gibt
dabei das zuvor erzeugte Unit-Objekt an.
왘
Die LUW abschließen
Dazu ruft der Client COMMIT WORK auf.
130
Background-RFC
Listing 2.10 zeigt ein ABAP-Client-Programm für einen bgRFC mit
derselben Funktionalität wie das aus Listing 2.8, das qRFC verwendet. Beide Programme erzeugen in einem fremden System Bestellungen, indem sie den Funktionsbaustein Z_IFP_ORDER_CREATE aufrufen.
Beide Programme gehen nach demselben Schema vor und unterscheiden sich nur durch die verwendete API.
*&---------------------------------------------------------*
*& Report ZIFP_BGRFC
*&---------------------------------------------------------*
REPORT zifp_bgrfc.
DATA:
orderheader
TYPE zifporder,
it_orderheader TYPE STANDARD TABLE OF zifporder,
it_orderpos
TYPE STANDARD TABLE OF zifporderpos,
r_destination TYPE REF TO if_bgrfc_destination_outbound,
r_unit
TYPE REF TO if_qrfc_unit_outbound,
dest_name
TYPE bgrfc_dest_name_outbound,
queue_name
TYPE qrfc_queue_name.
SELECT-OPTIONS:
so_id FOR orderheader-orderid.
PARAMETERS:
p_dest TYPE rfcdes-rfcdest VALUE CHECK.
AT SELECTION-SCREEN.
* Prüfen, ob die Lieferantenbestellungen existieren
SELECT * FROM zifporder
INTO TABLE it_orderheader
WHERE
orderid IN so_id AND
type
= 'PO'.
IF sy-subrc <> 0.
MESSAGE e001(zifp).
ENDIF.
START-OF-SELECTION.
TRY.
* bgRFC-Destination anlegen
dest_name = p_dest.
r_destination =
cl_bgrfc_destination_outbound=>create( dest_name ).
CATCH cx_bgrfc_invalid_destination.
MESSAGE e102(bc).
ENDTRY.
* bgRFC-Unit anlegen
r_unit = r_destination->create_qrfc_unit( ).
TRY.
131
2.4
2
Remote Function Call mit ABAP
* bgRFC-Queue-Namen hinzufügen
r_unit->add_queue_name_outbound( 'ZIFPQUEUE' ).
CATCH cx_qrfc_duplicate_queue_name.
MESSAGE e101(bc).
ENDTRY.
* Alle Lieferantenbestellungen als Kundenaufträge
* im Zielsystem anlegen
LOOP AT it_orderheader INTO orderheader.
orderheader-type = 'SO'.
orderheader-refid = orderheader-orderid.
* Bestellpositionen zum Auftrag lesen
SELECT * FROM zifporderpos INTO TABLE it_orderpos
WHERE
orderid = orderheader-orderid.
* Kundenauftrag per bgRFC im Zielsystem anlegen
CALL FUNCTION 'Z_IFP_ORDER_CREATE'
IN BACKGROUND UNIT r_unit
EXPORTING
im_orderheader
= orderheader
im_commit
= ' '
TABLES
ta_orderpos
= it_orderpos.
ENDLOOP.
COMMIT WORK.
Listing 2.10 Report, der bgRFC statt qRFC verwendet
Auswahl der qRFCVersion in SM59
Im Selektionsbild des Reports in Listing 2.10 müssen Sie eine RFCDestination angeben, die bei bgRFC registriert ist. Dazu ändern Sie in
Transaktion SM59 Ihre Destination. Wählen Sie die Registerkarte
Spezielle Optionen, und stellen Sie in der Dropdown-Liste qRFC
Version den Wert 1 bgRFC ein, wie Abbildung 2.5 dies zeigt.
bgRFC-Monitor
Mit Transaktion SBGRFCMON können Sie verfolgen, wie Ihre
bgRFC-Aufrufe abgearbeitet werden. Abbildung 2.6 zeigt den bgRFCMonitor, nachdem das Programm ZIFP_BGRFC aus Listing 2.10 dreimal ausgeführt wurde. Der Monitor listet auf der linken Seite die Destinationen und darunter die Queues auf. Rechts sind dann zu einer
Queue die Units zu sehen. Die erste Unit, die um 11:34:44 hinzugefügt wurde, ist zur Ausführung bereit. Die beiden anderen Units,
die später hinzugefügt wurden, sind noch gesperrt.
132
Background-RFC
Abbildung 2.5 Auswahl der qRFC-Version in Transaktion SM59
Abbildung 2.6 bgRFC-Monitor
133
2.4
Index
.NET 469
A
ABAP 20
Kurz-Dump 93
SOAP-Proxy 420
SOAP-Webclient 410
SOAP-Webservice 402
Stack 19
Transaktionskonzept 32
ABAP Dictionary 68, 83, 136, 307
ABAP Workbench 17, 69
Access Control List 52, 53
ACL 52, 53
adaptiver Webservice 438, 442
ALE 355
Architektur 98
Ausgangsbaustein 377
Customizing 99
Eingangsbaustein 367, 377
Eingangsparameter 374, 378
Empfängerermittlung 378
Empfängerport 373
Konfiguration 356, 369
Partnerprofil 101
Statusmonitor 375
Verteilungsmodell 100, 362, 370,
372, 378, 382, 399
Vorgangscode 368
ALE_INPUT_ALEAUD 363
ALE_MODEL_INFO_GET 362
Änderungsvormerkung 33
Anmeldesprache 21
Anmeldung 20
Mandant 23
Annotation 37, 467
SOAPBinding 468
WebMethod 468
WebService 450
Anwendungsfunktionsleiste 23
Anwendungskomponente 34
Anwendungsprotokoll 25
Anwendungsschicht 17, 18, 20, 34,
37
Anwendungsserver 18, 23, 34, 84,
221
dedizierter 342
Anwendungssicherheit 40
app.config 471
APPEND 311
Application Link Enabling 씮 ALE
Applikationsserver
Monitoring 38
Profiling 38
Architektur, Client-Server 18
aRFC 130
ARFC2 310, 324
ARFC2GenericModelClass 312, 323
ARFC2GenericModelClassExecutable
312, 322
ARFC2Model 312, 321
ARFC2ModelInfo 312, 320, 321
ARFCSDATA 117
ARFCSSTATE 117
Array 78
Array Insert 139
ASP.NET 81
asymmetrisches Verfahren 41
asynchrone Kommunikation 35
asynchroner RFC 89, 129
Ausgangswarteschlange 122, 127
Ausnahme 77, 110
Authentifizierung 39, 50, 311, 343
SAP-Logon-Ticket 311
AUTHORITY CHECK 92
Autorisierung 39, 50
B
Backend-Modell 310
Background-Workprozess 27
BAdI 137
BALW_BAPIRETURN_GET2 142
BAPI 95, 96, 134, 376
ALE-Schnittstelle 102, 376
BAPI_TRANSACTION_COMMIT 96,
151, 184, 247
BAPI_TRANSACTION_ROLLBACK
96
479
Index
BAPI (Forts.)
Eingabehilfe 157
Fehlermeldung 146
freigeben 144
GetSearchhelp 158
instanzabhängiges 97, 145
instanzunabhängiges 97, 153
Konvention 136
Return-Parameter 137, 138
Transaktionsmodell 121, 184, 247
Verbuchung 139
BAPIF4T 158
Batch-Input 82
BD51 367
BD64 382
BD87 375
BDBG 376, 378
Beispielanwendung 68
Benutzer 21
Kontext 24, 28
Name 21, 23
Oberfläche 79
SAPJSF 45
Sitzung 20, 24
Stammsatz 21
Berechtigung 74, 92
Objekt 74, 92
Prüfung 107, 115, 158
Bestellung 68
bgRFC 129
Destination 132
Inbound-Szenario 130
Monitor 132
Outbound-Szenario 130
Scheduler 134
Unit-Objekt 130
Bibliothek, SAPSSOEXT 57
Bildschirmbild 23, 30
Binding, Custom 472
Bindungsstil
Document 408
RPC 408
BOR 94
BSP 80
Business Add-in 137
Business Application Programming
Interface 씮 BAPI
Business Object Builder 134
Business Server Pages 80
480
Business-Objekt 94, 134
Helpvalues 157
C
CALL FUNCTION 75
CALL TRANSACTION 82
Cast 351
CCI 340
C-Compiler 163
Changing-Parameter 77, 307
Client 20
Client-Server-Architektur 18
Codegenerator 310
Commit 111
COMMIT WORK 32, 33, 78, 118
Common Client Interface 340
communication_failure 110
Composite Application 37
Consumer, Proxy 423
C-RFC-Bibliothek 282
D
Datei
Schnittstelle 81
Service 25
Datenbank 18
Datenelement 69
Datenschicht 18
Datensicherheit 40
Datenzugriffsschicht 37
dedizierter Anwendungsserver 342
DELETE 33
Dependency-Injection 461
deployable Java-Proxy 441
Deployment Descriptor 37, 352, 430
Design by Contract 36
Destination 108, 110, 216, 278, 338,
370, 371
Application Data 316, 321
BACK 110
Bezeichner 443
Dictionary Meta 316
NONE 110
SPACE 110
DestinationDataProvider 285
Developer Studio 씮 SAP NetWeaver
Developer Studio
Index
DIAG 20, 25
Dialog 30
Schritt 30
Workprozess 27
Digital
Signatur 43
Zertifikat 44
Direct Input 83
direkte Verbindung 286
Dispatcher 25, 28
DLL 281
Double Stack 18
Dynamic Information and Action
Gateway 20, 25
Dynamic Link Library 281
Dynpro 30
E
ECo 302, 310
Eingabeprüfung 71
Eingangswarteschlange 123, 128
Einwegfunktion 42
EIS 339
EJB 34, 335
Container 37
Endpoint-API 465
Enqueue 27
Workprozess 32
Enterprise Connector 302, 310
Enterprise Information System 339
Enterprise JavaBean 34, 37, 335, 430
Enterprise Service 421
Enterprise Services Repository 402,
415, 417
Datentyp 417
Service-Interface 418
Enterprise-Application-Projekt 430,
442
Entity Bean 35
ESR 씮 Enterprise Services Repository
Exportparameter 77, 293, 307, 308,
350
Extensible Markup Language 씮 XML
Extensible Stylesheet Language for
Transformations 씮 XSLT
externer Modus 22, 24
externes System 86
F
Fault-Typ 307
Fehlerbehandlung 307
Firewall 29
Fremdschlüsselbeziehung 71
Function Builder 76, 88, 136
Funktionsbaustein 33, 75
Schnittstelle 76
Verbuchung 33
Funktionsgruppe 76
Funktions-Handler 330
registrieren 331
G
Gateway 26, 84, 199, 221, 256, 259,
335
Host 87
Monitor 94
Service 87
Generic Security Services Application
Programming Interface 62
genh 219, 239
gepoolte Verbindung 286
getFunctionTemplate 301
Größenkategorie 71
GSS-API V2 62
H
Hash-Funktion 42
Hash-Wert 42
Hook-Methode 36
Hostname 23, 24
HTTP 26, 401
HTTP Authentication 464
Hypertext Transfer Protocol 26, 401
I
ICF 104
ICM 26, 103
IConnection 349
IConnectorGatewayService 348
Identität 45
IDoc 97, 99, 355
Basistyp 358
Bibliothek 390
481
Index
IDoc (Forts.)
Client 391
Datensatz 363, 386, 388
Eingangsverarbeitung 356
Empfänger 381, 385
Erzeugung 360
IDOC_CONTROL_REC_40 386
IDOC_DATA_REC_40 386
IDOC_INBOUND_ASYNCHRONOUS
98, 381, 385
IDocDocument 392
IDocFactory 392
IDocRepository 391
IDoc-Typ 100, 355, 358, 360, 377
IDocXMLProcessor 395
Kontrollsatz 362, 363, 366, 386,
388
Nachverarbeitung 376
Nummer 367
Programmierung mit Java 389
Segment 356, 392
Segmentdefinition 357
Segmenttyp 356
Server 396
Status 367
Versand 356
XML-Verarbeitung 395
IInteraction 350
IInteractionSpec 350
Implementation Container 428
Importparameter 77, 290, 307, 308,
350
IN BACKGROUND TASK 117
IN UPDATE TASK 78
Inbound Queue 123, 128
infrastrukturelle Sicherheit 40
INSERT 33
Instanz 24
instanzabhängiges BAPI 97, 145
instanzunabhängiges BAPI 97, 153
Integrität 40, 42
Interface 씮 Schnittstelle
Intermediate Document 씮 IDoc
Internet Connection Framework 104
Internet Connection Manager 26, 103
ISO-Standard, X.500 45
Iterator 295
IUser 45
IUserMaint 45
482
J
J2EE 34
KeyStore-Service 48
JAAS 61
Java
Bibliothek 306
Stack 19, 34, 37
Web Dynpro 442
Java 2 Enterprise Edition 34, 48
Java API for XML Web Services 465
Java Architecture for XML Binding 2.0
465
Java Authentication and Authorization
Service 61
Java Connector 씮 SAP Java Connector
Java Cryptographic Architecture 47
Java Cryptographic Extension 47
Java Development Kit 466
Java Enterprise Edition 36
Java Key Store 59
Java Message Service 35
Java Naming and Directory Interface
336
Java Native Interface 57, 281
Java Server Faces 442
Java Server Pages 37, 81
Java-Connector 310
Java-Proxy deployable 441
Java-Skeleton 453
JAXB 2.0 465
JAX-WS 465
JCE 47
JEE 36
JKS 59
JMS 35
JNDI 336
JNI 57, 281
JSF 442
JSP 37, 81
K
KeyStore 47, 58
KeyStore-Datei, verify.der 48
KeyStore-Inhalt
JKS 47
PKCS12 47
keytool 48
Index
Klassisches RFC SDK 163, 217, 218
ABAP-Datentyp 228
Ausnahme 231
Beispielprogramm 219
Bibliotheksverzeichnis 223
bin-Verzeichnis 218
Changing-Parameter 230
Client 225
C-RFC-Bibliothek 217
Debugging 222
Dispatch 259, 269
Dokumentation 219
einfacher Parameter 225
Exportparameter 230
Fehlerbehandlung 227, 234
GupLine 244
IDoc-Programmierung 385
IDoc-Sender 388
Importparameter 230
include-Verzeichnis 219, 223
ItAppLine 243, 244, 246
ItCallReceiveEx 244
ItCpyLine 243
ItCreate 243, 246, 249
ItDelete 243
ItDelLine 243
ItFill 244, 246
ItFree 243
ItGetLine 243, 244, 246
ItLengLine 244
ItPutLine 243
Kompilieren 222
komplexer Client 246
lib-Verzeichnis 219
Linken 222
Präprozessordefinition 223
qRFC-Client 255
Queue-Name 255, 256
Returncode 229
RFC_CHAR 228
RFC_ERROR_GROUP 227
RFC_ERROR_INFO_EX 227, 234,
236
RFC_HANDLE 229
RFC_HANDLE_NULL 229
RFC_ON_CHECK_TID 272
RFC_ON_COMMIT 272
RFC_ON_CONFIRM_TID 272
RFC_ON_ROLLBACK 272
Klassisches RFC SDK (Forts.)
RFC_PARAMETER 236
RFC_STRING 238
RFC_TYPEHANDLE 236, 242
RfcAccept 257, 259, 261
RfcCallEx 232, 244
RfcCallReceiveEx 225, 232
RfcCancelRegisterServer 261
RfcCheckRegisterServer 261
RfcClose 225
RfcConfirmTransID 249, 255, 256
RfcCreateTransID 249, 253, 255
RfcDispatch 257, 269, 270
RfcGetData 262, 264, 267
RfcGetNameEx 271
RFC-Handle 262
RfcIndirectCallEx 249, 253
RfcInstallFunction 257, 261, 269
RfcInstallTransactionControl 271,
272
RfcInstallUnicodeStructure 242, 246,
249
RfcLastErrorEx 234, 235
RfcListen 232, 270
RfcOpen 255
RfcOpenEx 225, 226, 231
RfcQueueInsert 255, 256
RfcRaise 262, 267
RfcRaiseTables 262
RfcReceiveEx 232, 244
RfcSendData 262, 264, 267
RFCTYPE 236
RFCTYPE_CHAR 239
RfcWaitForRequest 269, 270
saprfc.h 226
Server 256, 258
strukturierter Parameter 239
Tabellenparameter 230, 243
TID_check 274
TID_commit 274
TID_confirm 274
TID_rollback 274
TID-Management 250
Tracing 222
tRFC-Client 249
tRFC-Server 271
Type-Handle 242, 262
Unicode-Bibliothek 228
Verbindungsparameter 231
483
Index
Kommandofeld 22
Kommunikation
asynchrone 35
Fassade 303
Kryptografie
Private Key 41
Provider 47, 57
Public Key 41
Kundenauftrag 69
L
Lastverteilung 20, 28, 85, 89, 130,
221, 304
LDAP 45
Lebenszyklus 35
Lieferantenbestellung 69
Lightweight Directory Access Protocol
45
Logical Unit of Work 118
DB-LUW 32
SAP-LUW 32
Login-Modul 61
logischer Port 412, 423, 440
logisches System 99, 370, 382, 398
Logon
Gruppe 28
Ticket 52, 60
LUW 118, 125
M
Management 340
Mandant 20
Massendaten 78, 140
Massenverbuchung 78
MASTER_IDOC_DISTRIBUTE 363
Menüleiste 22
MESSAGE 110
Message-Driven Bean 35
Message-Oriented Middleware 35
Message-Server 20, 28, 84, 221, 315
Metadaten 300, 327, 391
Cache 325
Middleware, Schnittstelle 282
Model-Destinationen 311
Modulpool 80
Modus, externer 22, 24
484
N
Nachricht 35
Klasse 142
Nummer 142
Typ 100, 359, 360, 377, 407, 417
Namenskollision 411
Nummernkreis 75
NWA 씮 SAP NetWeaver Administrator
NWDS 씮 SAP NetWeaver Developer
Studio
O
Objekttyp 135
öffentlicher Schlüssel 41
Open SQL 37
Operation
asynchrone 418
synchrone 418
P
Package Explorer 345
PAI 31
Paket 69, 303
Verwendungserklärung 411
Parameter
Export 77, 293, 307, 308, 350
Import 77, 290, 307, 308, 350
skalarer 108
strukturierter 108
Partnervereinbarung 370, 371, 372,
382
Passwort 21
PBO 31
Performance 36
Persistenz 35
Personal Security Environment 씮 PSE
PKI 44
Pluggable Authentication Model 61
Port
Default 412
logischer 412, 423, 440
Nummer 25
PortalRuntime 348
Präsentationsschicht 18
Principal API 45
Index
Private-Key-Kryptografie 41
privater Schlüssel 41
Process After Input 31
Process Before Output 31
Profil 74
Parameter 53
Programm-ID 87, 332, 338
Protokoll
Handler 428
Implementierung 428
Provider 421
Proxy 289, 392, 429
Klasse 303, 307, 350, 410, 440,
465, 466
Prüffeld 70
Prüftabelle 70
PSE 50, 63
Datei 59
individuelles 63
zentrales 63
Public-Key-Infrastruktur 44
Public-Key-Kryptografie 41
Pufferbereich 28
Purchase Order 69
Q
QIN-Scheduler 128, 198, 256
QIWK_REGISTER 128
QOUT-Scheduler 125
qRFC-Monitor
für Ausgangswarteschlange 125
für Eingangswarteschlange 128
Queue 298
queued RFC 122
R
RecordFactory 351
References-Projekt 430
Registrierung 203, 260
Remote Function Call 씮 RFC
Report 80
Repository 299, 335
serverseitiges 326
Resource-Adapter 340
Ressource
Nutzung 26
Verbrauch 31
RFC 26, 105
asynchroner 89, 129
Background 129
Client 283
Datentyp 290
Destination 84
Funktionsbaustein 105
mit C 163
mit Java 279
queued 91, 122, 298
registrierter Server 87, 199, 256,
332
RfcGetNameEx 270
rfcping 218, 220
RfcSendData 204
Server 325
synchroner 88, 105, 116, 289
Tracing 94
transaktionaler 90, 117, 120, 187,
296
zum Ändern 111
zum Anlegen 118
zum Löschen 111
ROLLBACK WORK 32, 33, 78, 117
Rollbereich 28
Route 30
Router 177
Router-String 30, 305
RZ10 53, 65
S
SA16 71
SALE 99, 101, 369, 382, 398
Sales Order 69
Sammelsuchhilfe 71
SAP
Crypto Toolkit 56
Cryptolib 64
Gateway 221
IDoc-Bibliothek 390
Instanz 85
Menü 23
Router 29, 177
Router-String 305
SAP NetWeaver Composition
Environment 36
SAP CRM 18
SAP Enterprise Connector 302, 310
485
Index
SAP ERP 18
SAP GUI 19, 20, 25, 28
SAP Implementation Guide 101
SAP Java Connector 279, 390
Architektur 281, 339
Factory-Klasse 287
Installation 280
JCo.Client 307
JCoConnectionData 288
JCoContext 286
JCoCustomRepository 326
JCoDestination 284, 289
JCoDestinationManager 284
JCoDestinationMonitor 287
JCoFieldIterator 295
JCoFunction 289, 331
JCoFunctionTemplate 301, 326
JCoIDocHandlerFactory 396, 397
JCoIDocServer 396
JCoIDocServerContext 397
JCoListMetaData 300, 326
JCoMetaData 300
JCoParameterList 290
JCoRecord 290
JCoRepository 289
JCoServer 329
JCoServerContext 331
JCoServerFactory 329
JCoServerFunctionHandle 331
JCoServerTIDHandler 334, 397
JCoTable 292
RFC Provider Service 335
Session-Management 286
Version 280
SAP NetWeaver Administrator 48,
463
SAP NetWeaver Application Server
17, 427
ABAP 20, 68
Java 34
SAP NetWeaver Composition Environment 36, 310, 313, 416, 466
SAP NetWeaver Developer Studio 17,
280, 302, 344, 426
SAP NetWeaver Portal 51, 341
Applikation 346
Connector Framework 339
Komponente 344, 346, 347
Projekt 345
486
SAP NetWeaver Process Integration
415
SAP NetWeaver RFC SDK 163
Bibliotheksverzeichnis 168
bin-Verzeichnis 164
Client 170
Compiler 165, 167
demo-Verzeichnis 164
doc-Verzeichnis 165
einfacher Parameter 178
Exportparameter 179
Fehlerbehandlung 172
GetRowCount 182
IDoc-Programmierung 381
IDoc-Sender 383
Importparameter 179
include-Verzeichnis 165, 167
komplexer Client 184
Konfigurationseigenschaft 167
lib-Verzeichnis 165
Linker 165, 167
MoveToPreviousRow 181
Präprozessordefinition 167
qRFC 198
Queue-Name 198
Repository 202
RFC_CONNECTION_HANDLE 174
RFC_CONNECTON_PARAMETER
174
RFC_ERROR_INFO 174
RFC_FUNCTION_HANDLE 174
RFC_FUNCTIONDESC_HANDLE
174
RFC_ON_CHECK_TID 208
RFC_ON_COMMIT 208
RFC_ON_CONFIRM_TID 208
RFC_ON_ROLLBACK 208
RFC_STRUCTURE_HANDLE 180
RfcAddNewRow 181
RfcAppendNewLine 184
RfcAppendNewRow 182
RfcCloseConnection 170, 172, 175
RfcConfirmTransaction 187, 196
RfcCreateFunction 170
RfcCreateTransaction 187, 196
RfcDeleteAlRows 181
RfcDeleteCurrentRow 181
RfcDestroyTable 181
RfcGetChars 181
Index
SAP NetWeaver RFC SDK (Forts.)
RfcGetCurrentRow 182, 184
RfcGetFunction 175
RfcGetFunctionDes 175
RfcGetFunctionDesc 170
RfcGetRowCount 182, 184
RfcGetString 179
RfcGetStringLength 179
RfcGetStructure 181
RfcGetTable 181, 183
RfcGetTransactionID 187, 196
RfcInsertNewRow 181
RfcInstallServerFunction 199, 203
RfcInstallTransactionHandlers 208,
209
RfcInvoke 170, 175
RfcInvokeInTransaction 187, 196
RfcListenAndDispatch 199
RfcListenDispatch 203
RfcMmoveToLastRow 181
RfcMoveTo 182
RfcMoveToFirstRow 181
RfcMoveToNextRow 181, 184
RfcOnCheckTransaction 211, 213
RfcOnCommitTransaction 211
RfcOnConfirmTransaction 211
RfcOnRollbackTransaction 211
RfcOpenConnection 170, 175
RfcRegisterServer 199, 203
RfcSetChars 179, 184
RfcSubmitTransaction 187, 196
Server 199, 200
Serverfunktion 204
strukturierter Parameter 180
Tabellenparameter 181
TID-Datei 188
TID-Management 189
Transaktions-Handle 187
tRFC-Client 187, 193
tRFC-Server 208
Verbindungsparameter 175
SAP PLM 18
SAP SCM 18
SAP SRM 18
SAP Virtual Machine 38
sapgenpse 50, 64
sapinfo 218, 220
SAP-Logon-Ticket 48, 56
saprfc.h 172
saprfc.ini 176, 260
SAP-System 24
SBGRFCMON 132
Scheduler
QIN 128, 198, 256
QOUT 125
Schlüssel 41
Feld 70
Management 43
öffentlicher 41
privater 41
Schnittstelle 17, 392
Middleware 282
Pattern 418
Technologie 81
Vereinbarung 36
virtuelle 426, 433, 434
SE11 69
SE16 71
SE37 76, 88
SE80 69, 420, 453
SECUDIR 64
Secure Network Communication 62
Secure Socket Layer 41
SEI 429
Selektion 154
Selektionsmethode 72
Self-Registration 46
Separation of Concerns 34
ServerDataProvider 329
Server-Proxy 421
serverseitiges Repository 326
Service Endpoint Interface 429
Service Provider Interface 35
Service Registry 451
serviceorientierte Architektur 37
Services-Datei 25
Servlet 37, 81
Session Bean
statefless 35
stateful 35
stateless 336, 431
SICF 104
Sicherheit 39
Daten 40
hybrides Verfahren 41
infrastrukturelle 40
Integration 56
Management 340
487
Index
Sicherheit (Forts.)
System 40
Transportschicht 61
Zugriff 40
SID 221
Single Point of Access 52
Single Sign-on 51
Single Stack 18
skalarer Parameter 108
SLD 416
SM30 53, 158
SM35 82
SM58 117
SM59 84, 108, 203, 216, 260, 278,
332, 370, 371, 398
SMGW 94, 203, 260
SMQ1 125
SMQ2 128, 299
SMQR 128, 198, 256
SMQS 125
SNC 62
PSE-Container 66
SNRO 75
SOA 37
SOAMANAGER 104, 404, 405, 412,
421, 422, 423, 453, 469
SOAP 103, 401
Action 408
Body 409
Envelope 409
Header 409
Software
Komponente 416
Produkt 416
Sperre 32, 115
Baustein 73
Liste 43
Objekt 73
Verwaltungs-Workprozess 27
SPI 35
Spool-Workprozess 27
SPRO 101
SPROXY 420
SSL 41, 62
SSO 51
SSO2 54
ST05 94
ST22 93
standalone Java-Proxy 438
488
stateful 286, 419
Stateful Session Bean 35
stateless 35, 336, 418
Stateless Session Bean 35, 336, 431
Statusleiste 23
Strukturparameter 108, 294
STRUSTSS02 55
STRUSTSSO2 49, 52, 66
Struts 442
SU01 74
SU02 74
Suchhilfe 71
SWO 94
SWO1 94, 134, 144
symmetrisches Verfahren 41
synchroner RFC 88, 105
System
externes 86
Funktionsleiste 22
ID 24, 221
logisches 99, 370, 382, 398
Meldung 23
Nummer 24, 85, 221
PSE 55
Sicherheit 40
System Landscape 341
Editor 344
System Landscape Directory 313,
314, 315, 341, 416
SLD_CLIENT 313
SLD_DataSupplier 313
system_failure 110
System-ID 221
T
T100 138, 146
Tabelle
Parameter 77, 292, 293, 307
Pflege 71
transparente 69
TWPSSO2ACL 53
TBDBE 378
TCP 25
Ticketaussteller 51
TID 씮 Transaktions-ID
Titelleiste 23
Transaction Control Protocol 25
Transaktion 22, 23
Index
transaktionaler RFC 90, 117, 120
Transaktions-ID 90, 117, 187, 211,
249, 255, 274, 296, 393
Management 297, 333, 397
Transaktionsmanagement 340
Transaktionsmodell 184, 247
Transaktionsnummer 씮 TransaktionsID
transparente Tabelle 69
Transport-Binding 428
Transportobjekt 427
TRFC_QIN_RESTART 128, 198, 256
TRFC_SET_QIN_PROPERTIES 126
TU&C/C 418
U
UME 44
UME Persistence Manager 45
Umgebungsvariable RFC_INI 176
Unix-Daemon 88
UPDATE 33
User Management Engine 44
User-Datastore 46
User-Mapping 56, 343
V
Verarbeitungsreihenfolge 91
Verbindlichkeit 40, 43
Verbindung 349
Aufbau 307
direkte 286
gepoolte 286
Management 340
Parameter 304
Verbuchung
Baustein 78, 114
Tabelle 33
Workprozess 27, 33
Verschlüsselung 39, 41
Verteilungsmodell 씮 ALE-Verteilungsmodell
Vertrauensbeziehung 58
Vertrauensstellung 44
Vertraulichkeit 40, 41
virtuelle Maschine 38, 39
virtuelles Interface 426, 433, 434
Visual Administrator 48, 335
Visual Studio 222
2003 225
2005 166
2010 469
Konsolenanwendung 166
vorkompilierter Header 166
Vorgangscode 374
W
WE20 373, 398
WE30 100, 358
WE31 100, 356
WE42 374
WE81 99, 359
WE82 360
Web Dynpro 310
ABAP 80
Java 37, 81, 442
Web Service Definition 427, 434
Web Service Description Language 씮
WSDL
Web Services Navigator 435, 451
Webbrowser 19
Webcontainer 37
Web-Modul-Projekt 442
Webservice 104, 402
adaptiver 438, 442
Authentifizierung 463
Binding 427
Client-Programm 414
Datentyp 432
deployable Proxy 459
Endpunkt 403
Inside-Out-Ansatz 104, 401, 452
Interface 426
Laufzeit 427
mit C# 469
mit J2EE 429, 433
mit Java 426, 429, 437, 466
Navigator 104
Operation 403, 451
Outside-In-Ansatz 104, 415, 421,
452
Porttyp 463
Profil 404
Schnittstelle 404
Service-Consumer 402
Servicedefinition 402
489
Index
Webservice (Forts.)
Service-Provider 402
standalone Proxy 459
Wizard 402
Werkzeug
wsgen 465
wsimport 465, 466
Wertübergabe 108
Windows-Service 88
Workprozess 26, 27
WSADMIN 438
WSD 427, 434
WSDL 104, 406, 438, 469
Binding 428
Document-Stil 408
RPC-Stil 408
490
X
X.500 45
XML 395
Nachricht 401
Schema Definition Language 407
XML-Verarbeitung, IDoc 395
XSLT 395
Z
Zertifikat 63, 66, 428
Export 53
Import 55
X.509 428
ZSSF_TEST_PSE 67
Zugriffssicherheit 40
Zuständigkeit 36
zustandsbehaftet 씮 stateful
zustandslos 씮 stateless
Herunterladen