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