314
Liebe Leserin, lieber Leser, vielen Dank, dass Sie sich für ein Buch von SAP PRESS entschieden haben. SAP PRESS ist eine gemeinschaftliche Initiative von SAP und Galileo Press. Ziel ist es, den Anwendern qualifiziertes SAP-Wissen zur Verfügung zu stel- len. SAP PRESS vereint das fachliche Know-how der SAP und die verlegeri- sche Kompetenz von Galileo Press. Die Bücher bieten Expertenwissen zu technischen wie auch zu betriebswirtschaftlichen SAP-Themen. Die technischen Bücher von SAP PRESS sind von Mitarbeitern der SAP oder qualifizierter Beratungsunternehmen konzipiert, verfasst und geprüft. Nie- mand wäre berufener als diese Experten, Sie bei Ihren anspruchsvollen Ad- ministrations- und Beratungsaufgaben zu unterstützen. Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder neu gelingt, sind wir auf Ihre Rückmeldung angewiesen. Bitte teilen Sie uns Ihre Meinung zu diesem Buch mit. Ihre kritischen und freundlichen Anregungen, Ihre Wünsche und Ideen werden uns weiterhelfen. Wir freuen uns auf den Dialog mit Ihnen. Ihr Florian Zimniak Lektorat SAP PRESS www.sap-press.de [email protected] Galileo Press Gartenstraße 24 53229 Bonn

Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

  • Upload
    others

  • View
    3

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

Liebe Leserin, lieber Leser,

vielen Dank, dass Sie sich für ein Buch von SAP PRESS entschieden haben.

SAP PRESS ist eine gemeinschaftliche Initiative von SAP und Galileo Press. Ziel ist es, den Anwendern qualifiziertes SAP-Wissen zur Verfügung zu stel-len. SAP PRESS vereint das fachliche Know-how der SAP und die verlegeri-sche Kompetenz von Galileo Press. Die Bücher bieten Expertenwissen zu technischen wie auch zu betriebswirtschaftlichen SAP-Themen.

Die technischen Bücher von SAP PRESS sind von Mitarbeitern der SAP oder qualifizierter Beratungsunternehmen konzipiert, verfasst und geprüft. Nie-mand wäre berufener als diese Experten, Sie bei Ihren anspruchsvollen Ad-ministrations- und Beratungsaufgaben zu unterstützen.

Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder neu gelingt, sind wir auf Ihre Rückmeldung angewiesen. Bitte teilen Sie uns Ihre Meinung zu diesem Buch mit. Ihre kritischen und freundlichen Anregungen, Ihre Wünsche und Ideen werden uns weiterhelfen.

Wir freuen uns auf den Dialog mit Ihnen.

Ihr Florian ZimniakLektorat SAP PRESS

[email protected]

Galileo PressGartenstraße 2453229 Bonn

Page 2: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

SAP PRESS wird herausgegeben vonBernhard Hochlehnert, SAP AG

Paul ReadmySAP.com-Datenbankadministration mit Microsoft SQL Server 20002002, ca. 300 Seiten, geb.ISBN 3-934358-87-X

Liane WillSAP APO-SystemadministrationBasiswissen für ein effektives Systemmanagement2002, ca. 230 Seiten, geb.ISBN 3-89842-248-8

Thomas SchneiderSAP R/3-PerformanceoptimierungAnalyse und Tuning von SAP-Systemen2., aktualiserte u. erweiterte Auflage2002, 504 Seiten, geb.ISBN 3-89842-192-9

SAP LabsSAP Guide SystemadministrationSchritt-für-Schritt-Anleitungen für die tägliche Praxis2002, 792 Seiten, geb.ISBN 3-89842-208-9

Horst Keller, Sascha KrügerABAP ObjectsEinführung in die SAP-Programmierung2. Auflage 2001, 665 Seiten, geb., 2 CDsISBN 3-89842-147-3

Aktuelle Angaben zum gesamten SAP PRESS-Programm finden Sie unter www.sap-press.de.

Page 3: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

Axel Angeli

TechnischeIntegration von

SAP-Systemen

Page 4: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

Bibliografische Information Der Deutschen Bibliothek

Die Deutsche Bibliothek verzeichnet diese Publikation in der Deutschen Nationalbibliografie;

detaillierte Bibliografische Daten sind im Internet über http://dnb.ddb.de abrufbar.

ISBN 3-89842-316-6

© Galileo Press GmbH, Bonn 20031. Auflage 2003

Der Name Galileo Press geht auf den italieni-

schen Mathematiker und Philosophen Galileo

Galilei (1564–1642) zurück. Er gilt als Grün-

dungsfigur der neuzeitlichen Wissenschaft

und wurde berühmt als Verfechter des moder-

nen, heliozentrischen Weltbilds. Legendär ist

sein Ausspruch Eppur se muove (Und sie be-

wegt sich doch). Das Emblem von Galileo

Press ist der Jupiter, umkreist von den vier

Galileischen Monden. Galilei entdeckte die

nach ihm benannten Monde 1610.

Lektorat Florian Zimniak Korrektorat Alexan-dra Müller, Oer-Erkenschwick Einbandgestal-tung department, Köln Herstellung Iris Warkus Satz reemers publishing services, Krefeld Druck und Bindung Bercker Graphischer Be-trieb, Kevelaer

Das vorliegende Werk ist in all seinen Teilen

urheberrechtlich geschützt. Alle Rechte vor-

behalten, insbesondere das Recht der Über-

setzung, des Vortrags, der Reproduktion, der

Vervielfältigung auf fotomechanischen oder

anderen Wegen und der Speicherung in

elektronischen Medien.

Ungeachtet der Sorgfalt, die auf die Erstellung

von Text, Abbildungen und Programmen ver-

wendet wurde, können weder Verlag noch

Autor, Herausgeber oder Übersetzer für mög-

liche Fehler und deren Folgen eine juristische

Verantwortung oder irgendeine Haftung über-

nehmen.

Die in diesem Werk wiedergegebenen

Gebrauchsnamen, Handelsnamen, Warenbe-

zeichnungen usw. können auch ohne besondere

Kennzeichnung Marken sein und als solche den

gesetzlichen Bestimmungen unterliegen.

Sämtliche in diesem Werk abgedruckten

Abbildungen und Bildschirmabzüge unter-

liegen dem Urheberrecht © der SAP AG,

Neurottstraße 16, D-69190 Walldorf.

SAP, das SAP-Logo, my SAP, mySAP.com,

mySAP Business Suite, SAP NetWeaver, SAP

R/3, SAP R/2, SAP B2B, SAPtronic, SAPscript,

SAP BW, SAP CRM, SAP Early Watch, SAP Ar-

chiveLink, SAP GUI, SAP Business Workflow,

SAP Business Engineer, SAP Business Naviga-

tor, SAP Business Framework, SAP Business In-

formation Warehouse, SAP inter-enterprise

solutions, SAP APO, AcceleratedSAP, InterSAP,

SAPoffice, SAPfind, SAPfile, SAPtime, SAPmail,

SAPaccess, SAP-EDI, R/3 Retail, Accelerated

HR, Accelerated HiTech, Accelerated Consu-

mer Products, ABAP, ABAP/4, ALE/WEB, BAPI,

Business Framework, BW Explorer, Enjoy-SAP,

mySAP.com e-business platform, mySAP

Enterprise Portals, RIVA, SAPPHIRE, TeamSAP,

Webflow und SAP PRESS sind Marken oder

eingetragene Marken der SAP AG, Walldorf.

Page 5: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

Inhalt 5

1.1 Enterprise Application Integration ....................................................... 17

1.2 SAP-Technologie und -Komponenten .................................................. 191.2.1 SAP NetWeaver ....................................................................... 201.2.2 mySAP Business Suite .............................................................. 21

1.3 All-in-one versus Best-of-Breed ........................................................... 22

2.0.1 Proxy-Dienste .......................................................................... 272.0.2 Proxy-Dienste im Sicherheitsbereich ........................................ 282.0.3 Message-Queues ..................................................................... 292.0.4 Workflow ................................................................................ 302.0.5 GUI-Server .............................................................................. 302.0.6 3-Tier-Lösungen ..................................................................... 31

3.1 Die nahe Zukunft ................................................................................. 353.1.1 XML-Datenbanken .................................................................. 353.1.2 Entwicklung in mehreren Programmiersprachen ...................... 353.1.3 Grid-Computing ...................................................................... 36

3.2 Komponenten und Protokolle .............................................................. 37

3.3 Ein Beispiel einer heutigen Unternehmens-IT ...................................... 383.3.1 Modellsichten und Abstraktion ................................................ 413.3.2 Ansatz für eine zeitgemäße Lösung: Integration mit HTTP

und XML ................................................................................. 44

Inhalt

Einleitung 11

1 Von All-in-one-Software zu Webservices 17

2 Middleware 27

3 Beispielszenarien und Voraussetzungen 35

316IVZ.fm Seite 5 Dienstag, 22. April 2003 2:31 14

Page 6: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

6 Inhalt

4.1 Was ist RFC? ........................................................................................ 49

4.2 R/3-RFC von einer anderen R/3-Instanz .............................................. 514.2.1 Interne Destination NONE ...................................................... 52

4.3 Windows-zu-R/3-Connectivity mit DCOM .......................................... 524.3.1 R/3-Logon mit VBA ................................................................. 544.3.2 Anatomie der RFC- und BAPI-Aufrufe von Windows ............... 56

4.4 Helper-Klassen für den Zugriff auf R/3 via RFC .................................... 664.4.1 Class R3LogonObj ................................................................... 664.4.2 Class R3Credentials ................................................................. 674.4.3 Alternative R3Credentials-Class ............................................... 68

4.5 R/3 Java Connectivity ........................................................................... 704.5.1 SAP R/3 Java Connector JCo ................................................... 704.5.2 SAP R/3-Logon mit Java .......................................................... 70

4.6 Das SAP RFC-Gateway ......................................................................... 734.6.1 Registrierung eines RFC-Listeners beim SAP-Gateway ............. 734.6.2 Anlegen einer RFC-Destination für einen registrierten Listener 744.6.3 Eigene RFC-Listener erstellen .................................................. 74

4.7 Troubleshooting RFC ........................................................................... 77

4.8 Aufruf von Remote Programs aus R/3 Via RFC ..................................... 784.8.1 RFC via Remote Shell .............................................................. 784.8.2 RFC über Webserver ............................................................... 794.8.3 Aufruf eines Programms auf der Workstation mit RFC ............. 804.8.4 Aufruf eines HTTP-Webservers von SAP R/3 ............................ 844.8.5 Proxy-Settings in ABAP ........................................................... 86

4.9 RFC von SAP R/3 auf Windows ............................................................ 874.9.1 Kommunikation mit Excel via OLE/2 und HTTP-Server ............ 874.9.2 Zugriff auf ein Excel-Datenblatt von R/3 .................................. 88

4.10 Business-Objekte und BAPI ................................................................. 954.10.1 Business-Objekte und Modellsichten ....................................... 954.10.2 Technische Kriterien eines BAPI .............................................. 994.10.3 Anwendungsbeispiel: Das Sales-Order-BAPI ............................ 1004.10.4 Beispiel: BAPI_SALESORDER_GETLIST .................................... 1014.10.5 VBA-Beispiel zu BAPI_SALESORDER_GETLIST ......................... 109

4.11 SAP Interface Repository .................................................................... 111

5.1 Casabac GUI-Server ............................................................................. 1165.1.1 Technologie ............................................................................ 1175.1.2 Beispiel zur Kalkulation der Mehrwertsteuer ........................... 119

5.2 Web Dynpro und Business Server Pages ............................................. 123

4 SAP R/3 Remote Function Call 49

5 Frontend und GUIs 115

316IVZ.fm Seite 6 Dienstag, 22. April 2003 2:31 14

Page 7: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

Inhalt 7

6.1 Anwendungen von Message Queues ................................................... 1256.1.1 Modelle von Message-Queues ................................................. 1256.1.2 Nutzen der Message-Queues ................................................... 126

6.2 Message-Server Software ..................................................................... 128

6.3 Kommunikation mit Messages-Queues ............................................... 130

7.0.1 NAST Message Control ............................................................ 1337.0.2 Entwicklung eigener NAST-Handler ......................................... 1347.0.3 Workflow-Events ..................................................................... 1387.0.4 Pro und Kontra Workflow versus NAST ................................... 138

7.1 Messaging mit R/3-IDocs ..................................................................... 139

7.2 SAP R/3 Workflow programmieren ...................................................... 142

7.3 Workflow-Handler ............................................................................... 146

8.1 Von Plattformen, Frameworks und Personalities ................................. 1478.1.1 Plattformen ............................................................................. 1478.1.2 Frameworks und Personalities ................................................. 149

8.2 Programmiersprachen und Entwicklungsumgebung ............................ 1518.2.1 Die Entwicklungsumgebung .................................................... 1528.2.2 Die Compile-on-Demand-Runtime .......................................... 1528.2.3 Der Debugger ......................................................................... 1528.2.4 Einrichten einer Entwicklungsumgebung ................................. 1538.2.5 Plattformentscheidung: UNIX versus Windows NT .................. 1548.2.6 Framework: Web AS/ABAP, Microsoft.NET oder J2EE ............. 1548.2.7 Windows Scripting Host versus Visual Basic ............................. 1568.2.8 Windows Classic versus Microsoft.NET .................................... 156

8.3 Die Wahl der richtigen Programmiersprache ........................................ 1578.3.1 Sprache für den Webserver ..................................................... 1578.3.2 Java ......................................................................................... 1588.3.3 J# ............................................................................................ 1588.3.4 Visual Basic (VB) und Visual Basic for Applications (VBA) ......... 1588.3.5 Visual Basic Script (VBS) und ASP ............................................ 1588.3.6 C# ........................................................................................... 1598.3.7 X# ........................................................................................... 1598.3.8 Delphi ..................................................................................... 1608.3.9 ADA ........................................................................................ 1608.3.10 SmallTalk ................................................................................. 1618.3.11 LISP ......................................................................................... 161

6 Message-Queues und Message-Server 125

7 Internes Messaging in R/3 133

8 Programmieren mit mehreren Programmiersprachen 147

316IVZ.fm Seite 7 Dienstag, 22. April 2003 2:31 14

Page 8: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

8 Inhalt

8.4 Synopsis der Objektprogrammierung mit Java, VB und ABAP ............. 1628.4.1 Grundbegriffe ......................................................................... 1628.4.2 Constructor ............................................................................. 1698.4.3 Destructor .............................................................................. 1708.4.4 Property-Deklarationen ........................................................... 1718.4.5 Methoden ............................................................................... 1728.4.6 String-Deklarationen ............................................................... 1738.4.7 Array-Deklarationen ................................................................ 174

9.1 Beispiel für Webservices mit Amazon.com .......................................... 1809.1.1 Einfache Beispiele für Webservices .......................................... 1809.1.2 Ein Beispiel mit einem winzigkleinen Fehler ............................ 1819.1.3 Die WSDL zum Amazon.com-Service ...................................... 1859.1.4 Webservice als HTTP GET-Anfrage .......................................... 1889.1.5 Verwendung eines XSLT-Stylesheets ........................................ 1889.1.6 Type- und Namespace-Referenz .............................................. 189

10.1 TCP/IP und UDP/IP Network Protocol ................................................. 191

10.2 Client-Server-Protokolle ...................................................................... 19310.2.1 Clientseite ............................................................................... 19310.2.2 Serverseite .............................................................................. 19410.2.3 URN, URI und URL – Resource Locator ................................... 19410.2.4 CGI – Common Gateway Interface .......................................... 196

10.3 HTTP-Kommunikation mit einem Webserver ....................................... 19610.3.1 Beispiel einer HTTP-Session ..................................................... 19910.3.2 Beispiel für einen HTTP POST-Request .................................... 20110.3.3 Anfragen direkt ins Internet .................................................... 203

11.1 XML als Lingua franca des Internet ...................................................... 20511.1.1 Kleine Anatomie eines XML-Dokuments ................................. 206

11.2 XSD-Schema und DTD ......................................................................... 209

11.3 DOM – Document Object Model ........................................................ 21311.3.1 DOM-Beispiele ....................................................................... 214

11.4 XML-Parser .......................................................................................... 21511.4.1 DOM oder SAX ....................................................................... 21611.4.2 Der Microsoft XML-Parser ....................................................... 21611.4.3 XML-Parser Libraries for Java ................................................... 217

9 Webservice als Standard-Nachrichtenformat 179

10 HTTP- und TCP/IP-Protokolle 191

11 XML – Extended Markup Language 205

316IVZ.fm Seite 8 Dienstag, 22. April 2003 2:31 14

Page 9: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

Inhalt 9

11.4.4 XML-Browser und Editoren ..................................................... 21911.4.5 Namespaces – Namensräume .................................................. 219

11.5 XSLT – eXtended Style Sheet Language Transformations ..................... 220

11.6 HTML-Seiten mit XSL-Stylesheets und XML ........................................ 22111.6.1 Inventurtabelle der Animal-Farm ............................................. 22111.6.2 XSL – Step by step ................................................................... 22211.6.3 XSL-Templates ......................................................................... 22211.6.4 XSL auf die Animal-Farm angewandt ....................................... 22311.6.5 Anatomie des XSL-Stylesheets ................................................. 22411.6.6 Parsing des XML und Anwendung des XSL ............................... 227

11.7 SOAP .................................................................................................... 228

11.8 WSDL-Dokumente ............................................................................... 23111.8.1 WSDL-DOM ........................................................................... 23211.8.2 Beispiel eines WSDL-Dokuments für eine BAPI-Funktion ......... 235

12.1 Server Pages und Scripting ................................................................... 23912.1.1 Common Gateway Interface – CGI .......................................... 24012.1.2 Active Server Pages – ASP und ASP.NET ................................. 24012.1.3 Java Server Pages – JSP ............................................................ 24112.1.4 Java Servlets ............................................................................ 24312.1.5 Business Server Pages (BSP) .................................................... 244

12.2 Web Pages mit Active Server Pages ..................................................... 24512.2.1 ASP »Hello World« .................................................................. 24512.2.2 Senden von HTML ................................................................... 24612.2.3 Aufrufe beliebiger Windows-Objekte aus VBS ......................... 24712.2.4 BAPI-Aufruf von ASP ............................................................... 24712.2.5 Microsoft.NET Connector ........................................................ 25012.2.6 Parameter aus der URI abfragen ............................................... 25012.2.7 ASP Application Variables ........................................................ 25312.2.8 Global.asa – Die ASP-Autoexec-Datei ...................................... 25412.2.9 Extra-Beispiel: File-Liste mit ASP .............................................. 255

12.3 Entwicklung von Business Server Pages für den SAP Web AS .............. 25612.3.1 »Hello World« für BSP ............................................................. 25612.3.2 BAPI-Aufruf aus einer BSP ....................................................... 25712.3.3 Online Text Repository ............................................................ 259

13.1 Abfragen einer URI mit Visual Basic ..................................................... 26113.1.1 Das Windows-Webbrowser-Control ........................................ 26113.1.2 Anwendungsbeispiel für das Browser-Control .......................... 26213.1.3 Das WINHTTP-Control ............................................................ 266

12 Entwicklung von dynamischen Webseiten 239

13 Webseiten von anderen Programmen abrufen 261

316IVZ.fm Seite 9 Dienstag, 22. April 2003 2:31 14

Page 10: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

10 Inhalt

13.1.4 Anwendungsbeispiel für das WINHTTP-Control ...................... 267

13.2 Webentwicklung mit SAP R/3 ............................................................. 27113.2.1 SAP Function HTTP_GET ......................................................... 27213.2.2 Proxy-Settings in ABAP ........................................................... 27513.2.3 SAP und SOAP: Webservice Choreography Interface (WSCI) ... 276

13.3 SAP Internet Transaction Server .......................................................... 276

A.1 MIME-Typen ........................................................................................ 279

A.2 Beispiel für HTTP GET und HTTP POST ................................................ 282

A.3 HTTP-Statuscodes ................................................................................ 283

A.4 HTTP- und FTP-Kommandos ................................................................ 286

A.5 Java-Utilities ........................................................................................ 287

A.6 SAPLPD-Befehlszeilenparameter .......................................................... 290

A.7 Setzen des Suchpfads für SAPLOGON.INI ........................................... 291

A.8 RFC-Connectors ................................................................................... 292

A.9 Beispiele aus dem SAP Interface Repository ........................................ 296

A Anhang 279

B Synopsis der Programmiersprachen ABAP, VB und Java 299

Index 309

316IVZ.fm Seite 10 Dienstag, 22. April 2003 2:31 14

Page 11: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

11

Einleitung

So wie Windows seinerzeit zum Standard für Betriebssysteme im Desk-top-Bereich wurde, ist SAP heute der unbestrittene Standard für Unter-nehmenssoftware. Dennoch gibt es in den IT-Abteilungen von Unterneh-men unzählige, verstreut laufende Software-Module, die nicht einfachdurch eine Standardlösung abgelöst werden können. Die Aufgabe derUnternehmens-IT in den nächsten zehn Jahren wird es deshalb vor allemsein, diese Software zu einer harmonisch kooperierenden Einheit zu ver-schmelzen. Hierzu wird leistungsstarke Middleware wie IBM WebSphereoder SAPs NetWeaver eine zentrale Rolle spielen. Neben der Kenntnisder Produkte benötigt der Integrator künftig ein detailliertes Verständnisder Technologien und Protokolle, die zum Austausch von Informationenverwendet werden.

Warum dieses Buch?

Dieses Buch ist das Ergebnis jahrelanger Erfahrung im Umgang mit Tech-nologien zur Anbindung von Software an SAP R/3, deren Entwickler nie-mals im Traum daran gedacht hatten, überhaupt Schnittstellen zu einemanderen System zu verwirklichen. Dazu war es notwendig, unzähligeTechnologien und Technologievarianten zu sichten, um deren Tauglich-keit zu beurteilen und das Potenzial zu einem Trend oder Standard zuerkennen. Das Ziel lässt sich in einem Wort beschreiben: Vereinfachung.

Erfahrungsgemäß besteht bei der Entwicklung einer einzelnen Software-Brücke in einem klassischen Umfeld eines Großunternehmens ein krassesMissverhältnis zwischen Planungs- und Realisierungsaufwand. Währenddas Schreiben des Programms in der Regel wenige Tage in Anspruchnimmt, verschlingen Planung und Testphase oft viele Monate. Auch wenndies in hohem Maß dem organisatorischen Umfeld zuzuschreiben ist, las-sen sich massive Einsparungen und Synergien durch den Einsatz von stan-dardisierten Verfahren und der universellen Dokumentensprache XMLerzielen.

Als die Technologien, die die Kraft haben, die Netze zwischen verteiltenApplikationen erfolgreich und kostengünstig zu realisieren, haben sichHTTP und XML erwiesen. Deshalb ist der Tenor dieses Buches immer dieRealisierung von Datenaustausch über XML und HTTP von den verschie-densten gängigen Plattformen aus.

Einleitung.fm Seite 11 Dienstag, 22. April 2003 2:31 14

Page 12: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

12

Für wen dieses Buch gedacht ist und was in diesem Buch steht

Dieses Buch ist gedacht für Unternehmen und deren Berater, die ihrenSchwerpunkt heute auf SAP R/3 haben und Wege suchen, wie beste-hende und neu zu entwickelnde Applikationen in SAP R/3 und die SAPNetWeaver-Technologie integriert werden können. Es stellt die Architek-turalternativen gegenüber und versetzt Sie in die Lage, selbst fachlichkompetent über Best-Practices-Ansätze zu diskutieren, und es bietetIhnen einen Einstieg, um sich das notwendige Programmierwissen selbstanzueignen.

Es ist eine Destillation der enormen Menge an Material, die es zu denThemen Webservices, SAP R/3 und Messaging gibt. Es geht davon aus,dass dem Leser eine der vorgestellten Techniken sehr gut bekannt ist under nun bereit ist, sich Kenntnisse in dem jeweils fremden Bereich anzueig-nen. Das Buch setzt voraus, dass Sie offen sind für ein gemischtes Zusam-menspiel von SAP-Komponenten mit Anwendungen Dritter.

Dieses Buch erklärt die Technologien, die zur Kommunikation innerhalbeines Unternehmensnetzwerks erforderlich sind, um Software-Kompo-nenten zu integrieren, die ursprünglich nicht für die wechselseitige Koo-peration entwickelt wurden. Aufgelockert durch Beispiele aus einem rea-len Betrieb, ist es der Versuch, in kompakter Form die technischenMöglichkeiten der Collaboration mit SAP-Systemen aufzuzeigen. Dabeiwird von der Annahme ausgegangen, dass ein Betrieb den Kern seinerUnternehmens-IT auf SAP R/3 realisiert und eigene Satellitenanwendun-gen an dieses System in Echtzeit anbinden möchte.

Was in diesem Buch nicht steht

Dieses Buch ist keine Einführung in die verschiedenen SAP-Komponentenoder -Lösungen. Es ist auch kein Nachdruck der SAP-Dokumentationenzu einem der Themen, sondern vielmehr eine eigenständige Interpreta-tion der Anwendungsmöglichkeiten der vorhandenen Technologien.

Auch die SAP Exchange Infrastructure (SAP XI), Teil von SAP NetWeaverund in zukünftigen SAP-Systemlandschaften für alle Integrationsaufgabenzuständig, wird in diesem Buch nicht näher behandelt. Da die XI zumZeitpunkt der Drucklegung dieses Buches in wesentlichen Teilen nochweiterentwickelt wird, macht es im Augenblick wenig Sinn, über diesesProdukt Aussagen in Buchform zu machen.

Einleitung.fm Seite 12 Dienstag, 22. April 2003 2:31 14

Page 13: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

13

Wie das Buch aufgebaut ist und warum

Das Buch besteht aus einem einführenden Block und zwei Technikteilen.Im ersten Teil wird zunächst eine Einschätzung gewagt, in welche Rich-tung sich die IT in der nahen Zukunft entwickeln wird und welchen Bei-trag die SAP NetWeaver-Technologie hierzu leisten kann. Wir wollen dasProblembewusstsein stärken und stellen ein Spiel-Szenario vor, wie eineModellfirma es anpacken könnte, den Sprung von der traditionellen EDVzu moderner, webgestützter Informationstechnologie zu schaffen. Derzweite Teil befasst sich mit der Entwicklung in verteilten Systemen. Aus-gehend von den Grundlagen der RFC-Technologie, zeigen Auszüge auserprobten Programmen, wie eine Kommunikation zwischen einer R/3-Instanz und einer beliebigen anderen Applikation aufgebaut werdenkann. Darüber hinaus wird im Sinne eines Delta-Ansatzes auf system-übergreifende Programmierung eingegangen. Der Grundgedanke ist es,dass ein Entwickler entweder ABAP, Java oder Visual Basic beherrscht undsich gezwungen sieht, auch Grundkenntnisse aus den jeweils anderenBereichen zu erlernen, um eine Kommunikation mit SAP R/3 aufzubauen.Dabei geht es besonders um den Austausch von Nachrichten und die Ein-bindung von HTTP-Lösungen in eigene Programme.

Der dritte Teil erklärt an Beispielen das große Thema der Webservices,was sie sind, welchen Nutzen sie haben und wie man sie in eigenen Pro-grammen nutzt. In diesen Sektor gehören auch die Grundlagen der HTTP-Technik, XML und SOAP.

Einleitung.fm Seite 13 Dienstag, 22. April 2003 2:31 14

Page 14: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

Einleitung.fm Seite 14 Dienstag, 22. April 2003 2:31 14

Page 15: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

Teil 1 Problemstellung

In diesem ersten Teil werden wir zunächst die beiden Konzepte des All-in-One und des Best-of-Breed gegenüberstellen und ihre jeweiligen Vor- und Nachteile abwägen. In einer ersten Vorschau werden Ihnen dann die wesentlichen Technologien, von denen dieses Buch handelt, vorgestellt.

Einleitung.fm Seite 15 Dienstag, 22. April 2003 2:31 14

Page 16: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

Einleitung.fm Seite 16 Dienstag, 22. April 2003 2:31 14

Page 17: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

Von All-in-one-Software zu Webservices 17

1 Von All-in-one-Software zu Webservices

Ausgelöst durch Standard-Software wie SAP R/2, BAAN und Peoplesoft, entstand seit Mitte der Achtzigerjahre ein zuneh-mender Trend zu Software aus einer Hand. Die Aufgabe der Unternehmens-IT in den nächsten zehn Jahren wird es vor allem sein, die unzähligen, verstreut laufenden Software-Module zu einer harmonisch kooperierenden Einheit zu ver-schmelzen und die Zusammenarbeit dieser zentralen Systeme mit hoch spezialisierten Satellitensystemen zu forcieren. Als Schlüssel dazu verwenden Webservices die einheitliche Spra-che XML für den Datenaustausch.

Um zu der einfachsten Wahrheit zu gelangen, braucht es Jahre des Nach-denkens.Sir Isaac Newton

Heute werden die Kernaufgaben fast aller größeren Unternehmen, wieFinanzen, ERP und SCM, von einer oder mehreren SAP-Installationenabgedeckt, andere Anbieter vergleichbarer Business-Suites spielen nurnoch eine marginale Rolle. In Sonderbereichen haben sich Spezialanbie-ter angesiedelt, die entweder eigene Add-Ons innerhalb von R/3 entwi-ckelt haben oder ihre Plattform über die RFC-Funktionalität von R/3 andieses anbinden.

SAP als 80/20-Lösung

SAP wandelt sich in dieser Hinsicht zu einem zunehmend offenen Sys-tem. Anstatt an dem Versuch zu zerbrechen, für jede Branche oderNische eine Sonderlösung anzubieten beziehungsweise diese Branchendazu zu zwingen, ihre Geschäftsstrukturen an die Standardabläufe einesSAP R/3 Enterprise-Systems anzupassen, positioniert sich SAP nun als Fix-stern in der Unternehmens-IT, der im Sinne eines guten 80/20-Modellsdie Routine- und Kernaufgaben eines Betriebs abdeckt und sich gegen-über Dritten vollständig offen und transparent präsentiert.

1.1 Enterprise Application Integration

Unter Enterprise Application Integration, abgekürzt EAI, fasst man heuteeine Teildisziplin der Informatik zusammen. Dabei geht man davon aus,dass die zu integrierenden Anwendungen ursprünglich nicht ausdrücklichdafür entwickelt wurden zusammenzuarbeiten. Das Ziel der EAI ist es, die

Kap01.fm Seite 17 Dienstag, 22. April 2003 2:31 14

Page 18: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

18 Von All-in-one-Software zu Webservices

Applikationen in einer Weise zu verändern oder zu ergänzen, dass sieohne Eingriff eines Menschen miteinander kommunizieren. Die Kommu-nikation kann dabei sehr weit gefasst sein. Im einfachen Fall werdenschlicht Daten von einer Applikation zu einer anderen übertragen, inkomplexen Fällen kontrolliert eine Applikation den Ablauf einer anderen,wie dies etwa beim Workflow der Fall ist.

EAI ist einegereifte Form des

Workflows

Letztlich verbirgt sich hinter dem Akronym EAI eine erwachsene Formvon Workflow- und Automationsdiensten, die unter Einsatz flexibler undintelligenter Tools Daten aus den verschiedensten Systemen abgreifen, sieumwandeln und dann an eine andere Applikation weiterreichen.

Ein typisches EAI-System wäre demnach ein zentraler Enterprise-Server,der von allen betriebsrelevanten Daten eine Kopie erhält und dann ent-scheidet, ob, wo und wie die Kopie gespeichert wird, so dass sie andereninteressierten Applikationen zugänglich wird. Dieser zentrale Enterprise-Server wird als intelligenter Proxy-Server betrieben, der in der Lage ist,den Datenfluss zu überwachen, umzulenken, eigene Aktionen anzusto-ßen und Daten nach Bedarf zu transformieren. Eine Software, die all diesbewerkstelligt, nennt man Middleware.

EAI ist Auto-matisierung

Natürlich ist weder die Aufgabenstellung der EAI neu, noch sind es ihreLösungsansätze. Neu ist, dass der zunehmende Wunsch der Automatisie-rung von IT-Anwendungen der EAI zu einer Schlüsselstellung verholfenhat. Je höher der Automatisierungsgrad eines Betriebs ist, also je mehrApplikationen reibungslos zusammenarbeiten, desto effizienter arbeitetdieser Betrieb.

Durch die zunehmende Bedeutung der Integration haben sich Technikenherauskristallisiert, die diese Automatisierung mit einer zuverlässigen,kontrollierten und nachvollziehbaren Methodik bewerkstelligen lassen.Dies sind in erster Linie:

� Vernetzung aller beteiligten Computer durch IP und TCP/IP- bezie-hungsweise UDP/IP-Protokolle

� Einsatz von Message-Queues als Broker zwischen den Anwendungen(Middleware)

� Austausch aller Daten auf Applikationsebene durch standardisierteProtokolle. Ein Beispiel wäre XML over HTTP over TCP/IP. Dies bedeu-tet:

� Alle Computer des Netzwerks formatieren die Anwendungsdaten inXML.

Kap01.fm Seite 18 Dienstag, 22. April 2003 2:31 14

Page 19: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

SAP-Technologie und -Komponenten 19

� Die Session zwischen zwei Computern wird durch HTTP hergestellt(und nicht durch TELNET, VT/100 oder gar herstellereigene Proto-kolle).

� Die HTTP-Daten werden ausschließlich in TCP-Paketen über ein IP-Netzwerk zugestellt.

»One face to the application«

Der zentrale Gedanke ist, dass nur der EAI-Rechner die proprietärenZugriffsmechanismen und Protokolle der einzelnen verstreuten Applikati-onen kennen muss, während die Applikationen jeweils ausschließlich mitdem EAI-Rechner kommunizieren. Griffiger ausgedrückt: In Anlehnungan »One face to the customer« bedeutet dies nun »One face to the appli-cation«.

Collaboration

Seit geraumer Zeit ist vor allem in den USA der Oberbegriff Collaborationgebräuchlich. Er bezeichnet die »Zusammenarbeit« von Objektdiensteneiner verteilten Umgebung. Damit sind vor allem Messaging-Dienste wieMail-APIs, Workflow-Manager und Message-Queue-Dienste gemeint.Allgemein referiert der Begriff auf die Fähigkeit der einzelnen Komponen-ten in einem Netzwerk, Daten und Nachrichten in einer Form auszusen-den, dass sie von einem beliebigen anderen Computer desselben Netzesmit endlichem Aufwand genutzt werden können.

1.2 SAP-Technologie und -Komponenten

Die Produktpalette der SAP lässt sich heute im Wesentlichen in zweiBereiche unterteilen, die um das klassische R/3 herumgewachsen sind:

� SAP NetWeaver, ein Framework zur einheitlichen Gestaltung und Ein-bindung eigener Anwendungen

� Applikationen und spezialisierte Lösungen für einzelne betriebswirt-schaftliche Aufgabenbereiche, z.B. APO oder BW

Das klassische SAP R/3, im aktuellen Release R/3 Enterprise genannt, bil-det dabei nach wie vor den Kern für die betriebswirtschaftlichen Anwen-dungen. Mit R/3 war es SAP über die Jahre gelungen, Standardisierungenin betriebswirtschaftlichen Prozessen zu schaffen, die sich heute in denBusiness-Objekten manifestieren.

Kap01.fm Seite 19 Dienstag, 22. April 2003 2:31 14

Page 20: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

20 Von All-in-one-Software zu Webservices

1.2.1 SAP NetWeaver

Seit Anfang 2003 heißt mySAP Technology – ergänzt um einige neueFunktionalitäten und Komponenten – SAP NetWeaver, womit SAP end-lich einen Namen gefunden hat, der die tatsächliche Leistung der neuen,über R/3 hinausgehenden Infrastruktur treffend darstellt.

Hauptbestandteile von SAP NetWeaver sind die SAP Exchange Infrastruc-ture, das SAP Enterprise Portal und der SAP Web Application Server:

� SAP Exchange InfrastructureDas neue Flaggschiff von SAP für die Integration ist die SAP ExchangeInfrastructure (SAP XI). Die SAP XI ermöglicht es, flexibel auf Funkti-onsaufrufe anderer Applikationen zu reagieren und Ergebnisse zurück-zuliefern oder aber Funktionsaufrufe selbst durchzuführen. Sie ist inder Lage, Software-Komponenten verschiedenster Hersteller zu integ-rieren und wird somit in Zukunft zum Herzstück neuer SAP-System-landschaften werden.

� SAP Web Application Server Der Kern aller SAP-Komponenten ist das um HTTP-Funktionalitäterweiterte SAP R/3-Basissystem, das unter dem Namen SAP WebApplication Server alias SAP R/3 Basisrelease 6.x, firmiert. Dadurch stehtein Entwicklungsframework zur Verfügung, das dank ABAP und Javaalle Möglichkeiten bietet, eigene Applikationen zu entwickeln. Durchdie Flexibilität dieser Plattform eignet sich SAP auch als mächtigesInstrument zur Integration von heterogenen Anwendungen auf vielenverschiedenen Plattformen.

� SAP Enterprise PortalDas SAP Enterprise Portal stellt innerhalb des Unternehmens und aufWunsch sogar für Geschäftspartner einen einheitlich gestalteten undextrem anpassbaren Zugang zu allen im Unternehmen vorhandenenInformationen dar. Wichtige Bestandteile sind z.B. der Portal Server fürdie Gestaltung und Bereitstellung der Oberfläche, der Unification Ser-ver für die einheitliche Navigation durch Daten aus verschiedenenApplikationen und die Knowledge Management Platform für die Arbeitmit unstrukturierten Informationen.

Netze zu weben ist das neue Ziel von SAP, also die Zusammenarbeit vongleichberechtigten IT-Lösungen innerhalb eines Netzwerks zu ermögli-chen. Damit positioniert sich SAP eindeutig als kompetenter Anbietervon Lösungen für die Enterprise Application Integration, und man darf

Kap01.fm Seite 20 Dienstag, 22. April 2003 2:31 14

Page 21: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

SAP-Technologie und -Komponenten 21

ohne Neid eingestehen, dass es SAP damit endlich gelungen ist, einemodulare und nach allen Seiten offene Plattform zu schaffen, diezukunftsfähig ist.

Peter Graf, Vice-President der SAP AG, behauptet sogar, dass NetWeaverderzeit das einzige Framework für Cross-Applikationsentwicklung sei:

»What we are really suggesting is that if you wanted to create cross-applications, then we have the only platform to do cross-applicationstoday.«Peter Graf, Vice-Präsident der SAP AG in einem Interview auf http://searchsap.techtarget.com, Januar 2003

Das muss man zwar etwas relativieren, indem man feststellt, dass Net-Weaver zwar das bei weitem umfangsreichste und flexibelste Produkt indieser Klasse ist, jedoch nicht das einzige. Es wird in diesem Buch durch-aus deutlich werden, dass auch IBM WebSphere mit J2EE und Micro-soft.NET ähnliche Möglichkeiten bieten. Es ist aber klar, dass NetWeaverdas derzeit mächtigste Produkt auf dem Markt ist.

1.2.2 mySAP Business Suite

mySAP Business Suite ist die Gesamtheit der Lösungen, die SAP für ein-zelne betriebswirtschaftliche Aufgabenbereiche anbietet. Die Suite lässtsich wiederum in zwei große Bereiche unterteilen

� SAP R/3 Enterprise Seit Release 4.7 heißt SAP R/3 SAP R/3 Enterprise. Dahinter verbergensich alle traditionellen R/3-Applikationen wie FI/CO, MM, SD usw.Neu an R/3 Enterprise ist sowohl die um einige Funktionalitäten (z.B.HTTP und Java) erweiterte Basis (der Web AS) als auch die Softwarear-chitektur, die nun die Kernfunktionalitäten in einem unveränderlichenCore kapselt. Weiterentwicklungen finden fortan nur noch in den sogenannten Extensions statt.

� mySAP-LösungenDamit sind vor allem die Lösungen gemeint, die nicht in SAP R/3Enterprise abgedeckt und jeweils so konzipiert sind, dass sie im Regel-fall auf einem eigenen Server ausgeführt werden. Sie alle hier aufzu-zählen, würde den Rahmen dieses einleitenden Kapitels bei weitemsprengen. Den einzelnen Lösungen liegen wiederum spezialisierteSoftware-Komponenten zugrunde, zu denen unter anderem die Fol-genden gehören:

Kap01.fm Seite 21 Dienstag, 22. April 2003 2:31 14

Page 22: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

22 Von All-in-one-Software zu Webservices

� CRMCustomer Relationship Management liefert alle relevanten Informati-onen zu einem Kundenkontakt und ermöglicht so eine zielgerich-tete und individuelle Kommunikation mit dem einzelnen Kunden.Mit der Ausgliederung von CRM attackiert SAP sehr erfolgreich denlangjährigen Marktführer in diesem Sektor, Siebel Systems.

� BWDas Business Information Warehouse spezialisiert sich auf das Bedürf-nis von Unternehmen nach zeitnahen und flexiblen Auswertungenund Reports. Die Applikation greift dazu über RFC auf eines odermehrere SAP R/3 Enterprise-Systeme zu und führt die Daten ingeeigneter Form zusammen.

� APODer Advanced Planner and Optimizer ist eine Applikation, die z.B. inder Produktionsplanung zur Bestimmung von künftigem Bedarf anMaterial eingesetzt wird. APO setzt dabei statistische und heuristi-sche Verfahren ein, um Zeitreihen auszuwerten und Hochrechnun-gen in die Zukunft vorzunehmen. APO selbst ist in verschiedeneModule aufgeteilt, zum Beispiel DS (Detailed Scheduling) und DP(Detailed Planning). Bedeutende konkurrierende Produkte werdenvon SAS, i2 und Manugistics hergestellt.

RFC ist dieGrundlage

Künftig wird man, ausgehend von den SAP R/3-Kernmodulen, neueKomponenten entwickeln, die aber nicht mehr in R/3 integriert sind, son-dern als eigenständige Einheiten über Webservices mit anderer Softwareeinschließlich R/3 kommunizieren. Die Entwicklung dieser Komponentenkann auf dem Web AS erfolgen, ist aber auch auf anderen Frameworkswie Microsoft.NET oder J2EE möglich. Grundlage der neuen Technolo-gien ist die Offenheit des R/3-Systems durch Remote Function Calls (RFC).

1.3 All-in-one versus Best-of-Breed

In fast allen größeren Unternehmen sind über die letzten zehn bis fünf-zehn Jahre hinweg Server- und Software-Strukturen gewachsen. Altsys-teme laufen aus den verschiedensten Gründen parallel zu neuen Installa-tionen, hoch spezialisierte Systeme decken Sonderbereiche ab, und vieleSachbearbeiter wissen die Flexibilität einer eigenen PC-Software zu schät-zen.

Wiederverwen-dung komplexer

Komponenten

Die Aufgabe der Unternehmens-IT in den nächsten zehn Jahren wird esvor allem sein, diese verstreuten Software-Module zu einer harmonischkooperierenden Einheit zu verschmelzen. Dabei geht es ausdrücklich

Kap01.fm Seite 22 Dienstag, 22. April 2003 2:31 14

Page 23: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

All-in-one versus Best-of-Breed 23

nicht darum, die Software neu zu schreiben oder von einer Plattform aufeine andere zu hieven. Vielmehr muss es das Ziel sein, die Datenflüssezwischen den einzelnen Programmen so zu koordinieren, dass jedes Pro-gramm sich auf seine Stärken konzentrieren kann.

Miteinander der Plattformen und Frameworks

Mit der exponentiell wachsenden Zahl der Anforderungen und Wünschean moderne Software ist kein Hersteller der Welt mehr in der Lage, dieseVorgaben in einem einzigen Produkt oder auch nur auf einer einzigenPlattform zu erfüllen. Dies ergibt sich schon aus den praktischen Rahmen-bedingungen des Computereinsatzes.

Während die Auswertung von gigantischen Zahlenmengen, das Erstellenvon Analysereports oder das Hochrechnen von Bedarf und Verkäufen(zum Beispiel in einem System wie APO) nach einem Computer mithoher Rechenleistung und hoher Speicherkapazität rufen, ist für dieErfassung der Daten ein kleiner portabler Palm-Computer, der leicht ist,lange Zeit mit wenig Batterie auskommt und gegebenenfalls in derJackentasche Platz hat, genau das Richtige.

Egal, von welcher Seite man es betrachtet, die Forderung der Zukunftwird sein, das beste Produkt in seiner Klasse an der richtigen Stelle einzu-setzen. Eine handwerklich solide gemachte Software ist selten einfach gutoder schlecht, aber man kann sie an der richtigen oder auch an der fal-schen Stelle einsetzen. In sehr vielen Fällen kann ein über die Zeitgewachsenes Tabellenkalkulationsblatt die Anforderungen in vielerleiHinsicht besser lösen als eine teure und mit Features überladene Unter-nehmenssoftware. Andererseits riskiert eine noch so geniale Software-Lösung, zum hässlichen Entlein zu werden, wenn sie an der falschenStelle eingesetzt wird.

All-in-one-Software

SAP R/3 war ursprünglich eine typische All-in-one-Software. Die Vorteileeiner solchen integrierten Lösung sind:

� einheitliche Bedienoberfläche

� reibungslose Verzahnung der Business-Anforderung, zum BeispielFinanzen/Controlling mit SD und MM

� gemeinsam nutzbare Dienstprogramme, zum Beispiel zum Datenbank-Update (Verbucher), zum Drucken von Formularen oder zum EDI-Ver-sand

Best-of-BreedWenn wir uns den Punkt »einheitliche Bedienoberfläche« einer All-in-one-Software einmal näher ansehen, fällt uns Folgendes auf: Der Zugriffdurch den Benutzer erfolgt durch ein GUI, ein Grafisches User Interface.

Kap01.fm Seite 23 Dienstag, 22. April 2003 2:31 14

Page 24: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

24 Von All-in-one-Software zu Webservices

Ein GUI ist aber eine Client-Software und weiß als solche eigentlich nichtsüber die wahre Natur des am anderen Ende kommunizierenden Compu-ters, denn ein Client-GUI sendet lediglich Nachrichten und nimmt Ant-worten entgegen, die es dann interpretiert. Wenn dem aber so ist, wärees nicht sinnvoll, wenn der Server, anstatt alles allein zu tun, die Anfrageneinfach an geeignete Server weiterverteilt, somit andere für sich arbeitenlässt und nur noch die eingesammelten Antworten wieder an das GUIweitergibt?

Server-Grid Das Ergebnis wäre ein Grid (deutsch: Raster) von Servern, die jeweils spe-zialisiert eine bestimmte Aufgabe ausführen und idealerweise auf einengemeinsamen Datenbestand zugreifen.

Bei dem Vergleich der Ansätze dürfen wir aber nicht vergessen, dass dieRealität im Grunde gar keine allumfassende, integrierte Lösung kennt.Wenn man sich ein System wie R/3 ansieht, stellt man doch nach einigerZeit ehrlicher Betrachtung fest, dass zwar SAP für jeden Aspekt des Busi-ness ein geeignetes Tool zur Verfügung stellt, jedoch die einzelnen Blöckekeineswegs so reibungslos aufeinander abgestimmt sind, wie man daserwartet hätte.

SAP-Einzelmo-dule sind oft diebesten ihrer Art

Dabei spielen viele Module von SAP natürlich problemlos unter den Bes-ten ihrer Kategorie mit. In den Sektoren FI, CO, SD und MM setzt SAPeindeutig den Standard hinsichtlich Leistungsfähigkeit, Flexibilität undVollständigkeit. Auch im Supply-Chain-Management ist SAP einer derTop-Performer.

Es gibt Bereiche, in denen SAP traditionell schwächer war, z.B. im SektorWorkflow-Messaging. Aber auch da ist SAP auf dem Sprung in die Welt-spitze, denn die SAP Exchange Infrastructure ist eines der modernstenMessaging-Systeme auf dem Markt und wird sicher mit IBM WebSphere/MQ in Konkurrenz treten.

Kollaboration istentscheidendes

Kriterium

Die Frage stellt sich also nicht, ob man eine All-in-One-Lösung einerKomponentenlösung vorzieht. In Zukunft wird die Qualität einer Soft-ware ausschließlich davon abhängen, wie harmonisch die Komponentenmit fremden Komponenten zusammenarbeiten. Natürlich können auchdie meisten Komponenten eines einzigen Herstellers wie die von SAPimmer die besten sein, zumal da die Kollaboration auch garantiert wird.SAP hat das schon seit Release R/3 3.x klar erkannt, hält seine Systemeoffen und versucht, mit den Modulen die einzelnen Geschäftsbereiche zuerobern.

Kap01.fm Seite 24 Dienstag, 22. April 2003 2:31 14

Page 25: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

All-in-one versus Best-of-Breed 25

Seit R/3 Enter-prise ist SAP modular

Spätestens mit SAP R/3 Enterprise hat sich R/3 zu einer modularenLösung gewandelt. R/3 besteht jetzt aus einem Basissystem mit derABAP-Runtime (bei Java Virtual Machine genannt, entspricht bei Micro-soft dem .NET-Framework). Darauf aufbauend, lassen sich die Anwen-dungsmodule für FI, CO, SD, MM und so weiter hinzufügen.

Kap01.fm Seite 25 Dienstag, 22. April 2003 2:31 14

Page 26: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

Kap01.fm Seite 26 Dienstag, 22. April 2003 2:31 14

Page 27: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

Middleware 27

2 Middleware

Dieses Kapitel gibt einen Überblick über die verschiedenen Komponenten und Konzepte innerhalb einer Systemland-schaft. Im weiteren Verlauf dieses Buches werden wir immer wieder auf sie zurückkommen und Wege aufzeigen, mit wel-chen Mitteln diese Konzepte realisiert und die Komponenten in einen produktiven Austausch gebracht werden können.

Als Middleware bezeichnet man jede Art von Software, die eine Ver-mittlerrolle zwischen zwei oder mehreren über ein Netzwerk kommuni-zierenden Softwarekomponenten übernimmt. Eine Middleware arbeitetdabei immer nach dem Prinzip einer Postverteilstation, an der Nachrich-ten entgegengenommen und an einen Empfänger zugestellt werden.Neben der eigentlichen Nachrichtenverteilung übernimmt die Middle-ware aber auch jede Menge Routineaufgaben, wie die Konvertierung derNachrichten zwischen den Formaten des Senders und des Empfängers –zum Beispiel von EDIFACT nach IDoc –, die zeitversetzte Auslieferungeiner Nachricht, wenn Sender und Empfänger verschiedene Arbeitsge-schwindigkeiten haben, oder die Ansteuerung und Überwachung vonAutomatisierungs- und Workflow-Diensten.

2.0.1 Proxy-Dienste

Ein Proxy ist eine Server-Software, die die Kommunikation zwischen zweientfernten Applikationen herstellt. Ein Proxy kann dabei die Anfragen fil-tern, bei Bedarf auch formale Transformationen vornehmen und gegebe-nenfalls Workflows anstoßen.

Firewall als Sonderform des Messaging-Dienstes

Die Grenzen zwischen Middleware und Proxy-Servern für Sonderdienstesind fließend, und häufig ist jeder Versuch einer terminologischenAbgrenzung Haarspalterei. In der Praxis werden alle Zugriffe von Internet-nutzern auf einen Unternehmenscomputer durch eine Firewall auf derSeite des Anbieters geleitet. Eine Firewall ist ein Proxy-Server mit einerSonderaufgabe, der alle Nachrichten entgegennimmt, die zwischen zweiComputern ausgetauscht werden, diese analysiert und dann an deneigentlichen Ziel-Computer weiterleitet. Gegebenenfalls weist der Proxydie Anfrage zurück, wenn sie verdächtig oder nicht identifizierbar ist.

Kap02.fm Seite 27 Dienstag, 22. April 2003 2:31 14

Page 28: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

28 Middleware

Durch den Einsatz eines Proxys erscheint somit für den Client das Unter-nehmensnetzwerk wie ein einzelner Computer, denn der Anfragendesieht lediglich den Firewall-Computer, von dem er auch alle Antwortenerhält. Hinter dieser Firewall können sich eine Vielzahl an individuellenComputern und spezialisierter Software befinden.

Firewall kann einMessage-Server

sein

Es liegt nahe, dass der Firewall-Computer die Anfragen vorsortiert und sieentsprechend dem Inhalt an einen geeigneten Computer weiterleitet. Indiesem Fall mutiert die Firewall zu einem ausgewachsenen Message-Ser-ver. Ein solcher Message-Server stellt dann eine Reihe von Funktionalitä-ten zur Verfügung, die von sehr vielen Applikationen gewünscht werden.

2.0.2 Proxy-Dienste im Sicherheitsbereich

Proxy-Dienste sind das Handwerkszeug jeder Sicherheitsadministration.Ein Proxy dient nicht nur als Firewall oder Vermittler von Diensten, son-dern auch als elektronischer Gendarm und Geheimbote, der die Datenzwischen den Partnern verschlüsselt überträgt und die Identität der Part-ner überprüft.

Secure RemotePassword und

Single Sign On

Eine solch besondere Form eines Proxys stellt auch Secure Remote Pass-word (SCR) dar beziehungsweise als Variante davon Single Sign On (SSO).Dabei handelt es sich um einen Server, der die Zugangsdaten (englisch:credentials) für den Zugriff auf eine Ressource an einer geheim gehaltenenStelle und nach einer ebenfalls geheimen Strategie ablegt. Sobald ein Cli-ent den Zugriff auf die Ressource verlangt, entscheidet der SCR-Server,auf Basis welcher Informationen der Zugriff gestattet werden kann. EinBeispiel für kommerzielle SSO-Dienste ist Microsoft Passport; ein einfa-cher SSO-Mechanismus für interne Applikationen zum Zugriff auf SAP istim Anhang in der Visual-Basic-Klasse Credentials dargestellt.

Dabei ist es weniger wichtig, die Berechtigung eines erkannten Benutzerszuverlässig zu überprüfen. Vielmehr ist das entscheidende Problem, diewahre Identität eines Anfragenden zu ermitteln. Kombinationen vonUsernamen und Passwort lassen sich allzu leicht stehlen, als dass dies einzuverlässiger Mechanismus zur Bestätigung der Identität des Anfragendensein kann.

IP-Netzwerkelassen sich leicht

abhören

Das Stehlen solcher Zugangsdaten ist besonders einfach, wenn solcheDaten ohne nennenswerten Schutz direkt über das Internet geschicktwerden. Ein solches Vorgehen ist genauso sicher, wie die Angaben alsKleinanzeige in einer Zeitung zu veröffentlichen, da die Internetstreckenöffentlich sind und – zumindest rein theoretisch – über jeden beliebigenRechner geleitet werden können, der gerade online ist.

Kap02.fm Seite 28 Dienstag, 22. April 2003 2:31 14

Page 29: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

Middleware 29

Auch die überall gerne verwendeten SSL-Verbindungen, die an dem URL-Präfix https:// zu erkennen sind, sind keineswegs wirklich sicher, auchwenn dort das Abhören der Leitung kaum zum Erfolg führt. Hier führenandere Mechanismen zum Ziel, zum Beispiel ein »Potemkinsches Dorf«,das eine Abwandlung der bekannten Trojaner-Viren ist. Dazu bietetjemand einen Dienst an, für den er eine Registrierung in Form eines freiwählbaren Usernamens und eines Passworts verlangt. Bei der großen Zahlan Registrierungen, die ein durchschnittlicher Internetuser pflegt, ist esjedoch kaum realistisch, für jeden Dienst einen anderen Usernamen undein neues Passwort zu vergeben. Damit kann der Anbieter eines solchenDienstes in der Regel zu Recht annehmen, dass der neue Client die glei-chen Anmeldedaten auch für andere Dienste nutzt, zum Beispiel, um sichbei Yahoo!-Shopping anzumelden. Es bedarf wenig krimineller Phantasie,um sich die Missbrauchsmöglichkeiten vorzustellen.

Challenge Authenticate

Die Beispiele machen deutlich, wie wichtig es ist, die wahre Identität desAnmeldenden zu authentifizieren. Um dies zu erreichen, fordert der Ser-ver vom Client glaubwürdige Beweise für die behauptete Identität. Die-sen Vorgang nennt man im englischen Fachjargon einen Challenge.

CerberusAls Beispiel soll hier eine Strategie zur Sprache kommen, die bereits indem legendären Computerspiel »Leisure Suit Larry I« zur Verifikation desbehaupteten Alters des Spielers verwendet wurde. Dieses Verfahren istnach dem griechischen Wächter der Unterwelt, dem Höllenhund Cerbe-rus, benannt. Hierzu muss dem Computer eine Liste von Fragen und Ant-worten bekannt sein, die unter normalen Umständen nur die berechtigtePerson selbst beantworten kann. In einem einfachen Fall wird hierzu dieBiographie des Benutzers abgespeichert und der Cerberus stellt nun eineoder mehrere Fragen aus dem Repertoire, etwa nach dem Geburtstag derMutter, dem Beruf des Großvaters oder dem Namen des Arbeitgebers vorexakt zehn Jahren.

2.0.3 Message-Queues

In den Zeiten der alten Mainframes, als Programme vor allem im Batch-Betrieb ausgeführt wurden, waren Message-Queues etwas ganz Selbst-verständliches. Jeder Job musste sich in eine Queue einreihen und aufseine Abarbeitung warten, bis er an der Reihe war. Die Eingabe- und Aus-gabeströme wurden in speziellen Input- und Output-Queues zwischen-gespeichert.

Kap02.fm Seite 29 Dienstag, 22. April 2003 2:31 14

Page 30: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

30 Middleware

MQs habeneigene Intelligenz

Ausgehend von diesen einfachen Verwaltungsqueues stellt man heuteallen Applikationen zentrale Message-Queues zur Verfügung, die nichtnur Nachrichten speichern und verwalten, sondern selbst eigene Intelli-genz besitzen, um Verarbeitungen anzustoßen, auf Fehler zu reagierenoder ganze Flüsse von Verarbeitungen (Workflows) zu kontrollieren.

Beispiel Das sieht zum Beispiel wie folgt aus: Falls eine Anfrage nicht sofortzustellbar ist, weil ein geeigneter Computer zeitweise nicht zur Verfügungsteht oder überlastet ist, kann die Anfrage vorübergehend zwischenge-speichert und zu gegebener Zeit an den Empfänger zugestellt werden.Falls der anfragende Client in der Anfrage zu verstehen gibt, dass er nureine komplette Antwort wünscht, kann der Message-Server für dieAnfrage ein Postfach einrichten, dort die Ergebnisdaten sammeln und,wenn das Ergebnis komplett ist, den Client darüber benachrichtigen.

2.0.4 Workflow

Aufbauend auf einer funktionierenden Message-Queue entwickeln sichWorkflows. Darunter versteht man ganz allgemein die automatischeAbfolge von regelmäßig wiederkehrenden Prozessen. Im Normalfall han-delt es sich dabei um ein einfaches Verketten von Programmaufrufen, wiees bei klassischen Jobs auch der Fall ist.

So meldet z.B. Programm A, dass ein bestimmtes Ereignis stattgefundenhat, zum Beispiel, dass es schlicht zu Ende ist. Der Workflow-Managerfängt dieses Ereignis ab und bestimmt anhand weiterer Daten, die Pro-gramm A hinterlassen hat, welches Programm als Nächstes auszuführenist.

IntelligenteVerknüpfungen

Damit sind nicht nur stupide Programmverkettungen gemeint, sondernauch intelligente Verknüpfungen, das soll heißen, dass der Workflow-Manager die Daten des ersten Programms konvertiert, filtert und gegebe-nenfalls nach bestimmten Kriterien eine Entscheidung trifft, welches Pro-gramm als Nächstes auszuführen ist.

2.0.5 GUI-Server

GUI-Serveroptimieren denDatenfluss zum

Browser

Mit der zunehmenden Nachfrage nach browserorientierten Applikatio-nen öffnet sich auch ein neuer Bedarf an Software, die Inhalte in einerWeise aufbereitet und optimiert, dass dem Nutzer eine einheitliche Prä-sentation gewährleistet wird. Gleichzeitig erfordert die weite Verzwei-gung von Internetanwendungen immer die Optimierung des Datenver-kehrs zwischen Browser und Server.

Kap02.fm Seite 30 Dienstag, 22. April 2003 2:31 14

Page 31: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

Middleware 31

Hierfür bieten sich GUI-Server als eine neue Form der Middleware an.Dabei handelt es sich um Proxy-Server, die HTML-Seiten auf der Basis vonXML-Dokumenten und abstrakten Modellbeschreibungen aufbauen.Dabei geht man davon aus, dass auf der Ebene der Datenübertragungund Transaktionsverwaltung die abstrakte Sicht auf den Datenfluss beisehr vielen Anwendungen identisch ist.

BeispielNehmen wir zum Beispiel einen Webshop, die »Hello-World!«-Applika-tion für Webentwickler. Die Seite eines Webshops besteht meistens auseiner Navigationsleiste, einem Block mit Detaildaten und einer Liste.Detaildaten und Listen bestehen selbst aus Feldern. In Teilen der Feldersoll es dann möglich sein, Eingaben zu machen. Vergleichen wir damiteine Lagerverwaltung im Materialwesen, so befinden wir, dass auch hierdie Struktur identisch ist. Statt der gekauften Artikel sehen wir dieBestände eines Lagerplatzes, statt der Kundendetaildaten sehen wir dieInformation zum Lagerplatz.

2.0.6 3-Tier-Lösungen

Der Einsatz einer Message-Queue bedeutet in der Praxis zusätzliche Soft-ware und somit zusätzliche Kosten für Anschaffung und Wartung. Es stelltsich also die Frage, warum dennoch eine 3-Tier-Lösung attraktiv seinsollte.

Eine 3-Tier-Lösung, bei der SAP R/3 über einen Middleware-Broker miteiner externen Lösung kommuniziert, erweist sich in der Praxis als deut-lich wartungs- und entwicklungsfreundlicher als eine 2-Tier-Lösung.Erwarten sollte man eigentlich das Gegenteil, denn immerhin muss einzusätzliches Produkt mit gewartet und programmiert werden. Ein Teil derLösung liegt im »Gewicht« der Verbindung. Darunter versteht man denrelativen Aufwand zum Aufbau einer Verbindung und zum Austausch vonDaten zwischen einem Client und einem Server.

Heavy und Thin Clients

Dabei spricht man von einem Heavy Client, wenn der Aufwand für dasProtokoll zum Datenaustausch sehr hoch ist, während ein unmittelbarerDatenaustausch als Thin Client (manchmal auch als Slim Client) bezeichnetwird. Für die Protokolle sind die Begriffe Heavy weighted protocol undLight weighted protocol gängige Termini.

Payload und Envelope

Als Anmerkung seien noch die beiden Begriffe Envelope und Payloadangeführt, die bei protokollbasierten Kommunikationen gerne verwendetwerden. Unter Payload versteht man die durch das Protokoll tatsächlichübertragene Information, also die reine Netto-Information ohne die Ver-

Kap02.fm Seite 31 Dienstag, 22. April 2003 2:31 14

Page 32: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

32 Middleware

waltungsdaten, die zur sicheren Übertragung der Information mitgesandtwerden. Der Envelope, auf Deutsch Umschlag, ist die Information, die umeine Nachricht herumgepackt wird, um bei der Übertragung den Paketeneine einheitliche Form zu geben.

Zwischen SAP R/3 und DCOM besteht eine schwere Verbindung, weilRFC und OLE/DCOM zwei völlig verschiedene Protokollarten sind. Hinzukommt, dass SAP R/3 in aller Regel auf einer Nicht-Windows-Plattformläuft. Aber auch eine Windows NT/2000-Version von SAP R/3 wirdgewöhnlich betriebssystemneutral betrachtet, das heißt, dass alle Zugriffevon SAP R/3 nach draußen über die R/3-API-Schnittstellen erfolgen.

Ein HTTP-Server auf einer Windows-Plattform basiert selbst auf demCOM-Protokoll. Damit laufen alle Applikationen, die vom HTTP-Server inseinem eigenen Kontext gestartet werden, als COM+- beziehungsweise.NET-Instanzen, womit der Protokoll-Overhead zwischen Client und Ser-ver wegfällt beziehungsweise auf dem Niveau von internen Aufrufenbleibt.

Die 3-Tier-Architektur ermöglicht es nun, die Heavy-Client-Verbindungvon und nach SAP R/3 zu eliminieren, indem zur Kommunikation mit SAPR/3 ein HTTP-Server zwischengeschaltet wird. Die Kommunikation zwi-schen HTTP und SAP R/3 ist eine Light-Weight-Verbindung, denn HTTP istein ganz einfaches textbasiertes Protokoll, das über TCP/IP ausgetauschtwird, dem Netzwerk-Transport-Protokoll, das auch SAP R/3 für die eigeneKommunikation verwendet. Durch TCP/IP entsteht demnach kein zusätz-licher Overhead für die Kommunikation, während die HTTP-Textnach-richten sehr leicht in SAP R/3 aufgebaut werden können, ohne dass derEntwickler auf R/3-Seite besondere Kenntnisse haben muss.

Message-Serverwirkt als Kataly-

sator

Der zwischengeschaltete Message-Server hat somit eine katalytische Wir-kung, indem er den Aufwand der Kommunikation zwischen den Partnernim Vergleich zur Direktverbindung deutlich reduziert.

Kap02.fm Seite 32 Dienstag, 22. April 2003 2:31 14

Page 33: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

Middleware 33

Abbildung 2.1 2-Tier-Kommunikation zwischen Excel und SAP R/3

Abbildung 2.2 3-Tier-Kommunikation zwischen Excel und SAP R/3

���

���������

�����

���

���������� ����

�����

�����

������

������

����

����

���

Kap02.fm Seite 33 Dienstag, 22. April 2003 2:31 14

Page 34: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

Kap02.fm Seite 34 Dienstag, 22. April 2003 2:31 14

Page 35: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

Beispielszenarien und Voraussetzungen 35

3 Beispielszenarien und Voraussetzungen

Die Situation, die man in vielen IT-Abteilungen heute vorfin-det, lässt auf den ersten Blick kaum hoffen, dass eine Verein-fachung oder gar Vereinheitlichung der Systemlandschaften möglich ist. Analysiert man jedoch das Vorgefundene genau und konzentriert sich bei der Neustrukturierung auf einige wenige zukunftsfähige Standards, beginnt sich der Nebel rasch zu lichten.

3.1 Die nahe Zukunft

Nachdem die letzten Jahre zwar durch das Internet geprägt waren, aberkaum eine klare Linie erkennbar wurde, auf welche Technologien sich dieIT-Welt letztlich einigen würde, kristallisieren sich mittlerweile ein paarStandards heraus, die in naher Zukunft das Geschehen im Enterprise-Computing dominieren werden.

3.1.1 XML-Datenbanken

XML dient der Datenstruktu-rierung

XML (Extensible Markup Language) ist eine Sprache zur strukturiertenBeschreibung von Daten. Da die meisten Applikationen mittlerweile dieDaten von einem externen Partner in XML-Form verlangen, liegt es nahe,dass die Datenbank Anfragen und Ergebnisse direkt in XML mit dem Cli-ent austauscht.

XML ist jedoch kein alleinstehender Standard; in seinem Umfeld findensich vielmehr verschiedenste Spezifikationen, die alle auf den Grundprin-zipien von XML aufbauen. Ein wichtiger Standard innerhalb dieser »XML-Familie« zum Austausch von Dokumenten ist das Simple Object AccessProtocol (SOAP).

An die Stelle von Open SQL, ODBC oder JDBC tritt somit also XML. Fürden Anwendungsentwickler verhält sich die Datenbank so, als seien dieDaten als Dokumente im hierarchischen XML-Format abgespeichert.

3.1.2 Entwicklung in mehreren Programmiersprachen

Microsoft setzt Standards

Bei der Öffnung der eigenen Plattform für verschiedene fremde Program-miersprachen hat Microsoft ganz deutlich den Trend gesetzt. Jede wieauch immer geartete Programmiersprache wird ihre Freunde und ihre

Kap03.fm Seite 35 Dienstag, 22. April 2003 2:31 14

Page 36: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

36 Beispielszenarien und Voraussetzungen

Gegner haben. Begeisterung und Ablehnung sind manchmal in nachvoll-ziehbaren Argumenten begründet, meistens jedoch basieren sie auf eheremotionalen Beurteilungen. Mit Microsoft.NET hat Microsoft unmissver-ständlich klar gemacht, dass es keine Programmiersprache in irgendeinerWeise bevorzugen oder benachteiligen will. Ab sofort kann man auf Mi-crosoft.NET mit allen unterstützten Sprachen gleichzeitig entwickeln.Dies war freilich auch schon Ende der 80er Jahre mit Borlands Turbo Pas-cal 3 möglich, nur blieb dies eine Spezialität, die ihrer Zeit um zehn Jahrevoraus war.

Derzeit existiert Microsoft.NET noch ausschließlich auf Windows-Rech-nern, obwohl das Framework ähnlich wie Java so entwickelt wurde, dasses selbst als vollständiges Betriebssystem agieren kann. Somit ist auch zuerwarten, dass eine Portierung auf andere Plattformen rasch erfolgen wird.

Bis Ende 2003 kann man mit Microsoft.NET auf Mac OS rechnen, undselbst ein Zuschnitt auf Linux wird nur eine Frage der Zeit sein, auchwenn immer wieder unterstellt wird, Microsoft.NET sei vor allem einMarketing-Vehikel für Windows. Setzt man jedoch die enorme Leistungs-fähigkeit des Frameworks dagegen, kann man durchaus erwarten, dass esauf lange Sicht ein Eigenleben entwickeln wird.

SAP NetWeaver Auch SAP öffnet sich mit dem SAP NetWeaver für die Entwicklung mittelsverschiedener Programmiersprachen. Heute wird auf dem Web AS bereitsdie Applikationsentwicklung mit ABAP und Java unterstützt und es exis-tiert auch bereits ein Konnektor für die .NET-Plattform.

3.1.3 Grid-Computing

Bisher gingen wir immer von der Vorstellung aus, dass in einem Netzwerkeine ganze Reihe von spezialisierten Computern stehen, die jeweils eineoder ein paar wenige Programme ausführen. Dabei wird zum Beispiel SAPR/3 auf Box SAP1, SAP2 und SAP3 ausgeführt, die hauseigene, selbstgeschriebene Produktionsplanung auf Box PP01 und gedruckt wird aufeiner Windows-Box NT501. Nun kann es in der Praxis schon einmal vor-kommen, dass sich SAP1 langweilt, während NT501 beim Formatierender Monatsrechnungen heftig ins Glühen kommt.

Lastverteilung An diesem Punkt setzt nun das Konzept des Grid-Computing an. Anstatteine Software genau einer Applikations-Box zuzuweisen, werden dieHardware-Boxen nach ihren Möglichkeiten klassifiziert. Wenn zum Bei-spiel der Printer-Server feststellt, dass seine Box überlastet ist, sendet ereine Anfrage nach mehr Rechnerpower an einen Message-Server. Der

Kap03.fm Seite 36 Dienstag, 22. April 2003 2:31 14

Page 37: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

Komponenten und Protokolle 37

Message-Server sucht nun in der Liste der verfügbaren Boxen eine aus,die momentan wenig ausgelastet ist, lädt dort die notwendige Softwareund verteilt die Last teilweise auf diese Box um.

3.2 Komponenten und Protokolle

Zu den Kernkompetenzen in einem Integrationsteam gehört das Wissenum Protokolle und das Denken und Entwickeln in Komponenten. Dieverschiedenen Frameworks bieten jeweils eigene Komponentenmodellean. Dabei ist unter »Komponenten« eine abgeschlossene modulare,transaktionale Einheit zu verstehen. Solche Komponenten heißen in JavaBeans, in SAP je nach Betrachtungsweise BAPI oder Logical Unit of Work(LUW) und in Microsoft-Umgebungen COM-Objekte.

Die wichtigsten Protokolle, die zwischen den Komponenten den Daten-austausch kontrollieren, sind COM+ bei Microsoft, CORBA und RMI beiJava und RFC bei SAP. Diese Protokolle dienen dazu, die von der jeweili-gen Umgebung bereitgestellten APIs der Komponenten sauber aufzuru-fen. Abbildung 3.1 und Tabelle 3.1 vermitteln aber ein Bild davon, welcheFähigkeiten für einen erfolgreichen Technikberater unverzichtbar sind.

Micro-soft.NET

Visual Basic(Microsoft Office)

J2EE R/3, SAP Web AS

Microsoft.NET .NET COM+ RMI/CORBA

1. RFC Controls

2. .NET Connector

Visual Basic(Microsoft Office)

COM+ COM+ COM+ RFC Controls

J2EE JNI JNI RMI/CORBA

Java Connector (JNI)

SAP R/3 RFC via OLE2

RFC via OLE2 RFC RFC

SAP Web AS RFC via OLE2

RFC via OLE2 RMI RFC

Tabelle 3.1 Zugriffstechniken zwischen den Frameworks

Kap03.fm Seite 37 Dienstag, 22. April 2003 2:31 14

Page 38: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

38 Beispielszenarien und Voraussetzungen

3.3 Ein Beispiel einer heutigen Unternehmens-IT

So wie früher der Großvater vom Krieg und so mancher gestandene Pro-fessor von seiner Studienzeit erzählt hat, erzählen heute die COBOL- undFORTRAN-Programmierer von Lochkartenstapeln und Magnetbändern,Assembler-Programmen mit so mystisch klingenden Befehlen wieBranch-and-Link, nächtelangen Jobs zum Erstellen von Fakturen undMonatsabschlüssen, geheimnisvoll im Halbdunkel aufgestellten Monito-ren mit leuchtend grüner Schrift und wie man die Siebzigjährigen ausMallorca hatte einfliegen lassen, als beim Upgrade der Zentraleinheit derRechner partout nicht mehr den IPL machen wollte.

Austausch hochspezialisierter

Software istriskant

Ganz so lange ist das wahrscheinlich doch noch nicht her, und in so man-chem Betrieb gibt es zwar vermutlich keine Lochkarten mehr, aberschwarz-grüne Monitore gibt es immer noch zuhauf. Denn es ist eine Tat-

Abbildung 3.1 Komponenten, API und RPC-Protokolle

����������

��� ���������� �������������� ��������

�������������� ��

������������

�������

����

����

���

���������������

��������

����

��� ������ � � ���������

���� � ���� ����������

������

���

� ����

�������� !���!��� !������ � �"�#� �$� ��������

����������� � � �

��������

���������������� ��!�������

����

������%��������&��� ��#���� ����������&����

��

'()*

����

����� )���� ���

!��������

����

+��

����

���

Kap03.fm Seite 38 Dienstag, 22. April 2003 2:31 14

Page 39: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

Ein Beispiel einer heutigen Unternehmens-IT 39

sache: Man trennt sich ungern von den alten, zuverlässigen Maschinen,die direkt die Produktion kontrollieren und in denen all das Wissensteckt, das so manch ein Programmierer mit ins Grab genommen hat.

Typische Compu-ter-Infrastruktur heute

Schauen wir uns einmal eine typische Computer-Infrastruktur eines pro-duzierenden Betriebs an. Wohlgemerkt: Die Rede ist von produzierendenBetrieben, also solchen Firmen, die gewöhnlich einen individuell entwor-fenen, hochkomplexen Produktionsprozess steuern. Dies ist anders alsetwa beim Handel, wo die Prozesse überall dem gleichen Schema folgenund deshalb eine einmal geschriebene Software für eine ganze Branchetaugt. In einem solchen produzierenden Betrieb findet man also z.B. diefolgenden Systeme (kein Idealzustand, sondern ein realistisches Szenario):

� zentrales SAP R/3-System (neun Applikationsserver, ein Datenbankser-ver) für

� FI/CO: Buchhaltung und Controlling

� MM: Materialwirtschaft

� SD: Verkaufsabwicklung

� PP: Produktionsgrobplanung

� dezentrales SAP R/3-System (zwei Applikationsserver, ein Datenbank-server) für

� die Verkaufsbüros in Spanien und in Singapur

� teilweise Replizierung der Daten über ALE

� Transportabwicklungssystem (ein PC) mit selbst geschriebener Soft-ware für

� Lagerverwaltung

� Etikettendruck

� Gefahrgutdokumentendruck

� Warenausgangserfassung

� Produktionsrechner (drei AS/400)

� Rezepturverwaltung

� Chargenverwaltung

� Produktionsfeinplanung

� Maschinenleitstand

� Steuerung der Produktion

� Chargenverwaltung (sic! siehe oben)

Kap03.fm Seite 39 Dienstag, 22. April 2003 2:31 14

Page 40: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

40 Beispielszenarien und Voraussetzungen

� PC mit hauseigener Software für

� Beschaffung Produktion

� Entsorgung Reste

� ein PC läuft Tag und Nacht und steuert den Datenverkehr mit Zulieferern, istaber in keinem Plan verzeichnet

� eine AS/400darauf laufen alle Programme, die nicht offiziell abgenommen wurden

� acht zentrale NT-Server für das Office-Netzwerk

� drei Linux-Servervon denen aber keiner genau weiß, was sie tun

� drei WWW-Server für das Internet

� ein WWW-Server für das Intranet

� ein WWW-Serverfür den Internetshop, in dem die Bestellungen erfasst werden, dannordentlich ausgedruckt und von Hand im R/3-Zentralsystem eingege-ben werden

� ein Firewall-Server

� ein NT-Proxy-Serverüber den allerdings gar kein Netzverkehr läuft; wahrscheinlich dientdoch einer der Linux-Rechner als Proxy-Server für das WWW

� drei extern aufgestellte NT-Server zum Daten-Backup

� zwei EDI-Server (von denen sich einer nicht mehr booten lässt)

� zwei weitere WWW-Serverdie aber als normale Workstations geführt sind; schaltet man sie ab,bricht der Einkauf zusammen, obwohl der eigentlich über SAP R/3abgewickelt wird

� ...

Programme sinddas Know-how

einer Generation

Es gibt viele Gründe, warum eine zentral organisierte, redundanzfreie IT-Landschaft nicht realistisch ist. Besonders schwer wiegen psychologischeGründe wie Angst vor Neuem, mangelndes Vertrauen in die neue Soft-ware oder fehlende Ausbildung. Der wesentliche Grund ist aber: Compu-ter speichern Wissen und die Programme modellieren mit ihren Algorith-men komplexe Arbeitsprozesse. Genauer gesagt: Die Programme sind dieeinzigen wirklich zuverlässigen Arbeitsanweisungen und Prozessbeschrei-bungen. Da aber Arbeitsprozesse komplex sind und Programmierspra-

Kap03.fm Seite 40 Dienstag, 22. April 2003 2:31 14

Page 41: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

Ein Beispiel einer heutigen Unternehmens-IT 41

chen von Natur aus kryptisch (das gilt auch und vor allem für RPG, C undJava), lassen sich die so dokumentierten Arbeitsanweisungen und Pro-zessbeschreibungen nur schwer lesen.

3.3.1 Modellsichten und Abstraktion

Realistisch betrachtet, sind solche Serverfarmen keineswegs so chaotisch,wie sie auf den ersten Blick erscheinen mögen. Tatsächlich spiegeln sienur die ebenso komplexe Realität des Tagesgeschäfts eines Unterneh-mens wider. Auch dieses ist selten gradlinig, einfach und frei von Redun-danz. Um dies zu veranschaulichen, betrachten wir einmal das täglicheGeschäft eines Unternehmens.

Abbildung 3.2 Vereinfachte Darstellung einer Serverfarm

SAP DB Server

Firewall

Webserver

NT/2000

Firewall

WorkstationsLinux

SAPApplication Server

Data

Proxy

WebProxy

Proxy

Proxy

NT PrintServer

?

Kap03.fm Seite 41 Dienstag, 22. April 2003 2:31 14

Page 42: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

42 Beispielszenarien und Voraussetzungen

Vertriebswege Die Produkte werden auf verschiedenen Wegen an den Endkunden gelie-fert und jeder Vertriebsweg und sogar jeder Kunde kann noch einmal eineigenes Verfahren bei der Abwicklung nach sich ziehen. So verkauft einUnternehmer die Produkte unter anderem:

� direkt

� über Großhändler

� indirekt als Streckengeschäft an Zwischenhändler, zum Beispiel einVersandhaus. Hierbei lassen sich dann folgende Fälle unterscheiden:

� Der Zwischenhändler erhält für jeden Verkauf eine Sofortprovision.

� Der Zwischenhändler erhält für jede bezahlte Ware eine Endprovi-sion.

� In Einzelfällen fakturiert und liefert das Unternehmen im Namendes Versandhauses und macht auch für einzelne Händler das Inkassobeim Endkunden.

� über einen selbst betriebenen Webshop (mit dem Angebot von Son-derfertigungen)

Wer glaubt, man könne den Kunden seine eigenen standardisiertenStrukturen verordnen, ist nicht nur kundenunfreundlich, sondern verla-gert das Problem schlicht auf die Seite des Kunden, denn dieser hat es jaauch mit vielen Lieferanten zu tun, die sicher nicht alle die gleichen Ver-triebsstrukturen haben. Es gibt nur ganz wenige Branchen, wie zum Bei-spiel den Buchhandel, die es bis heute geschafft haben, einheitliche Ver-triebsstrukturen konsequent durchzusetzen.

Produktion In der Produktion existieren folgende Fertigungsvarianten:

� Serie auf Lager

� Serie auf Termin

� Make-to-order (Variantenkonfiguration)

� Make-to-order mit Überschuss aufs Lager

Versand Auch im Versand gibt es verschiedene und kundenindividuelle Varianten:

� direkte Express-Auslieferung

� direkte Auslieferung durch Sammel-Spedition (Ground-Collect)

� Lagerauffüllung nach Bedarf (KANBAN) und Termin (Lieferplan)

� Bereitstellung zur Abholung auf Termin

Kap03.fm Seite 42 Dienstag, 22. April 2003 2:31 14

Page 43: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

Ein Beispiel einer heutigen Unternehmens-IT 43

Technische SichtDie Sicht des Anwenders ist nicht die des Ingenieurs. Um die Szenarienauf einem Computer zu realisieren, brauchen wir eine Abstraktion dergezeigten Anwendungsfälle auf Software-Applikationen, was uns zu fol-gender minimaler Installation führt:

� ein WWW-Server und eine Webshop-Applikation

� eine Applikation zur Verwaltung der Kundenaufträge

� eine Applikation zur Bestellung der Rohwaren

� eine Applikation zur Verwaltung des Lagers

� eine Applikation zur Produktionsplanung

� eine Applikation zur Versandplanung und Versandsteuerung

AblaufUm das Ganze noch einmal aus einem anderen Blickwinkel zu betrachten,beleuchten wir im Folgenden die mögliche zeitliche Abfolge eines Ver-kaufs:

1. Ein Kunde ruft die Webseite auf und fragt ein Produkt an.

2. Der Webserver simuliert die Machbarkeit durch Simulation eines Kun-denauftrags mit Variantenkonfiguration.

3. Der Kundenauftragsrechner lässt sich vom Produktionsrechner eingeschätztes Fertigstellungsdatum errechnen.

Abbildung 3.3 Kommunikationsorbit eines Unternehmens

Orbit

APO

CRM

BW/SEM

Non-R/3 App

SAP R/3

Wireless/RFFirewall

Internet

Non R/3

R/3

Documents

PrintServer Forms

LabelsPrintingSolution

c

Transport

Warehouse

Packaging

Data

Pencomputer

Kap03.fm Seite 43 Dienstag, 22. April 2003 2:31 14

Page 44: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

44 Beispielszenarien und Voraussetzungen

4.Der Webserver lässt sich vom Kunden den Auftrag bestätigen undsammelt die Zahlungsinformation (Kreditkarte, Bankeinzug etc.) ein.

5.Der Kundenauftrag wird angelegt und bittet den Produktionsrechner,die Produktion fest einzuplanen.

6.Die Produktion teilt dem Versand die Verfügbarkeit mit.

7. Der Versand avisiert dem Kunden die Lieferung.

8.Der Versand ordert die Spedition entsprechend den Versandbedin-gungen.

9.Der Versand bestätigt den Versand.

10.Der SD-Rechner fakturiert die versandte Ware.

3.3.2 Ansatz für eine zeitgemäße Lösung: Integration mit HTTP und XML

KomplexeSysteme lassen

sich nicht planenund modellieren

Es ist müßig, sich in Theorien zu ergehen, wie man eine solche Strukturdurch eine saubere und gezielte Planung aufräumen kann. Solche Plänefunktionieren nur in der Theorie, denn sie sind fast niemals redundantund sturmsicher. Außerdem wird immer wieder übersehen, dass Pläneselten so umgesetzt werden, wie sie ursprünglich angesetzt wurden,stattdessen werden sie im Alltag rasch zerfleddert und selten mit Konse-quenz zu Ende gebracht. Diese Erkenntnisse aus der Theorie der komple-xen Systeme (auch Chaostheorie genannt) – und ein Produktionsbetriebist ein solches komplexes System – begründen aber nur in nachvollzieh-barer Weise, was in der Praxis bereits eine Binsenweisheit ist.

Integration alseinzig praktikable

Lösung

Klinisch saubere Strukturen sind starre Strukturen. In einem lebendigenBetrieb, wie ihn eine Produktion darstellt, sind aber Flexibilität undGeschwindigkeit der Reaktion das A und O. Und deshalb werden vorallem die produktionsnahen Rechner und die Rechner aus der Lagerver-waltung so bleiben, wie sie sind, weil niemand die Verantwortung über-nehmen wird, einen funktionierenden Rechner ohne Not durch einenanderen, nicht erprobten auszuwechseln. Als Lösung bietet sich alsolediglich die Integration der spezialisierten Einheiten in das gesamteEnterprise Network an.

Um den Planungs- und Abstimmungsaufwand gering zu halten, funktio-niert die Integration der Applikationen immer nach dem gleichenSchema. Dieses fußt auf HTTP und transportiert Daten zwischen den Sys-temen grundsätzlich in XML. Die Aufbereitung und Konvertierung vonDaten erfolgt durch den konsequenten Einsatz von XSLT-Schablonen.

Kap03.fm Seite 44 Dienstag, 22. April 2003 2:31 14

Page 45: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

Ein Beispiel einer heutigen Unternehmens-IT 45

Kommunikation mit HTTP und XML

In Abbildung 3.2 ist der Browser repräsentativ für einen beliebigen Client(der Client kann aber auch ein anderes Programm sein). Somit ist derAblauf wie folgt:

1. Ein Client fragt eine bestimmte Ressource an.

2. Ein HTTP-Server nimmt die Anfrage entgegen und führt eine Applika-tion aus.

3. Sobald ein Ergebnis vorliegt, wird dieses in XML aufbereitet.

4. Der Browser nimmt das XML entgegen und formt es mit Hilfe einesXSLT-Dokuments um.

5. Nun liegt das Ergebnis in der gewünschten Form vor und kann weiter-verarbeitet werden.

Abbildung 3.4 Typischer Programmfluss einer Client-Server-Applikation mit HTTP

�������

������������

�������

����� �������������

�� ����� ��� �����������

���� ���������

���� �����

�������

�� �������������

���������

�������

�������������

����� ���

����

���������

� ������ ������

���� ��� �����

Kap03.fm Seite 45 Dienstag, 22. April 2003 2:31 14

Page 46: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

Kap03.fm Seite 46 Dienstag, 22. April 2003 2:31 14

Page 47: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

Teil 2 Remote Procedure Calls und Business API

Remote Procedure Calls (RPC) sind das Herz jeder Client-Server-Architektur. Durch sie wird es möglich, Programme von einem Computer aus auf einem anderen Computer auszuführen. Durch dieses Konzept kann man ein Netzwerk von spezialisierten Ein-zelcomputern entwickeln, die reibungslos miteinander kommu-nizieren.

Kap03.fm Seite 47 Dienstag, 22. April 2003 2:31 14

Page 48: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

Kap03.fm Seite 48 Dienstag, 22. April 2003 2:31 14

Page 49: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

SAP R/3 Remote Function Call 49

4 SAP R/3 Remote Function Call

Es gibt verschiedene Begriffsvarianten für RPC, so heißt es bei SAP Remote Function Call (RFC) und bei Java Remote Method Invokation (RMI).

RFC ist Grundlage für den Erfolg von R/3

Es ist sicher nicht vermessen, zu sagen, dass der andauernde Erfolg vonSAP R/3 zu einem großen Teil dessen RFC-Funktionalität zu verdanken ist.RFC hat SAP R/3 zu einem offenen System gemacht und das ist es, wasdie IT-Welt benötigt. Keine Software ist so integriert und perfekt, dass siealle Fälle und Sonderfälle eines Geschäftszweiges abdecken kann. DieMöglichkeit, mit einem Programm all das zu erzielen, was man auchdurch eine Benutzereingabe erreichen kann, ist eine Grundforderung anein modernes Software-Paket.

RFC ist Grundlage für IDoc/ALE und BAPI

RFC bildet auch die Grundlage der R/3-Technologien ALE/IDoc und BAPI.In beiden Fällen kommuniziert SAP R/3 mit einem externen Programm,im Falle von ALE/IDocs durch asynchronen Austausch von Nachrichten,im Falle von BAPIs durch direkten Aufruf eines Funktionsbausteins.

4.1 Was ist RFC?RFC baut auf CPI-C auf

Die SAP-Technologie RFC ist eine auf dem IBM-Protokoll CPI-C aufbau-ende Schnittstellentechnologie, die es externen Programmen oder ande-ren R/3-Instanzen erlaubt, auf eine bestimmte R/3-Instanz zuzugreifen.

RFC ist ein sicheres, bidirek-tionales Protokoll

Das RFC-Protokoll ist ein bidirektionales, synchrones Kommunikations-protokoll zum Austausch von Nachrichten über ein Netzwerk. RFC sen-det dazu Datagramme von einem Client zu einer Server-Applikation überein UDP/IP-Netzwerk. Grundsätzlich tut RFC nichts anderes als HTTP, nurdie benutzte Codierung und Konvention unterscheiden sich.

Genaue Kenntnis der Details des RFC-Protokolls sind für einen Entwicklernormalerweise nicht notwendig. Um den Zugriff auf RFC zu erleichtern,stellt SAP eigene RFC-Bibliotheken für die verschiedenen Frameworks zurVerfügung. Derzeit gibt es RFC-Libraries für alle Plattformen, auf denenSAP R/3 läuft, namentlich Windows, UNIX, Linux, AS/400 und z/OS.

RFC erlaubt es einem Programm,

� R/3-Funktionen in einem anderen R/3-System oder einer weiterenR/3-Instanz aufzurufen

Kap04.fm Seite 49 Dienstag, 22. April 2003 2:31 14

Page 50: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

50 SAP R/3 Remote Function Call

� R/3-Funktionen von Nicht-SAP-Programmen aufzurufen, zum BeispielJava, C++ oder Visual Basic

� externe Programme außerhalb eines SAP-Systems von SAP R/3 aus auf-zurufen

Die folgenden Abschnitte zeigen konkrete Beispiele zum Aufruf von Pro-grammen über RFC. Den Zugriff von externen Computern zeigen wirunter Verwendung von DCOM für alle Windows-Betriebssysteme undvon Java aus. Grundsätzlich gibt es auch Zugriffsmöglichkeiten von allenBetriebssystemen aus, die auch eine R/3-Instanz unterstützen, zum Bei-spiel einer AS/400 oder von IBM/390. Allerdings werden diese Zugriffs-variationen so selten in der Praxis verwendet, dass auch die Unterstüt-zung dafür leidet. Für all diese Betriebssysteme ist es empfehlenswerter,die Kommunikation über einen HTTP-Proxy-Server durchzuführen.

Abbildung 4.1 Remote Program Calls als Kernfunktionalität einer Client-Server-Landschaft

������

���������

������

������

���������

���� �������

���������

���������������

������� �

������

���������

!"#��$%

�������$&�

������

�����������

����������&�

"���������

����������&�

"���������

������

'����������

���

���

���

���

Kap04.fm Seite 50 Dienstag, 22. April 2003 2:31 14

Page 51: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

R/3-RFC von einer anderen R/3-Instanz 51

4.2 R/3-RFC von einer anderen R/3-InstanzRFCs via R/3-Destination werden in SM59 definiert

Eine R/3-Verbindung von einer anderen SAP R/3-Instanz aus erfolgtimmer über die Angabe einer Destination. Eine Destination wird in Trans-aktion SM59 gepflegt und kann dann von allen ABAPs dieser Instanzbenutzt werden. Im Beispiel in Listing 4.1 definieren wir eine RFC-Verbin-dung zu einem R/3-Computer, in diesem Fall ist es der SAPOSS-Server.

Funktionsaufrufe erhalten den Parameter DESTINATION

Für alle nachfolgenden Aufrufe in das Remote-System brauchen wir unsfortan nicht mehr um die Logon-Daten zu kümmern, da grundsätzlich aufdie Angabe in SM59 zurückgegriffen wird. Ein RFC-Aufruf von ABAP indas Remote-System fügt dann dem CALL FUNCTION einfach noch denParameter DESTINATION hinzu (siehe Listing 4.1). Wenn Sie keine Desti-nation definiert haben, aber dennoch einen RFC testen wollen, könnenSie die vordefinierte Destination NONE verwenden, die immer auf daseigene System verweist und implizit vorhanden ist und demnach nichterst mit SM59 angelegt werden muss.

Listing 4.1 Aufruf einer RFC-Function von ABAP via Destination NONE (= eigenes System)

DATA: from_curr_range TYPE STANDARD TABLE OF bapi1093_3.DATA: to_currncy_range TYPE STANDARD TABLE OF bapi1093_4.DATA: exch_rate_list TYPE STANDARD TABLE OF bapi1093_0 WITH HEADER LINE.DATA: return TYPE STANDARD TABLE OF bapiret1 WITH HEA-DER LINE.CALL FUNCTION 'BAPI_EXCHRATE_GETCURRENTRATES' DESTINATION ‘NONE’ EXPORTING date = sy-datum TABLES from_curr_range = from_curr_range to_currncy_range = to_currncy_range exch_rate_list = exch_rate_list return = return.LOOP AT exch_rate_list. WRITE: / exch_rate_list-from_curr. WRITE: exch_rate_list-to_currncy. WRITE: exch_rate_list-exch_rate.ENDLOOP.

Kap04.fm Seite 51 Dienstag, 22. April 2003 2:31 14

Page 52: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

52 SAP R/3 Remote Function Call

4.2.1 Interne Destination NONE

RFC-DestinationNONE

R/3 hat bereits einige RFC-Destinationen fest vorgegeben, unter ande-rem die Destination NONE. Gibt man NONE als Ziel des Aufrufs an, wird einRFC in das rufende, also das eigene System ausgeführt. Hierzu sind natür-lich keine Logon-Daten erforderlich. NONE eignet sich zum Testen vonRFC-Aufrufen, wenn das entfernte System nicht zur Verfügung steht. Alsbesonderen Nebeneffekt gestattet es aber auch ein Entkoppeln des Auf-rufs von der laufenden Transaktion.

Jeder RFC öffneteine eigene LUW

Ein RFC startet grundsätzlich einen eigenen Programmkontext (LogicalUnit of Work, LUW). Sie können somit aus einer laufenden Transaktionheraus mehrere RFC-Bausteine mit Destination NONE aufrufen. ZumAbschluss können Sie dann mit den BAPI-Bausteinen BAPI_COMMIT_WORK beziehungsweise BAPI_ROLLBACK_WORK die Remote-Aufrufe been-den, ohne dass sich der COMMIT auf die rufende Transaktion auswirkt.

4.3 Windows-zu-R/3-Connectivity mit DCOMZugriff auf R/3

erfolgt via DCOMDer Zugriff von Windows-Systemen aus nach R/3 via RFC bedient sicheiner Reihe von DLLs, die mit dem SAP GUI oder dem RFC-Software-Development-Kit (RFCSDK) ausgeliefert werden. Diese DLLs basieren auf

Abbildung 4.2 Definition einer RFC-Destination mit SM59

Kap04.fm Seite 52 Dienstag, 22. April 2003 2:31 14

Page 53: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

Windows-zu-R/3-Connectivity mit DCOM 53

DCOM, dem Distributed Common Object Protocol von Microsoft, mit demalle Kommunikationen zwischen Applikationen innerhalb einer Win-dows-Umgebung durchgeführt werden.

Für den Zugriff auf SAP R/3 müssen beim Aufbau der Connection immerdie richtigen Anmeldedaten (englisch Logon-Credentials) angegeben wer-den. Dies erledigen Sie normalerweise im SAP-Logon-Panel, das dieDaten wiederum in der Konfigurationsdatei SAPLOGON.INI abspeichert.

Befindet sich eine solche SAPLOGON.INI (normalerweise im Windows-System-Ordner, zum Beispiel C:\WINNT) auf Ihrem Rechner, können auchdie auf der librfc32.dll basierenden Libraries wie wdtlog.ocx oder der Java-Connector darauf zurückgreifen; es müssen nur noch UserID und Pass-word explizit angegeben werden. Wollen Sie nicht auf die SAPLOGON.INIzurückgreifen, müssen Sie alle Logon-Credentials selbst vollständig ange-ben. Abbildung 1.5 zeigt, wie die Credentials aus dem SAP Logon ent-nommen werden können.

Abbildung 4.3 Angabe der Credentials in SM59

Kap04.fm Seite 53 Dienstag, 22. April 2003 2:31 14

Page 54: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

54 SAP R/3 Remote Function Call

4.3.1 R/3-Logon mit VBA

Zugriff von Win-dows erfolgt über

ActiveX

Das Logon von einer Windows-Applikation – also auch von VBA aus –erfolgt grundsätzlich über die SAP.LogonCtrl (in wdtlog.ocx) oder aufunterster Ebene durch die zentrale RFC-Library librfc32.dll. Wir beschrän-ken uns hier immer auf das SAP.LogonCtrl.

Alle folgenden Beispiele für Windows wurden entweder mit Visual Basicfor Applications (VBA) oder Visual Basic Script (VBS) erstellt.

Aufruf eines BAPIvon VBA

Das Beispiel, das jetzt folgt, zeigt zunächst ein ganz einfaches VB-Pro-gramm, das einen Logon zu R/3 durchführt, und zwar ohne Verwendungvon Klassen. Das Programm beschafft sich ein Connection-Objekt zu R/3,setzt die Parameter und führt den Logon durch. Anschließend ruft esnoch den Funktionsbaustein BAPI_EXCHRATE_GETCURRENTRATES mitdem aktuellen Datum auf.

Listing 4.2 Logon zu R/3 und Aufruf des Funktionsbausteins BAPI_EXCHRATE_GET-CURRENTRATES

' Example calling BAPI BAPI_EXCHRATE_GETCURRENTRATESOption ExplicitPublic Functions As SAPFunctionsOCX.SAPFunctions

Abbildung 4.4 Mapping der Logon-Credentials mit SAPLOGON.INI

Kap04.fm Seite 54 Dienstag, 22. April 2003 2:31 14

Page 55: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

Windows-zu-R/3-Connectivity mit DCOM 55

Private LogonControl As SAPLogonCtrl.SAPLogonControlPrivate R3Connection As SAPLogonCtrl.ConnectionDim Func As SAPFunctionsOCX.FunctionPublic iDATE As SAPFunctionsOCX.ParameterPublic tEXCH_RATE_LIST As SAPTableFactoryCtrl.TablePrivate Sub Main() Dim ix As Integer Dim retcd As Boolean Dim SilentLogon As Boolean Set LogonControl = CreateObject("SAP.LogonControl.1") Set Functions = CreateObject("SAP.Functions") Set R3Connection = LogonControl.NewConnection R3Connection.Client = "000" R3Connection.ApplicationServer = "192.168.69.111" R3Connection.Language = "EN" R3Connection.User = "DEVELOPER" R3Connection.Password = "19920607" R3Connection.System = "WAS" R3Connection.SystemID = "$WebAS" R3Connection.SystemNumber = "18" R3Connection.UseSAPLogonIni = False SilentLogon = True retcd = R3Connection.Logon(0, SilentLogon) If retcd <> True Then MsgBox "Logon failed": Exit Sub Functions.Connection = R3Connection Set Func = Functions.Add("BAPI_EXCHRATE_GETCURRENTRATES") Set iDATE = Func.Exports("DATE") Set tEXCH_RATE_LIST = Func.Tables("EXCH_RATE_LIST") iDATE.Value = "20030101" Func.Call For ix = 1 To tEXCH_RATE_LIST.RowCount Debug.Print tEXCH_RATE_LIST.Cell(ix, 2), Debug.Print tEXCH_RATE_LIST(ix, 3), 'Different ways to access matrix Debug.Print tEXCH_RATE_LIST(ix, "EXCH_RATE")

Kap04.fm Seite 55 Dienstag, 22. April 2003 2:31 14

Page 56: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

56 SAP R/3 Remote Function Call

Next R3Connection.logoffEnd Sub

4.3.2 Anatomie der RFC- und BAPI-Aufrufe von Windows

RFC-Aufruf mitRFC_READ_TABLE

In diesem Abschnitt gehen wir noch einmal ins Detail und sezieren dieRFC-Aufrufe von einer Visual-Basic-Applikation aus. Dazu nehmen wirdieses Mal den RFC-Baustein RFC_READ_TABLE, mit dem man den Inhaltfast jeder beliebigen R/3-Tabelle via RFC lesen kann. Das verwendete Bei-spiel wird RFC_READ_TABLE von VBA aufrufen und den Inhalt der SAP-Mandantentabelle T000 lesen. Wenn Sie dieses Beispiel verstandenhaben, dürfte es Ihnen keine Schwierigkeit mehr bereiten, eine Anwen-dung mit Zugriff auf einen beliebigen anderen RFC-Baustein zu entwi-ckeln.

Daten einer belie-bigen SAP R/3-

Tabelle mit RFC_READ_TABLE

lesen

Listing 4.3 Lesen einer beliebigen R/3-Tabelle via RFC

Sub R3RFC_READ_TABLE(pQueryTab)'------------------------------------------------------' Add the R/3 RFC function RFC_READ_TABLE to the collec-tion'------------------------------------------------------Set RFC_READ_TABLE = funcControl.Add("RFC_READ_TABLE")'------------------------------------------------------' Create objects for each parameter'------------------------------------------------------Set eQUERY_TAB = RFC_READ_TABLE.Exports("QUERY_TABLE")Set TOPTIONS = RFC_READ_TABLE.Tables("OPTIONS") 'Set TDATA = RFC_READ_TABLE.Tables("DATA") 'Set TFIELDS = RFC_READ_TABLE.Tables("FIELDS") 'eQUERY_TAB.Value = pQueryTab ' pQueryTab is the R/3 name of the tableTOPTIONS.AppendRow ' new item lineTOPTIONS(1, "TEXT") = "MANDT EQ '000'"If RFC_READ_TABLE.Call = True Then If TDATA.RowCount > 0 Then MsgBox "Call to RFC_READ_TABLE successful! Data found" MsgBox TDATA(1, "WA") Else MsgBox "Call to RFC_READ_TABLE successful! No

Kap04.fm Seite 56 Dienstag, 22. April 2003 2:31 14

Page 57: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

Windows-zu-R/3-Connectivity mit DCOM 57

data found" End IfElse MsgBox "Call to RFC_READ_TABLE failed!"End IfEnd Sub

SAP stellt uns eine Anzahl von ActiveX-Controls und DLLs zur Verfügung,die als intelligenter Proxy für die gesamte Kommunikation mit R/3 die-nen. Ein ActiveX-Control ist ein DCOM-Objekt und deshalb auch kom-patibel mit Visual Basic oder anderen DCOM-Anwendungen. Somiterscheint SAP R/3 aus der Sicht eines ActiveX-Entwicklers wie jedesandere DCOM-Objekt, wird also genauso behandelt wie etwa ein ADO-oder ein DAO-Objekt. Mit anderen Worten ist aus der Sicht eines Ent-wicklers die SAP R/3-Instanz nichts weiter als ein Datenbankserver unddie Funktionsbausteine entsprechen aus dieser Sicht in etwa den StoredProcedures eines Datenbanksystems.

DCOM ist das RPC-Protokoll von Windows

DCOM ist das Zugriffsprotokoll von Windows für verteilte Objekte, imGrunde das Gleiche wie RFC, aber für Windows.

Hauptgrund für Fehler: korrupte Installation der DLLs

Sollte es dennoch Probleme geben, die ActiveX-Controls von SAP aufzu-rufen, liegt das Problem mit sehr großer Sicherheit bei der Installation derControls oder an einer mangelhaften Windows-Installation.

Über SAP ActiveX-Controls brauchen Sie außer den Logon Credentials unddem Namen des aufzurufenden Funktionsbausteins nichts weiter zu wis-sen. Die Controls bauen eine Session mit R/3 auf, und sobald Sie denFunktionsbaustein dem lokalen Repository des ActiveX-Controls hinzufü-gen, können Sie alle Eigenschaften des Bausteins einschließlich derNamen und Typen der Parameter abfragen.

Visual-Basic-Code zum Lesen von Tabelle T000 via RFC

Die folgenden kommentierten Code-Zeilen geben Ihnen Schritt fürSchritt einen Überblick über die einzelnen Methoden der RFC-Controlsam Beispiel eines einfachen Visual-Basic-Programms. Das Beispiel ver-zichtet auf die Typisierung der Variablen und ist somit auch unter VisualBasic Script ausführbar. Dazu muss der Code nur in einer ASCII-Datei mitder Dateierweiterung .vbs abgespeichert sein. Ein Doppelklick auf dieDatei vom Windows-Explorer aus führt das Script dann aus.

Kap04.fm Seite 57 Dienstag, 22. April 2003 2:31 14

Page 58: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

58 SAP R/3 Remote Function Call

Declarations

Zunächst deklarieren wir eine neue R/3-Logon-OCX-Komponente:

Dim LogonControl As SAPLogonCtrl.SAPLogonControl

Deklarieren einesConnection-

Objekts

Das Connection-Objekt ist das Gateway zwischen lokaler Instanz undR/3. Über die Connection wird zu Beginn eine Session durch Übermitt-lung der Anmeldedaten hergestellt. Grundsätzlich kann die Verbindungvon beliebig vielen Routinen gleichzeitig verwendet werden (Connec-tion-Pooling):

Dim conn As SAPLogonCtrl.Connection

Deklarieren einesPointers auf ein

R/3 RFC-Reposi-tory-Objekt

Diesem Pointer wird später eine Referenz auf die Verwaltungsinformatio-nen der gewünschten Funktionsbausteine zugewiesen. Die Eigenschaftender Funktion werden demnach dynamisch bestimmt:

Dim funcControl As SAPFunctionsOCX.SAPFunctions

Dies ist der Pointer zum aktuellen R/3 RFC-Funktionsbaustein:

Dim RFC_READ_TABLE As SAPFunctionsOCX.Function

Als nächstes folgt die Deklaration eines Pointers für jeden Parameter:

Dim eQUERY_TAB As SAPFunctionsOCX.ParameterDim TOPTIONS As SAPFunctionsOCX.TableDim TDATA As SAPFunctionsOCX.TableDim TFIELDS As SAPFunctionsOCX.Table

Logon-Routine

Das Logon zu R/3 fassen wir in einer eigenen Unterroutine zusammen.Darin legen wir eine neue Connection zu R/3 an, die die Verbindungsda-ten über die ganze Programmlaufzeit hinweg hält und die Anmeldung anR/3 zur Applikation hin abschottet.

Sub R3Logon()

Erzeugen einerneuen Connection

Eine neue Connection muss mit der Methode NewConnection angelegtwerden. Das Anlegen eines Connection-Objekts mit CreateObjectfunktioniert ausdrücklich nicht, weil es durch die fehlende Vererbung inVisual Basic nicht möglich ist, das Objekt mit CreateObject sauber zuinitialisieren.

Set conn = LogonControl.NewConnection

Kap04.fm Seite 58 Dienstag, 22. April 2003 2:31 14

Page 59: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

Windows-zu-R/3-Connectivity mit DCOM 59

Angabe der Logon-Credentials

Lediglich die Angabe von Applikationsserver und Systemnummer istzwingend, alle anderen Daten werden gegebenenfalls in einem Popupabgefragt. Selbstverständlich ist dies in einer automatisierten Umgebungnicht wünschenswert, weshalb Sie schließlich dann doch alle Angabenmachen oder in der SAPLOGON.INI auf dem Server hinterlegen müssen.

conn.ApplicationServer = "R3Linux"' IP or DNS-Name of the R/3 application server conn.System = "00" ' System ID of the instance, usually 00 conn.Client = "100" ' opt. Client number to logon to conn.Language = "EN" ' opt. Your login language conn.User = "" ' opt. Your user id conn.Password = "" ' opt. Your password

Dann folgt der Aufruf der Logon-Methode:

retcd = conn.Logon(0, False)

Und schließlich die Prüfung, ob das Login erfolgreich war:

If retcd <> True Then MsgBox " Cannot log on! " MsgBox retcd Stop else MsgBox " Logon OK." End IfEnd Sub

Aufruf eines RFC-Funktionsbausteins

RFC-Aufruf benutzt die zuvor eröffnete Connec-tion

Der RFC-Funktionsbaustein wird über die Connection aufgerufen, die wirim Logon-Schritt erzeugt haben. Das Coding lässt die lokalen Pointer aufdie Parameter des Funktionsbausteins verweisen. Das ist zwar nicht wirk-lich notwendig, macht aber das Programm lesbarer, als wenn immer derganze Parameterkontext angegeben werden muss. Hat ein RFC-Funkti-onsbaustein Tabellenparameter, erscheinen die in Visual Basic wie ADO-Recordsets und werden auch wie solche behandelt. Die Typisierung derRecordsets erfolgt automatisch beim Hinzufügen des Funktionsbausteinszum lokalen RFC-Repository:

Kap04.fm Seite 59 Dienstag, 22. April 2003 2:31 14

Page 60: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

60 SAP R/3 Remote Function Call

Sub R3RFC_READ_TABLE(pQueryTab)

Erzeugen einerneuen Collection

für den Funktions-baustein

Alle zu verwendenden Funktionsbausteine müssen einer lokalen Collec-tion hinzugefügt werden, die als Cache für die Parameterinformationdient:

Set RFC_READ_TABLE = funcControl.Add("RFC_READ_TABLE")

Als Nächstes wird ein Pointer auf die Import- und Exportparametergesetzt:

Set eQUERY_TAB = RFC_READ_TABLE.Exports("QUERY_TABLE") Set TOPTIONS = RFC_READ_TABLE.Tables("OPTIONS") ' Set TDATA = RFC_READ_TABLE.Tables("DATA") ' Set TFIELDS = RFC_READ_TABLE.Tables("FIELDS") '

Import-, Export- und Tables-Parameter werden durch einen Visual-Basic-Pointer referenziert. Die function collection, die wir oben mit funcCont-rol.Add erzeugt haben, stellt uns dynamisch einen Proxy für die Metho-den und Pointer auf alle Parameter des Funktionsbausteins zur Verfügung.

Bevor wir den Funktionsbaustein aufrufen, müssen wir den Parameterndie gewünschten Werte zuweisen:

Lesen undSchreiben der

Parameterwerte

eQUERY_TAB.Value = pQueryTab ' pQueryTab is the R/3 name of the table TOPTIONS.AppendRow ' new item line TOPTIONS(1,"TEXT") = "MANDT EQ '000'"

Sobald den Parametern gültige Werte zugewiesen wurden, kann derFunktionsbaustein aufgerufen werden. Der Aufruf retourniert TRUE oderFALSE, je nachdem, ob der Aufruf erfolgreich war oder nicht:

If RFC_READ_TABLE.Call = True Then

Wenn der RFC-Aufruf erfolgreich war, können die Werte weiter verarbei-tet werden. Im Beispiel hier zeigen wir jeweils die erste Zeile der Tabellein einer VB Messagebox an.

Ausgabe desErgebnisses

If TDATA.RowCount > 0 Then MsgBox "Call to RFC_READ_TABLE successful! Data found" MsgBox TDATA(1, "WA")

Kap04.fm Seite 60 Dienstag, 22. April 2003 2:31 14

Page 61: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

Windows-zu-R/3-Connectivity mit DCOM 61

Else MsgBox "Call to RFC_READ_TABLE successful! No data found" End If Else MsgBox "Call to RFC_READ_TABLE failed!" End IfEnd Sub

Hauptprogramm

Damit hätten wir den spannenden Teil des Codings auch schon hinteruns. Im Folgenden packen wir dem Ganzen noch eine Main-Routinehinzu:

Main() procedureSub Main()

Nun erzeugen wir noch eine Instanz der SAP.LogonControl-Klasse(Version 1)

Set LogonControl = CreateObject("SAP.LogonControl.1")

Dieses Statement hat eine neue Instanz des Logon-Objekts erzeugt. DieNummer 1 am Ende des Klassennamens SAP.LogonControl.1 ist dieVersionsnummer der Klasse. Normalerweise gibt man die Version einerKlasse nur an, wenn man wirklich explizit die Verwendung einerbestimmten Version erzwingen will. Im Falle des SAP.LogonControlgibt es nur die eine Version.

Nun erzeugen wir eine Instanz der SAP.Functions collection:

Set funcControl = CreateObject("SAP.Functions")

Als Nächstes erfolgt der Aufruf der Logon-Routine:

call R3Logon

Und dann die Zuweisung des Connection-Objekts:

funcControl.Connection = conn

Dann wird der RFC-Call ausgeführt und es folgt der Logoff:

call R3RFC_READ_TABLE("T000") conn.Logoff MsgBox " Logged off from R/3! " End Sub

Kap04.fm Seite 61 Dienstag, 22. April 2003 2:31 14

Page 62: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

62 SAP R/3 Remote Function Call

Start des Programms

Call Main() Abhängig davon, welche Visual-Basic-Variante Sie verwenden, ist derAufruf leicht unterschiedlich. Im Falle von VBS müssen Sie dem Script-File noch das Statement Call Main() hinzufügen, um das Hauptpro-gramm explizit aufzurufen.

ASP

Call Main() ineiner ASP-Seite

Falls Sie das VBS-Script in eine ASP-Seite einbinden wollen, können Siedas Coding in der VBS-Datei lassen und mit dem #include-Befehl vonASP in die HTML-Seite einbinden:

<HTML> <HEAD> <#include RfcReadTable.vbs > </HEAD><BODY><%>Call Main()<%></BODY>

Funktionsaufruf im Überblick

Das nachstehende Beispiel zeigt noch einmal den Aufruf eines Funktions-baussteins im Überblick. Diesmal wurde ein anderer Funktionsbaustein(RFC_GET_TABLE_ENTRIES) ausgewählt, der ebenfalls den Inhalt einerbeliebigen SAP R/3-Tabelle ausliest, jedoch etwas andere Parameter alsRFC_READ_TABLE hat.

Listing 4.4 Vollständiges Coding zum Aufruf der RFC-Funktion RFC_READ_TABLE

Dim LogonControl 'As SAPLogonCtrl.SAPLogonControlDim conn 'As SAPLogonCtrl.ConnectionDim funcControl 'As SAPFunctionsOCX.SAPFunctionsDim TableFactoryCtrl 'As SAPTableFactoryCtrl.SAPTableF-actory'------------------------------------------------------' Pointer to functions'------------------------------------------------------Dim RFC_READ_TABLE'------------------------------------------------------' Pointers to function parameters'------------------------------------------------------Dim eQUERY_TABDim TOPTIONSDim TDATADim TFIELDS

Kap04.fm Seite 62 Dienstag, 22. April 2003 2:31 14

Page 63: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

Windows-zu-R/3-Connectivity mit DCOM 63

'******************************************************' Main Program'******************************************************Call Main'******************************************************' Subroutines'******************************************************Sub Main()Set LogonControl = CreateObject("SAP.LogonControl.1")Set funcControl = CreateObject("SAP.Functions")Set TableFactoryCtrl = CreateObject("SAP.TableFac-tory.1")Call R3LogonfuncControl.Connection = connCall R3RFC_READ_TABLE("T000")conn.LogoffMsgBox " Logged off from R/3! "End Sub Sub R3Logon()Set conn = LogonControl.NewConnectionconn.ApplicationServer = "r3dev" ' IP or DNS-Name of the R/3 application serverconn.System = "00" ' System ID of the instance, usually 00conn.Client = "100" ' opt. Client number to logon toconn.Language = "EN" ' opt. Your login languageconn.User = "" ' opt. Your user idconn.Password = "" ' opt. Your password

retcd = conn.Logon(0, False)If retcd <> True Then MsgBox " Cannot log on! " MsgBox retcd StopElse MsgBox " Logon OK."End IfEnd Sub

Kap04.fm Seite 63 Dienstag, 22. April 2003 2:31 14

Page 64: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

64 SAP R/3 Remote Function Call

Sub R3RFC_READ_TABLE(pQueryTab)'------------------------------------------------------' Add the R/3 RFC function RFC_READ_TABLE to the collec-tion'------------------------------------------------------Set RFC_READ_TABLE = funcControl.Add("RFC_READ_TABLE")'------------------------------------------------------' Create objects for each parameter'------------------------------------------------------Set eQUERY_TAB = RFC_READ_TABLE.Exports("QUERY_TABLE")Set TOPTIONS = RFC_READ_TABLE.Tables("OPTIONS") 'Set TDATA = RFC_READ_TABLE.Tables("DATA") 'Set TFIELDS = RFC_READ_TABLE.Tables("FIELDS") 'eQUERY_TAB.Value = pQueryTab ' pQueryTab is the R/3 name of the tableTOPTIONS.AppendRow ' new item lineTOPTIONS(1, "TEXT") = "MANDT EQ '000'"If RFC_READ_TABLE.Call = True Then If TDATA.RowCount > 0 Then MsgBox "Call to RFC_READ_TABLE successful! Data found" MsgBox TDATA(1, "WA") Else MsgBox "Call to RFC_READ_TABLE successful! No data found" End IfElse MsgBox "Call to RFC_READ_TABLE failed!"End IfEnd Sub

Das nachstehende Programmbeispiel zeigt noch einmal den Aufruf einesRFC-Bausteins an einem Stück. Um ein Vergleichsbeispiel zu haben, ver-wendet es diesmal den Aufruf des Bausteins RFC_GET_TABLE_ENTRIES.

Listing 4.5 Einfacher Aufruf von RFC_GET_TABLE_ENTRIES via RFC und VB

' Example calling BAPI RFC_GET_TABLE_ENTRIESOption ExplicitPublic Functions As SAPFunctionsOCX.SAPFunctionsPrivate LogonControl As SAPLogonCtrl.SAPLogonControlPrivate R3Connection As SAPLogonCtrl.Connection

Kap04.fm Seite 64 Dienstag, 22. April 2003 2:31 14

Page 65: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

Windows-zu-R/3-Connectivity mit DCOM 65

Dim Func As SAPFunctionsOCX.FunctionPublic iTABLE_NAME As SAPFunctionsOCX.ParameterPublic eNUMBER_OF_ENTRIES As SAPFunctionsOCX.ParameterPublic tENTRIES As SAPTableFactoryCtrl.Table

Private Sub Main() Dim ix As Integer Dim retcd As Boolean Dim SilentLogon As Boolean Set LogonControl = CreateObject("SAP.LogonControl.1") Set Functions = CreateObject("SAP.Functions") Set TableFactory = CreateObject("SAP.TableFactory.1") Set R3Connection = LogonControl.NewConnection R3Connection.Client = "000" R3Connection.ApplicationServer = "192.168.69.111" R3Connection.Language = "EN" R3Connection.User = "DEVELOPER" R3Connection.Password = "19920607" R3Connection.System = "WAS" R3Connection.SystemID = "$WebAS" R3Connection.SystemNumber = "18" R3Connection.UseSAPLogonIni = False SilentLogon = True retcd = R3Connection.Logon(0, SilentLogon) If retcd <> True Then MsgBox "Logon failed": Exit Sub Functions.Connection = R3Connection Set Func = Functions.Add("RFC_GET_TABLE_ENTRIES") Set iTABLE_NAME = Func.Exports("TABLE_NAME") Set eNUMBER_OF_ENTRIES = Func.Imports("NUMBER_OF_ENTRIES") Set tENTRIES = Func.Tables("ENTRIES") iTABLE_NAME.Value = "TCURR" Func.Call Debug.Print eNUMBER_OF_ENTRIES For ix = 1 To tENTRIES.RowCount

Kap04.fm Seite 65 Dienstag, 22. April 2003 2:31 14

Page 66: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

66 SAP R/3 Remote Function Call

Debug.Print tENTRIES(ix, 1) Next R3Connection.logoffEnd Sub

4.4 Helper-Klassen für den Zugriff auf R/3 via RFC

Hilfsklassen fürwiederkehrende

Arbeiten

Um Programme klarer zu gestalten und von immer wiederkehrendenRoutinearbeiten zu säubern, macht es Sinn, sich eine Reihe von Hilfsklas-sen zu erstellen. Im Folgenden sind ein paar Ideen aufgezeigt, wie solcheHelper-Klassen aussehen können. Diese sind weniger dazu gedacht,direkt und unverändert übernommen zu werden, vielmehr sollen sieAnregungen geben, was man alles machen kann oder bedenken sollte.

4.4.1 Class R3LogonObj

Logon von VBdurch die Klasse

R3LogonObj

In unseren Beispielen führen wir das Logon zu SAP R/3 von Visual Basicdurchweg mit einer selbst geschriebenen Proxy-Klasse R3LogonObjdurch. Diese Klasse führt den Logon zu SAP R/3 zentral durch, so dass wiruns nur an dieser Stelle um Logon-Daten wie Name des Applikationsser-vers, UserID, Passwort usw. kümmern müssen.

Referenz aufein Objekt

SAPFunctions-OCX.Functions

Die Klasse selbst exportiert dann im Wesentlichen das Objekt Functionsas SAPFunctionsOCX.Functions, das das zentrale Gateway zur RFC-Funktionsbibliothek von SAP R/3 darstellt.

Listing 4.6 Class R3LogonObj

Public Functions As SAPFunctionsOCX.SAPFunctionsPublic TableFactory As SAPTableFactoryCtrl.SAPTableFac-toryPublic SilentLogon As Boolean'------------------------------------------------------Private LogonControl As SAPLogonCtrl.SAPLogonControlPrivate myCredentials As New R3CredentialsPrivate retcdPrivate err As New ErrObjectPublic Property Get R3Connection() As SAPLogonCtrl.con-nection Set R3Connection = Me.Functions.connectionEnd Property

Kap04.fm Seite 66 Dienstag, 22. April 2003 2:31 14

Page 67: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

Helper-Klassen für den Zugriff auf R/3 via RFC 67

Private Property Set R3Connection(conn As SAPLogonC-trl.connection) Set Functions.connection = connEnd PropertyPublic Sub R3Logon() retcd = R3Connection.Logon(0, SilentLogon) If retcd <> True Then Exit Sub Else' MsgBox " Logon OK." End IfEnd SubPublic Sub R3logoff() R3Connection.logoffEnd SubPrivate Sub Class_Initialize() Set LogonControl = CreateObject("SAP.LogonControl.1") Set Functions = CreateObject("SAP.Functions") Set TableFactory = CreateObject("SAP.TableFactory.1") Set R3Connection = LogonControl.NewConnection myCredentials.Read R3Connection Me.SilentLogon = FalseEnd SubPrivate Sub Class_Terminate() Me.R3logoffEnd Sub

4.4.2 Class R3Credentials

Logon-Credenti-als stecken in R3Credentials

Die eigentlichen Logon-Credentials sind noch einmal in einer eigenenKlasse, den R3Credentials, realisiert. Das erlaubt uns, einen geheimenMechanismus zu implementieren, um die Logon-Daten zu verstecken.Diese Klasse kann dann in den Verantwortungsbereich der Systemadmi-nistration gegeben werden, die ohnehin die Logon-Daten verwaltet,ohne dass sie dem Anwendungsentwickler bekannt sind, denn der weistdie Daten durch die Methode READ automatisch dem Connection-Objektzu, ohne sie im Detail zu kennen.

Kap04.fm Seite 67 Dienstag, 22. April 2003 2:31 14

Page 68: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

68 SAP R/3 Remote Function Call

Listing 4.7 Class R3Credentials

Sub Read(ByRef oR3 As SAPLogonCtrl.Connection) Set LogonDataWS = Excel.Worksheets("LogonData") Set LogonData = LogonDataWS.Columns(2) R3Connection.Client = "000" R3Connection.ApplicationServer = "192.168.69.111" R3Connection.Language = "EN" R3Connection.User = "DEVELOPER" R3Connection.Password = "06071992" R3Connection.System = "WAS" R3Connection.SystemID = "$WebAS" R3Connection.SystemNumber = "18" R3Connection.UseSAPLogonIni = False Set LogonData = Nothing Set LogonDataWS = NothingEnd SubSub Class_Initialize()End SubSub Class_Terminate()End Sub

4.4.3 Alternative R3Credentials-Class

Zugriff überExcel-Sheet

Für den Zugriff von Visual Basic benutzen wir in unserer Entwicklungsum-gebung ein Excel-Sheet, das wir einfach mit den Zugriffsdaten mehrererSAP R/3-Systeme füllen. So können wir unsere Anwendung ohne vielAufwand auf mehreren SAP R/3-Systemen testen.

Im folgenden Beispiel sehen Sie ein VBA-Programm, das die Daten ausdem Excel-Sheet herausliest und den Parametern unserer Logon-Klassezuweist.

Listing 4.8 Class R3Credentials mit Daten aus Excel

Private LogonDataWS As Excel.WorksheetPrivate LogonData As Excel.RangeSub Read(ByRef oR3 As SAPLogonCtrl.Connection) Set LogonDataWS = Excel.Worksheets("LogonData") Set LogonData = LogonDataWS.Columns(2) oR3.ApplicationServer = LogonData.Cells(2) ' IP or DNS-Name of app server oR3.System = LogonData.Cells(3) ' System

Kap04.fm Seite 68 Dienstag, 22. April 2003 2:31 14

Page 69: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

Helper-Klassen für den Zugriff auf R/3 via RFC 69

ID of the instance oR3.SystemNumber = LogonData.Cells(4) ' Number of Database instance oR3.Client = LogonData.Cells(5) ' opt. Client number to logon to oR3.Language = LogonData.Cells(6) ' opt. Your login language oR3.User = LogonData.Cells(7) ' opt. Your user id oR3.Password = LogonData.Cells(8) ' opt. Your password oR3.SystemID = LogonData.Cells(9) ' System ID of the instance oR3.UseSAPLogonIni = True Set LogonData = Nothing Set LogonDataWS = NothingEnd SubSub Class_Initialize()End SubSub Class_Terminate()End Sub

Die Logon-Daten zu R/3 entsprechen denen aus der saplogon.ini.

Name Wert

Application server 192.168.69.111

System ID WAS

System Number 18

Client 000

Language EN

User DEVELOPER

Password ********

System Web AS

Silent Login FALSCH

Use SAPLOGON.INI FALSCH

Gateway

Tabelle 4.1 Beispiel für Logon-Daten (für die Web AS-Testversion)

Kap04.fm Seite 69 Dienstag, 22. April 2003 2:31 14

Page 70: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

70 SAP R/3 Remote Function Call

4.5 R/3 Java Connectivity

4.5.1 SAP R/3 Java Connector JCo

Der Zugriff von Java auf SAP R/3 erfolgt über den Java Connector (JCo). Jenach Plattform gibt es dafür eine kompatible Implementierung, so dass dieAufrufe von Java auf SAP R/3 unabhängig von der Umgebung bleiben. Ineiner Windows-Umgebung ist der Java Connector eine Java-Klassenbib-liothek, die über das JNI (Java Native Interface) die Funktionen der RFC-Library librfc32.dll aufruft.

JCo ist die einzigeempfohleneRFC-Klasse

Der Java Connector ist die einzige unterstützte RFC-Schnittstelle von Javanach SAP R/3. Alle früheren Java-Tools für RFC werden von SAP nichtmehr unterstützt. Der Java Connector wurde ursprünglich von ThomasSchüssler, http://arasoft.de, entwickelt und kann von Kunden und regist-rierten SAPNet-Usern über http://service.sap.com heruntergeladen wer-den. JCo ist derzeit für alle NT-Varianten verfügbar sowie für UNIX, AIXund Linux. Die früher noch unterstützte Bibliothek jRFC wird von SAPnicht mehr ausgeliefert und es wird empfohlen, Anwendungen auf JCoumzustellen.

4.5.2 SAP R/3-Logon mit Java

JCo unterstütztXML-Konver-

tierung

Im nachstehenden Listing erfolgt der Aufruf auf das BAPI BAPI_EXCHRATE_GETCURRENTRATES von Java. Eine Besonderheit des Java-Connectors ist es, dass die Funktionsbausteinparameter bereits eineintrinsische Konvertierung nach XML unterstützen und wir deshalb durchAufruf der Methode toXML() das Ergebnis sofort in XML ausgeben kön-nen:

System.out.println(myFunc.tEXCH_RATE_LIST.toXML());

Listing 4.9 Einfacher Aufruf von BAPI_EXCHRATE_GETCURRENTRATES via RFC und Java

package R3;import com.sap.mw.JCo.*;public class R3Test extends Object { public static BAPI_EXCHRATE_GETCURRENTRATES myFunc; public static void main (String args[]) { R3RFCfunctions funcs = new R3RFCfunctions(); System.out.println("** SYS: Repository created.");

Kap04.fm Seite 70 Dienstag, 22. April 2003 2:31 14

Page 71: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

R/3 Java Connectivity 71

funcs.Logon(); myFunc = new BAPI_EXCHRATE_GETCURRENTRATES (funcs, "BAPI_EXCHRATE_GETCURRENTRATES"); myFunc.iDATE.setValue("20030101"); myFunc.Execute(); System.out.println(myFunc.tEXCH_RATE_LIST. toXML()); } }

package R3;import com.sap.mw.JCo.*;public class BAPI_EXCHRATE_GETCURRENTRATES // extends R3RFCfunctions{ public JCO.Function func; private R3RFCfunctions functions; public JCO.Field iDATE; public JCO.Table tEXCH_RATE_LIST; public BAPI_EXCHRATE_GETCURRENTRATES( R3RFCfunctions funcRepository, String funcname) { functions = funcRepository; func = functions.add(funcname.toUpperCase());//---- Set vectors to the appropriate parameters iDATE = func.getImportParameterList() .getField("DATE"); tEXCH_RATE_LIST = func.getTableParameterList() .getTable("EXCH_RATE_LIST"); try functions.add(funcname. toUpperCase()); } catch (Exception ex) { } } public void Execute() {functions.R3session.Connection.execute(func);} }

package R3;import com.sap.mw.JCo.*;public class R3RFCfunctions extends R3RFCrepository

Kap04.fm Seite 71 Dienstag, 22. April 2003 2:31 14

Page 72: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

72 SAP R/3 Remote Function Call

{ public R3RFCfunctions() {} public JCO.Function add(String name) { try { return super.R3session.Func-tions.getFunctionTemplate (name.toUpperCase()).getFunction();} catch (Exception ex) {} return null; } public class R3RFCrepository{ public R3LogonObj R3session; public R3RFCrepository() { R3session = new R3LogonObj(); } public R3RFCrepository(R3LogonObj ActiveSession) { R3session = ActiveSession; } public void Logon() { R3session.Connection.connect();} public void Logoff() { R3session.Connection.disconnect();} }

package R3;import com.sap.mw.JCo.*;public class R3LogonObj {public JCO.Repository Functions; public boolean SilentLogon; public JCO.Client Connection; public R3LogonObj() { try {R3.R3Credentials myCred = new R3.R3Credentials(); Connection = myCred.Connect(); } catch (Exception ex) { ex.printStackTrace();System.exit(1);} try {Functions = new JCO.Repository("logosworld", Connection);} catch (Exception ex) { ex.printStackTrace();System.exit(1);} } }

Kap04.fm Seite 72 Dienstag, 22. April 2003 2:31 14

Page 73: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

Das SAP RFC-Gateway 73

4.6 Das SAP RFC-GatewayRFC-ListenerMit Hilfe des SAP RFC-Gateways können Sie einem externen Programm,

dem RFC-Listener, erlauben, sich selbst als Proxy-Server bei SAP R/3 anzu-bieten. Dadurch müssen in SAP R/3 selbst keine Verbindungsdaten zumListener gepflegt werden. SAP R/3 spricht den Listener über das Gatewayals eine RFC-Destination mit dem Namen an, unter dem der Listener sichzuvor bei SAP R/3 registriert hat.

4.6.1 Registrierung eines RFC-Listeners beim SAP-Gate-way

Folgendes ist ein Beispiel einer Registrierung am Gateway:

Srfcserv –aMYHOST.srfcserv –gSAPR3.logosworld.com –xSAPGW00 –t

Das gezeigte Beispiel registriert sich selbst über Gateway SAPGW00 beider SAP R/3-Instanz mit dem Namen SAPR3.logosworld.com.

Der Name des SAP-Gateways ist von der Form SAPGWxx, wobei xx dieSystem-Nummer der zugehörigen SAP R/3-Instanz ist. SAPGW00 gehörtalso zur Datenbank-Instanz »00«. Das Gateway des Demo-Web AS istSAPGW18, da dieses sich auf Datenbankinstanz 18 installiert.

Parameter können auch in saprfc.ini hinterlegt werden

Anstatt die Parameter in der Kommandozeile anzugeben, können dieseauch in der Datei saprfc.ini hinterlegt werden. saprfc.ini muss im selbenVerzeichnis wie der zu registrierende RFC-Server liegen.

Listing 4.10 Beispiel einer SAPRFC.INI

/*===================================================*//* Type R: Register a RFC server program at a SAP gateway *//* or connect to an already registered RFC server program *//*===================================================*/DEST=RFCEXT_LISTENERTYPE=RPROGID=SAPR3.srfcservGWHOST=SAPr3.logosworld.comGWSERV=sapgw00RFC_TRACE=0

Kap04.fm Seite 73 Dienstag, 22. April 2003 2:31 14

Page 74: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

74 SAP R/3 Remote Function Call

SMGW zeigtregistrierte

Gateway-Dienste

Eine Übersicht der aktuell angemeldeten Dienste am SAP-Gateway liefertdie Transaktion SMGW unter dem Menüpunkt Logged Systems.

Listing 4.11 Optionen der Registrierung eines RFC-Servers an einem SAP-Gateway

C:\Programme\sapgui46b\SAPGUI\RFCSDK\bin>srfcservSyntax for start and run in register mode: srfcserv [options] with options = -D<destination with type 'R' in saprfc.ini> = -t RFC-Trace on or options = -a<program ID> e.g. <own host name>.srfcserv = -g<SAP gateway host name> e.g. hs0311 = -x<SAP gateway service> e.g. sapgw53 = -t RFC-Trace on = -L<SNC library, optional> = -S<SNC myname, optional> = -Q<SNC quality of protection, optional> Option L, S and Q can be set if working with SNC (Secure Network Communication).

4.6.2 Anlegen einer RFC-Destination für einen registrier-ten Listener

Um auf einen SAP-Gateway-Service zugreifen zu können, müssen Sie inder rufenden Instanz das Gateway als Destination in Transaktion SM59bekannt machen. An Stelle der festen IP-Adresse des zu rufenden Serversgeben Sie in diesem Fall den Namen an, unter dem sich das Gateway beiseiner Registrierung bei SAP bekannt macht.

4.6.3 Eigene RFC-Listener erstellen

Kompletter Codeeines Gateway-

Servers imRFC-SDK

Das SAP RFCSDK listet den kompletten Sourcecode der in C geschriebe-nen RFC-Listener rfcexec und srfcserv. Die ausführliche Dokumenta-tion zur Entwicklung eines Listeners findet sich in der Hilfe zum RFCSDKin saprfc.hlp.

Kap04.fm Seite 74 Dienstag, 22. April 2003 2:31 14

Page 75: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

Das SAP RFC-Gateway 75

Listing 4.12 Abbildung 1.10Extrakte aus der Implementierung des rfcexec-Servers

static RFC_RC DLL_CALL_BACK_FUNCTION _loadds remote_pipe( RFC_HANDLE handle );static RFC_RC DLL_CALL_BACK_FUNCTION _loadds remote_file( RFC_HANDLE handle );static RFC_RC DLL_CALL_BACK_FUNCTION _loadds remote_exec( RFC_HANDLE handle );static RFC_RC DLL_CALL_BACK_FUNCTION _loadds mail ( RFC_HANDLE handle );/* main function for an RFC server program *//*ARGSUSED*/main( int argc, char ** argv ){ /* initialized data */ static RFC_ENV env; RFC_HANDLE handle; RFC_RC rc; if (argc == 1) { help(); return 0; }/* install error handler */ env.errorhandler = myErrorhandler; RfcEnvironment( &env );/* accept connection * (command line argv must be passed to RfcAccept) */ handle = RfcAccept( argv );/* static function to install offered function modules */ rc = install(handle); if( rc != RFC_OK ) {/* if error occured, close connection with error mes-sage and exit */ RfcAbort( handle, "Initialization error" ); exit(1); }static RFC_RC DLL_CALL_BACK_FUNCTION _loadds remote_pipe( RFC_HANDLE handle ){ char command[256]; RFC_PARAMETER parameter[4]; RFC_TABLE table[2]; RFC_RC rc;

Kap04.fm Seite 75 Dienstag, 22. April 2003 2:31 14

Page 76: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

76 SAP R/3 Remote Function Call

RFC_CHAR read_flag = 0; int mode; memset( command, 0, sizeof( command ) ); parameter[0].name = "COMMAND"; parameter[0].nlen = 7; parameter[0].addr = (void *) command; parameter[0].leng = sizeof(command); parameter[0].type = RFCTYPE_CHAR; parameter[1].name = "READ"; parameter[1].nlen = 4; parameter[1].addr = (void *) &read_flag; parameter[1].leng = sizeof(read_flag); parameter[1].type = RFCTYPE_CHAR; parameter[2].name = NULL; table[0].name = "PIPEDATA"; table[0].nlen = 8; table[0].type = RFCTYPE_CHAR; table[0].leng = table_size; table[0].itmode = RFC_ITMODE_BYREFERENCE; table[1].name = NULL; rc = RfcGetData( handle, parameter, table ); if( rc != RFC_OK ) return rc;#ifdef SAPonWINDOWS RfcAbort(handle, "Function RFC_REMOTE_PIPE is not supported on Windows"); exit(1);#endif if( read_flag != 'X' ) mode = RUN_WAIT; else mode = RUN_READ; rc = run( handle, command, sizeof(command), table[0].ithandle, mode, (RFC_INT *)0 ); if( rc != RFC_OK ) return rc; parameter[0].name = NULL; rc = RfcSendData( handle, parameter, table ); return rc;} /* remote_pipe */

Kap04.fm Seite 76 Dienstag, 22. April 2003 2:31 14

Page 77: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

Troubleshooting RFC 77

4.7 Troubleshooting RFCSRFCTEST zum Testen von RFC

Es existiert ein Standard-ABAP in SAP R/3, SRFCTEST, in dem die wich-tigsten RFC-Möglichkeiten sehr gut demonstriert werden und auch gleichgetestet werden können.

Lokaler TestWenn ein Zugriff via SAP R/3 permanent versagt, testen Sie diegewünschte Funktionalität immer zunächst lokal im Zielsystem. Zum Bei-spiel setzen die Aufrufe über LOCAL_EXEC voraus, dass rfcexec.exe sichim Zugriffspfad des SAP GUI auf der Workstation befindet. In diesem Fallsollten Sie auf der Arbeitsstation ein DOS-Fenster öffnen und versuchen,rfcexec von einem beliebigen Verzeichnis auszuführen. Klappt diesnicht, müssen Sie rfcexec.exe in eines der Verzeichnisse kopieren, die mitdem PATH-Kommando angezeigt werden, oder Sie müssen den Suchpfadentsprechend erweitern.

Klappt das lokale Ausführen der Programme, haben Sie vermutlich einProblem mit der RFC-Verbindung an sich. Denkbar sind folgende häufigeStörgründe:

� Bei Aufrufen über Frontend ist die Wahrscheinlichkeit groß, dass dasSAP GUI unvollständig oder fehlerhaft installiert wurde. Hier empfiehltsich immer eine Neuinstallation des SAP GUI, um zu sehen, ob dasvielleicht schon den Fehler behebt.

� Prüfen Sie auch die TCP/IP-Verbindungsstrecke vom SAP-Applikations-server zur RFC-Destination. Das können Sie tun, indem Sie auf demApplikationsserver TELNET aufrufen, sich als SAP-Administrator anmel-den (normalerweise USER=SAPsid, wobei sid die System-ID ist) undvon dort einen PING auf die IP-Adresse der RFC-Destination durchfüh-ren. Auch das TRACEROUTE-Utility zum Anzeigen aller Verbindungs-knoten vom Aufrufer bis zum Ziel kann weitere Erkenntnisse geben(Name in Windows: tracert.exe).

Abbildung 4.5 Aufruf von rfcexec.exe über eine DOS-Box

Kap04.fm Seite 77 Dienstag, 22. April 2003 2:31 14

Page 78: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

78 SAP R/3 Remote Function Call

4.8 Aufruf von Remote Programs aus R/3 Via RFC

4.8.1 RFC via Remote Shell

Um Programme auf einem entfernten Rechner auszuführen, muss dieserzunächst dafür eingerichtet werden, Remote Program Calls zu akzeptie-ren. Dazu muss ein TCP/IP-Port auf dem Zielrechner so konfiguriert sein,dass er ankommende Nachrichten als Programmaufruf akzeptiert.

UNIX unterstütztstandardmäßig

RPC-Aufrufe

Um von einem UNIX-Rechner ein Programm auf einem anderen UNIX-Rechner aufzurufen, können Sie das Programm RSH (manchmal auchRSHELL) benutzen. RSH nimmt als Parameter die IP-Adresse des Zielrech-ners und einen String, der eine gültige Kommandozeile auf dem Zielrech-ner darstellen muss. Beachten Sie, dass RSH auf dem R/3-Applikationsser-ver ausgeführt wird, gegebenenfalls müssen Sie den Namen desZielrechners explizit spezifizieren.

Abbildung 4.6 Erfolgreicher und nicht erfolgreicher PING eines Remote-Computers

Abbildung 4.7 TRACERT zum Finden eines IP-Hosts

Kap04.fm Seite 78 Dienstag, 22. April 2003 2:31 14

Page 79: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

Aufruf von Remote Programs aus R/3 Via RFC 79

UNIX nach Windows

Falls der Zielrechner ein Windows-Rechner ist, müssen Sie auf diesem einUtility installieren, das die RSH-Aufrufe entgegennimmt. Ein bewährtesTool ist der ATAMAN-Manager von ATAMAN.COM.

Windows nach Windows

Falls R/3 und die zu rufende Applikation beide auf einem Windows NT/2000-System laufen, können Sie für den Aufruf auch DCOM verwenden.

Rfcexec für einfache Anwendungen

Falls Sie wenig Erfahrung mit solchen Remote-Aufrufen haben, sollten Siedie Aufrufe immer durch das SAP-Utility rfcexec durchführen. Dies istnormalerweise als RFC-Destination SERVER_EXEC vordefiniert. Zuvortesten Sie dann den Aufruf des Programms auf dem Remote-System vonder Kommandozeile des SAP-Applikationsservers aus. Denn die Aufruf-Kette ist immer die folgende:

1. R/3 bestimmt über die in Transaktion SM59 gegebene Definition, wel-ches Programm aufgerufen werden soll, im Fall der DestinationSERVER_EXEC findet R/3 das Programm rfcexec.

2. Der R/3-Kernel führt jetzt das Programm rfcexec zusammen miteventuellen Parametern auf dem Rechner aus, dessen IP-Adresse inSM59 angegeben wurde.

3. rfcexec ruft eine Command-Shell auf und übergibt dieser die Parame-ter zur Ausführung.

4. rfcexec fängt die Ergebnisse ab und gibt sie an das rufende R/3-Sys-tem zurück.

4.8.2 RFC über Webserver

Sicherheit durch Gateway-Proxies

Im Zuge der Standardisierung von RPC-Aufrufen hat es sich heutebewährt, Daten und Programmaufrufe ausschließlich über HTTP auszu-tauschen. Dazu wird auf allen potenziellen Zielrechnern für unsereRemote-Aufrufe ein HTTP-Server installiert, sofern diese nicht ohnehinschon eingerichtet sind, wie es bei fast allen modernen Windows NT/2000-Systemen und den meisten Linux-Systemen der Fall ist.

Alle Remote-Aufrufe sind fortan ausschließlich HTTP-GET- oder HTTP-POST-Requests, die vom HTTP-Server interpretiert werden. Diegewünschte Aktion wird dann durch die aufgerufene ASP, JSP oder CGI-Page durchgeführt. Damit reduziert sich die Installation der RFCs auf SAP-Seite auf die Konfiguration der HTTP-Server.

Kap04.fm Seite 79 Dienstag, 22. April 2003 2:31 14

Page 80: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

80 SAP R/3 Remote Function Call

4.8.3 Aufruf eines Programms auf der Workstation mit RFC

R/3 verwendet die klassische Client-Server-Technik, um Programme aufeinem Remote-Rechner aufzurufen, wobei die Applikation auf demRemote-Rechner den Server darstellt und R/3 in die Client-Rolle schlüpft.

Rfcexec.exe dientals RFC-Server

für R/3

Dabei muss das zu rufende Programm den Konventionen des RFC-Proto-kolls entsprechen. Um Ihnen zu ersparen, jedes Mal dieses Protokoll inIhre Anwendung einzubinden, existiert ein Standard-RFC-Server rfce-xec, der als Proxy zwischen R/3 und einem Betriebssystemkommandodient.

rfcexec stellt festeFunktionsaufrufe

bereit

Das rfcexec-Objekt stellt die in der folgenden Tabelle aufgelistetenMethoden zur Verfügung. Diese erlauben im Wesentlichen, ein auszufüh-rendes Betriebssystemkommando zu übergeben und je nach Methodewahlweise den Ergebnisdatenstrom abzufangen und im rufenden Pro-gramm zur Verfügung zu stellen.

Methode Beschreibung

RFC_REMOTE_PIPEFUNCTION 'RFC_REMOTE_EXEC' IMPORTING command EXCEPTIONS system_failure communication_failure

Programm mit rfcexec ausführen.

RFC_REMOTE_PIPEFUNCTION 'RFC_REMOTE_PIPE' IMPORTING command TABLES pipedata(80) EXCEPTIONS system_failure communication_failure

Ein Programm ausführen, das Eingabe-daten durch die Inputpipe übernimmt und die Ergebnisse der Resultpipe zurückgibt. Die Resultpipe ist gewöhn-lich der Textdatenstrom, der von einer UNIX- oder DOS-Box zurückgegeben wird. Wenn Sie z.B. dir > mydata.txt aus-führen, wird das Ergebnis in die Datei mydata.txt umgeleitet. RFC_REMOTE_PIPE fängt diesen Datenstrom ab und tritt somit an die Stelle des Ausgabefiles.

file: = Name der Remote-Datei

pipedata: = Daten, die in die Input-pipe geschrieben werden

Tabelle 4.2 Vordefinierte Methoden des rfcexec.exe-Programms

Kap04.fm Seite 80 Dienstag, 22. April 2003 2:31 14

Page 81: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

Aufruf von Remote Programs aus R/3 Via RFC 81

Syntaktisch sind interne und externe RFC gleich

Für ABAP sieht der Aufruf von rfcexece wie jeder andere RFC-Funkti-onsbaustein aus. Dem ABAP-Programm können Sie also nicht ansehen,dass der gerufene Funktionsbaustein kein R/3-Funktionsbaustein ist. DieDestination des Aufrufs wird mit dem Parameter Destination angege-ben und muss zuvor mit Transaktion SM59 definiert worden sein.

rfcexec.exe über Destination LOCAL_EXEC auf-rufen

In SAP R/3 ist standardmäßig eine RFC-Destination LOCAL_EXEC vorde-finiert, die das Programm rfcexec auf der Workstation des aktuellenUsers aufruft. SAP R/3 kommuniziert dazu über das SAP GUI, das dannüber OLE die gewünschte Aktion ausführt. rfcexec ist ein RFC-Server-program, das ein als Parameter mitgegebenes Programm auf der Kom-mandozeile von Windows ausführt und den zurückerhaltenen Daten-strom an SAP R/3 zurückmeldet.

Listing 4.13 Ausführen eines Programms auf einer Workstation von R/3 aus mit RFC_REMOTE_EXEC

DATA: command(256) DEFAULT 'echo Hello World. >> rfc-test.dat'DATA: rfc_mess(128).CALL FUNCTION 'RFC_REMOTE_EXEC' DESTINATION rfcdest EXPORTING command = command EXCEPTIONS system_failure = 1 MESSAGE rfc_mess communication_failure = 2 MESSAGE rfc_mess.

RFC_REMOTE_FILE

FUNCTION 'RFC_REMOTE_FILE' IMPORTING file(256) Write(1) TABLES filedata(80)

EXCEPTIONS system_failure

communication_failure

Lesen und Schreiben einer Datei via RFC.

file: = Name der Remote-Datei

write: = falls write=’X’, wird file-data in die Datei geschrieben, ansons-ten wird die Datei gelesen und deren Inhalt in filedata retourniert.

filedata: = Inhalt der Datei

Methode Beschreibung

Tabelle 4.2 Vordefinierte Methoden des rfcexec.exe-Programms

Kap04.fm Seite 81 Dienstag, 22. April 2003 2:31 14

Page 82: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

82 SAP R/3 Remote Function Call

Listing 4.14 Ausführen eines Programms auf einer Workstation von R/3 aus mit RFC_REMOTE_PIPE

DATA: command(256) DEFAULT 'echo Hello World. >> rfc-test.dat'DATA: rfc_mess(128).DATA: pipedata(80) occurs 0 with header line.CALL FUNCTION 'RFC_REMOTE_PIPE' DESTINATION rfcdest EXPORTING command = command read = 'X' TABLES pipedata = pipedata EXCEPTIONS system_failure = 1 MESSAGE rfc_mess communication_failure = 2 MESSAGE rfc_mess.

Listing 4.15 Lesen einer Datei von der Workstation von R/3 aus mit RFC_REMOTE_FILE

DATA: command(256) DEFAULT 'echo Hello World. >> rfc-test.dat'DATA: rfc_mess(128).DATA: pipedata(80) occurs 0 with header line.CALL FUNCTION 'RFC_REMOTE_FILE' DESTINATION rfcdest EXPORTING file = filename write = write "space: read the file; 'X': save filedata to filename TABLES filedata = filedata EXCEPTIONS system_failure = 1 MESSAGE rfc_mess communication_failure = 2 MESSAGE rfc_mess.

Kap04.fm Seite 82 Dienstag, 22. April 2003 2:31 14

Page 83: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

Aufruf von Remote Programs aus R/3 Via RFC 83

Abbildung 4.8 Settings der vordefinierten RFC-Destination LOCAL_EXEC in SM59

Abbildung 4.9 Settings der vordefinierten RFC-Destination SERVER_EXEC in SM59

Kap04.fm Seite 83 Dienstag, 22. April 2003 2:31 14

Page 84: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

84 SAP R/3 Remote Function Call

4.8.4 Aufruf eines HTTP-Webservers von SAP R/3

DestinationSAPHTTPA

Um einen HTTP-Server aufzurufen, stellt SAP R/3 bereits geeignete RFC-Utilities zur Verfügung. Dabei handelt es sich um ein Utility SAPHTTP, dasauf dem SAP R/3-Applikationsserver ausgeführt wird. Alternativ kannSAPHTTP auch auf dem Frontend über SAP GUI ausgeführt werden.

FunktionenHTTP_GET und

HTTP_POST

Standardmäßig ist eine RFC-Destination SAPHTTPA bereits mit Transak-tion SM59 vordefiniert. Über diese können Sie dann HTTP-Anfragen ver-senden. Die beiden Funktionsbausteine HTTP_GET und HTTP_POSTerleichtern Ihnen dabei die Arbeit (siehe Listing ### und Listing ###).

Listing 4.16 Abruf einer URL mit ABAP

DATA: ABSOLUTE_URI(128) type c.data: response_headers(80) occurs 0 with header line.data: RESPONSE_ENTITY_BODY(120) occurs 0 with header line.ABSOLUTE_URI ='http://xml.amazon.com/onca/xml2?t=webservices-20' &'&tag=logosworldcom&dev-t=D2H3YO46KJJ615' &'&AsinSearch=3528057297&type=lite&f=xml'.CALL FUNCTION 'HTTP_GET' EXPORTING ABSOLUTE_URI = ABSOLUTE_URI RFC_DESTINATION = 'SAPHTTPA' PROXY = '192.168.69.64:8080'* IMPORTING* STATUS_CODE =* STATUS_TEXT =* RESPONSE_ENTITY_BODY_LENGTH = TABLES* REQUEST_ENTITY_BODY = RESPONSE_ENTITY_BODY = RESPONSE_ENTITY_BODY RESPONSE_HEADERS = RESPONSE_HEADERS* REQUEST_HEADERS = EXCEPTIONS CONNECT_FAILED = 1 TIMEOUT = 2 INTERNAL_ERROR = 3 TCPIP_ERROR = 4

Kap04.fm Seite 84 Dienstag, 22. April 2003 2:31 14

Page 85: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

Aufruf von Remote Programs aus R/3 Via RFC 85

DATA_ERROR = 5 SYSTEM_FAILURE = 6 COMMUNICATION_FAILURE = 7 OTHERS = 8 .IF SY-SUBRC <> 0. write: / sy-subrc.ENDIF.loop at response_entity_body. write: / response_entity_body.endloop.

Listing 4.17 Ergebnis der HTTP-Anfrage mit HTTP_GET

Test for function group SFTP Function module HTTP_GET Upper/lower case Import parameters Value ABSOLUTE_URI http://localhost/postinfo.html REQUEST_ENTITY_BODY_LENGTH 0 RFC_DESTINATION SAPHTTP PROXY PROXY_USER PROXY_PASSWORD USER PASSWORD BLANKSTOCRLF Export parameters Value STATUS_CODE 200 STATUS_TEXT OK RESPONSE_ENTITY_BODY_LENGTH 2.651 Tables Value REQUEST_ENTITY_BODY 0 Entries Result: 0 Entries RESPONSE_ENTITY_BODY 0 Entries Result: 14 Entries RESPONSE_HEADERS 0 Entries

Kap04.fm Seite 85 Dienstag, 22. April 2003 2:31 14

Page 86: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

86 SAP R/3 Remote Function Call

Result: 11 Entries REQUEST_HEADERS 0 Entries Result: 0 Entries

Die HTTP-Header-Daten werden in genau der gleichen Form zurückgege-ben, wie sie im HTTP-Datenstrom empfangen werden:

Listing 4.18 HTTP-Header in Tabelle RESPONSE_HEADERS

HTTP/1.1 200 OK Server: Microsoft-IIS/5.0 Cache-Control: no-cache Expires: Sat, 08 Sep 2001 12:36:33 GMT Date: Sat, 08 Sep 2001 12:36:33 GMT Content-Type: text/html Accept-Ranges: bytes Last-Modified: Sun, 21 Jan 2001 14:24:08 GMT ETag: "0b4b1d0b583c01:96a" Content-Length: 2651 <blank line>

4.8.5 Proxy-Settings in ABAP

Proxy-Settings inTabelle THTTP

Falls ABAP die HTTP-Aufrufe über einen HTTP-Proxy ausführen muss,kann der Proxy für den ganzen Mandanten in der Tabelle THTTP vordefi-niert werden. Dabei geht SAP davon aus, dass der erste Eintrag in THTTPdie Angaben des System-Proxy darstellt.

Listing 4.19 Standardcoding zum Bestimmen des Proxy für ABAP-HTTP-Requests

form set_http_proxy using uri proxy proxy_user proxy_password. data: proxyflag type c. if proxy ne space. exit. endif. select single * from thttp. if thttp-exitfunc ne space. call function thttp-exitfunc exporting absolute_uri = uri importing proxy = proxyflag. if proxyflag eq 'X'. proxy = thttp-proxy.

Kap04.fm Seite 86 Dienstag, 22. April 2003 2:31 14

Page 87: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

RFC von SAP R/3 auf Windows 87

proxy_user = thttp-puser. proxy_password = thttp-ppassword. endif. endif.endform.

Zum besseren Verständnis sehen Sie hier die Struktur der Tabelle THTTP:

4.9 RFC von SAP R/3 auf Windows

4.9.1 Kommunikation mit Excel via OLE/2 und HTTP-Server

Excel ist eines der Akzeptanztools für PCs

Eines der beliebtesten Tools im Enterprise-Computing ist die Tabellenkal-kulation. Die einfache und einleuchtende Bedienung und die Möglich-keit, wiederkehrende Berechnungen in einer WYSIWYG-Umgebung ohneHilfe von EDV-Spezialisten vorzunehmen, ist etwas, das Sachbearbeiter inhohem Maße schätzen.

Da entsteht sehr rasch der Wunsch, die Daten in Excel zu erfassen, aberdoch sofort in SAP zur Verfügung zu haben, ohne diese mehrfach zuerfassen. Zur Lösung dieses Problems gibt es wie so oft mehrere Ansätze.SAP R/3 ist sehr wohl in der Lage, auf ein beliebiges DCOM-Objekt einesWindows-Rechners zuzugreifen und darauf OLE-Befehle abzusetzen. Esgibt auch hier die Möglichkeit eines 2-Tier- und eines 3-Tier-Ansatzes.

2-Tier: Direkt-zugriff via R/3-OLE auf Excel

R/3 bietet eine RFC-zu-OLE-Brücke für ABAP an. Damit kann man überdas SAP GUI mit einem auf der Workstation des Benutzers befindlichenOLE-Objekt kommunizieren. Hinreichende Beispiele für jemanden, derein wenig von VBA-Programmierung in MS Excel, MS Word und so weiterversteht, finden sich in der Transaktion /nOLE2. Der Nachteil dieserLösung ist natürlich, dass das Arbeitsblatt von der Arbeitsstation desangemeldeten SAP R/3-Benutzers aus zugreifbar sein muss. Dies kannman allerdings leicht erreichen, indem man das Arbeitsblatt auf einemvon SAP R/3 zugreifbaren Netzwerk-Verzeichnis abspeichert.

MANDT MANDT CLNT Client

PROXY PROXY CHAR HTTP proxy host name

PUSER PROXY_USER CHAR User name for HTTP proxy

PPASSWORD PROXY_PWD CHAR Password for HTTP proxy

EXITFUNC RS38L_FNAM CHAR Name of function module

Tabelle 4.3 Struktur der Tabelle THTTP

Kap04.fm Seite 87 Dienstag, 22. April 2003 2:31 14

Page 88: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

88 SAP R/3 Remote Function Call

3-Tier: Zugriff viaMiddleware

Eine Alternative ist wiederum, die Kommunikation zwischen SAP R/3 undExcel über einen Middleware-Broker durchzuführen. Dazu schickt SAPR/3 seine Anfrage an den Broker, welcher die gewünschte Aufgabe mitExcel aushandelt und das Ergebnis an SAP R/3 zurückmeldet. DieseLösung ist in aller Regel leichter zu realisieren und vor allem ist sie deut-lich stabiler.

4.9.2 Zugriff auf ein Excel-Datenblatt von R/3

Beispiel zumdirekten Zugriff

In diesem Kapitel stellen wir eine Möglichkeit vor, direkt mit SAP R/3 aufein bestehendes Excel-Arbeitsblatt zuzugreifen, in diesem eine Kalku-lation anzustoßen und die Ergebnisse in SAP R/3 zu importieren. DieKommunikation findet dabei über die OLE2-Bridge des SAP GUI derArbeitsstation des Benutzers statt. Diese Technik funktioniert in dergeschilderten Weise nicht, wenn die Transaktion nicht online ausgeführtwird, weil dann kein SAP GUI im Zugriff ist.

Stücklisten-kalkulation als

Beispiel

Für das Beispiel haben wir ein Spreadsheet definiert, in dem eine Stück-liste aufgeführt ist. In dieser Stückliste kann man in einer Zelle eineMenge eintragen. Es sind Formeln hinterlegt, die aus der Eingabe dieMengen der Komponenten errechnen. Die einzelnen Sektionen sind inExcel benannt, so dass wir es einfacher haben, auf die einzelnen Bereichezuzugreifen.

Abbildung 4.10 Spreadsheet zur Berechnung der Stückliste (Bill of Material)

������� ��������������� �� ����

���� � ������ � ������� � ��� ���������� ������ ������������

� � ! ��� �����

� � ��� ��� ���� �� ��

� � ��� ��� ���� ������

� � ��� ��� ��� !���

" � � ��� ���#$%$�#� ���&'(�)

� � "�� �� ����*�+� !��'����

, � �� ��� ����-� (.���'

/ ��� /���� )�0 ��#� ��&

Kap04.fm Seite 88 Dienstag, 22. April 2003 2:31 14

Page 89: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

RFC von SAP R/3 auf Windows 89

Testprogramm in VBA

Zugriff auf die Daten durch ein VBA-Programm

Zum Zweck der Entwicklung entwerfen wir erst ein Testprogramm, dasdie gewünschten Aktionen durch ein VBA-Programm simuliert. Die Ent-wicklungsumgebung von VBA hilft uns dabei, durch die Intellisense-Hilfedie richtigen Befehle, Methoden und Properties der Excel-Objekte zu fin-den und im Debugger eine robuste Zugriffsform zu testen. Wenn wir dieAufrufe später von SAP R/3 aus machen, wird uns der Debugger nichtmehr zur Verfügung stehen, weshalb wir das Testen außerhalb von SAPR/3 vornehmen.

Listing 4.20 VBA-Routine zum Setzen und Auslesen der BOM-Werte

Sub Read_Values_From_EXCEL() Dim ix As Integer Dim cellvalue As String Dim rowcount As Integer Dim h_appl As Excel.Application Dim h_book As Excel.Workbook Dim h_books As Excel.Workbooks

Abbildung 4.11 Benannte Bereiche im Spreadsheet

Abbildung 4.12 Formeln zur Berechnung

������� ��������������� �� ����

���� � ������ � ������� � ��� ���������� ������ ������������

� " ��� �����

� � ��� ���� 12()�&3������

� � ��� ���� 1�3���

� � ��� ��� ��&3���

" "� "� ��� ���#$%$�#� ���3���

� �� ��� ����*�+� 2�)( 3���

, � �� ����-� �� 3���

/ � �� ��#� ���&3��� ����������

4���&0�&&�.& ��4���&

��������� ��������������� �� ����

��������� �������� � ���������� ���������� ���������� ����������

� ��� ��� �����

� � ��������� ��� ���� �� ��

� ��������! ��� ��"� �#����

$ � ��������% ��� &��� '#��

( ���� ��� ���)*+*�)� ����,-�.

/ $ ���������� �� ����0"1� '#�,����

2 � ��������� 32 ��� ����4� -5���,

� /�� ���������$ .�6 ��)� ��� �

Kap04.fm Seite 89 Dienstag, 22. April 2003 2:31 14

Page 90: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

90 SAP R/3 Remote Function Call

Dim h_sheet As Excel.Worksheet Dim h_sheets As Excel.Sheets Dim h_range As Excel.Range Dim h_rows As Excel.Range Dim h_cell As Excel.Range Dim h_name As Excel.Name Set h_appl = New Excel.Application h_appl.Visible = False Set h_books = h_appl.Workbooks Set h_book = h_books.Open(FileName:="U:\_DEMO\BOM\BOM.XLS") Set h_sheets = h_book.Worksheets h_sheets.Select Set h_sheet = h_sheets.Item("SUPERSAVER") Set h_name = h_sheet.Names("QUANT") Set h_range = h_name.RefersToRange cellvalue = h_range(RowIndex:=1, ColumnIndex:=1).Value Debug.Print "Quant", cellvalue cellvalue = cellvalue + 5 h_range(RowIndex:=1, ColumnIndex:=1).Value = cellvalue h_appl.CalculateFull Set h_name = h_sheet.Names("RETURNS") Set h_range = h_name.RefersToRange Set h_rows = h_range.Rows rowcount = h_rows.Count For ix = 1 To rowcount cellvalue = h_range(RowIndex:=ix, ColumnIndex:=1).Value Debug.Print ix, cellvalue Next ix h_book.Close savechanges:=False h_appl.Quit Set h_appl = NothingEnd Sub

Kap04.fm Seite 90 Dienstag, 22. April 2003 2:31 14

Page 91: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

RFC von SAP R/3 auf Windows 91

Testprogramm in ASP

Aufruf als ASP-Skript

In einem nächsten Schritt versuchen wir, den Code aus einer anderenUmgebung aufzurufen. Dazu erzeugen wir ein ASP-Script, um die Datenals Webseite zu erhalten. Das gleiche Script können wir auch später vonSAP R/3 aufrufen und haben so bereits eine 3-Tier-Lösung für den Durch-griff von SAP R/3 auf Excel.

Listing 4.21 ASP-Script zum Setzen und Auslesen der BOM-Werte via OLE

<%Function Read_Values_From_EXCEL_VBS(myquant, filename) Dim Resultstr Dim ix Dim cellvalue Dim rowcount Dim h_appl Dim h_book Dim h_books Dim h_sheet Dim h_sheets Dim h_range Dim h_rows Dim h_cell Dim h_name resultstr = myquant & Chr(13) & Chr(10) Set h_appl = CreateObject("Excel.Application")' h_appl.Visible = False Set h_books = h_appl.Workbooks Set h_book = h_books.Open(filename) Set h_sheets = h_book.Worksheets h_sheets.Select Set h_sheet = h_sheets.Item("SUPERSAVER") Set h_name = h_sheet.Names("QUANT") Set h_range = h_name.RefersToRange cellvalue = h_range(1, 1).Value cellvalue = myquant h_range(1, 1).Value = cellvalue h_appl.CalculateFull

Kap04.fm Seite 91 Dienstag, 22. April 2003 2:31 14

Page 92: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

92 SAP R/3 Remote Function Call

Set h_name = h_sheet.Names("RETURNS") Set h_range = h_name.RefersToRange Set h_rows = h_range.Rows rowcount = h_rows.Count For ix = 1 To rowcount cellvalue = h_range(ix, 1).Value resultstr = resultstr & CellValue cellvalue = h_range(ix, 3).Value resultstr = resultstr & "," & CellValue & chr(13) & chr(10) Next' h_book.Save h_book.Close False h_appl.Quit Set h_appl = Nothing Read_Values_From_EXCEL_VBS = resultstrEnd Function

Response.write Read_Values_From_EXCEL_VBS(105, "BOM.XLS")%>

Direktzugriff von SAP R/3 auf Excel

Zugriff viaOLE-Brücke

Die Syntax zum Setzen und Aufrufen von COM-Objekten aus SAP R/3heraus ist etwas von der in Visual Basic verschieden, weshalb wir dasCoding nicht 1:1 übernehmen können. In Listing ### ist die ABAP-Ver-sion zu sehen, die mit den VBA-Kommandos kommentiert ist.

Listing 4.22 ABAP-Routine zum Setzen und Auslesen der BOM-Werte via OLE

REPORT ydemo_excel_bom MESSAGE-ID sy.INCLUDE ole2incl. "<-- Contains the types for OLE-AccessPARAMETER: filename LIKE rlgrap-filename DEFAULT 'U:\_DEMO\BOM\BOM.xls'.* Dim h_appl As Excel.ApplicationDATA: h_appl TYPE ole2_object.* Dim h_books As WorkbooksDATA: h_books TYPE ole2_object.* Dim h_book As WorkbookDATA: h_book TYPE ole2_object.

Kap04.fm Seite 92 Dienstag, 22. April 2003 2:31 14

Page 93: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

RFC von SAP R/3 auf Windows 93

* Dim h_sheets As Excel.SheetsDATA: h_sheets TYPE ole2_object.* Dim h_sheet As WorksheetDATA: h_sheet TYPE ole2_object.DATA: x_sheet TYPE ole2_object.* Dim h_name As NameDATA: h_name TYPE ole2_object.* Dim h_range As RangeDATA: h_range TYPE ole2_object.* Dim h_rows As RangeDATA: h_rows TYPE ole2_object.* Dim h_cell As RangeDATA: h_cell TYPE ole2_object.DATA: cellvalue(29).DATA: rowcount TYPE i.START-OF-SELECTION.* Set h_appl = New Excel.Application CREATE OBJECT h_appl 'EXCEL.APPLICATION'. IF sy-subrc NE 0. MESSAGE i002 WITH sy-msgli. ENDIF.* h_appl.Visible = True SET PROPERTY OF h_appl 'VISIBLE' = 1 .* Set h_books = h_appl.Workbooks GET PROPERTY OF h_appl 'WORKBOOKS' = h_books .* Set h_book = h_books.Open(Filename:= "\BOM.*XLS") CALL METHOD OF h_books 'OPEN' = h_book EXPORTING #filename = filename.* GET PROPERTY OF h_appl 'ACTIVEWORKBOOK' = h_book.* Set h_sheets = h_book.Worksheets GET PROPERTY OF h_book 'WORKSHEETS' = h_sheets .* Set h_sheet = h_sheets.Item("SUPERSAVER")* GET PROPERTY OF h_book 'ACTIVESHEET' = h_sheet. CALL METHOD OF h_sheets 'ITEM' = h_sheet EXPORTING #index = 'SUPERSAVER' .****** Modify the Pivot Cell *************************** Set h_name = h_sheet.Names("QUANT") CALL METHOD OF h_sheet 'NAMES' = h_name EXPORTING #index ='QUANT' .* Set h_range = h_name.RefersToRange GET PROPERTY OF h_name 'REFERSTORANGE' = h_range.

Kap04.fm Seite 93 Dienstag, 22. April 2003 2:31 14

Page 94: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

94 SAP R/3 Remote Function Call

CALL METHOD OF h_range 'CELLS' = h_cell EXPORTING #1 = 1 #2 = 1. GET PROPERTY OF h_cell 'VALUE' = cellvalue. WRITE: / 'Old value':, cellvalue. cellvalue = cellvalue + 5. WRITE: / 'New value':, cellvalue. ULINE. SET PROPERTY OF h_cell 'VALUE' = cellvalue. CALL METHOD OF h_appl 'CALCULATEFULL'.****** Now, Pick up results **************************** Set h_name = h_sheet.Names("SUBQUANT") CALL METHOD OF h_sheet 'NAMES' = h_name EXPORTING #index ='RETURNS'.* Set h_range = h_name.RefersToRange GET PROPERTY OF h_name 'REFERSTORANGE' = h_range.* GET PROPERTY OF h_appl 'ACTIVECELL' = h_range.* cellvalue = h_cell.Value CALL METHOD OF h_range 'ROWS' = h_rows.* Set h_rows = h_range.Rows CALL METHOD OF h_rows 'COUNT' = rowcount.

DO rowcount TIMES. CALL METHOD OF h_range 'CELLS' = h_cell EXPORTING #1 = sy-index #2 = 1.* EXPORTING #rowindex = 1 #columnindex = sy-index. CALL METHOD OF h_cell 'VALUE' = cellvalue. WRITE: / sy-index, cellvalue. ENDDO.* h_book.Close false* CALL METHOD OF h_book 'SAVE'. CALL METHOD OF h_book 'CLOSE' EXPORTING #1 = 0.* h_appl.Quit CALL METHOD OF h_appl 'QUIT'.* Set h_appl = Nothing FREE OBJECT h_appl.

Kap04.fm Seite 94 Dienstag, 22. April 2003 2:31 14

Page 95: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

Business-Objekte und BAPI 95

4.10 Business-Objekte und BAPI

Eine der großen Stärken von SAP R/3 liegt darin, dass es Geschäftspro-zesse de facto standardisiert. Solche Quasi-Standards werden als Busi-ness-Objekte bezeichnet. Um auf die Business-Objekte zugreifen zu kön-nen, wurden für diese Schnittstellen geschaffen, die als BAPI bezeichnetwerden.

Business-Objekte sind formale Modelle von realen Prozessen

Eines der Kernziele einer modernen Business-Software ist die Geschäfts-prozessmodellierung mit Hilfe einer Programmiersprache. Damit soll eineStandardisierung der Geschäftsprozesse möglich werden. SAP ist alleindurch seine Marktmacht dazu prädestiniert, solche Business-Modelle vor-zugeben und zu vereinheitlichen. Business-Objekte sind solche Modellie-rungen von realen Geschäftsprozessen innerhalb von SAP-Systemen. Busi-ness-Objekte beschreiben und implementieren die Methoden, Propertiesund Interfaces dieser Prozesse mit den Mitteln von ABAP Objects.

Geschäftsmodelle aus Sicht eines Entwicklers

Aus der Sicht eines Entwicklers besteht ein Geschäftsprozessmodell ausden drei Elementen:

� DatabaseHier werden die Daten in proprietärer Form abgespeichert.

� Business-ObjektEine abstrakte Projektion der Realität mit den Mitteln der Program-miersprache.

� Application Programming Interface (API)Schnittstelle für den Zugriff auf die Business-Objekte von einer Pro-grammiersprache aus.

Zugriff über Business-API

Der Zugriff auf die Business-Objekte erfolgt über eine öffentlich bekannteBusiness-API – das Business Application Programming Interface, kurzBAPI – und ist technisch eine Untermenge der RFC-fähigen Funktions-bausteine in R/3. BAPIs sind die offizielle Außenschnittstelle, mit derZugriffe von Fremdsystemen auf R/3 erfolgen sollen.

4.10.1 Business-Objekte und Modellsichten

Business-Objekte sind die technische Beschreibung einer der Modellsich-ten auf einen Prozess. In einfachen Fällen kommen wir mit den folgendenModellsichten aus:

Kap04.fm Seite 95 Dienstag, 22. April 2003 2:31 14

Page 96: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

96 SAP R/3 Remote Function Call

� Technische Sicht (Komponentensicht)In der Technischen Sicht werden die Objekte beschrieben, wie sie tat-sächlich auf dem Computer realisiert werden. Hier bestimmen wir also,welche Tabellen in der Datenbank angelegt werden, welche Daten-bank-Engine überhaupt verwendet wird, welche Protokolle zum Aus-tausch der Daten benutzt werden, und in welcher Programmierspra-che wir arbeiten.

� Anwendungsfall (Use Case) Die Anwendungsfälle beschreiben die Operationen, die wir auf denDaten durchführen wollen, etwa einen Logon, Aufträge speichern,nach Aufträgen suchen und so weiter.

� Business View (Logische Sicht)Der Business View ist die abstrakte Ebene, die versucht, unbelastet vonden technischen Details die logischen Komponenten einer Applikationzu beschreiben. Dabei denken wir an die Organisation in Stammdaten,an Kundenaufträge oder einen Internetshop. Wichtig dabei ist, dassdie Logische Sicht zunächst frei von Restriktionen formuliert werdendarf, also so nah wie möglich dem Denken bei der realen Arbeit ent-sprechen soll.

Abbildung 4.13 Beispiel für Modellsichten

��������������� ����� ���������������

� �����!����������� "���#���������

$%&� ��������� '�(�� ��������(���

�)�**���� ���

�����)

)��+�'"�

������� �����7*�& ���*����7*�&

-+���)��)��� ��8*� ��)�

� � �

��09��)�7*�& �������� :�4*�1�7*�&

��;*�;�� *;) �&���4�+<11� :�4*�;�� *;)

��(��!��,�

Kap04.fm Seite 96 Dienstag, 22. April 2003 2:31 14

Page 97: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

Business-Objekte und BAPI 97

Formale Beschrei-bung eines Business-View

Ein Business-Objekt ist nun eine formale Beschreibung eines BusinessViews. Demnach gibt es Business Views für jede logische Entität, zum Bei-spiel für den Materialstamm, Kundenstamm, Kundenaufträge oder füreine ganze Shopping-Cart-Applikation. Materialstamm, Kundenstammund Kundenaufträge sind als Business-Objekte schon in SAP R/3 definiertund dafür gibt es auch schon die passenden BAPIs.

Business Object Repository – BOR

Alle öffentlichen Business-Objekte sind im SAP R/3 Business Object Repo-sitory (BOR) registriert. Dieses mit den Transaktionen BAPI und SWO1(Business Object Builder) zugängliche Verzeichnis zeigt die vorhandenenBusiness-Objekte, deren Methoden und die Implementierung an.

Die Shopping-Cart-Applikation als Business-Objekt ist eine Sonderent-wicklung von Logos! Informatik GmbH und Casabac GmbH. Näheres undeinen Download der neuesten Versionen finden Sie unter shopping-cart.logosworld.com.

Abbildung 4.14 Business-Sichten in SAP R/3

����������� �������� ������������ ����� �� �������� �� �������������������������������

������������� ���������

�������������� ���� ���� ����� ��

��� �!�"����

���#�!�"$�����%�!�& ����

���� '���� ��

���� �������

���� � ������

�������������� ���� ���� ����� ��

(&� �!�"����(&�#�!�"$��

(&�%�!�& ����

���� ������ ��

����������� ���� ���� ����� ��

�)� �!�"����

�)�#�!�"$���)�%�!�& ����

�� � '���$���

*���� ��

�����!��������

��������"��

�#�� #$�� ����� ��

�+ �!�"����

�+ #�!�"$���+ %�!�& ����

#$�# '���$���

*���� ��

����%������

����������� ����� ��� ����

Kap04.fm Seite 97 Dienstag, 22. April 2003 2:31 14

Page 98: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

98 SAP R/3 Remote Function Call

Abbildung 4.15 Business-Objekte in SAP R/3-SD

Abbildung 4.16 Business-Objekt BUS1093 (ExchangeRate) in Transaktion BAPI

����������� �� ��� ����

�������� �

����������

�����������

���

���

� ���

���������� �� ���� ����

�������� �

����������

�����������

���� � ���

����������

���������

�� ��� ����

������������� ���� �������� �

����������

�����������

��� � ���

������� � �!� ����

�������� �

����������

�����������

�!� � ���

�"����������� #�$ ���� ����

�������� �

����������

�����������

���� � ���

����%������&��

!�'"����

#�$ �#�$( ���� ����

�������� �

����������

�����������

��� ���

�! ���

���� � ���

�"����������� #�$ ���� ����

�������� �

����������

�����������

���� � ���

�#���� ��$�%� �%%�&��'%�� �()*��+

Kap04.fm Seite 98 Dienstag, 22. April 2003 2:31 14

Page 99: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

Business-Objekte und BAPI 99

4.10.2 Technische Kriterien eines BAPI

BAPI ist die Implementierung eines Business-Objekts

Ein BAPI ist eine Implementierung eines Business-Objekts, die öffentlicheMethoden zur Verfügung stellt. In der Realisierung verbirgt sich hinterjeder Methode ein Funktionsbaustein. Zusätzlich erhält aber jedeMethode noch eine zum SAP Business Workflow kompatible Objekt-schnittstelle in SWO1. Wenn von BAPI die Rede ist, ist selten das Busi-ness-Objekt selbst gemeint, sondern meistens der BAPI-Funktionsbau-stein, der eine der vielen Methoden eines BAPI implementiert. So istbeispielsweise das BAPI zum Kundenauftragsmodell BUS2032, und BAPI_SALESORDER_CREATEFROMDAT2 ist der BAPI-Funktionsbaustein zurMethode CreateFromDat2.

Technisch ist eine BAPI-Funktion ein RFC-Funktions-baustein

Aus technischer Sicht besteht kein Unterschied zwischen einem BAPI-Funktionsbaustein und gewöhnlichen RFC-Bausteinen. Allerdings unter-wirft SAP ein BAPI gewissen Konventionen, die jeder beachten sollte, derstandardkonforme BAPIs entwickeln möchte:

� Ein BAPI führt niemals ein COMMIT WORK oder einen ROLLBACK WORKaus. Der Sinn davon ist, dass eine externe Applikation eigene Transak-tionen als Sequenzen von BAPI-Methoden ausführen kann.

� Das Ende einer Transaktion wird durch die speziellen BAPI-Funktions-bausteine BAPI_TRANSACTION_COMMIT und BAPI_TRANSACTION_ROLLBACK erreicht.

� Alle Schnittstellenparameter sollen einen aussagekräftigen, englischenNamen haben.

Abbildung 4.17 Business-Objekt BUS1093 (ExchangeRate) in Transaktion SWO1

Kap04.fm Seite 99 Dienstag, 22. April 2003 2:31 14

Page 100: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

100 SAP R/3 Remote Function Call

4.10.3 Anwendungsbeispiel: Das Sales-Order-BAPI

Kundenaufträgesind zentral für SD

Wir haben als Beispiel für die Anwendung eines BAPI das Sales-Order-Objekt ausgewählt, das ein ganz zentrales Business-Objekt in SAP ist.Dieses wird verwendet für das Anlegen, Ändern und Anzeigen von

� Kundenaufträgen

� Angebotsanfragen (Request for quotation – RFQ)

� Gut- und Lastschriftenanforderungen

� AuslieferungsaufträgenAuslieferungsaufträge sind Aufträge, die automatisch eine Lieferungerzeugen. Man verwendet sie unter anderem zum Ausliefern in meh-reren Einzellieferungen. Dabei wird der Auslieferungsauftrag mit Bezugzum Originalauftrag angelegt. Der Auslieferungsauftrag ist so einge-stellt, dass automatisch eine Auslieferung (Objekt LIKP) erstellt wird,gegebenenfalls mit anschließendem automatischen Versand.

� Anstoßen von Auslieferungen Das Business-Objekt-Konzept von SAP R/3 sieht es nicht vor, Ausliefe-rungen direkt durch eine Schnittstelle anzulegen. Der zentrale Einstiegs-punkt für jede SD-Transaktion ist das Sales-Order-BAPI. Dazu muss derKundenauftrag bestimmte Customizing-Anforderungen erfüllen:

� Der Kundenauftragstyp (TVAK-AUART) muss auf automatischesAnlegen einer Auslieferung eingestellt sein.

� Das Anlegen der Auslieferung muss vom Status des Kundenauftragsabhängig sein, zum Beispiel durch Setzen des Feldes Liefersperre imKopf (VBAK-LIFSK) oder Position (VBAP-LIFSP).

� Anstoßen von Fakturen.

� Der Kundenauftragstyp (TVAK-AUART) muss auf automatischesAnlegen einer Faktura eingestellt sein.

� Das Anlegen der Faktura muss vom Status des Kundenauftragsabhängig sein, zum Beispiel durch Setzen des Feldes Fakturasperreim Kopf (VBAK-FAKSK) oder Position (VBAP-FAKSP)

Kundenauftragsbestand abfragen

� Methode: SalesOrder.GetList

� Funktion: BAPI_SALESORDER_GETLIST

Die BAPI-Methode gibt eine Liste aller Kundenaufträge eines bestimmtenKunden zurück. Die Liste kann auf Materialnummern und bestimmteZeiträume eingeschränkt werden.

Kap04.fm Seite 100 Dienstag, 22. April 2003 2:31 14

Page 101: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

Business-Objekte und BAPI 101

Kundenauftrag anlegen

� Methode: SalesOrder.CreateFromDat2

� Funktion: BAPI_SALESORDER_CREATEFROMDAT2

Diese BAPI-Methode legt einen Kundenauftrag komplett neu an und ver-wendet dazu die übergebenen Daten. Die Methode kann alle business-relevanten Daten aufnehmen und erlaubt es, einen Kundenauftrag aufeinen Schlag anzulegen.

Erst Kopf, dann Position anlegen

In unseren Beispielen weiter unten zeigen wir einen Mehrschritt-Ansatz,indem wir zunächst den Auftragskopf (also nur VBAK) ohne Verkaufspo-sitionen (VBAP) anlegen. Später fügen wir die Positionen mit derMethode BAPI_SALESORDER_CHANGE hinzu.

Kundenauftrag ändern

� Methode: SalesOrder.Change

� Funktion: BAPI_SALESORDER_CHANGE

Einzelnes Ändern von Feldwerten

Diese BAPI-Methode ermöglicht es, einen bestehenden Kundenauftrag inallen Einzelheiten zu ändern, also insbesondere auch Positionen oder Ein-teilungsdaten hinzuzufügen oder zu löschen und selbstverständlich allebereits bestehenden Werte einzeln zu ändern.

Kundenauftrag oder Kundenauftragspositionen löschen

Löschen: Updateflag = »D«

Löschen ist wie in jeder professionellen Datenbank oder Transaktionsum-gebung nur eine Variante des Änderns. Dazu muss lediglich dasUpdateflag = "D" für Delete gesetzt werden.

4.10.4 Beispiel: BAPI_SALESORDER_GETLIST

Liste aller Kun-denaufträge

Im Folgenden sehen Sie ein fertiges Rahmenprogramm zum Aufruf desBAPIs, das eine Liste aller Kundenaufträge zu einem Kunden zurückgibt.

Listing 4.23 ABAP: Call BAPI_SALESORDER_GETLIST

'**** Functions in LibraryPublic func As SAPFunctionsOCX.FunctionPublic XMLDOC As New MSXML2.DOMDocumentPrivate myR3 As R3LogonObjPrivate XMLhelp As New XMLhelper'**** ParametersPublic iCUSTOMER_NUMBER As SAPFunctionsOCX.Parameter

Kap04.fm Seite 101 Dienstag, 22. April 2003 2:31 14

Page 102: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

102 SAP R/3 Remote Function Call

Public iDOCUMENT_DATE As SAPFunctionsOCX.ParameterPublic iDOCUMENT_DATE_TO As SAPFunctionsOCX.ParameterPublic iMATERIAL As SAPFunctionsOCX.ParameterPublic iPURCHASE_ORDER As SAPFunctionsOCX.ParameterPublic iPURCHASE_ORDER_NUMBER As SAPFunctionsOCX.Para-meterPublic iSALES_ORGANIZATION As SAPFunctionsOCX.ParameterPublic iTRANSACTION_GROUP As SAPFunctionsOCX.ParameterPublic eRETURN As SAPFunctionsOCX.StructurePublic tSALES_ORDERS As SAPTableFactoryCtrl.Table

Public Sub Class_Initialize() Set myR3 = New R3LogonObj myR3.R3Logon'*************** Creating the object reference for the RFC Functions'==================================================== Set func = myR3.Functions.Add("BAPI_SALESORDER_GETLIST")'*************** Creating the object reference for the Parameters'=================================================='**** Importing Parameters Set iCUSTOMER_NUMBER = func.Exports("CUSTOMER_NUMBER") Set iDOCUMENT_DATE = func.Exports("DOCUMENT_DATE") Set iDOCUMENT_DATE_TO = func.Exports("DOCUMENT_DATE_TO") Set iMATERIAL = func.Exports("MATERIAL") Set iPURCHASE_ORDER = func.Exports("PURCHASE_ORDER") Set iPURCHASE_ORDER_NUMBER = func.Exports("PURCHASE_ORDER_NUMBER") Set iSALES_ORGANIZATION = func.Exports("SALES_ORGANIZATION") Set iTRANSACTION_GROUP = func.Exports("TRANSACTION_GROUP")'**** Exporting Parameters Set eRETURN = func.Imports("RETURN")'**** Table Parameters

Kap04.fm Seite 102 Dienstag, 22. April 2003 2:31 14

Page 103: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

Business-Objekte und BAPI 103

Set tSALES_ORDERS = func.Tables("SALES_ORDERS")End Sub ' Class_Initialize()

Public Sub Class_Terminate() Set func = Nothing Set myR3 = NothingEnd Sub ' Class_Terminate()

Public Sub Execute() func.CallEnd Sub ' Class_Initialize()

Public Sub Connect()End Sub ' Connect

Public Function toXMLDoc() As MSXML2.DOMDocument Set toXMLDoc = XMLhelp.toXMLDoc(func)End Function

Public Function toXML() As String toXML = toXMLDoc.XMLEnd Function

Listing 4.24 ABAP: Anlegen eines Auftragskopfs mit BAPI_SALESORDER_CREATEFROMDAT2

*&----------------------------------------------------**& Report YDEMO_BAPI_2032_CREATE_HEADER*&----------------------------------------------------**& This routines demonstrates the use of the BAPI **& BAPI_SALESORDER_CREATEFROMDAT2*& It calls the BAPI and creates the header of a sales *& orders*& w/o creating any items so far.*&----------------------------------------------------*REPORT YDEMO_BAPI_2032_CREATE_HEADER.TYPE-POOLS: SYDES.PARAMETERS: VBELN LIKE VBCOM-VBELN OBLIGATORY MEMORY ID AUN.PARAMETERS: AUART LIKE VBCOM-AUART OBLIGATORY MEMORY ID AUA.

Kap04.fm Seite 103 Dienstag, 22. April 2003 2:31 14

Page 104: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

104 SAP R/3 Remote Function Call

PARAMETERS: KUNAG LIKE VBCO2-KUNNR OBLIGATORY MEMORY ID KUN.PARAMETERS: KUNWE LIKE VBCO2-KUNWE OBLIGATORY MEMORY ID WEM.PARAMETERS: VKORG LIKE VBCOM-VKORG OBLIGATORY MEMORY ID VKO.PARAMETERS: VTWEG LIKE VBCOM-VTWEG OBLIGATORY MEMORY ID VTW.PARAMETERS: SPART LIKE VBCOM-SPART OBLIGATORY MEMORY ID SPA.PARAMETERS: AUDAT LIKE VBCOM-AUDAT OBLIGATORY MEMORY ID AUD.PARAMETERS: REFVBELN LIKE VBCOM-VBELN MEMORY ID AUB.PARAMETERS: REFVGTYP LIKE VBAK-VGTYP DEFAULT 'C'.

DATA: ORDER_HEADER_IN LIKE BAPISDHD1.DATA: ORDER_HEADER_OUT LIKE BAPISDHD1.DATA: SALESDOCUMENT LIKE BAPIVBELN-VBELN.DATA: RETURN LIKE STANDARD TABLE OF BAPIRET2 WITH HEADER LINE.DATA: ORDER_ITEMS_IN LIKE STANDARD TABLE OF BAPISDITM WITH HEADER LINE.DATA: ORDER_PARTNERS LIKE STANDARD TABLE OF BAPIPARNR WITH HEADER LINE.

START-OF-SELECTION. PERFORM BAPI_SALESORDER_CREATE USING VBELN AUART KUNAG KUNWE VKORG VTWEG SPART AUDAT REFVBELN REFVGTYP.*ERFORM bapi_salesorder_getcreate WRITE: / 'Returned sales order number:' , SALESDOCUMENT COLOR COL_TOTAL. ULINE. LOOP AT RETURN. CALL FUNCTION 'MESSAGE_TEXT_BUILD' EXPORTING MSGID = RETURN-ID MSGNR = RETURN-NUMBER MSGV1 = RETURN-MESSAGE_V1 MSGV2 = RETURN-MESSAGE_V2

Kap04.fm Seite 104 Dienstag, 22. April 2003 2:31 14

Page 105: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

Business-Objekte und BAPI 105

MSGV3 = RETURN-MESSAGE_V3 MSGV4 = RETURN-MESSAGE_V4 IMPORTING MESSAGE_TEXT_OUTPUT = SY-LISEL EXCEPTIONS OTHERS = 1. WRITE: / SY-LISEL COLOR COL_NORMAL.. ENDLOOP.*-----------------------------------------------------*FORM BAPI_SALESORDER_CREATE USING VALUE(DOCNO) LIKE VBCOM-VBELN VALUE(DOC_TYPE) LIKE VBCOM-AUART VALUE(SOLDTO) LIKE VBCOM-KUNNR VALUE(SHIPTO) LIKE VBCOM-KUNNR VALUE(SALESORG) LIKE VBCOM-VKORG VALUE(DISTRCHANNEL) LIKE VBAK-VTWEG VALUE(DIVISION) LIKE VBCOM-SPART VALUE(ORDERDATE) LIKE VBCOM-AUDAT VALUE(REFDOCNO) LIKE VBCOM-VBELN VALUE(REFDOC_TYPE) LIKE VBAK-VGTYP.

REFRESH ORDER_ITEMS_IN. REFRESH ORDER_PARTNERS. CLEAR ORDER_HEADER_IN. CLEAR RETURN. CLEAR SALESDOCUMENT.

SALESDOCUMENT = VBELN. IF NOT REFDOCNO IS INITIAL. ULINE. FORMAT RESET COLOR COL_NEGATIVE. WRITE:/ 'The reference does not work in 40B HP65 due to an error when'. WRITE:/ 'calling SD_SALES_DOCU_SAVE from SD_SALES_DOCUMENT_MAINTAIN. '. ULINE. FORMAT RESET. ENDIF. ORDER_HEADER_IN-REFOBJTYPE = 'BUS2032'. ORDER_HEADER_IN-REFOBJKEY = REFDOCNO. ORDER_HEADER_IN-REFDOCTYPE = REFDOC_TYPE. ORDER_HEADER_IN-DOC_TYPE = AUART.

Kap04.fm Seite 105 Dienstag, 22. April 2003 2:31 14

Page 106: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

106 SAP R/3 Remote Function Call

ORDER_HEADER_IN-SALES_ORG = SALESORG. ORDER_HEADER_IN-DISTR_CHAN = DISTRCHANNEL. ORDER_HEADER_IN-DIVISION = DIVISION. ORDER_HEADER_IN-REQ_DATE_H = ORDERDATE.

ORDER_PARTNERS-PARTN_ROLE = 'AG'. ORDER_PARTNERS-PARTN_NUMB = SOLDTO. APPEND ORDER_PARTNERS. ORDER_PARTNERS-PARTN_ROLE = 'WE'. ORDER_PARTNERS-PARTN_NUMB = SHIPTO. APPEND ORDER_PARTNERS.

CALL FUNCTION 'BAPI_SALESORDER_CREATEFROMDAT2' EXPORTING SALESDOCUMENT = SALESDOCUMENT ORDER_HEADER_IN = ORDER_HEADER_IN* ORDER_HEADER_INX =* SENDER =* BINARY_RELATIONSHIPTYPE = ' '* INT_NUMBER_ASSIGNMENT = ' '* BEHAVE_WHEN_ERROR = ' '* LOGIC_SWITCH = ' '* TESTRUN = ' '* CONVERT = ' ' IMPORTING SALESDOCUMENT_EX = SALESDOCUMENT TABLES RETURN = RETURN* order_items_in = order_items_in* ORDER_ITEMS_INX = ORDER_PARTNERS = ORDER_PARTNERS* ORDER_SCHEDULES_IN =* ORDER_SCHEDULES_INX =* ORDER_CONDITIONS_IN =* ORDER_CFGS_REF =* ORDER_CFGS_INST =* ORDER_CFGS_PART_OF =* ORDER_CFGS_VALUE =* ORDER_CFGS_BLOB =* ORDER_CFGS_VK =

Kap04.fm Seite 106 Dienstag, 22. April 2003 2:31 14

Page 107: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

Business-Objekte und BAPI 107

* ORDER_CFGS_REFINST =* ORDER_CCARD =* ORDER_TEXT =* ORDER_KEYS =* EXTENSIONIN =* PARTNERADDRESSES = EXCEPTIONS OTHERS = 1. COMMIT WORK.

ENDFORM.

Die Auftragspositionen können jederzeit an einen bestehenden Auftragangefügt werden. Das wird genau wie das Ändern eines Auftrags durchden BAPI BAPI_SALESORDER_CHANGE erledigt:

Listing 4.25 ABAP: Zufügen von Auftragspositionen mit BAPI_SALESORDER_CHANGE

TYPE-POOLS: SYDES.FORM BAPI_SALESITEM_ADD USING VALUE(DOCNO) LIKE VBCOM-VBELN VALUE(POSNR) LIKE VBAP-POSNR VALUE(MATNR) LIKE VBAP-MATNR VALUE(QUANT) LIKE VBAP-KWMENG VALUE(VRKME) LIKE VBAP-VRKME VALUE(CONDI) LIKE KONV-KSCHL VALUE(NETPR) LIKE VBAP-NETPR VALUE(CURR_ISO) LIKE BAPISDITM-CURR_ISO. DATA: ORDER_HEADER_IN LIKE BAPISDH1. DATA: ORDER_HEADER_INX LIKE BAPISDH1X. DATA: ORDER_HEADER_OUT LIKE BAPISDHD1. DATA: SALESDOCUMENT LIKE BAPIVBELN-VBELN. DATA: ORDER_ITEMS_IN LIKE STANDARD TABLE OF BAPISDITM WITH HEADER LINE. DATA: ORDER_ITEMS_INX LIKE STANDARD TABLE OF BAPISDITMX WITH HEADER LINE. DATA: SCHEDULE_LINES LIKE STANDARD TABLE OF BAPISCHDL WITH HEADER LINE. DATA: SCHEDULE_LINESX LIKE STANDARD TABLE OF BAPISCHDLX WITH HEADER LINE. DATA: CONDITIONS_IN LIKE STANDARD TABLE OF

Kap04.fm Seite 107 Dienstag, 22. April 2003 2:31 14

Page 108: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

108 SAP R/3 Remote Function Call

BAPICOND WITH HEADER LINE. DATA: CONDITIONS_INX LIKE STANDARD TABLE OF BAPICONDX WITH HEADER LINE. DATA: RETURN LIKE STANDARD TABLE OF BAPIRET2 WITH HEADER LINE. REFRESH: ORDER_ITEMS_IN, ORDER_ITEMS_INX. REFRESH: SCHEDULE_LINES, SCHEDULE_LINESX. CLEAR: ORDER_HEADER_IN, ORDER_HEADER_INX. CLEAR: SCHEDULE_LINES, SCHEDULE_LINESX. CLEAR: RETURN, SALESDOCUMENT. SALESDOCUMENT = DOCNO. ORDER_HEADER_INX-UPDATEFLAG = 'U'. ORDER_ITEMS_IN-ITM_NUMBER = POSNR. ORDER_ITEMS_IN-MATERIAL = MATNR. ORDER_ITEMS_IN-TARGET_QTY = QUANT. ORDER_ITEMS_IN-TARGET_QU = VRKME. ORDER_ITEMS_IN-SALES_UNIT = VRKME. ORDER_ITEMS_IN-TARGET_VAL = PRICE. ORDER_ITEMS_IN-CURR_ISO = CURR_ISO. ORDER_ITEMS_INX-ITM_NUMBER = ORDER_ITEMS_IN- ITM_NUMBER. ORDER_ITEMS_INX-UPDATEFLAG = 'I'. APPEND ORDER_ITEMS_IN.*-----------------------------------------------------* SCHEDULE_LINES-ITM_NUMBER = ORDER_ITEMS_IN- ITM_NUMBER. SCHEDULE_LINES-REQ_DATE = SY-DATUM + 7. SCHEDULE_LINES-REQ_QTY = QUANT. APPEND SCHEDULE_LINES. SCHEDULE_LINESX-ITM_NUMBER = SCHEDULE_LINES- ITM_NUMBER. SCHEDULE_LINESX-UPDATEFLAG = 'I'. APPEND SCHEDULE_LINESX.*-----------------------------------------------------* IF NOT ( PRICE IS INITIAL OR CONDI IS INITIAL ). CONDITIONS_IN-ITM_NUMBER = ORDER_ITEMS_IN- ITM_NUMBER. CONDITIONS_IN-COND_TYPE = CONDI. CONDITIONS_IN-COND_VALUE = PRICE. CONDITIONS_IN-CURR_ISO = CURR_ISO.

Kap04.fm Seite 108 Dienstag, 22. April 2003 2:31 14

Page 109: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

Business-Objekte und BAPI 109

APPEND CONDITIONS_IN. CONDITIONS_INX-ITM_NUMBER = CONDITIONS_IN- ITM_NUMBER. CONDITIONS_INX-UPDATEFLAG = 'I'. APPEND CONDITIONS_INX. ENDIF.*-----------------------------------------------------* CALL FUNCTION 'BAPI_SALESORDER_CHANGE' EXPORTING SALESDOCUMENT = SALESDOCUMENT ORDER_HEADER_IN = ORDER_HEADER_IN ORDER_HEADER_INX = ORDER_HEADER_INX TABLES RETURN = RETURN ORDER_ITEM_IN = ORDER_ITEMS_IN SCHEDULE_LINES = SCHEDULE_LINES SCHEDULE_LINESX = SCHEDULE_LINESX CONDITIONS_IN = CONDITIONS_IN CONDITIONS_INX = CONDITIONS_INX.ENDFORM.

4.10.5 VBA-Beispiel zu BAPI_SALESORDER_GETLIST

Liste aller Kundenaufträge

Hier folgt nun zum Vergleich die Auflistung der Kundenaufträge mit Hilfeeines VBA-Programms.

Listing 4.26 VBA: Call BAPI_SALESORDER_GETLIST

'**** Functions in LibraryPublic func As SAPFunctionsOCX.FunctionPublic XMLDOC As New MSXML2.DOMDocumentPrivate myR3 As R3LogonObjPrivate XMLhelp As New XMLhelper'**** ParametersPublic iCUSTOMER_NUMBER As SAPFunctionsOCX.ParameterPublic iDOCUMENT_DATE As SAPFunctionsOCX.ParameterPublic iDOCUMENT_DATE_TO As SAPFunctionsOCX.ParameterPublic iMATERIAL As SAPFunctionsOCX.ParameterPublic iPURCHASE_ORDER As SAPFunctionsOCX.ParameterPublic iPURCHASE_ORDER_NUMBER As SAPFunctionsOCX.Para-meterPublic iSALES_ORGANIZATION As SAPFunctionsOCX.Parameter

Kap04.fm Seite 109 Dienstag, 22. April 2003 2:31 14

Page 110: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

110 SAP R/3 Remote Function Call

Public iTRANSACTION_GROUP As SAPFunctionsOCX.ParameterPublic eRETURN As SAPFunctionsOCX.StructurePublic tSALES_ORDERS As SAPTableFactoryCtrl.Table

Public Sub Class_Initialize() Set myR3 = New R3LogonObj myR3.R3Logon'*************** Creating the object reference for the RFC Functions'==================================================== Set func = myR3.Functions.Add("BAPI_SALESORDER_GETLIST")'*************** Creating the object reference for the Parameters'=================================================='**** Importing Parameters Set iCUSTOMER_NUMBER = func.Exports("CUSTOMER_NUMBER") Set iDOCUMENT_DATE = func.Exports("DOCUMENT_DATE") Set iDOCUMENT_DATE_TO = func.Exports("DOCUMENT_DATE_TO") Set iMATERIAL = func.Exports("MATERIAL") Set iPURCHASE_ORDER = func.Exports("PURCHASE_ORDER") Set iPURCHASE_ORDER_NUMBER = func.Exports("PURCHASE_ORDER_NUMBER") Set iSALES_ORGANIZATION = func.Exports("SALES_ORGANIZATION") Set iTRANSACTION_GROUP = func.Exports("TRANSACTION_GROUP")'**** Exporting Parameters Set eRETURN = func.Imports("RETURN")'**** Table Parameters Set tSALES_ORDERS = func.Tables("SALES_ORDERS")End Sub ' Class_Initialize()

Public Sub Class_Terminate() Set func = Nothing Set myR3 = NothingEnd Sub ' Class_Terminate()

Kap04.fm Seite 110 Dienstag, 22. April 2003 2:31 14

Page 111: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

SAP Interface Repository 111

Public Sub Execute() func.CallEnd Sub ' Class_Initialize()

Public Sub Connect()End Sub ' Connect

Public Function toXMLDoc() As MSXML2.DOMDocument Set toXMLDoc = XMLhelp.toXMLDoc(func)End Function

Public Function toXML() As String toXML = toXMLDoc.XMLEnd Function

4.11 SAP Interface Repository Alle BAPIs sind im IFR dokumentiert

Alle offiziell von SAP freigegebenen BAPIs, IDocs und RFC-Bausteine sindim Interface Repository von SAP dokumentiert, das unter der URL http://ifr.sap.com abrufbar ist. Es ist für jedermann zugänglich und gibt dieStruktur der BAPIs sowohl in Textform als auch als formales XML-Doku-ment zurück.

Anfrage in Form einer Canonical URL

Zum Abrufen der Information verwendet SAP so genannte CanonicalURLs, die im Wesentlichen eine vom W3C abgesegnete Variante der CGI-Spezifikation zur Codierung von Parametern in eine URI sind. Eine Ver-sion des IFR kann auch mit der Transaktion BAPI in einer SAP R/3-Instanzaufgerufen werden.

Typische Anfrage an das IFR

Das nachstehende Beispiel ist eine typische Anfrage an das IFR, die unsein XML-Schema für die GetList-Methode des Sales-Order-BAPIszurückgibt.

Listing 4.27 Eine typische Anfrage an das IFR

http://ifr.sap.com/catalog/query.asp?namespace=urn:sap-com:ifr:LO:46C&type=bapi&name=SalesOrder.GetList&xml=schema.w3c-2000-04&xdir=response

Tabelle 4.4 erläutert die Bestandteile der Canonical URLs, Tabelle 4.5 lis-tet die möglichen Werte für die einzelnen Elemente auf, und Tabelle 4.6die verwendeten Objekttypen.

Kap04.fm Seite 111 Dienstag, 22. April 2003 2:31 14

Page 112: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

112 SAP R/3 Remote Function Call

Element Bedeutung

http://ifr.sap.com/cata-log/query.asp?

Einstiegs-URL ins IFR

namespace=urn:sap-com:ifr:LO:46C

Namespace für das XML-Dokument

&type=bapi Anfrage nach einem BAPI

&name=SalesOrder.GetList Name des BAPI

&xml=schema.w3c-2000-04 Anfrage nach XML-Schema gemäß W3C-Spezifika-tion

&xdir=response Anfrage nach Schema für die Antwort

Tabelle 4.4 Objekt-Typen, die in den Canonical URLs von SAP verwendet werden

Element Erlaubte Werte

type= bobj | bapi | rfc | imsg | idoc | iseg | area | docu

name= Name des Objekts

key= Schlüssel des Dokuments, zum Beispiel Auftragsnummer

param= Parameter, die kein Schlüsselfeld sind, zum Beispiel Auftragsdatum

language= Sprache des Ergebnisdokuments, falls sinnvoll

xml= schema | template [W3C-Version]

xdir= send | response

Tabelle 4.5 Mögliche Werte innerhalb der Canonical URL

type= Bedeutung

area Area

bapi BAPI

bobj Business Object

idoc Intermediate Document (IDoc)

imsg IDoc message type

iseg IDoc segment

Rfc Remote Function Call

Tabelle 4.6 Objekt-Typen, die in den Canonical URLs von SAP verwendet werden

Kap04.fm Seite 112 Dienstag, 22. April 2003 2:31 14

Page 113: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

SAP Interface Repository 113

Folgendermaßen gestaltet sich die Abfrage des XSD-Schemas für RFCIDOCTYPE_READ-COMPLETE:

http://ifr.sap.com/catalog/query.asp?namespace=urn:sap-com:ifr:BASIS:46C&type=rfc&name=IDOCTYPE_READ_COM-PLETE&xml=SCHEMA&xdir=SEND<?xml version="1.0" encoding="utf-8"?><xsd:schema xmlns:xsd="http://www.w3.org/2001/XML-Schema" xmlns="urn:sap-com:document:sap:rfc:functions" targetNamespace="urn:sap-com:document:sap:rfc:func-tions" version="1.0"> <xsd:element name="IDOCTYPE_READ_COMPLETE"> <xsd:annotation> <xsd:documentation>Read IDoc type with segments (RFC-compatible)</xsd:documentation> </xsd:annotation> <xsd:complexType> <xsd:all> <xsd:element name="PI_IDOCTYP"> <xsd:annotation> <xsd:documentation>Basic type</xsd:documentation> </xsd:annotation> <xsd:simpleType> <xsd:restriction base="xsd:string"> <xsd:maxLength value="30"/> </xsd:restriction> </xsd:simpleType> </xsd:element> <xsd:element name="PI_CIMTYP" minOccurs="0">...

Name Name

Param Parameter

docu Documentation

type= Bedeutung

Tabelle 4.6 Objekt-Typen, die in den Canonical URLs von SAP verwendet werden (Forts.)

Kap04.fm Seite 113 Dienstag, 22. April 2003 2:31 14

Page 114: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

Kap04.fm Seite 114 Dienstag, 22. April 2003 2:31 14

Page 115: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

Frontend und GUIs 115

5 Frontend und GUIs

Während früher die Gestaltung der Benutzeroberflächen einer Software als nachrangig eingestuft wurde, spielt die Leis-tungsfähigkeit des Frontends heutzutage eine Schlüsselrolle bei der Akzeptanz einer Applikation.

Anwendungssoft-ware wird vom Frontend aus ent-wickelt

Anwendungssoftware wird heute bei Tage entwickelt. Ausgehend von derDevise WYSIWYG (What You See Is What You Get), legt man zu Beginneiner Entwicklung zunächst einmal fest, wie man dem Anwender diegewünschten Informationen präsentieren möchte und auf welche WeiseEingaben erfolgen.

Oberfläche muss Teil der Netzwerk-intelligenz über-nehmen

Es ist nicht mehr zeitgemäß, raffinierte Routinen zu schreiben und danneine lieblose Oberfläche hinzuzufügen. Vielmehr muss die Oberfläche miteiner angemessenen eigenen Intelligenz ausgestattet sein, um typische,an Oberflächen orientierte Handlungen auch direkt ohne Rücksprachemit dem Server durchführen zu können.

Bisher haben die meisten Entwickler mit Vorliebe »im Dunkeln« program-miert. Lange Strecken eines Programms wurden auf gut Glück und Gott-vertrauen hin entwickelt und am Ende einem mehr oder minder komple-xen, aber immer unvollständigen Testszenario zugeführt.

Holistic Develop-ment oder Extreme Program-ming

Heute programmiert man ganzheitlich. Man beginnt bei der Oberfläche,die der Benutzer zu sehen bekommt. Am Anfang ist diese Oberflächeganz einfach und einfach ist auch das Programm, das die ersten Daten lie-fert. Jedes Feature an der Oberfläche bekommt ein überschaubares Pen-dant in der Applikation und jede Änderung an der Logik der Applikationmuss sich sichtbar an der Oberfläche widerspiegeln. Dieser neue Pro-grammierstil hat auch einen Namen in der Entwicklergemeinde: ExtremeProgramming oder Holistic Development.

Leider ist die Entwicklung von Weboberflächen keineswegs so trivial, wiees zunächst den Anschein hat. Zwar kann jeder nach spätestens einerStunde Crash-Kurs seine ersten HTML-Seiten gestalten und nach einerkurzen Spielphase mit Cascading Style Sheets gelingt es auch, die Seitenansprechend zu gestalten und ein halbwegs einheitliches Layout übermehrere Seiten hinweg durchzuhalten. Das Problem bei der Entwicklungvon Oberflächen für das Web liegt darin, dass es nur sehr wenige Toolsauf dem Markt gibt, die es erlauben, gleichermaßen ansprechende wie

Kap05.fm Seite 115 Dienstag, 22. April 2003 2:32 14

Page 116: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

116 Frontend und GUIs

performante Oberflächen zu gestalten und dies noch dazu mit möglichstgeringem Entwicklungsaufwand.

Klassische Web-seiten sind lang-sam und flackern

Wenn Sie häufiger Ihre Einkäufe im Internet tätigen, ist Ihnen sicherlichaufgefallen, dass der Aufbau der Seiten bei sehr vielen Webshops langedauert. Klickt man auf einen Link, tut sich zuerst gar nichts, dann ver-schwindet die Seite ganz und die neue Seite wird endlich aufgebaut. Diesgeschieht auch dann, wenn sich nur ein kleines Detail in Ihrer Eingabeändert, etwa Sie geben an, dass Ihre Adresse in den USA und nicht in Eur-opa ist, welches ein etwas verändertes Eingabeschema verlangt. In derPraxis erweckt das den Eindruck, die Webseiten flackerten. Der Grundliegt darin, dass Webserver den Datenstrom zwischen Server und Browsernicht optimieren und auch keine Transaktionsunterstützung bieten.

Transaktionsma-nagement findet

auf Applikations-server statt

Das Transaktionsmanagement wird heutzutage auf die Applikationsserverausgelagert. Hierfür bietet Java jetzt die J2EE-Technologie, der Web ASvon SAP greift auf die bewährte SAP R/3-Infrastruktur zurück und Micro-soft.NET hat seinen Webserver um den Microsoft Transaction Servererweitert. Mit jeder dieser Technologien muss sich der Entwickler derWeboberflächen und auch der Weblogiken keine Gedanken mehr überdie Probleme machen, die mit unvollendeten Transaktionen in Verbin-dung stehen.

GUI-Server sindeine viel verspre-

chende Lösung

Bei der Optimierung der Entwicklung und Ausführung von Weboberflä-chen sind die Werkzeuge noch sehr rar gesät. Für den Einsatz zusammenmit SAP R/3 bieten sich die folgenden drei Lösungen an:

� Synactive Viewer von Synactive, der Firma des Schöpfers von ABAP, Dr. Gerhard Rodé

� Web Dynprodie Webentwicklungsplattform von SAP

� CASABAC GUI-Servervon der Firma CASABAC

5.1 Casabac GUI-Server

Als Beispiel für eine bereits verfügbare Technologie (Web Dynpro wirderst mit dem Web AS-Release 6.30 verfügbar sein) stellen wir hier denCasabac GUI-Server vor. Der Casabac GUI-Server erweitert die Funktio-nalität und die Performance eines Browsers um Anwendungsgebiete, diebislang auf Grund ihrer Anforderungen an Interaktion nicht vernünftigrealisiert werden konnten oder ein zusätzliches Plug-In wie MacromediaFlash auf der Browserseite erforderten.

Kap05.fm Seite 116 Dienstag, 22. April 2003 2:32 14

Page 117: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

Casabac GUI-Server 117

Casabac ist eine Entwicklung von Björn Müller, einem ehemaligen Soft-ware-Ingenieur von SAP, dessen Ideen zu großen Teilen die Entwicklungder Web-Dynpro-Technologie des SAP Web AS beeinflusst haben. Wäh-rend Web Dynpro als Teil des Web AS (ab Release 6.30) positioniert ist,ist Casabac unabhängig von der SAP-Kerntechnologie.

5.1.1 Technologie

Genau wie Web Dynpro ist Casabac eine Entwicklungs- und Runtime-Umgebung zur Interaktion von Browseroberflächen mit Unternehmens-applikationen. Das besondere Kennzeichen von Casabac ist einerseits dieflackerfreie Darstellung von Seiteninteraktionen auf Basis einer erweiter-baren reichhaltigen Control-Bibliothek. Andererseits ist die Programmie-rung von komplexen Oberflächen und deren serverseitige Anbindung anexistierende Logik extrem einfach und offen.

CASABAC setzt auf Servlets auf

Technisch gesehen ist der Casabac GUI-Server eine auf dem Java-Servlet-Interface aufsetzende Infrastruktur: Seiten werden in einem WYSIWYG-Editor erstellt und als XML-Layout-Definition abgelegt. Aus dieser Lay-out-Definition wird Code für DHTML oder JavaScript generiert. JedeSeite hat einen Bezug auf eine serverseitige Java-Klasse, die so genannteAdapterklasse. Controls auf der Seite beziehen sich auf Properties undMethoden dieser Adapterklasse. Die Adapterklasse ist somit ein logischesSpiegelbild der Seite.

���Bild

���Bild 04_01 fehlt!!!���

Abbildung 5.1 Casabac GUI-Server – Beispielseite

Kap05.fm Seite 117 Dienstag, 22. April 2003 2:32 14

Page 118: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

118 Frontend und GUIs

Informationen-saustausch über

Hidden Frame undDHTML

Das Besondere ist, dass die Seite nicht wie normale HTML-Seiten direktmit Ihrer Serververarbeitung kommuniziert, sondern über einen »HiddenFrame« innerhalb der Seite. Hierdurch bleibt einerseits die Seite stabil imBrowser und flackert nicht bei Serverinteraktionen. Andererseits wirdzwischen Browser-Client und Server nur der logische Inhalt der Seitekommuniziert. Gegenüber normalen Webanwendungen, in denen derServer immer eine gesamte HTML-Seite zum Client schickt, bedeutet dieseine massive Reduzierung des ausgetauschten Datenvolumens.

Die Interaktivität der Browserseite entspricht somit der Interaktivität vonnormalen »Rich Clients«, die in C++, Java-Swing und so weiter codiertsind. Der Browser wird um Anwendungsgebiete erweitert, die bislang aufGrund ihrer Interaktionsanforderungen nur durch Erweiterung des Brow-sers mit Plug-Ins möglich waren. Plug-Ins bedeuten jedoch eine Manipu-lation des Standardsystems, was in einer sicherheitssensiblen Umgebungnicht ohne weiteres machbar ist.

Casabac läuftinnerhalb von

J2EE

CASABAC selbst läuft innerhalb jedes J2EE Servers – z.B. auch innerhalbdes SAP Web Application Servers. Die Standardauslieferung erfolgt aufBasis von Tomcat. Features wie Mehrsprachenverwaltung, internationali-sierte Controls und Adapter-Code-Generator gehören zur Standardaus-stattung.

Im Browser werden nur Standardtechnologien wie JavaScript undDHTML genutzt, es wird kein Plug-In oder Ähnliches verwendet.

Abbildung 5.2 Casabac-Technologie

Kap05.fm Seite 118 Dienstag, 22. April 2003 2:32 14

Page 119: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

Casabac GUI-Server 119

5.1.2 Beispiel zur Kalkulation der Mehrwertsteuer

Das Beispiel aus Abbildung 5.3 ist eine Mini-Anwendung, innerhalb dererein Mehrwertsteuerbetrag errechnet wird.

Im Layout Painter wird zunächst die Seite designt. Der Inhalt der Seitebesteht aus einzelnen Controls. Es gibt Container Controls, die wiederumselbst andere Controls enthalten können, und es gibt normale Controls,wie z.B. Eingabefelder und Buttons. Das XML-Layout der Seite sieht fol-gendermaßen aus:

Listing 5.1 XML-Layout einer Casabac-Seite

<page model="TaxCalcAdapter"> <titlebar name="VAT Calculator"></titlebar> <header withdistance="false"> <button name="Exit" method="endProcess"></button> </header> <pagebody> <rowarea name="VAT Input"> <itr> <label name="Net Amount" width="120"/> <field valueprop="netAmount" width="200" datatype="float"/> </itr>

Abbildung 5.3 Beispiel einer Mini-Anwendung zur Berechnung der Mehrwertsteuer

Kap05.fm Seite 119 Dienstag, 22. April 2003 2:32 14

Page 120: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

120 Frontend und GUIs

<vdist height="10"/> <itr> <label name="VAT Category" width="120"/> <radiobutton valueprop="vatCategory" value="0"/> <label name="Without VAT" width="200" asplaintext="true"/> </itr> <itr width="120"> <hdist width="120"/> <radiobutton valueprop="vatCategory" value="8"/> <label name="Reduced VAT" width="200" asplaintext="true"/> </itr> <itr width="120"> <hdist width="120"/> <radiobutton valueprop="vatCategory" value="16"/> <label name="Full VAT" width="200" asplaintext="true"/> </itr> <vdist height="10"/> <itr> <hdist width="120"/> <button name="Calculate" method="onCalculate"/> </itr> </rowarea> <rowarea name="VAT Result"> <itr> <label name="VAT Amount" width="120"/> <field valueprop="vatAmount" width="200" displayonly="true" datatype="float"/> </itr> </rowarea> </pagebody> <statusbar withdistance="false"/></page>

Kap05.fm Seite 120 Dienstag, 22. April 2003 2:32 14

Page 121: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

Casabac GUI-Server 121

Sie sehen, die XML-Layout-Definition entspricht genau der Darstellungder Seite. Die Seite selbst (page-Control) bezieht sich auf die Adapter-klasse TaxCalcAdapter. Die Felder beziehen sich auf Properties derKlassen, z.B. bezieht sich ein Feld (field-Control) über sein valueprop-Attribut auf einen bestimmten Property-Namen. Der Button wiederumbezieht sich auf eine Methode onCalculate.

Die in der Seitendefinition referenzierten Properties und Methoden wer-den über die Adapterklasse zur Verfügung gestellt:

Listing 5.2 Eine Minimal-Implementierung der Adapterklasse

import java.util.*;import java.math.*;import com.casabac.server.*;import com.casabac.server.util.*;import com.casabac.util.*;

public class TaxCalcAdapter extends Model{ // ----------------------------------------------- // property access // -----------------------------------------------

���Bild

���Bild 04_04 fehlt!!!���

Abbildung 5.4 Das Layout-Painter-Tool selbst läuft im Browser

Kap05.fm Seite 121 Dienstag, 22. April 2003 2:32 14

Page 122: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

122 Frontend und GUIs

BigDecimal m_netAmount = new BigDecimal(0); public BigDecimal getNetAmount() { return m_netAmount; } public void setNetAmount(BigDecimal value) { m_netAmount = value; }

BigDecimal m_vatAmount = new BigDecimal(0); public BigDecimal getVatAmount() { return m_vatAmount; } public void setVatAmount(BigDecimal value) { m_vatAmount = value; }

BigDecimal m_vatCategory = new BigDecimal(0); public BigDecimal getVatCategory() { return m_vatCategory; } public void setVatCategory(BigDecimal value) { m_vatCategory = value; }

// ----------------------------------------------- // public adapter methods // ----------------------------------------------- public void onCalculate() { m_vatAmount = m_netAmount.multiply(m_vatCategory); m_vatAmount = m_vatAmount.divide(new BigDecimal(100),2); }}

In diesem Beispiel wurde der für eine Geschäftslogik passende DatentypBigDecimal verwendet. Natürlich können auch alle anderen Datentypenwie z.B. float, int etc. verwendet werden.

Mehr als die beiden gezeigten Bestandteile – Layout-Definition undKlasse – werden nicht benötigt. Der Anwendungsentwickler kommt nichtin Kontakt mit Stylesheets, JavaScript, Server-Session-Verwaltung, server-seitigem Scripting oder Ähnlichem.

Kap05.fm Seite 122 Dienstag, 22. April 2003 2:32 14

Page 123: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

Web Dynpro und Business Server Pages 123

In dem Beispiel wurde die Mehrwertsteuer direkt im Adapter berechnet.In einem strukturierteren Ansatz würde man alle Geschäftslogik natürlichnicht direkt in dem Adapter codieren, sondern über APIs kapseln. VomAdapter aus können diese APIs dann angesprochen werden. Beispielehierzu sind

� Aufruf von SAP-BAPIs über Java Connector, Web AS, Business Connec-tor oder einen anderen HTTP-Message-Server

� Aufruf von auf Enterprise JavaBeans (EJB) basierenden Systemen

� Aufruf von beliebigen Webservices

5.2 Web Dynpro und Business Server PagesWeb Dynpro ist eine Entwick-lungsumgebung zur Frontend-Entwicklung

Mit Web Dynpro versucht SAP, die klaffende Lücke zwischen Applikationund Browseroberfläche für Anwender und Entwickler gleichermaßen zuschließen. Aufbauend auf Business Server Pages, bietet Web Dynpro eineEntwicklungsumgebung und einen intelligenten GUI-Server, der das Ent-wickeln von Transaktionen für das Internet unterstützt.

Web Dynpro ab Release 6.30

Web Dynpro wird nach dem jetzigen Stand ab Web AS Release 6.30 zurVerfügung stehen. Es wird keine Lösungen für ein früheres Release geben.Frontends werden fortan auf einem dedizierten Web AS entwickelt, derdann über RFC auf andere SAP R/3-Instanzen zugreift.

Model View Controller

Die Grundlage von Web Dynpro ist der Model View Controller (MVC).Dies ist ein Repository, das die Informationen über Aufbereitung undTransaktion abspeichert und bei Anforderung den passenden HTML-Codegeneriert.

Runtime-Code wird aus Meta-daten erzeugt

Eine ganze Reihe von Tools erlauben es, entweder auf vordefinierte Lay-outs zur Bildschirmgestaltung zurückzugreifen oder selbst eigene Layouts

Abbildung 5.5 Web Dynpro innerhalb von mySAP Technology/SAP NetWeaver

Kap05.fm Seite 123 Dienstag, 22. April 2003 2:32 14

Page 124: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

124 Frontend und GUIs

zu entwerfen. Aus diesen Metadaten wird dann der Runtime-Code fürdie verschiedenen Plattformen ABAP, Java oder Microsoft.NET erzeugt.

Entwickler codiertnur noch Ereig-

nisse in derAnwendung

Damit schließt Web Dynpro die Lücke zwischen der klassischen SAP-Dyn-pro-Technik und flexibler Webentwicklung. Der Controller von Web Dyn-pro kümmert sich um die wiederkehrenden Arbeiten auf unterer Ebenewie die Anpassung des Codes an die Möglichkeiten des Browsers. DerEntwickler kümmert sich nur um das Ausfüllen der Code-Segmente fürdie jeweiligen Webevents, die bei üblichen Ereignissen ausgelöst werden,zum Beispiel beim Laden einer Seite, bei einem Mausklick oder einer Ein-gabe.

Web Dynproersetzt SAP GUI

Web Dynpro zielt auch darauf, den Zugang zu SAP-Daten von besonde-ren Applikationen aus möglich zu machen. Man denkt da in erster Liniean mobile Eingabegeräte wie PDAs, GSM-Telefone mit Browser oder dieBereitstellung der Dienste als Webservice. Langfristig ist das Ziel, dasbestehende klassische SAP GUI durch Web Dynpro zu ersetzen.

Kap05.fm Seite 124 Dienstag, 22. April 2003 2:32 14

Page 125: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

Message-Queues und Message-Server 125

6 Message-Queues und Message-Server

Der wesentliche Unterschied zwischen moderner objektorien-tierter Programmierung und traditioneller imperativer Ent-wicklung liegt in der gezielten Verwendung von Nachrichten. Messages erlauben ein gleichberechtigtes Nebeneinander von spezialisierten Programmkomponenten, die sich gegenseitig über Status und Ergebnisse informieren und auf die ausgelös-ten Events reagieren.

Eine Message-Queue ist intelligente Software, deren Aufgabe es ist, denAustausch von Informationen zwischen Programmen sicherzustellen.Dabei handelt es sich nicht um eine neue Technologie, sondern um dieRenaissance einer Methodik, die bei Mainframes schon immer gang undgäbe war. Dort liefen Prozesse in Hintergrund-Jobs und Terminals habengrundsätzlich durch Senden von Nachrichtenströmen mit dem Main-frame kommuniziert.

6.1 Anwendungen von Message Queues

6.1.1 Modelle von Message-Queues

Der Gedanke hinter der Verarbeitung von Messages ist weithin ein Spie-gelbild der Kommunikationsabläufe im realen Leben. Jemand (der Client)benötigt die Hilfe eines kompetenten Dienstleisters (des Servers). Häufigkennt der Client aber niemanden, der die Dienstleistung erbringen kann.

Stellen wir uns vor, der Client sei ein Handwerksmeister und er sucheeinen Betrieb, der ihm seine Werkstatt renoviere und neu einrichte.Natürlich möchte er das beste Angebot haben. Er hat nun mehrere Mög-lichkeiten:

� Branchenverzeichnis – Directory ServiceEr kann entweder in einem Verzeichnis wie den Gelben Seiten oder»Wer liefert was?«, Google oder Yahoo! nachsehen und dann alle Ein-richter anschreiben und ein Angebot einholen. Das Problem entstehtschon beim Durchsuchen des Verzeichnisses: Es gibt mehr als eineBranche, die Werkstätten einrichtet, darunter auch solche, die dies garnicht ausdrücklich erwähnen, sondern die Leistung unter anderemNamen erbringen.

Kap06.fm Seite 125 Dienstag, 22. April 2003 2:32 14

Page 126: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

126 Message-Queues und Message-Server

Directory Service Im Falle einer Message-Queue nennt man eine solche Dienstleistungeinen Directory Service. Da der Anfragende dabei in der Regel auf eineAntwort des Directory Service wartet, spricht man hier von einerpseudo-synchronen Verarbeitung.

� Ausschreibung und KleinanzeigeDer Handwerksmeister kann aber auch in einer Zeitung oder im Inter-net die Leistung ausschreiben und auf eingehende Angebote warten.Leider steht und fällt diese Idee mit der Reichweite der Anzeige, alsodamit, wie viele geeignete Bewerber die Anzeige überhaupt sehen.

Broadcast andSubscribe

Im Falle einer Message-Queue nennt man dies Broadcast and Subscribe,damit ist gemeint, dass eine Nachricht verteilt wird und man anschlie-ßend auf eine Antwort wartet. Alternative Namen dafür sind auch Fireand Subscribe und Mail-Out.

� Spezialdienst oder NachrichtendienstUnser Meister hat aber noch eine bessere Idee, er möchte jemandenfragen, der vielleicht einen geeigneten Betrieb empfehlen kann. Alsogeht er zum Bürgermeister, der ja alle Handwerksbetriebe vor Ortkennt, und erkundigt sich bei ihm, wer denn genau hierfür geeignetsei. Alternativ kann er auch auf eine Preisagentur zurückgreifen, dem-nach ein Unternehmen, das sich darauf spezialisiert hat, Anbieter undDienstleister zusammenzuführen.

Content DrivenDelivery

Dies nennt man im Workflow-Umfeld Content Driven Delivery undmeint die Fähigkeit eines Message-Servers, den Empfänger und dieFolgehandlung einer Nachricht aus dem Inhalt abzuleiten. Ein vordefi-niertes Prozedere für den Workflow nennt man auch Standard Opera-tion Procedure (SOP).

6.1.2 Nutzen der Message-Queues

Für die Verteilung der Nachrichten und ihre Zustellung an eine Applika-tion gibt es verschiedene Strategien, die von den Message-Queues erfülltwerden. Insbesondere erfüllt die Message-Queue die Routineaufgaben,die ansonsten von jeder Applikation selbst realisiert werden müssten:

Sichere Zustellung

� Guaranteed DeliveryDie Angst jedes Senders einer Nachricht ist es, dass die Nachricht nichtzugestellt werden kann. Dabei kann die Nachricht einfach verlorengehen oder sie wird an den Sender zurückgeliefert. In jedem Fall hatder Sender die Pflicht, Maßnahmen zu ergreifen, dass die Daten beimEmpfänger ankommen. Da kann es schon einmal vorkommen, dass die

Kap06.fm Seite 126 Dienstag, 22. April 2003 2:32 14

Page 127: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

Anwendungen von Message Queues 127

schöne EDIFACT-Nachricht plötzlich auf Papier ausgedruckt via Faxnachgereicht wird.

Die Message-Queue implementiert nun Standardalgorithmen, die ver-suchen, die gängigen Fälle von Zustellfehlern automatisch und unbe-merkt von den Nutzern zu beheben. Bewährte Strategien sind:

� Regelmäßiges Neusenden in Intervallen

� Zustellungen an eine alternative Notfalladresse

� Alarmierung des Bereitschaftsdienstes

� Auswahl eines Empfängers einer NachrichtZustellung nach Inhalt, nicht nach Adresse

Häufig ist dem Sender einer Nachricht überhaupt nicht bekannt, wel-cher der möglichen Server auf der Empfängerseite der geeignete Part-ner für die Nachricht ist. Senden wir zum Beispiel einen Werkstattauf-trag als E-Mail an »Herrn Müller«. Wenn nun Herr Müller in Pensiongeht, müsste in allen Client-Systemen die Adresse von Herrn Müllerdurch die des neuen Zuständigen ausgetauscht werden. Anstatt nunEmpfängerlisten auf jedem Client-System zu replizieren und zu pfle-gen, wird eine logische Adresse, zum Beispiel »Werkstatt«, auf Dauervergeben. Ändert sich dann die Adresse, wird diese nur auf dem Mes-sage-Queue-Server geändert.

Anwendung für inhaltsbezogene Adressierung

In der Praxis sendet deshalb der Requester seine Anfrage an den Mes-sage-Server mit einer hinreichenden Beschreibung des gewünschtenKommunikationspartners. Typische Anwendungen für eine solcheinhaltsbezogene Adressierung sind:

� Load-BalancingWenn eine Instanz eines Servers – zum Beispiel SAP R/3 – auf meh-reren Applikationsservern läuft, werden Anfragen für eine neue Ver-bindung durch den Message-Server auf den Applikationsservergeleitet, der momentan am wenigsten ausgelastet ist. Die Intelli-genz für die Bestimmung der geeigneten Maschine ist dabei in derMessage-Queue programmiert.

� Connection-PoolingBei teuren Leitungsverbindungen zwischen Sender und Empfängerkann es sinnvoll sein, dass die Verbindung nur einmal aufgebaut undvon mehreren Nutzern verwendet wird. Als teure Verbindung sindalle Wählverbindungen anzusehen, aber auch Flaschenhälse imNetzwerk, wenn der Verhandlungsaufwand zwischen den Servernunverhältnismäßig hoch ist.

Kap06.fm Seite 127 Dienstag, 22. April 2003 2:32 14

Page 128: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

128 Message-Queues und Message-Server

� EDI-NachrichtenEDI-Nachrichten beschreiben typischerweise im Kopfsatz den Inhaltder gesendeten Nachricht. Es ist Aufgabe des EDI-Message-Servers,die Nachricht gegebenenfalls zu konvertieren und an ein geeignetesVerarbeitungsprogramm weiterzuleiten.

6.2 Message-Server Software

Entsprechend der herausragenden Bedeutung von Message-Queues gibtes mittlerweile auch unzählige Produkte von namhaften und auch vonweniger bekannten Herstellern:

� IBMIBM positioniert sich gleich mit mehreren konkurrierenden Produktenauf dem Markt:

� IBM WebSphere/MQ und WebSphere IntegratorDas Produkt hieß bis vor kurzem noch IBM MQ Series und ist einplattformunabhängiger, äußerst robuster Message-Server. Wenn esdarum geht, zuverlässig, schnell und ausfallsicher Massen von Nach-richten zu verarbeiten, ist WebSphere/MQ das Produkt der erstenWahl und wird es wohl auch noch auf lange Sicht bleiben, auchwenn das Einrichten und Programmieren für WebSphere/MQ alle-mal noch ein Albtraum sein kann.

� Lotus NotesLotus Notes war eines der ersten Message-Queue-Systeme, dienicht auf Mainframes abliefen. Damit hatte Lotus zwar frühzeitigerkannt, welche Produkte der Markt benötigt, aber ein ungeschick-tes Marketing führte dazu, dass zwar zunächst in allen bedeutendenUnternehmen Notes installiert wurde, aber die Nachricht, wozuLotus Notes geeignet ist, blieb weitestgehend verborgen. Grund-sätzlich kann man sagen, wenn Ihr Unternehmen bereits LotusNotes installiert hat – und die Chancen dafür sind groß –, dann bie-tet sich diese Installation auch als Middleware für die komplexenAnwendungen an.

� IBM CrossWorldsIBM hat sich mit CrossWorlds noch ein drittes Middleware-Produktin sein Portfolio gelegt. Die Motivation war vor allem, das SAP-Know-how von CrossWorlds abzugreifen, da es einfacher erschien,zusätzlich zu MQ noch Crossworlds zu installieren, als die Adaptervon MQ neu zu schreiben.

Kap06.fm Seite 128 Dienstag, 22. April 2003 2:32 14

Page 129: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

Message-Server Software 129

� IONABei IONA Orbix XML-Bus geht der Hersteller einen etwas anderenWeg. Im Kern haben wir es weiterhin mit einer Message-Queue zutun. Der Unterschied liegt in einer vereinfachten Betrachtung des Aus-tauschs der Nachrichten und dem konsequenten Einsatz von XML fürden gesamten Workflow.

Das ist etwa vergleichbar mit der philosophischen Frage, ob sich dieErde um die Sonne oder die Sonne um die Erde drehe. Die Antwortliegt in der Wahl des Modells. Natürlich kann man die Erde in dasZentrum des Sonnensystems stellen und kommt zu den gleichenErkenntnissen wie mit der Sonne als Dreh- und Angelpunkt. DerUnterschied liegt darin, dass mit einem geozentrischen Weltbild dieastronomischen Berechnungen ungleich komplizierter werden. So istes auch bei der Wahl des richtigen Modells für Message-Queues, undhier hat IONA deutliche Vorteile. IONA gehört neuerdings auch zumEinflussbereich von IBM.

� Microsoft MSMQMicrosoft bietet für seine NT-Server-Reihen einschließlich Windows2000 (NT 5) und Windows XP (= NT 6) die Microsoft-Message-Queue,kurz MSMQ, an und bleibt dabei auch seiner bewährten Marke-tingstrategie treu. Anstatt auf interessierte Kunden zu warten, werdenalle Windows-Server-Nutzer mit MSMQ zwangsweise beglückt: DasProgramm ist kostenloser Bestandteil jeder NT-Server-Installation. DieFolge ist, dass MSMQ die zahlenmäßig am weitesten verbreitete Mes-sage-Server-Software ist, wohingegen die Zahl der Produktivnutzervon MSMQ gegenwärtig noch überschaubar erscheint. Jedoch istdabei auch zu beachten, dass Microsoft diese Dienste auch für andereZwecke, etwa für Outlook und Workflow, nutzt.

� Microsoft BIZTALKAuch Microsoft geht mit mehreren alternativen Produkten in dieArena. Aufbauend auf MSMQ, bietet Microsoft sein professionellesWorkflow-Management-System BIZTALK an.

� MercatorMercator ist eigentlich ein EDI-Konverter, der aber mittlerweile zueinem flexiblen Message-Handling-System gewachsen ist. Die Basisdes Erfolgs von Mercator ist dessen weitgehende und einfache Unter-stützung der R/3-Anbindung.

Kap06.fm Seite 129 Dienstag, 22. April 2003 2:32 14

Page 130: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

130 Message-Queues und Message-Server

� TibcoTibco gehört ebenfalls zu den ganz großen und namhaften Lieferantenvon Messaging-Software. Auch Tibco unterstützt SAP R/3 sehr gut, wasauch wichtig ist, denn der Austausch von Messages von und nach SAPR/3 ist weiterhin einer der wichtigsten Anwendungen für Middleware.

� SAP Exchange InfrastructureSAP spielt mit SAP Exchange Infrastructure seit Mitte 2002 ebenfalls inder Liga der Message-Server. Als Bestandteil von SAP-NetWeaver sollSAP XI mittelfristig den gesamten Nachrichtenfluss von, nach und zwi-schen SAP-Systemen innerhalb einer IT-Landschaft gewährleisten. Auchwenn das Produkt gegenwärtig noch kaum auf dem Markt vertreten ist,verspricht es doch, eines der stärksten mySAP-Produkte zu werden.

6.3 Kommunikation mit Messages-QueuesOrchestrierung

aller Nachrichten-ströme

Eine Message-Queue ist technisch gesehen eine zentral zugänglicheDatenbank, an die ein Client seine Nachrichten sendet. Die Nachrichtenwerden in der Datenbank zwischengespeichert, bis sie von einer Applika-tion verarbeitet werden können.

Grundlage fürasynchrone

Prozesse

Message-Queues erlauben die asynchrone Verarbeitung von Nachrichtenund Anfragen, bei der eine Applikation eine Anfrage an die Message-Queue zur weiteren Verfolgung abgibt. Die verarbeitende Applikationmeldet das Ergebnis der Verarbeitung dann an die Message-Queue wei-ter, von der der ursprüngliche Requester die Antwort dann abholen kann,sobald er dafür Zeit hat.

Wenn eine Applikation eine ressourcenintensive Anfrage startet, sendetsie die Anfrage an die Message-Queue und erhält von dieser eine eindeu-tige Ticketnummer. Mit dieser Nummer kann dann der Vorgang spätereindeutig verfolgt werden.

Serialisierungvon Anfragen

Die eingegangenen Nachrichten werden von der Message-Queue auto-matisch in einer sinnvollen Folge serialisiert und an die Applikation wei-tergeleitet. Abhängig von der gewünschten Aktion speichert die Message-Queue auch Zwischenergebnisse und den Status der Verarbeitung ab.

Es gibt nun zwei Typen von Applikationen: solche, die von der Message-Queue aufgerufen werden, und solche, die regelmäßig die Message-Queuenach neuer Arbeit durchsuchen. Letztere nennt man einen Daemon, es sindProgramme, die als Hintergrundprozesse permanent ausgeführt werdenund nur in Aktion treten, wenn ein bestimmtes Ereignis, wie etwa der Ein-gang einer Nachricht, auftritt.

Kap06.fm Seite 130 Dienstag, 22. April 2003 2:32 14

Page 131: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

Kommunikation mit Messages-Queues 131

TriggerAlternativ bietet eine Message-Queue immer die Möglichkeit, eine Appli-kation bei Bedarf zu starten. Das sorgt ebenfalls dafür, dass wertvollerHauptspeicher nicht durch schlafende Prozesse ausgelastet wird. Zum Bei-spiel stellt Microsoft in der MSMQ die Applikation Microsoft MSMQ Trig-ger zur Verfügung, die es erlaubt, Nachrichten nach Inhalten, etwabestimmten Strings, zu durchsuchen und dann eine Aktion auszulösen.Der regelbasierte Mail-Organizer Microsoft Outlook benutzt diese Tech-nik.

Der Daemon meldet die Ergebnisse der Verarbeitung an die Message-Queue zur Abspeicherung zurück. Heutzutage werden die Ergebnisse fastimmer als XML-Dokumente ausgetauscht.

Denken wir an die bekannte Situation, eine Datenbank über eine hochfrequentierte Webseite abzufragen. Wenn viele Anfragen gleichzeitig aufdie Datenbank zugreifen, können die Wartezeiten unerträglich sein. Miteiner Message-Queue dahinter können Sie die Anfrage in den Hinter-grund verlagern und das Ergebnis zu einem späteren Zeitpunkt abholen.

Tatsächlich spielen mächtige Message-Queue-Systeme eine wichtigeRolle im modernen Enterprise-Computing. Wenn die Serverfarmen nurhinreichend groß werden, geht ohne die Message-Queues nichts mehr.Zusammen mit dem Transaktionsmanagement orchestrieren sie die Lastder Anfragen (Load Balancing)und versuchen durch gemeinsame Nutzungbereits bestehender und laufender Prozesse (Pooling), besonders die teu-ren Ressourcen besser auszunutzen.

Message-Queues steuern auch die Batch-Verarbei-tung

Eine weitere Aufgabe einer Message-Queue ist es, Nachrichten für eineverzögerte Verarbeitung aufzubewahren. Dazu gehören vor allem dieMassen-Batch-Läufe, etwa das Ausdrucken von Fakturen und Auftragsbe-stätigungen während der weniger belasteten Nachtzeiten. Auch SAP R/3bedient sich dieser Mechanismen mit den Einträgen in der Tabelle NAST(für Nachrichtensteuerung), bei der es sich ebenfalls um eine Message-Queue handelt.

WorkflowBaut man nun ganze Ketten von Nachrichten, die Applikationen antrig-gern und dann ihrerseits wieder Nachrichten versenden, kommen wirzum Prinzip des Workflows, heute oft auch Webflow genannt, um anzu-zeigen, dass die Nachrichten auf Wunsch auch über das Web ausge-tauscht werden können.

Kap06.fm Seite 131 Dienstag, 22. April 2003 2:32 14

Page 132: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

132 Message-Queues und Message-Server

Abbildung 6.1 Message-Queue als Dispatcher in einer Application Server Farm

Central Message Queue

n 4 3 2 1

R/3 Application Server Farm

R/3 App Server

R/3 App Server

R/3 App Server

Web Server Farm

IISServer

IISServer

IISServer

Kap06.fm Seite 132 Dienstag, 22. April 2003 2:32 14

Page 133: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

Internes Messaging in R/3 133

7 Internes Messaging in R/3

Auch SAP R/3 verwendet ein sehr ausgefeiltes Messaging-Konzept, um die parallele Verarbeitung der Anwendung sicherzustellen. Grundsätzlich kennt SAP R/3 folgende Mes-sage-Pipes: Verbucher, Nachrichtensteuerung, Workflow und IDocs.

7.0.1 NAST Message Control

Die Nachrichtensteuerung in SAP R/3 ist um die Tabelle NAST herum-gebaut, die auch ihren Namen davon ableitet (NAchrichtenSTeuerung).Wie bei jeder Message-Queue legt die anfragende Applikation ihre Nach-richten in NAST ab, wo sie dann von einem interessierten Verbraucherirgendwann abgegriffen und verarbeitet wird.

Der Verbraucher läuft asynchron

Ein Programm, das eine Nachricht abarbeitet, nennt man Verbraucher(englisch: consumer) oder Handler. Der Verbraucher läuft asynchron zumRequester ab, ist also vollkommen von diesem entkoppelt. Der Zeitpunktder Abarbeitung der Nachricht ist nicht vorher bestimmt und die Verar-beitung der Nachricht läuft als separate Transaktion ab. Falls die rufendeTransaktion das Ergebnis benötigt, muss sie die eigene Transaktion erst selbst beenden und dann das Ergebnis pollen.

Entkopplung der Transaktion nur eingeschränkt

Die Entkopplung von NAST-Routinen aus einer Transaktion ist leider nichtvollständig. Tatsächlich wird im Falle eines Verarbeitungszeitpunkts »4 =sofort nach Sichern verarbeiten« die Verarbeitung noch innerhalb desVerbuchens angestoßen und unterliegt somit den Restriktionen der Ver-bucherverarbeitung. Es besteht die Möglichkeit, dies zu umgehen, indemman aus der Verarbeitungsroutine heraus einen RFC absetzt, allerdings istes dann schwierig, den Verarbeitungsstatus synchron zu halten:

� Der Requester speichert seine Nachricht in der Tabelle NAST.

� Ein Programm, gewöhnlich RSNAST00, pollt die Tabelle NAST nachunverarbeiteten Nachrichten und aktiviert das Programm, das für dieVerarbeitung der Nachricht als Verbraucher vorgesehen ist.

� Die Verarbeitungsroutine schließt die Verarbeitung ab, indem sie dieNachricht als verarbeitet kennzeichnet und einen Status in NASTzurückschreibt.

Kap07.fm Seite 133 Dienstag, 22. April 2003 2:32 14

Page 134: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

134 Internes Messaging in R/3

� Wenn RSNAST00 zur Verarbeitung verwendet wird, werden alle Ver-waltungsaufgaben von diesem übernommen und lediglich eine imCustomizing vorzugebende Routine zur Verarbeitung aufgerufen.

7.0.2 Entwicklung eigener NAST-Handler

Standardverarbei-tung in SAP R/3

via RSNAST00

Wenn Sie planen, selbst Nachrichten aus der Tabelle NAST zu verarbei-ten, sollten die Verarbeitungsroutinen kompatibel mit der allgemeinenNachrichtenverarbeitung in RSNAST00 sein. Die Standardverarbeitungvon SAP R/3 legt Nachrichten in der Tabelle NAST über die Nachrichten-findung mit dem Funktionsbaustein function MESSAGING an. Dieserbenutzt zum einen die Konditionstabellen für die Nachrichtenfindung,sofern diese für die gewünschte Applikation definiert worden sind. AmEnde einer Transaktion, die die Standardverarbeitung verwendet, ruft SAPR/3 die Routine

PERFORM einzelnachricht IN PROGRAM RSNAST00

auf. Diese Routine geht davon aus, dass in der Tabelle TNAPR für diegewünschte Nachricht ein Eintrag vorhanden ist, der den Namen des Ver-arbeitungsprogramms enthält. Das folgende Listing zeigt ein Beispiel füreine solche Routine.

Listing 7.1 ZSNASTWF – Beispiel einer NAST-Routine zum Triggern eines Workflows

****************************************************** Collection of NAST processing routines ** for media = 8 : special processing ** for media = 9 : Workflow Event ** for media = T : Workflow Task ** ******************************************************* <object> contains call declarations for object hand-lingINCLUDE <OBJECT>.* Following are the declarations for standard NASTINCLUDE RVADTABL .DATA: RETCODE LIKE SY-SUBRC.DATA: XSCREEN.*----------------------------------------------------** FORM CREATE_EVENT **----------------------------------------------------*

Kap07.fm Seite 134 Dienstag, 22. April 2003 2:32 14

Page 135: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

Internes Messaging in R/3 135

* Routine is used to process NAST media type "9" (Work-flow Event) ** It will actually raise the specified workflow Event* as defined in NAST-OBJECT and NAST-EVENT* Note: NAST-EVENT must exist for object NAST-OBJECT* or its delegation type (=derived subtype)*----------------------------------------------------*FORM ENTRY_CREATE_EVENT USING RETURN_CODE US_SCREEN. PERFORM CREATE_EVENT(RSWEMC01) USING RETURN_CODE US_SCREEN.ENDFORM. " create_Event.

Das folgende Listing zeigt eine Routine zum Rückschreiben eines Verar-beitungsprotokolls.

Listing 7.2 Update des Verarbeitungsprotokolls im NAST-Handler

FORM PROTOCOL_UPDATE USING MSG_ARBGB MSG_NR MSG_TY MSG_V1 MSG_V2 MSG_V3 MSG_V4. CHECK XSCREEN = SPACE. SYST-MSGID = MSG_ARBGB. SYST-MSGNO = MSG_NR. SYST-MSGTY = MSG_TY. SYST-MSGV1 = MSG_V1. SYST-MSGV2 = MSG_V2. SYST-MSGV3 = MSG_V3. SYST-MSGV4 = MSG_V4.

CALL FUNCTION 'NAST_PROTOCOL_UPDATE' EXPORTING MSG_ARBGB = SYST-MSGID MSG_NR = SYST-MSGNO MSG_TY = SYST-MSGTY MSG_V1 = SYST-MSGV1 MSG_V2 = SYST-MSGV2

Kap07.fm Seite 135 Dienstag, 22. April 2003 2:32 14

Page 136: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

136 Internes Messaging in R/3

MSG_V3 = SYST-MSGV3 MSG_V4 = SYST-MSGV4 EXCEPTIONS OTHERS = 1.ENDFORM.

Im nächsten Beispiel erzeugen wir ein Workitem aus einer NAST-Nach-richt. Ein Workitem ist eine E-Mail, die eine Entscheidung vom Empfän-ger erwartet. Sobald der Entscheider sein Workitem beantwortet hat,wird der Workflow unter Auswertung der Antwort fortgeführt.

Listing 7.3 Workitem erzeugen aus einem NAST-Eintrag

FORM ENTRY_WORKITEM USING RETURN_CODE US_SCREEN. CLEAR RETCODE. XSCREEN = US_SCREEN. PERFORM DO_WORKITEM USING US_SCREEN NAST-OBJKY. CASE RETCODE. WHEN 0. RETURN_CODE = 0. "all well done, sets VSTAT = 1 WHEN 3. RETURN_CODE = 3. "means not processed, leaves VSTAT = 0 WHEN OTHERS. RETURN_CODE = 1. "Errors, sets VSTAT = 2 ENDCASE.ENDFORM.

FORM DO_WORKITEM USING RETURN_CODE US_SCREEN.DATA: WI_CONTAINER LIKE SWCONT OCCURS 0 WITH HEADER LINE.DATA: AGENTS LIKE SWHACTOR OCCURS 0 WITH HEADER LINE.DATA: SWWWIHEAD LIKE SWWWIHEAD.DATA: BEGIN OF OBJECT_ID, LOGSYS LIKE T000-LOGSYS, OBJTYPE LIKE SWOTENTRY-OBJTYPE, KEY LIKE SWCONT-VALUE, END OF OBJECT_ID.*

Kap07.fm Seite 136 Dienstag, 22. April 2003 2:32 14

Page 137: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

Internes Messaging in R/3 137

DATA: TASKNAME LIKE HRP1000-MC_SHORT.DATA: OBJNAME LIKE SWOTENTRY-OBJTYPE.*ARAMETERS: taskname LIKE hrp1000-mc_short DEFAULT 'ZAXXVA02'.*ARAMETERS: objname LIKE swotentry-objtype DEFAULT 'BUS2032'.* *** ************ Object ID ************************* The logical system is retrieved from table T000-logsys CALL FUNCTION 'OWN_LOGICAL_SYSTEM_GET' IMPORTING OWN_LOGICAL_SYSTEM = OBJECT_ID-LOGSYS.* BUS2032 is the sales order BAPI OBJECT_ID-OBJTYPE = NAST-OBJTYPE. TASKNAME = NAST-EVENT. OBJECT_ID-KEY = NAST-OBJKY.* *** Load Container REFRESH WI_CONTAINER.* The object_id must be passed to the macro as an unstructured type* If the type is structured, one single entry for every sub-field* of the parameter is created. This is not what we want. WI_CONTAINER-VALUE = OBJECT_ID. SWC_SET_ELEMENT WI_CONTAINER '_WI_OBJECT_ID' WI_CONTAINER-VALUE.*swc_set_element wi_container 'SALESDOCUMENT' object_id-key. SWC_SET_ELEMENT WI_CONTAINER 'VBELN' OBJECT_ID-KEY.* *** Identify yourselfSWWWIHEAD-WI_CREATOR = SY-UNAME.* *** Set the action that continues the WorkitemSELECT OBJID INTO SWWWIHEAD-WI_RH_TASK "need internal object id FROM HRP1000 UP TO 1 ROWS WHERE MC_SHORT EQ TASKNAME.ENDSELECT.IF SY-SUBRC NE 0. MESSAGE A000(38) WITH 'Task not found' TASKNAME.ENDIF.* *** Define the users, which are meant to check the workitemREFRESH AGENTS.

Kap07.fm Seite 137 Dienstag, 22. April 2003 2:32 14

Page 138: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

138 Internes Messaging in R/3

AGENTS-OTYPE = 'US'.AGENTS-OBJID = 'ANGELIAX1'.APPEND AGENTS.CALL FUNCTION 'SWW_WI_START_SIMPLE' EXPORTING CREATOR = SWWWIHEAD- WI_CREATOR TASK = SWWWIHEAD- WI_RH_TASK TABLES AGENTS = AGENTS WI_CONTAINER = WI_CONTAINER EXCEPTIONS ID_NOT_CREATED = 1 READ_FAILED = 2 IMMEDIATE_START_NOT_POSSIBLE = 3 EXECUTION_FAILED = 4 INVALID_STATUS = 5 OTHERS = 6.ENDFORM. " entry_workitemh USING return_code us_screen.

7.0.3 Workflow-Events

Mit Workflow-Ereignissen kann man nachfolgende Verarbeitungenunmittelbar aufrufen. Die Idee dahinter ist, dass das rufende Programmder Öffentlichkeit, de facto der Workflow-Engine, seinen eigenen Verar-beitungsstatus anzeigt. Man sagt, es feuert einen Event. Die Workflow-Engine analysiert den Event und reagiert entsprechend darauf. Dazu wirddie Liste der interessierten Applikationen durchgegangen und diese gege-benenfalls aufgerufen. Falls keine Applikation für den Event vorgesehenist, wird er ignoriert, man spricht davon, dass der Event verbrannt werde.

7.0.4 Pro und Kontra Workflow versus NAST

Pro und KontraWorkflow und

NAST

Die Entscheidung zwischen NAST und Workflow hängt von verschiede-nen Kriterien ab. Beide Messaging-Varianten leisten im Endergebnis dasGleiche:

� Die Protokollierung bei NAST ist einfacher, da bereits Mechanismenzum Wegschreiben der Status und von Langprotokollen vorgesehensind. Dazu bedient sich der NAST-Handler des FunktionsbausteinsFunction NAST_PROTOCOL_UPDATE.

Kap07.fm Seite 138 Dienstag, 22. April 2003 2:32 14

Page 139: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

Messaging mit R/3-IDocs 139

� Zur Protokollierung von Langtexten bei Workflow müssen Sie entwe-der eigene Mechanismen verwenden oder Sie greifen auf den Applika-tionslog von R/3 zurück, der mit den Funktionsbausteinen der Funkti-onsgruppe SLG0, die mit APPL_LOG_... beginnen, geschrieben wird.

� Workflows werden grundsätzlich synchron gestartet. Versagt derWorkflow, wird er nicht mehr neu gestartet.

� Nur einzelne Transaktionen unterstützen die Nachrichtenverarbeitungmit NAST. Ein nachträglicher Einbau innerhalb eines User-Exits ist zwaroft möglich, aber in jedem Fall schwierig.

� NAST erlaubt in der Verarbeitungsroutine keine Befehle, die nicht fürVerbuchungsroutinen zugelassen sind, solange die Verarbeitung durchdie auslösende Transaktion auch gestartet werden soll.

� Workflow erlaubt jede beliebige Verarbeitung, da der Aufruf immer ineinem eigenen Programmkontext in einer eigenen RFC-Destinationausgeführt wird. Die übliche RFC-Destination für einen Workflow lau-tet WORKFLOW_LOCAL_nnn, wobei nnn die Nummer des R/3-Mandan-ten ist, in dem der Workflow ausgeführt werden soll.

7.1 Messaging mit R/3-IDocs

IDoc ist die Abkürzung für Intermediate Document. Dabei handelt es sichum ein formales Dateiformat, das von SAP festgelegt wurde, um Datenmit externen Systemen auszutauschen. Der Aufbau eines IDocs ist immergleich und besteht aus

� einem Kopfsatz

� einer beliebigen Anzahl von Datensätzen wobei jeder Datensatz aus einer führenden Sequenz als Segmentken-nung und einem Datensatz mit fester Länge von 1.000 Zeichen besteht

IDoc versendet eine Nachricht mit Daten

SAPs IDocs wurden ursprünglich als asynchrone Message-Queue für ein-gehende und ausgehende EDI-Daten entworfen. Im Unterschied zu ein-fachen Nachrichten mit NAST überträgt ein IDoc mit der Nachricht auchdie gesamten Daten.1

SAP erzeugt keine EDI-Formate

SAP erzeugt keine klassischen EDI-Datenformate wie EDIFACT oder ANSIX.12. Ab Release 4.6 können IDocs auch als XML-Datei ausgegeben wer-den.

1 Für weitere Informationen zu IDocs empfehlen wir Axel Angeli: The R/3 Guide toEDI and Interfaces. Wiesbaden 2001.

Kap07.fm Seite 139 Dienstag, 22. April 2003 2:32 14

Page 140: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

140 Internes Messaging in R/3

Die folgende Tabelle zeigt das Beispiel eines IDocs mit Segment-Info undfestem 1000-Zeichen-Datenblock rechts.

Listing 7.4 Beispiel eines IDocs zur Übertragung von Materialstammdaten

EDI_DC40 043000000000001234540B 3012 MATMAS03 MAT-MAS DEVCLNT100 PROCLNT100 E2MARAM001 043000000000001234500000100000002005TESTMAT1 19980303ANGELI 19981027SAPOSS E2MAKTM001 043000000000001234500000300000103005EEnglish Name for TEST Material 1 ENE2MAKTM001 043000000000001234500000400000103005FFrench Name for TEST Material 1 FR

Segment Info Segment Data-à

...E1MARAM ....00000001234567… Material base segment

...E1MARCM ....PL01… Plant Segment

...E1MARDM ....SL01 Storage location data

...E1MARDM ....SL02 Another storage location

...E1MARCM ....PL02 Another plant

Tabelle 7.1 Beispiel-IDoc

Abbildung 7.1 Tabellen, in denen IDocs in SAP R/3 gespeichert werden

Kap07.fm Seite 140 Dienstag, 22. April 2003 2:32 14

Page 141: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

Messaging mit R/3-IDocs 141

E2MARCM001 0430000000000012345000005000001030050100DEAVB 901 PD9010 0 0.00 EXX 0.000E2MARDM001 0430000000000012345000006000005040051000D 0.000 0.000 E2MARDM001 0430000000000012345000007000005040051200D 0.000 0.000 E2MARMM 043000000000001234500000900000103005KGM1 1 0.000 0.000

Listing 7.5 Teil des Inhalts eines IDoc-Files für IDoc-Type MATMAS01

0000000000012345 DEVCLNT100 PROCLNT100 19991103 210102 E1MARAM 005 TESTMAT1 19980303 ANGELI 19981027SAPOSS KDEAVCB E1MAKTM 005 D Ger-man Name for TEST Material 1 DE E1MAKTM 005 E Eng-lish Name for TEST Material 1 EN E1MAKTM 005 F French Name for TEST Material 1 FR E1MARCM 005 0100 DEAVB 901

IDocs harmonisch in Applikationen eingefügt

Abbildung 7.2 zeigt das Funktionsprinzip der SAP-IDoc-Engine. Darinwird deutlich, dass IDocs harmonisch in das gesamte Geflecht der Appli-kationen von SAP eingefügt werden. IDocs werden gewöhnlich durcheinen Eintrag in die NAST-Datenbank ausgelöst, können aber auch direktaus der Applikation erzeugt werden.

Die folgenden Listings zeigen Auszüge aus einem IDoc. Jedes IDoc wirddurch einen standardisierten Header-Satz eingeleitet. Die Datensätzehaben eine Segmentkennung und einen Datenblock von fester Länge.

Kap07.fm Seite 141 Dienstag, 22. April 2003 2:32 14

Page 142: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

142 Internes Messaging in R/3

Listing 7.6 Einfaches Beispiel eines IDoc Control Record für Kundenaufträge

IDOC Number Sender Receiver Port Message Type IDoc Type0000123456 R3PARIS R3MUENCHEN FILE ORDERS ORDERS01

Listing 7.7 Einfaches Beispiel eines IDoc-Datensatzes für Kundenaufträge

SegmentType Sold-To Ship-To Value Deldate UserORDERHEADER 1088 1089 12500,50 24121998 Micky Maus

7.2 SAP R/3 Workflow programmierenAutomatischeAbfolgen vonProgrammen

Ein Workflow dient dem automatisierten Verketten von einzelnen Trans-aktionen auf der Basis eines ausgelösten Events. R/3-Workflows erlaubenauch konditionale Handlungsabläufe und die Weitergabe von Daten zwi-schen den einzelnen Schritten der Verarbeitung. Workflows könnenangehalten werden, um Benutzeraktionen zu erfragen, etwa das Sendeneiner E-Mail, das eine Benutzerentscheidung verlangt.

Abbildung 7.2 Ein typisches IDoc/EDI-Ausgangsszenario aus Sicht von R/3

R/3 Database File(e.g. DB/2, ADABAS,

ORACLE)

IDoc CreatingFunction Module

IDoc DocumentStructured ASCII

File

R/3 Application

ABAP

Transaction

11 Application writesdata to R/3 databasetables.

2 An Applicationrequest sending ofan IDoc.

3 An IDoc handlercreates the IDoc andconverts data to ASCIIformat.

XML, X.12.EDIFACT ...Converter

(PC program)

4 An external program (e.g.running on NT) converts tointernational standards.

5 Data is sentto receiver, e.g.via FTP, ISDNprotocol.

optional

Kap07.fm Seite 142 Dienstag, 22. April 2003 2:32 14

Page 143: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

SAP R/3 Workflow programmieren 143

Kopplungstabelle Ein Workflow ist eine Kette von Workflow-Schritten, die nacheinanderausgeführt werden. Ein solcher Workflow ist in der Tabelle SWETYPECOUfestgelegt, beziehungsweise ab R/3 Enterprise in den Tabellen SWFDE-VENA und SWFDEVTYP. Bei diesen Schritten handelt es sich entwederum einen Funktionsbaustein oder um einen mit der Transaktion PFTCangelegten Workflow-Task.

Bedingungen festlegen

Zu jedem Schritt kann ein Funktionsbaustein festgelegt werden, derbestimmt, ob der Schritt ausgeführt wird oder nicht.

Abbildung 7.3 Workflow-Kopplung zwischen Ereignis und Verbraucher

Field name Example Description

OBJCATEG BO Object Type Category

OBJTYPE IDOCAPPL Type of Objects in Persistent Object References

EVENT INPUTERROROCCURRED Event

RECTYPE TS20000051 Name of Receiver Type

RECMODE Indicator for Event Handler

Tabelle 7.2 Einzeleintrag in der Kopplungstabelle SWFDEVTYP mit Beispielwerten

Kap07.fm Seite 143 Dienstag, 22. April 2003 2:32 14

Page 144: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

144 Internes Messaging in R/3

Listing 7.8 SAP R/3 Standard-Routine zum Auslösen eines Workflow Events

REPORT RSWEMC01.INCLUDE <CNTAIN>.TABLES: NAST, T681Z.*-----------------------------------------------------** FORM CREATE_EVENT **-----------------------------------------------------*FORM CREATE_EVENT USING RETURNCODE US_SCREEN. INCLUDE RSWUINCL. DATA: L_EVENT_CREATOR LIKE SWHACTOR .

RECCLASS Class Name of Handler

RECINTERF Interface Name of Handler

RECMETH Name of Handler Method

RECMETYP Method Type

RECFB SWE_TEMPLATE_REC_FB Name of Receiver Function Module

RECFBTYP Type of Receiver Function Module

CHECKFB SWE_TEMPLATE_CHECK_FB Name of Check Function Module

CHKFBTYP Type of Function Module

RECGETFB SWE_TEMPLATE_RECTYPE_FB Name of Receiver Type Function Module

GETFBTYP Type of Function Module

RFCDEST WORKFLOW_LOCAL_018 Name of logical RFC destination

DESTTYP Type for Call Destination

TYPELINK Flag: Global event linkage activated

QUEUE X Event Linkage: Enable Use of Queue

REC_ERROR Event Linkage: Behavior Upon Error in Receiver

RECCATEG Workflow: Object Category

RECTYPEID Type of Objects in Persistent Object References

Field name Example Description

Tabelle 7.2 Einzeleintrag in der Kopplungstabelle SWFDEVTYP mit Beispielwerten

Kap07.fm Seite 144 Dienstag, 22. April 2003 2:32 14

Page 145: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

SAP R/3 Workflow programmieren 145

DATA: L_OBJKEY LIKE SWEINSTCOU-OBJKEY. DATA: L_EVENTID LIKE SWEDUMEVID-EVTID.* IF NAST-EVENT EQ SPACE OR NAST-OBJTYPE EQ SPACE. RETURNCODE = 4. ELSE. SWC_CONTAINER L_CONT. L_EVENT_CREATOR-OTYPE = ORG_OBJTYPE_USER . "global in RSWUINCL L_EVENT_CREATOR-OBJID = SY-UNAME. "hopefully sy-uname does exist!* Ereignis absetzen L_OBJKEY = NAST-OBJKY. CALL FUNCTION 'SWE_EVENT_CREATE' EXPORTING OBJTYPE = NAST-OBJTYPE OBJKEY = L_OBJKEY EVENT = NAST-EVENT CREATOR = L_EVENT_CREATOR IMPORTING EVENT_ID = L_EVENTID TABLES EVENT_CONTAINER = L_CONT EXCEPTIONS OBJTYPE_NOT_FOUND = 01.

IF SY-SUBRC <> 0. RETURNCODE = 4. ELSEIF NOT L_EVENTID IS INITIAL. RETURNCODE = 0. ELSE. RETURNCODE = 4. ENDIF. ENDIF.ENDFORM.

Kap07.fm Seite 145 Dienstag, 22. April 2003 2:32 14

Page 146: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

146 Internes Messaging in R/3

7.3 Workflow-HandlerWorkflow braucht

EventhandlerNachdem ein Workflow einen Event ausgelöst hat, wird noch ein Pro-gramm benötigt, das auf diesen Event reagiert und eine Handlung aus-führt. Ein solcher Eventhandler kann in SAP R/3 entweder eine Methodevon einem Business-Objekt sein oder ein Funktionsbaustein, der einerbestimmten Parameterkonvention folgt.

Vorlage fürWorkflow-Handler

Im Falle eines Funktionsbausteins haben wir die gleiche Abarbeitungslo-gik wie bei einem IDoc, nur dass diesmal keine Nachricht erstellt undabgespeichert, sondern eine Aktion direkt ausgeführt wird. Als Vorlagefür das Interface des Funktionsbausteins kann man SWW_WI_CREATE_VIA_EVENT nehmen. Der neu angelegte Funktionsbaustein kann dann indie Kopplungstabellen für den Workflow (SWETYPECOU beziehungs-weise SWFDEVTYP) eingetragen werden und wird nach Auslösen einesentsprechenden Events vom Funktionsbaustein SWE_EVENT_CREATEdynamisch aufgerufen.

Das folgende Listing kann als Vorlage für ein Interface eines Workflow-Handlers dienen.

Listing 7.9 Interface eines typischen Workflow-Handlers

FUNCTION SWW_WI_CREATE_VIA_EVENT.*"----------------------------------------------------*"*"Lokale Schnittstelle:*" IMPORTING*" VALUE(EVENT) LIKE SWETYPECOU-EVENT*" VALUE(RECTYPE) LIKE SWETYPECOU-RECTYPE*" VALUE(OBJTYPE) LIKE SWETYPECOU-OBJTYPE*" VALUE(OBJKEY) LIKE SWEINSTCOU-OBJKEY*" TABLES*" EVENT_CONTAINER STRUCTURE SWCONT*"----------------------------------------------------

Kap07.fm Seite 146 Dienstag, 22. April 2003 2:32 14

Page 147: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

Programmieren mit mehreren Programmiersprachen 147

8 Programmieren mit mehreren Programmiersprachen

Zu den besonderen Kennzeichen der modernen, kollaborativer Programmierung gehört es, dass man nicht mehr in nur einer einzigen Programmiersprache entwickelt, sondern jeweils die für die Anwendung vorteilhafteste Sprache kennen muss.

»Die Grenzen deiner Sprache sind auch die Grenzen deiner Welt.«»The limits of your language are the limits of your world.«

Ludwig Wittgenstein, deutscher Philosoph und Begründer der modernenLinguistik

8.1 Von Plattformen, Frameworks und Personalities

Beim Konkurrenzkampf der Anbieter moderner Softwarelösungen ist sehrviel die Rede von Plattformen, von Frameworks und von Personalities.Dabei versteht man unter Plattform die Hardware, mit Frameworkbezeichnet man die Laufzeitumgebung, unter der die Programme ausge-führt werden, und die Personality ist der »Charakter«, die verwendeteProgrammiersprache.

8.1.1 Plattformen

Für die Bedeutung des Begriffs »Plattform« gibt es zwei Definitionen:

� Hardware-PlattformEine Plattform ist die Hardware-Umgebung, unter der eine bestimmteApplikation ausgeführt wird.

� virtuelle Plattformalternative Namen: virtuelle Maschine, Framework, Runtime, sieheauch Framework. Eine virtuelle Maschine, auf der eine Applikation aus-geführt wird und die sich der Applikation gegenüber wie eine realeHardware-Plattform mit einem eigenen, abgeschlossenen Betriebssys-tem präsentiert.

Um die Mehrdeutigkeit hinter uns zu lassen, werden wir als »Plattform«grundsätzlich nur die Hardware-Umgebung bezeichnen. Folgende Platt-formen sind im SAP-Umfeld relevant:

Kap08.fm Seite 147 Dienstag, 22. April 2003 2:32 14

Page 148: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

148 Programmieren mit mehreren Programmiersprachen

� Intel-basierte Plattformen, auch Windows-NT-Plattform Dies sind all die Plattformen, die mit einem Intel-kompatiblen Prozes-sor ausgestattet sind. In der Praxis ist das gleichbedeutend damit, dasswir einen Computer mit einer Windows-Variante als Betriebssystemhaben.

� Nicht-Intel-basierte PlattformenEs geht hier um die Computer, die nicht das Betriebssystem Windowsunterstützen. Dabei handelt es sich in der Mehrzahl um UNIX-Sys-teme, aber auch andere Betriebssysteme kommen hier durchaus inFrage. Die wichtigsten Betriebssysteme sind:

� UNIXUNIX wird heutzutage von nahezu jeder Standardware unterstützt.Es ist jedoch zu beachten, dass jeder Hersteller seine Variante einesUNIX anbietet, die nicht in allen Details zueinander kompatibelsind, weder abwärts noch aufwärts.

� Linux – die Open-Source-Variante von UNIXLinux ist eine weitere Variation von UNIX, hat jedoch durch die OSFeine ungewöhnlich hohe Verbreitung. Zwar gibt es auch bei LinuxDialekte, aber dadurch, dass Open-Source-Projekte Linux ihrenSourcecode grundsätzlich offen legen müssen, ist die Dialektvielfaltparadoxerweise geringer als zwischen proprietären Implementie-rungen des UNIX-Standards.

� IBM AS/400Insbesondere in der produzierenden Industrie mit einer hoch auto-matisierten Maschinensteuerung finden sich noch viele AS/400-Computer. Auf diesen Computern läuft sehr häufig über viele Jahregewachsene Software, die hoch spezialisiertes Know-how beinhal-tet oder gesondert entwickelte Anpassungen an die zu steuerndeMaschine enthält. Da diese Anwendungen nur schwer zu portierensind, ist es sehr kompliziert, diese Computer zu ersetzen.

� Mac OS – Apple MacintoshDer Mac ist immer noch der Exot unter den Personal Computernund wird es wohl auch bleiben. Dennoch gibt es Industriezweige,zum Beispiel die Werbe- und Druckerei-Branche, die auf dieseGeräte setzen. Dank der Webtechnologie lässt sich ein Mac heutzu-tage auch in Enterprise-Netzwerke einbinden.

� MainframeAlles, was von den klassischen Mainframes übrig geblieben ist, sinddie S/390-Rechner von IBM, deren Nachfolger, die z-Series, und

Kap08.fm Seite 148 Dienstag, 22. April 2003 2:32 14

Page 149: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

Von Plattformen, Frameworks und Personalities 149

eine Anzahl von Klonen, die diese Rechner nachbauen. Auch für dieMainframes ist es heute nicht mehr opportun, den Geist aus der Fla-sche zu lassen und sich mit den Protokolldetails zu befassen. Statt-dessen kommuniziert man auch mit Mainframes über Webservices.

8.1.2 Frameworks und Personalities

Framework = Laufzeitumgebung

Ein Framework stellt der Applikation eine Laufzeitumgebung zur Verfü-gung, die bereits den größten Teil der immer wiederkehrenden Funktio-nalitäten implementiert. Das garantiert eine einheitliche Gestaltung derApplikationen auf dem Framework, zum Beispiel ein gemeinsames Look-and-Feel der Oberfläche oder ein standardisiertes Verfahren, auf eineDatenbank oder ein Dateisystem zuzugreifen. Gleichzeitig liefert ein Fra-mework alle Werkzeuge, um Programme für die Runtime-Umgebung auf-zubereiten, zum Beispiel Direkthilfen für die Nutzung der Runtime-Bibli-otheken.

Frameworks ersetzen das Betriebssystem

Frameworks sind mittlerweile zu einer strategischen Basis für Enterprise-Applikationen geworden. Durch Frameworks ist Rapid Application Deve-lopment (RAD) erst möglich geworden. Für einen Entwickler ersetzt dasFramework weitgehend das Betriebssystem.

Wahl der Programmier-sprache

Es hat sich mittlerweile durchgesetzt, dass man eine Applikation nicht not-wendigerweise in einer einzigen Programmiersprache programmierenmuss. Vielmehr unterstützen moderne Frameworks verschiedene Pro-grammiersprachen und Programmierkonzepte, zum Beispiel objektorien-tiert oder sequenziell, imperativ oder abfrageorientiert. Damit ist die Wahlder Programmiersprache keine Design-Entscheidung mehr, sondern kannsich nach den Fähigkeiten oder Vorlieben des Entwicklers richten. Je nach-dem, in welcher Programmiersprache oder nach welchem Programmier-modell man entwickelt, spricht man von einer Personality des Frameworks.

Hier sind Beispiele für Frameworks und die enthaltenen Personalities:

� Microsoft.NET-Framework Das Microsoft.NET-Framework ist eine stabile, auf Transaktionenbasierende Laufzeitumgebung für NT und Windows 2000 und die kon-sequente Weiterentwicklung von Microsofts COM+-Architektur, diewiederum der Zusammenschluss von COM und MTS, dem MicrosoftTransaction Server, ist. Microsoft.NET unterstützt eine Anzahl von Pro-grammiersprachen, die jede für sich genutzt, aber auch gemischt ver-wendet werden können. Der Kern von Microsoft.NET ist die CommonLanguage Runtime (CLR), welche die eigentliche Virtual Machine vonMicrosoft.NET darstellt und in etwa der Java VM entspricht.

Kap08.fm Seite 149 Dienstag, 22. April 2003 2:32 14

Page 150: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

150 Programmieren mit mehreren Programmiersprachen

� SAP Web Application Server (ABAP Personality) Der SAP Web Application Server (Web AS) ist der um einen Webservererweiterte Kernel von SAP R/3 und auch bekannt als SAP-Basis Release6.x. Anders, als der Name Web AS suggeriert, handelt es sich nicht umeinen reinen webbasierten Applikationsserver, sondern um die verbes-serte, vollständige Entwicklungs- und Laufzeitumgebung von ABAP.

� Java Virtual Machine (JVM)Bei Java muss man etwas weiter ausholen, denn Java machte die virtu-ellen Maschinen wieder hoffähig (auch wenn ABAP noch nie andersfunktionierte). Die virtuellen Maschinen waren immer das hässlicheEntlein der Entwicklerwelt, immer geschmäht, weil sie angeblich zugroß, zu langsam und zu unflexibel waren, aber wenn sie, wie im Fallevon ABAP, auf der richtigen Plattform liefen, zeigte sich ihre wahreÜberlegenheit.

Es macht zwar den Anschein, als ob mittlerweile jeder ProgrammiererJava beherrsche, aber das ist wohl ein Trugschluss. Deshalb hier einekleine Einführung auch in die Konzepte von Java.

Wenn man von Java sprechen, meinen man damit in Wirklichkeit dreiverschiedene Dinge:

� die Programmiersprache Javaeine an die Syntax von C++ angelehnte Programmiersprache

� Die Java Virtual Machine, JVMdie Runtime-Umgebung, auf der Java ausgeführt wird

� Java Appletseine besondere Version von Java-Runtime-Code, die dafür gedachtist, über einen Browser geladen und auf der Workstation ausgeführtzu werden

Java ist einP-Code-Compiler

Das Konzept von Java sieht vor, dass in Java geschriebene Programme(Dateisuffix: .java) durch einen Compiler in einen optimierten Zwi-schencode übersetzt werden (Dateisuffix: .class). Der Zwischencodewird dann beim Aufrufen der Klasse durch die Runtime interpretiertund ausgeführt.

Kein Compile-on-Demand

Grundsätzlich ist das das gleiche Prinzip wie bei ABAP. Allerdings merktJava selbst nicht, wenn sich der Sourcecode geändert hat, demnachcompiliert Java nicht automatisch den Zwischencode nach jeder Ände-rung neu.

Kap08.fm Seite 150 Dienstag, 22. April 2003 2:32 14

Page 151: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

Programmiersprachen und Entwicklungsumgebung 151

Sprache und Virtual Machine sind unabhängig

Es ist wichtig, sich dieses Unterschiedes bewusst zu sein, denn vieleMissverständnisse bei Diskussionen um Java entstehen dadurch, dassman die beiden Entitäten durcheinander bringt. Es wäre zum Beispielvöllig problemlos, Compiler für andere Programmiersprachen zuschreiben, die als Ergebnis einen JVM-kompatiblen Zwischencodeerzeugen. Andererseits ist auch ein Compiler denkbar, der aus Java-Code eine ausführbare Datei oder den Zwischencode für eine andereUmgebung erzeugt. Microsoft.NET macht gerade dies mit der SpracheJ#, hinter der sich Java-ähnliche Konzepte verbergen.

Java gehört in die Gruppe der reinen objektorientierten Sprachen undwurde als solche von SUN Microsystems entwickelt. SUN hat sich denNamen Java und Design der Sprache Java mit einem Copyright schüt-zen lassen, so dass SUN die volle Kontrolle über die weitere Entwick-lung und den Einsatz von Java behalten kann. Insbesondere möchteman damit die zu starke Dialektbildung der Sprache verhindern, aberauch sicherstellen, dass niemand mit dem Namen Java werben darf,der nicht die Zertifizierung von SUN besitzt.

8.2 Programmiersprachen und Entwicklungs-umgebung

Die Auswahl der richtigen Programmiersprache gehört zu den kritischenEntscheidungen innerhalb eines Projekts. Von der Wahl der Program-miersprache hängt oft ab, auf welcher Plattform die Applikation ausge-führt werden kann. Andererseits kann, wie im Falle von Microsoft.NET,auch die Plattform die Wahl der Programmiersprache diktieren.

Ein zu großes Gewicht wird jedoch immer dem Punkt der Portabilität bei-gemessen. Java ist portabel, weil es grundsätzlich auf fast allen Compu-terplattformen läuft. Die Portabilität spielt jedoch im Enterprise-Compu-ting eine sehr geringe Rolle, denn wenn sich ein Unternehmen für einePlattform entschieden hat, ist dies eine Entscheidung für Jahrzehnte.Bereits Upgrades und Release-Wechsel von Applikationen sind normaler-weise mit so vielen Risiken verbunden, dass man die Plattform bezie-hungsweise das Framework, auf dem eine Applikation einmal läuft, nichtschnell wechselt. Viel bedeutender sind folgende Aspekte:

� Erfahrung der Entwickler mit der Programmiersprache

� Kompatibilität mit vorhandenen Diensten

� Lesbarkeit der Programme und Nachvollziehbarkeit der Programmlogik

� Zuverlässige Entwicklungsumgebung mit sehr gutem Debugger

Kap08.fm Seite 151 Dienstag, 22. April 2003 2:32 14

Page 152: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

152 Programmieren mit mehreren Programmiersprachen

ABAP entschei-dend für Erfolg

von R/3

Es steht außer Zweifel, dass der Erfolg von SAP R/2 und von SAP R/3 ent-scheidend durch die Programmierumgebung ABAP geprägt wurde. Dabeigab weniger die Programmiersprache ABAP an sich den Ausschlag als dieausgereifte und am Zweck orientierte Entwicklungsumgebung.

8.2.1 Die Entwicklungsumgebung

Volle Integrationdes Data

Dictionary

Die ABAP-Entwicklungsumgebung basiert auf einem vollständigen DataDictionary, das schon zu R/2-Zeiten vom Programmeditor aus zugänglichwar, in dem alle wesentlichen Entwicklungselemente durch vernetzte Ver-wendungsnachweise rasch erreichbar sind. Kaum eine IDE kann durch ein-fachen Doppelklick auf einen Tabellennamen in deren Definition springenoder durch Doppelklick auf den Namen eines Unterprogramms sofort alleAufrufstellen anzeigen. Der Produktivitätsgewinn ist dadurch enorm, ins-besondere bei der Fehlersuche, ganz zu schweigen davon, dass man Fehlerwie inkompatible oder fehlende Parameter schon im Vorfeld erkennt.

8.2.2 Die Compile-on-Demand-Runtime

ABAP und Turbo-Pascal haben etwas Entscheidendes gemeinsam. Beidehaben bewiesen, dass die theoretischen Ansätze im Compilerbau wenigpraxistauglich sind. Borlands Philipp Kahn gelang der Beweis, dass nichtPascal als Sprache langsam ist, sondern nur die Compiler schlecht. ABAPbringt den Beweis, dass nicht Runtime-Umgebungen langsam sind, son-dern nur deren Implementierungen. Die Performance von SAP R/3 wirdnicht durch die Runtime-Umgebung ausgebremst.

Runtimegarantiert

Unabhängigkeitvon der Plattform

Dafür garantiert die Runtime-Umgebung, dass SAP R/3 unabhängig vonder Hardware-Plattform und dem Betriebssystem bleibt und dass Pro-gramme sofort produktiv zur Verfügung stehen, wenn sich der Source-code oder eines von dessen Elementen ändert. Dies nennt man heuteCompile-on-Demand, auch wenn es den Begriff noch gar nicht gab, alsABAP dies schon konnte.

8.2.3 Der Debugger

Debugger sindSchlüssel zum

Erfolg

Ein hervorragender Debugger ist ein wichtiger Teil einer Entwicklungsum-gebung. Er dient vornehmlich der Fehlersuche, aber auch der Qualitäts-kontrolle. Das Nachvollziehen jedes einzelnen Programmschrittes unterBeobachtung ausgewählter Variablen (Watches) erlaubt Einsichten in denProgrammablauf, die im bildlich analogen Sinne den Unterschied zwischenTag und Nacht machen: Ohne Debugger läuft Ihr Programm im Dunkelnab, während mit Debugger Sie das Programm beobachten können.

Kap08.fm Seite 152 Dienstag, 22. April 2003 2:32 14

Page 153: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

Programmiersprachen und Entwicklungsumgebung 153

8.2.4 Einrichten einer Entwicklungsumgebung

Bevor Sie anfangen zu entwickeln, sollten Sie sich zunächst eine einiger-maßen stabile Entwicklungsumgebung installieren. Vor allem sollten Siesich das SAP GUI komplett auf Ihrer Arbeitsstation einrichten, da diesesfast alle RFC-relevanten Tools enthält.

Komplette SAP GUI-Installation

Es ist für einen Entwickler grundsätzlich empfehlenwert, das SAP GUIkomplett mit allen Zusätzen zu installieren. Es kann auch nicht schaden,sich die neueste Version des SAP GUI noch einmal über einen bestehen-den SAP GUI zu installieren, da dann sichergestellt ist, dass auch keineder SAP GUI-Komponenten von anderen Installern zwischenzeitlichüberschrieben wurde. Wenn Sie bisher noch nicht mit RFC von Fremd-systemen gearbeitet haben, ist es auf alle Fälle empfehlenswert, die ers-ten und auch zweiten Schritte mit einem Windows-System zu machen.Zwar geht auch fast alles von UNIX aus, aber dort sind Sie weitgehend aufJava beschränkt und viele Dinge sind deutlich schwieriger zu realisieren.

Installation eines Webservers

Sie müssen einen Webserver installiert haben, der Ihre Testbeispiele auchverwalten und ausführen kann. Dabei haben Sie die Wahl zwischen Mi-crosoft Internet Information Server, der Bestandteil jedes Windows 2000Professional-Systems ist. Für ältere NT-Systeme gibt es eine Version vonIIS im NT-Options-Pack.

Für Entwicklungen in Java können Sie entweder auf Apache Jakarta Tom-cat (www.apache.org, Projekt Jakarta) oder auf einen anderen der kom-merziellen Webserver, zum Beispiel IBM WebSphere, zurückgreifen.Tomact 4.0 basiert übrigens auf der Version von IBM WebSphere 4.0.

IDE installierenWenn Sie ASP-Seiten für den IIS entwickeln wollen, müssen Sie sicher-stellen, dass Sie eine aktuelle Version des Windows Scripting Host (WSH)zum Ausführen der Visual-Basic-Script-Befehle (VBS) verwenden. AlleScripting-Befehle für VBS und Jscript innerhalb einer Active Server Pagewerden an den WSH weitergereicht. WSH wiederum kann dann einebeliebige Windows-Applikation oder ein DCOM/ActiveX-Objekt aufru-fen.

Microsoft.NET Um richtige, transaktionsfähige Applikationen zu entwickeln, bietet sichdann das Microsoft.NET-Framework an. Dieses ist die Zusammenführungder alten COM-Technologie (auch OLE/ActiveX genannt) und des Micro-soft Transaction Server, MTS, mit der Common Language Runtime, CLR.

Kap08.fm Seite 153 Dienstag, 22. April 2003 2:32 14

Page 154: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

154 Programmieren mit mehreren Programmiersprachen

8.2.5 Plattformentscheidung: UNIX versus Windows NT

Wie bereits erwähnt, ist die Entscheidung für eine Plattform eine Ent-scheidung für ein Jahrzehnt. Einmal getroffen, werden Sie die nächstenzehn Jahre damit leben müssen. Dennoch ist die Entscheidung für dieeine oder andere Umgebung weniger dramatisch, als es gerne dargestelltwird. Sie sollten sich zur Entscheidungsfindung folgende Fragen stellen:

� Passt der neue Rechner in die alte Landschaft?Die Frage ist von hoher finanzieller Bedeutung. Wenn Ihr Unterneh-men zum Beispiel nur UNIX-Rechner in Betrieb hat, erfordert bereitsdas Hinzufügen eines einzigen Windows-Rechners, dass Sie Ihr Perso-nal für die Hardware und die Applikationen schulen. Auch müssen dieVerbindungen zwischen den Systemen funktionieren und Massen-Lizenzen werden oft getrennt nach Betriebssystem berechnet.

� Wird es in Zukunft genug ausgebildetes Personal geben?Je mehr Fachleute es für eine bestimmte Technik auf dem Markt gibt,desto schneller können Sie Personalengpässe ausgleichen und destoleichter finden Sie einen Spezialisten für gezielte Maßnahmen. Hierhaben Microsoft und Linux ganz deutlich die Nase vorn, denn allenanderen Betriebssystemen, auch dem klassischen UNIX, laufen dieguten Leute weg. Derzeit finden sich deutlich mehr Spezialisten, diedetailliert die Microsoft-Palette beherrschen, als für Linux.

� Wie sind die Unterhaltskosten im Vergleich?Auch hier gibt es kaum einen Unterschied zwischen NT und UNIX.Durch die Annäherungen von PC und Mainframe und den Trend, liebermehrere kleine als einen ganz großen Computer einzusetzen, ist dieHardware-Plattform weitgehend identisch, wenn auch Microsoft aufIntel-Systeme begrenzt ist.

� Für welche Plattform gibt es die meisten Utilities?Hier gibt es klare Vorteile für Windows. Da die meisten brauchbarenTools nicht explizit für eine Server-Umgebung, sondern für die breiteMasse der Desktop-Nutzer entwickelt wurde, ist das Angebot für Win-dows-Utilities riesenhaft im Vergleich zu UNIX.

8.2.6 Framework: Web AS/ABAP, Microsoft.NET oder J2EE

Bei der Entscheidung für das Framework erweist sich derzeit der SAPWeb AS mit der ABAP Personality als der Favorit. Das kann sich nochändern, wenn Microsoft seine Microsoft.NET-Plattform auch auf Linux-Systemen herausbringt und somit die Begrenzung auf Intel-Rechnerbeziehungsweise auf Macintosh überwindet.

Kap08.fm Seite 154 Dienstag, 22. April 2003 2:32 14

Page 155: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

Programmiersprachen und Entwicklungsumgebung 155

Jede Menge Tool für Microsoft

Microsoft.NET hat eine hohe Flexibilität bei der Auswahl der Program-miersprache und die bei weitem größte Palette an Hilfsmitteln und Appli-kationen, die durch COM benutzt werden können. Für Textformatierun-gen verwendet man die Controls aus Microsoft Word, für komplexeBerechnungen greift man auf Excel zurück, und das Erzeugen von PDFsüberlässt man den Destiller-Tools von Adobe oder dem Fineprint PDFma-ker. Im Grunde lässt sich jedes moderne Windows-Programm von einemanderen Programm steuern und somit durch Microsoft.NET unmittelbarnutzen.

J2EE ist unab-hängig von der Plattform

J2EE läuft auf fast allen Betriebsystemen, nicht nur auf Windows undUNIX, sondern auch auf Großrechnern. Außerdem wird J2EE von WebS-phere und Tomcat unterstützt, nicht aber von IIS. Allerdings ist dieserhohe Grad an Portabilität nur nachrangig für ein einzelnes Unternehmen,das sich für eine Plattform bereits entschieden hat. Das hohe Maß anUnterstützung von Open-Source-Projekten spricht für J2EE.

WebAS hat höchste Flexi-bilität und Portabilität

Der SAP Web AS ist das Framework mit dem höchsten Grad an Flexibili-tät, da es auf dem bewährten SAP R/3-Kernel aufbaut und in ABAP ent-wickelt ist. Die BSP stellen den vollen Funktionsumfang von Server Pageszur Verfügung, bieten demnach die Möglichkeit, Webentwicklungen ausJava direkt zu übernehmen.1 Gleichzeitig steht das SAP R/3-Transaktions-management in vollem Umfang zur Verfügung.

Web AS nutzt das Transaktions-Management

Damit ist der WebAS das einzige Framework, das ein in der Praxis erprob-tes und auf die realen Bedürfnisse zugeschnittenes Transaktionsmanage-ment und Applikationsserver in den Webserver integriert. Zwar bietenauch J2EE und Microsoft.NET diese Möglichkeiten, aber es gibt bis heutekeine Business-Applikationen, die eine solche Verbreitung haben, dass siein der Lage wären, einen Standard zu etablieren.

Anwendungen treiben einen Standard voran

Es darf nämlich niemals vergessen werden, dass alle Frameworks nur dasVehikel für eine Applikation bereitstellen. Um diesen zum Erfolg zu ver-helfen, muss das Vehikel auch einen praktischen Nutzen haben. DerErfolg von SAP R/3 gründet darauf, dass es nicht leere Datenbanken undEntwicklungsumgebungen ausliefert, sondern dazu auch funktionierendeAnwendungen. Es müssen also Anwendungen auf den Frameworks ent-stehen, die eine Verbreitung in der Praxis finden. In diesem Punkt ist derSAP Web AS klar im Vorteil.

1 Mit dem Realese 6.30 wird auch die Implementierung der J2EE-Laufzeit- und Ent-wicklungsumgebung vollständig abgeschlossen sein, so dass auch auf dem SAPWeb AS direkt in Java programmiert werden kann.

Kap08.fm Seite 155 Dienstag, 22. April 2003 2:32 14

Page 156: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

156 Programmieren mit mehreren Programmiersprachen

8.2.7 Windows Scripting Host versus Visual Basic

Der Windows Scripting Host (WSH) ist eine Klassenbibliothek und bein-haltet auch den VBScript-Interpreter. Der WSH ist ein Add-On zu Win-dows und findet sich in dem EXE-File WSCRIPT.EXE. Es gibt auch eineVersion für DOS mit dem Namen CSCRIPT.EXE.

Sie sollten sich vergewissern, dass Sie jeweils die neueste Version von VBShaben. Sie können Versionen bei Microsoft herunterladen unter http://msdn.microsoft.com/scripting.

VBS sindTextdateien

Alle Eingaben für VBS sind einfacher ASCII-Text, das heißt, die Programmekönnen mit einem beliebigen Texteditor erfasst werden. VBS-Programmewerden an der Datei-Erweiterung .vbs von Windows erkannt und durchWSCRIPT ausgeführt. Andere Betriebssysteme wie UNIX haben ähnlicheScript-Prozessoren, für UNIX gibt es zum Beispiel RSH und Apachebenutzt die Scriptsprache Perl.

Folgendes charakterisiert die Sprachen Visual Basic, Visual Basic Scriptund Visual Basic for Applications:

� Visual BasicVisual Basic als Compiler-Variante ist Bestandteil von Microsoft VisualStudio, der IDE von Microsoft. Mit VB können Sie eigene COM- undEXE-Objekte erzeugen.

� Visual Basic ScriptVBS ist eine eingeschränkte Interpreter-Version von Visual Basic. DieSprachelemente sind auf dem Niveau von Visual Basic 3 und erlaubenkeine typisierten Variablen. Zum Ausführen von VBS-Scripts benötigtWindows den Windows Scripting Host, der in den EXE-DateienCscript.exe (für DOS) und Wscript.exe (für Windows) implementiert ist.

� Visual Basic for ApplicationsVollständige Interpreterversion von VB als Bestandteil von MicrosoftOffice. Mit VBA ist fast alles möglich, was mit VB möglich ist, außerdem Erzeugen von kompiliertem Code.

8.2.8 Windows Classic versus Microsoft.NET

Microsoft Profes-sional Office Suite

Vielleicht stellen Sie sich die Frage, warum sich jemand noch mit klassi-schem Visual Basic und insbesondere dem Windows Scripting Host befas-sen soll, nachdem doch Microsoft.NET der neue Standard für alle Ent-wicklungen ist. Leider laufen noch lange nicht alle Applikationen unter

Kap08.fm Seite 156 Dienstag, 22. April 2003 2:32 14

Page 157: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

Die Wahl der richtigen Programmiersprache 157

Microsoft.NET. Insbesondere hat Microsoft Office eine Variante vonVisual Basic, das Visual Basic for Applications (VBA) als festen Bestandteileingebaut.

VBA eignet sich für Rapid Proto-typing

Die Entwicklungsumgebung von VBA ist sehr an die von Visual Studioangelehnt und durch die jeweiligen Kernfunktionen der Office Suite, wieTextverarbeitung und Tabellenkalkulation, eignet sich VBA hervorragendals Tool für Rapid Development. Auch lassen sich damit fast alle ASP-Ent-wicklungen elegant und einfach durchführen. Dies ist besonders interes-sant, wenn Sie von ASP aus nur auf vorgefertigte OLE-Komponentenzugreifen wollen, was zum Beispiel der Fall ist, wenn Sie mit SAP-BAPIsprogrammieren wollen, kurz gesagt, wenn Sie schnell etwas entwickelnwollen. Der Debugger hat die gleiche volle Funktionalität wie auch VisualStudio. Der einzige Nachteil ist, dass VBA keine kompilierten COM-Objekte erzeugen kann. Hierfür müssen Sie dann doch Visual Studio oderBorland Delphi heranziehen. Für komplexe Neuentwicklungen empfeh-len wir Delphi oder Microsoft.NET.

8.3 Die Wahl der richtigen Programmiersprache

Für Webentwicklungen kommen eine ganze Reihe von Programmierspra-chen in Frage. In einer modernen Client-Server-Umgebung geht es dabeinicht darum, sich für eine Sprache für die komplette Architektur zu ent-scheiden, sondern die Sprache für den jeweiligen Zweck auszuwählen.

8.3.1 Sprache für den Webserver

Die Programmiersprache zum Entwickeln von dynamischen Webseitenwird in der Regel durch den Webserver bestimmt. Für den IIS ist dasVisual Basic Script (VBS), die auf WebSphere basierenden Server (Web-Sphere und Tomcat) unterstützen zunächst nur Java. Zwar sind Plug-Insfür weitere Programmiersprachen bei allen Webservern vorgesehen, aberdies ist in der Praxis unrealistisch, denn damit würde man in den Kern desWebservers eingreifen und genau das ist ein Tabu.

ASP.NET unter-stützt alle .NET-Sprachen

Mit ASP.NET ist die neue Vielfalt für Sprachen eingezogen, denn der .NET-IIS unterstützt zunächst die Common Language Runtime (CLR) und damitalle Microsoft.NET-Sprachen die den Zwischencode kompatibel zur CLRerzeugen. Damit haben Sie zunächst einmal die Wahl zwischen C#, J#und VB.NET, demnächst wohl auch noch X#, einer LISP-ähnlichen Spra-che zum Programmieren in XML-Dokumenten.

Kap08.fm Seite 157 Dienstag, 22. April 2003 2:32 14

Page 158: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

158 Programmieren mit mehreren Programmiersprachen

8.3.2 Java

Java an sich dürfte mittlerweile in der Entwicklergemeinde hinreichendbekannt sein. Die Sprache wurde vom kalifornischen Hardware-HerstellerSUN als plattformunabhängige Sprache entwickelt. Über den schon vomamerikanischen Verteidigungsministerium bei der Sprache ADA ange-wandten Trick, die Sprachdefinition und Sprachbezeichnung einem Copy-right zu unterwerfen, versucht SUN, die Kontrolle über die Evolution vonJava zu behalten.

8.3.3 J#

J# ist die Java-Implementierung von Microsoft und ein Dialekt des Origi-nals. Wegen des erwähnten Copyrights auf Java und der damit verbunde-nen Dauerfehde zwischen Microsoft und SUN entstand der neue Name.

8.3.4 Visual Basic (VB) und Visual Basic for Applications (VBA)

Visual Basic basiert auf der alten Basic-Programmiersprache, ist aber mitt-lerweile zu einer mächtigen, prozeduralen Programmiersprache gereift.VB ab dem Release 6 unterstützt viele Ansätze der Objekt-Programmie-rung, allerdings nicht den Polymorphismus und das Overloading. Für Ent-wicklungen, die gezielt für Windows-Plattformen gemacht werden, ist VBdie Programmiersprache der Wahl. Man muss aber dabei eingestehen,dass die Objektansätze vor allem in der COM-Struktur liegen.

Visual Basic forApplications

Visual Basic for Applications (VBA) ist eine fast vollständige Interpreterva-riante von VB und Bestandteil aller Microsoft-Office-Anwendungen, zumBeispiel von Microsoft Word, Excel, Access 2000 oder Visio. Es beweistsich, dass man mit VBA und Excel sehr effiziente Prototypen für Windowsentwickeln kann. Wenn sich die Anwendung stabilisiert hat, kann man siedann mit VB in eine Windows-DLL kompilieren.

8.3.5 Visual Basic Script (VBS) und ASP

Visual Basic Script ist eine Untermenge von VB. Es ist eine reine Interpre-ter-Sprache und unterscheidet sich vor allem dadurch von VB, dass eskeine typisierten Variablen unterstützt. Der Typ der Variablen wird erstzur Laufzeit bestimmt und die passende Datenstruktur auf dem Stackangelegt. Folgende Deklaration geht also nicht in VBS:

Dim LogonControl As SAPLogonCtrl.SAPLogonControlDim Functions As SAPFunctionsOCX.SAPFunctionsDim TableFactory As SAPTableFactoryCtrl.SAPTableFactory

Kap08.fm Seite 158 Dienstag, 22. April 2003 2:32 14

Page 159: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

Die Wahl der richtigen Programmiersprache 159

Stattdessen können wir nur deklarieren:

Dim LogonControl Dim FunctionsDim TableFactory

Entsprechend geht auch die Instanzziierung eines Objekts nur über dieexplizite Angabe des Verweises auf die Windows-Registry. Es geht alsonicht:

Set LogonControl = New SAPLogonCtrl.SAPLogonControlSet Functions = New SAPFunctionsOCX.SAPFunctionsSet TableFactory = New SAPTableFactoryCtrl.SAPTableFac-tory

Stattdessen müssen wir die Objekte entsprechend den folgenden Bei-spielen erzeugen.

Set LogonControl = CreateObject("SAP.LogonControl.1") Set Functions = CreateObject("SAP.Functions") Set TableFactory = CreateObject("SAP.TableFactory.1")

8.3.6 C#

C# ist Microsofts Zugpferd, um die Java-Fangemeinde auch für Windows-Plattformen zu gewinnen, ohne sich dabei zu sehr von SUN abhängigmachen zu müssen. Offiziell ist C# trotz der auffallenden Ähnlichkeit mitJava als Nachfolger von C++ positioniert, was aber vor allem den Sinn hat,den rechtlichen Problemen mit dem Copyright auf Java aus dem Weg zugehen.

8.3.7 X#

X# existierte nur als Konzept, als dieses Buch in Druck ging, weshalb Bei-spiele hier nur von begrenzter Haltbarkeit sind. X# basiert auf XML undist ein Ansatz, XML-Dokumente als Teil eines Programms zu sehen undnicht als manipulierbares Objekt, wie es die anderen Programmierspra-chen wie Java oder VB tun. Das wird dann etwa wie folgt aussehen:

Gehen wir von dem simplen Animal-Farm-Beispiel aus:

<FARM></FARM>

Kap08.fm Seite 159 Dienstag, 22. April 2003 2:32 14

Page 160: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

160 Programmieren mit mehreren Programmiersprachen

Mit einer X#-Sprache könnte das Programm dann etwa so aussehen:

Set XMLDocument = new MSXML.Document()For each ANIMAL in XMLDocumentFor each NAME in ANIMAL Write NAME.textNextNext

Wie gesagt, so könnte X# einmal aussehen, veröffentlichte Prototypengibt es bislang nicht.

8.3.8 Delphi

Reiches Erbe Delphi ist von allen Programmiersprachen die bei weitem mächtigste.Entstanden aus dem Klassiker Turbo-Pascal, war Delphi zu jeder Zeit dieBest-of-Breed-Sprache, die die jeweiligen Konzepte zuverlässig und sau-ber implementiert hat. Delphi erbt also von

� Pascal und VBDelphi ist durch die Pascal-Syntax einfach lesbar.

� JavaDelphi hatte alle OOP-Konzepte schon frühzeitig implementiert, ins-besondere

� Vererbung

� Polymorphismus

� Overloading

� Interfaces

� C und PascalDelphi ist aber auch prozedural, erlaubt also auch prozedurale Pro-grammierung, falls nötig.

Für die Entwicklung komplexer Applikationen ist Delphi zu jeder Zeit dieerste Wahl.

8.3.9 ADA

Produkt desVerteidigungs-

ministeriums

Vielleicht wäre ADA groß herausgekommen, wenn nicht ausgerechnetdas US-Verteidigungsministerium der geistige Vater wäre. ADA wurde1979 in dessen Auftrag von dem französischen Software-GigantenHoneywell-Bull entwickelt und hatte bereits bei seinem Entstehen 1979sämtliche Konzepte des OOP realisiert. Gleichzeitig hatte man sich aber

Kap08.fm Seite 160 Dienstag, 22. April 2003 2:32 14

Page 161: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

Die Wahl der richtigen Programmiersprache 161

von den kryptischen Ansätzen anderer Sprachen, allen voran C, gelöstund entscheidenden Wert auf Lesbarkeit gelegt. Auch die Idee, dass maneine Programmiersprache mit einem Copyright belegen könnte, um dieEvolution in den Griff zu bekommen, stammte aus dem ADA-Projekt.

ADA fand jedoch niemals große Verbreitung in der Industrie, was vermut-lich weniger dem Misstrauen dem Verteidigungsministerium gegenüberzu verdanken ist als der Tatsache, dass sich kaum ein einziger brauchbarerund gleichzeitig günstiger ADA-Compiler auf dem Markt wiederfand.Dadurch blieb ADA trotz seiner Vorzüge immer eine Sprache für eine Eliteund finanzstarke Software-Schmieden, während sich die Heerscharen vonjungen, kreativen und privaten Software-Entwicklern zunächst mit Turbo-Pascal zufrieden gaben und dann an dem kostenlos vertriebenen JavaGefallen fanden.

8.3.10 SmallTalk

SmallTalk ist der Urvater der OOP und realisiert den Objekt-Ansatz inradikaler Form. Die legendäre Apple Lisa besaß damals ein Betriebssys-tem, das vollkommen in SmallTalk geschrieben war. Dem Lisa-Anwenderwar das aber egal, der merkte nur, dass das Betriebssystem ziemlich lang-sam war.

8.3.11 LISP

LISP war eigentlich schon fast vergessen, aber die Ankündigung von X#brachte es wieder auf den Tisch. LISP ist eine Sprache, die ein Programmals hierarchisches Dokument ansieht und zwischen Daten und Programmkeinerlei Unterscheidung trifft. Ursprünglich wurde LISP ausschließlich inder Künstlichen-Intelligenz-Forschung verwendet, vor allem zur Manipu-lation von neuronalen Netzen. Mit der zunehmenden Verbreitung vonXML wird das Konzept LISP wieder für die breite Masse interessant.

Ein XML-Dokument ist eine Liste. Verbindet man dieses mit einem XSL-Stylesheet, wird in Wirklichkeit ein Programm auf diesem Dokument aus-geführt mit dem Ziel, das Dokument in eine andere Gestalt zu überfüh-ren. Genau das ist auch der Ansatz von LISP. Sobald man erlaubt, dasssich das XSLT-Stylesheet auch selbst manipuliert, hat man die Grenze zwi-schen Programm und Daten durchlässig gemacht.

Kap08.fm Seite 161 Dienstag, 22. April 2003 2:32 14

Page 162: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

162 Programmieren mit mehreren Programmiersprachen

8.4 Synopsis der Objektprogrammierung mit Java, VB und ABAP

8.4.1 Grundbegriffe

Programmieren mit Objekten

Objektorientie-rung ist Formdes Denkens

Objektorientierung ist eine Form des Denkens. Ihr Grundgedanke ist dieharmonische und gleichberechtigte Zusammenarbeit einzelner Pro-grammteile auf der Basis von Nachrichten und Ereignissen. Im strengenSinne werden Objekte und ihre Methoden nicht mehr aufgerufen, wiedies bei imperativen Programmiersprachen der Fall ist, sondern sie reagie-ren auf Ereignisse.

Sich selbst organi-sierende Einheiten

Das Denken in selbst organisierenden Einheiten stellt die Grundlage derobjektorientierten Programmierung (OOP) dar. Das Wesen der OOP istnicht gekennzeichnet durch Interfaces, Methoden, Properties, Instanzen,Lebenszeit, Procedure Overloading, Polymorphismus oder Datenkapse-lung. All diese schönen Dinge sind nichts weiter als »Features« und stel-len Leistungen der verwendeten Entwicklungsumgebung und des zuGrunde liegenden Entwicklungssystems dar. Als solche waren diese Fea-tures schon immer in der einen oder anderen Form auch in den prozedu-ralen Sprachen vorhanden und spiegeln damit nur die Fortschritte aufdem Niveau der Entwicklungsumgebungen wider.

Messages sinddas Herz der OOP

Damit kehrt die objektorientierte Programmierung auch den traditionel-len Ansatz um: Anstatt eine Applikation in einem großen Programmhyb-rid zu erstellen, existieren nun unzählige kleine Objekte, die eineGemeinschaft bilden und miteinander kommunizieren. OOP ist gekenn-zeichnet durch die Koexistenz von spezialisierten Objekten und derenFähigkeit, auf Messages zu reagieren und selbst Aufgaben (Tasks) durchAustausch von Messages zu delegieren.

Interfaces

Das Interface eines Objekts ist eine Anzahl von Methoden, die zum Aus-tausch von Informationen mit fremden, nicht vertrauenswürdigen (nottrusted) Objekten dienen.

Interfaces bestim-men die Identität

des Objekts

Eine wesentliche Forderung an ein Objekt-Interface ist es, dass das Inter-face die Objektklasse auch hinreichend charakterisieren sollte. Dasbedeutet vor allem, dass das Objekt-Interface sich nicht mehr änderndarf, wenn die Klasse bereits von dritter Seite verwendet wird. Andersausgedrückt: Ändert sich das Interface einer einmal veröffentlichten

Kap08.fm Seite 162 Dienstag, 22. April 2003 2:32 14

Page 163: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

Synopsis der Objektprogrammierung mit Java, VB und ABAP 163

Klasse, ist es nicht mehr dieselbe Klasse, auch wenn sie den gleichenNamen trägt. Die meisten Entwicklungsumgebungen tragen dem auchRechnung, indem sie automatisch Versionen ziehen und die jeder Klasseeindeutig zugewiesenen GUID (Global Universal Identifier) neu vergeben.

Methode

Eine Methode ist die Korrespondenz zu einer Prozedur oder einer Funk-tion in klassischen Programmiersprachen.

Property

Eine Property oder Eigenschaft ist eine Sonderform einer Methode einerKlasse.

Instanz

Bevor wir ein Objekt verwenden können, muss es anhand einer Vorlageerzeugt werden. Die Vorlage eines Objekts heißt Klasse und das erzeugteObjekt ist eine Instanz der Klasse (Instanz: zeitweilige Existenz, englisch:instance). Das Erzeugen der Instanz nennt man Instanziierung und dieDauer der Existenz der Instanz ist ihre Lebenszeit.

Lebenszeit

Die Dauer der Existenz einer Instanz, das heißt die Zeit zwischen derErzeugung und der Zerstörung der Objektinstanz, nennt man derenLebenszeit (life time).

Overloading

Als Overloading bezeichnet man die Möglichkeit, eine beliebige Methodeeiner Klasse zu überschreiben, ohne die Klasse ändern zu müssen.

Polymorphismus

Unter Polymorphismus versteht man die Fähigkeit einer Laufzeitumge-bung, die Identität eines Objekts nicht nur direkt durch dessen Namen,sondern auch durch eine eindeutige Zusammenstellung seiner Eigen-schaften zu bestimmen.

Polymorphismus berücksichtigt Eigenschaften

Polymorphismus ist eine Dienstleistung des Compilers, die mit dem Auf-kommen der objektorientierten Sprachen populär geworden ist. In dentraditionellen formalen Programmiersprachen wie Pascal, C oder Basic

Kap08.fm Seite 163 Dienstag, 22. April 2003 2:32 14

Page 164: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

164 Programmieren mit mehreren Programmiersprachen

konnte man zwar problemlos eigene Unterprogramme und Funktionendeklarieren, aber wenn ein Name bereits einmal für eine Funktion verge-ben war, konnte er an anderer Stelle nicht noch mal eingesetzt werden.

Nehmen wir als Beispiel eine typische polymorphe Prozedur, wie sie infast allen Programmiersprachen existiert, etwa die write-Funktion zumAusgeben von Variablen. Gewöhnlich kann eine solche write-Prozedurlediglich Zeichenfolgen ausgeben, andere Datentypen müssen zuvor ineine solche Zeichenfolge umgewandelt werden. Je nachdem, welchenDatentyp die auszugebende Variable besitzt, muss eine ganz andere Auf-bereitungsroutine aufgerufen werden.

Welche Aufbereitungsroutine dann aufgerufen wird, entscheidet derCompiler oder die Laufzeitumgebung selbstständig. Sie müssen also nie-mals selbst unterscheiden, indem Sie etwa verschiedene Prozeduren wiewriteNum oder writeString gezielt aufrufen.

Wie bereits gesagt, gab es solche Funktionen schon in vielen Program-miersprachen. Neu ist jetzt, dass man auch eigene polymorphe Objektedefinieren kann. Es ist aber noch einmal festzuhalten, dass zwar der Poly-morphismus von allen objektorientierten Sprachen verlangt wird, jedochkeine charakteristische Eigenschaft ist. Zum ersten Mal propagiert wurdeder Polymorphismus in der 1970 vorgestellten ProgrammierspracheMODULA-2.

Beispiel Schauen wir uns noch einmal ein weiteres Beispiel an und nehmen fol-gende sinnlose Klasse .

public class test{private String myName; public test(String initString) {myName = initString;}

Auffallend daran ist, dass der Constructor der Klasse parametrisiert ist.

public test(String initString)

Wenn wir nun eine Instanz dieser Klasse anlegen wollen und wir verges-sen, den Parameter zu übergeben,

myTest = new test()

meldet uns der Java-Compiler korrekterweise:

The constructor test is undefined

Kap08.fm Seite 164 Dienstag, 22. April 2003 2:32 14

Page 165: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

Synopsis der Objektprogrammierung mit Java, VB und ABAP 165

In der Regel führt er uns im ersten Moment in die Irre, denn derConstructor test existiert doch! Der Irrtum liegt darin, dass eineMethode in Java immer eindeutig durch den Namen, die Parameter unddie Parametertypisierung bestimmt wird.

Datenkapselung

Mit der Datenkapselung gibt man dem Entwickler eines Objekts die Mög-lichkeit, die innerhalb der Prozeduren deklarierten Variablen und Metho-den in öffentliche und private Objekte zu klassifizieren. Private Objektekönnen fortan nicht mehr von externen Programmen zugegriffen werden.Praktisch versteckt sich dahinter meistens der Zusatz public oder pri-vate in der Deklaration eines Objekts oder einer Variablen.

Klassen

Klassen sind Vorlagen für Objektinstanzen

Klassen sind Muster für die Anlage von Objekten. Jedes Mal, wenn einObjekt erstellt wird, wird nach Vorlage der Klasse ein Speicherbereichreserviert. Dadurch können Objekte im Gegensatz zu klassischen Proze-duren und Funktionen in beliebig vielen Instanzen existieren. Ein Pro-gramm kann also mehrere Instanzen eines Objekts erzeugen undbekommt jedes Mal einen sauberen initialen Zustand des Objekts.

Klassen in Visual Basic

Jede COM-Bibliothek wird von Visual Basic automatisch als Klasse ange-sehen. Zusätzlich können Klassen jederzeit als Teil des aktuellen Projektslokal deklariert werden.

Listing 8.1 Sample-Code einer Klasse

Public counter as Integer

Public Sub inc() counter = counter + 1End Sub

Public Sub clear() counter = 0End Sub

Kap08.fm Seite 165 Dienstag, 22. April 2003 2:32 14

Page 166: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

166 Programmieren mit mehreren Programmiersprachen

Klassen in ABAP

Klassen werden in ABAP mit dem Class Builder (SE24) angelegt und auchverwaltet. Einmal angelegt, sind die Klassen über das Repository für alleanderen ABAP-Programme sichtbar.

Klassen in Java

Jedes Java-Programm ist per Definition eine Klasse. Damit geht Java einenumgekehrten Weg wie andere Sprachen: Anstatt Klassen mit traditionel-len Sprachmitteln zu emulieren (wie es auch C++ oder ABAP/IV mit Hilfeeiner Makrobibliothek tun), erzwingt Java das Anlegen von Klassen. Klas-sische Konstrukte wie Unterprogramme oder Funktionen müssen alsKlasseninstanz angesprochen werden.

Java gehört leider zu den Programmiersprachen, deren Programmaufbaualles andere als intuitiv ist. Das liegt daran, dass Java zum einen die kryp-tische C-Syntax übernommen hat und zum anderen die Sprache selbst aufeiner Reihe von Konventionen aufbaut. Deshalb wollen wir uns das Anle-gen einer Klasse etwas genauer ansehen, sozusagen als kurze Einführungin Java und als Erinnerungshilfe für die Gelegenheitsprogrammierer.

Java speichertjede Klasse ineiner eigenen

Datei

Das Konzept von Java sieht vor, dass jede öffentliche Klasse (public class)in einer eigenen Datei des Dateisystems abgespeichert wird. MehrereKlassen lassen sich dann zu einem Package zusammenfassen. Die Dateieneines Packages können auch in einer komprimierten Archivdatei mit der

Abbildung 8.1 ABAP Class Builder

Kap08.fm Seite 166 Dienstag, 22. April 2003 2:32 14

Page 167: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

Synopsis der Objektprogrammierung mit Java, VB und ABAP 167

Endung .jar zusammengefasst abgespeichert werden. Grundsätzlich gehtJava von der Annahme aus, dass die Verwaltung von Klassen die Sachedes Betriebssystems sein muss, was eine sehr gute Auffassung ist.

»Hello World«Als Beispiel wollen wir eine neue Klasse HelloWorldClass erzeugen. Zudieser Klasse gehört eine Datei mit dem Namen HelloWorldClass.java,eine Textdatei, die den Code der Datei enthält. Da wir die Klasse wie einHauptprogramm direkt aufrufen wollen, implementieren wir eineMethode mit dem fest vorgegeben Namen main.

Listing 8.2 Java-Class HelloWorld

public class HelloWorldClass { public HelloWorldClass () {} /* Constructor */ public static void main(String[] args) { System.out.println("Welcome to Java Hello World"); }}

public static void main(String[] args) {

Das Beispiel wird beim Aufruf aus der Kommandozeile den String Wel-come to Java Hello World ausgeben. Die einzelnen Elemente desBeispiels lassen sich wie folgt sezieren:

� Aufbau einer KlasseDas Keyword class beginnt eine neue Klasse. Der Code der Klassefolgt dann in geschweiften Klammern ({}) dahinter.

� Standard-Methode mainDie Klasse definiert eine einzige Methode mit dem Namen main. DerName main ist ausschließlich reserviert für einen so genannten MainThread, demnach ein Hauptprogramm. main ist der Name der Default-Methode, die die JVM versucht aufzurufen, wenn keine andereMethode explizit angegeben wurde.

� VoidDas Keyword void zeigt an, dass die definierte Prozedur keine Wertezurückgibt. Demnach ist eine Prozedur mit void ein echtes Unterpro-gramm, während alle anderen einer Funktion entsprechen.

� Kommandozeilen-ArgumenteIm Beispiel besitzt die Methode main noch einen Parameter String[]args. In dieses Array von dynamischer Länge werden alle Parameter

Kap08.fm Seite 167 Dienstag, 22. April 2003 2:32 14

Page 168: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

168 Programmieren mit mehreren Programmiersprachen

übergeben, die beim Aufruf der Methode vom Aufrufer angegebenwurden. Die Anzahl der Parameter entspricht der Länge des Arrays undkann mit args.length ermittelt werden.

� Java-CompilerBevor die Klasse ausgeführt werden kann, muss sie erst mit dem Java-Compiler javac übersetzt werden. Wenn die Klasse erfolgreich gene-riert wurde, kann man sie mit dem Java-Runtime-Utility java voneiner Kommandozeile aus testen. java ruft dazu die JVM auf, erzeugteine Instanz der Klasse und führt die Start-Methode aus. Mit demjavap-Utility erhält man Informationen über die Klasse.

Listing 8.3 Kompilieren der HelloWorld-Class mit der Java Command Line Utility

java –verbose HelloWorldClass [parsing started HelloWorldClass.java][parsing completed 130ms][loading F:\jbuilder5\jdk1.3\jre\lib\rt.jar(java/lang/Object.class)][loading F:\jbuilder5\jdk1.3\jre\lib\rt.jar(java/lang/String.class)][checking HelloWorldClass][loading F:\jbuilder5\jdk1.3\jre\lib\rt.jar(java/lang/System.class)][loading F:\jbuilder5\jdk1.3\jre\lib\rt.jar(java/io/PrintStream.class)][loading F:\jbuilder5\jdk1.3\jre\lib\rt.jar(java/io/Fil-terOutputStream.class)][loading F:\jbuilder5\jdk1.3\jre\lib\rt.jar(java/io/Out-putStream.class)][wrote HelloWorldClass.class][total 561ms]

Nach dem Kompilieren hat der Java-Compiler die Runtimeversion mit derEndung .class erzeugt.

Listing 8.4 Files, die der Compiler von Java erzeugt hat

07.10.2001 19:33 451 HelloWorld-Class.class07.10.2001 19:31 302 HelloWorld-Class.java 2 File(s) 753 Bytes

Kap08.fm Seite 168 Dienstag, 22. April 2003 2:32 14

Page 169: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

Synopsis der Objektprogrammierung mit Java, VB und ABAP 169

Mit der Java-Utility kann eine Klasse direkt von der Kommandozeile aus-geführt werden, vorausgesetzt eine Methode mit dem Namen main()wurde implementiert.

Listing 8.5 Ausführen der Klasse mit der Java Runtime

D:\JDK> java HelloWorldClass Welcome to Java hello World

8.4.2 Constructor

Ein Constructor ist eine Methode, die immer dann ausgeführt wird, wenneine Klasse oder eine Instanz zum ersten Mal angesprochen wird. Sie eig-net sich besonders zum Initialisieren von Werten innerhalb der Klasse,und zwar just-in-time, nämlich dann, wenn die Daten das erste Malgebraucht werden.

Constructor in Java

Ein Constructor in Java ist eine Methode mit den folgenden Charakteris-tika:

� Ein Constructor hat immer den gleichen Namen wie seine Klasse.

� Ein Constructor hat keinen Ergebnistyp, also auch nicht die Kennzeich-nung VOID.

So sieht ein Constructor in Java aus:

public class Test {

Folgendes ist der Constructor der Klasse Test:

public Test() { }

Erzeugung der Klasse, bei der der Constructor ausgeführt wird:

public static void main(String[] args) { Test test1 = new Test(); }}

Kap08.fm Seite 169 Dienstag, 22. April 2003 2:32 14

Page 170: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

170 Programmieren mit mehreren Programmiersprachen

Constructor in ABAP Objects

Ein Constructor in ABAP Objects ist eine Methode, mit dem NamenCLASS_CONSTRUCTOR oder CONSTRUCTOR. Es gibt zwei Ebenen vonConstructoren, einmal beim erstmaligen Initialisieren der Klasse und ein-mal bei jedem Anlegen einer Instanz.

Constructor fürdie ganze Klasse

So sieht ein Constructorfür eine Klasse in ABAP aus:

method CLASS_CONSTRUCTOR .endmethod.

Constructor füreine Instanz

Das Folgende ist ein Constructor für eine Instanz:

method CONSTRUCTOR .endmethod.

Constructor in VB

Ein Constructor in Visual Basic ist eine spezielle Methode mit demNamen Class_Initialize und mit folgendem Aussehen.

VERSION 1.0 CLASSAttribute VB_Name = "TEST"Private Sub Class_Initialize() End Sub

8.4.3 Destructor

Ein Destructor ist eine spezielle Methode, die immer dann aufgerufenwird, wenn die Klasse oder eine Instanz der Klasse zerstört wird. Damit istder Aufruf des Destructors die definitiv letzte Aktion während derLebenszeit einer Instanz.

Destructor in Java

Java kennt keinenDestructor

Das Konzept von Java sieht wie eine ständige und versteckte Garbage-Collection von nicht mehr benötigtem Speicherplatz aus. Ausgehend vonder irrigen Annahme, dass der Destructor einer Objekt-Klasse nur dasFreigeben von Speicherplatz und andere Aufräumarbeiten vornehmensollte, verzichteten die Designer von SUN auf die Destructor-Methode.Das ist jedoch eher ärgerlich, da der Destructor oft auch zum Anstoßenanderer Tasks verwendet wird, und wenn es nur das Aussenden eines glo-balen Goodbye an den Rest der Welt ist.

Kap08.fm Seite 170 Dienstag, 22. April 2003 2:32 14

Page 171: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

Synopsis der Objektprogrammierung mit Java, VB und ABAP 171

Destructor in ABAP Objects

Auch in ABAP gibt es keine Destructoren.

Destructor in VB

Ein Destructor in Visual Basic ist eine spezielle Methode mit dem NamenClass_Terminate. Folgendermaßen sieht er aus:

VERSION 1.0 CLASS

Constructor für die Klasse Test

Private Sub Class_Initialize() End Sub

Destructor für die Klasse Test

Private Sub Class_Terminate() End Sub

8.4.4 Property-Deklarationen

Properties sind öffentliche Variablen

Eine Property in einer Klasse entspricht in etwa einer öffentlich zugreifba-ren Variablen. Tatsächlich werden in VB alle Public-Variablen automatischals Properties behandelt. Das Kennzeichen einer Property ist, dass sieeinen Wert hat. Dieser Wert lässt sich im Normalfall lesen und setzen wiebei einer Variablen.

Properties in Java

Properties werden durch Namens-konventionen bestimmt

Properties in Java werden durch eine bestimmte Namenskonventionangelegt. Diese Namenskonvention wird in der Sprachbeschreibung alsDesign Pattern ausgelegt, was aber etwas hoch gegriffen ist, nur um zurechtfertigen, warum man semantische Inhalte an den Aufbau einesBezeichners hängt.2

Eine Property in Java besteht aus drei Elementen

� eine innerhalb der Klasse deklarierte Variable xxx, wobei das erste Zei-chen der Variablen ein kleiner Buchstabe sein muss

� eine Methode zum Setzen des Wertes der Variablen xxx mit demNamen setXxx, wobei das erste Zeichen des Namens der Property einGroßbuchstabe sein muss

2 Mehr zu diesem Problem: Thinking in Patterns With Java auf www.BruceEckel.com.

Kap08.fm Seite 171 Dienstag, 22. April 2003 2:32 14

Page 172: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

172 Programmieren mit mehreren Programmiersprachen

� eine Methode zum Auslesen des Wertes der Variablen xxx mit demNamen getXxx, wobei das erste Zeichen des Namens der Property einGroßbuchstabe sein muss

Die Syntax sieht folgendermaßen aus:

Get Propertiesin Java

private int temperature;public int getTemperature() { return temperature; };

Set Propertiesin Java

public void setTemperature(int newTemperature){ temperature = newTemperature; };

Properties in VB

Properties in VB werden durch das Keyword property eingeleitet undansonsten wie Unterprogramme behandelt.

Get Propertiesin VB

Private myTemperature as Integerpublic property Get Temperature() Temperature = myTemperature;End Property

Set Propertiesin VB

Private myTemperature as Integerpublic property Get Temperature(newTemperature as Inte-ger) myTemperature = Temperature;End Property

Properties in ABAP

ABAP Objects vermeidet den direkten Umgang mit Properties. Es gibt dasKonstrukt der Attribute, das alle global definierten Variablen innerhalbeiner Klasse bezeichnet. Properties im Sinne von VB oder Java müssen alsMethoden realisiert werden.

8.4.5 Methoden

Methoden in Java

Methoden in Java werden durch das Keyword proc definiert. Falls dieproc mit dem Vorsatz void angelegt wird, handelt es sich um eine echteProzedur, die keinen Wert zurückgibt, während eine Methode, die einenWert zurückgibt, einer Funktion entspricht.

Kap08.fm Seite 172 Dienstag, 22. April 2003 2:32 14

Page 173: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

Synopsis der Objektprogrammierung mit Java, VB und ABAP 173

Methoden in VB

Eine Methode in VB ist identisch mit einer Sub oder einer Function:

Function AddInt(a as Integer, b as Integer) As Integer AddInt = a + bEnd Function

Methoden in ABAP Objects

Folgendermaßen sieht eine Methode in ABAP aus:

method FIND_BY_KEY .RESULT = IMPL_AGENT->FIND_BY_KEY(KEYATT_4 = KEYATT_4KEYATT_5 = KEYATT_5FLDATE = FLDATECONNID = CONNIDCARRID = CARRID ).endmethod.

8.4.6 String-Deklarationen

Strings in Java

Strings in Java werden durch den eigenen Datentyp String angelegt.Dieser unterscheidet sich von einem Array of Char dadurch, dassStrings eine dynamische Länge haben können.

String aText[100];

Die Länge des Strings wird durch die Methode Length bestimmt:

System.out.println(aText.length());

Verkettung von Strings in Java kann wie folgt aussehen:

String first = new String("sure"); String second = "plea"; String combined = second + first; System.out.println(combined); System.out.println(combined.length());

Kap08.fm Seite 173 Dienstag, 22. April 2003 2:32 14

Page 174: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

174 Programmieren mit mehreren Programmiersprachen

Strings in VB

Strings in VB werden durch den eigenen Datentyp String angelegt. Diemaximale Länge eines Strings kann in Klammern angegeben werden,muss aber nicht.

Dim aText As StringDim aText80 As String[80]

Die Länge des Strings wird durch die Funktion Len bestimmt.

Debug.Print len(aText)

Strings in ABAP Objects

Strings im Sinne von variablen Zeichenfolgen existieren in ABAP nicht.Zum Arbeiten mit Strings muss immer eine Variable mit einer fest vorge-gebenen Länge deklariert werden:

DATA: mystring(80) TYPE C. "String der Länge 80

Zur Manipulation von Strings in ABAP existieren ein paar wenige Funkti-onen.

8.4.7 Array-Deklarationen

Arrays in Java

Arrays in Java werden durch das Klammernpaar [] deklariert. Sie könneneine feste Länge haben. Wird keine Länge angegeben, wird die Länge desArrays während der Laufzeit bestimmt.

String args[];

ABAP Bedeutung

Strlen( mystring ) Bestimmt die Länge des Strings, nachdem die Leerzeichen am Ende abgeschnitten wurden

CONCATENATE astr bstr INTO cstr Zusammenführen zweier Zeichenfolgen

SPLIT Teilen eines Strings an einer bestimmten Stelle

Mystring+10(25) Eine Art Substring-Bildung in ABAP, ab Stelle 10, 25 Zeichen; für variable Substrings benötigen Sie ABAP-FILED_SYMBOLS und den Befehl ASSIGN.

Tabelle 8.1 String-Manipulation in ABAP

Kap08.fm Seite 174 Dienstag, 22. April 2003 2:32 14

Page 175: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

Synopsis der Objektprogrammierung mit Java, VB und ABAP 175

Arrays in VB

Arrays in VB werden durch das Klammernpaar [] deklariert. Sie könneneine feste Länge haben. Wird keine Länge angegeben, wird die Länge desArrays während der Laufzeit bestimmt. Durch die Funktion Redim()kann ein Array jederzeit umdimensioniert werden.

DIM: anArray[10] Of Integer

Arrays in ABAP Objects

ABAP kennt keine Arrays, sondern nur so genannte Interne Tabellen, diein etwa den Recordsets von Visual Basic entsprechen.

DATA: itab TYPE Standard Table Of Integer.

Kap08.fm Seite 175 Dienstag, 22. April 2003 2:32 14

Page 176: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

Kap08.fm Seite 176 Dienstag, 22. April 2003 2:32 14

Page 177: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

Teil 3 Programmieren in verteilten Systemen

Das Programmieren in einem Netzwerk von miteinander kooperierenden Computern und Computerdiensten erfordert auch eine besondere Ausbildung der Entwickler. Anstatt sich auf ein Betriebssystem, eine Programmiersprache und eine Ober-flächengestaltung zu konzentrieren, werden heutzutage Leute gebraucht, die ausdrücklich mehrere Systeme und Sprachen beherrschen. Die Frage ist demnach nicht mehr, ob SAP, UNIX oder Microsoft, sondern ob SAP, UNIX und Microsoft. Zwingend sind fortan Kenntnisse in Frontend-Entwicklung, Workflow und Middleware sowie Programmierung in mehreren Sprachen nach Bedarf.

Kap08.fm Seite 177 Dienstag, 22. April 2003 2:32 14

Page 178: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

Kap08.fm Seite 178 Dienstag, 22. April 2003 2:32 14

Page 179: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

Webservice als Standard-Nachrichtenformat 179

9 Webservice als Standard-Nachrichtenformat

Webservices sind Programme, die mit Hilfe von standardisier-ten Internetprotokollen, z.B. HTTP, SMTP oder SOAP, von anderen Computern über ein Netzwerk zugreifbar sind.

La Grandeur d’un métier est avant tous d’unir les hommes.Die Größe eines Berufs ist vor allem, die Menschen zu einen.

Antoine de Saint Exupéry, Terre des Hommes (II-2)

Entscheidung für ein Protokoll

In ungezählten Schnittstellenszenarien, zum Beispiel bei EDI-Übertragun-gen, standen die beteiligten Partner wie der Esel vor dem Heuhaufen undbefassten sich mit unerheblichen Details der Übertragung, zum Beispiel,ob etwa ein bestimmtes Feld übertragen werden soll, ob die Kunden-nummer mit neun oder achtzehn Stellen gesendet wird oder ob Zahlenmit führenden Nullen oder linksbündig gesendet werden.

Universelles Schnittstellen-format

Webservices legen aufbauend auf XML und dem bereits für das WWW alsStandard etablierten HTTP-Protokoll ein universelles Schnittstellenformatfest, das sowohl vom Sender als auch vom Empfänger der Schnittstellen-nachrichten verstanden wird. Daraufhin sendet der Requestor eineAnfrage via Internet an den Service, der wiederum verarbeitet die Nach-richt und sendet eine Antwort zurück an den Requestor.

Webservices sind RPC-Aufrufe via HTTP

Das wesentlich Neue an Webservices ist die Standardisierung, denn nichtdie Technologie ist neu, sondern die Tatsache, dass man sich auf ein ein-heitliches Übertragungsprotokoll geeinigt hat. Dieses Protokoll ist auchnicht verordnet, sondern entstand durch Übernahme einer nahe liegen-den Konvention. In der einfachsten Interpretation sind Webservices RPC-Aufrufe über das HTTP-Protokoll.

Abbildung 9.1 Interaktion mit Back-Office-Applikation via Webservices

WebService

Request

BackOffice

Requestor

Response

Kap09.fm Seite 179 Dienstag, 22. April 2003 2:32 14

Page 180: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

180 Webservice als Standard-Nachrichtenformat

ApplicationProgramming

Interface

Stellt ein Software-Service eine Schnittstelle zur Verfügung, über die eineandere Software Anfragen an den Service stellen und Antworten entge-gennehmen kann, so nennen wir das ein Application Programming Inter-face – API.

»WebAPI« Im engeren Sinne ist ein Webservice eine Schnittstelle zu einem überTCP/IP aufrufbaren Programm, weshalb auch gelegentlich der BegriffWebAPI zu finden ist. In anderen Worten: Ist die API eines Software-Ser-vice durch eine Internetverbindung aufrufbar, so sprechen wir von einemWebservice.

9.1 Beispiel für Webservices mit Amazon.com

Seattle, Bundesstaat Washington, USA. Wir schreiben das Jahr 1994. Esist das Gründungsjahr von Amazon.com, Inc. Amazon.com ist eines derersten Unternehmen, die ausschließlich über das neue Medium WorldWide Web einen Handel aufbauen.

Nur neun Jahre später – wir schreiben das Jahr 2003 – ist Amazon.comweltweit der größte Anbieter von Büchern, Musik und Videos im Inter-net. Die inzwischen mehr als acht Millionen Kunden in 160 Ländern kön-nen per Internet ihre Bestellungen aufgeben und sie sich bequem nachHause bringen lassen.

Wenn heute jemand auf das Thema Internet stößt, dann assoziiert erdamit fast automatisch diesen Pionier des eCommerce, Amazon.com.Kaum ein anderer individueller Webshop wurde so zur Legende unddamit auch zum Synonym für eCommerce. In vorbildlicher Weise gelanges Amazon.com, Vertrauen und Akzeptanz zu schaffen für das neueMedium World Wide Web.

Amazon.com-Katalog alsWebservice

Nun ist Amazon.com vor kurzer Zeit wieder einen Schritt weiter gegan-gen und bietet seine Dienste in vollautomatisierter Form an. Währendman zwar auch schon bisher auf Amazon.com-Seiten durch Links auf dereigenen Homepage verweisen konnte, hat Amazon.com mittlerweile sei-nen Shop so standardisiert, dass Kataloganfragen, Katalogauskünfte undEinkäufe auch durch einfache, webfähige Computerprogramme möglichwerden. Wir nennen so was gemäß unserer Definition einen Webservice.

9.1.1 Einfache Beispiele für Webservices

Bevor wir uns dem detaillierten Beispiel von Webservices mit Ama-zon.com widmen, wollen wir mit ein paar einfachen Beispielen beginnen,um ein Gefühl für Webservices im Allgemeinen zu bekommen.

Kap09.fm Seite 180 Dienstag, 22. April 2003 2:32 14

Page 181: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

Beispiel für Webservices mit Amazon.com 181

Einfachste Form sind statische Webseiten

Die einfachste Form eines Webservices ist das Aufrufen einer Internet-seite über einen Browser. Das Prinzip, das dahinter steckt, ist zunächstsehr, sehr einfach:

Der anfragende Requester sendet seinen Wunsch über ein TCP/IP-Netz-werk zu einem namentlich bekannten Server. Der Server sucht diegewünschte Datei und sendet das gefundene Dokument an den Reques-ter zurück. Als Protokolle für diese Kommunikation werden heute fastausschließlich HTTP und FTP verwendet.

Dynamische Webseiten mit Forms oder CGI-Parametern

Nachdem Sie sich Tausende von Webseiten angesehen haben, kommt dienächste Begehrlichkeit fast zwangsläufig: Die Seiten sollten dynamischauf die Eingaben des Benutzers reagieren. Dazu muss normalerweise derURL ein Parameter mitgegeben werden, der vom Server dynamisch inter-pretiert werden kann. Das folgende Beispiel bestimmt die aktuelle UTC-Zeit (Greenwich Mean Time):

http://www.nanonull.com/TimeService/TimeService.asmx/getUTCTime?

CGI-Standard hat sich durchgesetzt

Als Syntax zur Übermittlung von Parametern über eine URL hat sich derCGI-Standard durchgesetzt. Ursprünglich wurde CGI so verwendet, dassman den Namen eines physisch existierenden Programms angegebenhatte und die Parameter mit Fragezeichen (»?«) und Ampersand (»&«)getrennt an die URL anfügte.

9.1.2 Ein Beispiel mit einem winzigkleinen Fehler

Webservices am Beispiel von Amazon.com

Webservices mit Amazon.com eignen sich gut zum Lernen der Technolo-gien, da der Service öffentlich zugänglich ist und die Inhalte allgemeinverständlich sind. Das folgende Szenario kommuniziert mit http://xml.Amazon.com. Alle Bücher werden weltweit durch den eindeutigenProduktcode ISBN (International Standard Book Number) identifiziert.Amazon hat für seine internen Dienste die Bezeichnung ASIN (AmazonStandard Item Number) eingebaut, die neben Büchern auch die restlichenArtikel des Sortiments identifiziert. Für Bücher ist die ASIN identisch mitder ISBN. Ausgehend von einer bekannten ISBN, wollen wir die Webser-vices von Amazon.com nutzen, um die Katalogdaten des passendenBuchs zu ermitteln.

Im Folgenden sehen Sie, wie die Kommunikation aufgebaut ist. Dabei hatsich in dieses Beispiel ein kleiner syntaktischer Fehler eingeschlichen, derdazu führt, dass Amazon.com statt der gewünschten Katalogdaten nureine Fehlermeldung zurücksendet. So eine Situation führt in einer klassi-

Kap09.fm Seite 181 Dienstag, 22. April 2003 2:32 14

Page 182: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

182 Webservice als Standard-Nachrichtenformat

schen Schnittstellenentwicklung zu aufwändigen Nachfragen beim Kom-munikationspartner oder zum Nachsuchen in Dokumentationen. Früherhätten wir also zum Telefon gegriffen, versucht, bei Amazon.com einenAnsprechpartner zu finden, der auf gut Glück den Grund des Fehlers ana-lysiert. Das Beispiel wird zeigen, wie es uns gelingt, anhand der WSDL(Web Service Description Language) des Webservices den Fehler selbst zufinden.

ISBN-Abfrage beiAmazon.com via

SOAP

Hinter dem folgenden XML-Dokument versteckt sich eine Suche nacheinem Buch im Katalog von Amazon.com. Diese Anfrage wird durch SOAP(Simple Object Access Protocol) übermittelt. Um den Blick auf das Wesent-liche zu lenken, schauen wir uns das Dokument zunächst in etwas berei-nigter Form an, befreit von administrativen Informationen.

Listing 9.1 SOAP-Anfrage an Amazon.com

<SOAP-ENV:Envelope> <SOAP-ENV:Body> <AsinSearchRequest> <AsinSearchRequest> <asin>3528057297</asin> <tag>logosworldcom</tag> <type>lite</type> <dev-tag>12345678901234</dev-tag> </AsinSearchRequest> </typens:AsinSearchRequest> </SOAP-ENV:Body></SOAP-ENV:Envelope>

Listing 9.2 XML-Dokument in Baumdarstellung

AsinSearchRequest �� asin � �� 3528057297 �� tag � �� logosworldcom �� type � �� lite �� dev-tag �� 00000000000000

Kap09.fm Seite 182 Dienstag, 22. April 2003 2:32 14

Page 183: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

Beispiel für Webservices mit Amazon.com 183

Wenn alles gut geht, wird dieser SOAP-Request von dem empfangendenWebservice bei Amazon.com verarbeitet und das Ergebnis wieder in einSOAP-Dokument, diesmal als SOAP-Response, verpackt und an denRequester zurückgeschickt.

Listing 9.3 SOAP-Response von Amazon.com

<SOAP-ENV:Envelope> <SOAP-ENV:Body> <AsinSearchRequestResponse> <return> <Details> <Url>http://www.Amazon.com/ exec/obidos/3528057297</Url> <Asin>3528057297</Asin> <ProductName>The SAP R/3 Guide to EDI and Interfaces</ProductName> <Authors> <Author>Axel Angeli</Author> <Author>Ulrich Streit</Author> <Author>Robi Gonfalonieri</Author> </Authors> <ListPrice>$50.95</ListPrice> </Details> </return> </AsinSearchRequestResponse> </SOAP-ENV:Body></SOAP-ENV:Envelope>

Listing 9.4 SOAP-Response in Baumdarstellung

AsinSearchRequestResponse �� asin � �� 3528057297 �� Url � �� http://www.Amazon.com/ exec/obidos/3528057297 �� ProductName � �� The SAP R/3 Guide to EDI and Interfaces

Kap09.fm Seite 183 Dienstag, 22. April 2003 2:32 14

Page 184: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

184 Webservice als Standard-Nachrichtenformat

�� Authors � �� Author � � �� Axel Angeli � �� Author � �� Robi Gonfalonieri �� ListPrice �� $50.95

Der abgesandte SOAP-Request hat in dem Beispiel leider einen winzigkleinen Fehler, weshalb uns Amazon.com nur eine als SOAP-Responseverpackte Fehlermeldung zurücksendet, die uns zunächst auch nicht wei-terhilft.

Listing 9.5 SOAP-Error von Amazon.com

<SOAP-ENV:Envelope> <SOAP-ENV:Body> <SOAP-ENV:Fault> <faultcode>SOAP-ENV:Client</faultcode> <faultstring>Bad Request</faultstring> <detail>AsinSearchRequest: There must be a keys named 'type' and 'asin' and 'devtag'in the input </detail> </SOAP-ENV:Fault> </SOAP-ENV:Body></SOAP-ENV:Envelope>

Listing 9.6 SOAP-Error als Baum

SOAP-ENV:Fault �� faultcode � �� 3528057297 �� detail � �� AsinSearchRequest: There must be a keys named � 'type' and 'asin' and 'devtag'in the input ¦ �� faultstring �� detail �� Robi Gonfalonieri

Kap09.fm Seite 184 Dienstag, 22. April 2003 2:32 14

Page 185: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

Beispiel für Webservices mit Amazon.com 185

Dies ist die Hölle für jeden Schnittstellenprogrammierer: Der Kommuni-kationspartner am anderen Ende versteht meine Anfrage nicht und diegesendete Antwort gibt uns leider nicht den entscheidenden Hinweis.Denn im Beispiel hier haben wir die geforderten Parameter type, asinund devtag korrekt angegeben. Oder doch nicht?

Was war geschehen? Die Anfrage haben wir der Dokumentation vonAmazon.com zu den Webservices entnommen. Um es schon vorwegzu-nehmen: In dem Beispiel befand sich ein winzig kleiner Fehler, der mitbloßem Auge kaum erkennbar ist. Da wir uns auf die sekundäre Doku-mentation verlassen hatten, waren wir letztlich Opfer von Übertragungs-fehlern oder mangelnder Aktualität.

Geht es so nicht den meisten Schnittstellenentwicklern? Eigentlich wohldefinierte – weil in einer Programmiersprache festgelegte – Dateiformatewerden einem EDI-Partner als Excel-Sheet, Word-Datei, gefaxte Textdateioder auch gar nicht übermittelt. Fast immer endet es damit, dass dieBedeutung und Struktur einer Übertragungsdatei aus den übermitteltenDaten heraus geraten wird.

WSDL gibt formale Beschrei-bung der Syntax

Da Amazon.com aber seine Dienste als vollständigen Webservice zur Ver-fügung stellt, haben wir Zugriff auf die Originalquelle in Form deszugrunde liegenden WSDL-Dokuments.

9.1.3 Die WSDL zum Amazon.com-Service

WSDL – Web-services Descrip-tion Language

Die WSDL (Web Services Description Language) ist eine Sprache, die mitHilfe von XML-Dokumenten die Struktur der Requests und Responseseines Webservices beschreibt. Die Beschreibung ist so ausführlich, dassman mit ihrer Hilfe die Struktur des erforderlichen SOAP-Request-Doku-ments bestimmen kann.

WSDL muss öffentlich zugänglich sein

Das WSDL-Dokument wird an einer Stelle im Internet abgelegt, so dassdie aktuelle Version jederzeit sowohl vom Sender als auch vom Empfän-ger des Dokuments zugreifbar ist. Außerdem verprobt der Empfängereines SOAP-Dokuments dieses gegen das WSDL-Dokument, bevor esweiterverarbeitet wird. Das folgende Listing zeigt die WSDL-Beschrei-bung einer Amazon.com-Suche.

Listing 9.7 WSDL-Definition einer Suche nach ISBN bei Amazon.com

<definitions targetNamespace="urn:PI/DevCentral/SoapService" name="AmazonSearch"> <types> <xsd:schema>

Kap09.fm Seite 185 Dienstag, 22. April 2003 2:32 14

Page 186: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

186 Webservice als Standard-Nachrichtenformat

<xsd:complexType name="AsinRequest"> <xsd:all> <xsd:element name="asin" /> <xsd:element name="tag" /> <xsd:element name="type" /> <xsd:element name="devtag" /> <xsd:element name="offer" /> <xsd:element name="offerpage" minOccurs="0"/> </xsd:all> </xsd:complexType> </xsd:schema> </types> <message name="AsinSearchRequest"> <part name="AsinSearchRequest" type="typens:AsinRequest"/> </message> <message name="AsinSearchResponse"> <part name="return" type="typens:ProductInfo"/> </message></definitions>

Namen dererlaubten

Bezeichner

Dem WSDL-Dokument kann man entnehmen, dass ein AsinRequest,das ist die Anfrage nach einer ISBN, die wir in dem SOAP-Dokumentübermittelt haben, die Elemente asin, tag, type, devtag, offer,offerpage enthalten darf. Wir können damit das SOAP-DokumentSchritt für Schritt aufbauen.

Die Anfrage darf eine Message mit dem Namen AsinSearchRequestenthalten:

<message name="AsinSearchRequest"> <part name="AsinSearchRequest" type="typens:AsinRequest"/></message>

Das SOAP-Dokument würde also schon wie folgt aussehen:

<SOAP-ENV:Envelope> <SOAP-ENV:Body> <AsinSearchRequest> <AsinSearchRequest> . . .

Kap09.fm Seite 186 Dienstag, 22. April 2003 2:32 14

Page 187: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

Beispiel für Webservices mit Amazon.com 187

</AsinSearchRequest> </typens:AsinSearchRequest> </SOAP-ENV:Body></SOAP-ENV:Envelope>

Beispiel einer Typisierung einer Variablen

In der WSDL wurde die Message mit name="AsinSearchRequest" alsvom type="typens:AsinRequest" festgelegt. Die Typdefinition wurdeweiter vorne in der WSDL vorgenommen:

<xsd:complexType name="AsinRequest"> <xsd:all> <xsd:element name="asin" /> <xsd:element name="tag" /> <xsd:element name="type" /> <xsd:element name="devtag" /> <xsd:element name="offer" /> <xsd:element name="offerpage" minOccurs="0"/> </xsd:all></xsd:complexType>

Also lassen wir das SOAP-Dokument wachsen:

<SOAP-ENV:Envelope> <SOAP-ENV:Body> <AsinSearchRequest> <AsinSearchRequest> <asin>3528057297</asin> <tag>logosworldcom</tag> <type>lite</type> <devtag>12345678901234</devtag> </AsinSearchRequest> </typens:AsinSearchRequest> </SOAP-ENV:Body></SOAP-ENV:Envelope>

SOAP lässt sich aus WSDL gene-rieren

Somit haben wir den SOAP-Request aus der WSDL abgeleitet. Selbstver-ständlich kann und soll im Normalfall sogar die Transformation von WSDLin ein SOAP-Dokument durch ein Programm erfolgen. Hierzu stehen mit-tlerweile eine Vielzahl von SOAP-Prozessoren zur Verfügung, die allemehr oder weniger das Gleiche tun:

Kap09.fm Seite 187 Dienstag, 22. April 2003 2:32 14

Page 188: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

188 Webservice als Standard-Nachrichtenformat

� beim Senden eines SOAP-Dokuments

� Generieren einer SOAP-Template aus einer WSDL

� alternativ das Generieren von Programmcode aus einer WSDL

� Abmischen von Anwendungsdaten mit dem SOAP-Template

� beim Empfangen eines SOAP-Dokuments

� Verifizierung des SOAP-Dokuments anhand der WSDL

� Extraktion der Programmparameter aus dem Dokument

� Aufruf des Programms zur Ausführung des gewünschten Services

� Entgegennehmen der Programmergebnisse und Rücksendung anden Requester, wieder als eigenständiges SOAP-Dokument

Und warum hat unsere Anfrage eine Fehlermeldung zurückgegeben? Ver-gleichen wir dazu das ursprüngliche SOAP-Dokument und die konstru-ierte Anfrage. Das hatten wir ursprünglich gesendet:

<dev-tag>12345678901234</dev-tag>

Und das hätte dort stehen müssen:

<devtag>12345678901234</devtag>

9.1.4 Webservice als HTTP GET-Anfrage

Im Übrigen hätten wir die Anfrage an Amazon.com auch als HTTP GET-Statement ausführen können. Das hätte dann so ausgesehen:

Listing 9.8 Amazon-Webservice als Canonical URL

http://xml.Amazon.com/onca/xml2?t=webservices-20&tag=logosworldcom&dev-t=D2H3YO46KJJ615&AsinSearch=3528057297&type=lite&f=xml

9.1.5 Verwendung eines XSLT-Stylesheets

Wenn Sie das Ergebnis lieber nach eigenen Wünschen formatiert zurück-haben wollen, können Sie anstatt des Parameters f=XML auch die URLeines XSLT-Stylesheets angeben. In diesem Fall wird dieses XSLT auf dasXML-Dokument angewendet und Sie erhalten den transformierten Aus-gabestrom zurück. Das XSLT-Stylesheet muss von Ihnen im Internetbereitgestellt werden und sowohl vom rufenden Browser als auch vomAmazon-Webservice zugänglich sein.

Kap09.fm Seite 188 Dienstag, 22. April 2003 2:32 14

Page 189: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

Beispiel für Webservices mit Amazon.com 189

Listing 9.9 Anwendung eines XSLT-Stylesheets auf Amazon-XML

http://xml.Amazon.com/onca/xml2?t=webservices-20&tag=logosworldcom&dev-t=D2H3YO46KJJ615&AsinSearch=3528057297&type=lite&f=http://logosworld.com/bookshop/amazon.xsl

9.1.6 Type- und Namespace-Referenz

Was in den Abbildungen weiter oben fehlte, waren die Referenzen aufNamespace und die Angabe der Datentypen. Mit den Datentypen verhältes sich wie in jeder anderen Programmiersprache auch. Die Namespacessind komplizierter zu erfassen. Grob gesagt bedeutet es, dass jedes XML-Dokument zu einem Namespace gehören muss. Dieser Namespace istselbst ein XML-Dokument, das die zulässigen Namen der XML-Tags be-schreibt. Damit der Empfänger des XML-Dokuments die Gültigkeit desDokuments prüfen kann, muss die URI des Namespace mit jedem XML-Dokument gesendet werden. Ob der Empfänger das Dokument tatsäch-lich gegen den Namespace verprobt, ist zunächst einmal dessen Sache.

Kap09.fm Seite 189 Dienstag, 22. April 2003 2:32 14

Page 190: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

Kap09.fm Seite 190 Dienstag, 22. April 2003 2:32 14

Page 191: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

HTTP- und TCP/IP-Protokolle 191

10 HTTP- und TCP/IP-Protokolle

HTTP ist der Standard zur Übertragung von Nachrichten über ein TCP/IP-Netzwerk. XML ist ein Standard zur Codierung von Daten in einen ASCII-Text mit dem Ziel, diese Daten über ein Netzwerk zu übertragen. SOAP wiederum sind in XML codierte Aufrufe von Methoden eines Objekts beziehungs-weise von Funktionen auf einem entfernten Rechner über das Netzwerk.

10.1 TCP/IP und UDP/IP Network Protocol

Das TCP/IP-Protokoll (korrekt ausgesprochen: TCP-over-IP-Protokoll)und das verwandte UDP/IP-Protokoll sind die einzigen überlebendenStandards im Client-Server-Computing, die noch von nennenswerterBedeutung sind.

TCP/IP ist der Standard

TCP/IP ist somit der De-facto-Standard für Computernetzwerke. Zwargibt es sehr viele andere Level-4-Protokolle, zum Beispiel Microsofts NET-BIOS, IBMs NETBEUI oder Novells IPX, jedoch haben diese fast keineBedeutung mehr und existieren allenfalls aus Gründen der Kompatibilitätmit bestehenden Anwendungen, wenn diese noch kein TCP/IP unterstüt-zen. In der Regel wird dieses Protokoll nur noch emuliert, indem dieDaten des gewünschten Protokolls auf einem TCP/IP-Protokoll »Hucke-pack« genommen werden.

Applikation Protokoll Session Trans-port

Netz-werk

Data Link

Physika-lisch

E-Mail SMTP/POP

Port 25 TCP IP SLIP ISDN

Webapplication HTTP Port 80 PPP ADSL

File-Transfer FTP Port 21

SAP RFC RFC Port 1080

Host-Sessions TELNET Port 23 802.2 Wireless

Directory Ser-vice

DNS Port 53 UDP FDDI

File-Service NFS RPC-Map-ping

Ether-net II

Coax

Tabelle 10.1 Open-Systems-Interconnection-(OSI)-Seven-Layer-Modell

Kap10.fm Seite 191 Dienstag, 22. April 2003 2:33 14

Page 192: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

192 HTTP- und TCP/IP-Protokolle

IP, InternetProtocol

IP bedeutet ganz einfach Internet Protocol. Es wurde ursprünglich als aus-fallsichere Transportschicht für die Implementierungen des Internetgeschaffen. IP ist ein Level-3-Protokoll und bestimmt, wie die Bytes desDatenstroms zu Paketen zusammengefasst werden und auf welchem Wegein Paket zum Empfänger übertragen wird. Ohne ins Detail zu gehen,kann man sagen, dass IP für die Zustellung der Datenpakete verantwort-lich ist.

EindeutigeNummer für jeden

Knoten

Das typische Kennzeichen des IP-Netzwerks sind seine Adressen, diejedem Knoten innerhalb eines Netzwerks zugeordnet sind. Diese Adres-sen sind 4-Tupel von Zahlen im Bereich 0–255, zum Beispiel 192.168.1.1.Eine solche Adresse ist immer eindeutig innerhalb eines Netzwerks. Diekleinste IP-Adresse ist demnach 0.0.0.1 und die größte 255.255.255.254.Es ist technisch nicht möglich, alle Bits auf 0 oder alle auf 1 zu setzen.

TCP, TransmissionControl Protocol

Das TCP-Protokoll liegt eine Stufe höher auf der vierten Ebene des OSI-Modells (Transport Layer). Es legt die logischen Einheiten fest, in denenDaten vom Sender zum Empfänger übertragen werden. Dabei spielt einewesentliche Rolle, dass IP zum Senden keine feste Verbindungsstreckezwischen Sender und Empfänger aufbaut, sondern die einzelnen Daten-pakete grundsätzlich über verschiedene Strecken anliefern kann. TCP istdann dafür verantwortlich, die Pakete auf Senderseite zu zerlegen undbeim Empfänger wieder in der richtigen Reihenfolge zusammenzubauen.

UDP, User Data-gram Protocol

Das Senden von Datenpaketen in beliebiger Reihenfolge garantiert ausvielerlei Gründen eine hohe Zuverlässigkeit vor allem bei langen Verbin-dungsstrecken mit vielen Hops. Wenn die Datenmengen allerdings kleinsind und die Verbindung zwischen benachbarten Rechnern erfolgen soll,ist der zusätzliche Aufwand oft störend oder im Falle von sicheren Über-tragungen auch unerwünscht. Deshalb existiert parallel noch UDP (UserDatagram Protocol). Hierbei handelt es sich um ein abgespecktes TCP-Protokoll, das Daten in einem Stück überträgt.

IP-Adresse identi-fiziert Computer

Jeder Computer in einem Netzwerk hat seine eindeutige IP-Adresse, zumBeispiel 127.0.0.1 oder 169.128.1.1. Genau genommen muss man sagen,mindestens eine Adresse, denn ein Rechner kann auch mehrere IP-Adres-sen gleichzeitig haben, zum Beispiel kann er zur selben Zeit über eineNetzwerkkarte und über ein Modem mit dem Internet verbunden sein.Mit dieser Adresse identifizieren wir die Hardware, über die die Kommu-nikation abläuft.

Kap10.fm Seite 192 Dienstag, 22. April 2003 2:33 14

Page 193: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

Client-Server-Protokolle 193

Wenn die Daten über das Netzwerk angeliefert werden, müssen sie aberauch innerhalb des Rechners verarbeitet werden. Dies geschieht durchdie Zuweisung von Ports zu den Applikationen. Das IP-Protokoll kenntpro IP-Adresse 256×256 = 65.235 IP-Ports. Jedem Port kann eine eigeneAnwendung zugewiesen werden, die den Datenstrom entgegennimmtund verarbeitet.

ListenerEin solches Programm, das an einem Port einer IP-Strecke auf Daten war-tet, nennt man Listener, denn diese Programme »horchen« an den Portsund hören die Nachrichten ab. In Tabelle 1.2 sind eine Reihe bekannterListener-Dienste aufgeführt.

10.2 Client-Server-Protokolle

Ein TCP/IP-Netzwerk ist ein vielseitiges Transportprotokoll, über das sehrverschiedene Arten von Webdiensten ausgetauscht werden. An den bei-den Enden einer IP-Kommunikationsstrecke – den Ports – können sich dieunterschiedlichsten Programme befinden, die auf ankommende Nach-richten und Anfragen warten.

10.2.1 Clientseite

Beispiele für Programme auf der Clientseite, also dem Ende einer TCP/IP-Strecke, das eine Anfrage initiiert, sind:

� Webbrowser, z.B. Internet Explorer, Netscape oder Opera

� Microsoft-Office-Komponenten, etwa MS Excel, MS Word oder MSProject

� SAP R/3 via RFC und HTTP oder direkt über den Web Application Server

� jede andere Software, die HTTP-Requests absetzen kann

Protocol Port

FTP 21

TELNET 23

HTTP 80

POP 110

HTTPS 443

SAP R/3 1023

LPD or SAPLPD 515

Tabelle 10.2 Typische Port-Zuweisungen in einer IP-Umgebung

Kap10.fm Seite 193 Dienstag, 22. April 2003 2:33 14

Page 194: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

194 HTTP- und TCP/IP-Protokolle

10.2.2 Serverseite

Auf der Serverseite sieht es noch etwas komplizierter aus. Dort werdenRessourcen verwaltet, die dem anfragenden Client zur Verfügung gestelltwerden können. Eine solche Ressource kann im Grunde ein beliebigesProgramm sein, das eine API zur Verfügung stellt, die vom Webserver auf-gerufen werden kann.

Limitierungen beiWebservern

Die Einschränkungen liegen dabei vor allem in den Möglichkeiten desWebservers. Zum Beispiel kann ein Microsoft Internet Information Servereine Java-Applikation zunächst nur eingeschränkt ausführen. Andererseitstun sich die Open-Source-Webserver wie Tomcat noch schwer, eine Mi-crosoft.NET-Anwendung auszuführen oder in einfacher Weise mit einemMicrosoft-Office-Produkt zu kommunizieren.

10.2.3 URN, URI und URL – Resource Locator

Adressen im Webwerden durch eine

URN angegeben

Um eine Kommunikation zwischen einem Requester und einem Server zugewährleisten, müssen Nachrichten zuverlässig von einem Ende derKommunikationsstrecke zum anderen Ende übermittelt werden. Dazuwird jede Nachricht in einen formalen Umschlag gepackt und dieser mitder Bestimmungsadresse versehen. Diese Adresse nennt man ResourceLocator.

URL – Uniform Resource Locator

URL bezeichnenDateien

Eine URL ist die häufigste Form einer Ressourcenangabe in Webdiensten.Damit gibt der Client genau den Namen und den Typ der gewünschtenRessource an. Diese Ressourcen können selbst wieder sehr vielfältig sein,in der Regel unterscheidet man aber durch die Angabe, in welchem Pro-tokoll die Ressource die Information übermittelt.

URI-Präfix

Beispiel Ressource

HTTP http://logosworld.com/index.htm HyperText Transfer Protocol, Verweis auf eine Website

FTP ftp://ftp.microsoft.com/ File Transfer Protocol, Verweis auf einen FTP-Server

File file://C:/autoexec.bat Verweis auf eine Datei in der Syntax des Betriebssystems des Servers

Urn urn:sap-com:document:sap: business:rfc

Referenz auf den SAP Business Connector

Tabelle 10.3 Beispiele für Präfixe einer URI

Kap10.fm Seite 194 Dienstag, 22. April 2003 2:33 14

Page 195: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

Client-Server-Protokolle 195

URI – Uniform Resource Identifier

URI = URL mit Parametern

Eine URI ist eine um zusätzliche Informationen an den HTTP-Servererweiterte URL. Dabei handelt es sich in der Regel um Parameter, die vonder gerufenen Ressource zur weiteren Verarbeitung verwendet werden.Das weiter unten beschrieben CGI-Interface basiert vollständig auf denparametrisierten URIs. Eine typische URI kann wie folgt aussehen:

http://www.logosworld.de/asp/testdrive.htm?user=micky&pass=mausi

Diese URL besteht aus mehreren Teilen:

� Ressource Type http://Dieser teilt dem Server mit, welches Protokoll für die Kommunikationverwendet werden soll.

� Resource Address www.logosworld.de/asp/testdrive.htmDies ist der eindeutige Name der Ressource. Normalerweise handelt essich dabei einfach um den Netzwerkdateinamen des angefordertenDokuments. Allerdings kann es sich dabei um einen beliebigen Stringhandeln, der vom server verstanden wird. Gewöhnlich bestimmt derServer aus dem Suffix (z.B. .htm, .txt, .asp, .php .cgi etc) die Art derangeforderten Ressource.

� Resource parameters ?user=micky&pass=mausiIn diesem Fall sind das Username und Passwort.

URN – Uniform Resource Name

URN verweist auf eine ständig verfügbare oder virtuelle Ressource

Eine URN verweist auf eine ständige Verbindung innerhalb eines Netzes.Wir sprechen von einer URN, wenn die angegebene Ressource durcheinen logischen Namen spezifiziert wird, während im Unterschied dazueine URL immer angibt, wo die Ressource innerhalb des Web zu findenist. Eine solche typische URN ist z.B. der Verweis auf den SAP BusinessConnector:

urn:sap-com:document:sap:business:rfc

Das Arbeiten mit URNs setzt voraus, dass die Kommunikation vom Clientüber ein intelligentes Gateway abgewickelt wird, das erkennen kann, anwelche IP-Adresse die Anfrage physikalisch geleitet werden kann.

URNs können sich selbst am Gate-way registrieren

Ein typisches Verfahren, um dies zu gewährleisten, ist der passive Gate-way-Modus. Dabei meldet sich die Ressource an dem interessiertenGateway an und registriert sich dort. In diesem Fall wird die Verbindung

Kap10.fm Seite 195 Dienstag, 22. April 2003 2:33 14

Page 196: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

196 HTTP- und TCP/IP-Protokolle

also nicht durch das Gateway initiiert, sondern durch die Ressource selbstaufgebaut. Dabei wird ein permanenter Kanal geöffnet, über den dasGateway alle Anfragen an die Ressource leitet.

SAP Gateway-Modus

Ein solches URN-Verfahren wendet auch SAP R/3 an, wenn es eine RFC-Verbindung im Gateway-Modus aufbaut. Näheres finden Sie hierzu ananderer Stelle in diesem Buch (siehe Abschnitt 3.6) und unter den Trans-aktionen SMGW und SM59.

10.2.4 CGI – Common Gateway Interface

CGI ist üblicheForm der Parame-

terangabe

Eine verbreitete Form der URI-Angabe wird durch das Common GatewayInterface (CGI) spezifiziert. Die Idee hinter CGI ist der Wunsch, mit einerHTTP-Zieladresse ein Programm aufzurufen, das dann eine HTTP-Response dynamisch erstellt. Der Aufruf des Programms erfolgt dabeieinfach durch Angabe des Programmnamens. Falls das Programm Para-meter erwartet, werden diese als String durch ein Fragezeichen getrenntan die URL angehängt. Das folgende Beispiel ruft das SAP Interface Repo-sitory auf und gibt an, dass die gewünschte Anzeigesprache DE, alsodeutsch sein soll:

http://ifr.sap.com/catalog/query.asp?language=DE

Die Parameter werden immer in der folgenden Form angegeben:

Parametername=parameterwert

Falls mehrere Parameter spezifiziert werden sollen, werden sie durch einAmpersand (&) voneinander getrennt. Ein Beispiel sieht so aus:

http://ifr.sap.com/catalog/query.asp?namespace=urn:sap-com:ifr:LO:46C&type=bapi&name=SalesOrder.GetList&xml=schema

10.3 HTTP-Kommunikation mit einem Webserver

Direkt über dem TCP/IP_Protokoll hat sich das HTTP-Protokoll als derbedeutendste Standard etabliert. Er verdrängt bisher konkurrierende Pro-tokolle wie GOPHER entweder ganz oder aber auf Nischenplätze wie z.B.SMTP für Mailanwendungen. Auf HTTP setzen dann höhere Protokolleauf, die in erster Linie dazu dienen, Daten eine Semantik zu geben, zumBeispiel durch HTML oder XML. Abbildung 10.1 zeigt, wie die Protokollesich übereinander »zwiebeln«.

Kap10.fm Seite 196 Dienstag, 22. April 2003 2:33 14

Page 197: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

HTTP-Kommunikation mit einem Webserver 197

Ein HTTP-Service und ein Webbrowser sind typische Client-Server-Anwendungen, wobei im Normalfall (aber nicht immer) der Browser dieRolle des Clients und der HTTP-Service die des Servers übernimmt. Beide,Client und Server, bauen eine bidirektionale Verbindung miteinander aufund benutzen dazu ein der Aufgabe angemessenes Protokoll, das überTCP/IP ausgeführt wird.

ASCII-Klartext HTTP ist ein reines ASCII-Protokoll, wobei jedes übertragene Byte alsalphanumerisches ASCII-Zeichen interpretiert wird. Dadurch wird dasProtokoll von Menschen in Klartext lesbar, ist aber gleichzeitig auf einfa-che Weise von jedem beliebigen Computer, von Palm oder PC bis Main-frame, zu verarbeiten.

Frage-&-Antwort-Protokoll

HTTP ist gewöhnlich ein Dialog zwischen einem Browser-Client undeinem Webserver. Dabei sendet der Client Anfragen an den Server, derdarauf antwortet. Eine Anfrage im Sinne eines Fire-and-Forget ist in HTTPnicht vorgesehen, das heißt, es muss immer eine Antwort auf die Anfragekommen, um zumindest den Erhalt der Nachricht zu quittieren. DieseQuittierung, englisch acknowledgement, ist erforderlich, da die Reisezei-ten einer Datenübertragung im Internet nicht vorhersehbar sind.

Abbildung 10.1 Hierarchie der Protokoll-Layer

SOAP

XML [dialect: HTML]

HTTP

TCP

IPEthernetISDNASDLHDLC

PhysicalLayer

An Example HTTP SessionGET www.logosworld.com/welcome.htm HTTP/1.0

HTTP/1.0 200 OKHello World

POST www.logosworld.com/shoppingcart.asp HTTP/1.0Some dataSome data

HTTP/1.0 200 OKYour shopping cart has been updated

Request

Response

Kap10.fm Seite 197 Dienstag, 22. April 2003 2:33 14

Page 198: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

198 HTTP- und TCP/IP-Protokolle

HTTP-Requests:GET und POST

HTTP unterscheidet zwischen einer Reihe von Request-Typen, wobei diewichtigsten HTTP GET und HTTP POST sind.

Listing 10.1 Einfaches Beispiel für HTTP GET

GET /TimeService/TimeService.asmx/getUTCTime? HTTP/1.1Host: www.nanonull.com

HTTP/1.1 200 OKContent-Type: text/xml; charset=utf-8Content-Length: length

<?xml version="1.0" encoding="utf-8"?><string xmlns="http://www.Nanonull.com/TimeService/"> string</string>

Listing 10.2 Einfaches Beispiel für HTTP POST

POST /TimeService/TimeService.asmx/getUTCTime HTTP/1.1Host: www.nanonull.comContent-Type: application/x-www-form-urlencodedContent-Length: length

HTTP/1.1 200 OKContent-Type: text/xml; charset=utf-8Content-Length: length

<?xml version="1.0" encoding="utf-8"?><string xmlns="http://www.Nanonull.com/TimeService/"> string</string>

Die folgende Tabelle erläutert die Bedeutung grundlegender HTTP-Befehle.

HTTP-Kommando

Beschreibung

HTTP GET Sendet die Adresse einer gewünschten Ressource (URI) als String zum Server.

HTTP POST Sendet zusätzlich zur Adresse einer gewünschten Ressource (URI) auch noch weitere Daten im Body der Anfrage mit. Somit besteht ein HTTP POST aus zwei Teilen: aus einem Data-Header und dem Data-Body.

Tabelle 10.4 HTTP-Kommandos

Kap10.fm Seite 198 Dienstag, 22. April 2003 2:33 14

Page 199: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

HTTP-Kommunikation mit einem Webserver 199

HTTP-Forms werden im Body versendet

Typische Daten im Body einer HTTP-Anfrage sind die Daten einer HTML-Form, das heißt die Inhalte der Eingabefelder innerhalb eines HTML-Dokuments, die unter anderem zwischen den Tags <FORM>…<INPUT>…</INPUT>…</FORM> zu finden sind.

10.3.1 Beispiel einer HTTP-Session

Kommunikation wird immer vom Client aufgebaut

Die Kommunikation einer HTTP-Session wird immer vom Client initiiert,in unserem Fall dem Browser. Dieser Browser sendet eine Anfrage an denWebserver, der die Anfrage interpretiert und eine Antwort zurücksendet.Eine solche Anfrage ist ein simpler ASCII-String. Sie können diese Kom-

HTTP PUT Ersetzt die als URL angegebene Ressource (Datei) durch die im Rumpf des HTTP-Requests mitgesandten Daten. Dies entspricht einem Upload von Daten auf den Webserver und funktioniert natürlich nur, wenn der Client auch die notwendigen Schreibrechte auf dem Server besitzt.

HTTP HEAD Gibt den Header der als URN angegebenen Ressource zurück. Dies ist nützlich, um die Existenz einer Ressource vorab zu testen oder die Größe des zu erwartenden Datenstroms abzufragen.

HTTP-Kommando

Beschreibung

Tabelle 10.4 HTTP-Kommandos (Forts.)

Abbildung 10.2 Kommunikation zwischen einem HTTP-Browser und einem Webserver

<FORM><INPUT></INPUT></FORM>

RequesterBrowser Client

Web Server

Responder

HTTPPOST

HTTPGET

Kap10.fm Seite 199 Dienstag, 22. April 2003 2:33 14

Page 200: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

200 HTTP- und TCP/IP-Protokolle

munikation jederzeit mit TELNET oder jedem anderen einfachen Termi-nal-Emulator testen. TELNET kann von der DOS-Kommando-Zeile gestar-tet werden:

telnet localhost 80

Potnummernkönnen beliebig

festgelegt werden

Dieser Aufruf geht davon aus, dass Ihr Webserver auf dem lokalen PCunter dem Port 80 installiert ist. Port 80 ist der Default für die meistenHTTP-Server, insbesondere für den mit Windows 2000 installierten Inter-net Information Server. In einer Produktivumgebung ändert sich die Port-Nummer meistens, üblicherweise nimmt man die Nummer 8080, aberauch das ist willkürlich.

Sobald Sie erfolgreich eine Verbindung zum Server aufgebaut haben, wirdder Screen von TELNET gelöscht und der HTTP-Server wartet auf weitereEingaben. Sie können nun eine gültige HTTP-Anfrage eingeben, entwedermit oder ohne absoluter Pfadangabe:

GET default.htm HTTP/1.0{ eine Zeile freilassen}GET /asp/helloworld.htm HTTP/1.0{ eine Zeile freilassen}

HTTP-Requestswerden durch

Leerzeileangezeigt

Das Ende eines Requests wird durch eine Leerzeile angezeigt. Der Serverwartet so lange, bis er eine Leerzeile im Datenstrom, also zwei aufeinan-der folgende <CR><LF>-Sequenzen (Carriage Return/Linefeed), erhält,und beginnt dann, die Anfrage zu bearbeiten. Kommt die Leerzeile nicht,wartet der Server unter Umständen ewig.

Antwort beginntmit HTTP-

Statuscode

Wenn die Antwort zurückkommt, zeigt TELNET den erhaltenen Daten-strom an. In dem gezeigten Beispiel handelt es sich dabei um die Verwal-tungsdaten der HTTP-Antwort und den Inhalt der gewünschten Datei.Dabei ist die erste Zeile der Antwort immer der Status-String von HTTP,der uns mitteilt, auf welche Weise der Server die Anfrage beantwortethat, insbesondere ob die Anfrage erfolgreich war oder nicht. Die folgendeZeile meldet eine erfolgreiche Verarbeitung mit Status 200:

HTTP/1.0 200 OK

So meldet HTTP einen Fehler mit Status von 400 und größer

HTTP/1.0 404 NOT FOUND

Kap10.fm Seite 200 Dienstag, 22. April 2003 2:33 14

Page 201: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

HTTP-Kommunikation mit einem Webserver 201

10.3.2 Beispiel für einen HTTP POST-Request

HTTP POST sendet Daten im Body

Ein HTTP POST erlaubt es, im Rumpf der Anfrage beliebige Daten mitzu-senden. Die häufigste Verwendung ist es, die Eingaben in einem HTML-Formular an den Server zu übertragen. Praktisch sieht dies so aus, dassder CGI-String, der bei einem HTTP GET einfach an die URL angehängtwird, im Body der Anfrage übertragen wird.

Listing 10.3 Beispiel für ein HTML-Formular mit Feldern »ui«, »pw« und dem Push-button »OK«

<html> <head> <title>Login</title> <link rel="stylesheet" href="style.css" type="text/css"> </head>

<body> <IMG border=0 src="logo.gif" width="215" height="35"> <hr> <h3>Login</h3> <form method="POST" action="login.asp" class="shopform"> <font size="4" color=red> </font> <p>Please enter your User Data below to proceed: (Userid=logos Password=world)</p> <table border="0" cellpadding="0" cellspacing="0" width="300"> <tr> <td width="175">User Name</td> <td width="125"><input name="ui" size="20"> </td> </tr> <tr> <td width="175">Password</td> <td width="125"><input name="pw" size="20" type="password"></td> </tr> </table>

Kap10.fm Seite 201 Dienstag, 22. April 2003 2:33 14

Page 202: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

202 HTTP- und TCP/IP-Protokolle

<hr> <p><input type="submit" value="OK" name="OK" tabindex="1" class="button"> <input type="reset" value="Cancel" name="Cancel" tabindex="2" class="button"></p> </form> <hr> </body></html>

Wenn das HTML-Formular abgesendet wird, erzeugt der Browser darauseinen HTTP-Post-Request, in dessen Bauch die Formulardaten übertragenwerden. Das nachstehende Listing zeigt ein Beispiel für eine HTTP-Anfrage mit typischen Header-Informationen und der Übergabe der For-mularvariablen ui, pw und OK.

Listing 10.4 Beispiel für einen HTTP POST-Request

POST http://localhost/asp/kiosk/login.asp HTTP/1.1Accept: */*Referer: http://localhost/asp/kiosk/login.htmAccept-Language: deContent-Type: application/x-www-form-urlencodedAccept-Encoding: gzip, deflateUser-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.0.3705)

Abbildung 10.3 HTML-Formular in der Browserdarstellung

Kap10.fm Seite 202 Dienstag, 22. April 2003 2:33 14

Page 203: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

HTTP-Kommunikation mit einem Webserver 203

Host: localhostContent-Length: 23Proxy-Connection: Keep-AlivePragma: no-cacheCookie: ASPSESSIONIDQGGGQJEC=HGGLFPKDPIAMLFEGLDCFJGKEExtension: Security/Remote-Passphrase

ui=logos&pw=world&OK=OK

10.3.3 Anfragen direkt ins Internet

Zugriff über Proxy-Server

Wenn Sie noch keinen Webserver installiert haben, können Sie versu-chen, sich über TELNET mit dem Internet zu verbinden. Falls Ihr PC übereinen Proxy-Server auf das Internet zugreift, dann müssen Sie sich anstattmit dem Webserver mit dem Proxyserver verbinden, der die Kommunika-tion mit dem Webserver selbst herstellt und die Anfragen und Antwortenzwischen den Parteien vermittelt. Folgendes wäre die Anfrage über dasInternet:

telnet www.yahoo.com 80GET index.htm HTTP/1.0{eine Zeile frei lassen}

Und so sähe die Anfrage über den Proxy-Server aus:

telnet myproxy 80GET http://www.yahoo.com/index.htm HTTP/1.0{eine Zeile frei lassen}

Kap10.fm Seite 203 Dienstag, 22. April 2003 2:33 14

Page 204: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

Kap10.fm Seite 204 Dienstag, 22. April 2003 2:33 14

Page 205: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

XML – Extended Markup Language 205

11 XML – Extended Markup Language

XML sind einfache ASCII-Dokumente zum Austausch von Daten zwischen zwei Kommunikationspartnern. XML und die darauf aufbauenden Standards SOAP und WSDL haben sich mit rasanter Geschwindigkeit zum De-facto-Standard für ver-teilte Programmierung entwickelt.

11.1 XML als Lingua franca des Internet

XML wurde als die Lingua franca des Internet bekannt, also als eine Spra-che, die jeder spricht und jeder versteht, ohne dass die Verwendungdurch eine Organisation vorgeschrieben wurde. Damit ist XML zu etwadem geworden, was die englische Sprache für die Global Economy ist.

XML ist pures ASCII

XML ist eine einfache, gleichzeitig menschen- und maschinenlesbareSprache. Dokumente in XML haben einen hierarchischen Aufbau, beste-hen aber ausschließlich aus druckbaren Zeichen und verwenden ASCII-Code zur Übertragung. XML ist HTMLsehr ähnlich, wobei XML aberstrengere Anforderungen an die Struktur des Dokuments stellt.

Einfaches Parsing und Debugging

Während die strenge Strukturierung es einfach macht, Parser für dieDokumente zu schreiben, garantiert die Verwendung von ASCII, dass dieDokumente im Falle von Störungen, auch von einem Menschen ohneweitere Hilfsmittel gelesen und analysiert werden können.

Das nachfolgende Beispiel zeigt, wie eine gewöhnliche zwei-dimensio-nale Tabelle als XML-Dokument dargestellt werden kann. Die Kreuzta-belle in Tabelle 1.1 kann in einem XML-Dokument wie in Tabelle 1.1gezeigt repräsentiert werden.

Listing 11.1 Beispiel einer einfachen XML-Farm

<?xml version="1.0" encoding="UTF-8"?><Farm xmlns="x-schema:U:\examples\XML\farmschema.xml"> <Animal>

Name Weight Gender

Cow 420 F

Pig 120 M

Tabelle 11.1 Einfache Kreuztabelle einer Animal-Farm

Kap11.fm Seite 205 Dienstag, 22. April 2003 2:33 14

Page 206: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

206 XML – Extended Markup Language

<Name>Cow</Name> <Weight>420</Weight> <Gender>F</Gender> </Animal> <Animal> <Name>Pig</Name> <Weight>120</Weight> <Gender>M</Gender> </Animal></Farm>

11.1.1 Kleine Anatomie eines XML-Dokuments

In einer traditionellen IT-Umgebung hätten wir wahrscheinlich ein Doku-ment ähnlich dem folgenden erzeugt:

Cow 000420FPig 000120M

Flachen Dateienfehlen Informatio-

nen über dieStruktur

Das Problem mit einer solchen Datei ist offensichtlich: Wenn Sie dieDatei bekommen, wissen Sie zunächst nichts oder nicht viel über derenStruktur, weshalb die Datei ohne zusätzliche Informationen weitgehendnutzlos bleibt. Wir wissen nicht, wo die Kolonnen beginnen und wo sieenden, und auch nicht, welche Bedeutung ihnen zukommt. Häufig fehltgenau diese Dokumentation aus vielerlei Gründen und wir müssen ausdem Inhalt raten, wie die Datei aufgebaut ist.

Strukturinforma-tionen werden

hinzugefügt

Aus diesem Grund packen wir die Daten in eine harmonische Struktur,indem wir um jedes Feld und jeden Satz jeweils ein öffnendes und einschließendes Tag packen. Im folgenden Beispiel sind die Felder jedesDatensatzes von den Feldnamen umrahmt.

<Name>Cow</Name><Weight>420</Weight><Gender>F</Gender><Name>Pig</Name><Weight>120</Weight><Gender>M</Gender>

Nur druckbareZeichen sind

erlaubt

Beim Senden von Daten durch ein elektronisches Medium bestehen eineReihe von Restriktionen. So ist es zum Beispiel nicht möglich, Steuerzei-chen wie Carriage-Return <CR> oder Line-Feed <LF> beliebig in denDatenstrom eines HTTP-Dokuments einzufügen, denn diese Zeichen wer-den bereits als Sonderzeichen für das Protokoll selbst verwendet. Zweiaufeinander folgende <CR><LF>, also zwei Zeilenschaltungen hinterein-ander, signalisieren das Ende eines Abschnitts, in der Regel das Ende des

Kap11.fm Seite 206 Dienstag, 22. April 2003 2:33 14

Page 207: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

XML als Lingua franca des Internet 207

HTTP-Headers oder des ganzen Dokuments. Manche Protokolle erlaubenauch nur eine begrenzte Anzahl von Zeichen innerhalb einer Zeile, wasaber bei HTTP nicht zutrifft.

Zeilen werden durch ein Tag markiert

In einem XML-Dokument umgeht man dieses Problem von vornherein,indem man Zeilen auch wieder durch ein öffnendes und ein schließendesTag markiert. Im Beispiel stellt jede Zeile ein Tier da, also bekommt es alsKlammer das Tag <Animal>.

<Animal><Name>Cow</Name><Weight>420</Weight><Gender>F</Gender></Animal><Animal><Name>Pig</Name><Weight>120</Weight><Gender>M</Gender></Animal>

Um das Ende eines Dokuments sicher erkennen zu können, erfordertXML noch, dass das erste Tag als Envelope (Rahmen) für das ganze Doku-ment gewertet werden muss. Dieses Tag darf auch kein weiteres Mal imganzen Dokument vorkommen.

<Farm> <Animal><Name>Cow</Name><Weight>420</Weight> <Gender>F</Gender></Animal> <Animal><Name>Pig</Name><Weight>120</Weight> <Gender>M</Gender></Animal></Farm>

Metainformatio-nen für den XML-Parser

Zuletzt fügen wir dem XML-Dokument noch ein paar administrativeInformationen hinzu. In dem Tag <?xml> können Informationen als Attri-bute mitgegeben werden, die für den Parser des Dokuments gegebenen-falls von Interesse sein könnten. In unserem Beispiel wird die XML-Ver-sion mitgegeben, mit der das Dokument konform geht, und der Nameder Zeichensatzvariante, die in dem Dokument verwendet wird. Mögli-che Zeichensätze sind unter anderem UTF-8, ANSI oder WINDOWS.

<?xml version="1.0" encoding="UTF-8"?>

NamensraumDie Spezifikation von XML erfordert, dass die Struktur des Dokumentsverifizierbar ist. Dazu wird das erhaltene Dokument mit einem Schema-Dokument verglichen. Dieses Referenzdokument nennt man einenNamespace, deshalb auch der Name des Attributs xmlns für XML-Name-space.

<Farm xmlns="x-schema:U:\examples\XML\farmschema.xml">

Kap11.fm Seite 207 Dienstag, 22. April 2003 2:33 14

Page 208: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

208 XML – Extended Markup Language

Das folgende Listing zeigt exemplarisch die Anatomie eines XML-Doku-ments farmschema.xml. In Abbildung 11.1 ist sie nochmals grafisch aufbe-reitet.

Listing 11.2 Anatomie eines XML-Dokuments

<?xml version="1.0" encoding="UTF-8"?>

<!--W3C Schema generated by XML Spy v3.0.7 NT (http://www.xmlspy.com)--><Schema xmlns="urn:schemas-microsoft-com:xml-data" xmlns:dt="urn:schemas-microsoft-com:datatypes"> <ElementType name="Name" content="textOnly" dt:type="string"/> <ElementType name="Weight" content="textOnly" dt:type="int"/> <ElementType name="Gender" content="textOnly" dt:type="string"/> <ElementType name="Family" content="textOnly" dt:type="string"/>

<ElementType name="Animal" content="mixed"> <element type="Name" minOccurs="1" maxOccurs="*"/> <element type="Family" minOccurs="1" maxOccurs="*"/> <element type="Weight" minOccurs="1" maxOccurs="*"/> <element type="Gender" minOccurs="1" maxOccurs="*"/> </ElementType>

<ElementType name="Farm" content="mixed"> <element type="Animal" minOccurs="1" maxOccurs="*"/> </ElementType></Schema>

Kap11.fm Seite 208 Dienstag, 22. April 2003 2:33 14

Page 209: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

XSD-Schema und DTD 209

11.2 XSD-Schema und DTDXSD, XML-Schema-Definition

XSDs – XML-Schema-Definition - sind XML-Dokumente, die den erlaub-ten Inhalt und die Syntax anderer XML-Dokumente formal beschreiben.Zwar sind XSDs nicht zwingend, aber sehr hilfreich bei der Bestimmungformaler Aspekte eines Dokuments, zum Beispiel einer Datenbankta-belle. Darüber hinaus helfen XML-Schemen bei geschickter Anwendungauch, die »Geschwätzigkeit« von XML-Dokumenten zu reduzieren.

ValidierungEin XML-Dokument, dem ein Schema zugeordnet ist, kann gegen diesesverprobt werden, man nennt dies eine Validierung.

Grob gesprochen, ist ein XML-Schema wie ein Eintrag in einem Data-Dic-tionary. Es legt fest, wie die Datentypen der Elemente und Attribute aus-sehen, wie die Namen der Tags lauten und welche Datentypen die Werteder Elemente annehmen dürfen.

Aufbau eines Schemas

Ein XML-Schema ist selbst ein gültiges XML-Dokument und verwendetdafür eine Reihe von vordefinierten Tags, die als Teil der XML-Sprachefestgelegt wurden. Da ein XML-Schema selbst ein XML-Dokument ist,

Abbildung 11.1 Anatomie eines XML-Dokuments

���������� �������� ���� �����������

�����

�� �����

�������� �!�����

�"���#$�%&��!"���#$�

�'� �����!'� ���

�!� �����

�� �����

������(���!�����

�"���#$��&��!"���#$�

�'� ���)�!'� ���

�!� �����

������ �����!�

�!����

����������������� �������

���������������

� ������������

��������

���� ������ �� ���

��� � ���

���� �

������ �� �

��� � ���

���� �������

��������������� ������������������� �

�������� ���

���������������

����������������

Kap11.fm Seite 209 Dienstag, 22. April 2003 2:33 14

Page 210: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

210 XML – Extended Markup Language

kann es genau genommen wiederum gegen ein anderes Dokument vali-diert werden. Das Dokument, das die Validierungsinformation für einSchema enthält, beschreibt die erlaubten Tags des Schemas. Dies wird vorallem benutzt, um die Verprobung gegen eigene Datentypen oder Daten-strukturen zu ermöglichen, zum Beispiel kann bestimmt werden, ob dieDatenbank einen Type Float unterstützt.

Listing 11.3 XSD – XML-Schema zur Animal-Farm

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE xsd:schema PUBLIC "-//W3C//DTD XMLSCHEMA 19991216//EN" "" [ <!ENTITY % p 'xsd:'> <!ENTITY % s ':xsd'>]><xsd:schema xmlns:xsd="http://www.w3.org/1999/XML-Schema"> <xsd:complexType name="TyFamily" content="elementOnly"> <xsd:sequence> <xsd:element name="TyName"> <xsd:simpleType base="xsd:string"> <xsd:enumeration value="Cow"/> <xsd:enumeration value="Pig"/> </xsd:simpleType> </xsd:element> </xsd:sequence> </xsd:complexType>

<xsd:complexType name="TyGender" content="elementOnly"> <xsd:sequence> <xsd:element name="TyGender"> <xsd:simpleType base="xsd:string"> <xsd:enumeration value="F"/> <xsd:enumeration value="M"/> </xsd:simpleType> </xsd:element> </xsd:sequence> </xsd:complexType>

Kap11.fm Seite 210 Dienstag, 22. April 2003 2:33 14

Page 211: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

XSD-Schema und DTD 211

<xsd:complexType name="AnimalType" content="elemen-tOnly"> <xsd:sequence> <xsd:element name="Family" type="TyFamily"/> <xsd:element name="Weight" type="xsd:short"/> <xsd:element name="Gender" type="TyGender"/> </xsd:sequence> </xsd:complexType>

<xsd:element name="Farm"> <xsd:complexType content="elementOnly"> <xsd:sequence> <xsd:element name="Animal" type="AnimalType" minOccurs="1" maxOccurs="unbounded"/> </xsd:sequence> <xsd:attribute name="xmlns:xsi" type="xsd:uriReference" use="default" value="http://www.w3.org/1999/XMLSchema- instance"/> <xsd:attribute name="xsi:noNamespaceSchemaLocation" type="xsd:string"/> <xsd:attribute name="xsi:schemaLocation" type="xsd:string"/> </xsd:complexType></xsd:element></xsd:schema>

DTD, Document Type Definition

Alternativ zu den XML-Schemen gibt es noch weitere Validierungs-mechanismen. Ebenfalls weit verbreitet sind DTDs (Document Type Defi-nition), die vor allem zur Beschreibung von Datenbanktabellen herange-zogen werden.

Listing 11.4 DTD zur Animal-Farm

<?xml version="1.0" encoding="UTF-8"?><Schema xmlns="urn:schemas-microsoft-com:xml-data" xmlns:dt="urn:schemas-microsoft-com:datatypes"> <ElementType name="Name" content="textOnly" dt:type="string"/> <ElementType name="Family" content="textOnly" dt:type="string"/> <ElementType name="Weight" content="textOnly"

Kap11.fm Seite 211 Dienstag, 22. April 2003 2:33 14

Page 212: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

212 XML – Extended Markup Language

dt:type="int"/> <ElementType name="Gender" content="textOnly" dt:type="string"/>

<ElementType name="Animal" content="mixed"> <element type="Name" minOccurs="1" maxOccurs="*"/> <element type="Family" minOccurs="1" maxOccurs="*"/> <element type="Weight" minOccurs="1" maxOccurs="*"/> <element type="Gender" minOccurs="1" maxOccurs="*"/> </ElementType>

<ElementType name="Farm" content="mixed"> <element type="Animal" minOccurs="1" maxOccurs="*"/> </ElementType></Schema>

Es mag hilfreich sein, dass ein Schema weitgehend analog zu einer Typde-klaration einer modernen Programmiersprache ist, wie Sie es in Tabelle1.2 sehen können. Allerdings kann man mit Schemen noch deutlich kom-plexere Definitionen bewerkstelligen.

ABAP IV Visual Basic XML-Schema

Types:TyFamily Type C(12)

Public Enum TyFamily Cow = 1 Pig = 2End Enum

<xsd:element name="TyName"> <xsd:simpleType base="xsd:string"> <xsd:enumeration value="Cow"/> <xsd:enumeration value="Pig"/> </xsd:simpleType></xsd:element>

Tabelle 11.2 Vergleich der Datenstrukturen in ABAP, VB und XML

Kap11.fm Seite 212 Dienstag, 22. April 2003 2:33 14

Page 213: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

DOM – Document Object Model 213

Anzumerken bleibt noch, dass ein Schema sowohl in dem XML-Doku-ment mitgeführt als auch in einer separaten Datei abgespeichert werdenkann. Ansonsten ist das Erstellen eines XML-Schemas nicht sehr schwie-rig, lediglich die produzierten Ergebnisse sind manchmal etwas schwer zulesen.

11.3 DOM – Document Object Model

Reale Datenstruk-turen sind meis-tens hierarchisch

Zu den Kernkompetenzen der Webentwicklung gehört das Arbeiten mitDokumenten. Die Grundidee ist es, dass sich Datenströme in aller Regelin eine hierarchische Baumstruktur abbilden lassen. Auch wenn die Datendem Inhalt nach unterschiedlich sind, bleibt die Struktur von verwandtenDokumenten meistens gleich. Eine solche Struktur eines Dokumentsnennt man ein Document Object Model (DOM). In einer gewissen Weiseist dies auch eine Renaissance des hierarchischen Datenbankmodells.

Types:TyGender Type C(1)

Public Enum TyGender male = 1 female = 2End Enum

<xsd:element name="TyGender"> <xsd:simpleType base="xsd:string"> <xsd:enumeration value="F"/> <xsd:enumeration value="M"/> </xsd:simpleType></xsd:element>

Types: Begin Of AnimalName(32),Family Type TyFamily,Weight Type P,Gender Type TyGender,End Of Animal.

Public Type Animal Name As String Family As TyFamily Weight As Long Gender As TyGenderEnd Type

<ElementType name="Animal" content="mixed"> <element type="Name"/> <element type="Family"/> <element type="Weight"/> <element type="Gender"/></ElementType>

ABAP IV Visual Basic XML-Schema

Tabelle 11.2 Vergleich der Datenstrukturen in ABAP, VB und XML (Forts.)

Kap11.fm Seite 213 Dienstag, 22. April 2003 2:33 14

Page 214: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

214 XML – Extended Markup Language

11.3.1 DOM-Beispiele

DOM ist ein ein-facher Datenbaum

Im Grunde genommen sind DOMs selbst erklärend. Es sind einfacheBäume mit wenigen Anmerkungen, die besagen, wie oft ein bestimmterAst vorkommen kann oder muss. Es folgen einige Beispiele für Doku-mente und möglicher DOMs.

Listing 11.5 Microsoft-Word-DOM

Document �� [1…*] Paragraphs �� [1…*] Words �� [1…*] Characters �� �� [1…*] Fields (Pictures, Formulae etc.)

Auch einfache Textdateien haben ein DOM, das natürlich auch entspre-chend einfach ist.

Listing 11.6 DOM einer einfachen Textdatei

Text Document �� [1…*] Characters

Ein DOM ist notwendigerweise eindeutig. Je nach Bedarf kann man auchKomplexität hinzufügen oder weglassen, wie am Beispiel einer Textdateizu erkennen ist.

Listing 11.7 Alternatives DOM einer Textdatei

Text Document �� [1…*] Paragraphs �� [1…*] Characters

Auch IDocs haben ein DOM.

Listing 11.8 SAP-IDoc-DOM

IDoc Document �� [1…1] Control record �� [1…*] Segments �� [1…1] Segment info �� [1…1] Data �� [1…*] Segment fields

Kap11.fm Seite 214 Dienstag, 22. April 2003 2:33 14

Page 215: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

XML-Parser 215

Listing 11.9 Beispiel eines SAP-IDoc

EDI_DC40 043000000000001234540B 3012 MATMAS03 MATMAS DEVCLNT444 PROCLNT100 E2MARAM001 444Somedata E2MAKTM001

Ebenso SOAP-Dokumente:

Listing 11.10 SOAP-DOM

SOAP Document�� [1…1] SOAP Envelope

�� [0…1] SOAP Header� �� [0…*]Header Block¦�� [1…1] SOAP Body

�� [1…*]Message Body�� [1…*]Elements

Listing 11.11 Beispiel eines SOAP-Dokuments

<?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/ soap/envelope/"> <soap:Body>… </soap:Body></soap:Envelope>

11.4 XML-Parser

XML-Parser sind fertige Bibliotheken, die ein XML-Dokument lesen undes in eine leichter zu verarbeitende Baum- oder Matrixstruktur umwan-deln.

PerformanceEs ist bei weitem der mühsamste und auch langweiligste Teil, ein XML-Dokument von seinen Tags zu befreien und die Daten in geeigneteinterne Datenstrukturen umzuwandeln. Diese Arbeit nehmen Ihnen vor-gefertigte XML-Parser ab, von denen es mittlerweile jede Menge gibt. DieParser unterscheiden sich oft wesentlich in der Performance, denn mankann langsam oder auch schnell durch einen rekursiv strukturierten Baumwandern.

Kap11.fm Seite 215 Dienstag, 22. April 2003 2:33 14

Page 216: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

216 XML – Extended Markup Language

Programmcodeaus Schemagenerieren

Viele Parser bieten auch noch zusätzlich die Möglichkeit, aus einemSchema oder einem WSDL-Dokument den Programmcode zu einer Pro-grammiersprache zu generieren. Die meisten Tools existieren für die Java-Welt, während Microsoft alles in seinem SOAP-Toolkit zusammenfasst.

11.4.1 DOM oder SAX

Es gibt grundsätzlich zwei verschiedene Vorgehensweisen beim Parsenvon XML-Dokumenten. Die einen bilden das Document Object Modeldes XML-Dokuments ab und heißen deshalb auch DOM-Parser, währenddie anderen das XML-Dokument Stück für Stück abarbeiten. Sie werdenSAX-Parser genannt. Der Unterschied liegt demnach in der Technik, wiedas Dokument verarbeitet wird.

DOM-Parser

DOM-Parserbilden das Doku-ment als Baum ab

Das Dokument wird vom Parser komplett analysiert und dann in ein hie-rarchisches Objekt umgewandelt. Dies ist vergleichbar einem Compilerbei den Programmiersprachen, die das Quellprogramm zunächst überset-zen, bevor sie es verarbeiten.

SAX-Parser

SAX-Parser arbei-ten Dokumente

Stück für Stück ab

Dieser Parser ist gedacht für sehr große XML-Dokumente. Er parst jeweilsnur das nächste Token des Dokuments und übergibt dann die Verarbei-tung an die rufende Applikation. Die Realisierung ist meistens eventge-steuert, das heißt, der Parser löst ein bestimmtes Event aus, wenn er einelogische Einheit des Dokuments erkannt hat, und überlässt dem Event-handler die Verarbeitung. Nach Abarbeiten des Events führt der Parserseine Arbeit bis zum nächsten Ereignis fort. Diese Vorgehensweise ist miteinem Interpreter zu vergleichen, der Statement für Statement liest undjeweils sofort ausführt.

11.4.2 Der Microsoft XML-Parser

Microsoft packt seinen Parser geschickterweise gleich in den InternetExplorer und schlägt damit zwei Fliegen mit einer Klappe. Zum einenwird der Internet Explorer voll XML-kompatibel und darüber hinaus hatjeder Windows-Anwender, und damit jeder, der einen Computer auf sei-nem Schreibtisch hat, auch die XML-Libraries von Microsoft. Da Stan-dards nicht verordnet werden, sondern entstehen, schafft Microsoftdamit die Basis, seine Vorstellungen als Standard durchzusetzen, dennwas jeder hat, hat die größten Chancen, zum Standard zu werden.

Kap11.fm Seite 216 Dienstag, 22. April 2003 2:33 14

Page 217: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

XML-Parser 217

XML Document ActiveX – Micro-soft.XMLDOM

Dennoch ist die Microsoft XML-Klasse (msxml4.dll) eine sehr mächtigeBibliothek, die fast alle Funktionalitäten enthält, die man für die Entwick-lung von Webservices benötigt. Die MSXML-Klasse verfügt sowohl übereinen DOM-Parser als auch über einen SAX-Parser.

11.4.3 XML-Parser Libraries for Java

Es gibt eine ganze Reihe konkurrierender XML-Parser für Java, die meis-ten davon entstammen der Open Software Foundation wie zum BeispielApache XERXES.

jDOM

Als Beispiel für einen Java-Parser wurde hier jDOM ausgewählt. jDOM istein Projekt einer Gruppe von Open-Source-Entwicklern. Es ist ein fürEntwickler kostenlos vertriebener voll funktionsfähiger DOM-Parser undDOM-Treemanager, der von Konzept und Anwendung her sehr demMSXML von Microsoft ähnelt.

Listing 11.12 Darstellung der Animal-Farm mit jDOM für Java

package jdomtest;import org.jdom.*;import org.jdom.output.*;

public class simpledom { Document myDoc; Element root;

public simpledom() { } /* This is the constructor ! */

private void makedoc() { root = new Element("Shop"); myDoc = new Document(root); }/* Here we add a single Animal element to our document */ public void AddAnimal(String name, String family, int weight, String gender) { Element animal = new Element("Animal"); Attribute attName = new Attribute("Name", name);

Kap11.fm Seite 217 Dienstag, 22. April 2003 2:33 14

Page 218: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

218 XML – Extended Markup Language

/* Set the name as attribute "<Animal Name="Elsa">" */ animal.setAttribute(attName); root.addContent(animal); /* Add the family element "<Family>Cow</Family>" */ Element elem = new Element("Family"); elem.addContent(family); animal.addContent(elem); /* Add the Weight element and convert int to String" */ elem = new Element("Weight"); elem.addContent(Integer.toString(weight)); animal.addContent(elem); /* Add the Gender element "<Gender>F</Gender>" */ elem = new Element("Gender"); elem.addContent(gender); animal.addContent(elem); }

public String XML() { String XMLstring; XMLOutputter xmlout = new XMLOutputter(" ",true); XMLstring = xmlout.outputString(myDoc); return XMLstring; }/* I think toSTring is the logical name for this */ public String toString() { return this.XML(); } public static void main(String[] args) { simpledom TestSimpledom = new simpledom(); System.out.println("Hello jDOM"); TestSimpledom.makedoc(); TestSimpledom.AddAnimal("Elsa", "Cow", 420, "F"); System.out.println("*** Result from Document.toString()"); System.out.println(TestSimpledom.myDoc.toString()); System.out.println("*** Result from this.XML()"); System.out.println(TestSimpledom.XML()); System.out.println("*** Result from

Kap11.fm Seite 218 Dienstag, 22. April 2003 2:33 14

Page 219: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

XML-Parser 219

this.toString()"); System.out.println(TestSimpledom.toString() ); }

11.4.4 XML-Browser und Editoren

XMLSPYXML-Dokumente können Sie jederzeit mit dem Internet Explorer ab Ver-sion 5 oder mit Netscape ab Version 6 ansehen. Allerdings sind die For-matierungsmöglichkeiten der Browser doch sehr begrenzt. Als Notlösungmögen die Browser ihren Sinn haben, aber für komplexe Dokumenteoder gar zum Edieren von XML-Dokumenten eignen sie sich nicht.

Einer der leis-tungsstärksten XML-Editoren

Es gibt eine Vielzahl von XML-Editoren auf dem Markt, viele davon sindgratis in der Public Domain zu finden und auch günstige Shareware findetman zum Beispiel bei download.com. Ein solcher Editor, der auch alsShareware begonnen hat, ragt aber aus der Masse heraus, es ist XMLSPYder österreichischen Firma Altova (www.xmlspy.com). XMLSPY bietetvom Viewer bis zum Schema-Generator oder XSLT-Debugger fast alles,was man für das Arbeiten mit XML benötigt, und ist somit eine überra-gende XML-IDE.

11.4.5 Namespaces – Namensräume

Jeder XML-Webservice benötigt einen eindeutigen Namensraum, eng-lisch namespace, damit eine beliebige Client-Anwendung die verschiede-nen Webservices auseinander halten kann. Jeder Webservice sollte sei-nen eigenen Namespace festlegen und den Verweis auf den Namespaceals eindeutige URN im Internet veröffentlichen.

Für Entwicklungszwecke können Sie auch auf vordefinierte Namespacesdes W3C zurückgreifen oder auf Microsofts http://tempuri.org, der vonMicrosofts SOAP-Development-Toolkit als Default-Namespace verwen-det wird.

Namespace muss eindeutig sein

Der Namespace sollte so eindeutig sein, dass damit auch Ihr Webserviceeindeutig von anderen unterschieden werden kann, mit anderen Worten:Der Namespace soll identifizierend für einen Webservice sein. Daserreicht man am einfachsten durch Zufügen des eigenen Domain-Namens.

Namespace muss eine öffentliche URN sein

Der Verweis auf den Namespace ist eine URN, muss aber nicht immer aufeine URL im Web verweisen. Wichtig ist lediglich, dass der Nutzer desWebservices anhand der URN den Namespace eindeutig bestimmenkann. Häufig genügt es dem Parser, die URN zu erkennen, er hat aber

Kap11.fm Seite 219 Dienstag, 22. April 2003 2:33 14

Page 220: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

220 XML – Extended Markup Language

ansonsten den Namespace bereits hart codiert eingebaut. Die folgendenBeispiele stammen aus Microsoft.NET und setzen die Namespace-Refe-renz in den verschiedenen Programmiersprachen jeweils auf »http://microsoft.com/webservices/«:

Listing 11.13 Beispiele für Namensraum-Referenzen Microsoft.NET

C# [WebService(Namespace="http://microsoft.com/webservices/")]public class MyWebService { // implementation}

Visual Basic.NET <WebService(Namespace:="http://microsoft.com/webser-vices/")> Public Class MyWebService ' implementationEnd Class

Visual J#.NET /**@attribute WebService(Namespace="http://micro-soft.com/webservices/")*/public class MyWebService { // implementation}

11.5 XSLT – eXtended Style Sheet Language Transformations

Auf XML basie-rende Skript-

sprache

Die eXtended Stylesheet Language ist eine auf XML basierende Skript-sprache, die verwendet wird, um XML-Dokumente in ein anderes Doku-ment zu transformieren. Die durch XSLT definierten Dokumente nenntman XSL-Stylesheets.

Formatierung imBrowser gedacht

XSL wurde ursprünglich entworfen, um Formatierungen auf die Darstel-lung von XML in einem Browser zu ermöglichen, ähnlich den CascadingStylesheets. XSL ist eine auf Templates (Mustervorlagen) basierende Pro-grammiersprache, die XML-Dokumente durchläuft und jedes Element ineinen beliebigen anderen String umsetzen kann. Dies bedeutet auch, dassdas Ergebnis einer Transformation kein XML-Dokument sein muss. XMLkann also auch zum Beispiel in HTML oder PDF transformiert werden.

Kap11.fm Seite 220 Dienstag, 22. April 2003 2:33 14

Page 221: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

HTML-Seiten mit XSL-Stylesheets und XML 221

11.6 HTML-Seiten mit XSL-Stylesheets und XMLEs gibt Dutzende von Büchern über XML und XSL, vermutlich mittler-weile mehr als 100. Allen diesen Büchern ist gemeinsam, dass ihre Auto-ren ein sicher vorzügliches Wissen von XSL und XML haben und dement-sprechend all die schönen und fantastischen Möglichkeiten ausbreiten.

Allerdings vergessen sie hinter den dargestellten Möglichkeiten, dassXML und XSL vor allem eines sein sollen: nämlich einfach! Ich werde michdeshalb auf den häufigsten Anwendungsfall von XSL beschränken, derKonversion von XML-Dateien in ein darstellbares HTML-Format.

11.6.1 Inventurtabelle der Animal-Farm

Gehen wir wieder von der Animal-Farm aus, die wir schon bei der Dar-stellung von XML gesehen haben. Unser Ziel wird es sein, die Daten desXML-Dokuments als HTML-Tabelle darzustellen.

Das HTML zu dieser Tabelle sieht aus wie in dem nachstehenden Beispiel.

Listing 11.14 HTML zur Tabelle der Tiere

<html> <body> <table border="1"> <tr><th>Name</th><th>Family</th> <th>Gender</th><th>Weight</th></tr>

<tr><td>Elsa</td><td>Cow</td> <td>female</td><td>420</td></tr> <tr><td>Rosa</td><td>Pig</td> <td>male</td><td>120</td></tr> <tr><td>Lisa</td><td>Chicken</td> <td>male</td><td>3</td></tr> </table> </body></html>

Name Family Gender Weight

Elsa Cow female 420

Rosa Pig male 120

Lisa Chicken male 3

Tabelle 11.3 Tabelle der Tiere der Animal-Farm

Kap11.fm Seite 221 Dienstag, 22. April 2003 2:33 14

Page 222: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

222 XML – Extended Markup Language

Header und Body Man kann erkennen, dass wir es mit zwei Blöcken zu tun haben, einemEnvelope mit den Tags <HTML> und <BODY> sowie der eigentlichenTabelle, die vom <TABLE>-Tag eingeschlossen ist. Innerhalb der Tabelle fin-den sich dann die Überschrift mit den <TD>-Tags und die Zeilen mit <TR>.

11.6.2 XSL – Step by step

Wir werden nun Schritt für Schritt ein XSL-Stylesheet aufbauen, das dieTransformation des XML-Dokuments vornimmt. Jedes XSL-Stylesheet istmit <xsl:stylesheet> eingerahmt, besitzt also ein Root-Element mitdem Namen xsl:stylesheet.

Listing 11.15 Ein minimales XSL-Stylesheet

<?xml version="1.0" encoding="UTF-8"?><xsl:stylesheet></xsl:stylesheet>

XSLT hat einenNamensraum

Zunächst müssen wir dem Stylesheet einen Namensraum zuweisen. Wiebei jedem XML-Dokument definiert der Namespace bei XSL ebenfalls dieNamen der Tags und Attribute, die für das Stylesheet zugelassen sind. DerStandard-Namespace für W3C-kompatible Stylesheets ist:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">

Listing 11.16 XSL-Stylesheet mit Namespace

<?xml version="1.0" encoding="UTF-8"?><xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl"></xsl:stylesheet>

Dummy-Namensraum

Die Standard-Referenz xmlns:xsl=http://www.w3.org/TR/WD-xslist lediglich eine Dummy-Referenz. Im Allgemeinen wird diese nicht jedesMal aus dem Internet geholt, sondern der Parser hat die darin enthaltenenDefinitionen fest eingebaut. Im Grunde gibt es viele solcher Dummy-Refe-renzen, die aus formalen Gründen mitgeführt werden, aber der Effizienzhalber fest eingebaut sind. Erkennt der Parser eine URN aber nicht, wird erdiese im Internet nachlesen, findet er die URN nicht, gibt es einen Fehler.

11.6.3 XSL-Templates

Template-Sprache Templates sind das Herz des XSL-Formattings. Ein solches Templatebestimmt eine Reihe von XSL-Definitionen in seinem Body, die dann aufjedes passende XML-Tag angewandt werden. Tatsächlich geht der Parser

Kap11.fm Seite 222 Dienstag, 22. April 2003 2:33 14

Page 223: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

HTML-Seiten mit XSL-Stylesheets und XML 223

das XML-Dokument von oben nach unten durch und ersetzt das pas-sende Element des Templates mit dem Wert aus dem XML. Mit Hilfeeines match-Attributs kann man die richtigen Tags herausfiltern. DieAngabe von match="/" passt auf alle Elemente des XML-Dokuments.

Listing 11.17 XSL-Stylesheet, das alle XML-Tags wegfiltert

<?xml version="1.0" encoding="UTF-8"?><xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl"> <xsl:template match="/"> Hiding the root </xsl:template></xsl:stylesheet>

Das vorstehende Beispiel produziert als Ergebnis:

Hiding the root

11.6.4 XSL auf die Animal-Farm angewandt

Wir sind nun bereit, das Template auf das Animal-Farm-XML-Dokumentanzuwenden. In unserem Beispiel arbeiten wir mit einem einzigen Temp-late, das auf die Root des zu transformierenden Dokuments angewandtwird (match="/"). Dieses Template erzeugt den Body eines HTML-Doku-ments und loopt dann über die Elemente (<xsl:for-eachselect="Farm/Animal">) der Animal-Farm, um für jedes Tier eineHTML-Tabellenzeile (<tr><td>Cow</td></tr>) zu erzeugen.

Listing 11.18 Ein passendes XSL-Stylesheet

<?xml version="1.0" encoding="UTF-8"?><xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl"> <xsl:template match="/"> <html> <head/> <body> <table border="1"> <tr> <th>Name</th> <th>Family</th> <th>Gender</th> <th>Weight</th> </tr>

Kap11.fm Seite 223 Dienstag, 22. April 2003 2:33 14

Page 224: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

224 XML – Extended Markup Language

<xsl:for-each select="Farm/Animal"> <tr> <td> <xsl:value-of select="@Name"/> </td> <td> <xsl:value-of select="Family"/> </td> <td> <xsl:choose> <xsl:when test=".[Gender='M']">male</xsl:when> <xsl:when test=".[Gender='F']">female</xsl:when> <xsl:otherwise>unknown</xsl:otherwise> </xsl:choose> </td> <td> <xsl:value-of select="Weight"/> </td> </tr> </xsl:for-each> </table> </body></html></xsl:template></xsl:stylesheet>

11.6.5 Anatomie des XSL-Stylesheets

Schauen wir uns das Stylesheet noch einmal näher an, um zu verstehen,wie die Transformationen vor sich gehen:

<?xml version="1.0" encoding="UTF-8"?>

Bezug auf den Standard-Namensraum:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">

match="/" bedeutet das oberste Element des XML-Dokuments, dasheißt, das Stylesheet ist auf alle Elemente des Eingabedokuments anzu-wenden.

Kap11.fm Seite 224 Dienstag, 22. April 2003 2:33 14

Page 225: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

HTML-Seiten mit XSL-Stylesheets und XML 225

<xsl:template match="/"> <html> <head/> <body> <table border="1"> <tr> <th>Name</th> <th>Family</th> <th>Gender</th> <th>Weight</th> </tr>

Bis an diese Stelle formen wir den statischen Block der HTML-Tabelle.

Ab jetzt gehen wir in einer Schleife über alle Tags <Animal>, die selbstTöchter des Tags <Farm> sind.

<xsl:for-each select="Farm/Animal"> <tr> <td>

Die folgenden Zeilen geben den Wert des Attributs Name aus, das den<Animal>-Attributen zugewiesen wurde. Attribute werden immer durchVoranstellen des at-Zeichens (@) referenziert. Im Unterschied dazu wirdeiner Variablen in XSL ein Dollar-Zeichen ($) vorangestellt.

<xsl:value-of select="@Name"/> </td> <td>

Als nächste erfolgt die Ausgabe des Wertes des Elements mit dem Tag<Family> unterhalb von <Animal>.

<xsl:value-of select="Family"/> </td> <td>

Auch Fallunterscheidungen sind in XSL durch das Statement<xsl:choose> möglich, das den Wert des Elements <Gender> auf ver-schiedene Werte prüft und diesen durch einen entsprechenden Textersetzt, also »M« durch »male« und »F« durch »female«. Der Punkt inner-halb des Vergleichs test=".[Gender='M']" referenziert den aktuellbearbeiteten Knoten.

Kap11.fm Seite 225 Dienstag, 22. April 2003 2:33 14

Page 226: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

226 XML – Extended Markup Language

<xsl:choose> <xsl:when test=".[Gender='M']">male</xsl:when> <xsl:when test=".[Gender='F']">female</xsl:when> <xsl:otherwise>unknown</xsl:otherwise> </xsl:choose> </td> <td> <xsl:value-of select="Weight"/> </td> </tr> </xsl:for-each> </table> </body></html></xsl:template></xsl:stylesheet>

Das nachstehende Listing zeigt ein XML-Dokument, das sich mit obigemXSLT transformieren lässt. Ein Browser transformiert das XML automa-tisch, wenn der Verweis auf ein Stylesheet wie im nachstehenden Beispielbereits im Dokument steht.

Listing 11.19 Zu transformierendes XML-Dokument

<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet type="text/xsl" href="U:\examples\XML\Farm.xsl"?><!-- Reference to an existing XSL stylesheet "Farm.xsl" --><Farm> <Animal name="Elsa"><!-- One <Animal> tag for every animal --> <Family>Cow</Family> <Weight>420</Weight> <Gender>F</Gender><!-- One tag for each characteristic of the animal --> </Animal> <Animal name="Rosa"> <Family>Pig</Family> <Weight>120</Weight>

Kap11.fm Seite 226 Dienstag, 22. April 2003 2:33 14

Page 227: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

HTML-Seiten mit XSL-Stylesheets und XML 227

<Gender>M</Gender> </Animal> <Animal name="Lisa"> <Family>Chicken</Family> <Weight>3</Weight> <Gender>M</Gender> </Animal></Farm>

Das nachfolgende Diagramm zeigt noch einmal in übersichtlicher Form,wie das Stylesheet in die tabellarische Ausgabe übergeht.

11.6.6 Parsing des XML und Anwendung des XSL

Die Transformation des XML-Dokuments in HTML durch ein Stylesheetbenötigt einen Parser, der dies leistet. Die meisten XML-Parser könnenauch Transformationen mittels XSL durchführen. In einer Microsoft-Umgebung können wir wieder auf MSXML und die darin implementier-ten Methoden transformNodeToObject und transformNode zurück-greifen.

Abbildung 11.2 Synoptische Sicht auf Stylesheet und transformierte Ausgabe

Kap11.fm Seite 227 Dienstag, 22. April 2003 2:33 14

Page 228: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

228 XML – Extended Markup Language

Listing 11.20 VBA-Program zur Transformation von XML-Daten mit XSL-Stylesheet und msxml.dll

Dim xmlDoc As MSXML2.DOMDocumentDim xslDoc As MSXML2.DOMDocument

Sub Main() Set xmlDoc = New MSXML2.DOMDocument Set xslDoc = New MSXML2.DOMDocument

xmlDoc.Load ("U:\examples\XML\Farm.xml") xslDoc.Load ("U:\examples\XML\Farm.xsl") Debug.Print xmlDoc.transformNode(xslDoc)End Sub

Listing 11.21 ASP zur Transformation von XML-Daten mit XSL-Stylesheet und msxml.dll

<%Dim xmlDoc As MSXML2.DOMDocumentDim xslDoc As MSXML2.DOMDocumentSet xmlDoc = CreateObject("Microsoft.XMLDOM")Set xslDoc = CreateObject("Microsoft.XMLDOM")

xmlDoc.Load ("U:\examples\XML\Farm.xml")xslDoc.Load ("U:\examples\XML\Farm.xsl")Debug.Print xmlDoc.transformNodeToObject(xslDoc, response)%>

11.7 SOAPUniverselle

Aufrufmethodefür RPC

SOAP steht für Simple Object Access Protocol. Es ist ein einfaches Proto-koll, das durch Übertragen von XML-Dokumenten Programme auf einemRemote-Computer aufrufen kann. Dabei werden der Name der zu rufen-den Methode und die Parameter in einen XML-Tree codiert und dieAnfrage an den Server geschickt. Der packt den SOAP-Request aus undruft dann die gewünschte Methode in geeigneter Weise auf.

Listing 11.22 Aufruf einer Multiplikation via SOAP

POST /quickstart/aspplus/samples/services/MathService/VB/MathService.asmx HTTP/1.1Host: localhostContent-Type: text/xml; charset=utf-8

Kap11.fm Seite 228 Dienstag, 22. April 2003 2:33 14

Page 229: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

SOAP 229

Content-Length: lengthSOAPAction: "http://tempuri.org/Multiply"

<?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:xsi="http://www.w3.org/2001/XML-Schema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <Multiply xmlns="http://tempuri.org/"> <A>float</A> <B>float</B> </Multiply> </soap:Body></soap:Envelope>HTTP/1.1 200 OKContent-Type: text/xml; charset=utf-8Content-Length: length

<?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:xsi="http://www.w3.org/2001/XML-Schema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <MultiplyResponse xmlns="http://tempuri.org/"> <MultiplyResult>float</MultiplyResult> </MultiplyResponse> </soap:Body></soap:Envelope>

Listing 11.23 Darstellung eines Arrays in SOAP

Array in Visual BasicDim someNumber[2] As IntegersomeNumber[0] = "3"someNumber[1] = "4"Array in SOAP<SOAP-ENC:Array SOAP-ENC:arrayType="xsd:int[2]" name="someStrings"><SOAP-ENC:int>3</SOAP-ENC:int><SOAP-ENC:int>4</SOAP-ENC:int>

Kap11.fm Seite 229 Dienstag, 22. April 2003 2:33 14

Page 230: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

230 XML – Extended Markup Language

</SOAP-ENC:Array> Mehrdimensionales Array in Visual BasicDim someStrings[2,2] As StringsomeString[0,0] = "AAA"someString[0,1] = "BBB"someString[1,0] = "CCC"someString[1,1] = "DDD"Mehrdimensionales Array in SOAP<SOAP-ENC:Array SOAP-ENC:arrayType="xsd:string[2,2]"><SOAP-ENC:string>AAA</SOAP-ENC:string><SOAP-ENC:string>BBB</SOAP-ENC:string><SOAP-ENC:string>CCC</SOAP-ENC:string><SOAP-ENC:string>DDD</SOAP-ENC:string></SOAP-ENC:Array>

getUTCTime Das folgende Beispiel stammt aus den Trainingsseiten vonwww.altova.com und bedient sich eines Webservices, um die universelleZeit zu bestimmen. Die Anfrage wird wieder als SOAP-Dokument formu-liert, und in SOAP kommt auch die Antwort vom Server nanonull.com.Das Beispiel stellt die einfachste Form einer SOAP-Abfrage dar und zeigtdeutlich die formale Dokumentstruktur. Die Abfrage hat keine Parameter,weshalb im Body des SOAP-Dokuments nur der Name des Webservices<getUTCTime> steht.

Listing 11.24 SOAP-Request zur Bestimmung der aktuellen UTC-Zeit

POST /TimeService/TimeService.asmx HTTP/1.1Host: www.nanonull.comContent-Type: text/xml; charset=utf-8Content-Length: lengthSOAPAction: "http://www.Nanonull.com/TimeService/getUTCTime"

<?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <getUTCTime xmlns="http://www.Nanonull.com/TimeService/" />

Kap11.fm Seite 230 Dienstag, 22. April 2003 2:33 14

Page 231: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

WSDL-Dokumente 231

</soap:Body></soap:Envelope>

Die Antwort ist wieder ein HTTP-Dokument, das ein XML-Dokument mitder gewünschten Antwort im Bauch trägt. Man beachte hier wieder, wiemit den Namen der XML-Tags gespielt wird. Der Service heißtgetUTCTime und das Envelope der Antwort wird aus diesem Namendurch Anhängen von Response gebildet, ergo heißt das Envelope-TaggetUTCTimeResponse.

Listing 11.25 SOAP-Response von nanonull.com

HTTP/1.1 200 OKContent-Type: text/xml; charset=utf-8Content-Length: length

<?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <getUTCTimeResponse xmlns="http://www.Nanonull.com/TimeService/"> <getUTCTimeResult>string</getUTCTimeResult> </getUTCTimeResponse> </soap:Body></soap:Envelope>

11.8 WSDL-Dokumente

WSDL (Webservices Description Language) ist eine Sprache, die mit Hilfevon XML-Dokumenten die Struktur der Requests und Responses einesWebservices beschreibt.

Beschreibt die Form eines RPC-Arufes

Ein WSDL-Dokument ist ein einfaches, fest strukturiertes XML-Doku-ment, das in formaler Weise beschreibt, wie ein Programm aufgerufenwird. Dahinter steckt die schlichte Idee, dass ein beliebiges rufendes Pro-gramm seine Anfrage als XML-Dokument verschickt, dieses von demempfangenden Server entgegengenommen wird und aus dem gesende-ten XML-Dokument automatisch einen korrekten Funktionsaufruf gene-riert.

Kap11.fm Seite 231 Dienstag, 22. April 2003 2:33 14

Page 232: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

232 XML – Extended Markup Language

Für SOAPbeschreibt WSDL

die Tags

Gehen wir davon aus, dass die Anfragen an den Server in SOAP übermit-telt werden, beschreibt ein WSDL-Dokument, wie die Tags des SOAP-Dokuments auszusehen haben. Die Beschreibung ist so ausführlich, dassman mit ihrer Hilfe die Struktur des erforderlichen SOAP-Request-Doku-ments bestimmen kann.

11.8.1 WSDL-DOM

DOM einer WSDLhat eine feste

Struktur

Das DOM eines WSDL-Dokuments setzt sich aus einem Envelope mitdem festen Namen <definitions> und vier Teilbäumen zusammen, diedie Elemente eines Webservices im Detail beschreiben. Die Teilelementedes WSDL sind in Tabelle 1.4 aufgeführt.

Damit ergibt sich das im folgenden Listing dargestellte, einfache Doku-mentenmodell eines WSDL-Dokuments. Aus der Sicht des Protokolls istder Dokumentenbaum immer dreistufig.

Listing 11.26 Strukturbaum eines WSDL-Dokuments (WSDL-DOM)

WSDL Document �� [1…1] <definitions> �� [0…*] <types> � �� [0…*]type definitons ¦ �� [0…*] <messages> � �� [0…*]message definitons ¦ �� [0…*] <portType> � �� [0…*]port type definitons

Element Zweck

<portType> Beschreibt die Aktion (das auszuführende Programm) für den Web-service.

<message> Beinhaltet die Nachrichten, die vom Requester an den Server über-mittelt werden. Das sind insbesondere die Parameter des gewünsch-ten Funktionsaufrufs.

<types> Definiert die Datenstrukturen (Data Types), die innerhalb des WSDL-Dokuments verwendet werden.

<binding> Beschreibt das Protokoll, mit dem die Daten vom Requester an den Server und zurück übertragen werden.

Tabelle 11.4 Elemente eines WSDL-Dokuments

Kap11.fm Seite 232 Dienstag, 22. April 2003 2:33 14

Page 233: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

WSDL-Dokumente 233

¦ �� [0…*] <binding> �� [0…*]binding definitons

Der Rumpf eines WSDL-Dokuments sieht folgendermaßen aus:

Listing 11.27 Grundstruktur eines WSDL-Dokuments

<definitions><types> Typdefinitionens........</types>

<message> Nachrichtendefinition....</message>

<portType> Portdefinition.......</portType>

<binding> Binding-Definition....</binding>

</definitions>

Ein WSDL-Dokument kann also so aussehen, wie im folgenden Listing:

Listing 11.28 WSDL-Definition einer Suche nach ISBN bei Amazon.com

<definitions targetNamespace="urn:PI/DevCentral/SoapService" name="AmazonSearch"> <types> <xsd:schema> <xsd:complexType name="AsinRequest"> <xsd:all> <xsd:element name="asin" /> <xsd:element name="tag" /> <xsd:element name="type" /> <xsd:element name="devtag" /> <xsd:element name="offer" /> <xsd:element name="offerpage" minOccurs="0"/>

Kap11.fm Seite 233 Dienstag, 22. April 2003 2:33 14

Page 234: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

234 XML – Extended Markup Language

</xsd:all> </xsd:complexType> </xsd:schema> </types>

<message name="AsinSearchRequest"> <part name="AsinSearchRequest" type="typens:AsinRe-quest"/> </message>

<message name="AsinSearchResponse"> <part name="return" type="typens:ProductInfo"/> </message>

<operation name="AsinSearchRequest"> <input message="typens:AsinSearchRequest"/> <output message="typens:AsinSearchResponse"/> </operation>

<binding name="AmazonSearchBinding" type="typens:AmazonSearchPort"> <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/HTTP"/> <!-- Binding for Amazon Web APIs - RPC, SOAP over HTTP --> <operation name="AsinSearchRequest"> <soap:operation soapAction="urn:PI/DevCentral/SoapService"/> <input> <soap:body use="encoded" encodingStyle= "http://schemas.xmlsoap.org/soap/encoding/" namespace="urn:PI/DevCentral/SoapService"/> </input> <output> <soap:body use="encoded" encodingStyle= "http://schemas.xmlsoap.org/soap/encoding/" namespace= "urn:PI/DevCentral/SoapService"/> </output>

Kap11.fm Seite 234 Dienstag, 22. April 2003 2:33 14

Page 235: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

WSDL-Dokumente 235

</operation> </binding>

<service name="AmazonSearchService"> <!-- Endpoint for Amazon Web APIs --> <port name="AmazonSearchPort" binding="typens:AmazonSearchBinding"> <soap:address location= "http://soap.Amazon.com/onca/soap2"/> </port> </service>

</definitions>

11.8.2 Beispiel eines WSDL-Dokuments für eine BAPI-Funktion

Weder das SAP R/3 Interface-Repository (IFR) noch der SAP Web AS bie-ten derzeit WSDL für BAPIs oder IDocs an. Lediglich der SAP BusinessConnector unterstützt WSDL unmittelbar. Das ist nicht weiter tragisch,da die WSDL sich aus dem im IFR gefundenen Schema einfach transfor-mieren lässt.

Wir haben hier die RFC-Funktion RFC_CUSTOMER_UPDATE ausgewählt,mit der man die Daten eines Debitors in R/3 ändern kann. Das Beispiel(siehe Abbildung 11.19) zeigt in einem Ausschnitt aus dem ganzen WSDL-Dokument die Definition der Datentypen für die RFC-Parameter.

Kap11.fm Seite 235 Dienstag, 22. April 2003 2:33 14

Page 236: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

236 XML – Extended Markup Language

Abbildung 11.3 DOM-Ansicht des WSDL-Dokuments für RFC_CUSTOMER_UPDATE

Abbildung 11.4 Beispiel eines WSDL-Dokuments für eine BAPI-Function

Kap11.fm Seite 236 Dienstag, 22. April 2003 2:33 14

Page 237: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

WSDL-Dokumente 237

Abbildung 11.5 <messages>-Definitionen für RFC_CUSTOMER_UPDATE (XMLSPY™-Matrix-View)

Abbildung 11.6 <portTypes>-Definitionen für RFC_CUSTOMER_UPDATE (XMLSPY™-Matrix-View)

Kap11.fm Seite 237 Dienstag, 22. April 2003 2:33 14

Page 238: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

Kap11.fm Seite 238 Dienstag, 22. April 2003 2:33 14

Page 239: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

Entwicklung von dynamischen Webseiten 239

12 Entwicklung von dynamischen Webseiten

Der gängige Name für dynamische Webseiten ist Server Pages. Dabei handelt es sich um Webseiten, die an einigen Stellen Programmcode eingebaut haben, um den Inhalt der Seite zu bestimmen. Die wichtigsten Technologien sind dabei das traditionelle CGI, ASP für Microsofts IIS, JSP für die Java-Webserver wie WebSphere oder Apache Tomcat und BSP für den SAP Web AS.

12.1 Server Pages und ScriptingSchnittstellen zwischen Web-seiten und aus-führbaren Anwen-dungen

Server Pages sind Dateien auf einem Webserver, die sich mit einer URLansprechen lassen und ausführbaren Programmcode enthalten. DieserProgrammcode gibt gegebenenfalls einen Text zurück, der dann an dieStelle des Programmcodes in die Seite eingesetzt wird. Die so erzeugteSeite wird dann als Ergebnis der URL-Anfrage an den Requester zurück-gegeben.

Abbildung 12.1 Ein Browser ruft ein Skript und das Skript ruft eine Methode

Web Server

Browser

Component(DCOM+, .NET, Java-Class)

Application Programming Interface (API)(Also known as “Driver”)

(e.g.DCOM Controls, Remote Shell)

Application Database Engine

Application

RF

C

Front End(Client Tier)

Middle Tier(Server Tier)

Back Office(Application Tier)

Backend(Database Tier)

Redirect toother serverScript Processor

e.g. VB Script, JScript, or Plug-In

HT

TP

Kap12.fm Seite 239 Dienstag, 22. April 2003 2:33 14

Page 240: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

240 Entwicklung von dynamischen Webseiten

Das Funktionsprinzip ist dabei bei allen Webservern ähnlich. Die ServerPage wird vom Webserver an einen Script-Prozessor übergeben, der denProgrammcode evaluiert, ausführt und den Ergebnisstring in die ServerPage einfügt.

12.1.1 Common Gateway Interface – CGI

Das Common Gateway Interface (CGI) ist die älteste Implementierung fürdynamische Webseiten. Dabei kann der Requester eine URI angeben, dieauf ein ausführbares Programm auf dem Webserver verweist. Zusätzlichkönnen Parameter an die URI übergeben werden. CGI prüft, ob derRequester berechtigt ist, das Programm auszuführen.

Folgendes ist ein Beispiel eines Aufrufs einer DLL via CGI:

HTTP.//www.logosworld.com/CGI/tes-tiis.dll?method="test"&myname="Goofy"

12.1.2 Active Server Pages – ASP und ASP.NET

Scripting wirdvon VBS oder

Microsoft.NETausgeführt

Active Server Pages (ASP) ist die Microsoft-Variante von Server Pages fürden Microsoft IIS. ASP.NET ist der Nachfolger von ASP und baut auf demMicrosoft.NET-Framework auf. Während ASP nur Visual Basic Script undJScript unterstützt, erlaubt ASP.NET alle Microsoft.NET-Programmierspra-chen. ASP-Seiten haben gewöhnlich die Dateierweiterung .asp undASP.NET erkennt man an der Extension .aspx. In der ASP-Variante wirdimmer der VBS-Script-Prozessor WScript aufgerufen. Dieser ist in derLage, jedes beliebige DCOM-Objekt anzusprechen, also auch ein beliebi-ges Windows-Programm auszuführen.

Im nächsten, einfachen Beispiel versuchen wir, Verbindung mit einemWebserver aufzunehmen. Die aufgerufene Seite meldet bei Erfolg dieVersionsnummer des Webservers zurück.

Listing 12.1 ASP-Script, das die Versionsnummer des Webservers ermittelt

<html><body>Server Side ASP Visual Basic Script<BR>Message: <% = "<b>Hello from <i>IIS Server</i> version "+ server.HTTPdjsVersion) % +"</b>"><BR>End of Message </body></html>

Kap12.fm Seite 240 Dienstag, 22. April 2003 2:33 14

Page 241: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

Server Pages und Scripting 241

Listing 12.2 Ergebnis nach der Verarbeitung

<html><body>Server Side ASP Visual Basic Script<BR>Message: <b>Hello from <i>IIS Server</i> version 2.0</b><BR>End of Message </body></html>

Listing 12.3 Anzeige im Browser

Server Side ASP Visual Basic ScriptMessage: Hello from IIS Server Version=2.0End of Message

Durch die Verwendung von Microsoft.NET in ASP.NET ist ASP mittler-weile hinsichtlich Transaktionsfähigkeit, Stabilität und Sicherheit vollstän-dig auf dem Niveau von Java und JSP angelangt. JSP-Code lässt sich häufigohne Änderung unter ASP.NET ausführen, da der J#-Prozessor von Micro-soft.NET weitgehend kompatibel zu Java ist.

12.1.3 Java Server Pages – JSP

Dynamische Webseiten mit Java-Code

Java Server Pages (JSP) funktionieren fast identisch wie ASP, mit demUnterschied, dass die Programmbefehle in Java gehalten sind. Ergänzendzu ASP lassen sich die Befehle für JSP in zwei Syntax-Varianten angeben,einmal in klassischer Form, eingeschlossen in <% ... %>, und in XML-Syntax:

<%= Java Expression %>

oder

<jsp:expression> Java Expression</jsp:expression>

Das Ergebnis einer Expression kann genau wie bei ASP und, wie wir untensehen werden, BSP entweder direkt in den Output umgeleitet werdenoder durch Zugriff auf das entsprechende Objekt:

Current time: <%= new java.util.Date() %>

oder

<% out.response request.getRemoteHost() %>

Kap12.fm Seite 241 Dienstag, 22. April 2003 2:33 14

Page 242: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

242 Entwicklung von dynamischen Webseiten

Listing 12.4 zeigt ein Beispiel einer kompletten JSP.

Listing 12.4 Beispiel einer Java Server Page

<!—Name of this page: login.jsp (= Target for Submit) --><html> <head> <title>JSP-Beispiel</title> </head>

<body>

<%@ page import = "java.util.*" %> <% if (request.getParameter("submit") != null) { out.println("Ihr Username: " + request.getParameter("ui") + "<BR>"); out.println("<hr>"); out.println("Aktuelles Systemdatum/Systemzeit: " + new Date()); } else { %>

<HR><h3>Login</h3><form method="POST" action="login.jsp" class="shopform"><font size="4" color=red></font>

<p>Please enter your User Data below to proceed: (Userid=logos Password=world)</p> <table border="0" cellpadding="0" cellspacing="0" width="300"> <tr><td width="175">User Name</td> <td width="125"><input name="ui" size="20"></td> </tr> <tr> <td width="175">Password</td> <td width="125"><input name="pw" size="20" type="password"></td>

Kap12.fm Seite 242 Dienstag, 22. April 2003 2:33 14

Page 243: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

Server Pages und Scripting 243

</tr> </table><hr> <input type="submit" value="OK" name="OK" tabindex="1" class="button"> <input type="reset" value="Cancel" name="Cancel" tabindex="2" class="button"></form><hr>

<% } //end if %>

</body> </html>

Vordefinierte Objekte in Server Pages

Es gibt eine Anzahl von vordefinierte Objekten, die jeder JSP automatischzur Verfügung stehen. Die meisten dieser Objekte gibt es auch für ASPoder BSP. Tabelle 1.1 listet diese Objekte auf.

12.1.4 Java Servlets

Aufruf über feste Methoden

Alternativ zu JSP gibt es auch die Möglichkeit, Methoden von Java-Klas-sen direkt aufzurufen. Der Einstieg in die Klasse erfolgt aber immer überMethoden, deren Namen fest vorgegeben sind.

Objekt Beschreibung

request Zugriff auf das HTTP Request-Objekt

response Container für die Antwort an den Client

out Objekt zum formatierten Ausgeben von Daten auf die erzeugte JSP

session Informationen der HTTP-Session

application Globales Objekt zum persistenten Abspeichern von einfachen Daten

config Konfigurationsdaten für die aufgerufene Seite

pageContext Kontextinformationen für Java Beans (Transaktionen in Java)

page Leitet ein Pragma (Direktiven für den JSP-Interpreter) ein, welches Hinweise gibt, wie die Seite zu bearbeiten ist oder welche Meta-Kommandos ausgeführt werden sollen. Beispiel »page include« zum Bekanntmachen einer Java-Bibliothek.

Tabelle 12.1 Vordefinierte Objekte von Server Pages

Kap12.fm Seite 243 Dienstag, 22. April 2003 2:33 14

Page 244: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

244 Entwicklung von dynamischen Webseiten

Java-Klassen, dieHTTP-Antwort

zurückgeben

Java ist eine Sprache, die einen großen Teil der Konventionen in dieBezeichner einzelner Objekte und Klassen hineinlegt. Dieses Prinzip wirdauch bei der Implementierung eines zu CGI kompatiblen Interfaces ange-wendet. Wenn ein für Java ausgelegter Webserver wie Tomcat oder Web-Sphere einen HTTP-Request für ein Servlet empfängt, ruft der Server diepassende Methode auf. Der Name der Methode wird dabei aus demHTTP-Kommando (GET, POST, PUT, HEADER, DELETE) gebildet, dem dasWort do vorangestellt wird:

� doGetdoGet() wird immer dann aufgerufen, wenn der Server einen HTTPGET-Request empfängt.

� doPostdoPost() wird immer dann aufgerufen, wenn der Server einen HTTPPOST-Request empfängt.

� doXxxdoXxx() wird immer dann aufgerufen, wenn der Server einen anderenHTTP xxx-Request empfängt, wobei für xxx der Name des HTTP-Kom-mandos gesetzt wird.

Es gibt eine Reihe solcher HTTP-Kommandos, zum Beispiel HEADER oderDELETE, die vom Servlet optional unterstützt werden können. Werdendie Methoden trotzdem aufgerufen, ohne dass sie existieren, wird eineentsprechende HTTP-Meldung zurückgesendet.

12.1.5 Business Server Pages (BSP)

Server Pagesmit ABAP

Business Server Pages (BSP) sind die Scripting-Seiten des SAP Web Appli-cation Servers (Web AS). Der SAP Web AS unterstützt zwei Personalities,die ABAP Personality und die Java Personality, Sie können also wahlweisein Java oder in ABAP programmieren. Daraus darf man aber allen Gerüch-ten zum Trotz nicht folgern, dass es Pläne gäbe, ABAP irgendwann zuGunsten von Java abzuschaffen. Business Server Pages werden in ABAPprogrammiert, ein Beispiel zeigt das folgende Listing:

Listing 12.5 Beispiel einer BSP »Hello World«

<%@page language="abap"%><html> <head> <link rel="stylesheet" href="../../sap/public/bc/bsp/styles/sapbsp.css"> <title> Hello World BSP Page </title>

Kap12.fm Seite 244 Dienstag, 22. April 2003 2:33 14

Page 245: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

Web Pages mit Active Server Pages 245

</head>

<body class="bspBody1"> <H1>Hello World from Your BSP</H1> Show me current exchange rates with <a href="currencies.htm"> BAPI BAPI_EXCHRATE_GETCURRENTRATES</a> </body></html>

12.2 Web Pages mit Active Server Pages

Das Entwickeln von dynamischen Webseiten lässt sich am besten am Bei-spiel von Microsofts ASP oder ASP.NET erläutern. Zum einen liegt esdaran, dass VB-Programme sich auf jedem Windows-PC einfach entwi-ckeln lassen. Gut geeignet sind hierfür die VBA-Erweiterungen von Mi-crosoft Office, die die Möglichkeit bieten, gleichzeitig in Microsoft Wordzu entwickeln, zu testen und zu dokumentieren. Hinzu kommt die wenigintuitive Syntax von Java. Visual Basic, ABAP oder Delphi sind einfacherzu erlernen.

12.2.1 ASP »Hello World«

Sniplets sind kleine Code-sequenzen

Im Folgenden sehen Sie ein erstes Beispiel für ein Scriptlet in ASP, es heißtnatürlich HELLO WORLD. Die Begriffe Scriptlet und Sniplet sind gängigeBezeichnungen für kleine Scripts.

In dem Beispiel handelt es sich um ein einfaches HTML-Dokument, indem eine einzige Programmzeile eingefügt ist. Programmzeilen werdenzwischen öffnenden und schließenden Klammern der Form <% und %>eingefügt. Das Zeichen »=« innerhalb einer Programmsequenz ist iden-tisch mit der Methode response.write und bewirkt die Ausgabe desnachfolgenden Strings, der auch durch einen Ausdruck erzeugt werdenkann.

Listing 12.6 Hello World mit einem ASP-Sniplet

<html> <head> <title>Hello World ASP SCRIPT</title> </head> <body> <h1>Server Side ASP Visual Basic Script</h1>

Kap12.fm Seite 245 Dienstag, 22. April 2003 2:33 14

Page 246: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

246 Entwicklung von dynamischen Webseiten

<p>Now there should be a message from the Server <BR>Message: <% = "<B><U>Hello from ASP Server</U></B>" %> <BR>The message should be one line above</p> <BR>The current time is:</p> <% = "<B><U>"+Str(Now())+"</U></B>" %> </body></html>

Das nachfolgende Beispiel greift auf die COM-Komponente Scrip-ting.FileSystemObject zu und demonstriert, wie beliebige COM-Objekte von ASP angesprochen werden können.

Listing 12.7 Script zur Anzeige der gefundenen Dateinamen

<%Set fs = CreateObject("Scripting.FileSystemObject")Set subdir = fs.GetFolder(".")ii = 0response.write subdir.pathFor Each xfile In subdir.Filesii = ii + 1response.write "<P>"response.write iiresponse.write ": " + xfile.Name + "</P>"Next%>

12.2.2 Senden von HTML

HTML-Doku-mente mit Pro-

grammstatements

An die Stelle des ASP-Codes kann mit der Methode response.write einbeliebiger Text, also auch HTML-Tags, eingefügt werden. Im nachstehen-den Beispiel erzeugen wir eine saubere HTML-Tabelle mit ASP. Das Ergeb-nis sehen Sie in Abbildung 12.2.

Listing 12.8 ASP, die eine HTML-Tabelle erzeugt

<body>Server Side ASP Sending an HTML table<table border="1"cellpadding="0" cellspacing="0"width="100%"><%response.write "<TR><TD>A table line</TD></TR>"

Kap12.fm Seite 246 Dienstag, 22. April 2003 2:33 14

Page 247: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

Web Pages mit Active Server Pages 247

response.write "<TR><TD>A table line</TD></TR>"response.write "<TR><TD>A table line</TD></TR>"response.write "<TR><TD>A table line</TD></TR>"response.write "<TR><TD>A table line</TD></TR>"%></table></body>

12.2.3 Aufrufe beliebiger Windows-Objekte aus VBS

VB zu COM-Brücke

Es ist sinnvoll, komplexe Aufgaben als COM-Objekte zu realisieren. Dannspielt es auch keine große Rolle mehr, in welcher Programmiersprache dieAnwendung selbst realisiert ist. Die kompilierte Applikation steht alsCOM-Objekt zur Verfügung und kann dann mit dem Visual Basic-BefehlCreateObject angesprochen werden.

Ein Beispiel, wie eine komplette Shopping-Cart-Lösung in einer einzelnenDLL verpackt werden kann, um sie dann von ASP aus anzusprechen, zeigtIIScart2000 von IISCart (www.iiscart.com).

12.2.4 4.2.4BAPI-Aufruf von ASP

BAPIs werden wie alle RFC-Bausteine aufgerufen

Auch der Aufruf von SAP-BAPIs aus einer ASP-Seite heraus erfolgt durchdie COM-Brücke von Visual Basic Script. Das folgende Beispiel ruft denbekannten Funktionsbaustein BAPI_EXCHRATE_GETCURRENTRATES aufund gibt die komplette Tabelle als HTML-Tabelle aus.

Listing 12.9 ASP zum Aufruf eines BAPIs in SAP R/3

<html><head><title>Example calling BAPI

Abbildung 12.2 Ergebnis der Verarbeitung der ASP

Kap12.fm Seite 247 Dienstag, 22. April 2003 2:33 14

Page 248: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

248 Entwicklung von dynamischen Webseiten

BAPI_EXCHRATE_GETCURRENTRATES</title><link rel="stylesheet" type="text/css" href="style.css"><%Private Functions 'As SAPFunctionsOCX.SAPFunctionsPrivate LogonControl 'As SAPLogonCtrl.SAPLogonControlPrivate R3Connection 'As SAPLogonCtrl.Connection

Dim Func 'As SAPFunctionsOCX.FunctionPrivate iDATE 'As SAPFunctionsOCX.ParameterPrivate tEXCH_RATE_LIST 'As SAPTableFactoryCtrl.Table

Public Sub Main() Dim ix 'As Integer Dim retcd 'As Boolean Dim SilentLogon 'As Boolean Set LogonControl = CreateObject("SAP.LogonControl.1") Set Functions = CreateObject("SAP.Functions") Set R3Connection = LogonControl.NewConnection R3Connection.Client = "000" R3Connection.ApplicationServer = "192.168.69.111" R3Connection.Language = "EN" R3Connection.User = "DEVELOPER" R3Connection.Password = "lagunas" R3Connection.System = "WAS" R3Connection.SystemID = "" R3Connection.SystemNumber = "18" R3Connection.UseSAPLogonIni = False SilentLogon = True retcd = R3Connection.Logon(0, SilentLogon) If retcd <> True Then MsgBox "Logon failed": Exit Sub Functions.Connection = R3Connection Set Func = Functions.Add("BAPI_EXCHRATE_GETCURRENTRATES") Set iDATE = Func.Exports("DATE") Set tEXCH_RATE_LIST = Func.Tables("EXCH_RATE_LIST") iDATE.Value = "20030101"

Kap12.fm Seite 248 Dienstag, 22. April 2003 2:33 14

Page 249: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

Web Pages mit Active Server Pages 249

Func.Call Call BAPI_to_ASP(tEXCH_RATE_LIST) R3Connection.logoffEnd Sub

Private Sub BAPI_to_ASP(ByRef SAPtable) Dim iRow 'As Integer Dim iCol 'As Integer response.write"<TH>" For iCol = 1 To SAPtable.ColumnCount response.write "<TD>" response.write SAPtable.ColumnName(iCol) response.write "</TD>" Next response.write "</TH>" For iRow = 1 To SAPtable.RowCount response.write "<TR>" For iCol = 1 To SAPtable.ColumnCount response.write "<TD>" response.write SAPtable.Cell(iRow, iCol) response.write "</TD>" Next response.write "</TR>" NextEnd Sub%></head><body>Server Side ASP Sending an HTML table<table border="1" cellpadding="0" cellspacing="0" width="100%"><% Call Main%></table></body></html>

Kap12.fm Seite 249 Dienstag, 22. April 2003 2:33 14

Page 250: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

250 Entwicklung von dynamischen Webseiten

12.2.5 Microsoft.NET Connector

.NET Connectorbasiert auch auf

librfc32.dll

Für die Entwicklung von Schnittstellen zwischen Microsoft.NET und SAPR/3 steht ein spezieller Connector zur Verfügung. Dieser Connectorbasiert aber genauso wie die ActiveX-Controls auf der librfc32.dllvon SAP. Vermutlich versucht man, den .NET-Connector etwas näher andie Aufrufkonventionen des Java-Connectors heranzuführen. Allerdingserledigt auch die COM-Brücke diese Aufgabe hervorragend, insbeson-dere wenn man bedenkt, dass auch der Java-Connector auf Windows-Systemen nur über das Java Native Interface (JNI) auf die librfc32.dllzugreift.

12.2.6 Parameter aus der URI abfragen

Mit jeder URI können Parameter mitgegeben werden. Bei einem HTTPGET-Request werden diese nach der Konvention von CGI an die URL,durch ein Fragezeichen (»?«) getrennt, angehängt. Den zusätzlichen Teilnach der URL nennt man auch einen Querystring. Bei einem HTTP POST-Request werden sie im Bauch des HTTP-Requests als Datencontainer mit-verschickt.

Das Folgende ist ein Beispiel eines Querystrings als Teil einer URI:

http://localhost/queryst-ring.asp?Name="Micky"&City="Duckburg"

Der Querystring ist Name="Micky"&City="Duckburg"

Für die Verwendung von Querystrings gelten folgende Regeln:

� Ein Querystring wird durch ein Fragezeichen (»?«) von der URLgetrennt.

� Mehrere Parameter werden durch ein Ampersand (»&«) voneinandergetrennt.

Das nachstehende Listing zeigt ein kleines ASP-Script, das den Queryst-ring auswertet und dessen Werte anzeigt.

Listing 12.10 ASP zur Anzeige der angegebenen Querystring-Parameter

<HTML><BODY><H3>Here are the parameters which have been passed.</H3><P><% = "Querystring="+Request.QueryString %></P>

Kap12.fm Seite 250 Dienstag, 22. April 2003 2:33 14

Page 251: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

Web Pages mit Active Server Pages 251

<P><% = "Input field Name is="+Request.QuerySt-ring("NAME") %></P><P><% = "Input field City is="+Request.QuerySt-ring("CITY") %></P></BODY></HTML>

In einem HTTP POST-Request werden die Daten über das Protokoll mittransportiert. Auf einer HTML-Seite werden diese Werte durch ein HTML-<FORM> erfasst:

Listing 12.11 ASP zur Anzeige der Werte von HTML-<FORM>-Variablen

<HTML><BODY><H3>Here are the parameters which have been passed.</H3><P><% = "Querystring="+Request.QueryString %></P><P><% = "Input field Name is="+Request.QuerySt-ring("NAME") %></P><P><% = "Input field City is="+Request.QuerySt-ring("CITY") %></P><P>You can address the parameters with a numeric posi-tion index as well</P><P><% if Request.QueryString <> "" then _resstr = "FirstParam is="+Request.QueryString(1)" %><% response.write resstr %></P></BODY></HTML>

Werden die Daten eines <FORM> mit der HTTP GET-Methode versandt,erzeugt HTML einen Querystring, der aus den <FORM>-Daten gebildetwird. Im folgenden Listing sehen Sie einen HTTP GET-Request, der dieParameter als Teil der URI erhält.

Abbildung 12.3 HTML-Seite zum Eingeben der Werte in ein <FORM>-Element

Kap12.fm Seite 251 Dienstag, 22. April 2003 2:33 14

Page 252: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

252 Entwicklung von dynamischen Webseiten

Listing 12.12 <FORM> für ein HTTP GET und der erzeugte Querystring

<FORM METHOD="GET" ACTION="querystring.asp"> <H1>Sending form data as query string to an ASP</H1> <P>Name: <INPUT TYPE="TEXT" NAME="NAME"></P> <P>City: <INPUT TYPE="TEXT" NAME="CITY"></P> <P><INPUT TYPE="SUBMIT" NAME="Submit" VALUE="Submit"></P></FORM>

Die Browser bauen die URI selbst nach CGI-Konvention zusammen,indem die Werte der <FORM>-Felder an die URL angehängt werden:

HTTP.//querystring.asp?NAME="Micky"&CITY="Duckburg"

Als nächstes folgt noch ein Beispiel für ein HTML-Formular, das beimAbsenden die <FORM>-Daten in den Body des HTTP-Requests verpackt,anstatt sie an die URI anzuhängen.

Listing 12.13 <FORM> für METHOD=POST, das die Daten im Bauch des HTTP-Requests versendet

<FORM METHOD="POST" ACTION="querystring.asp"> <H1>Sending form data as query string to an ASP</H1> <P>Name: <INPUT TYPE="TEXT" NAME="NAME"></P> <P>City: <INPUT TYPE="TEXT" NAME="CITY"></P> <P><INPUT TYPE="SUBMIT" NAME="Submit" VALUE="Submit"></P></FORM>

Nachstehend sehen Sie eine ASP-Seite, die die Werte eines HTTP-Postauswertet und in der Ausgabe widerspiegelt.

Listing 12.14 ASP zur Anzeige der Werte eines FORM aus einem POST-Request

<HTML><BODY><% response.write("<H3>Form Content</H3>")for each formfield in Request.Formresponse.write(formfield&"="&Request.Form(form-field)&"&nbsp;")next%></BODY></HTML>

Kap12.fm Seite 252 Dienstag, 22. April 2003 2:33 14

Page 253: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

Web Pages mit Active Server Pages 253

12.2.7 ASP Application Variables

ASP erlaubt es, globale Variablen zu definieren, die entweder pro Sessionoder systemweit gültig sind. Damit können Sie Werte über mehrere Auf-rufe hinweg persistent halten. Globale Variablen können nur einfacheTypen sein, keine Verweise auf COM-Objekte.

ZähleranwendungListing 12.15 Beispiel zum Setzen einer globalen Variablen

<html><body><H3>Here is the value of the counter.</H3><P><% Application.Lock %><% Counter = Application("AccessCounter") %><% Counter = Counter + 1 %><% Application("AccessCounter") = Counter %><% Application.Unlock %><% = "<P>The value of the counter is " %><% = Counter %><% = "</P>" %><% = "<P>Connection String" %><% = Application("ConnectionString") %><% = "</P>" %><% %><% Application.UnLock %></P></body></html>

Das gezeigte Beispiel in Abbildung 12.5 müssen Sie in zwei Browser-Fenstern gleichzeitig aufrufen und beobachten, wie die Zählerwerte sichverändern.

Abbildung 12.4 Beispiel zur Verwendung einer globalen ASP-Variable

Kap12.fm Seite 253 Dienstag, 22. April 2003 2:33 14

Page 254: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

254 Entwicklung von dynamischen Webseiten

12.2.8 Global.asa – Die ASP-Autoexec-Datei

Zur Initialisierung von global gültigen Variablen steht die Datei GLO-BAL.ASA zur Verfügung. Dies ist ein besonderes ASP-Script, das beimNeustart des IIS automatisch gefunden und ausgeführt wird. Das fol-gende Listing zeigt ein initiales GLOBAL.ASA, das Eventhandler fürbestimmte IIS-Systemereignisse setzt. Die Eventhandler werden dannaufgerufen, wenn das entsprechende Ereignis eintritt.

Listing 12.16 Initiale GLOBAL.ASA mit Dummy-Eventhandlern

<script language=vbscript runat=server>SUB Application_OnStartEND SUB

SUB Application_OnEndEND SUB

SUB Session_OnStartEND SUB

Sub Session_OnEndEND SUB</script>

Falls in dieser Datei ein Fehler auftritt, erhält der erste Aufrufer einer ASP-Seite folgende Fehlermeldung:

Listing 12.17 Beispiel einer Fehlermeldung in GLOBAL.ASA

Script blocks must be one of the allowed Global.asa pro-cedures. Script directives within <% ... %> are not allowed within the global.asa file. The procedure names allowed are Application_OnStart, Application_OnEnd, Session_OnStart, or Session_OnEnd.

Falls Sie GLOBAL.ASA geändert haben, müssen Sie den IIS neu booten,um die Änderung wirksam werden zu lassen.

Kap12.fm Seite 254 Dienstag, 22. April 2003 2:33 14

Page 255: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

Web Pages mit Active Server Pages 255

12.2.9 Extra-Beispiel: File-Liste mit ASP

Das folgende Beispiel verwendet das FilesystemObject von Microsoft,um die Dateien, die sich im aktuellen Verzeichnis auf dem Server befin-den, aufzulisten.

Listing 12.18 Anzeige der gefunden Verzeichnisse auf dem Server mit ASP

<%Set fs = CreateObject("Scripting.FileSystemObject")Set subdir = fs.GetFolder(".")ii = 0response.write subdir.pathFor Each xfile In subdir.Files

Abbildung 12.5 Neustarten von IIS

Abbildung 12.6 Dateiliste eines Verzeichnisses auf dem Server mit ASP

Kap12.fm Seite 255 Dienstag, 22. April 2003 2:33 14

Page 256: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

256 Entwicklung von dynamischen Webseiten

ii = ii + 1response.write "<P>"response.write iiresponse.write ": " + xfile.Name + "</P>"Next%>

12.3 Entwicklung von Business Server Pages für den SAP Web AS

Server Pagesmit ABAP

Business Server Pages (BSP) sind SAPs Implementierungen von dynami-schen Webseiten. BSP sind weitgehend identisch mit Microsofts ActiveServer Pages und Java Server Pages. BSP werden im Repository des WebAS gespeichert und unterstützen als Programmiersprache für die einge-streuten Scripts ABAP. Der folgende Text wird nur noch die Unterschiedeund Ergänzungen zu ASP erwähnen und setzt voraus, dass Sie das imGrundlagenkapitel über ASP Beschriebene bereits kennen.

12.3.1 »Hello World« für BSP

Bearbeiten vonBSP mit SE80

BSP werden wie andere Entwicklungen auch mit der Transaktion SE80 imObject Navigator bearbeitet. Zu der vertrauten Umgebung ist eine neueOption BSP Application hinzugekommen. (Nebenbei bemerkt: Entwick-lungsklassen wurden in Packages umbenannt).

Das »Hello-World«-Beispiel aus Abbildung 12.11 hat bereits einen Linkauf eine weitere BSP mit dem Namen currencies.htm, das das nächste Bei-spiel werden wird.

Abbildung 12.7 BSP-Editor in Transaktion SE80

Kap12.fm Seite 256 Dienstag, 22. April 2003 2:33 14

Page 257: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

Entwicklung von Business Server Pages für den SAP Web AS 257

12.3.2 BAPI-Aufruf aus einer BSP

Ausführung von ABAP Objects-Statements

Innerhalb einer BSP können beliebige ABAP Objects-Statements folgen.Dabei ist diesmal wirklich ABAP Objects gemeint und nicht das umfassen-dere ABAP IV. Alle Restriktionen der Objektumgebung gelten auch fürBSP, zum Beispiel sind keine Kopfzeilen (WITH HEADER LINE) für interneTabellen zulässig. Das nun folgende Beispiel ruft den BAPI-Baustein BAPI_EXCHRATE_GETCURRENTRATES auf, um die aktuellen Währungskurseaus SAP R/3 zu lesen und in HTML aufzulisten. Das Ergebnis sehen Sie inTabelle 1.2.

Listing 12.19 BSP-Code zum Aufruf von BAPI_EXCHRATE_GETCURRENTRATES

<%@page language="abap"%><html> <head> <link rel="stylesheet" href="../../sap/public/bc/bsp/styles/sapbsp.css"> <title> Hello World BSP Page </title><%DATA: exch_rate_list type bapi1093_0.DATA: tfrom_curr_range TYPE STANDARD TABLE OF bapi1093_3.DATA: tto_currncy_range TYPE STANDARD TABLE OF bapi1093_4.DATA: texch_rate_list TYPE STANDARD TABLE OF bapi1093_0.DATA: treturn TYPE STANDARD TABLE OF bapiret1.

CALL FUNCTION 'BAPI_EXCHRATE_GETCURRENTRATES' DESTINATION 'NONE' EXPORTING date = sy-datum TABLES from_curr_range = tfrom_curr_range to_currncy_range = tto_currncy_range exch_rate_list = texch_rate_list return = treturn.%> </head>

<body class="bspBody1">

Kap12.fm Seite 257 Dienstag, 22. April 2003 2:33 14

Page 258: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

258 Entwicklung von dynamischen Webseiten

<H1><otr>Listing of exchange rates from BAPI_EXCHRATE_GETCURRENTRATES through BSP</otr></H1> <table border="1" width = "100%"> <tr> <th width="20%">From Currency</td> <th width="20%">To Currency</td> <th width="60%">Exchange Rate</td> </tr> <% LOOP AT texch_rate_list into exch_rate_list. %> <tr> <td > <%= exch_rate_list-from_curr %> </td> <td > <%= exch_rate_list-to_currncy %> </td> <td > <%= exch_rate_list-exch_rate %> </td> </tr> <% ENDLOOP. %> </table> </body></html>

From Currency To Currency Exchange Rate

AED JPY 30.55026

AED USD 0.27241

ARS BRL 1.20900

ARS CAD 1.52630

ARS CLP 471.66000

ARS COP 1548.00000

ARS JPY 112.15000

ARS MXN 9.82810

ARS PEN 3.16130

ARS USD 1.00000

ARS VEB 564.88000

AUD JPY 69.36541

Tabelle 12.2 Mögliches Ergebnis des Aufrufs von BAPI_EXCHRATE_GETCURRENTRATES

Kap12.fm Seite 258 Dienstag, 22. April 2003 2:33 14

Page 259: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

Entwicklung von Business Server Pages für den SAP Web AS 259

Anzeige der BSP-Seite

Auf die neue BSP-Seite kann nun von jedem Webbrowser, der ausrei-chend Zugriffsrechte auf den Web AS hat, zugegriffen werden. Die kor-rekte URL wird in den Eigenschaften der BSP-Seite (siehe Abbildung12.12) angezeigt. Beachten Sie, dass der dort angezeigte Domain-Namegegebenenfalls durch die IP des Web AS ersetzt werden muss, bezie-hungsweise Sie den Domain-Namen im DNS-Server oder die lokalehosts.-Datei eintragen müssen.

Folgendes ist eine Beispiel-URI zum Aufruf der BSP-Seite:

http://192.168.69.111:8080/sap/bc/bsp/sap/ZAXX_HELLO_WORLD/currencies.htm

12.3.3 Online Text Repository

BSP unterstützt automatische Fremdsprachen

Ein besonderes Feature bietet BSP aber doch in Bezug im Vergleich zuASP oder JSP. BSP ist in der Lage, alle Texte, die potenziell übersetzt wer-den müssen, in einem Online Text Repository mitzuführen. Die Texte darinkönnen dann mit den bekannten R/3-Übersetzungstools in eine andereSprache gebracht werden. Beim Aufruf der BSP aus einer anderen Sprach-umgebung heraus werden dann automatisch die richtigen Übersetzungeneingefügt.

ZAR JPY 19.06762

ZAR USD 0.17002

From Currency To Currency Exchange Rate

Tabelle 12.2 Mögliches Ergebnis des Aufrufs von BAPI_EXCHRATE_GETCURRENTRA-TES (Forts.)

Abbildung 12.8 Eigenschaften der BSP-Seite currencies.htm

Kap12.fm Seite 259 Dienstag, 22. April 2003 2:33 14

Page 260: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

260 Entwicklung von dynamischen Webseiten

Zum Schluss dieses Kapitels erhalten Sie noch eine Übersicht, die diewichtigsten Direktiven für eine BSP zeigt.

Abbildung 12.9 Übersetzung von OTR-Texten mit SE63

Direktive Bedeutung

<%@ page language=("ABAP") %> Legt fest, dass die Script-Befehle auf der Seite in ABAP codiert sind.

<%-- auskommentierter Code oder Text --%>

Kommentarblock: Der zwischen den Klammern angegebene Text wird weder in die Ausgabe-HTML-Seite übernommen noch als Programm-code interpretiert.

<% inline code %> Alle ausführbaren Statements müs-sen zwischen <% und %> stehen.

<%@ include file="URL"%> Der Inhalt der angegebenen Datei wird an der Stelle eingefügt.

<otr> beliebiger HTML-Text, kann auch Skripting-Code enthalten </otr>

Ein Text zwischen <otr> </otr> wird automatisch in das Online Text Repository (OTR) eingefügt. Die Texte im OTR können mit Transaktion SE63 übersetzt werden. Wird die BSP dann

mit einer anderen Sprachanmeldung aufgerufen, wird der übersetzte Text an Stelle des ursprünglich erfassten Textes ausgegeben.

Tabelle 12.3 Direktiven in BSP

Kap12.fm Seite 260 Dienstag, 22. April 2003 2:33 14

Page 261: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

Webseiten von anderen Programmen abrufen 261

13 Webseiten von anderen Program-men abrufen

Es gehört zu den wesentlichen Funktionen für das Program-mieren von Webservices, dass man eine bestimmte URL durch ein Programm abfragen kann. Dazu muss die URL an den Ser-ver gesendet und der zurückkommende Datenstrom entspre-chend im Programm abgefangen werden, ohne dass sich etwa ein Browserfenster öffnet.

13.1 Abfragen einer URI mit Visual BasicCOM-Objekte für HTTP-Dienste

Windows stellt mehrere COM-Objekte zur Verfügung, um auf HTTP-Dienste zuzugreifen. Die beiden bedeutendsten sind WINHTTP, das aus-schließlich für die NT-Technologie zur Verfügung steht, und die HTTP-Engine des Internet Explorers, die sich in der COM-Bibliothekshdocvw.dll versteckt.

13.1.1 Das Windows-Webbrowser-Control

Im folgenden Beispiel werden wir auf das Browser-Control des InternetExplorers zurückgreifen. Dabei nutzen wir aus, dass der Internet Explorerbeim Aufruf einer URI den HTTP-Response-Block zunächst ordentlich ineinem Objekt ablegt und dann den Browser aufruft, um die Seite zu ren-dern und darzustellen. Genau dieses Objekt werden wir auch aufrufenund dann die Antwort des Services aus dem Container des Objekts abho-len.

Das nachstehende Beispiel zeigt die Wiederverwendung des Webbrow-ser-Controls. Der Aufruf eines HTTP GET ist ganz einfach, hierzu wirdlediglich die URL der Navigate-Methode übergeben. Der HTTP POSTfunktioniert genauso, allerdings müssen vorher die HTTP-Header-Datensinnvoll gesetzt und die Daten des HTTP-Bodys gefüllt werden. Die Wertefür den Header hängen von der Applikation ab, die auf dem Webserverdie Anfrage entgegennimmt. Die Daten für den Body müssen als Byte-Array übergeben werden, das von der Funktion StrConv erledigt wird.

Sehr wichtig ist in diesem Zusammenhang, dass man explizit auf dieBeendigung des asynchronen Requests warten muss. Dies machen wirhier in einer Schleife, es könnte aber auch in einem Eventhandler stattfin-den, der auf das Ende der Abfrage reagiert. Der VB-Befehl DoEvents ist

Kap13.fm Seite 261 Dienstag, 22. April 2003 2:33 14

Page 262: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

262 Webseiten von anderen Programmen abrufen

wichtig bei Schleifen, deren Ende unbestimmt ist und die daher gegebe-nenfalls ewig laufen. Der Befehl gibt die Kontrolle an den Eventhandlervon Windows zurück, um diesem die Möglichkeit zu geben, einen anste-henden Event auszuführen, zum Beispiel das Drücken der Abbruch-TasteCtrl-C.

Listing 13.1 Beispiel zur Verwendung des Webbrowser-Controls

Public Page As WebBrowser

Public Sub do_post(URL As String, body As Variant) Dim PostData() As Byte 'a local array with dynamic length PostData = StrConv(body, vbFromUnicode) Page.navigate URL, , , PostData, HTTP_Header While Page.Busy: DoEvents: WendEnd Sub

Public Sub do_get(URL As String) Page.navigate URL While Page.Busy: DoEvents: WendEnd Sub

13.1.2 Anwendungsbeispiel für das Browser-Control

Die Schwierigkeit beim Absetzen von HTTP-Kommandos ist meist dasFinden der richtigen Werte für den Header. Das nachstehende Listingzeigt ein funktionierendes Beispiel, das den Request korrekt aufbaut unddas Ergebnis in einer lokalen Datei abspeichert. Dieses Beispiel ist typischund eignet sich deshalb gut als Vorlage für eigene Entwicklungen.

Listing 13.2 Vollständiges Listing eines VBA-Programms, das das IE-Webbrowser-Control wiederverwendet

Class ZZReuseIEPublic Page As WebBrowserPublic Document As MSHTML.HTMLDocument

Public User_Agent As StringPublic Content_Type As StringPublic Content_Length As IntegerPublic Accept As StringPublic Proxy_Connection As String

Kap13.fm Seite 262 Dienstag, 22. April 2003 2:33 14

Page 263: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

Abfragen einer URI mit Visual Basic 263

Public Referer As StringPublic Host As StringPublic Pragma1 As StringPublic Accept_language As StringPublic Accept_Encoding As StringPublic Extension As String

Public Sub do_post(URL As String, body As Variant)' Data to send to the server during the HTTP POST ' transaction. ' For example, the POST transaction is' used to send data gathered by an HTML form.' If this parameter does not specify any post data, the' Navigate method issues an HTTP GET transaction. ' This parameter is ignored if URL is not an HTTP URL.' NOTE: The post data specified by PostData is passed' as a SAFEARRAY structure. The variant should' be of type VT_ARRAY and point to a SAFEARRAY. ' The SAFEARRAY should be of element type' VT_UI1, dimension one, and have an element count ' equal to the' number of bytes of post data.Dim PostData() As Byte 'a local array with dynamic lengthbody = body + vbCrLfPostData = StrConv(body, vbFromUnicode)' Content_Length = Len(PostData) - 1Page.navigate URL, , , PostData, HTTP_Header' Page.navigate URL, , , bodyWhile Page.Busy: DoEvents: WendSet Document = Page.DocumentEnd Sub

Public Sub do_get(URL As String)Page.navigate URLWhile Page.Busy: DoEvents: WendSet Document = Page.Document' do_post URL, ""End Sub

Kap13.fm Seite 263 Dienstag, 22. April 2003 2:33 14

Page 264: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

264 Webseiten von anderen Programmen abrufen

Public Sub do_save(logtxt As String, Optional filename As String)Dim fs As Scripting.FileSystemObjectDim logfile As Scripting.TextStreamIf filename = "" Then filename = "U:\asplog.txt"Set fs = CreateObject("Scripting.FileSystemObject")Set logfile = fs.CreateTextFile(filename, True)logfile.Write logtxtlogfile.CloseSet fs = NothingEnd Sub

Public Property Get HTTP_Header() As StringDim Headers As StringHeaders = ""' HTTP_Header = "Content-Length: " + ' CStr(Content_Length) + vbCrLfAdd_Header_Line Headers, "Content-Type", Content_TypeAdd_Header_Line Headers, "Extension", ExtensionAdd_Header_Line Headers, "User-Agent", User - AgentAdd_Header_Line Headers, "Host", HostAdd_Header_Line Headers, "Pragma", Pragma1Add_Header_Line Headers, "Accept", AcceptAdd_Header_Line Headers, "Proxy -Connection", Proxy_Con-nectionAdd_Header_Line Headers, "Referer", RefererAdd_Header_Line Headers, "Accept -Language", Accept_lan-guageAdd_Header_Line Headers, "Accept -Encoding", Accept_EncodingHTTP_Header = HeadersEnd Property

Private Sub Add_Header_Line _ (Header As String, tag As String, value As String)If value <> "" ThenHeader = Header + tag + ": " + value + vbCrLfEnd IfEnd Sub

Kap13.fm Seite 264 Dienstag, 22. April 2003 2:33 14

Page 265: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

Abfragen einer URI mit Visual Basic 265

Private Sub Class_Initialize()' Set Page = New WebBrowserSet Page = CreateObject("InternetExplorer.Application")Page.Visible = False

Referer = "VBA_app"Accept_language = "*"' Content type carries the MEDIA TYPE as defined in the' Multipurpose Internet Mail Extension (MIME) specs' Others may be: text/plain; charset=US-ASCII' text/XMLContent_Type = "application/x-www-form-urlencoded"Pragma1 = "no -cache"Extension = "Security/Remote-Passphrase"End Sub

Private Sub Class_Terminate()Set Document = NothingSet Page = NothingEnd Sub

Nachdem wir die Klasse definiert haben, müssen wir sie nur noch mitgeeigneten Mitteln aufrufen. Hier rufen wir eine URL als HTTP GET aufund speichern das Resultat in einer lokalen Datei.

Listing 13.3 Ein Hauptprogramm zur Klasse in Listing 13.2

Dim Request As New ZZReuseIEDim strHeader As StringDim strForm As StringConst BaseURL = "http://logosworld.com/samples/nusskna-cker.htm"

Sub Main()Set Request = New HTTPRequest.do_get BaseURLDebug.Print Request.Document.body.innerHTMLRequest.do_save Request.Document.body.innerHTML,"nuss-knackers.html"End Sub

Kap13.fm Seite 265 Dienstag, 22. April 2003 2:33 14

Page 266: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

266 Webseiten von anderen Programmen abrufen

13.1.3 Das WINHTTP-Control

Sehr ähnlich dem Internet-Explorer-Control, allerdings in den meistenFällen etwas einfacher zu bedienen, ist die WINHTTP-Library. Im Übrigenfavorisiert Microsoft die Verwendung von WINHTTP in neuen Applikatio-nen. Im folgenden Beispiel ist das WINHTTP-Objekt ein Element desMSXML-Objekts. Da Sie in den meisten Fällen ohnehin den HTTP-Dienstzusammen mit einem XML-Parser verwenden, ist die Verwendung desMSXML4-Objekts ganz praktisch.

Der Microsoft XML-Parser MSXML hat die volle Funktionalität des WIN-HTTP bereits eingebaut. Damit ist es besonders einfach, Webdienste überHTTP aufzurufen.

Falls Sie mit WINHTTP über einen Proxy-Server auf das Internet zugreifenwollen, müssen Sie die Benutzung des Proxys konfigurieren. Hierfür stelltMicrosoft ein Tool Proxycfg zur Verfügung, das die notwendigen Einstel-lungen in der Windows-Registry vornimmt. Sie können dieses Tool gege-benenfalls von Microsoft MSDN herunterladen. Aufgerufen wird das Toolmit dem Befehl Proxycfg –d.

Das nachstehende Beispiel erzeugt zunächst eine Instanz des MSXML-Objekts und setzt die entsprechenden Parameter. Als URL wird eineAbfrage nach einem Artikel bei Amazon.com abgesetzt. Anders als beimWebbrowser-Control muss hier nicht explizit geprüft werden, ob derHTTP-Request schon abgeschlossen ist, vielmehr kommt die Abfrage mitTrue oder False zurück.

Listing 13.4 Request für ein XML-Dokument mit MSXML

Function AmazonASINsearch(ASIN As String) As MSXML2.DOM-Document Dim SelectedText As String Dim MSXML As MSXML2.DOMDocument Dim XMLURL As String Dim Loaded As Boolean Set MSXML = CreateObject("MSXML.DOMDocument") MSXML.Async = False MSXML.preserveWhiteSpace = False MSXML.validateOnParse = True MSXML.resolveExternals = False XMLURL = "http://xml.amazon.com/onca/xml2" + _ "?t=logosworldcom" + _

Kap13.fm Seite 266 Dienstag, 22. April 2003 2:33 14

Page 267: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

Abfragen einer URI mit Visual Basic 267

"&dev-t=D2H301234JJ987" + _ "&page=1" + _ "&f=xml" + _ "&mode=books" + _ "&type=heavy" + _ "&AsinSearch=" + ASIN

Loaded = MSXML.Load(XMLURL)

If (Loaded) Then' ProcessResults MSXML Else MsgBox "The service is not available." End If Set AmazonASINsearch = MSXMLEnd Function

13.1.4 Anwendungsbeispiel für das WINHTTP-Control

Das nachstehende Beispiel liest eine XML-Datei ISBNSOAP.XML vonDatei und sendet diese als HTTP POST-Request via WINHTTP zum Servervon Amazon.com. Auch hier handelt es sich um ein typisches Beispiel,das sich gut als Vorlage für eigene Abwandlungen eignet.

Listing 13.5 Vollständiges Listing eines VBA-Programms, das WINHTTP verwendet

Class ZZWinHTTPPublic Page As MSXML2.XMLHTTPPublic Document As MSHTML.HTMLDocumentPublic User_Agent As StringPublic Content_Type As StringPublic Content_Length As IntegerPublic Accept As StringPublic Proxy_Connection As StringPublic Referer As StringPublic Host As StringPublic Pragma1 As StringPublic Accept_language As StringPublic Accept_Encoding As StringPublic Extension As StringPublic SOAPAction As String

Kap13.fm Seite 267 Dienstag, 22. April 2003 2:33 14

Page 268: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

268 Webseiten von anderen Programmen abrufen

Public Sub do_post(URL As String, body As Variant)' Data to send to the server during the HTTP POST trans-action. For example, the POST transaction is' used to send data gathered by an HTML form. If this parameter does not specify any post data, the' Navigate method issues an HTTP GET transaction. This parameter is ignored if URL is not an HTTP' URL.' NOTE: The post data specified by PostData is passed as a SAFEARRAY structure. The variant should' be of type VT_ARRAY and point to a SAFEARRAY. The SAF-EARRAY should be of element type' VT_UI1, dimension one, and have an element count equal to the number of bytes of post data. Dim PostData() As Byte 'a local array with dynamic length Dim Flags As Long Dim TargetFrame As String

Flags = 0 TargetFrame = ""

Page.Open "POST", URL, False SOAPAction = "urn:PI/DevCentral/SoapService" + vbCrLf PostData = StrConv(body, vbFromUnicode) Content_Length = UBound(PostData) - 1 Content_Type = "text/xml; charset=""utf-8""" Me.HTTP_Header Page.send body' Page.navigate URL, , , body' While Page.Busy: DoEvents: Wend Do While Page.readyState < READYSTATE_INTERACTIVE: DoEvents: LoopEnd Sub

Kap13.fm Seite 268 Dienstag, 22. April 2003 2:33 14

Page 269: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

Abfragen einer URI mit Visual Basic 269

Public Sub do_save(logtxt As String, Optional filename As String) Dim fs As Scripting.FileSystemObject Dim logfile As Scripting.TextStream If filename = "" Then filename = "asplog.txt" Set fs = CreateObject("Scripting.FileSystemObject") Set logfile = fs.CreateTextFile(filename, True) logfile.Write logtxt logfile.Close Set fs = NothingEnd Sub

Public Sub HTTP_Header()' HTTP_Header = "Content-Length: " + CStr(Content_Length) + vbCrLf Add_Header_Line "Content-Type", Content_Type Add_Header_Line "Extension", Extension Add_Header_Line "User-Agent", User - Agent Add_Header_Line "Host", Host Add_Header_Line "Pragma", Pragma1 Add_Header_Line "Accept", Accept Add_Header_Line "Proxy -Connection", Proxy_Connection Add_Header_Line "Referer", Referer Add_Header_Line "Accept -Language", Accept_language Add_Header_Line "Accept -Encoding", Accept_Encoding Add_Header_Line "SOAPAction", SOAPActionEnd Sub

Private Sub Add_Header_Line(tag As String, value As String) If value <> "" Then Page.setRequestHeader tag, value End IfEnd Sub

Private Sub Class_Initialize()' Set Page = New WebBrowser' Set Page = CreateObject("InternetExplorer.Application")

Kap13.fm Seite 269 Dienstag, 22. April 2003 2:33 14

Page 270: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

270 Webseiten von anderen Programmen abrufen

Set Page = CreateObject("MSXML2.XMLHTTP") Referer = "VBA_app" Accept_language = "*" Content_Type = "application/x-www-form-urlencoded"' Content type carries the MEDIA TYPE as defined in the' Multipurpose Internet Mail Extension (MIME) specs' Others may be: text/plain; charset=US-ASCII' text/XML Pragma1 = "no -cache" Extension = "Security/Remote-Passphrase"End Sub

Private Sub Class_Terminate() Set Document = Nothing Set Page = NothingEnd Sub

Jetzt fehlt nur noch ein Hauptprogramm, das unsere Klasse geeignet tes-tet. Unser Beispiel liest nun eine vorbereitete SOAP-Abfrage aus einerDatei und sendet diese als HTTP POST an Amazon.com.

Listing 13.6 Ein Hauptprogramm zur Klasse ZZwinHTTP

Sub Main() Dim Request As New ZZWinHTTP Dim strHeader As String Dim strForm As String Dim myXML As New MSXML2.DOMDocument Request.do_save "Hello World" myXML.Load "ISBNSOAP.xml" Request.do_post BaseURL, myXML.XML Debug.Print Request.Page.responseText Request.do_save Request.Page.responseXML.XML, "ama-zonresponse.xml"End Sub

Zum besseren Verständnis hier noch einmal ein Beispiel für einen geeig-neten SOAP-Request zur Abfrage der ISBN.

Listing 13.7 SOAP-Request zur Abfrage einer ISBN im Amazon-Katalog

<?xml version="1.0" encoding="UTF-8"?><SOAP-ENV:Envelope

Kap13.fm Seite 270 Dienstag, 22. April 2003 2:33 14

Page 271: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

Webentwicklung mit SAP R/3 271

SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"xmlns:xsd="http://www.w3.org/2001/XMLSchema"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"xmlns:si="http://soapinterop.org/xsd"xmlns:typens="urn:PI/DevCentral/SoapService"> <SOAP-ENV:Body> <typens:AsinSearchRequest> <AsinSearchRequest xsi:type="typens:AsinRequest"> <asin xsi:type="xsd:string"> 3528057297</asin> <tag xsi:type="xsd:string"> logosworldcom</tag> <type xsi:type="xsd:string"> lite</type> <dev-tag xsi:type="xsd:string"> D2H3Y00012KJJ615</dev-tag> </AsinSearchRequest> </typens:AsinSearchRequest> </SOAP-ENV:Body></SOAP-ENV:Envelope>

13.2 Webentwicklung mit SAP R/3Webentwicklung ist ab R/3 3.0E möglich

Ab Release 6.10 hat die SAP-Basis eine zusätzliche Personality als Webser-ver bekommen. Dadurch verhält sich das SAP-Basissystem innerhalb einesNetzwerks wie ein HTTP-Server, akzeptiert also Anfragen via HTTP undkann Anfragen in HTTP aussenden. Damit bietet SAP eine ganze Reihe vonalternativen Methoden, Entwicklungen für und um das Internet zusam-men mit SAP R/3 zu realisieren. Sie können die SAP-Basis als Webservereinsetzen, von einem Webserver via RFC auf SAP R/3 zugreifen und vonSAP R/3 via RFC externe Dienste nutzen. Allerdings stehen auch den älte-ren SAP R/3-Versionen die Webdienste über RFC zur Verfügung.

Web AS ist deutli-cher erweiterter SAP-Kernel

Um ein Missverständnis auszuräumen: Der SAP Web Application Serverist weiterhin der bewährte stabile Kernel von SAP R/3, mit all den Funk-tionalitäten, mit denen das System so erfolgreich wurde. SAP Web AS ist

Kap13.fm Seite 271 Dienstag, 22. April 2003 2:33 14

Page 272: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

272 Webseiten von anderen Programmen abrufen

demnach das SAP Basissystem, erweitert um die Funktionalität einesWebservers, dessen herausragende Bedeutung durch den Namen zumAusdruck gebracht wird.

Die Kommunikation zwischen einem rufenden HTTP-Client und demWen AS erfolgt über Business Server Pages.

13.2.1 SAP Function HTTP_GET

HTTP ist auchohne Web AS via

RFC möglich

Das Abfragen eines Webservice aus einer R/3-Instanz heraus ist auchproblemlos via RFC möglich, was besonders wichtig ist, wenn Sie nocheine ältere Version von SAP R/3 einsetzen. Dazu verwenden wir denFunktionsbaustein HTTP_GET, der über eine RFC-Destination die URI aneinen Webserver sendet und die HTTP-Response entgegennimmt.

RFC-DestinationSAPHTTPA musskorrekt definiert

sein

Die verwendete RFC-Destination verweist dabei auf ein Utility SAPHTTPAbeziehungsweise SAPHTTP, die als RFC-Server definiert sind und als HTTP-Proxy funktionieren. SAPHTTPA ist dabei ein UNIX-Utility, das gewöhnlichauf dem R/3-Applikationsserver läuft, während SAPHTTP die gleicheFunktion erfüllt, aber über SAP GUI auf der Workstation eines interakti-ven Users ausgeführt wird.

Abbildung 13.1 Definition der RFC-Destination SAPHTTPA in SM59 (Web AS)

Kap13.fm Seite 272 Dienstag, 22. April 2003 2:33 14

Page 273: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

Webentwicklung mit SAP R/3 273

Wenn wir sicher sind, dass die RFC-Destination SAPHHTP korrekt defi-niert ist, können wir darüber die URL von ABAP aufrufen. Dies ist mitjedem R/3-Release seit 3.1 möglich. Die URL zum Aufruf eines Ama-zon.com-Webservices kann wie folgt aussehen:

Listing 13.8 URI zum Finden einer ISBN (ASIN) bei Amazon.com

'http://xml.Amazon.com/onca/xml2?t=webservices-20' &'&tag=logosworldcom&dev-t=D2H3YO46KJJ615' &'&AsinS-earch=3528057297&type=lite&f=xml'

Das nachstehende Beispiel führt den Aufruf durch und gibt das Ergebnisals ABAP-Liste aus.

Listing 13.9 Abruf einer URL mit ABAP

DATA: ABSOLUTE_URI(128) type c.

DATA: response_headers(80) occurs 0 with header line.

Abbildung 13.2 Definition der RFC-Destination SAPHTTP mit Aufruf via Frontend (Release 4.6C)

Kap13.fm Seite 273 Dienstag, 22. April 2003 2:33 14

Page 274: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

274 Webseiten von anderen Programmen abrufen

DATA: RESPONSE_ENTITY_BODY(120) occurs 0 with header line.

ABSOLUTE_URI ='http://xml.Amazon.com/onca/xml2?t=webservices-20' &'&tag=logosworldcom&dev-t=D2H3YO46KJJ615' &'&AsinSearch=3528057297&type=lite&f=xml'.

CALL FUNCTION 'HTTP_GET'EXPORTING

ABSOLUTE_URI = ABSOLUTE_URIRFC_DESTINATION = 'SAPHTTPA'PROXY ='192.168.69.64:8080'

* IMPORTING* STATUS_CODE =* STATUS_TEXT =* RESPONSE_ENTITY_BODY_LENGTH =TABLES

* REQUEST_ENTITY_BODY =RESPONSE_ENTITY_BODY =RESPONSE_ENTITY_BODYRESPONSE_HEADERS =RESPONSE_HEADERS

* REQUEST_HEADERS =EXCEPTIONS

CONNECT_FAILED = 1TIMEOUT = 2INTERNAL_ERROR = 3TCPIP_ERROR = 4DATA_ERROR = 5SYSTEM_FAILURE = 6COMMUNICATION_FAILURE = 7OTHERS = 8 .

IF SY-SUBRC <> 0.write: / sy-subrc.

ENDIF.

loop at response_entity_body.write: / response_entity_body.

endloop.

Kap13.fm Seite 274 Dienstag, 22. April 2003 2:33 14

Page 275: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

Webentwicklung mit SAP R/3 275

13.2.2 Proxy-Settings in ABAP

Falls ABAP die HTTP-Aufrufe über einen HTTP-Proxy ausführen muss,kann der Proxy für den ganzen Mandanten in der Tabelle THTTP vordefi-niert werden. Dabei geht SAP davon aus, dass der erste Eintrag in THTTPdie Angaben des Systemproxy darstellen.

Listing 13.10 Standardcoding zum Bestimmen des Proxy für ABAP HTTP-Requests

form set_HTTP_proxy using uri proxy proxy_user proxy_password. data: proxyflag type c. if proxy ne space. exit. endif. select single * from tHTTP. if tHTTP-exitfunc ne space. call function tHTTP-exitfunc exporting absolute_uri = uri importing proxy = proxyflag. if proxyflag eq 'X'. proxy = tHTTP-proxy. proxy_user = tHTTP-puser. proxy_password = tHTTP-ppassword. endif. endif.endform.

Nachstehend sehen Sie zur besseren Orientierung die Struktur der TabelleTHTTP, in der die Proxy-Angaben hinterlegt sind. Meistens hat die Tabellenur einen einzigen Eintrag.

MANDT MANDT CLNT Client

PROXY PROXY CHAR HTTP proxy host name

PUSER PROXY_USER CHAR User name for HTTP proxy

PPASSWORD PROXY_PWD CHAR Password for HTTP proxy

EXITFUNC RS38L_FNAM CHAR Name of function module

Tabelle 13.1 Struktur der Tabelle THTTP

Kap13.fm Seite 275 Dienstag, 22. April 2003 2:33 14

Page 276: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

276 Webseiten von anderen Programmen abrufen

13.2.3 SAP und SOAP: Webservice Choreography Interface (WSCI)

SAP hat sich bisher noch nicht definitiv entschieden, WSDL vollständig zuunterstützen. Statt dessen ist SAP bemüht, zusammen mit BEA und SUNden neuen Interface-Standard WSCI populär zu machen. Zur Zeit derDrucklegung dieses Buches gibt es zwar eine vollständige Spezifikationvon WSCI, aber noch keinerlei Marktakzeptanz, daher gehen wir hiernicht weiter darauf ein.

13.3 SAP Internet Transaction Server

Der Internet Transaction Server (ITS) war SAPs erster ernsthafter Versuch,die R/3-Technologie durch das Internet beziehungsweise Intranet zugäng-lich zu machen. Dabei handelt es sich um einen intelligenten Proxy-Ser-ver, der Daten aus den Dynpros einer Transaktionen extrahiert und sie inein vordefiniertes HTML-Template einmischt.

Keine Program-miersequenzen

Im Grunde genommen funktioniert der ITS genauso wie ASP, JSP oderBSP. Allerdings kann man in den ITS-Seiten keine Programmiersequenzeneinfügen, sondern nur Platzhalter für Variablen setzen, die später vom ITSersetzt werden, bevor die so abgemischte Seite an den rufenden Browserweitergesandt wird.

Um das zu besser verstehen, rufen wir uns noch einmal in Erinnerung,wie R/3 mit dem SAP GUI kommuniziert. Ausgehend von einer bestehen-den R/3-Sitzung, ist der Ablauf etwa wie folgt:

1. Das SAP GUI sendet die Daten eines Dynpros zu R/3

2. R/3 bestimmt das Folgedynpro und sendet

� die Koordinaten der Dynproelemente zu SAP GUI

� die Daten der Dynprofelder

ITS an Stelle desSAP GUI

Der ITS springt nun an Stelle des SAP GUI ein. Er filtert die Felddaten her-aus und mischt sie in eine vordefinierte HTML-Seite ein. Diese HTML-Sei-ten sind im ITS-Repository abgespeichert und enthalten Platzhalter anden Stellen, wo R/3 Dynprodaten einfügen soll. Die so aufbereiteteHTML-Seite wird dann durch den Internetbrowser aufgerufen.

Dieses Prinzip wurde in den Frühzeiten des World Wide Web von vielenWebservern angewandt, zum Beispiel auch von Microsofts Visual Studio.Dieses Abmischen von Daten mit Schablonen genügt heutigen Anforde-rungen bei weitem nicht mehr. Moderne Webserver übernehmen einengroßen Teil der Aufbereitungslogik und lassen sich flexibel programmie-

Kap13.fm Seite 276 Dienstag, 22. April 2003 2:33 14

Page 277: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

SAP Internet Transaction Server 277

ren, also mit IF-Bedingungen und Schleifen (LOOP, WHILE, FOR … NEXT).Somit ist der ITS bei weitem nicht mehr zeitgemäß. SAP hat deshalb dieWeiterentwicklung von ITS schon seit Jahren aufgegeben und ersetzt ihndurch modernere Technologien, namentlich durch Business Server Pagesund durch Web Dynpro.

Dank der RFC-Technologie kann man aber auch problemlos die Websei-tengestaltung ganz aus SAP heraus verlagern. Im einfachsten Fall kannman auf ASP oder JSP zurückgreifen oder aber Messaging-Middleware fürkomplexe Sachverhalte zwischenschalten und die GUI-Funktionalität aufeinen dedizierten Server – zum Beispiel CASABAC – auslagern.

Kap13.fm Seite 277 Dienstag, 22. April 2003 2:33 14

Page 278: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

Kap13.fm Seite 278 Dienstag, 22. April 2003 2:33 14

Page 279: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

Anhang 279

A Anhang

A.1 MIME-Typen

Die Multipurpose Internet Mail Extensions sind Spezifikationen zum Über-tragen von Nachrichten durch das Internet. Die MIME-Spezifikationendes W3C listen in ihren Standards eine ganze Reihe etablierter Dateifor-mate auf und geben an, wie diese über HTTP übertragen werden müssen.Der HTTP-Header enthält normalerweise einen Hinweis auf den MIME-Type des Dokuments, so dass der Empfänger weiß, wie die Datei zu inter-pretieren und gegebenenfalls zu dekodieren ist.

MIME-Typ/Subtyp Typische Extensions Beschreibung

text/html html, htm HTML-Text

text/plain txt, c, c++, pl, cc, h, prn Klartext (Dokumente und Programme)

text/richtext Richtext (obsolet, ersetzt durch text/enriched)

text/x-settext Structure enhanced text

text/enriched Enriched text markup (W3C: RFC 1896)

text/tab-separated-values Komma-getrennte Liste

text/sgml SGML-Dokument (W3C: RFC 1874)

text/x-speech talk Sprache (Voice-over-IP-Solutions)

text/css css Cascading Stylesheet

application/x-latex latex LaTeX-Dokument

application/x-tex tex Tex/LaTeX-Dokument

application/msword doc, rtf MS Word-Dokument

application/sgml SGML-Applikation (RFC 1874)

application/oda oda Office Document Architec-ture

Tabelle A.1 MIME-Typen für textbasierte Dokumente

AnhangA.fm Seite 279 Dienstag, 22. April 2003 2:33 14

Page 280: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

280 Anhang

application/dca-rft IBM Document Content Architecture (IBM)

application/vnd.framema-ker

doc, fm, frm, frame FrameMaker-Dokument (Frame)

MIME-Typ/Subtyp Typische Extensions Beschreibung

image/gif gif Graphics Interchange Format

image/x-xbitmap xbm X-Windows-Bitmap (s/w)

image/x-xpixmap xpm X-Windows-Pixelmap (8 Bit)

image/x-png png Portable Networks Graphic

image/ief ief Image Exchange Format

image/jpeg jpeg, jpg, jpe JPEG

image/tiff tiff, tif TIFF

image/rgb rgb RGB

image/g3fax g3f Group III Fax (RFC 1494)

image/x-pict pict Macintosh PICT Format

image/x-portable-pixmap ppm PPM (UNIX PPM Package)

image/x-portable-graymap pgm PGM (UNIX PPM Package)

image/x-portable-bitmap pbm PBM (UNIX PPM Package)

image/x-portable-anymap pnm PNM (UNIX PPM Package)

image/x-ms-bmp bmp Windows-Bitmap

image/x-cmu-raster ras CMU-Raster

image/x-photo-cd pcd Kodak Photo-CD

image/vnd.dwg dwg AutoCad-Zeichnung

image/vnd.dxf dxf AutoCad-DXF-Datei

Tabelle A.2 MIME-Typen für Images

MIME-Typ/Subtyp Typische Extensions Beschreibung

Tabelle A.1 MIME-Typen für textbasierte Dokumente (Forts.)

AnhangA.fm Seite 280 Dienstag, 22. April 2003 2:33 14

Page 281: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

MIME-Typen 281

MIME-Typ/Subtyp Typische Extensions Beschreibung

audio/basic au, snd »Basic« Audio – 8-bit u-law PCM

audio/x-aiff aif, aiff, aifc Macintosh Audio Format (Apple)

audio/x-wav wav Microsoft Audio

audio/x-mpeg mpa, abs, mpega MPEG Audio

audio/x-mpeg-2 mp2a, mpa2 MPEG-2 Audio

audio/echospeech es Compressed Speech (Echo Speech Corp.)

audio/voxware vox Toolvox Speech Audio (Voxware)

application/x-pn-realaudio ra, ram Realaudio (Progressive Networks)

x-music/x-midi mmid MIDI Music Data

text/x-speech talk Speech Synthesis Data (MVP Solutions)

video/mpeg mpeg, mpq, mpe MPEG Video

video/mpeg-2 mpv2, mp2v MPEG-2 Video

video/quicktime qt, mov Macintosh Quicktime Movie

video/x-msvideo avi Microsoft Video

video/x-sqi-movie movie SGI Movie Format

Tabelle A.3 MIME-Typen für Multimedia

MIME-Typ/Subtyp Beschreibung

message/rfc822 MIME-Message

message/partial Teil einer Nachricht

message/external-body Nachricht mit externen Verweisen

message/news Message mit Usenet-News

message/http HTTP-Message

multipart/mixed mehrere Nachrichtenteile

Tabelle A.4 MIME-Typen für Messaging und E-Mail

AnhangA.fm Seite 281 Dienstag, 22. April 2003 2:33 14

Page 282: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

282 Anhang

A.2 Beispiel für HTTP GET und HTTP POST

Die folgende Sequenz fordert über den Internet Explorer eine XML-Seiteaquarium.xml von einem Internet Information Server an, im darauf fol-genden Listing sehen Sie die Antwort.

Listing 1.1 HTTP GET zur Anforderung des XML-Dokuments aquarium.xml

GET /mySap/XML/farm/aquarium.xml HTTP/1.0Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*Accept-Language: deExtension: Security/Remote-PassphraseUser-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)Host: localhostProxy-Connection: Keep-Alive

Listing 1.2 HTTP-Antwort mit dem XML-Dokument aquarium.xml

HTTP/1.1 200 OKServer: Microsoft-IIS/5.0Cache-Control: no-cacheExpires: Mon, 01 Jul 2002 14:01:46 GMTDate: Mon, 01 Jul 2002 14:01:46 GMT

multipart/alternative mehrere Nachrichtenteile, die alternativ zueinander sind

multipart/related mehrere Nachrichtenteile, die in Bezug zueinander stehen

multipart/digest Nachrichten, Zusammenfassung

multipart/report E-Mail-Status

multipart/parallel mehrere Teile, deren Reihenfolge unbedeutend ist

multipart/appledouble Macintosh File Data

multipart/header-set Kopfnachricht, die als Header anderer Nach-richten dient

multipart/voice-message Container für Voice-Mail

MIME-Typ/Subtyp Beschreibung

Tabelle A.4 MIME-Typen für Messaging und E-Mail (Forts.)

AnhangA.fm Seite 282 Dienstag, 22. April 2003 2:33 14

Page 283: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

HTTP-Statuscodes 283

Content-Type: text/xmlAccept-Ranges: bytesLast-Modified: Sun, 17 Jun 2001 17:43:26 GMTETag: "0747f355f7c01:888"Content-Length: 371

<!-- edited with XML Spy v3.0.7 NT (http://www.xmlspy.com) by Axel Angeli (Logos! Informatik GmbH) --><Schema xmlns="urn:schemas-microsoft-com:xml-data" xmlns:dt="urn:schemas-microsoft-com:datatypes"> <ElementType name="fish" content="textOnly" dt:type="string"/> <ElementType name="Aquarium" content="mixed"> <element type="fish"/> </ElementType></Schema>

A.3 HTTP-Statuscodes

HTTP-Statuscodes sind die Statuscodes, die ein HTTP-Server mit der Ant-wort zurückgibt. Bei einer gelungenen Kommunikation ist es der Code200.

Listing 1.3 HTTP 1.1: Rückmeldung nach erfolgreichem Request

HTTP/1.1 200 OKDate: Fri, 27 Dec 2002 21:59:39 GMTServer: Stronghold/2.4.2 Apache/1.3.6 C2NetEU/2412 (Unix) mod_fastcgi/2.2.10Content-Type: text/xmlConnection: closeProxy-Connection: close

Die folgende Tabelle listet die HTTP-Statuscodes und ihre Bedeutung auf.

Informational 1xx

100 Continue

101 Switching Protocols

Tabelle A.5 HTTP 1.1-Statuscodes

AnhangA.fm Seite 283 Dienstag, 22. April 2003 2:33 14

Page 284: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

284 Anhang

Successful 2xx

200 OK

201 Created

202 Accepted

203 Non-Authoritative Information

204 No Content

205 Reset Content

206 Partial Content

Redirection 3xx

300 Multiple Choices

301 Moved Permanently

302 Found

303 See Other

304 Not Modified

305 Use Proxy

306 (Unused)

307 Temporary Redirect

Client Error 4xx

400 Bad Request

401 Unauthorized

402 Payment Required

403 Forbidden

404 Not Found

405 Method Not Allowed

406 Not Acceptable

407 Proxy Authentication Required

408 Request Timeout

409 Conflict

410 Gone

411 Length Required

Tabelle A.5 HTTP 1.1-Statuscodes (Forts.)

AnhangA.fm Seite 284 Dienstag, 22. April 2003 2:33 14

Page 285: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

HTTP-Statuscodes 285

Die meisten Server lassen sich so konfigurieren, dass abhängig vom Sta-tuscode eine bestimmte Aktion ausgeführt oder zusätzliche Informationmitgesendet wird. Abbildung A.1 zeigt diese Konfigurationsmöglichkeitenfür den Microsoft IIS.

412 Precondition Failed

413 Request Entity Too

414 Request-URI Too Long

415 Unsupported Media Type

416 Requested Range Not

417 Expectation Failed

Server Error 5xx

500 Internal Server Error

501 Not Implemented

502 Bad Gateway

503 Service Unavailable

504 Gateway Timeout

505 HTTP Version Not Supported

Abbildung A.1 Konfiguration der HTTP-Statuscodes im IIS

Tabelle A.5 HTTP 1.1-Statuscodes (Forts.)

AnhangA.fm Seite 285 Dienstag, 22. April 2003 2:33 14

Page 286: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

286 Anhang

A.4 HTTP- und FTP-Kommandos

FTP-Befehl Beschreibung

CD dir Wechselt das aktuelle Verzeichnis auf dem Remote-Computer.

CDUP Wechselt in das Mutterverzeichnis des aktuellen Verzeichnisses auf dem Remote-Computer.

CLOSE Schließt die Verbindung.

DELETE file Löscht die angegeben Datei auf dem Remote-Computer.

DIR [dir] Inhaltsverzeichnis des gewünschten Verzeichnisses auf dem Remote-Computer.

GET remote-file localfile

Hole die Datei remotefile auf dem Remote Computer und spei-chere sie lokal als localfile.

LS [dir] Alias zu DIR.

MKDIR dir Anlegen des angegeben Verzeichnisses auf dem Remote-Com-puter.

PUT localfile remotefile

Sende die lokale Datei und speichere sie auf dem Remote-Com-puter.

PWD Gibt das aktuelle Verzeichnis auf dem Remote-Computer zurück.

QUIT Beendet die aktuelle Session auf dem Remote-Computer.

RECV remote-file localfile

Alias zu GET.

RENAME file1 file2

Umbenennen einer Datei auf dem Remote-Computer.

RMDIR dir Löschen eines ganzen Verzeichnisses auf dem Remote-Compu-ter.

SEND local-file remote-file

Alias zu PUT.

SIZE dir Größe des angegebenen Verzeichnis auf dem Remote-Compu-ter.

Tabelle A.6 FTP-Befehle für das Microsoft Internet Control (© Microsoft)

AnhangA.fm Seite 286 Dienstag, 22. April 2003 2:33 14

Page 287: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

Java-Utilities 287

A.5 Java-Utilities

Das Java Software Development Kit (JDK) kann kostenlos von der Web-seite von SUN Microsystems (www.sun.com) heruntergeladen werden.

Die folgende Tabelle zeigt die Aufruf-Optionen des javac-Utility mit derSyntax

javac <options> <source files>

HTTP-Befehl

Beschreibung

GET uri Holt das als URI spezifizierte Dokument vom Server. Mit GetHeader kann nur der Header der Antwort abgeholt werden, GetChunk gibt den Rest der Antwort zurück.

HEAD uri Abfragen der Header-Information, ohne dass die Seite übertragen wird.

POST uri Sendet Daten an die angegebene URI.

PUT uri Ersetzen einer Seite an der angegeben URI (falls der Client die nötigen Rechte hat).

Tabelle A.7 HTTP-Kommandos für das Microsoft Internet Control (© Microsoft)

Option Bedeutung

-g Erzeuge vollständige Debuginfo

-g:none Erzeuge keine Debuginfo

-g:{lines,vars,source}

Erzeuge ausgewählte Info für das Debugging

-O Optimize; kann Probleme beim Debuggen bereiten und Klassen-datei vergrößern

-nowarn Warnungen unterdrücken

-verbose Während des KOmpilieren Nachrichten ausgeben, was der Compiler gerade tut

-deprecation Hinweise über die Quelle von obsoleten APIs

-classpath <path>

Pfad zu den Class-Dateien

-sourcepath <path>

Pfad zu den Quelldateien

Tabelle A.8 Aufruf-Optionen des javac-Utility

AnhangA.fm Seite 287 Dienstag, 22. April 2003 2:33 14

Page 288: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

288 Anhang

Listing 1.4 Ausführen einer Klasse mit Java-Runtime

D:\JDK> java HelloWorldClass

Welcome to Java hello World

Die folgende Tabelle zeigt die Aufruf-Optionen des java-Utility, verwend-bar in folgender Syntax:

java [-options] class [args...]

(zum Ausführen einer Klasse)

java -jar [-options] jarfile [args...]

(zum Ausführen eines .jar-Files)

-bootclass-path <path>

Bootstrap-Classpfad explizit angeben

-extdirs <dirs>

Pfad zu installierten Erweiterungen (der Java Runtime)

-d <directory> Pfad zur Ausgabe der kompilierten Dateien

-encoding <encoding>

Explizite Angabe des verwendeten Zeichensatzcodes

-target <release>

Class-File für bestimmte VM Version erstellen

Option Bedeutung

-cp -classpath <directories andzip/jar files separated by ;>

Suchpfad für Klassen und Ressourcen

-D<name>=<value> Systemproperty setzen

-verbose[:class|gc|jni] Loginfo interaktiv ausgeben

-version Produktversion zeigen und beenden

-showversion Produktversion zeigen und weitermachen

-? -help Hilfe

-X Hilfe für Erweiterungen

Tabelle A.9 Aufruf-Optionen des java-Utility

Option Bedeutung

Tabelle A.8 Aufruf-Optionen des javac-Utility (Forts.)

AnhangA.fm Seite 288 Dienstag, 22. April 2003 2:33 14

Page 289: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

Java-Utilities 289

Listing 1.5 Ausführung des javap-Analyzer für die Hello World Class

D:\JDK> javap HelloWorldClass

Compiled from HelloWorldClass.javapublic class HelloWorldClass extends java.lang.Object { public HelloWorldClass(); public static void main(java.lang.String[]);}

Die folgende Tabelle zeigt die Aufruf-Optionen des javap-Utility mit fol-gender Syntax:

javap <options> <classes>...

Option Bedeutung

-b Rückwärtskompatibiltät zu javap in JDK 1.1

-c Disassemble Code

-classpath <path> Pfad zu den Class-Dateien

-extdirs <dirs> Pfad zu installierten Erweiterungen (der Java Runtime)

-help Hilfe

-J<flag> Übergebe <flag> direkt an die Runtime

-l Zeilennummer und lokale Variablen ausgeben

-public nur Public Classes anzeigen

-protected Protected Classes anzeigen

-package Package/protected/public Classes und Members anzeigen

-private alle Klassen und Members anzeigen

-s interne Signatur ausgeben

-bootclasspath<pathlist>

Pfad zu den Class-Files, die vom Bootstrap Class Loader geladen werden

-verbose Stack size, Hinweise zu den Methodenparametern und ggf. Grund eines Fehlers ausgeben

Tabelle A.10 Aufruf-Optionen des javap-Utility

AnhangA.fm Seite 289 Dienstag, 22. April 2003 2:33 14

Page 290: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

290 Anhang

A.6 SAPLPD-Befehlszeilenparameter

SAPLPD ist ein TCP/IP-Listener, der auf dem Standard UNIX Line PrintingDevice (LPD) aufsetzt. SAPLPD kann LPD vollständig ersetzen. Zusätzlichkann SAPLPD aber den mit dem SAP-Druckertreiber SAPWIN erzeugtenMetacode abfangen und diesen an einen installierten Windows-Druckerüber die Windows-Printer-API weiterleiten. Dadurch braucht man nureinen Druckertreiber für alle Drucker in SAP und kann ansonsten dieWindowstreiber verwenden. SAPLPD läuft nur unter Windows. Die Syn-tax lautet:

SAPLPD [parameter]

Befehl Beschreibung

-l <File> Protokoliere den Netzwerkverkehr in eine Datei.

Zusätzlich zur Option –l gibt es noch folgende Log-Optionen. Existiert die Datei SAPLPD.DBG, wird der ganze Log in diese Datei geschrieben, genauso wie bei Debugging-Level 9. Vor-sicht! Diese Datei kann sehr schnell sehr groß werden. (Ab Ver-sion 2.53/3.04 wird die Datei automatisch erzeugt, wenn die Option –d angegeben wurde.)

-d <No.> Debug-Level

-t <No.> Trace-Level für Netzwerke

-g <No.> Setze Logging-Level (wie Debug-Level ab 3.00)

-r <No.> Receiver-Port-Nummer, an der SAPLPD hört

-p <Name> Setze Default-Printer

-f <File> Drucke die angegebene Datei

-b Multi-threading-Modus (ab SAPLPD 3.00 und nur auf NT)

-k Spooldateien nicht löschen (Keep all files, ab 2.43)

-c Anzahl Kopien beim Drucken aus Befehlszeile (ab 3.00)

-m <font_name> Erzeuge Metrik (saplpd.met) für den angegeben Font. Diese Option muss die letzte Angabe der Befehlszeile sein und ein Drucker muss angegeben werden.

-w <No.> Setze WinCharSet zur Font-Selektion.

-i ib mit i, b = 0/1 i = kursiv, b = fett.

Tabelle A.11 SAPLPD-Befehlszeilenparameter

AnhangA.fm Seite 290 Dienstag, 22. April 2003 2:33 14

Page 291: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

Setzen des Suchpfads für SAPLOGON.INI 291

A.7 Setzen des Suchpfads für SAPLOGON.INI

Die Position der Datei SAPLOGON.INI mit den Logon- und Systempara-metern kann durch das Setzen einer Umgebungsvariablen SAPLOGON_INI_FILE kontrolliert werden. Dies erfolgt entweder auf Kommandozei-lenebene oder über das Windows-Controlpanel system.cpl:

SET SAPLOGON_INI_FILE = "C:\WINNT\SAPLOGON.INI"

-I Minimiere SAPLPD nach dem Start (ab 4.04)

-s Sucht nach verlorenen Print-Requests (Dateien mit Endung .slp). Falls das passende Datenfile (ohne endung .slp) zu dem Request noch existiert, wird der Job noch einmal gedruckt. (ab 4.30)

Abbildung A.2 Umgebungsvariable SAPLOGON_INI_FILE

Befehl Beschreibung

Tabelle A.11 SAPLPD-Befehlszeilenparameter

AnhangA.fm Seite 291 Dienstag, 22. April 2003 2:33 14

Page 292: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

292 Anhang

A.8

RFC-C

onn

ect

ors

Kla

ssen

nam

eR

egis

try

Dat

eina

me

Bes

chre

ibun

g

SAPL

ogon

Cont

rol

SAP.Lo

gonC

ontr

ol.1

wdt

log.

ocx

Her

stel

len

eine

r V

erbi

ndun

g zu

R/3

SAPF

unct

ions

OCX

SAP.Fu

ncti

ons

wdt

func

s.oc

xB

ehan

dlun

g vo

n R

FC-A

ufru

fen

SAPB

APIC

ontr

olLi

bSA

P.Ba

pi.1

wdo

bapi

.ocx

Beh

andl

ung

von

BA

PI-A

ufru

fen

TRAN

SACT

IONO

CXLi

bSA

P.Tr

ansa

ctio

ns.1

wdt

x.oc

xB

ehan

dlun

g vo

n Tr

ansa

ktio

nsau

fruf

en

Tabe

lle A

.12 S

AP

DC

OM

-Lib

rari

es f

ür W

indo

ws

Libr

ary-

Nam

eD

atei

nam

eK

lass

enna

me

Kla

ssen

-ID

in d

er W

indo

ws

Reg

istr

yO

bjek

tePf

ad

Logo

n C

ontr

olw

dtlo

g.oc

xSA

PLog

onCtrl

{B

2494

4D6-

1501

-11C

F-89

81-0

000E

8A49

FA0}

Con

nect

ion

\sap

gui\

saps

hare

\sy

stem

\wdt

log.

ocx

Set

oLog

onC

ontr

ol =

Cre

ateO

bje

ct (

»SA

P.Lo

gon-

Con

trol

.1«)

SAPL

ogon

Con

trol

Func

tion

Con

tro

lw

dtfu

ncs.

ocx

SAPF

unct

ions

OCX

{5B

076C

03-2

F26-

11C

F-9A

E5-0

8000

96E1

9F4}

Expo

rts

\sap

gui\

saps

hare

\sy

stem

\wdt

func

s.oc

x

Set

oFun

ctio

ns =

Cre

ateO

bjec

t (»

SAP.

Func

-ti

ons«

)Fu

ncti

on

Tabe

lle A

.13 I

nhal

te d

er D

CO

M-L

ibra

ries

AnhangA.fm Seite 292 Dienstag, 22. April 2003 2:33 14

Page 293: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

RFC-Connectors 293

Impo

rts

Para

met

er

SAPF

unct

ions

Stru

ctur

e

Tabl

e Fa

ctor

yw

dtao

cx.o

cxSA

PTab

leFact

ory-

Ctrl

{8

7D28

50E-

6B43

-101

C-9

2CE-

1000

5AF5

DF4

D}

SAPT

able

Fact

ory

\sap

gui\

saps

hare

\sy

stem

\wdt

aocx

.ocx

Set

oTab

leFa

ctor

y =

Cre

ateO

bjec

t (»

SAP.T

able

-Fa

ctor

y.1«)

Mat

rix

Rfc

Tabl

ePar

amet

er

Stru

ctur

e

Row

Tabl

e

Row

s

Col

umns

Libr

ary-

Nam

eD

atei

nam

eK

lass

enna

me

Kla

ssen

-ID

in d

er W

indo

ws

Reg

istr

yO

bjek

tePf

ad

Tabe

lle A

.13 I

nhal

te d

er D

CO

M-L

ibra

ries

(Fo

rts.

)

AnhangA.fm Seite 293 Dienstag, 22. April 2003 2:33 14

Page 294: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

294 Anhang

Col

umn

Vie

ws

Tabl

es

Ran

ges

Ran

ge

Fiel

ds

Fiel

d

Tran

sact

ion

Con

trol

wdt

x.oc

xTR

ANSA

CTIONO

CX-

Lib

{87D

2851

1-6B

43-1

01C

-92C

E-10

005A

F5D

F4D

}Tr

ansa

ctio

nOC

X\s

apgu

i\sa

psha

re\

syst

em\w

dtx.

ocx

Set

oTra

nsac

tion

s =

Cre

ateO

bjec

t(SA

P.Tra

nsac

-ti

ons.1

)TR

AN

SAC

TIO

N

SCR

EEN

S

SCR

EEN

FIEL

DS

Libr

ary-

Nam

eD

atei

nam

eK

lass

enna

me

Kla

ssen

-ID

in d

er W

indo

ws

Reg

istr

yO

bjek

tePf

ad

Tabe

lle A

.13 I

nhal

te d

er D

CO

M-L

ibra

ries

(Fo

rts.

)

AnhangA.fm Seite 294 Dienstag, 22. April 2003 2:33 14

Page 295: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

RFC-Connectors 295

Im F

olge

nden

seh

en S

ie e

ine

List

e de

r K

lass

en d

es J

ava

Con

nect

ors.

FIEL

D

BA

PI C

ontr

olw

doba

pi.o

cxSA

PBAP

IContr

ol-

Lib

{2E9

A46

9B-F

0EE-

11C

F-A

C55

-080

009D

213D

2}SA

PBA

PIC

ontr

ol\s

apgu

i\sa

psha

re\

syst

em\w

doba

pi.o

cx

Set

oBA

PI =

Cre

ateO

bjec

t(SA

P.B

API

.1)

SAPB

usin

ess-

Obj

ect

Libr

ary-

Nam

eD

atei

nam

eK

lass

enna

me

Kla

ssen

-ID

in d

er W

indo

ws

Reg

istr

yO

bjek

tePf

ad

Tabe

lle A

.13 I

nhal

te d

er D

CO

M-L

ibra

ries

(Fo

rts.

)

jCO

jCO.

Abap

Exce

ptio

n jC

O.At

trib

utes

jCO.

Basi

cRep

osit

ory

jCO.

Clie

nt

jCO.

Conn

ecti

on

jCO.

Conv

ersi

onEx

cept

ion

jCO.

Exce

ptio

n jC

O.Fi

eld

jCO.

Fiel

dIte

rato

r jCO.

Func

tion

jC

O.Fu

ncti

onTe

mpla

te

jCO.

Meta

Data

jCO.

Para

mete

rLis

t jC

O.Po

ol

jCO.

Pool

Chan

gedL

iste

ner

jCO.

Pool

Mana

ger

jCO.

Reco

rd

jCO.

Repo

sito

ry

jCO.

Serv

er

jCO.

Serv

erEr

rorL

iste

ner

Tabe

lle A

.14 A

uflis

tung

der

Kla

ssen

des

Jav

a C

onn

ecto

rs

AnhangA.fm Seite 295 Dienstag, 22. April 2003 2:33 14

Page 296: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

296 Anhang

A.9

Bei

spie

le a

us

dem

SA

P I

nte

rfac

e R

eposi

tory

jCO.

Serv

erEx

cept

ionL

iste

ner

jCO.

Serv

erSt

ateC

hang

edLi

sten

er

jCO.

Serv

erTh

read

jCO.

Stru

ctur

e jCO.

Tabl

e jC

O.Th

roug

hput

jCO.

Trac

eLis

tene

r

Tabe

lle A

.14 A

uflis

tung

der

Kla

ssen

des

Jav

a C

onn

ecto

rs (

Fort

s.)

Can

onic

al U

RLs

Bed

eutu

ng

http

://i

fr.sa

p.c

om/c

atal

og/q

uery

.asp

?nam

espa

ce=u

rn:s

ap-c

om:

ifr:L

O:4

6C&

type

=bob

j&na

me=

Sale

sOrd

erG

rund

ansi

cht

zu B

usin

ess-

Obj

ekt Sa

lesO

rder

http

://i

fr.sa

p.c

om/c

atal

og/q

uery

.asp

?nam

espa

ce=u

rn:s

ap-c

om:

ifr:L

O:4

6C&

type

=bob

j&na

me=

Sale

sOrd

er&

key=

Sale

sDoc

umen

tD

okum

enta

tion

des

Sch

lüss

elfe

lds

(Pro

per

ty)

Sale

sDoc

umen

t zu

dem

B

usin

ess-

Obj

ekt Sa

lesO

rder

http

://i

fr.sa

p.c

om/c

atal

og/q

uery

.asp

?nam

espa

ce=u

rn:s

ap-c

om:

ifr:L

O:4

6C&

type

=bap

i&na

me=

Sale

sOrd

er.G

etLi

stG

rund

ansi

cht

zu B

API

Get

List

des

Bus

ines

s-O

bjek

ts Sal

esOr

der

http

://i

fr.sa

p.c

om/c

atal

og/q

uery

.asp

?nam

espa

ce=u

rn:s

ap-c

om:

ifr:L

O:4

6C&

type

=bap

i&na

me=

Sale

sOrd

er.G

etLi

st&

para

m=C

usto

mer

Num

ber

Info

rmat

ion

zu P

aram

eter

Cus

tome

rNum

ber

des

BA

PI Get

List

des

B

usin

ess-

Obj

ekts

Sal

esOrde

r

http

://i

fr.sa

p.c

om/c

atal

og/q

uery

.asp

?nam

espa

ce=u

rn:s

ap-c

om:

ifr:L

O:4

6C&

type

=bap

i&na

me=

Sale

sOrd

er.G

etLi

st&

xml=

sche

ma

Abf

rage

des

XM

L Sc

hem

a zu

BA

PI Get

List

in d

er n

eues

ten

XM

L-V

er-

sio

n (m

anch

e Sy

stem

ver

steh

en n

ur b

esti

mm

te X

ML-

Dia

lekt

e, d

ie

eine

r äl

tere

n X

ML

Sche

ma-

Spez

ifika

tio

n de

s W

3C e

ntsp

rech

en)

Tabe

lle A

.15 B

eisp

iele

für

Can

oni

cal U

RLs

AnhangA.fm Seite 296 Dienstag, 22. April 2003 2:33 14

Page 297: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

Beispiele aus dem SAP Interface Repository 297

http

://i

fr.sa

p.c

om/c

atal

og/q

uery

.asp

?nam

espa

ce=u

rn:s

ap-c

om:

ifr:L

O:4

6C&

type

=bap

i&na

me=

Sale

sOrd

er.G

etLi

st&

xml=

sche

ma.

w3c

-200

0-04

&xd

ir=r

espo

nse

Abf

rage

des

XM

L Sc

hem

a zu

BA

PI Get

List

der

Ver

sion

von

Apr

il 20

00 (

w3c

-200

0-04

)

http

://i

fr.sa

p.c

om/c

atal

og/q

uery

.asp

?nam

espa

ce=u

rn:s

ap-c

om:

ifr:L

O:4

6C&

type

=rfc

&na

me=

QIR

F_G

ET_A

LL_D

ATA

_VA

LUES

2G

rund

ansi

cht

eine

s R

emot

e Fu

ncti

on C

all

http

://i

fr.sa

p.c

om/c

atal

og/q

uery

.asp

?nam

espa

ce=u

rn:s

ap-c

om:

ifr:L

O:4

6C&

type

=rfc

&na

me=

QIR

F_G

ET_A

LL_D

ATA

_VA

LUES

2&pa

ram

=T_Q

AIM

R-

TAB

Para

met

er-D

oku

men

tati

on e

ines

Rem

ote

Func

tion

Cal

l

http

://i

fr.sa

p.c

om/c

atal

og/q

uery

.asp

?nam

espa

ce=u

rn:s

ap-c

om:

ifr:L

O:4

6C&

type

=rfc

&na

me=

QIR

F_G

ET_A

LL_D

ATA

_VA

LUES

2&xm

l=sc

hem

aA

bfra

ge d

es X

ML

Sche

ma

eine

s R

emo

te F

unct

ion

Cal

l in

der

neue

sten

V

ersi

on

http

://i

fr.sa

p.c

om/c

atal

og/q

uery

.asp

?nam

espa

ce=u

rn:s

ap-c

om:

ifr:B

ASI

S:46

C&

type

=im

sg&

nam

e=A

CC

ON

FG

rund

ansi

cht

für

Mes

sage

-Typ

AC

CO

NF

http

://i

fr.sa

p.c

om/c

atal

og/q

uery

.asp

?nam

espa

ce=u

rn:s

ap-c

om:

ifr:B

ASI

S:46

C&

type

=ido

c&na

me=

AC

CO

NF0

1G

rund

ansi

cht

für

IDoc

-Typ

AC

CO

NF0

1

http

://i

fr.sa

p.c

om/c

atal

og/q

uery

.asp

?nam

espa

ce=u

rn:s

ap-c

om:

ifr:B

ASI

S:46

C&

type

=ido

c&na

me=

AC

CO

NF0

1&xm

l=sc

hem

aX

ML

Sche

ma

für

IDoc

-Typ

AC

CO

NF0

1 in

der

neu

este

n X

ML-

Ver

sion

http

://i

fr.sa

p.c

om/c

atal

og/q

uery

.asp

?nam

espa

ce=u

rn:s

ap-c

om:

ifr:B

ASI

S:46

C&

type

=ise

g&na

me=

E1A

CC

ON

Dok

umen

tati

on f

ür S

egm

ent

E1A

CC

ON

Can

onic

al U

RLs

Bed

eutu

ng

Tabe

lle A

.15 B

eisp

iele

für

Can

oni

cal U

RLs

(Fo

rts.

)

AnhangA.fm Seite 297 Dienstag, 22. April 2003 2:33 14

Page 298: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

298 Anhang

http

://i

fr.sa

p.c

om/c

atal

og/q

uery

.asp

?nam

espa

ce=u

rn:s

ap-c

om:

ifr:L

O:4

6C&

lang

uage

=EN

&ty

pe=

docu

&na

me=

GL.

sale

s_d

ocum

ent.

ESA

P-Sy

stem

doku

men

tati

on d

es O

bjek

tes sa

les_

docu

ment

http

://i

fr.sa

p.c

om/c

atal

og/q

uery

.asp

?nam

espa

ce=u

rn:s

ap-c

om:

ifr:L

O:4

6C&

type

=are

a&na

me=

HLA

0006

433

AK

H K

note

n H

LA00

0643

3, z

eigt

alle

Obj

ekte

und

Unt

erkn

oten

des

O

bjek

ts

http

://i

fr.sa

p.c

om/c

atal

og/q

uery

.asp

?nam

espa

ce=u

rn:s

ap-c

om:

ifr&

type

=bob

j&na

me=

Add

ress

Con

tPar

tLi

ste

alle

r B

usin

ess-

Obj

ekte

, die

das

Obj

ekt Ad

dres

sCon

tPar

t en

t-ha

lten

Can

onic

al U

RLs

Bed

eutu

ng

Tabe

lle A

.15 B

eisp

iele

für

Can

oni

cal U

RLs

(Fo

rts.

)

AnhangA.fm Seite 298 Dienstag, 22. April 2003 2:33 14

Page 299: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

Synopsis der Programmiersprachen ABAP, VB und Java 299

BSy

nop

sis

der

Pro

gra

mm

iers

pra

chen

AB

AP,

VB

und

Jav

a

Die

folg

ende

n Ta

belle

n si

nd e

ine

verg

leic

hend

e Ü

bers

icht

aus

gew

ählt

er S

prac

hele

men

te d

er d

rei w

icht

igen

Spr

ache

n A

BA

P, Ja

va u

ndV

isua

l Bas

ic.

Sinn

ist

es,

dass

Sie

ras

ch d

en e

ntsp

rech

ende

n B

efeh

l in

der

jew

eils

and

eren

Pro

gram

mie

rspr

ache

fin

den

könn

en u

ndei

nen

Eind

ruck

bek

omm

en, w

ie d

iese

r ve

rwen

det

wer

den

kann

.

ABA

PB

eisp

iel

Vis

ual B

asic

Bei

spie

lJa

vaB

eisp

iel

Def

init

ion

von

Kon

stan

ten

CONS

TANT

SCO

NST:

cTr

ue TYP

E C(

1) V

ALUE

'1'

.Co

nst constnam

e =

expression

Cons

t cT

rue

= Tr

ueCo

nst constnam

e = expression

Cons

t cT

rue

= Tr

ue

Erze

ugen

ein

er

Inst

anz

eine

s ex

ter-

nen

Obj

ekts

CREA

TE O

BJEC

T O

bj-K

lass

eCR

EATE

OBJ

ECT

Dat

enst

rukt

uren

DATA

DATA

: do

cnum

TYP

E C(

10).

DATA

: do

cnum

LIK

E VB

AK-V

BELN

.

DIM

DIM

docn

um AS

stri

ngDI

MDI

M do

cnum

AS

stri

ng

Poin

ter

FIEL

D-SY

MBOL

SFI

ELD-

SYMB

OLS:

<p

tr>.

DIM

(Hin

wei

s: a

lle

Var

iabl

en in

VB

si

nd a

utom

atis

ch

poin

ter

( =va

ri-

ant)

typ

es)

DIM

ptr

DIM

DIM

ptr

Tabe

lle B

.1 D

ekla

rati

onen

AnhangB.fm Seite 299 Dienstag, 22. April 2003 2:33 14

Page 300: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

300 Synopsis der Programmiersprachen ABAP, VB und Java

Inkl

udie

ren

von

Stru

ktur

en o

der

Ty

pen

INCL

UDE includ

efile-

name

INCL

UDE

zzmy

in-

clud

e.ni

cht

unte

rstü

tzt

Ben

utze

rein

gabe

n,

inte

rakt

ivPA

RAME

TERS

PARA

METE

RS:

doc-

num

LIKE

vba

k-do

cnum

DE

FAUL

T '1

23'.

INPUT

INPUT

Dat

enb

ankt

abel

-le

n de

klar

iere

nTA

BLES

TABL

ES:

VBAK

, LI

KP.

Wir

d au

tom

atis

ch e

rzeu

gt, w

enn

eine

O

DB

C o

der

SQL-

Sour

ce g

eöff

net

wir

dW

ird

auto

mat

isch

erz

eugt

, wen

n ei

ne

OD

BC

ode

r SQ

L-So

urce

geö

ffne

t w

ird

Tabe

lle B

.1 D

ekla

rati

onen

(Fo

rts.

)

ABA

PB

eisp

iel

Vis

ual B

asic

Bei

spie

lJa

vaB

eisp

iel

Funk

tion

au

fruf

enCA

LL

FUNC

-TI

ON

func

name

CALL

FUN

CTION

'RFC

_PIN

G'CALL

fun

cnam

e

Fallu

nter

-sc

heid

ung

CASE

...

WH

EN ...

EN

DCAS

E

CASE

myV

ar.

WHE

N '1

'. FOR

-MA

T CO

LOR

COL_

NEGA

TIVE

.

Sele

ct C

ase

Test

expr

es-

sion

[Cas

e Expr

essi

on-

list

e-n

Sele

ct C

ase

MyVa

r C

ase

"red"

docu

-me

nt.b

gColor

= "

red"

Cas

e "g

reen

" do

cu-

ment

.bgC

olor

= "

gree

n"

Sele

ct C

ase

Test

expr

essi

on[C

ase

Expr

essi

onli

st-n

Sele

ct C

ase

MyVa

r C

ase

"red"

docu

-me

nt.b

gColor

= "

red"

Cas

e "g

reen

" do

cu-

ment

.bgC

olor

= "

gree

n"

Tabe

lle B

.2 P

rogr

amm

abla

uf

AnhangB.fm Seite 300 Dienstag, 22. April 2003 2:33 14

Page 301: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

Synopsis der Programmiersprachen ABAP, VB und Java 301

WHEN

'2'

. FOR-

MAT

COLO

R COL_

POSI

TIVE

. W

HEN

OTHE

RS.

FORM

AT R

ESET.

ENDC

ASE.

[Sta

temen

ts-n

]] .

. .

[Cas

e Else

Exp

res-

sion

list

e-n

[els

e-Sta

teme

nts-

n]]

End

Sele

ct

Cas

e "b

lue"

doc

u-me

nt.b

gColor

= "

blue

" Cas

e Else

Msg

Box "p

ick

anot

her

colo

r"En

d Se

lect

[sta

teme

nts-

n]]

. .

.[C

ase

Else

Expr

essi

onli

st-n

[els

esta

teme

nts-

n]]

End

Sele

ct

Cas

e "b

lue"

doc

u-me

nt.b

gColor

= "

blue

" Cas

e El

se MsgBo

x "p

ick

anot

her

colo

r"En

d Se

lect

Lauf

zeit

feh-

ler

abfa

ngen

CATC

HON E

RROR

ON E

RROR

Ab

brec

hen

von

Schl

ei-

fen

und

Blö

-ck

en

CHEC

KIF B

edin

gung

THEN

EXI

T FOR¦

SUB¦

FUNC

-TION

IF B

edin

gung

THEN

EXI

T FOR¦

SUB¦

FUNC

TION

Schl

eife

mit

chst

em

Dur

chla

uf

fort

setz

en

CONT

INUE

Tabe

lle B

.2 P

rogr

amm

abla

uf (

Fort

s.)

AnhangB.fm Seite 301 Dienstag, 22. April 2003 2:33 14

Page 302: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

302 Synopsis der Programmiersprachen ABAP, VB und Java

Schl

eife

nDO

...

EN

DDO

DO 1

0 TI

MES.

[St

atem

ents]

ENDD

O.

For co

unte

r =

star

t To

end

[Ste

p st

ep]

[st

atem

ents

] [Ex

it F

or]

[st

atem

ents

]Next

FOR

ix =

1 T

O 10

[

stat

ements

]NE

XT i

x

For

coun

ter

= star

t To

end

[Ste

p st

ep]

[St

atem

ents

] [Ex

it F

or]

[St

atem

ents

]Next

FOR

ix =

1 T

O 10

[

Stat

ements

]NE

XT i

x

Ab

brec

hen

von

Schl

ei-

fen

und

Blö

-ck

en

EXIT

IF .

..

ELSE

...

EN

DIF

Cond

iti-

onal

pr

oces

-si

ng

IF x

date

> "20

0012

31".

WRI

TE:

/ xDat

e. E

LSEI

F xd

ate

= "2

0001

231"

. W

RITE

: /

"Hap

py M

ille

nium

". E

LSE.

WRI

TE:

/ "Too

lat

e!".

ENDI

F.

If x

date

> "

2000

1231

" Th

en D

ebug

.WRITE

xDa

te E

lsei

f xdat

e =

"200

0123

1" D

ebug

.WRITE

"Ha

ppy

Mill

eniu

m" E

lse

Deb

ug.W

RITE

"To

o la

te!"

End

If

If x

date

> "

2000

1231

" Th

en D

ebug

.WRITE

xDa

te E

lsei

f xdat

e =

"200

0123

1" D

ebug

.WRITE

"Ha

ppy

Mill

eniu

m" E

lse

Deb

ug.W

RITE

"To

o la

te!"

End

If

Prog

ram

m

been

den

LEAV

ELE

AVE

END

Tabe

lle B

.2 P

rogr

amm

abla

uf (

Fort

s.)

AnhangB.fm Seite 302 Dienstag, 22. April 2003 2:33 14

Page 303: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

Synopsis der Programmiersprachen ABAP, VB und Java 303

Inte

rne

Tabe

llen

(Col

lect

ion)

ab

arbe

iten

LOOP

...

EN

DLOO

PFor

Each

ele

-ment

In

reco

rdse

t [st

atem

ents

] [Ex

it F

or]

[st

atem

ents

]Next

Dim

xDat

a As

Rec

ords

etDi

m re

c As O

bjec

tFO

R Ea

ch rec

IN

xdat

a [

Stat

ements

]NE

XT r

ec

For

Each

ele

-ment

In

reco

rd-

set

[St

atem

ents

] [Ex

it F

or]

[St

atem

ents

]Next

Dim

xDat

a As

Rec

ords

etDi

m re

c As O

bjec

tFO

R Ea

ch rec

IN

xdat

a [

Stat

ements

]NE

XT r

ec

Def

init

ion

eine

r Su

b-ro

utin

e

FORM

Su

brou

-ti

nen-

name

TAB

LES

...

USI

NG

...

CHA

N-GI

NG …

.[S

tate

-me

nts]

ENDF

ORM.

FORM

ate

st

TAB

LES

itab

USI

NG n

ame

gend

er.

CHA

NGIN

G xre-

sult

.[S

tate

ment

s]EN

DFOR

M.

Sub

subr

outi

-nena

me(p

aram

1, para

m2,.

...)

[st

atem

ents

]End

Sub

Sub

aTes

t(na

me,

gend

er)

[St

atem

ents

]En

d Su

b

Sub

aTes

t(na

me,

gend

er)

[St

atem

ents

]En

d Su

b

Tabe

lle B

.2 P

rogr

amm

abla

uf (

Fort

s.)

AnhangB.fm Seite 303 Dienstag, 22. April 2003 2:33 14

Page 304: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

304 Synopsis der Programmiersprachen ABAP, VB und Java

Auf

ruf e

iner

Su

brou

tine

PERF

ORM

Subr

ou-

tine

n-na

me T

ABLE

S ..

. U

SING

..

. C

HAN-

GING

… .

PERF

ORM

atest

TAB

LES

itab

USI

NG "

Micky"

"F

". C

HANG

ING

resu

lt.

Call

Sub

rou-

tine

nnam

eCa

ll a

test("

Mick

y",

"mal

e")

Dim

xDat

a As

Rec

ords

etDi

m re

sult

ates

t(xD

ata,

"M

icky

","M",

res

ult)

Schl

eife

nWH

ILE

...

END-

WHIL

E.

WHIL

E va

l > 0.

….

val

= v

al – 1

.EN

DWHI

LE.

Whil

e Be

din-

gung

[Sta

teme

nts]

Wend

.

DIM

xDat

a AS

Rec

ordS

etxD

ata.

Open "

Sele

ct *

fr

om O

rders

Wher

e Or

de-

rId

= 12

", c

onne

ctio

nWh

ile

Not xD

ata.

EOF

[sta

teme

nts]

xDa

ta.M

oveN

ext

Wend

Whil

e Be

ding

ung

[Sta

teme

nts]

Wend

DIM

xDat

a AS

Rec

ordS

etxD

ata.

Open "

Sele

ct *

fr

om O

rders

Wher

e Or

de-

rId

= 12

", c

onne

ctio

nWh

ile

Not xD

ata.

EOF

[Sta

teme

nts]

xDa

ta.M

oveN

ext

S

Tabe

lle B

.2 P

rogr

amm

abla

uf (

Fort

s.)

AnhangB.fm Seite 304 Dienstag, 22. April 2003 2:33 14

Page 305: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

Synopsis der Programmiersprachen ABAP, VB und Java 305

ABA

PB

eisp

iel

Vis

ual B

asic

Bei

spie

lJa

vaB

eisp

iel

Equa

l=,

EQ

NO

T Eq

ual

<>, ><

, NE

Grö

ßer

als

>, GT

Kle

iner

als

<, LT

Grö

ßer a

ls o

der

gl

eich

>=, =>

, GE

Kle

iner

als

od

er g

leic

h<=

, =<

, LE

Con

tain

s on

ly

(Str

ing

enth

ält

nur

die

Zei-

chen

)

CO'Hel

lo W

orld

' CN

'Hel

owrd

'

Con

tain

s no

t on

ly (

Stri

ng

enth

ält

auch

an

dere

als

die

an

gege

bene

n Ze

iche

n)

CN'Hel

lo W

orld

' CN

'Ear

th'

Tabe

lle B

.3 O

pera

tore

n

AnhangB.fm Seite 305 Dienstag, 22. April 2003 2:33 14

Page 306: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

306 Synopsis der Programmiersprachen ABAP, VB und Java

Con

tain

s an

y (S

trin

g en

thäl

t ei

nes

der

Zei-

chen

)

CA'Hel

lo W

orld

' CA

'HW'

Con

tain

s no

t an

y (S

trin

g en

t-hä

lt k

eine

s de

r Ze

iche

n)

NA'Hel

lo W

orld

' NA

'AB'

Con

tain

s st

ring

(S

trin

g en

thäl

t di

e Ze

chen

-fo

lge)

CS

'Hel

lo W

orld

' CS

'Wor

ld'

Con

tain

s N

OT

stri

ng (

Stri

ng

enth

ält

nich

t di

e Ze

iche

n-fo

lge)

NS'Hel

lo W

orld

' NS

'Wor

ld'

Con

tain

s pa

t-te

rn (

Stri

ng

enth

ält

die

Folg

e, e

in-

schl

ießl

ich

Wild

card

)

CP'Hel

lo W

orld

' CP

'W*'

Tabe

lle B

.3 O

pera

tore

n (F

orts

.)

AnhangB.fm Seite 306 Dienstag, 22. April 2003 2:33 14

Page 307: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

Synopsis der Programmiersprachen ABAP, VB und Java 307

Wer

t is

t zw

i-sc

hen

zwei

W

erte

n

BET-

WEEN..

.AND

IF n

umbe

r BE

TWEE

N 1 AN

D 10

THE

N ..

.

IS I

NIT

IAL

(Wer

t is

t in

itia

l)IS

INI

TIAL

IS

NOTHI

NG (

for

obje

cts)

IS N

ULL

(for

var

iabl

es)

AB

AP:

EInt

rag

an d

ie

inte

rne

Tabe

lle

anfü

gen;

VB

, Ein

trag

in

den

Rec

ord

set

einf

ügen

APPEND

ita

b.re

cord-

set.

Add

DIM

xDat

a AS

Rec

ord-

Set

xDat

a.Ad

d

reco

rdse

t.Ad

dDI

M xD

ata

AS R

ecor

dSet

xDat

a.Ad

d

Sort

iere

n ei

ner

inte

rnen

Ta

belle

SORT ita

b BY

fe

ld1

feld

2 ..

...

reco

rd-

set.

SOR

T

Poin

ter

zuw

ei-

sen

ASSIGN

ASSI

GN m

yvar

TO

<poi

nter

>.SE

TSE

T

Tabe

lle B

.3 O

pera

tore

n (F

orts

.)

AnhangB.fm Seite 307 Dienstag, 22. April 2003 2:33 14

Page 308: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

AnhangB.fm Seite 308 Dienstag, 22. April 2003 2:33 14

Page 309: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

Index 309

Index

Symbols'XSL,match=/' 223.NET, Microsoft.NET- Framework 1492-Tier, Unterlegenheit zu 3-Tier 313-Tier, Überlegenheit gegenüber 2-Tier

31

AABAP, ABAP IV Runtime Engine 150ABAP Personality 244Acknowledgement 197Active Server Pages, ASP 240Advanced Planner and Optimizer, APO

22All-in-one-Software 23Amazon.com, Pionier der Webservices

180Apache Jakarta Tomcat 153API, Application Programming

Interface 180APO, Advanced Planner and Optimizer

22Application Programming Interface,

API 180ASIN, Amazon Standard Item Number

181ASP

Active Server Pages 240response.write 246Shopping Cart mit ASP, IISCART 247

Auslieferung in SD 100Auslieferungsaufträge, engl. Delivery

orderAufträge die automatisch eine Aus-

lieferung erzeugen 100

BBAPI

BAPI_SALESORDER_CHANGE 101BAPI_SALESORDER_CREATEFROMDAT2 101BAPI_SALESORDER_GETLIST 100BAPI_TRANSACTION_COMMIT 99BAPI_TRANSACTION_ROLLBACK 99

Best-of-Breed 23BIZTALK™ ( Microsoft BIZTALK 129Broadcast and Subscribe, Message

handling 126BSP

Business Server Pages 244Online Text Repository 259

Business Information Warehouse, BW 22

Business Object Builder 97Transaktion SWO1 97

Business Object Repository (BOR) 97Business Server Pages und Web Dynpro

123Business Server Pages, BSP 244Business View 97Business-Objekt 95Business-Objekte 95BW, Business Information Warehouse

22

CCanonical URL, XML-Suche für

Amazon.com 188Canonical URLs 111CASABAC, Entwicklungs und Runtime-

Umgebung für Thin Browser Clients 117

Cascading Style Sheets, CSS 115Cerberus 29CGI, Common Gateway Interface 196CGI, Common Gateway Interface,

description 240Challenge Authenticate 29Chaostheorie 44Class R3Credentials 67CLR, Common Language Runtime 149,

153Collaboration 19Common Gateway Interface ( CGI 240Common Gateway Interface, CGI 196Common Language Runtime, CLR 153

Verwendung im Microsoft.NET- Framework 149

Connection pooling 127

316SIX.fm Seite 309 Dienstag, 22. April 2003 2:33 14

Page 310: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

Connection-Pooling 58Content Driven Delivery 126CRM, Customer Relationship Mana-

gement 22Customer Relationship Management,

CRM 22

DDatenkapselung, Datenverkapselung

165Demon, Hintergrundprozess 130Destructor 170Document Object Model, DOM 213Document Type Definition, DTD 211doGet(), JSP-Standardmethode 244DOM

Beispiele 214Document Object Model 213WSDL 232

DOM-Parser 216doPost(), JSP-Standardmethode 244dotNET 149doXxx(), andere JSP-Standardme-

thoden 244DTD 209

Document Type Definition 211

EEAI, Enterprise Application Integration

17Eigenschaft 163EJB, Enterprise Java Beans 123Encapsulation 165Enterprise Application Integration, EAI

17Enterprise Java Beans, EJB 123Enterprise-Server 18Event

Event feuern 138Event verbrennen, ignorieren 138fire an Event 138

Event, der (das) Event, Ereignis 138eXtended Stylesheet Language, XSL

220Extreme Programming, extreme.logos-

world.com 115

FFaktura SD, Anlegen mit BAPI 100Fire and Subscribe, Message handling

126Firewall 27Function RFC_READ_TABLE, call from

VB 56

GGateway 73Geschäftsprozessmodellierung 95Gewicht der Verbindung, weight of

client 31Guaranteed Delivery, Sicherstellung der

Zustellung einer Nachricht 126GUID, Global Universal Identifier 163

Hheavy client 31Holistic Development, holistic.logos-

world.com 115HTML, Generierung aus ASP 246HTTP GET 198

für Amazon.com 188HTTP POST 198

IIBM

CrossWorlds™ 128Lotus Notes™ 128MQ Series™ ( WebSphere/MQ™ 128WebSphere/Integrator™ 128WebSphere/MQ 128

IFR, Canonical URLs 111IISCART, ASP shopping cart 247Instanz 163Interface 162Interface Repository IFR 111IONA, XMLBUS™ 129IP, Listener 193ISDN, Internal Standard Book Number

181

316SIX.fm Seite 310 Dienstag, 22. April 2003 2:33 14

Page 311: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

Index 311

JJava

HelloWorld 167package 166Servlets 243Virtual Machine, JVM 150

Java Applets 150Java Connector, JCo 70

einfaches Beispiel 70Java Personality 244Java RFC Library, jRFC 70Java Server Pages, JSP 241Java Software Development Kit, JDK

287Java Virtual Machine, JVM 150Java™ 150JCo ( Java Connector 70JDK, Java Software Development Kit,

ww.sun.com 287jDOM, Java XML-DOM Parser 217JNI

Aufruf der RFC-Bibliothek 250Java Native Interface 250

jRFC, obsolete Java RFC-Bibliothek 70JSP

doGet() 244doPost() 244Java Server Pages 241

JVM, Java Virtual Machine 150

LLebenszeit 163Lieferung SD, ab 4.5 Auslieferung 100Links

ww.sun.com 287www.arasoft.de 70www.iiscart.com, ASP shopping cart 247

Listener, IP-Protokoll 193Load balancing 127, 131load balancing 131Logical Unit of Work, LUW 52Logon zu R/3, mit Visual Basic 66Lotus Notes™ 128LUW, Logical Unit of Work 52

MMercator™ 129Messages

Broadcast and Subscribe 126Directory service 125Fire and Subscribe 126Mail-out 126

Methode 163Microsoft

BIZTALK™ 129Message-Queue 129MSMQ 129

Microsoft Transaction Server, MTS 153Microsoft.NET

CLR, Common Language Runtime 149Virtual Machine 149Zukunftsaussichten 36

Microsoft.NET- Framework 149Middleware 18

IBM CrossWorlds™ 128IBM Lotus Notes™ 128IBM WebSphere™/MQ 128IONA 129Mercator™ 129Microsoft BIZTALK™ 129Microsoft MSMQ 129Tibco™ 130

Model View Controller, MVC (Web Dynpro 123

Modellsichten 95Anwendungsfall 96Business View 96Component View 96Logische Sicht 96Technische Sicht 96Use Case 96

MSMQ (Microsoft Message-Queue 129MSMQ Trigger 131MTS, Microsoft Transaction Server 153

NNachrichtensteuerung, RSNAST00 134Nachrichtensteuerung in SAP R/3 134Namensraum ( XML-Namespace 219Namespace ( XML-Namespace 219Namespace, XSL 222

316SIX.fm Seite 311 Dienstag, 22. April 2003 2:33 14

Page 312: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

312 Index

NAST ( Nachrichtensteuerung 134NETBEUI 191NETBIOS 191Netweaver 19Netzwerkprotokolle

IPX 191NETBEUI 191NETBIOS 191TCP/IP 191

New Dimension ProductsAPO 22BW 22CRM 22Netweaver 19

NONE, vordefinerte RFC-Destination 52

OObjekt

Datenkapselung (Encapsulation) 165Instanz 163Interface 162Lebenszeit 163Method 163Overloading 163Polymorphismus (polymorphism) 163Property 163

Objekt, Eigenschaft 163One-face-to-the-application 19Online Text Repository, OTR 259Orchestrierung 131OTR, Online Text Repository 259Overloading 163

PPayload, die transportierte Last 31Polymorphismus 163Potemkinsches Dorf 29Property 163, 171Protocol

heavy weighted protocol 31light weighted protocol 31

Proxy, Proxy-Server 27Proxycfg 266Proxy-Server 18

Qquerystring 250

RR/3-Tabellen auslesen 56RAD, Rapid Application Development

149Rapid Application Development, RAD

149Remote Function Call, RFC 49Remote Method Invokation, RMI 49Remote Program Call, RPC 49Resource Locator ( URL 194RFC, Function

BAPI_TRANSACTION_COMMIT99

BAPI_TRANSACTION_ROLLBACK99

RFC_REMOTE_EXEC 81RFC_REMOTE_FILE 82RFC_REMOTE_PIPE 82

Gateway-Server 73Listener, Registrierung eines Gateway 73LOCAL_EXEC, Aufruf rfcexec.exe 81Remote Function Call 49rfcexec.exe, RFC-Server für Windows 81Server 73via Remote Shell 78via SAPGUI 81via Web server 79

RFC listener, eigene Listener erstellen 74

RFC-Destination, NONE=eigenes System 52

rfcexec.c, source 74RMI, Java Remote Method Invokation

49RPC

Remote Program Call 49support on UNIX 78

RSH, UNIX remote shell service 78RSHELL ( RSH 78

316SIX.fm Seite 312 Dienstag, 22. April 2003 2:33 14

Page 313: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

Index 313

SSAP, SAP/XI, SAP Exchange 130SAP Exchange Infrastructure, SAP/XI 20SAP Internet Transaction Server 276SAP R/3 Enterprise 21SAP R/3-Logon mit Java 70SAP/XI, SAP Exchange Infrastructure 20SAP-Gateway 73SAP-Gateway instance number 73SAPGWxx 73saprfc.ini 73SAX-Parser 216SCR, Secure Remote Password 28Scriptlet 245Secure Remote Password ( SCR 28Shoppingcart-Applikation, shop-

pingcart.logosworld.com 97Sicherheit

Cerberus 29Challenge Authenticate 29Potemkinsches Dorf 29Secure Remote Password 28Single Sing On 28SSL-Verbindungen 29

Simple Object Access Protocol, Beispiel für Amazon.com 182

Simple Object Access Protocol, SOAP 228

Single Sing On ( SSO 28Sniplet 245SOAP

Beispiel für Amazon.com 182Simple Object Access Protocol 228

SOP, Standard Operation Procedure 126

srfcserv.c, source 74SRFCTEST, Test RFC outbound calls 77SSL-Verbindungen, https, //-

Verbindung 29SSO, Single Sing On 28Standard Operation Procedure, SOP

126SUN® Microsystems 151

TTCP/IP 191Theorie der komplexen Systeme (

Chaostheorie 44thin client (or slim client) 31Tibco™ 130Tomcat, Programmiersprachen 157Tomcat Webserver, Apache Jakarta

Project 153Transaktion, BAPI

Business Object Repository 97SWO1

Business Object Builder 97Trigger für Applikationen in MSMQ 131

UUDP, User Datagram Protocol 192URI, Uniform Resource Identifier 195URL, Uniform Resource Locator 194URN, Uniform Resource Name 195User Datagram Protocol( UDP 192

VValidierung mit XSD-Schema 209VB Script, Hello World 245Verbindungsgewicht, weight of client

31Virtual Machine

Java JVM 150Microsoft.NET 149

WWeb Application-Server alias SAP R/3

Release 6.x 20Web Dynpro 123

Model View Controller, MVC 123WebAPI, alternative Bezeichnung für

Webservices 180Webservice

API via TCP/IP 180UTC 181

Webservice Choreography Interface, WSCI 276

Webservices Description Language ( WSDL 231

WebSphere, Programmiersprachen 157WebSphere ( IBM WebSphere 128

316SIX.fm Seite 313 Dienstag, 22. April 2003 2:33 14

Page 314: Ihr Florian Zimniak - Logosworldlogosworld.com/docs/GALILEO/Angeli_TechnischeIntegration... · 2016-04-18 · Jedes unserer Bücher will Sie überzeugen. Damit uns das immer wieder

314 Index

Windows Scripting Host, WSH, WScript.exe 153

Workflow 131WSCI, Webservice Choreography

Interface 276WSDL 231

Beispiel für Amazon.com-Service 185DOM 232für Amazon.com 182Webservices Description Language 231

WYSIWYG, What You See Is What You Get 115

XXML

Apache XERXES Parser für Java 217DOM-Parser 216jDOM, Java-DOM-Parser 217

SAX-Parser 216XMLSPY

Editor von Altova (www.xmls-py.com) 219

XML-Namespace 219xmlns, Namensraum 207

xmlns ( XML-Namespace 207XML-Parser, Microsoft XMLDOM 216XML-Schema 209

Validierung 209XML-Schema-Definition 209XML-Suche für Amazon.com 188XSL, <xsl

value-of select='@Name'/> 225Referenz auf Attribute mit @ 225

XSL eXtended Stylesheet Language 220XSL namespace 222XSLT

XSL Transformations 220

316SIX.fm Seite 314 Dienstag, 22. April 2003 2:33 14