SAP...

52
Bonn Boston Michael Wegelin, Michael Englbrecht SAP ® - Schnittstellenprogrammierung

Transcript of SAP...

Page 1: SAP -Schnittstellenprogrammierungcontent.schweitzer-online.de/.../018/828/332/9783836217361_content_pdf_1.pdf · Auf einen Blick. 1 Grundlagen der SAP-Schnittstellen-programmierung.....

Bonn � Boston

Michael Wegelin, Michael Englbrecht

SAP®-Schnittstellenprogrammierung

Page 2: SAP -Schnittstellenprogrammierungcontent.schweitzer-online.de/.../018/828/332/9783836217361_content_pdf_1.pdf · Auf einen Blick. 1 Grundlagen der SAP-Schnittstellen-programmierung.....

Auf einen Blick

1 Grundlagen der SAP-Schnittstellen-programmierung ....................................................... 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

Page 3: SAP -Schnittstellenprogrammierungcontent.schweitzer-online.de/.../018/828/332/9783836217361_content_pdf_1.pdf · Auf einen Blick. 1 Grundlagen der SAP-Schnittstellen-programmierung.....

7

Inhalt

Einführung .................................................................................. 13

1 Grundlagen der SAP-Schnittstellenprogrammierung 17

1.1 SAP NetWeaver Application Server ............................. 171.1.1 SAP-Lösungen und SAP NetWeaver ............... 181.1.2 SAP NetWeaver Application Server ABAP ...... 201.1.3 SAP NetWeaver Application Server Java ......... 34

1.2 Sicherheit ................................................................... 391.2.1 Sicherheit in heterogenen Landschaften ......... 401.2.2 User Management Engine .............................. 441.2.3 KeyStores: Authentifizierung, Signierung,

Verschlüsselung ............................................. 471.3 Authentifizierung und Autorisierung ........................... 50

1.3.1 Single Sign-on mit dem SAP NetWeaver Portal ............................................................. 51

1.3.2 Sichere Integration externer Systeme ............. 561.4 Programmierung des SAP NetWeaver Application

Servers ABAP .............................................................. 681.4.1 ABAP Dictionary ............................................ 681.4.2 Authentifizierung und Autorisierung .............. 741.4.3 Nummernkreise ............................................. 751.4.4 Funktionsbausteine ........................................ 751.4.5 Verbuchungsbausteine ................................... 781.4.6 Anwendungsfunktionalität und

Benutzeroberflächen ...................................... 791.5 Überblick über die Schnittstellentechnologien von SAP 81

1.5.1 Dateischnittstelle ........................................... 811.5.2 Remote Function Call (RFC) ........................... 831.5.3 Business Application Programming Interface

(BAPI) ............................................................ 941.5.4 Application Link Enabling (ALE) ..................... 971.5.5 SOAP ............................................................. 103

2 Remote Function Call mit ABAP .............................. 105

2.1 RFC-Funktionsbausteine in ABAP ............................... 1052.1.1 Funktionsbausteine zum Lesen ....................... 1052.1.2 Aufruf per sRFC .............................................. 108

Page 4: SAP -Schnittstellenprogrammierungcontent.schweitzer-online.de/.../018/828/332/9783836217361_content_pdf_1.pdf · Auf einen Blick. 1 Grundlagen der SAP-Schnittstellen-programmierung.....

Inhalt

8

2.1.3 Funktionsbausteine zum Löschen und Ändern .......................................................... 111

2.2 Transaktionaler RFC ................................................... 1172.3 Queued RFC .............................................................. 122

2.3.1 qRFC mit Ausgangswarteschlange .................. 1242.3.2 qRFC mit Ausgangs- und

Eingangswarteschlange .................................. 1262.4 Background-RFC ........................................................ 1292.5 Business-Objekte und BAPIs ...................................... 134

2.5.1 Entwicklung von Business-Objekten .............. 1342.5.2 Entwicklung von BAPIs .................................. 1362.5.3 Business-Objekt »Helpvalues« ........................ 157

3 Remote Function Call mit C ..................................... 163

3.1 SAP NetWeaver RFC SDK .......................................... 1633.1.1 Inhalte des SAP NetWeaver RFC SDKs ........... 1643.1.2 Kompilieren und Linken ................................ 165

3.2 Einfache SAP NetWeaver RFC-Clients ........................ 1703.2.1 Aufbau eines SAP NetWeaver RFC-Clients ..... 1703.2.2 Einfache Parameter ....................................... 1783.2.3 Strukturierte Parameter ................................. 1803.2.4 Tabellenparameter ........................................ 181

3.3 Komplexe SAP NetWeaver RFC-Clients ...................... 1843.3.1 Aufruf von BAPIs ........................................... 1843.3.2 Transaktionaler RFC ....................................... 1873.3.3 Queued RFC .................................................. 198

3.4 SAP NetWeaver RFC-Server ....................................... 1993.4.1 Installation der Funktionen ............................ 2023.4.2 Anmeldung am Gateway ............................... 2033.4.3 Implementierung der Funktionen .................. 2043.4.4 Transaktionaler RFC ....................................... 208

3.5 Klassisches RFC SDK .................................................. 2173.5.1 C-RFC-Bibliothek ........................................... 2173.5.2 Inhalte des klassischen RFC SDKs .................. 2183.5.3 Verbindungstests ........................................... 2203.5.4 Kompilieren und Linken ................................ 222

3.6 Einfache RFC-Clients und RFC-Parameter ................... 2253.6.1 Aufbau eines RFC-Client-Programms ............. 2253.6.2 Einfache Parameter ....................................... 2363.6.3 Strukturierte Parameter ................................. 2393.6.4 Tabellenparameter ........................................ 243

Page 5: SAP -Schnittstellenprogrammierungcontent.schweitzer-online.de/.../018/828/332/9783836217361_content_pdf_1.pdf · Auf einen Blick. 1 Grundlagen der SAP-Schnittstellen-programmierung.....

Inhalt

9

3.7 Komplexere RFC-Clients ............................................. 2463.7.1 Aufruf von BAPIs ............................................ 2463.7.2 Transaktionaler RFC ....................................... 2493.7.3 Queued RFC .................................................. 255

3.8 RFC-Server .................................................................. 2563.8.1 Anmeldung am Gateway ................................ 2593.8.2 Installation und Ausführung der Funktionen ... 2613.8.3 Dispatching .................................................... 2693.8.4 Transaktionaler RFC ....................................... 271

4 Remote Function Call mit Java ................................ 279

4.1 SAP Java Connector .................................................... 2794.1.1 Installation ..................................................... 2804.1.2 Architektur des SAP Java Connectors .............. 2814.1.3 Programmierung mit dem SAP Java Connector 2834.1.4 Verarbeitung von Tabellen und Strukturen ..... 2934.1.5 Transaktionaler RFC ....................................... 2964.1.6 Queued RFC .................................................. 2984.1.7 Metadatenverarbeitung .................................. 300

4.2 SAP Enterprise Connector ........................................... 3024.2.1 Erzeugen von Proxy-Klassen ........................... 3034.2.2 Programmierung des Clients ........................... 307

4.3 Nutzung generischer Backend-Modelle ....................... 3094.3.1 Generische Proxy-Klassen ............................... 3104.3.2 Klassenabhängigkeiten ................................... 3124.3.3 Konfiguration der Destinationen .................... 3134.3.4 Implementierung ........................................... 316

4.4 RFC-Server .................................................................. 3254.4.1 Serverseitiges und clientseitiges Repository .... 3264.4.2 Programmierung eines einfachen JCo-Servers 3294.4.3 Registrieren eines Funktions-Handlers ............ 3304.4.4 Verwaltung von Transaktionen ....................... 333

4.5 JCo RFC Provider Service ............................................ 3354.6 SAP NetWeaver Portal Connector Framework ............. 339

4.6.1 Java Connector Architecture ........................... 3394.6.2 System Landscape des Portals ........................ 3414.6.3 Einführung in die Portalprogrammierung ........ 3444.6.4 Anwendungsbeispiel des Connector

Frameworks ................................................... 348

Page 6: SAP -Schnittstellenprogrammierungcontent.schweitzer-online.de/.../018/828/332/9783836217361_content_pdf_1.pdf · Auf einen Blick. 1 Grundlagen der SAP-Schnittstellen-programmierung.....

Inhalt

10

5 IDocs und ALE .......................................................... 355

5.1 IDocs ......................................................................... 3565.1.1 Entwicklung von IDocs .................................. 3565.1.2 Erzeugung von IDocs ..................................... 3605.1.3 Eingangsverarbeitung von IDocs .................... 363

5.2 Application Link Enabling .......................................... 3695.2.1 Konfiguration von ALE .................................. 3695.2.2 Test und Monitoring ..................................... 3755.2.3 ALE-Schnittstelle für BAPIs ............................ 376

5.3 IDoc-Programmierung mit dem SAP NetWeaver RFC SDK .................................................................... 3815.3.1 IDoc-Empfänger ............................................ 3815.3.2 IDoc-Sender .................................................. 383

5.4 IDoc-Programmierung mit dem klassischen RFC SDK 3855.4.1 IDoc-Empfänger ............................................ 3855.4.2 IDoc-Sender .................................................. 388

5.5 IDoc-Programmierung mit Java und Java Connector ... 3895.5.1 Vorbereitung zur Verwendung der IDoc-

Bibliotheken .................................................. 3905.5.2 Client-Anwendung für IDocs ......................... 3915.5.3 IDoc-Server ................................................... 3965.5.4 Konfiguration für den Versand von IDocs ...... 398

6 SOAP ........................................................................ 401

6.1 Inside-Out-Webservices und -Webclients mit dem AS ABAP ............................................................ 4016.1.1 ABAP-SOAP-Webservice ............................... 4026.1.2 ABAP-SOAP-Webclient ................................. 410

6.2 Outside-In-Webservices und -Webclients mit dem AS ABAP ............................................................ 4156.2.1 System Landscape Directory .......................... 4166.2.2 Service-Interfaces .......................................... 4176.2.3 ABAP-SOAP-Proxys ....................................... 420

6.3 Webservices und Webclients mit dem AS Java ........... 4256.3.1 Webservice-Infrastruktur im AS Java .............. 4256.3.2 Webservice-Provider mit J2EE ....................... 4296.3.3 Webservice-Clients ........................................ 4376.3.4 Adaptiver Webservice mit Web Dynpro ......... 442

Page 7: SAP -Schnittstellenprogrammierungcontent.schweitzer-online.de/.../018/828/332/9783836217361_content_pdf_1.pdf · Auf einen Blick. 1 Grundlagen der SAP-Schnittstellen-programmierung.....

Inhalt

11

6.4 Webservice-Programmierung mit dem SAP NetWeaver Composition Environment ................. 4436.4.1 Implementierung des Inside-Out-Szenarios .... 4446.4.2 Implementierung des Outside-In-Szenarios .... 4526.4.3 Webservice-Client-Programmierung ............... 456

6.5 SOAP-Programmierung mit Java ................................. 4656.5.1 Java API for XML Web Services ...................... 4656.5.2 Implementierung eines Webservice-Clients .... 4666.5.3 Implementierung eines Webservice-Providers 467

6.6 SOAP-Programmierung mit C# ................................... 469

Anhang ........................................................................... 475

A Literaturhinweise .................................................................. 475B Die Autoren .......................................................................... 477

Index ........................................................................................... 479

Page 8: SAP -Schnittstellenprogrammierungcontent.schweitzer-online.de/.../018/828/332/9783836217361_content_pdf_1.pdf · Auf einen Blick. 1 Grundlagen der SAP-Schnittstellen-programmierung.....

13

Einführung

In dieser 2., aktualisierten und erweiterten Auflage unseres Hand-buches 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 ausprogrammiertenProgrammierbeispielen illustriert, die Ihnen die Umsetzung in derPraxis erleichtern. Hier lassen wir unsere Erfahrungen als Trainer undSchnittstellenentwickler einfließen. Dabei berücksichtigen wir dievier 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 Integrations-programmierung 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 Bestellun-gen 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 Funk-tionsbausteine 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 Func-tion Call mit C«, erläutert die Programmierung mit C und Kapitel 4,»Remote Function Call mit Java«, die Programmierung mit Java.

Page 9: SAP -Schnittstellenprogrammierungcontent.schweitzer-online.de/.../018/828/332/9783836217361_content_pdf_1.pdf · Auf einen Blick. 1 Grundlagen der SAP-Schnittstellen-programmierung.....

14

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, Informa-tionen in Form von Intermediate Documents (IDocs) auszutau-schen. 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 Webstan-dard ermöglicht es Anwendungen, Informationen in Form von XML-Dokumenten über HTTP oder andere Protokolle auszutau-schen, und wird heutzutage von nahezu allen Entwicklungsplatt-formen unterstützt, wie wir am Beispiel von C# zeigen werden. Neben dem Inside-Out-Ansatz, der von vorhandenen Funktions-bausteinen ausgeht, erläutern wir auch den Outside-In-Ansatz. Bei diesem Ansatz beschreiben Sie zuerst die Schnittstellen, generie-ren 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 Program-mierbeispiele überarbeitet und auf den neuesten Stand gebracht. Ins-besondere 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 Kapi-tel 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 mar-kiert ist. Eine Erklärung, warum hier Vorsicht geboten ist, ist bei-gefügt.

� Hinweis: Wird das besprochene Thema erläutert und vertieft, macht ein Doppelpfeil Sie darauf aufmerksam.

Page 10: SAP -Schnittstellenprogrammierungcontent.schweitzer-online.de/.../018/828/332/9783836217361_content_pdf_1.pdf · Auf einen Blick. 1 Grundlagen der SAP-Schnittstellen-programmierung.....

15

Einführung

� Tipp: Nützliche Tipps und Shortcuts, die Ihnen die Arbeit erleich-tern, sind mit einem Pluszeichen gekennzeichnet.

Systemvoraussetzungen

Das Buch eignet sich sowohl als Nachschlagewerk als auch als Lehr-buch 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ög-lich darauf geachtet, dass Sie die benötigte Software kostenlos im SAP Developer Network (http://sdn.sap.com) im Download-Bereich fin-den. Die jeweiligen Systemvoraussetzungen für die Installation ent-nehmen Sie den entsprechenden Download-Seiten der einzelnen Produkte.

� Für die Implementierung der ABAP-Beispiele kann das Entwick-lungs-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 Konfigura-tionsschritte erforderlich.

� Für das Nachvollziehen der standalone Java-Beispiele können Sie jede Java-Entwicklungsumgebung verwenden. Die Programmier-beispiele liegen jedoch als Eclipse-Projekte vor, sodass sich die Verwendung dieser IDE anbietet.

� Für die Java-Themen kamen zusätzlich noch zwei SAP-Applika-tionsserver zum Einsatz: zum einen der SAP NetWeaver Applica-tion 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 Net-Weaver Composition Environment basierenden Beispiele eine Trial-Version. Diese läuft nach 90 Tagen ab und kann nicht verlän-gert werden. Zusätzlich benötigen Sie für das Nachvollziehen der Java-Beispiele eine Installation des Java-Stacks in Release 7.0. Lei-der gibt es hierfür momentan keine Trial-Version. Die Entwick-lungswerkzeuge sind sowohl für das SAP NetWeaver Composition Environment als auch für SAP NetWeaver 7.0 jeweils im Down-load enthalten.

Page 11: SAP -Schnittstellenprogrammierungcontent.schweitzer-online.de/.../018/828/332/9783836217361_content_pdf_1.pdf · Auf einen Blick. 1 Grundlagen der SAP-Schnittstellen-programmierung.....

16

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, Dis-kussionsforen und White Papers des SAP Developer Networks (http://sdn.sap.com). Eine große Hilfe waren uns auch die SAP Net-Weaver 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

Page 12: SAP -Schnittstellenprogrammierungcontent.schweitzer-online.de/.../018/828/332/9783836217361_content_pdf_1.pdf · Auf einen Blick. 1 Grundlagen der SAP-Schnittstellen-programmierung.....

105

Dieses Kapitel beschreibt detailliert die Schnittstellenprogram-mierung in ABAP mit RFC und BAPIs. Sie lernen, wie Sie RFC-Funktionsbausteine zum Lesen, Schreiben und Ändern von Datensätzen entwickeln können, und nutzen diese Funktions-bausteine bei der Entwicklung eines Business-Objektes und seiner BAPIs.

2 Remote Function Call mit ABAP

Der Remote Function Call (RFC) ist die SAP-Schnittstellentechnolo-gie, 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-Funktionsbau-steine 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 RFC-Servern 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 verwend-bar, das heißt RFC-fähige Funktionsbausteine sein. Sie legen für diese Funktionsbausteine die Funktionsgruppe ZIFP im Kundennamens-raum an. Zur Erinnerung: Funktionsgruppen sind ein spezieller Typ von ABAP-Programmen, die Funktionsbausteine enthalten.

2.1.1 Funktionsbausteine zum Lesen

Kundenaufträge und Lieferanten-bestellungen

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

Page 13: SAP -Schnittstellenprogrammierungcontent.schweitzer-online.de/.../018/828/332/9783836217361_content_pdf_1.pdf · Auf einen Blick. 1 Grundlagen der SAP-Schnittstellen-programmierung.....

106

Remote Function Call mit ABAP2

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 Bestell-nummern (ORDERID) bei gegebenem Bestelltyp und optionaler REFIDliefert. Wird nur der Bestelltyp angegeben, gibt der Funktionsbau-stein alle Bestellnummern dieses Typs zurück. Wird die REFID (die Kundenbestellnummer) angegeben, gibt er die Lieferantenbestell-nummer 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«

Page 14: SAP -Schnittstellenprogrammierungcontent.schweitzer-online.de/.../018/828/332/9783836217361_content_pdf_1.pdf · Auf einen Blick. 1 Grundlagen der SAP-Schnittstellen-programmierung.....

107

RFC-Funktionsbausteine in ABAP 2.1

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, Kunden-auftrag) 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 Tabellenparame-ter TA_ORDERS.

Berechtigungs- prüfung

Der Funktionsbaustein prüft zunächst, ob der Aufrufer die Berech-tigung hat, Bestellungen zu lesen. Darf der Aufrufer keine Bestellun-gen lesen, löst der Funktionsbaustein die Ausnahme NOT_AUTHORIZEDaus. 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.

Page 15: SAP -Schnittstellenprogrammierungcontent.schweitzer-online.de/.../018/828/332/9783836217361_content_pdf_1.pdf · Auf einen Blick. 1 Grundlagen der SAP-Schnittstellen-programmierung.....

108

Remote Function Call mit ABAP2

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 Exportparame-ter EX_ORDERHEAD enthält nach dem Aufruf die Kopfdaten der Bestel-lung, 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 Funk-tionsbausteins müssen per Wert übergeben werden. Eine Referenz-übergabe ist nicht möglich. Achten Sie auch bei den Funktionsbau-steinen 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 Funk-tionsbausteine über sRFC aufruft. Dies läuft über die ABAP-Anwei-sung 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 Trans-aktion SM59 gepflegt wurde.

Page 16: SAP -Schnittstellenprogrammierungcontent.schweitzer-online.de/.../018/828/332/9783836217361_content_pdf_1.pdf · Auf einen Blick. 1 Grundlagen der SAP-Schnittstellen-programmierung.....

109

RFC-Funktionsbausteine in ABAP 2.1

*&--------------------------------------------------------- *& 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

Page 17: SAP -Schnittstellenprogrammierungcontent.schweitzer-online.de/.../018/828/332/9783836217361_content_pdf_1.pdf · Auf einen Blick. 1 Grundlagen der SAP-Schnittstellen-programmierung.....

110

Remote Function Call mit ABAP2

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 Funktions-bausteine 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 Zielsys-tem nicht existiert. Die Ausnahme communication_failure wird bei Kommunikationsfehlern ausgelöst, zum Beispiel wenn das Zielsys-tem 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 wer-den, gibt es noch die drei Standarddestinationen SPACE, 'NONE' und 'BACK'. Ist p_dest initial bzw. wird stattdessen die Konstante SPACEverwendet, 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

Page 18: SAP -Schnittstellenprogrammierungcontent.schweitzer-online.de/.../018/828/332/9783836217361_content_pdf_1.pdf · Auf einen Blick. 1 Grundlagen der SAP-Schnittstellen-programmierung.....

111

RFC-Funktionsbausteine in ABAP 2.1

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 Destina-tion für einen RFC-Test verwenden. Möchten Sie aus einem RFC-Bau-stein einen Funktionsbaustein im rufenden System aufrufen, können Sie dazu die Destination 'BACK' verwenden. Sie dient zum Rückruf in den Aufrufer.

Impliziter Datenbank-Commit

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 DELETEvorgenommen 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-Funktionsauf-ruf entspricht einem Dialogschritt. Daher eignet sich der synchrone RFC in dieser Form nur zum Lesen, nicht aber dazu, systemübergrei-fende Transaktionen zu realisieren.

2.1.3 Funktionsbausteine zum Löschen und Ändern

Bestelldaten ä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.

Page 19: SAP -Schnittstellenprogrammierungcontent.schweitzer-online.de/.../018/828/332/9783836217361_content_pdf_1.pdf · Auf einen Blick. 1 Grundlagen der SAP-Schnittstellen-programmierung.....

112

Remote Function Call mit ABAP2

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

Page 20: SAP -Schnittstellenprogrammierungcontent.schweitzer-online.de/.../018/828/332/9783836217361_content_pdf_1.pdf · Auf einen Blick. 1 Grundlagen der SAP-Schnittstellen-programmierung.....

113

RFC-Funktionsbausteine in ABAP 2.1

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.

Page 21: SAP -Schnittstellenprogrammierungcontent.schweitzer-online.de/.../018/828/332/9783836217361_content_pdf_1.pdf · Auf einen Blick. 1 Grundlagen der SAP-Schnittstellen-programmierung.....

114

Remote Function Call mit ABAP2

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 ImportparameterIM_ORDER_HEADER für die Kopfdaten und den TabellenparameterTA_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 Funktions-baustein 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 zwei-ten 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 über-geben werden können. Ist ein Importparameter initial, kann daher der Funktionsbaustein nicht entscheiden, ob der Aufrufer den ent-sprechenden 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 MANDTund 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.

Page 22: SAP -Schnittstellenprogrammierungcontent.schweitzer-online.de/.../018/828/332/9783836217361_content_pdf_1.pdf · Auf einen Blick. 1 Grundlagen der SAP-Schnittstellen-programmierung.....

115

RFC-Funktionsbausteine in ABAP 2.1

Exklusive Schreibsperre

Zunächst prüft der Funktionsbaustein, ob der Aufrufer die Berech-tigung zum Ändern von Bestellungen hat. Falls nicht, löst er die Aus-nahme NOT_AUTHORIZED aus. Ist der Aufrufer berechtigt, eine Bestel-lung 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 erfolg-reich gesetzt werden, werden die Änderungen vorgenommen.

Vor dem Aufruf der Verbuchungsbausteine prüft der Funktionsbau-stein, 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 Sper-ren. 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 Verbuchungsbaustei-nen innerhalb einer SAP-LUW haben wir in Abschnitt 1.4.5, »Verbu-chungsbausteine«, erläutert.

Daten löschenDie 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 eindeu-tig. 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.

Page 23: SAP -Schnittstellenprogrammierungcontent.schweitzer-online.de/.../018/828/332/9783836217361_content_pdf_1.pdf · Auf einen Blick. 1 Grundlagen der SAP-Schnittstellen-programmierung.....

116

Remote Function Call mit ABAP2

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 synchronenRFC vorgenommen werden. Im Fall der Exception communication_failure kann der Aufruf später problemlos wiederholt werden. Denn selbst wenn die Funktionsbausteine trotz des Kommunika-tionsfehlers auf dem Zielsystem ausgeführt wurden, ändert ein noch-maliger Aufruf nichts am Zustand der Datenbank im Zielsystem. Im schlechtesten Fall wird der Datensatz unnötigerweise nochmals geän-dert, das heißt, es wird versucht, einen schon gelöschten Datensatz nochmals zu löschen.

Page 24: SAP -Schnittstellenprogrammierungcontent.schweitzer-online.de/.../018/828/332/9783836217361_content_pdf_1.pdf · Auf einen Blick. 1 Grundlagen der SAP-Schnittstellen-programmierung.....

117

Transaktionaler RFC 2.2

2.2 Transaktionaler RFC

Aufruf über tRFCWie 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 dop-pelt angelegt würden.

Besser ist es daher, die Funktionsbausteine, die Daten ändern oder neu anlegen, mit einem transaktionalen RFC aufzurufen. Transaktio-nal bedeutet in diesem Fall, dass im aufrufenden System die über-gebenen Parameter gespeichert werden und der Aufruf mit Trans-aktion 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, son-dern der Aufruf wird mitsamt seinen Parametern und einer Trans-aktions-ID in den Tabellen ARFCSSTATE und ARFCSDATA im lokalen System gespeichert. Erst beim COMMIT WORK erfolgt der Aufruf im Ziel-system. Ist der Aufruf erfolgreich, werden die Einträge in den Vor-merktabellen ARFCSSTATE und ARFCSDATA gelöscht.

Verhalten im Fehlerfall

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 Destina-tion 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 Kommunikations-problem beseitigt wurde.

Bricht der Remote-Funktionsbaustein mit einem Fehler ab, führt das Zielsystem automatisch den Befehl ROLLBACK WORK aus. Auf dem auf-rufenden System wird kein Job zur Wiederholung des Aufrufs ein-geplant. Der Fehler, der im Zielsystem aufgetreten ist, wird in den tRFC-Statustabellen protokolliert. Auch in diesem Fall kann der abge-brochene Aufruf aus Transaktion SM58 wiederholt werden.

Page 25: SAP -Schnittstellenprogrammierungcontent.schweitzer-online.de/.../018/828/332/9783836217361_content_pdf_1.pdf · Auf einen Blick. 1 Grundlagen der SAP-Schnittstellen-programmierung.....

118

Remote Function Call mit ABAP2

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 abge-schlossen 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. Bei-des steht erst fest, wenn der Funktionsbaustein im Zielsystem tat-sächlich ausgeführt wurde, und dies ist frühestens nach dem COMMITWORK der Fall.

Spezielle Funktions-bausteine

Alle Funktionsbausteine, die im Quellsystem mit dem Zusatz INBACKGROUND TASK aufgerufen werden, bilden im Zielsystem eine Logi-cal Unit of Work (LUW). Sie werden im Zielsystem innerhalb einer einzigen Datenbanktransaktion abgearbeitet. Bricht ein Funktions-baustein ab, erfolgt automatisch ein ROLLBACK im Zielsystem. Die LUW wird durch eine Transaktions-ID identifiziert. Diese Trans-aktions-ID kann im aufrufenden System über den Funktionsbaustein ID_OF_BACKGROUNDTASK ermittelt werden, der vor dem COMMIT WORKaufgerufen werden muss. Mit dem Funktionsbaustein STATUS_OF_BACKGROUNDTASK kann unter Angabe der Transaktions-ID der Ausfüh-rungsstatus 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 ein-treten, 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 las-sen. Alternativ könnten Sie aber auch den Funktionsbaustein RESTART_OF_BACKGROUNDTASK aufrufen, damit im rufenden System der Job wieder eingeplant wird.

Funktions-bausteine 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.

Page 26: SAP -Schnittstellenprogrammierungcontent.schweitzer-online.de/.../018/828/332/9783836217361_content_pdf_1.pdf · Auf einen Blick. 1 Grundlagen der SAP-Schnittstellen-programmierung.....

119

Transaktionaler RFC 2.2

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.

Page 27: SAP -Schnittstellenprogrammierungcontent.schweitzer-online.de/.../018/828/332/9783836217361_content_pdf_1.pdf · Auf einen Blick. 1 Grundlagen der SAP-Schnittstellen-programmierung.....

120

Remote Function Call mit ABAP2

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 nochma-ligen 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.

Page 28: SAP -Schnittstellenprogrammierungcontent.schweitzer-online.de/.../018/828/332/9783836217361_content_pdf_1.pdf · Auf einen Blick. 1 Grundlagen der SAP-Schnittstellen-programmierung.....

121

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«

Exportparameter nicht zugänglich

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 Zielsys-tem 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 REFIDnach den Kundenaufträgen suchen und damit die ORDERID ermitteln.

Transaktions- modell bei BAPIs

Ein etwas anderer Weg wird zum Beispiel bei BAPIs beschritten. Hier werden auch ändernde oder erzeugende Funktionsbausteine per

Page 29: SAP -Schnittstellenprogrammierungcontent.schweitzer-online.de/.../018/828/332/9783836217361_content_pdf_1.pdf · Auf einen Blick. 1 Grundlagen der SAP-Schnittstellen-programmierung.....

122

Remote Function Call mit ABAP2

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 Ver-buchung 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 Ziel-system unabhängig voneinander ausgeführt. Insbesondere bei Netz-werkproblemen 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 empfan-genden Anwendung und der tRFC-Schicht. Das qRFC-Kommunika-tionsmodell unterscheidet drei Szenarien, die in Abbildung 2.1 dargestellt sind:

� tRFC Dieses Szenario können Sie verwenden, wenn die Daten von hin-tereinander ausgeführten Funktionsbausteinen nicht miteinander verbunden sind. Die rufende Anwendung im Client-System ver-wendet tRFC, um sicherzustellen, dass die Daten im Serversystem nur einmal verarbeitet werden. Die Reihenfolge, in der die gerufe-nen 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 Aus-gangswarteschlange (Outbound Queue), um die Serialisierung der

Page 30: SAP -Schnittstellenprogrammierungcontent.schweitzer-online.de/.../018/828/332/9783836217361_content_pdf_1.pdf · Auf einen Blick. 1 Grundlagen der SAP-Schnittstellen-programmierung.....

123

Queued RFC 2.3

Daten sicherzustellen. Die aufgerufenen Funktionsmodule werden in der Ausgangswarteschlange des sendenden Systems gespei-chert, 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än-dert 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 Auf-rufe 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 ex-terne Clients per tRFC Funktionsaufrufe in eine Eingangswarte-schlange eines empfangenden SAP-Systems einstellen können.

Abbildung 2.1 qRFC-Kommunikationsszenarien

SendendeAnwendung

Empfangende Anwendung

Ausgangs-warteschlange

tRFC

QOUT-Scheduler

QIN-Scheduler

Eingangs-warteschlange

tRFC

tRFC

tRFC mit Ausgangswarteschlange

tRFC mit Eingangswarteschlange

Page 31: SAP -Schnittstellenprogrammierungcontent.schweitzer-online.de/.../018/828/332/9783836217361_content_pdf_1.pdf · Auf einen Blick. 1 Grundlagen der SAP-Schnittstellen-programmierung.....

124

Remote Function Call mit ABAP2

2.3.1 qRFC mit Ausgangswarteschlange

Um eine qRFC-LUW in eine Ausgangswarteschlange zu stellen, müs-sen Sie vor dem qRFC-Aufruf den Namen der Ausgangswarteschlange angeben, indem Sie den Funktionsbaustein TRFC_SET_QUEUE_NAMElokal aufrufen. Mit COMMIT WORK schließen Sie dann die LUW ab. Lis-ting 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.

Page 32: SAP -Schnittstellenprogrammierungcontent.schweitzer-online.de/.../018/828/332/9783836217361_content_pdf_1.pdf · Auf einen Blick. 1 Grundlagen der SAP-Schnittstellen-programmierung.....

125

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

QOUT-SchedulerDie Abarbeitung der Ausgangswarteschlangen wird durch den QOUT-Scheduler veranlasst, den Sie mit Transaktion SMQS überwa-chen 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 Warteschlan-gen zu dieser Zieldestination ab.

Logical Units of Work einer Ausgangswarte-schlange

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

Überwachung der Ausgangswarteschlange

Damit Sie mit der Monitoring-Transaktion SMQ1 für die Überwachung der ausgehenden Warteschlangen im Normalfall überhaupt etwas sehen, müs-sen 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 Ausgangs-warteschlange 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.

Page 33: SAP -Schnittstellenprogrammierungcontent.schweitzer-online.de/.../018/828/332/9783836217361_content_pdf_1.pdf · Auf einen Blick. 1 Grundlagen der SAP-Schnittstellen-programmierung.....

126

Remote Function Call mit ABAP2

diesem Bildschirm können Sie dann die Ausgangswarteschlange manuell an das Zielsystem senden.

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 COMMITWORK abgeschlossen wird.

2.3.2 qRFC mit Ausgangs- und Eingangswarteschlange

Um eine tRFC-LUW im empfangenden System zunächst in eine Ein-gangswarteschlange zu stellen, muss vor jedem einzelnen tRFC-Auf-ruf 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.

Abbildung 2.2 Funktionsbausteine in Ausgangswarteschlange

Page 34: SAP -Schnittstellenprogrammierungcontent.schweitzer-online.de/.../018/828/332/9783836217361_content_pdf_1.pdf · Auf einen Blick. 1 Grundlagen der SAP-Schnittstellen-programmierung.....

127

Queued RFC 2.3

* 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

Page 35: SAP -Schnittstellenprogrammierungcontent.schweitzer-online.de/.../018/828/332/9783836217361_content_pdf_1.pdf · Auf einen Blick. 1 Grundlagen der SAP-Schnittstellen-programmierung.....

128

Remote Function Call mit ABAP2

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 automa-tisch. 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 Eingangswarte-schlange in Transaktion SMQ2, und lassen Sie sich die Details anzei-gen. Sie sehen dann sämtliche LUWs in dieser Eingangswarte-schlange. 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.

Abarbeitung mit »TRFC_QIN_

RESTART«

Die Verarbeitung der Funktionsbausteine in der Eingangswarte-schlange 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 QIN-Scheduler, der registrierte Queues automatisch abarbeitet. Die Regis-trierung einer Eingangs-Queue erfolgt dabei entweder programma-tisch über den Funktionsbaustein QIWK_REGISTER oder von Hand über den qRFC-Monitor für den QIN-Scheduler, Transaktion SMQR.

Abbildung 2.3 Funktionsbausteine in Eingangswarteschlange

Page 36: SAP -Schnittstellenprogrammierungcontent.schweitzer-online.de/.../018/828/332/9783836217361_content_pdf_1.pdf · Auf einen Blick. 1 Grundlagen der SAP-Schnittstellen-programmierung.....

129

Background-RFC 2.4

Abbildung 2.4 zeigt diese Transaktion nach der Registrierung der Ein-gangswarteschlange ZIFPQUEUE.

Parallelisierung mit dem aRFC

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 Pro-grammierer 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 Exportparame-ter und Ausnahmen entgegengenommen werden. Da aRFC aber für externe Systeme nicht zur Verfügung steht, spielt er bei der Schnitt-stellenprogrammierung 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 Back-ground-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ähig-keit, ein vereinheitlichtes objektorientiertes Programmiermodell sowie erweiterte Funktionen für Programmierer und Administrato-ren. SAP empfiehlt, für neue Anwendungen den bgRFC einzusetzen und alte Anwendungen, die noch tRFC und qRFC verwenden, nach und nach zu migrieren.

Abbildung 2.4 Registrierung einer Eingangswarteschlange

Page 37: SAP -Schnittstellenprogrammierungcontent.schweitzer-online.de/.../018/828/332/9783836217361_content_pdf_1.pdf · Auf einen Blick. 1 Grundlagen der SAP-Schnittstellen-programmierung.....

130

Remote Function Call mit ABAP2

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 COMMITWORK zu einem anderen System transportiert, in dem sie in der Rei-henfolge des Aufrufs ausgeführt werden.

� Inbound-Szenario Die Aufrufe der Funktionsbausteine werden im rufenden System aufgezeichnet. Sie werden nach Abschluss der LUW durch COMMITWORK 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 Lastverteilunginnerhalb 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 Schrit-ten 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.

Page 38: SAP -Schnittstellenprogrammierungcontent.schweitzer-online.de/.../018/828/332/9783836217361_content_pdf_1.pdf · Auf einen Blick. 1 Grundlagen der SAP-Schnittstellen-programmierung.....

131

Background-RFC 2.4

Listing 2.10 zeigt ein ABAP-Client-Programm für einen bgRFC mit derselben Funktionalität wie das aus Listing 2.8, das qRFC verwen-det. Beide Programme erzeugen in einem fremden System Bestellun-gen, indem sie den Funktionsbaustein Z_IFP_ORDER_CREATE aufrufen. Beide Programme gehen nach demselben Schema vor und unter-scheiden 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.

Page 39: SAP -Schnittstellenprogrammierungcontent.schweitzer-online.de/.../018/828/332/9783836217361_content_pdf_1.pdf · Auf einen Blick. 1 Grundlagen der SAP-Schnittstellen-programmierung.....

132

Remote Function Call mit ABAP2

* 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 qRFC-Version in SM59

Im Selektionsbild des Reports in Listing 2.10 müssen Sie eine RFC-Destination 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 bgRFC-Monitor, nachdem das Programm ZIFP_BGRFC aus Listing 2.10 drei-mal ausgeführt wurde. Der Monitor listet auf der linken Seite die Des-tinationen und darunter die Queues auf. Rechts sind dann zu einer Queue die Units zu sehen. Die erste Unit, die um 11:34:44 hinzu-gefügt wurde, ist zur Ausführung bereit. Die beiden anderen Units, die später hinzugefügt wurden, sind noch gesperrt.

Page 40: SAP -Schnittstellenprogrammierungcontent.schweitzer-online.de/.../018/828/332/9783836217361_content_pdf_1.pdf · Auf einen Blick. 1 Grundlagen der SAP-Schnittstellen-programmierung.....

133

Background-RFC 2.4

Abbildung 2.5 Auswahl der qRFC-Version in Transaktion SM59

Abbildung 2.6 bgRFC-Monitor

Page 41: SAP -Schnittstellenprogrammierungcontent.schweitzer-online.de/.../018/828/332/9783836217361_content_pdf_1.pdf · Auf einen Blick. 1 Grundlagen der SAP-Schnittstellen-programmierung.....

479

Index

.NET 469

A

ABAP 20Kurz-Dump 93SOAP-Proxy 420SOAP-Webclient 410SOAP-Webservice 402Stack 19Transaktionskonzept 32

ABAP Dictionary 68, 83, 136, 307ABAP Workbench 17, 69Access Control List 52, 53ACL 52, 53adaptiver Webservice 438, 442ALE 355

Architektur 98Ausgangsbaustein 377Customizing 99Eingangsbaustein 367, 377Eingangsparameter 374, 378Empfängerermittlung 378Empfängerport 373Konfiguration 356, 369Partnerprofil 101Statusmonitor 375Verteilungsmodell 100, 362, 370,

372, 378, 382, 399Vorgangscode 368

ALE_INPUT_ALEAUD 363ALE_MODEL_INFO_GET 362Änderungsvormerkung 33Anmeldesprache 21Anmeldung 20

Mandant 23Annotation 37, 467

SOAPBinding 468WebMethod 468WebService 450

Anwendungsfunktionsleiste 23Anwendungskomponente 34Anwendungsprotokoll 25Anwendungsschicht 17, 18, 20, 34,

37

Anwendungsserver 18, 23, 34, 84, 221dedizierter 342

Anwendungssicherheit 40app.config 471APPEND 311Application Link Enabling � ALEApplikationsserver

Monitoring 38Profiling 38

Architektur, Client-Server 18aRFC 130ARFC2 310, 324ARFC2GenericModelClass 312, 323ARFC2GenericModelClassExecutable

312, 322ARFC2Model 312, 321ARFC2ModelInfo 312, 320, 321ARFCSDATA 117ARFCSSTATE 117Array 78Array Insert 139ASP.NET 81asymmetrisches Verfahren 41asynchrone Kommunikation 35asynchroner RFC 89, 129Ausgangswarteschlange 122, 127Ausnahme 77, 110Authentifizierung 39, 50, 311, 343

SAP-Logon-Ticket 311AUTHORITY CHECK 92Autorisierung 39, 50

B

Backend-Modell 310Background-Workprozess 27BAdI 137BALW_BAPIRETURN_GET2 142BAPI 95, 96, 134, 376

ALE-Schnittstelle 102, 376BAPI_TRANSACTION_COMMIT 96,

151, 184, 247BAPI_TRANSACTION_ROLLBACK

96

Page 42: SAP -Schnittstellenprogrammierungcontent.schweitzer-online.de/.../018/828/332/9783836217361_content_pdf_1.pdf · Auf einen Blick. 1 Grundlagen der SAP-Schnittstellen-programmierung.....

480

Index

BAPI (Forts.)Eingabehilfe 157Fehlermeldung 146freigeben 144GetSearchhelp 158instanzabhängiges 97, 145instanzunabhängiges 97, 153Konvention 136Return-Parameter 137, 138Transaktionsmodell 121, 184, 247Verbuchung 139

BAPIF4T 158Batch-Input 82BD51 367BD64 382BD87 375BDBG 376, 378Beispielanwendung 68Benutzer 21

Kontext 24, 28Name 21, 23Oberfläche 79SAPJSF 45Sitzung 20, 24Stammsatz 21

Berechtigung 74, 92Objekt 74, 92Prüfung 107, 115, 158

Bestellung 68bgRFC 129

Destination 132Inbound-Szenario 130Monitor 132Outbound-Szenario 130Scheduler 134Unit-Objekt 130

Bibliothek, SAPSSOEXT 57Bildschirmbild 23, 30Binding, Custom 472Bindungsstil

Document 408RPC 408

BOR 94BSP 80Business Add-in 137Business Application Programming

Interface � BAPIBusiness Object Builder 134Business Server Pages 80

Business-Objekt 94, 134Helpvalues 157

C

CALL FUNCTION 75CALL TRANSACTION 82Cast 351CCI 340C-Compiler 163Changing-Parameter 77, 307Client 20Client-Server-Architektur 18Codegenerator 310Commit 111COMMIT WORK 32, 33, 78, 118Common Client Interface 340communication_failure 110Composite Application 37Consumer, Proxy 423C-RFC-Bibliothek 282

D

DateiSchnittstelle 81Service 25

Datenbank 18Datenelement 69Datenschicht 18Datensicherheit 40Datenzugriffsschicht 37dedizierter Anwendungsserver 342DELETE 33Dependency-Injection 461deployable Java-Proxy 441Deployment Descriptor 37, 352, 430Design by Contract 36Destination 108, 110, 216, 278, 338,

370, 371Application Data 316, 321BACK 110Bezeichner 443Dictionary Meta 316NONE 110SPACE 110

DestinationDataProvider 285Developer Studio � SAP NetWeaver

Developer Studio

Page 43: SAP -Schnittstellenprogrammierungcontent.schweitzer-online.de/.../018/828/332/9783836217361_content_pdf_1.pdf · Auf einen Blick. 1 Grundlagen der SAP-Schnittstellen-programmierung.....

481

Index

DIAG 20, 25Dialog 30

Schritt 30Workprozess 27

DigitalSignatur 43Zertifikat 44

Direct Input 83direkte Verbindung 286Dispatcher 25, 28DLL 281Double Stack 18Dynamic Information and Action

Gateway 20, 25Dynamic Link Library 281Dynpro 30

E

ECo 302, 310Eingabeprüfung 71Eingangswarteschlange 123, 128Einwegfunktion 42EIS 339EJB 34, 335

Container 37Endpoint-API 465Enqueue 27

Workprozess 32Enterprise Connector 302, 310Enterprise Information System 339Enterprise JavaBean 34, 37, 335, 430Enterprise Service 421Enterprise Services Repository 402,

415, 417Datentyp 417Service-Interface 418

Enterprise-Application-Projekt 430, 442

Entity Bean 35ESR � Enterprise Services RepositoryExportparameter 77, 293, 307, 308,

350Extensible Markup Language � XMLExtensible Stylesheet Language for

Transformations � XSLTexterner Modus 22, 24externes System 86

F

Fault-Typ 307Fehlerbehandlung 307Firewall 29Fremdschlüsselbeziehung 71Function Builder 76, 88, 136Funktionsbaustein 33, 75

Schnittstelle 76Verbuchung 33

Funktionsgruppe 76Funktions-Handler 330

registrieren 331

G

Gateway 26, 84, 199, 221, 256, 259, 335Host 87Monitor 94Service 87

Generic Security Services Application Programming Interface 62

genh 219, 239gepoolte Verbindung 286getFunctionTemplate 301Größenkategorie 71GSS-API V2 62

H

Hash-Funktion 42Hash-Wert 42Hook-Methode 36Hostname 23, 24HTTP 26, 401HTTP Authentication 464Hypertext Transfer Protocol 26, 401

I

ICF 104ICM 26, 103IConnection 349IConnectorGatewayService 348Identität 45IDoc 97, 99, 355

Basistyp 358Bibliothek 390

Page 44: SAP -Schnittstellenprogrammierungcontent.schweitzer-online.de/.../018/828/332/9783836217361_content_pdf_1.pdf · Auf einen Blick. 1 Grundlagen der SAP-Schnittstellen-programmierung.....

482

Index

IDoc (Forts.)Client 391Datensatz 363, 386, 388Eingangsverarbeitung 356Empfänger 381, 385Erzeugung 360IDOC_CONTROL_REC_40 386IDOC_DATA_REC_40 386IDOC_INBOUND_ASYNCHRONOUS

98, 381, 385IDocDocument 392IDocFactory 392IDocRepository 391IDoc-Typ 100, 355, 358, 360, 377IDocXMLProcessor 395Kontrollsatz 362, 363, 366, 386,

388Nachverarbeitung 376Nummer 367Programmierung mit Java 389Segment 356, 392Segmentdefinition 357Segmenttyp 356Server 396Status 367Versand 356XML-Verarbeitung 395

IInteraction 350IInteractionSpec 350Implementation Container 428Importparameter 77, 290, 307, 308,

350IN BACKGROUND TASK 117IN UPDATE TASK 78Inbound Queue 123, 128infrastrukturelle Sicherheit 40INSERT 33Instanz 24instanzabhängiges BAPI 97, 145instanzunabhängiges BAPI 97, 153Integrität 40, 42Interface � SchnittstelleIntermediate Document � IDocInternet Connection Framework 104Internet Connection Manager 26, 103ISO-Standard, X.500 45Iterator 295IUser 45IUserMaint 45

J

J2EE 34KeyStore-Service 48

JAAS 61Java

Bibliothek 306Stack 19, 34, 37Web Dynpro 442

Java 2 Enterprise Edition 34, 48Java API for XML Web Services 465Java Architecture for XML Binding 2.0

465Java Authentication and Authorization

Service 61Java Connector � SAP Java ConnectorJava Cryptographic Architecture 47Java Cryptographic Extension 47Java Development Kit 466Java Enterprise Edition 36Java Key Store 59Java Message Service 35Java Naming and Directory Interface

336Java Native Interface 57, 281Java Server Faces 442Java Server Pages 37, 81Java-Connector 310Java-Proxy deployable 441Java-Skeleton 453JAXB 2.0 465JAX-WS 465JCE 47JEE 36JKS 59JMS 35JNDI 336JNI 57, 281JSF 442JSP 37, 81

K

KeyStore 47, 58KeyStore-Datei, verify.der 48KeyStore-Inhalt

JKS 47PKCS12 47

keytool 48

Page 45: SAP -Schnittstellenprogrammierungcontent.schweitzer-online.de/.../018/828/332/9783836217361_content_pdf_1.pdf · Auf einen Blick. 1 Grundlagen der SAP-Schnittstellen-programmierung.....

483

Index

Klassisches RFC SDK 163, 217, 218ABAP-Datentyp 228Ausnahme 231Beispielprogramm 219Bibliotheksverzeichnis 223bin-Verzeichnis 218Changing-Parameter 230Client 225C-RFC-Bibliothek 217Debugging 222Dispatch 259, 269Dokumentation 219einfacher Parameter 225Exportparameter 230Fehlerbehandlung 227, 234GupLine 244IDoc-Programmierung 385IDoc-Sender 388Importparameter 230include-Verzeichnis 219, 223ItAppLine 243, 244, 246ItCallReceiveEx 244ItCpyLine 243ItCreate 243, 246, 249ItDelete 243ItDelLine 243ItFill 244, 246ItFree 243ItGetLine 243, 244, 246ItLengLine 244ItPutLine 243Kompilieren 222komplexer Client 246lib-Verzeichnis 219Linken 222Präprozessordefinition 223qRFC-Client 255Queue-Name 255, 256Returncode 229RFC_CHAR 228RFC_ERROR_GROUP 227RFC_ERROR_INFO_EX 227, 234,

236RFC_HANDLE 229RFC_HANDLE_NULL 229RFC_ON_CHECK_TID 272RFC_ON_COMMIT 272RFC_ON_CONFIRM_TID 272RFC_ON_ROLLBACK 272

Klassisches RFC SDK (Forts.)RFC_PARAMETER 236RFC_STRING 238RFC_TYPEHANDLE 236, 242RfcAccept 257, 259, 261RfcCallEx 232, 244RfcCallReceiveEx 225, 232RfcCancelRegisterServer 261RfcCheckRegisterServer 261RfcClose 225RfcConfirmTransID 249, 255, 256RfcCreateTransID 249, 253, 255RfcDispatch 257, 269, 270RfcGetData 262, 264, 267RfcGetNameEx 271RFC-Handle 262RfcIndirectCallEx 249, 253RfcInstallFunction 257, 261, 269RfcInstallTransactionControl 271,

272RfcInstallUnicodeStructure 242, 246,

249RfcLastErrorEx 234, 235RfcListen 232, 270RfcOpen 255RfcOpenEx 225, 226, 231RfcQueueInsert 255, 256RfcRaise 262, 267RfcRaiseTables 262RfcReceiveEx 232, 244RfcSendData 262, 264, 267RFCTYPE 236RFCTYPE_CHAR 239RfcWaitForRequest 269, 270saprfc.h 226Server 256, 258strukturierter Parameter 239Tabellenparameter 230, 243TID_check 274TID_commit 274TID_confirm 274TID_rollback 274TID-Management 250Tracing 222tRFC-Client 249tRFC-Server 271Type-Handle 242, 262Unicode-Bibliothek 228Verbindungsparameter 231

Page 46: SAP -Schnittstellenprogrammierungcontent.schweitzer-online.de/.../018/828/332/9783836217361_content_pdf_1.pdf · Auf einen Blick. 1 Grundlagen der SAP-Schnittstellen-programmierung.....

484

Index

Kommandofeld 22Kommunikation

asynchrone 35Fassade 303

KryptografiePrivate Key 41Provider 47, 57Public Key 41

Kundenauftrag 69

L

Lastverteilung 20, 28, 85, 89, 130, 221, 304

LDAP 45Lebenszyklus 35Lieferantenbestellung 69Lightweight Directory Access Protocol

45Logical Unit of Work 118

DB-LUW 32SAP-LUW 32

Login-Modul 61logischer Port 412, 423, 440logisches System 99, 370, 382, 398Logon

Gruppe 28Ticket 52, 60

LUW 118, 125

M

Management 340Mandant 20Massendaten 78, 140Massenverbuchung 78MASTER_IDOC_DISTRIBUTE 363Menüleiste 22MESSAGE 110Message-Driven Bean 35Message-Oriented Middleware 35Message-Server 20, 28, 84, 221, 315Metadaten 300, 327, 391

Cache 325Middleware, Schnittstelle 282Model-Destinationen 311Modulpool 80Modus, externer 22, 24

N

Nachricht 35Klasse 142Nummer 142Typ 100, 359, 360, 377, 407, 417

Namenskollision 411Nummernkreis 75NWA � SAP NetWeaver Adminis-

tratorNWDS � SAP NetWeaver Developer

Studio

O

Objekttyp 135öffentlicher Schlüssel 41Open SQL 37Operation

asynchrone 418synchrone 418

P

Package Explorer 345PAI 31Paket 69, 303

Verwendungserklärung 411Parameter

Export 77, 293, 307, 308, 350Import 77, 290, 307, 308, 350skalarer 108strukturierter 108

Partnervereinbarung 370, 371, 372, 382

Passwort 21PBO 31Performance 36Persistenz 35Personal Security Environment � PSEPKI 44Pluggable Authentication Model 61Port

Default 412logischer 412, 423, 440Nummer 25

PortalRuntime 348Präsentationsschicht 18Principal API 45

Page 47: SAP -Schnittstellenprogrammierungcontent.schweitzer-online.de/.../018/828/332/9783836217361_content_pdf_1.pdf · Auf einen Blick. 1 Grundlagen der SAP-Schnittstellen-programmierung.....

485

Index

Private-Key-Kryptografie 41privater Schlüssel 41Process After Input 31Process Before Output 31Profil 74

Parameter 53Programm-ID 87, 332, 338Protokoll

Handler 428Implementierung 428

Provider 421Proxy 289, 392, 429

Klasse 303, 307, 350, 410, 440, 465, 466

Prüffeld 70Prüftabelle 70PSE 50, 63

Datei 59individuelles 63zentrales 63

Public-Key-Infrastruktur 44Public-Key-Kryptografie 41Pufferbereich 28Purchase Order 69

Q

QIN-Scheduler 128, 198, 256QIWK_REGISTER 128QOUT-Scheduler 125qRFC-Monitor

für Ausgangswarteschlange 125für Eingangswarteschlange 128

Queue 298queued RFC 122

R

RecordFactory 351References-Projekt 430Registrierung 203, 260Remote Function Call � RFCReport 80Repository 299, 335

serverseitiges 326Resource-Adapter 340Ressource

Nutzung 26Verbrauch 31

RFC 26, 105asynchroner 89, 129Background 129Client 283Datentyp 290Destination 84Funktionsbaustein 105mit C 163mit Java 279queued 91, 122, 298registrierter Server 87, 199, 256,

332RfcGetNameEx 270rfcping 218, 220RfcSendData 204Server 325synchroner 88, 105, 116, 289Tracing 94transaktionaler 90, 117, 120, 187,

296zum Ändern 111zum Anlegen 118zum Löschen 111

ROLLBACK WORK 32, 33, 78, 117Rollbereich 28Route 30Router 177Router-String 30, 305RZ10 53, 65

S

SA16 71SALE 99, 101, 369, 382, 398Sales Order 69Sammelsuchhilfe 71SAP

Crypto Toolkit 56Cryptolib 64Gateway 221IDoc-Bibliothek 390Instanz 85Menü 23Router 29, 177Router-String 305SAP NetWeaver Composition

Environment 36SAP CRM 18SAP Enterprise Connector 302, 310

Page 48: SAP -Schnittstellenprogrammierungcontent.schweitzer-online.de/.../018/828/332/9783836217361_content_pdf_1.pdf · Auf einen Blick. 1 Grundlagen der SAP-Schnittstellen-programmierung.....

486

Index

SAP ERP 18SAP GUI 19, 20, 25, 28SAP Implementation Guide 101SAP Java Connector 279, 390

Architektur 281, 339Factory-Klasse 287Installation 280JCo.Client 307JCoConnectionData 288JCoContext 286JCoCustomRepository 326JCoDestination 284, 289JCoDestinationManager 284JCoDestinationMonitor 287JCoFieldIterator 295JCoFunction 289, 331JCoFunctionTemplate 301, 326JCoIDocHandlerFactory 396, 397JCoIDocServer 396JCoIDocServerContext 397JCoListMetaData 300, 326JCoMetaData 300JCoParameterList 290JCoRecord 290JCoRepository 289JCoServer 329JCoServerContext 331JCoServerFactory 329JCoServerFunctionHandle 331JCoServerTIDHandler 334, 397JCoTable 292RFC Provider Service 335Session-Management 286Version 280

SAP NetWeaver Administrator 48, 463

SAP NetWeaver Application Server 17, 427ABAP 20, 68Java 34

SAP NetWeaver Composition Environ-ment 36, 310, 313, 416, 466

SAP NetWeaver Developer Studio 17, 280, 302, 344, 426

SAP NetWeaver Portal 51, 341Applikation 346Connector Framework 339Komponente 344, 346, 347Projekt 345

SAP NetWeaver Process Integration 415

SAP NetWeaver RFC SDK 163Bibliotheksverzeichnis 168bin-Verzeichnis 164Client 170Compiler 165, 167demo-Verzeichnis 164doc-Verzeichnis 165einfacher Parameter 178Exportparameter 179Fehlerbehandlung 172GetRowCount 182IDoc-Programmierung 381IDoc-Sender 383Importparameter 179include-Verzeichnis 165, 167komplexer Client 184Konfigurationseigenschaft 167lib-Verzeichnis 165Linker 165, 167MoveToPreviousRow 181Präprozessordefinition 167qRFC 198Queue-Name 198Repository 202RFC_CONNECTION_HANDLE 174RFC_CONNECTON_PARAMETER

174RFC_ERROR_INFO 174RFC_FUNCTION_HANDLE 174RFC_FUNCTIONDESC_HANDLE

174RFC_ON_CHECK_TID 208RFC_ON_COMMIT 208RFC_ON_CONFIRM_TID 208RFC_ON_ROLLBACK 208RFC_STRUCTURE_HANDLE 180RfcAddNewRow 181RfcAppendNewLine 184RfcAppendNewRow 182RfcCloseConnection 170, 172, 175RfcConfirmTransaction 187, 196RfcCreateFunction 170RfcCreateTransaction 187, 196RfcDeleteAlRows 181RfcDeleteCurrentRow 181RfcDestroyTable 181RfcGetChars 181

Page 49: SAP -Schnittstellenprogrammierungcontent.schweitzer-online.de/.../018/828/332/9783836217361_content_pdf_1.pdf · Auf einen Blick. 1 Grundlagen der SAP-Schnittstellen-programmierung.....

487

Index

SAP NetWeaver RFC SDK (Forts.)RfcGetCurrentRow 182, 184RfcGetFunction 175RfcGetFunctionDes 175RfcGetFunctionDesc 170RfcGetRowCount 182, 184RfcGetString 179RfcGetStringLength 179RfcGetStructure 181RfcGetTable 181, 183RfcGetTransactionID 187, 196RfcInsertNewRow 181RfcInstallServerFunction 199, 203RfcInstallTransactionHandlers 208,

209RfcInvoke 170, 175RfcInvokeInTransaction 187, 196RfcListenAndDispatch 199RfcListenDispatch 203RfcMmoveToLastRow 181RfcMoveTo 182RfcMoveToFirstRow 181RfcMoveToNextRow 181, 184RfcOnCheckTransaction 211, 213RfcOnCommitTransaction 211RfcOnConfirmTransaction 211RfcOnRollbackTransaction 211RfcOpenConnection 170, 175RfcRegisterServer 199, 203RfcSetChars 179, 184RfcSubmitTransaction 187, 196Server 199, 200Serverfunktion 204strukturierter Parameter 180Tabellenparameter 181TID-Datei 188TID-Management 189Transaktions-Handle 187tRFC-Client 187, 193tRFC-Server 208Verbindungsparameter 175

SAP PLM 18SAP SCM 18SAP SRM 18SAP Virtual Machine 38sapgenpse 50, 64sapinfo 218, 220SAP-Logon-Ticket 48, 56saprfc.h 172

saprfc.ini 176, 260SAP-System 24SBGRFCMON 132Scheduler

QIN 128, 198, 256QOUT 125

Schlüssel 41Feld 70Management 43öffentlicher 41privater 41

Schnittstelle 17, 392Middleware 282Pattern 418Technologie 81Vereinbarung 36virtuelle 426, 433, 434

SE11 69SE16 71SE37 76, 88SE80 69, 420, 453SECUDIR 64Secure Network Communication 62Secure Socket Layer 41SEI 429Selektion 154Selektionsmethode 72Self-Registration 46Separation of Concerns 34ServerDataProvider 329Server-Proxy 421serverseitiges Repository 326Service Endpoint Interface 429Service Provider Interface 35Service Registry 451serviceorientierte Architektur 37Services-Datei 25Servlet 37, 81Session Bean

statefless 35stateful 35stateless 336, 431

SICF 104Sicherheit 39

Daten 40hybrides Verfahren 41infrastrukturelle 40Integration 56Management 340

Page 50: SAP -Schnittstellenprogrammierungcontent.schweitzer-online.de/.../018/828/332/9783836217361_content_pdf_1.pdf · Auf einen Blick. 1 Grundlagen der SAP-Schnittstellen-programmierung.....

488

Index

Sicherheit (Forts.)System 40Transportschicht 61Zugriff 40

SID 221Single Point of Access 52Single Sign-on 51Single Stack 18skalarer Parameter 108SLD 416SM30 53, 158SM35 82SM58 117SM59 84, 108, 203, 216, 260, 278,

332, 370, 371, 398SMGW 94, 203, 260SMQ1 125SMQ2 128, 299SMQR 128, 198, 256SMQS 125SNC 62

PSE-Container 66SNRO 75SOA 37SOAMANAGER 104, 404, 405, 412,

421, 422, 423, 453, 469SOAP 103, 401

Action 408Body 409Envelope 409Header 409

SoftwareKomponente 416Produkt 416

Sperre 32, 115Baustein 73Liste 43Objekt 73Verwaltungs-Workprozess 27

SPI 35Spool-Workprozess 27SPRO 101SPROXY 420SSL 41, 62SSO 51SSO2 54ST05 94ST22 93standalone Java-Proxy 438

stateful 286, 419Stateful Session Bean 35stateless 35, 336, 418Stateless Session Bean 35, 336, 431Statusleiste 23Strukturparameter 108, 294STRUSTSS02 55STRUSTSSO2 49, 52, 66Struts 442SU01 74SU02 74Suchhilfe 71SWO 94SWO1 94, 134, 144symmetrisches Verfahren 41synchroner RFC 88, 105System

externes 86Funktionsleiste 22ID 24, 221logisches 99, 370, 382, 398Meldung 23Nummer 24, 85, 221PSE 55Sicherheit 40

System Landscape 341Editor 344

System Landscape Directory 313, 314, 315, 341, 416SLD_CLIENT 313SLD_DataSupplier 313

system_failure 110System-ID 221

T

T100 138, 146Tabelle

Parameter 77, 292, 293, 307Pflege 71transparente 69TWPSSO2ACL 53

TBDBE 378TCP 25Ticketaussteller 51TID � Transaktions-IDTitelleiste 23Transaction Control Protocol 25Transaktion 22, 23

Page 51: SAP -Schnittstellenprogrammierungcontent.schweitzer-online.de/.../018/828/332/9783836217361_content_pdf_1.pdf · Auf einen Blick. 1 Grundlagen der SAP-Schnittstellen-programmierung.....

489

Index

transaktionaler RFC 90, 117, 120Transaktions-ID 90, 117, 187, 211,

249, 255, 274, 296, 393Management 297, 333, 397

Transaktionsmanagement 340Transaktionsmodell 184, 247Transaktionsnummer � Transaktions-

IDtransparente Tabelle 69Transport-Binding 428Transportobjekt 427TRFC_QIN_RESTART 128, 198, 256TRFC_SET_QIN_PROPERTIES 126TU&C/C 418

U

UME 44UME Persistence Manager 45Umgebungsvariable RFC_INI 176Unix-Daemon 88UPDATE 33User Management Engine 44User-Datastore 46User-Mapping 56, 343

V

Verarbeitungsreihenfolge 91Verbindlichkeit 40, 43Verbindung 349

Aufbau 307direkte 286gepoolte 286Management 340Parameter 304

VerbuchungBaustein 78, 114Tabelle 33Workprozess 27, 33

Verschlüsselung 39, 41Verteilungsmodell � ALE-Verteilungs-

modellVertrauensbeziehung 58Vertrauensstellung 44Vertraulichkeit 40, 41virtuelle Maschine 38, 39virtuelles Interface 426, 433, 434Visual Administrator 48, 335

Visual Studio 2222003 2252005 1662010 469Konsolenanwendung 166vorkompilierter Header 166

Vorgangscode 374

W

WE20 373, 398WE30 100, 358WE31 100, 356WE42 374WE81 99, 359WE82 360Web Dynpro 310

ABAP 80Java 37, 81, 442

Web Service Definition 427, 434Web Service Description Language �

WSDLWeb Services Navigator 435, 451Webbrowser 19Webcontainer 37Web-Modul-Projekt 442Webservice 104, 402

adaptiver 438, 442Authentifizierung 463Binding 427Client-Programm 414Datentyp 432deployable Proxy 459Endpunkt 403Inside-Out-Ansatz 104, 401, 452Interface 426Laufzeit 427mit C# 469mit J2EE 429, 433mit Java 426, 429, 437, 466Navigator 104Operation 403, 451Outside-In-Ansatz 104, 415, 421,

452Porttyp 463Profil 404Schnittstelle 404Service-Consumer 402Servicedefinition 402

Page 52: SAP -Schnittstellenprogrammierungcontent.schweitzer-online.de/.../018/828/332/9783836217361_content_pdf_1.pdf · Auf einen Blick. 1 Grundlagen der SAP-Schnittstellen-programmierung.....

490

Index

Webservice (Forts.)Service-Provider 402standalone Proxy 459Wizard 402

Werkzeugwsgen 465wsimport 465, 466

Wertübergabe 108Windows-Service 88Workprozess 26, 27WSADMIN 438WSD 427, 434WSDL 104, 406, 438, 469

Binding 428Document-Stil 408RPC-Stil 408

X

X.500 45XML 395

Nachricht 401Schema Definition Language 407

XML-Verarbeitung, IDoc 395XSLT 395

Z

Zertifikat 63, 66, 428Export 53Import 55X.509 428

ZSSF_TEST_PSE 67Zugriffssicherheit 40Zuständigkeit 36zustandsbehaftet � statefulzustandslos � stateless