Sie sind auf Seite 1von 317

SAP PRESS ist eine gemeinschaftliche Initiative von SAP SE und der Rheinwerk

Verlag GmbH. Ziel ist es, Anwendern qualifiziertes SAP-Wissen zur Verfgung
zu stellen. SAP PRESS vereint das fachliche Know-how der SAP und die verlegerische Kompetenz von Rheinwerk. Die Bcher bieten Expertenwissen zu
technischen wie auch zu betriebswirtschaftlichen SAP-Themen.
Arlitt, Dunz, Gahm, Majer, Westenberger
Besseres ABAP Schnell, sicher, robust
2015, 497 Seiten, geb.
ISBN 978-3-8362-2939-5
Miroslav Antolovic
Einfhrung in SAPUI5
2014, 446 S., geb.
ISBN 978-3-8362-2753-7
Schneider, Westenberger, Gahm
ABAP-Entwicklung fr SAP HANA
2013, 602 S., geb.
ISBN 978-3-8362-1996-9
Wulff, Haubitz, Goerke, Seegebarth, Tnges
Das ABAP-Kochbuch
Erfolgsrezepte fr Entwickler
2013, 656 Seiten, geb.
ISBN 978-3-8362-2108-5
Roland Schwaiger, Dominik Ofenloch
Web Dynpro ABAP
Das umfassende Handbuch
2., aktualisierte und erweiterte Auflage 2014, 1.145 Seiten, geb.
ISBN 978-3-8362-2751-3
Aktuelle Angaben zum gesamten SAP PRESS-Programm finden Sie unter
www.sap-press.de.

Daniel Schn

ABAP -Entwicklung in Eclipse

Liebe Leserin, lieber Leser,


vielen Dank, dass Sie sich fr ein Buch von SAP PRESS entschieden haben.
Eine neue Entwicklungsumgebung fr das gute alte ABAP. Was hat sie zu bieten? Wie gro ist der Umstellungsaufwand? Sind alle lieb gewonnenen Funktionen enthalten? Dieses Buch habe ich mit besonderer Spannung erwartet
und ich bin mir sicher, dass es Ihnen hnlich ging. Unser Autor Daniel Schn
nimmt Sie darin mit auf eine Entdeckungsreise durch die Eclipse-Umgebung
und macht Sie mit allen Funktionen vertraut. Ntzliche Abkrzungen wie
Quick Fix und Shortcuts werden Ihnen schon bald unentbehrliche Helfer bei
der ABAP-Programmierung sein. Und vielleicht entdecken Sie ganz nebenbei
sogar die eine oder andere Funktion der ABAP Workbench neu denn viele
Funktionen wurden zuerst in Eclipse entwickelt und erst krzlich in die Workbench bertragen.
Wir freuen uns stets ber Lob, aber auch ber kritische Anmerkungen, die uns
helfen, unsere Bcher zu verbessern. Scheuen Sie sich nicht, mich zu kontaktieren. Ihre Fragen und Anmerkungen sind jederzeit willkommen.

Ihre Janina Schweitzer


Lektorat SAP PRESS

Rheinwerk Verlag
Rheinwerkallee 4
53227 Bonn
janina.schweitzer@rheinwerk-verlag.de
www.sap-press.de

Hinweise zur Benutzung


Dieses E-Book ist urheberrechtlich geschtzt. Mit dem Erwerb des E-Books
haben Sie sich verpflichtet, die Urheberrechte anzuerkennen und einzuhalten. Sie sind berechtigt, dieses E-Book fr persnliche Zwecke zu nutzen. Sie
drfen es auch ausdrucken und kopieren, aber auch dies nur fr den persnlichen Gebrauch. Die Weitergabe einer elektronischen oder gedruckten Kopie
an Dritte ist dagegen nicht erlaubt, weder ganz noch in Teilen. Und auch nicht
eine Verffentlichung im Internet oder in einem Firmennetzwerk.
Die ausfhrlichen und rechtlich verbindlichen Nutzungsbedingungen lesen Sie
im Abschnitt Rechtliche Hinweise.
Dieses E-Book-Exemplar ist mit einem digitalen Wasserzeichen versehen,
einem Vermerk, der kenntlich macht, welche Person dieses Exemplar nutzen
darf:

Impressum
Dieses E-Book ist ein Verlagsprodukt, an dem viele mitgewirkt haben,
insbesondere:
Lektorat Janina Schweitzer
Korrektorat Alexandra Mller, Olfen
Herstellung E-Book Melanie Zinsler
Covergestaltung Nadine Kohl
Coverbild Shutterstock_149065532solarseven
Satz E-Book Typographie&Computer, Krefeld
Wir hoffen sehr, dass Ihnen dieses Buch gefallen hat. Bitte teilen Sie
uns doch Ihre Meinung mit und lesen Sie weiter auf den Serviceseiten.

Bibliografische Information der Deutschen Nationalbibliothek:


Die Deutsche Nationalbibliothek verzeichnet diese Publikation in der
Deutschen Nationalbibliografie; detaillierte bibliografische Daten sind
im Internet ber http://dnb.d-nb.de abrufbar.
ISBN 978-3-8362-3040-7 (Buch)
ISBN 978-3-8362-3041-4 (E-Book)

1. Auflage 2015
Rheinwerk Verlag GmbH, Bonn 2015

Inhalt
Vorwort ..................................................................................................

11

Einleitung ................................................................................................

13

Die ersten Schritte Hallo ADT ....................................... 21


1.1

1.2

1.3

1.4

Backend-System ....................................................................
1.1.1
Den SAP NetWeaver Application Server
einrichten ................................................................
1.1.2
Amazon Web Services ..............................................
Installation und Einrichtung der Entwicklungsumgebung .......
1.2.1
Java Runtime Environment .......................................
1.2.2
Eclipse .....................................................................
1.2.3
ABAP Development Tools ........................................
Eclipse Workbench ................................................................
1.3.1
Workspaces .............................................................
1.3.2
Projekte ...................................................................
1.3.3
Views .......................................................................
1.3.4
Perspektiven ............................................................
Das erste Programm ..............................................................
1.4.1
ABAP-Projekt anlegen ..............................................
1.4.2
Hallo Welt ............................................................
1.4.3
Feature Explorer ......................................................

21
22
27
52
52
53
54
58
58
59
62
62
63
63
66
69

Funktionen der ABAP Development Tools .......................... 71


2.1
2.2

2.3

2.4

Demoszenario ....................................................................... 71
Mit Entwicklungsobjekten arbeiten ....................................... 73
2.2.1
Pakete anlegen ........................................................ 74
2.2.2
ABAP-Dictionary-Objekte anlegen ........................... 77
2.2.3
Funktionsbausteine anlegen ..................................... 82
2.2.4
Klassen .................................................................... 86
2.2.5
ABAP-Programme erstellen ...................................... 92
Code-Vervollstndigung ........................................................ 96
2.3.1
Einfache Code-Vervollstndigung ............................. 97
2.3.2
Code-Vorlagen ......................................................... 98
Quelltext-Editor .................................................................... 104
2.4.1
Aufbau ..................................................................... 105
2.4.2
Lokale nderungshistorie ......................................... 108

Inhalt

2.5
2.6
2.7

2.8

2.9

3.2

3.3
3.4

Testen ...................................................................................
3.1.1
ABAP-Testklassen ....................................................
3.1.2
Code Coverage .........................................................
3.1.3
ABAP Test Cockpit ...................................................
3.1.4
Laufzeitanalyse .........................................................
Debugging .............................................................................
3.2.1
Breakpoints setzen ...................................................
3.2.2
Debugger .................................................................
Systemmeldungen abonnieren ...............................................
Refactoring ............................................................................

162
162
169
172
179
181
182
183
189
192

Web Dynpro ABAP in Eclipse .............................................. 199


4.1

109
112
114
117
118
124
126
127
134
137
137
143
145
147
150
153
153
156
158
160

Wenn mal etwas schiefluft: Fehler finden,


analysieren und beheben .................................................... 161
3.1

2.4.3
Lineale und Markierungen .......................................
2.4.4
Navigation ...............................................................
2.4.5
Textbearbeitung .......................................................
2.4.6
Quelltext formatieren ...............................................
Mit mehreren Ressourcen arbeiten ........................................
Verwendungsnachweis ..........................................................
Quick Fix und Quick Assist ....................................................
2.7.1
Quick Fix .................................................................
2.7.2
Quick Assist .............................................................
Arbeitsvorrat organisieren ......................................................
2.8.1
Objekte finden .........................................................
2.8.2
Lesezeichen .............................................................
2.8.3
Aufgaben verwalten .................................................
2.8.4
Quellcode-Links .......................................................
2.8.5
Aufgabenverwaltung mit Mylyn ...............................
Dokumentation .....................................................................
2.9.1
Objekte dokumentieren ...........................................
2.9.2
Dokumentation anzeigen .........................................
2.9.3
Dokumentation importieren .....................................
2.9.4
ABAP Language Help ...............................................

Controller-Programmierung ...................................................
4.1.1
Kontext-Editor .........................................................
4.1.2
Attribute ..................................................................
4.1.3
Methoden ................................................................

199
202
206
206

Inhalt

4.2

4.3
4.4

214
214
229
229
231

Datenbankzugriffe ............................................................... 235


5.1
5.2
5.3

Views und Windows ..............................................................


4.2.1
Views .......................................................................
4.2.2
Windows .................................................................
Web-Dynpro-Applikationen ..................................................
Floorplan Manager ................................................................

Data Preview ......................................................................... 235


SQL-Konsole ......................................................................... 239
Core Data Services ................................................................. 242

Erweiterungen der ABAP Development Tools .................... 249


6.1

6.2
6.3
6.4

6.5

6.6

Eclipse Rich Client Platform ...................................................


6.1.1
Plug-in-System in Eclipse .........................................
6.1.2
Anatomie eines Plug-ins ...........................................
Server-Komponente der ABAP Development Tools ................
Entwicklungsumgebung fr Erweiterungen vorbereiten ..........
Implementierungen im Backend
(SAP NetWeaver AS ABAP) ....................................................
6.4.1
Resource Controller .................................................
6.4.2
Resource-Application-Klasse ....................................
Implementierungen im Frontend (Eclipse) .............................
6.5.1
Abhngigkeiten ........................................................
6.5.2
Verbindung zum Backend ........................................
6.5.3
Datenaustausch .......................................................
Discovery Service ...................................................................

250
251
251
254
256
258
259
263
267
271
274
279
285

Anhang ...................................................................................... 289


A
B
C

Wegweiser durch die ABAP Development Tools ............................... 291


Literatur und weiterfhrende Informationsquellen ........................... 299
Autor ............................................................................................... 303

Index ...................................................................................................... 305

Vorwort
2

Party with your code das war das Motto, mit dem im Juni 2012 eine neue
ra fr die ABAP-Entwicklergemeinde begann. ABAP in Eclipse, die neue
Entwicklungsumgebung fr ABAP, stand nun endlich als Download zur Verfgung. Die Idee dazu wurde schon sehr viel frher geboren. Als ich 1999
bei SAP in der Basisentwicklung angefangen habe, war die Welt fr den SAPEntwickler noch sehr berschaubar. Man hatte mit ABAP ein Programmierwerkzeug zur Hand, mit dem man auf recht einfache Art und Weise betriebswirtschaftliche Software erstellen konnte. Das Datenmodell wurde im Data
Dictionary definiert. Im ABAP-Code programmierte man die betriebswirtschaftliche Logik und erstellte mittels Dynpro-Technologie das User Interface. Das alles war sehr gut integriert in der ABAP Workbench oder der
SE80, wie die meisten Entwickler diese Transaktion nennen.
Die Anforderungen an betriebswirtschaftliche Anwendungen haben sich
jedoch in den letzten Jahren sehr stark gendert. Der Anwender erwartet
heute, dass er seine Anwendungen zustzlich zum Browser auch auf seinem
Smartphone und Tablet-PC bedienen kann. Ein weiterer Trend ist, dass analytische und transaktionale Anwendungen immer mehr zusammenwachsen.
Dadurch entstehen im Falle von Massendaten ganz neue Herausforderungen
an die Software. Zudem werden immer mehr Anwendungen durch cloudbasierte Services und Anwendungen ergnzt.
Was bedeutet das fr das Programmiermodell, mit dem die Anwendungen
erstellt werden? Moderne Benutzeroberflchen werden mittels HTML5 und
JavaScript erstellt. Um performante Anwendungen mit Massendaten zu entwickeln, verwendet man die In-Memory-Datendank SAP HANA und programmiert die Logik zur Datenbeschaffung mit Hilfe der nativen Datenbanksprache SQLScript. Zudem mchte man die SAP-Anwendungen mit CloudLsungen kombinieren, die zu einem Groteil in Java codiert sind. Fr den
Anwendungsentwickler bedeutet dies, dass er eine Vielzahl neuer Technologien und Softwareparadigmen verstehen und einsetzen muss. Jedoch wird
ABAP weiterhin als zentrale Programmiersprache fr die betriebswirtschaftliche Anwendungslogik dominieren. Wie wre es, wenn all diese neuen
Paradigmen zusammen mit ABAP in einer einheitlichen Entwicklungsumge-

11

Vorwort

bung angeboten wrden? Mit Eclipse stellen wir Ihnen genau diese einheitliche Entwicklungsumgebung zur Verfgung.
Worin aber liegen die Vorteile von Eclipse gegenber der ABAP Workbench,
und was mssen Sie als alter ABAP-Hase wissen, um in der neuen Welt
zurechtzukommen? Genau auf diese Fragen wird Ihnen dieses Buch die Antworten geben. So bringt Eclipse eine gewisse Arbeitsweise mit sich, die fr
den erfahrenen SE80-Experten zuerst einmal etwas Umstellungsaufwand
bedeutet. Aber nach kurzer Zeit werden Sie sehen, dass der Aufwand sich
lohnt und sich Ihre Entwicklereffizienz steigern wird. Daher richtet sich dieses Buch auch speziell an die Umsteiger von der SE80 zu Eclipse.
Ich wnsche Ihnen nun viel Spa beim Lesen dieses Buches und beim Erkunden der neuen ABAP-Entwicklungswerkzeuge. Glauben Sie mir, Sie werden
den Umstieg nicht bereuen.
Thomas Fiedler
Product Owner ABAP in Eclipse

12

Einleitung
3

Jede Reise beginnt mit einem einzigen Schritt. Meistens ist dieser Schritt
oder vielmehr die Entscheidung zu diesem Schritt das eigentlich Beschwerliche. Die Entscheidung, den ersten Schritt in Richtung ABAP-Entwicklung in
Eclipse zu tun, haben Sie mit dem Erwerb dieses Buches bereits getroffen.
Ich will versuchen, Sie auf Ihrem Weg ein Stck zu begleiten und Ihnen zu
helfen, den einen oder anderen Stein aus dem Weg zu rumen, damit Sie
nicht schon zu Beginn ins Straucheln geraten.
Der Einstieg in eine neue Technologie oder ein neues Werkzeug kann mitunter mhselig sein, angefangen beim Einrichten der Umgebung ber die ersten kleinen Tests bis hin zur produktiven Nutzung. Beim Verfassen dieses
Buches habe ich versucht, mglichst praxisnah vorzugehen, d. h., ein Entwicklungsprojekt-Beispiel wird Sie durch das komplette Buch begleiten und
Ihnen die wichtigsten Aspekte der ABAP Development Tools for SAP NetWeaver (ADT) vorstellen. In Schritt-fr-Schritt-Anleitungen fhre ich Sie dabei durch die Mens und Einstellungen von Eclipse, mchte Ihnen allerdings
nicht nur das reine Vorgehen vermitteln, sondern Ihnen auch die Bedienkonzepte von Eclipse erlutern, denn schlielich lautet das Motto der
ADT Develop like never before und nicht The same procedure as every year.
Die ABAP Workbench ist seit Jahren das Werkzeug, um Programme in ABAP
zu entwickeln. Sie ist das tgliche Handwerkszeug und vielen ABAP-Entwicklern mittlerweile ans Herz gewachsen. In der groen weiten Welt der Softwareentwicklung dominieren allerdings Entwicklungsumgebungen wie
Microsoft Visual Studio, NetBeans IDE oder Eclipse. Sie glnzen mit ausgefeilten Refactoring-Funktionen, Code Assistance oder der Integration von
Ticket- und Versionierungssystemen.
Auch wenn sich in den letzten Jahren viel getan hat und die ABAP Workbench um viele Funktionen wie die Code-Vervollstndigung reicher
geworden ist, wird die ABAP Workbench von vielen Nicht-ABAP-Entwicklern eher belchelt und nicht als moderne Entwicklungsumgebung angesehen. Warum ist das so? Und warum fhlen sich IDEs (Integrierte Entwicklungsumgebungen/Integrated Development Environments) wie Eclipse, die
inzwischen ebenfalls bereits ber zehn Jahre auf dem Buckel haben, moderner an?

13

Einleitung

Zum einen liegt das sicherlich am Bedienparadigma des SAP GUIs, das der
ABAP Workbench zugrunde liegt. Die ABAP Workbench existiert nur im
Rahmen der Grenzen, die das SAP GUI vorgibt. Was fr warenwirtschaftliche Transaktionen durchaus Sinn ergibt, ist fr eine Entwicklungsumgebung
eher unpraktisch. Wenn Sie glcklicher Besitzer eines hochauflsenden
Monitors sind, wissen Sie wahrscheinlich, was ich meine. Sie haben zwar
sehr viel Platz, knnen in der ABAP Workbench jedoch trotzdem nicht mehr
anzeigen. Ich bin zeitweise dazu bergegangen, meinen Monitor hochkant
zu verwenden, um dadurch zumindest einen greren Quelltextausschnitt
betrachten zu knnen.
Eclipse als Entwicklungsumgebung wurde von der SAP SE lange Zeit nur in
Form des SAP NetWeaver Developer Studiosverwendet. Allerdings wird das
Developer Studio eher dazu genutzt, auf Java basierende Anwendungen zu
entwickeln, z. B. in den Bereichen Web Dynpro Java, Portal-Entwicklung
oder Business Process Management.
Im Jahr 2009 begann die SAP SE damit, auch die ABAP-Entwicklung auf die
Eclipse-Plattform zu bringen, das erste Release der ABAP Development Tools
erblickte 2012 das Licht der Welt. Im Gegensatz zum Developer Studio
wurde damit kein eigenstndiges, losgelstes Produkt erstellt, sondern die
ADT wurden als Plug-ins (Erweiterung) fr die Eclipse-Plattform entwickelt.
Aus diesem Grund profitiert die Entwicklungsumgebung nach wie vor von
offiziellen Updates der Eclipse Foundation und droht nicht, nach und nach zu
veralten. Die ADT untersttzen immer die aktuelle und die letzte Version
von Eclipse (siehe auch SAP-Hinweis 1856565), d. h. derzeit Eclipse 4.4 und
4.3. Zudem macht das Plug-in-System von Eclipse ein Update der ADT sehr
einfach. Derzeit werden regelmig neue Versionen verffentlicht, die neue
Features und Verbesserungen mitbringen.
Die Verbindung von den ADT-Plug-ins zum Application Server wird ber
eine RFC-Schnittstelle hergestellt. Diese Schnittstelle basiert auf dem RESTArchitekturprinzip, das in Abschnitt 6.2, Server-Komponente der ABAP
Development Tools, nher erlutert wird. Entwicklungsobjekte werden
demnach wie Ressourcen betrachtet, die auf dem Server abgelegt und wieder
abgerufen werden knnen. Durch die lose Kopplung zwischen Eclipse-Client
und Backend mssen die Versionen der ADT und des SAP NetWeaver AS
ABAP nicht genau aufeinander abgestimmt sein. Erfllt der Server die Mindestvoraussetzung, knnen die ADT auch in hheren Versionen verwendet
werden. Gegebenenfalls stehen dann einige Funktionen nicht zur Verfgung, es kommt aber nicht zu Inkonsistenzen, die schlimmstenfalls zu spt

14

Einleitung

bemerkt werden knnten. Diese lose Kopplung zwischen den Systemen


sorgt zudem dafr, dass Innovationen aufseiten des Clients viel einfacher
umzusetzen sind, denn das Frontend ist prinzipiell austauschbar. Eclipse ist
nur fr die Aufbereitung der Anzeige zustndig. In welcher Form dies
geschieht, spielt fr die Funktionalitt im Backend keine Rolle. Beim Arbeiten mit ABAP-Quellcode mssen Sie sich um die Details, etwa die Schnittstellen und REST-Services, allerdings keine Gedanken machen. Entwicklungsobjekte werden im Eclipse-Client angezeigt, als arbeiteten Sie mit lokalen
Daten.

Eclipse-Plattform
ABAP
Development
Tools

UI
Development
Toolkit for
HTML5

SAP Mobile
Platform Tools

SAP HANA
Tools

ABAP-Plattform

SAP NetWeaver AS ABAP

Datenbank
Relationale Datenbank

SAP HANA

Abbildung 1 Einordnung der ABAP Development Tools in die Eclipse-Werkzeuge von SAP

Die ABAP Development Tools befinden sich auf der Eclipse-Plattform in


guter Gesellschaft. Viele der neueren Technologien, die von der SAP SE in
den letzten Jahren verffentlicht wurden, werden nicht mehr direkt im SAP
GUI entwickelt. Dies betrifft vor allem Tools, deren Entwicklungsobjekte
nicht unmittelbar durch den ABAP-Server verwaltet werden. In vielen dieser
Flle ist Eclipse die Entwicklungsumgebung. Dies betrifft z. B. das UI
Development Toolkit for HTML5 (SAPUI5), die SAP Mobile Platform Tools und
die SAP HANA Tools. Alle diese Werkzeuge wurden als Plug-ins fr die
Eclipse-Umgebung umgesetzt, d. h., Sie greifen nur bei Bedarf auf den SAP
NetWeaver Application Server bzw. die Datenbank zu (siehe Abbildung 1).
Praktischerweise knnen diese Werkzeuge alle parallel in derselben Eclipse-

15

Einleitung

Installation betrieben und gleichzeitig genutzt werden, Sie bentigen also


keine unterschiedlichen Entwicklungstools in Ihrem System.
Aktuell decken die ABAP Development Tools einen groen Teil des Funktionsumfangs der ABAP Workbench und damit verbundener Transaktionen
ab. Es ist mglich, ABAP-Programme, Funktionsbausteine und Klassen in
Eclipse zu entwickeln, auerdem bieten die ADT auch Untersttzung bei der
Web-Dynpro-ABAP-Entwicklung.
Aufgrund der riesigen Menge der Entwicklungsobjekte wurden jedoch noch
nicht alle Entwicklungswerkzeuge der ABAP Workbench in Eclipse umgesetzt. Teilweise beruht diese Entscheidung auf dem geringen Mehrwert einer
bestimmten Umsetzung in Eclipse, etwa bei Aktionen, die Sie nur einmalig
ausfhren (wie das Anlegen eines Pakets). Langfristig werden diese Funktionen aber wohl auch durch Assistenten in Eclipse abgebildet werden.
Ebenfalls nicht in Eclipse umgesetzt ist der Screen Painter. Dies ist auch bis
auf Weiteres nicht geplant, da die klassischen Dynpro-Transaktionen nicht
mehr als Schlsseltechnologie eingestuft werden. Neue Oberflchen sollten
stattdessen in Web Dynpro ABAP oder SAPUI5 umgesetzt werden (http://
scn.sap.com/docs/DOC-41321).
Auch fehlt derzeit noch die Untersttzung der Anlage von ABAP-DictionaryObjekten. Dieses Manko soll allerdings in nchster Zeit behoben werden.
ABAP-Dictionary-Objekte sollen zuknftig mit einer eigenen Sprache (Data
Definition Language, DDL) angelegt werden. Derzeit bieten die ADT schon
die Mglichkeit, Views (im Kontext von Core Data Services) auf diese Weise
zu definieren (siehe Abschnitt 5.3). Als nchster Meilenstein ist die Anlage
von Strukturen ber DDL geplant. Dass die Anlage von Dictionary-Objekten
noch nicht in Eclipse erfolgt, heit allerdings nicht, dass Sie keine Mglichkeit haben, aus Eclipse heraus z. B. eine Domne anzulegen. Die ABAP
Development Tools verfgen ber eine SAP-GUI-Integration innerhalb des
Eclipse-Clients, ber die Sie wie gewohnt die althergebrachten Werkzeuge
einsetzen knnen.
Warum sollten Sie als Entwickler sich mit den ABAP Development Tools
beschftigen, auch wenn diese noch nicht den kompletten Funktionsumfang
der ABAP Workbench bieten? Dafr gibt es mehrere Grnde: Der vielleicht
unbefriedigendste ist: Die Strategie der SAP SE sieht vor, Eclipse als Entwicklungsplattform weiter zu forcieren. In den vergangenen Jahren wurde
bereits sehr viel in die Entwicklung Eclipse-basierter Tools investiert, und es
ist abzusehen, dass dies auch in nchster Zeit so bleiben wird. Zwar wird die

16

Einleitung

ABAP Workbench auch in Zukunft weiterhin untersttzt werden, der Treiber fr Innovationen wird allerdings in Eclipse liegen.
Dies hngt sicherlich auch damit zusammen, dass Eclipse eine grere Flexibilitt bei der Implementierung von Benutzeroberflchen fr Entwicklungszwecke bietet, d. h., Ihnen als Anwender kann eine viel bessere Handhabung
(User Experience) geboten werden. Das SAP GUI ist dazu gedacht, Geschftsanwendungen abzubilden, und zustzlich knnen Sie damit Anwendungen
entwickeln. Eclipse hingegen ist auf die Entwicklungsaufgaben ausgelegt.
Richtig eingesetzt, erlaubt dieses Tool, sehr fokussiert und effektiv zu arbeiten. Dies erfordert allerdings, dass Sie sich auf die Bedienkonzepte von
Eclipse einlassen und nicht versuchten, Dinge genauso anzugehen wie bisher. Dieses Buch soll Ihnen dabei helfen, genau dies zu tun.
Ein weiterer Grund fr die Erfolgsgeschichte von Eclipse ist die Erweiterbarkeit, fr die die Plattform von Grund auf gestaltet ist. Die Erweiterungsmglichkeiten beginnen mit dem Hinzufgen einer eigenen Funktion ins Hauptmen und knnen ber die Erstellung eigener grafischer Editoren bis hin zur
Erstellung einer vollkommen neuen Applikation reichen (siehe auch Kapitel
6, Erweiterungen der ABAP Development Tools). Es ist zu hoffen, dass
ber die Jahre eine Vielzahl interessanter Projekte, wie etwa SAPlink (http://
eclipse.saplink.org), entstehen, die neue Erweiterungen fr die SAP-Entwicklung bereitstellen und helfen, den Entwickleralltag zu vereinfachen.
Dieser Entwicklung ist sicherlich die gute Community sehr zutrglich.
Sowohl im Umfeld des Eclipse-kosystems (https://eclipse.org/community/)
als auch im Umfeld der ABAP Development Tools (http://scn.sap.com/
community/abap/eclipse) gibt es eine Vielzahl engagierter Entwickler. Abseits
der offiziellen Dokumentationen finden sich im SAP Community Network
(SCN) regelmig Blogs und Tutorials zu allen mglichen ADT-Themen.
Neue Funktionen der aktuellen Releases werden in der Community als Blog
verffentlicht und knnen dort kommentiert und diskutiert werden. Damit
ist es jedem ABAP-Entwickler mglich, auf die Weiterentwicklung und Verbesserung der ADT aktiv einzuwirken oder Hilfe zu finden, falls es Probleme
gibt.

Voraussetzungen
Auch wenn Sie bisher keinen Zugriff auf die notwendige Backend-Infrastruktur (SAP NetWeaver Application Server ABAP) haben, mssen Sie dieses
Buch nicht enttuscht beiseitelegen. ber Cloud Services ist es relativ ein-

17

Einleitung

fach, einen eigenen Server aufzusetzen und zu Testzwecken zu nutzen.


Damit knnen Sie den Beispielen im Buch von Anfang bis Ende folgen, ohne
auf zustzliche Hardware angewiesen zu sein. Sie bentigen lediglich Ihren
Rechner und einen Internetzugang.

Zielgruppe
Das Buch richtet sich primr an Umsteiger und Neugierige, die bisher in der
Welt der ABAP Workbench unterwegs waren und nun die Welt der ABAPEntwicklung in Eclipse kennenlernen mchten (oder mssen). In den Beispielen werden daher keine ABAP-Sprachkonstrukte besprochen, wenn es
sich nicht um eine Besonderheit in den ADT handelt. Alle Beispiele sind vollstndig und leicht verdaulich. Daher kann dieses Buch fr Sie auch interessant sein, wenn Sie den umgekehrten Weg gehen und den Einstieg in die
ABAP-Welt ber Eclipse suchen. Allerdings wrde ich Ihnen in diesem Fall
parallel die Lektre einer Einfhrung in ABAP empfehlen (siehe Anhang B,
Literatur und weiterfhrende Informationsquellen).
Aufbau dieses Buches
Je nach Ihren Anforderungen und Ihrer Ausgangssituation kann es sinnvoll
sein, gezielt bestimmte Teile des Buches zu lesen.
Kapitel 1, Die ersten Schritte Hallo ADT, behandelt die Einrichtung
der Entwicklungsumgebung. Starten Sie auf der grnen Wiese und haben
weder die ADT auf Ihrem Rechner installiert noch einen passenden Server
zur Verfgung, sollten Sie dieses Kapitel von Anfang an lesen. Abschnitt 1.1
behandelt das Einrichten des Backend-Systems. Verfgen Sie ber einen
Zugang zum AS ABAP, brauchen Sie nur Abschnitt 1.1.1 zu lesen. Wenn Sie
eine solche Instanz in der Amazon Cloud anlegen mchten, sollten Sie
Abschnitt 1.1.2, Amazon Web Services, studieren. Die Installation und
Einrichtung von Eclipse auf Ihrem eigenen Rechner wird in Abschnitt 1.2
beschrieben. Anschlieend werden Sie an das erste Hallo-Welt-Beispiel
herangefhrt. Verfgen Sie ber eine voll eingerichtete Landschaft, inklusive
Eclipse mit installierten ADT, sind Abschnitt 1.3, Eclipse Workbench, und
Abschnitt 1.4, Das erste Programm, der richtige Einstieg fr Sie.
Nach der erfolgreichen Einrichtung der ADT mchten Sie wahrscheinlich
etwas mehr tun knnen, als nur ein Hallo Welt auf den Bildschirm zu zaubern. Kapitel 2, Funktionen der ABAP Development Tools, beschreibt,
wie Sie Entwicklungsobjekte anlegen und bearbeiten knnen, und fhrt Sie

18

Einleitung

in die Funktionen der Development Tools ein. Dabei werden sowohl Funktionen beschrieben, die Sie wahrscheinlich aus der ABAP Workbench kennen, als auch Funktionen, die neu durch Eclipse hinzugekommen sind.
Qualittssicherung, Fehlerbehebung und kontinuierliche Verbesserung spielen bei der Softwareentwicklung eine groe Rolle. Kapitel 3, Wenn mal
etwas schiefluft: Fehler finden, analysieren und beheben, liefert daher
Informationen ber die wichtigsten Werkzeuge und Funktionen in diesem
Bereich. ABAP-Unit-Tests und Profiling Tools sind in die ADT hervorragend
integriert. Auch das relativ neue ABAP Test Cockpit steht Ihnen in Eclipse
zur Verfgung. Informationen zum Debugging finden Sie in Abschnitt 3.2.
Wenn Sie bisher Refactoring-Funktionen in der ABAP Workbench vermisst
haben, sollte Abschnitt 3.3, Systemmeldungen abonnieren, fr Sie interessant sein. Hier wird beschrieben, welche Funktionen die ADT in diesem
Bereich bieten und wie Sie diese anwenden knnen.
Sprach man von Web Dynpro und Eclipse, war bisher meist von Web Dynpro Java die Rede. Mit den ABAP Development Tools ist es nun auch endlich
mglich, Web Dynpro ABAP in Eclipse zu entwickeln. Kapitel 4 gibt einen
berblick darber, was hier mglich ist und wie es geht.
Die Datenbank ist zentraler Bestandteil eines SAP-Systems. Daher verbringen viele Entwickler fast genauso viel Zeit mit dem Data Browser wie mit
dem Quelltext-Editor. In Kapitel 5, Datenbankzugriffe, lernen Sie, wie Sie
die Data Preview in Eclipse nutzen und ber die SQL-Konsole Anfragen an
die Datenbank stellen knnen. Das Kapitel gibt Ihnen zudem eine Antwort
auf die Frage, was sich hinter dem Begriff Core Data Services verbirgt und was
Sie damit in Eclipse tun knnen.
Ein sehr spannendes Thema ist die Erweiterbarkeit von Eclipse. Die ADT
wurden mit einem ffentlich verfgbaren Software Development Kit (SDK)
ausgestattet, dessen Verwendung zur Erstellung eines Plug-ins in Kapitel 6,
Erweiterungen der ABAP Development Tools, anhand eines Beispiels
beschrieben wird.
Im Anhang finden Sie neben einer Liste mit weiterfhrender Literatur auch
einen Funktionswegweiser. Vermissen Sie eine bestimmte Funktion aus der
ABAP Workbench in den Development Tools, dann schauen Sie doch einmal
hier nach! Auerdem habe ich hier alle relevanten Shortcuts und Funktionen
zusammengetragen und beschrieben.
In hervorgehobenen Informationsksten sind in diesem Buch Inhalte zu finden, die wissenswert und hilfreich sind, aber etwas auerhalb der eigentli-

19

Einleitung

chen Erluterung stehen. Damit Sie die Informationen in den Ksten sofort
einordnen knnen, haben wir die Ksten mit Symbolen gekennzeichnet:
Die mit diesem Symbol gekennzeichneten Tipps geben Ihnen spezielle Empfehlungen, die Ihnen die Arbeit erleichtern knnen.
In Ksten, die mit dem Pfeilsymbol gekennzeichnet sind, finden Sie Informationen zu weiterfhrenden Themen oder wichtigen Inhalten, die Sie sich merken sollten.
Dieses Symbol weist Sie auf Besonderheiten hin, die Sie beachten sollten. Es
warnt Sie auerdem vor hufig gemachten Fehlern oder Problemen, die auftreten knnen.
Nun bleibt mir nicht viel mehr brig, als Ihnen viel Spa auf Ihrer Entdeckungsreise zu wnschen.
Daniel Schn

20

Aller Anfang ist schwer. Die erste Hrde bei der Verwendung einer
neuen Anwendung oder eines neuen Werkzeugs ist meist bereits die
Einrichtung. Dieses Kapitel soll Ihnen ber diese erste Hrde hinweghelfen, sodass der ABAP-Entwicklung mit Eclipse nichts mehr im
Wege steht.

Die ersten Schritte Hallo ADT

Der erste groe Brocken, der sich Ihnen bei der Entwicklung mit den ABAP
Development Tools for SAP NetWeaver (ABAP in Eclipse) in den Weg stellt,
ist das Einrichten einer lauffhigen Umgebung. In diesem Kapitel erfahren
Sie, welche Voraussetzungen erfllt sein mssen, damit Sie ABAP in Eclipse
nutzen knnen. Danach fhre ich Sie abhngig von Ihrer Systemlandschaft
durch den Einrichtungsprozess. Abschlieend implementieren wir ein kurzes ABAP-Testprogramm in der neuen Umgebung, um den Erfolg unserer
Arbeit zu verifizieren. Als Belohnung sollte dann am Ende ein freundliches
Hallo Welt auf Ihrem Bildschirm erscheinen.

1.1

Backend-System

Sie fragen sich vielleicht, weshalb ein Buch zur ABAP-Entwicklung in Eclipse
mit einem Abschnitt ber die Backend-Systeme beginnt. Das liegt daran,
dass ABAP eine serverseitig ausgefhrte Sprache ist, woran sich auch mit den
ABAP Development Tools for SAP NetWeaver (im Folgenden kurz ADT) nichts
ndert. Zwar entwickeln wir mit einem Werkzeug, das lokal auf dem Rechner installiert ist, das ABAP-Coding wird aber nach wie vor auf dem Server
ausgefhrt. Falls Sie hoffen, mit der Installation des Tools wre seine Einrichtung erledigt, muss ich Sie leider enttuschen: Das ist leider nicht so.
Um ABAP in Eclipse einsetzen zu knnen, wird mindestens SAP NetWeaver
7.3/7.31 SP 4 oder hher bentigt. Einige Features sind sogar erst ab SAP NetWeaver Release 7.4 verfgbar. Wenn dies der Fall ist, mache ich Sie in diesem
Buch mit einem entsprechenden Hinweis darauf aufmerksam. Eine bersicht
ber die Verfgbarkeit der verschiedenen Features finden Sie unter:

21

Die ersten Schritte Hallo ADT

http://scn.sap.com/community/abap/eclipse/blog/2013/06/05/adt-featureavailability-matrix-for-as-abap-releases.
Sollten Sie nicht ber den Zugang zu solch einem System verfgen, mssen
Sie dieses Buch nicht enttuscht beiseitelegen und Ihre Ambitionen, Eclipse
einzusetzen, bis zum nchsten Upgrade begraben. Stattdessen empfehle ich
Ihnen, Abschnitt 1.1.2, Amazon Web Services, zu lesen. Dort wird beschrieben, wie Sie Ihren eigenen Test-Server einrichten und betreiben knnen,
ohne zustzliche Hardware oder neue Lizenzen erwerben zu mssen.
Sollten Sie jedoch einen aktuellen SAP NetWeaver Application Server (AS) zur
Verfgung haben, beginnen Sie damit, die Erfllung der Systemvoraussetzungen zu prfen. Folgendes muss gegeben sein, damit Sie mit den ADT
arbeiten knnen:
Alle Benutzer, die die ADT nutzen wollen, haben die entsprechenden Rollen und Berechtigungen.
Alle bentigten Services des Internet Communication Frameworks (ICF) sind
aktiv.
Es kann auch notwendig sein, bestimmte Profilparameter zu pflegen, um
etwa Logon-Tickets fr das Single Sign-on verarbeiten zu knnen. Sollten
diese fr Sie eine Rolle spielen, finden Sie die Beschreibung der entsprechenden Einstellungen unter:
http://help.sap.com/download/netweaver/adt/SAP_ADT_Configuration_Guide_
Backend_en.pdf
Prfen wir nun schrittweise das System und richten die erforderlichen Rollen und Services ein.

1.1.1

Den SAP NetWeaver Application Server einrichten

Es bedarf einiger Vorbereitung, bevor die ABAP Development Tools mit dem
SAP NetWeaver AS kommunizieren knnen und Sie in der Lage sind, ABAP
in Eclipse zu erforschen. Doch keine Angst; die Anpassungen, die Sie vornehmen mssen, halten sich in Grenzen.
Sicherheitsrelevante Einstellungen
Im Folgenden werden Rollen angepasst und Services auf dem AS aktiviert. Dies
sind sicherheitsrelevante Einstellungen. Sollten Sie sich unsicher sein, ob Sie diese
Einstellungen vornehmen drfen oder die Rechte dazu besitzen, nehmen Sie mit
Ihrer Basisadministration Kontakt auf.

22

Backend-System

Benutzerrollen pflegen
Ihr SAP-Benutzer bentigt die entsprechenden Berechtigungen, um die ADT
nutzen zu knnen, also um ADT-Ressourcen aufzurufen, bestimmte Transaktionen zu starten und den Server per Remote Function Call (RFC) kontaktieren
zu drfen. Die dafr erforderlichen Berechtigungsobjekte sind in Tabelle 1.1
aufgefhrt.
Rolle

Beschreibung

S_ADT_RES

Zugriff auf ADT-Ressourcen

S_RFC

RFC-Zugriff auf den Server

S_TCODE

Transaktionscodes ausfhren

Tabelle 1.1 Berechtigungsobjekte zu den ADT

Die genaue Konfiguration dieser Berechtigungsobjekte knnen Sie bei


Bedarf dem genannten Configuration Guide entnehmen. Sie mssen diese
Berechtigungen zum Glck nicht von Hand pflegen. Um einen Benutzer fr
ABAP in Eclipse freizuschalten, gengt es, ihm eine Rolle zuzuordnen. Die
Rolle SAP_BC_DWB_ABAPDEVELOPER beinhaltet alle notwendigen Berechtigungen fr einen ABAP-Entwickler (sowohl fr das SAP GUI als auch fr ABAP
in Eclipse). Die Rolle SAP_BC_DWB_WBDISPLAY enthlt die gleichen Berechtigungsobjekte. Allerdings erhalten Sie damit nur Leseberechtigungen, ohne
die Mglichkeit, Objekte zu bearbeiten.
Statten wir nun einen Benutzer mit den entsprechenden Berechtigungen aus:
1. Melden Sie sich ber das SAP-Logon (

) an Ihrem SAP NetWeaver AS an.

2. Wechseln Sie in die Benutzerpflege (Transaktion SU01).


3. Geben Sie den Benutzernamen ein, dem Sie die Berechtigungen zuordnen
mchten, und starten Sie die Benutzerpflege im ndern-Modus.
4. Wechseln Sie auf die Registerkarte Rollen, und prfen Sie die zugeordneten Rollen (siehe Abbildung 1.1). Falls noch nicht geschehen, ordnen Sie
dem Benutzer die Rolle SAP_BC_DWB_ABAPDEVELOPER zu. Tragen Sie dazu
den Rollennamen in die Spalte Rolle ein, und besttigen Sie mit ().
Profile
Prfen Sie auf der Registerkarte Profile, ob dem Benutzer schon (hherwertige)
Berechtigungen wie SAP_ALL zugeordnet wurden. In diesem Fall ist es nicht notwendig, die Rolle SAP_BC_DWB_ABAPDEVELOPER zuzuordnen.

23

1.1

Die ersten Schritte Hallo ADT

Abbildung 1.1 Benutzerrollen pflegen

Damit verfgt Ihr Benutzer ber ausreichende Berechtigungen, um die ABAP


Development Tools verwenden zu knnen.

Services aktivieren
Wre der SAP NetWeaver AS ein vollstndig abgekapseltes System, wre es fr
externe Tools wie Browser, Smartphones oder Entwicklungsumgebungen wie
Eclipse problematisch, mit dem System zu kommunizieren. Zum Glck gibt es
aber Mechanismen, die eine Kommunikation ber externe Funktionsaufrufe
oder Standard-Internet-Protokolle wie HTTP, HTTPS oder SMPT ermglichen.
Das Internet Communication Framework (ICF) ist der zentrale Dreh- und Angelpunkt, wenn es um die Kommunikation ber die Internet-Protokolle geht.
Die ADT machen sowohl vom ICF als auch von Remote Function Calls
Gebrauch. Zugriffe ber das ICF werden ber sogenannte ICF-Services an
einen Service-Handler weitergeleitet. Diese Services kanalisieren die Anfragen, die aus dem Netzwerk an den SAP-Server gestellt werden. Aus Sicherheitsgrnden ist es (gerade bei einem Produktivsystem) empfehlenswert, nur
Services aktiv zu schalten, die auch wirklich in Benutzung sind. Daher werden
Services zunchst inaktiv ausgeliefert und mssen nachtrglich manuell aktiviert werden. ABAP in Eclipse bentigt das ICF unter anderem zur Anzeige
von Hilfetexten. Auch bei der Entwicklung von Komponenten in Web Dynpro
ABAP sollten bestimmte Services aktiv sein. Um die Dokumentation fr ABAP
in Eclipse verfgbar zu machen, sind folgende Schritte notwendig:
1. Melden Sie sich ber das SAP-Logon (
2. Wechseln Sie in Transaktion SICF.

24

) an Ihrem System an.

Backend-System

3. berspringen Sie den ersten Bildschirm mit (F8), um in die Servicehierarchie zu gelangen. Alternativ knnen Sie ber die in Abbildung 1.2 dargestellte Maske auch nach einem Service bzw. einem Servicepfad suchen.

Abbildung 1.2 Suche nach ICF-Services in Transaktion SICF

4. Navigieren Sie durch die Servicehierarchie zum Knoten /default_host/sap/


bc/abap.

Abbildung 1.3 ICF-Service aktivieren

25

1.1

Die ersten Schritte Hallo ADT

5. Aktivieren Sie hier die beiden Services docu und toolsdocu. Klicken Sie
dazu mit der rechten Maustaste auf den jeweiligen Service, und whlen Sie
Service aktivieren aus dem Kontextmen (siehe Abbildung 1.3).
6. Wiederholen Sie die Schritte 4 und 5 fr die Services docu bzw. toolsdocu unter dem SICF-Pfad /default_host/sap/public/bc/abap.
Damit stehen die Dokumentationsservices zur Verfgung. Planen Sie, spter
auch in Web Dynpro ABAP zu entwickeln, empfiehlt es sich, die dazu bentigten Services ebenfalls direkt zu aktivieren.
Web-Dynpro-Services
Die Web-Dynpro-Services werden mit einer Ausnahme nicht nur von den ADT
genutzt. Sie bentigen diese Services auch, wenn Sie Web Dynpro ABAP in der
ABAP Workbench entwickeln.

Gehen Sie beim Aktivieren der Web-Dynpro-Services genauso vor wie bei
der Aktivierung der Dokumentationsservices. Starten Sie Transaktion SICF,
und wechseln Sie in die Servicehierarchie. Aktivieren Sie nacheinander folgende Services und Knoten:
/default_host/sap/bc/webdynpro
(Aktivieren Sie nur den Knoten selbst, nicht die Unterknoten!)
/default_host/sap/public/bc/ur
/default_host/sap/public/bc/icons
/default_host/sap/public/bc/icons_rtl
/default_host/sap/public/bc/webicons
/default_host/sap/public/bc/pictograms
/default_host/sap/public/bc/webdynpro/*
(Aktivieren Sie smtliche Unterknoten ber den Button

.)

/default_host/sap/public/myssocntl
Zu Entwicklungszwecken werden zustzlich folgende Services bentigt:
/default_host/sap/public/bc/webdynpro/viewdesigner
/default_host/sap/bc/wdvd/
Darber hinaus aktivieren Sie zu Konfigurations- und Analysezwecken folgende Services. Diese Services sollten nur im Entwicklungssystem aktiv sein:
/default_host/sap/bc/webdynpro/sap/configure_application
/default_host/sap/bc/webdynpro/sap/configure_component

26

Backend-System

/default_host/sap/bc/webdynpro/sap/wd_analyze_config_appl
/default_host/sap/bc/webdynpro/sap/wd_analyze_config_comp
/default_host/sap/bc/webdynpro/sap/wd_analyze_config_user
Weitere Informationen
Eine aktuelle Liste der notwendigen Services finden Sie auch im SAP-Hinweis
1088717 und in der SAP-Hilfe unter: http://help.sap.com/saphelp_nw70ehp1/
helpdata/de/46/d28dfa34bb12bee10000000a1553f7/content.htm

Zu guter Letzt fehlt nur noch der Service fr den View Designer in Eclipse:
/default_host/sap/bc/webdynpro/sap/wdy_aie_vd_preview
Dieser sollte ebenfalls nur im Entwicklungssystem aktiv geschaltet werden.
Damit ist die Konfiguration des Backends abgeschlossen. Sie knnen nun mit
der Einrichtung von Eclipse beginnen. Wie Sie dazu vorgehen, ist in Abschnitt 1.2, Installation und Einrichtung der Entwicklungsumgebung,
beschrieben.

1.1.2

Amazon Web Services

Nicht jeder Entwickler kann sich glcklich schtzen, Zugriff auf einen brandneuen SAP NetWeaver AS 7.4 und eine SAP-HANA-Datenbank zu haben.
Und die wenigsten Unternehmen werden diese Investition ttigen, um den
Spieltrieb eines einzelnen Technikpioniers zu befriedigen. Zum Glck gibt
es im Zeitalter des Cloud Computings eine flexible und kostengnstige Alternative zu einem On-Premise-System. Cloud-Lsungen bieten eine einfache
Mglichkeit, ohne Hardware und ohne groen administrativen Aufwand
Rechenleistung bei Bedarf abzurufen. Voraussetzung ist, dass Sie Zugriff auf
die entsprechende Software haben bzw. dass der Cloud-Anbieter fertige
Lsungen bereithlt.
On-Premise und On-Demand
Beim Betreiben eines Servers gibt es Unterschiede hinsichtlich des Nutzungsmodells. Im Umfeld von SAP-Systemen tauchen dabei hufig die Begriffe On-Demand
und On-Premise auf.
On-Demand-Server werden meistens von Dienstleistern angeboten. Sie werden
nur bei Bedarf aktiviert. Das den Service in Anspruch nehmende Unternehmen
hat in der Regel keinen direkten Zugriff auf die Hardware.
Von On-Premise spricht man, wenn das System mit eigener Hardware im Unternehmen betrieben wird. Die Software, die auf dem System luft, wird entweder
gekauft oder entsprechend lizenziert.

27

1.1

Die ersten Schritte Hallo ADT

Die SAP SE stellt glcklicherweise kostenlos eine Reihe von Test- und Evaluierungssystemen bereit. Damit ist es Unternehmen oder Einzelpersonen
mglich, die neusten Entwicklungen zu testen, ohne unmittelbar Lizenzen
erwerben zu mssen. Diese Systeme werden allerdings nicht mehr als
Download angeboten. Stattdessen werden sie als Cloud-Lsung in der SAP
Cloud Appliance Library (CAL, https://cal.sap.com) bereitgestellt. So kann
jeder Entwickler auch ohne hauseigenes System ABAP in Eclipse oder andere
neue Features ausgiebig testen.
Die SAP SE bernimmt das Hosting der Systeme nicht selbst. Stattdessen
wird ein externer Cloud-Provider hinzugezogen. Derzeit werden nur Amazon und Microsoft (Azure) untersttzt. Im Folgenden betrachten wir lediglich die Verwendung der Amazon Web Services (AWS). Das beschriebene Vorgehen lsst sich aber auch auf die Microsoft-Lsung anwenden.
Zustzliche Kosten
Die SAP SE stellt die Testsysteme kostenlos zur Verfgung, allerdings fallen durch
die Amazon Web Services Gebhren an. Diese variieren je nach Systemanforderungen, Verfgbarkeit und Zugriffszone. Eine Preisliste finden Sie auf der Homepage der AWS unter https://aws.amazon.com/de/pricing/.

Der Amazon Web Service, den wir nutzen, heit Amazon Elastic Compute
Cloud (Amazon EC2). Amazon EC2 bietet die Mglichkeit, virtuelle Rechnerumgebungen sogenannte Instanzen im Handumdrehen zu erstellen und
zu betreiben. Es steht bereits eine groe Anzahl an Vorlagen (Templates) fr
Instanzen zur Verfgung. Diese Amazon Machine Images (AMIs) beinhalten
das Betriebssystem fr die neue Instanz sowie zustzliche Software. Hardwareparameter wie die Anzahl der Prozessoren, die Gre des Hauptspeichers oder die Netzwerkanbindung knnen je nach Bedarf und Anforderung
des AMIs gewhlt werden.
Instanzen knnen in verschiedenen Regionen betrieben werden. Fr unser
Szenario spielen diese Regionen erst mal eine untergeordnete Rolle. Versuchen Sie fr den Moment, immer in einer Region zu arbeiten. Dies vereinfacht Ihnen die Entwicklung anfangs ungemein.
Amazon stellt eine Webkonsole zur Verwaltung der Web Services bereit
(siehe Abbildung 1.4). Diese ist ber https://console.aws.amazon.com erreichbar. Zudem gibt es die Mglichkeit, den AWS-Account ber Kommandozeilen-Tools (Command-Line Interface, CLI) zu administrieren. Fr unsere Zwecke reicht die Weboberflche allerdings vollkommen aus.

28

Backend-System

Abbildung 1.4 AWS-Management-Konsole

Leider ist das Einrichten eines SAP NetWeaver AS auch als virtuelle AWS-Instanz nicht mit einem Klick erledigt. Damit dem Start mit ABAP in Eclipse
trotzdem nichts im Weg steht, nehmen wir die notwendigen Schritte
gemeinsam vor. Es gibt mehrere Wege, eine eigene Instanz (Virtual Appliance) in der Cloud einzurichten. Wundern Sie sich daher nicht, wenn Sie
beim Stbern im Netz Tutorials finden, die einen gnzlich anderen Ansatz
verfolgen. Ich habe versucht, einen pragmatischen Ansatz zu whlen, um
eine sichere und trotzdem einfache Lsung aufzubauen. Ich mchte Sie an
dieser Stelle aber auf die sehr gute und ausfhrliche Dokumentation zur
SAP Cloud Appliance (https://cal.sap.com/res/doc_de/frameset.htm) sowie zu
den Amazon Web Services (http://docs.aws.amazon.com/gettingstarted/latest/
awsgsg-intro/gsg-aws-tutorials.html#getstarted-account) verweisen.

29

1.1

Die ersten Schritte Hallo ADT

AWS-Account
Im Folgenden wird davon ausgegangen, dass Sie ber einen AWS-Account verfgen. Falls dies nicht der Fall ist, knnen Sie diesen einfach unter https://aws.amazon.de anlegen. Zur Registrierung wird zwingend eine gltige Kreditkarte bentigt,
ber die spter die Abrechnung erfolgen wird. Durch die Registrierung selbst entstehen zunchst noch keine Kosten.

Um den SAP NetWeaver AS in der Cloud verfgbar zu machen, sind drei


Schritte notwendig, die in den folgenden Abschnitten erlutert werden.

Erstellen eines Benutzers fr die Amazon Web Services


Die AWS liefern nur die Infrastruktur, um ein Image des SAP-Systems zu
betreiben. Die Inbetriebsetzung (Deployment) erfolgt durch die SAP Cloud
Appliance Library (CAL). Damit die CAL fr Sie die Arbeit des Aufsetzens
bernehmen kann, bentigt sie Zugriff auf die AWS-Schnittstellen (APIs).
Dieser Zugriff erfolgt ber einen AWS-Benutzer, der ber die entsprechenden Berechtigungen verfgt.
Sie fragen sich jetzt vielleicht, wozu wir noch mal einen Benutzer anlegen
mssen, denn im Rahmen der Anmeldung fr die AWS haben Sie ja schon
einen AWS-Benutzer erstellt, Ihre Daten angegeben und sogar Ihre Kreditkartennummer hinterlegt. Genau aus diesem Grund bentigen wir noch
einen weiteren Benutzer, der nicht alles ber Sie wei. Sie geben ja auch
nicht einfach dem Nachbarsjungen Ihre Kreditkarte, damit er fr Sie eine
Tte Chips kaufen geht. Bestenfalls geben Sie ihm den passenden Betrag in
bar. Genauso wenig sollten Sie Ihren AWS-Benutzer angeben, wenn Sie sich
ber einen Drittanbieter fr die AWS-Schnittstellen authentifizieren wollen.
Stattdessen verwenden Sie das AWS Identity and Access Management (IAM),
ber das Sie einen IAM-Benutzer anlegen und ihn mit den passenden Rechten ausstatten knnen. Fhren Sie folgende Schritte aus, um einen neuen
IAM-Benutzer zu erstellen:
1. Rufen Sie die URL https://console.aws.amazon.com/iam/ in einem Browser
auf, um direkt zur IAM-Konsole zu gelangen.
2. Whlen Sie aus dem Men Groups und dann Create New Group, um eine
neue Benutzergruppe anzulegen (siehe Abbildung 1.5).
3. Vergeben Sie einen Namen fr die neue Gruppe (z. B. ADT_Developers),
und besttigen Sie mit Next Step (siehe Abbildung 1.6).

30

Backend-System

Abbildung 1.5 Neue Benutzergruppe in der IAM-Konsole anlegen

Abbildung 1.6 Gruppennamen vergeben

4. Whlen Sie unter Select Policy Template die Berechtigung Amazon EC2
Full Access (siehe Abbildung 1.7). Besttigen Sie Ihre Auswahl mit
Select.
5. Sie haben nun noch die Mglichkeit, die Policy anzupassen. Dies ist aber
nicht notwendig. Fahren Sie mit Next Step fort.

31

1.1

Die ersten Schritte Hallo ADT

6. Sie bekommen nun noch einmal die Zusammenfassung Ihrer neuen


Gruppe. Legen Sie diese mit Create Group an.

Abbildung 1.7 Berechtigung whlen

Zustzlich zur Gruppe mssen wir nun noch einen Benutzer anlegen:
1. Whlen Sie in der IAM-Management-Konsole den Eintrag Users in der
Navigationsleiste auf der linken Seite (siehe Abbildung 1.5) und anschlieend Create New User, um den Anlage-Prozess zu starten.
2. Geben Sie den Namen Ihres neuen Benutzers (ADT_Developer) an. An dieser Stelle knnten auch mehrere Benutzer erstellt werden. Besttigen Sie
mit Create.
3. Nun haben Sie die Mglichkeit, sich die Zugangsdaten Ihres Benutzers
anzeigen zu lassen. Mit Show User Credentials werden Ihnen die Access
Key ID sowie der Secret Access Key (siehe Abbildung 1.8) angezeigt. Merken Sie sich diese Daten. Beides bentigen Sie spter noch.

32

Backend-System

Abbildung 1.8 Zugangsdaten des neuen IAM-Benutzers

Access Key ID und Secret Access Key


Mittels Access Key ID und Secret Access Key ist es mglich, sich gegenber der AWSSchnittstelle zu authentifizieren. Mit den Rechten, die Sie dem neuen Benutzer zuteilen, kann dieser so EC2-Instanzen erstellen und starten. Dies kann Kosten verursachen. Sorgen Sie also dafr, dass Ihre Zugangsdaten nicht in falsche Hnde geraten!

4. Whlen Sie den Button Download Credentials (siehe Abbildung 1.8),


um ein Schlsselpaar herunterzuladen. Das Schlsselpaar bentigen Sie,
falls Sie sich direkt an Ihrem SAP-Server anmelden mchten.
5. Beenden Sie den Anlage-Prozess mit Close.
Schlsseldatei sicher aufbewahren
Bewahren Sie die Schlsseldatei gut und sicher auf. Sie knnen sie nicht noch einmal herunterladen. Es ist nur mglich, ein neues Schlsselpaar zu generieren. Seien
Sie sich zudem dessen bewusst, dass diese Datei einem Passwort entspricht.
Behandeln Sie sie deshalb auch so.

Damit haben Sie eine neue Benutzergruppe mit einem neuen Benutzer angelegt. Darber hinaus haben Sie die Zugangsdaten fr diesen Benutzer erhalten. Der Benutzer muss nun noch der Gruppe hinzugefgt werden. Zudem
konnten Sie im Assistenten nur eine Berechtigung auswhlen. Sie bentigen
aber noch drei weitere, die wir nun der Benutzergruppe hinterlegen.
1. Navigieren Sie in der IAM-Konsole ber Groups zur Gruppenbersicht
(siehe Abbildung 1.9).

33

1.1

Die ersten Schritte Hallo ADT

Abbildung 1.9 Navigation zur Gruppenbersicht

2. Klicken Sie auf die Gruppe ADT_Developers und anschlieend auf den
Button Add User to Group (siehe Abbildung 1.10).

Abbildung 1.10 Die Gruppe ADT_Developers

3. Sie erhalten eine Liste aller verfgbaren Benutzer. Setzen Sie eine Markierung bei dem Benutzer, den Sie zuvor angelegt haben, und klicken Sie auf
Add Users, um diesen Benutzer hinzuzufgen.

34

Backend-System

4. Klicken Sie nun in der Gruppenbersicht auf den Button Attach Another
Policy. Sie gelangen zu einer Auswahlliste. Whlen Sie hier nacheinander:
Read Only Access
Amazon VPC Full Access
AWS Account Usage Report Access
Damit ist der IAM-Benutzer eingerichtet und mit den notwendigen Berechtigungen ausgestattet.

Einrichten des Kontos fr die SAP Cloud Appliance


Als Nchstes kmmern wir uns um ein Konto fr die SAP Cloud Appliance
Library (CAL). Zunchst bentigen Sie dazu einen CAL-Benutzer. Anschlieend mssen Sie Ihr CAL-Konto mit Ihrem AWS-Konto verknpfen.
1. Rufen Sie die Seite http://cal.sap.com auf, und klicken Sie auf Anmelden. Falls
Sie schon ber einen CAL-Benutzer verfgen, geben Sie hier Ihre Zugangsdaten an. Andernfalls legen Sie ber die Schaltflche Jetzt registrieren
einen neuen Benutzer an. Fr die nchsten Schritte gehe ich davon aus, dass
Sie ber einen Benutzer verfgen und sich erfolgreich anmelden konnten.
2. Wechseln Sie auf die Registerkarte Konten (siehe Abbildung 1.11). Hier
finden Sie eine bersicht aller bereits angelegten Konten. ber ein Konto
stellen Sie die Assoziation zum Cloud-Anbieter her in unserem Fall Amazon. Whlen Sie Konto Anlegen, um fortzufahren.

Abbildung 1.11 Kontobersicht der SAP Cloud Appliance

3. Vergeben Sie zunchst einen Namen und eine (optionale) Beschreibung


fr das neue Konto (siehe Abbildung 1.12). Fahren Sie mit Weiter fort.

35

1.1

Die ersten Schritte Hallo ADT

Abbildung 1.12 Allgemeine Kontoinformationen

4. Als Nchstes wird die Anbindung zum Cloud-Anbieter konfiguriert. Whlen Sie Amazon Web Services aus. Dann bentigen Sie nmlich die Access
Key ID und den Secret Access Key Ihres IAM-Benutzers. Diese geben Sie in
die Felder Zugriffsschlssel und Secret Key ein (siehe Abbildung 1.13).
Das Feld Kostenzuordnung mssen Sie nicht ausfllen. (Oder Sie treffen
sich mit Ihrem Controller auf einen Kaffee, um zu errtern, was Sie dort
eintragen knnen.)
5. Springen Sie mit Weiter zur nchsten Seite.

Abbildung 1.13 Zugangsdaten zum Cloud-Anbieter angeben

6. Nun knnen Sie dem neuen Konto einen Benutzer zuordnen (siehe Abbildung 1.14). Falls Sie den CAL-Account gerade erst erstellt haben und diesen allein verwenden, mssen Sie hier nicht ttig werden. Ihr neu angeleg-

36

Backend-System

ter Benutzer ist automatisch Inhaber des Kontos und damit auch
berechtigt, dieses zu verwenden. Besttigen Sie mit Weiter.

Abbildung 1.14 Kontobenutzer dem Konto zuordnen

7. Sie knnen sich optional eine Kostenprognose erstellen lassen (siehe


Abbildung 1.15). Dadurch knnen Sie in etwa abschtzen, wie teuer es
sein wird, eine Instanz in der Cloud zu betreiben. Der hier errechnete
Wert ist allerdings nur eine grobe Richtschnur. Mit Weiter gelangen Sie
zur letzten Seite.

Abbildung 1.15 Kostenprognose

8. Zuletzt wird Ihnen die Zusammenfassung Ihrer Einstellungen prsentiert.


berprfen Sie die Richtigkeit Ihrer Angaben, und besttigen Sie die
Anlage des Kontos mit Fertigstellen.

37

1.1

Die ersten Schritte Hallo ADT

Kostengnstigste Regionen
Die Kosten einer Cloud-Instanz hngen stark von der Region ab, in der sie betrieben wird. Da es sich bei unserer Cloud-Nutzung nicht um ein Hochverfgbarkeitsszenario handelt, bei dem niedrige Latenzzeiten eine wichtige Rolle spielen, empfehle ich Ihnen, sich bei der Auswahl der Region primr nach den Preisen zu richten. Derzeit gehrt die Region us-east-1 zu den preisgnstigsten Regionen. ber
die Preisprognose knnen Sie sich aber selbst einen Eindruck davon verschaffen,
welche aktuell die gnstigste Alternative ist.

In der Liste der Konten sollte nun Ihr neu erstelltes Konto auftauchen. Damit
sind wir nun so weit, eine Lsungskonfiguration auszuwhlen und in die
Cloud zu bringen.

Auswahl und Aktivierung der virtuellen Umgebung


SAP CAL stellt eine Bibliothek sogenannter Lsungen bereit. Bei einer Lsung
handelt es sich um ein fertiges Paket, das aus einem oder mehreren Amazon
Machine Images besteht. Diese beinhalten verschiedene SAP-Komponenten,
z. B. einen SAP NetWeaver AS ABAP, die als Instanz in der Amazon Cloud
betrieben werden knnen. Die notwendigen Schritte zur Installation und
Konfiguration der Instanzen nimmt Ihnen SAP CAL dabei grtenteils ab.
Eine vollstndige Liste der verfgbaren Lsungen finden Sie unter https://
cal.sap.com auf der Registerkarte Lsungen. In der Liste finden Sie sowohl
kostenlose als auch kostenpflichtige Lsungen. ber die Auswahlbox Ansicht
knnen Sie die Auswahl auf die kostenlosen Eintrge eingrenzen. Alternativ
erhalten Sie auf der Seite des SAP Community Networks (SCN, http://
scn.sap.com/docs/DOC-41566) eine gekrzte Liste mit Entwicklungs- bzw. Evaluierungssystemen sowie einigen Links zu ergnzenden Informationen.
Verfgbare Lsungen
Die folgende Anleitung bezieht sich auf die Lsungen, die zum Zeitpunkt der Verffentlichung dieses Buches zur Verfgung standen. Die Bezeichnung der Lsungen kann sich durch Aktualisierungen ndern. Sie bentigen in jedem Fall eine
Lsung mit SAP NetWeaver Application Server ABAP. SAP HANA als Datenbank
ist nicht zwingend erforderlich, eine SAP-MaxDB-basierte Lsung kommt mit einer
deutlich kleiner dimensionierten und damit gnstigeren Amazon-Instanz aus.
Allerdings knnen Sie damit unter Umstnden einige der hier besprochenen Funktionen nicht in vollem Umfang nutzen.

Beginnen wir mit dem Einrichten unseres SAP NetWeaver Application


Servers.

38

Backend-System

1. Suchen Sie in der Liste der Lsungen z. B. den Eintrag SAP Application
Server ABAP 7.4 SP8 & Business Warehouse on SAP HANA 1.0 SP07
[Developer Edition], und whlen Sie Jetzt testen (siehe Abbildung 1.16).

Abbildung 1.16 bersicht der verfgbaren Lsungen

Aufbau der Lsung


Die gewhlte Lsung besteht aus zwei Instanzen, die in der Amazon Cloud installiert werden:
der Backend-Instanz, die den Server inklusive SAP HANA beinhaltet
einer (deutlich kleiner dimensionierten) Microsoft-Windows-Frontend-Instanz.
Dabei handelt es sich um einen vorkonfigurierten Arbeitsplatz, mit dem Sie
sofort loslegen knnen, zu arbeiten.
Verwenden Sie eine andere Lsung, kann es sein, dass die Frontend-Instanz fehlt.
Der Anleitung sollten Sie trotzdem folgen knnen.

2. Lesen und besttigen Sie die allgemeinen Geschftsbedingungen. Die


Anzeige vor dem Eintrag sollte nun auf Grn springen, und die Aktionstaste ndert ihren Text in Aktivieren.
Aktivieren nicht mglich
Sollte die Schaltflche Aktivieren wie in Abbildung 1.16 grau bleiben, gibt es Probleme mit dem Konto, bzw. es wurde gar kein Konto angelegt. Sobald die entsprechenden Informationen hinterlegt wurden, knnen Sie fortfahren.

39

1.1

Die ersten Schritte Hallo ADT

3. Whlen Sie Aktivieren, um die Instanz mit dem Konto zu verknpfen und
den Deployment-Prozess freizuschalten. Die Bezeichnung des Links
ndert sich in Instanz anlegen. Klicken Sie auf den Link, um mit der
Anlage zu beginnen.
4. Hinterlegen Sie fr Ihre Lsung wie in Abbildung 1.17 einen Namen und
eine Beschreibung. Anschlieend whlen Sie das Konto und die Region
aus, in der die Instanzen betrieben werden sollen.

Abbildung 1.17 Allgemeine Eigenschaften definieren

5. Im Auswahlfeld Zugriff aus stehen Ihnen die Optionen ffentliches


Netzwerk und Unternehmensnetzwerk zur Verfgung. Der Einfachheit
halber whlen Sie hier ffentliches Netzwerk. Damit steht Ihr System
allerdings offen im Internet. ber die Auswahl Statische IP-Adresse sorgen Sie zudem dafr, dass die Systeme immer ber die gleiche Adresse
erreichbar sind.
Statische IP-Adresse
Bei der Verwendung des ffentlichen Netzwerks ist es in unserem Fall zwingend
notwendig, statische IP-Adressen zu verwenden. Das liegt daran, dass unsere
Lsung aus zwei Instanzen besteht. Diese beiden Instanzen (genauer gesagt, die
Frontend-Instanz mit dem Server) mssen miteinander kommunizieren. Wrde sich
die IP-Adresse bei jedem Neustart der Lsung ndern, mssten auf der FrontendInstanz auch jedes Mal verschiedene Einstellungen angepasst werden. Fr die
Reservierung einer statischen IP fallen allerdings zustzliche Kosten bei Amazon an.

40

Backend-System

Virtual Private Cloud


Grundstzlich spricht nichts dagegen, einen Server ffentlich ins Netz zu stellen.
Das macht viele Dinge gerade zu Anfang sehr viel einfacher. Allerdings sollten Sie
sich darber im Klaren sein, dass damit jeder diesen Server aus dem Internet erreichen kann. Das macht den Server zu einem potenziellen Angriffsziel. Alternativ
knnen Sie eine Virtual Private Cloud (VPC) erstellen. Damit knnen Instanzen in
einem privaten Bereich (hnlich einem internen Netzwerk) betrieben werden, der
von auen nicht direkt erreichbar ist. Der Zugriff erfolgt dann ber einen VPN-Server mit einer einzelnen IP ber einen einzelnen Port (einen sogenannten VPN-Tunnel). Die eigentlichen Server werden erst sichtbar, wenn man sich im VPN bzw. in
der VPC befindet. Eine ausfhrliche Anleitung zum Betreiben der Lsungsinstanzen in einer VPC finden Sie unter http://scn.sap.com/docs/DOC-46629.

6. Im Schritt Virtual Machine konfigurieren haben Sie die Mglichkeit,


die Parameter der zu erstellenden Instanzen anzupassen (siehe Abbildung
1.18). Zunchst knnen Sie die Dimensionierung der Maschine whlen.
Fr das Frontend steht nur die Gre m1.medium zur Verfgung. Fr das
Backend whlen wir die empfohlene Gre m2.4xlarge. Den Volume-Typ
belassen wir fr unser Entwicklungssystem ebenfalls auf Standard.

Abbildung 1.18 Virtuelle Maschine konfigurieren

41

1.1

Die ersten Schritte Hallo ADT

7. Anschlieend knnen Sie die Zugriffspunkte zu Ihren Systemen konfigurieren. Dies sind die Ports, die fr die Instanzen nach auen freigegeben
werden. Da wir uns im ffentlichen Netz bewegen, empfehle ich Ihnen,
so wenige Ports wie mglich freizugeben. Zwangslufig bentigt werden
Port 3389 fr das Frontend (Remote Desktop Port) sowie Port 22 (SSH)
fr den Server. Wechseln Sie mit Weiter zum nchsten Schritt.
8. Whlen Sie nun ein Lsungspasswort. Dieses Passwort dient spter dazu,
eine Verbindung zur Lsung herzustellen, und ist das (Initial-)Passwort
fr den SAP NetWeaver AS. Merken Sie sich daher auch dieses Passwort
gut. Geben Sie das gewhlte Passwort zweimal ein, und fahren Sie mit
Weiter fort.
9. Sie knnen nun auswhlen, ob die Instanz automatisch gestartet und
gestoppt werden soll. Das ist insbesondere dann sinnvoll, wenn der Server tglich genutzt wird. In unserem Beispiel whlen wir aber die manuelle Variante.
Kosten durch laufende Instanzen
Vergessen Sie nicht, die Instanz zu stoppen, wenn sie nicht bentigt wird. Amazon
rechnet die Instanzen nach Betriebsdauer ab, nicht nach tatschlicher Benutzung.
Eine laufende Instanz kostet auch laufend Geld.

10. Sie erhalten noch einmal eine (unverbindliche) Hochrechnung der Kosten pro Stunde und Woche (basierend auf der Annahme, dass die
Lsungsinstanz nicht gestoppt wird). Fahren Sie mit Weiter fort.
11. Sie erhalten nun eine Zusammenfassung Ihrer Angaben. Mit einem Klick
auf Fertigstellen starten Sie die Installation der Lsungsinstanz. Der Initialisierungsprozess der Instanzen wird durch ein kleines grnes Symbol
( ) in der Liste der Lsungsinstanzen angezeigt. Dieser Prozess kann ca.
40 Minuten in Anspruch nehmen genug Zeit, um die angebotene Dokumentation zu studieren oder den versprochenen Kaffee mit dem Controller trinken zu gehen.
Sobald die Lsungsinstanz bereit ist, verschwindet die kleine Uhr auf dem
grnen Statussymbol. Sie knnen nun am Frontend testen, ob die Einrichtung funktioniert hat.

Virtual Appliance einrichten und testen


Auf unserer Frontend-Instanz luft Windows als Betriebssystem. Zudem sind
das SAP Logon Pad sowie das SAP HANA Studio bereits vorinstalliert und

42

Backend-System

eingerichtet. Auf die Instanz kann per Remote Desktop zugegriffen werden.
Sollten Sie sich von einem Windows-System aus anmelden, knnen Sie einfach die mitgelieferte Remote Desktop Connection ( ) verwenden, um sich mit
der Frontend-Instanz zu verbinden. Sie finden sie im Startmen unter Zubehr bei Ausfhrung der Datei mstsc.exe (() + (R)). Fr Mac OS X steht im
Mac App Store die Verbindung Microsoft Remote Desktop gratis zur Verfgung. Linux bietet mehrere Open-Source-Varianten wie rdesktop (http://
www.rdesktop.org/) oder FreeRDP (http://www.freerdp.com/).
Lsungen ohne Frontend-Instanz
Einige der kleineren Lsungen werden ohne Frontend-Instanz ausgeliefert. In diesem Fall steht Ihnen leider auch keine vorinstallierte Arbeitsumgebung zur Verfgung, sondern Sie knnen nur lokal auf Ihrem Rechner arbeiten. Wie Sie Ihren
Rechner einrichten mssen, wird im Abschnitt Entwicklungssystem lokal verwenden beschrieben. Die hier aufgelisteten Schritte knnen Sie auch mit einer lokalen
SAP-GUI-Installation ausfhren. Lesen Sie dazu zuerst den Abschnitt Entwicklungssystem lokal verwenden.

Verbinden wir uns nun mit unserer Lsungsinstanz:


1. Stellen Sie sicher, dass Server und Frontend aktiviert wurden. Dies ist der Fall,
wenn das grne Symbol ( ) vor dem Eintrag in der Instanzliste erscheint.
2. Klicken Sie auf den Namen der Lsungsinstanz, um zur Detailseite zu
wechseln. Notieren Sie sich die IP-Adresse Ihrer Frontend-Instanz (siehe
Abbildung 1.19).

Abbildung 1.19 Frontend-IP ermitteln (IPs wurden ausgetauscht)

43

1.1

Die ersten Schritte Hallo ADT

3. Starten Sie Ihren Remote-Desktop-Client, und geben Sie die IP-Adresse des
SAP-Frontends ein. Starten Sie die Sitzung, indem Sie auf den Button Verbinden klicken.
4. Geben Sie folgende Zugangsdaten ein:
Benutzer: Administrator
Passwort: <Lsungspasswort>
Bei dem Lsungspasswort handelt es sich um das Passwort, das Sie bei der
Anlage der Instanz in der SAP CAL vergeben haben.
Sie sollten nun den Desktop Ihrer SAP-Frontend-Instanz sehen. Als Nchstes
berprfen Sie die Verbindung zum Backend-Server und installieren eine
Mini-SAP-Lizenz, um den SAP NetWeaver AS nutzen zu knnen.
Registrierung als SAP-Entwickler
Sollten Sie vor der Installation der Lizenz versuchen, mit dem Entwicklungsbenutzer ein Objekt anzulegen, werden Sie gebeten, den Benutzer als Entwickler
bei SAP zu registrieren. Nachdem Sie die Lizenz eingespielt haben, ndert sich
die Installationsnummer des Servers. Fr diese Installationsnummer ist der
Benutzer DEVELOPER bereits registriert, sodass Sie direkt mit der Entwicklung loslegen knnen.

1. Starten Sie das SAP Logon Pad ( ) auf der Frontend-Instanz. Whlen Sie
den Eintrag A4H Developer Edition, und starten Sie die Verbindung per
Doppelklick.
2. Auf dem Logon-Bildschirm geben Sie folgende Anmeldedaten ein:
Mandant: 000
Benutzer: DDIC
Passwort: <Lsungspasswort>
Starten Sie Transaktion SLICENSE.
3. Markieren und kopieren Sie den Hardwareschlssel mit (Strg) + (C) aus
dem Feld Active Hardware Key (siehe Abbildung 1.20).
4. ffnen Sie die URL http://www.sap.com/minisap in Ihrem Browser, und
fllen Sie das Formular aus (siehe Abbildung 1.21).
Sie bentigen einen gltigen SCN-Benutzer, um eine Lizenz zu beantragen.
Falls Sie nicht ber einen Benutzer verfgen, registrieren Sie sich unter
http://scn.sap.com/.

44

Backend-System

Abbildung 1.20 Transaktion SLICENSE

5. Im Bereich Systeminfo whlen Sie zuerst die System-ID des Systems, das
Sie registrieren mchten, aus. In unserem Fall ist dies das System A4H.
Anschlieend geben Sie den Hardwareschlssel ein, den Sie aus Transaktion SLICENSE kopiert haben.
6. Schlielich beantragen Sie den Lizenzschlssel, indem Sie auf Senden klicken. Der Lizenzschlssel wird an die angegebene E-Mail-Adresse gesendet. Dies kann einige Minuten dauern.
7. Haben Sie den Lizenzschlssel erhalten, knnen Sie ihn auf dem Backend
einspielen. Laden Sie dazu die Lizenzdatei auf die Frontend-Instanz.
8. Wechseln Sie dann wieder in das SAP GUI, und starten Sie Transaktion
SLICENSE (siehe Abbildung 1.20). Klicken Sie auf die Schaltflche Install,
und whlen Sie die Lizenzdatei. Der Server sollte die Installation mit der
Erfolgsmeldung 1 SAP license key(s) successfully installed. quittieren.
9. berprfen Sie nun, ob das System korrekt freigeschaltet wurde. Wechseln Sie dazu in Transaktion SECSTORE, und nehmen Sie einen Check vor,
indem Sie die Taste (F8) drcken.

45

1.1

Die ersten Schritte Hallo ADT

Abbildung 1.21 Beantragen einer Mini-SAP-Lizenz

10. Ihnen wird eine Liste mit den Ergebnissen des Laufs angezeigt. Alle Eintrge sollten nun wie in Abbildung 1.22 mit einer grnen Ampel gekennzeichnet sein.
11. Sie knnen sich nun vom SAP GUI abmelden oder sich weiter im System
umschauen.
Auf dem Server sind die in Tabelle 1.2 aufgelisteten Mandanten und Benutzer vorhanden. Alle Benutzer sind initial mit dem Lsungspasswort angelegt
worden. Sie sollten dieses Passwort aus Sicherheitsgrnden fr alle Benutzer
ndern.

46

Backend-System

Abbildung 1.22 Ergebnis der Systemprfung in Transaktion SECSTORE

Mandant

Benutzer

000

SAP*
DDIC

001

SAP*
DDIC
DEVELOPER
(BWDEVELOPER)

Tabelle 1.2 Benutzer des Testsystems

Der Benutzer DEVELOPER ist so eingerichtet, dass Sie mit ihm sofort auf dem
Mandanten 001 entwickeln knnen, d. h., es ist keine weitere Registrierung
oder hnliches notwendig. Er verfgt zudem ber das Profil SAP_ALL, er ist
auf dem Server also mit vollen Berechtigungen ausgestattet.

Entwicklungssystem lokal verwenden


Zwar ist es sehr praktisch, dass bei der Developer Edition des SAP NetWeaver AS auch eine Frontend-Instanz angelegt wird, da Sie so einfach ohne Installationen auf dem eigenen Rechner loslegen knnen. Allerdings ist es oft
angenehmer, direkt auf dem eigenen PC mit allen installierten Programmen und ohne durch die Remote-Verbindung begrndete Verzgerung zu
arbeiten. Daher kmmern wir uns in diesem Abschnitt darum, das Entwicklungssystem fr unseren lokalen Rechner einzurichten. Dieser Schritt ist

47

1.1

Die ersten Schritte Hallo ADT

optional, prinzipiell knnen Sie auf der Frontend-Instanz auch weiter per
Remote Desktop arbeiten.
Frontend-Instanz beenden
Sollten Sie sich dazu entscheiden, lokal zu arbeiten, knnen Sie die Frontend-Instanz zuknftig nach dem Start direkt wieder ber die Elastic Cloud Computing
Console (https://console.aws.amazon.com/ec2) beenden oder nur den BackendServer in der AWS-Konsole starten.

Zunchst bentigen Sie ein SAP GUI auf Ihrem Rechner. Sollten Sie noch
nicht ber eine solche Installation verfgen, finden Sie die notwendigen Installationsdateien auf der Frontend-Instanz auf dem Laufwerk D:/. Sie knnen diese z. B. ber die Remote-Desktop-Verbindung herunterladen. Im Folgenden gehe ich davon aus, dass Sie ein funktionsfhiges SAP GUI zur
Verfgung haben.
Lsungen ohne Frontend-Instanz
Sollten Sie als Lsung SAP NetWeaver AS 7.4 on SAP MaxDB gewhlt haben,
wurde nur das Linux-Image initialisiert. In diesem Fall finden Sie die Installationsdateien des SAP GUIs im Verzeichnis /sapmnt/<Instanzname>/custom/. Um an die
Daten zu gelangen, knnen Sie WinSCP (http://winscp.net/) oder ein vergleichbares Programm verwenden. Alternativ steht die aktuelle Version des SAP GUIs auch
im SAP Marketplace zum Download zur Verfgung.

Nun mssen Sie sich darum kmmern, dass die Backend-Instanz von Ihrem
lokalen Rechner aus erreichbar ist. Derzeit ist der allgemeine Zugriff auf den
SAP-Server nur auf den SSH-Port 22 beschrnkt. Vollen Zugriff hat nur die
Frontend-Instanz. Eine bersicht ber die freigegebenen Ports erhalten Sie
in der SAP Cloud Appliance Library in den Details zu Ihrer Lsungsinstanz
auf der Registerkarte Virtual Machine. Der Eintrag 0.0.0.0/0 in der Spalte IPBereich gibt brigens an, dass alle IP-Adressen Zugriff auf das System haben.
Eine vergleichbare bersicht steht Ihnen auch in der EC2-Konsole der Amazon Web Services zur Verfgung.
Es wre mglich, den SAP-Server vollstndig nach auen hin zu ffnen.
Allerdings ist dies aus sicherheitstechnischen Grnden bei einer ffentlich
verfgbaren Instanz nicht sinnvoll. Daher geben wir nur die Ports frei, die
wir bentigen, um den SAP NetWeaver AS in vollem Umfang nutzen zu knnen (siehe Abbildung 1.23).

48

Backend-System

Abbildung 1.23 Freigegebene Backend-/Frontend-Ports

VPC-Zugriff
Sollten Sie den Server in einer Virtual Private Cloud betreiben, knnen Sie auch alle
TCP-Ports (TCP = Transmission Transport Protocol) innerhalb dieser privaten Cloud
freigeben. Der Zugriff von auen ist dann nur mglich, wenn eine Verbindung zum
privaten Netz besteht.

Um den SAP NetWeaver AS auch von Ihrem lokalen Frontend aus erreichen
zu knnen, konfigurieren Sie nun die entsprechenden Zugriffspunkte.
1. ffnen Sie unter http://cal.sap.com die bersicht Ihrer Instanzen, und
wechseln Sie in den Detailbereich Ihrer ADT-Entwicklungsinstanz.
2. Whlen Sie Bearbeiten, um die Einstellungen Ihrer Instanz zu ndern. Sie
mssen die Instanz dazu nicht stoppen.
3. Wechseln Sie zur Registerkarte Virtual Machine.
4. Fgen Sie unter Zugriffspunkte nacheinander die Eintrge aus Tabelle 1.3
ein. Im Auswahlfeld Virtual Machine geben Sie dabei immer SAP Server
an (siehe Abbildung 1.24). Die HANA-bezogenen Ports sind optional und
mssen nur freigegeben werden, falls Sie planen, mit dem SAP HANA Studio zu arbeiten. Eine aktuelle Liste der bentigten Ports finden Sie bri-

49

1.1

Die ersten Schritte Hallo ADT

gens auch in der Dokumentation (verfgbar unter https://cal.sap.com ber


den Link Benutzerleitfaden in den Details Ihrer jeweiligen Instanz).
5. Sichern Sie Ihre nderungen.
Protokoll

Port

IP-Bereich

Beschreibung

TCP

3200

0.0.0.0/0

SAP Dispatcher

TCP

3300

0.0.0.0/0

SAP Gateway

TCP

3601

0.0.0.0/0

Message Server

HTTP

8002

0.0.0.0/0

HTTP (HANA XS)

TCP

30215

0.0.0.0/0

externes HANA-SQL-Interface

HTTP

50000

0.0.0.0/0

AS-ABAP-HTTP-Port

HTTPS

50001

0.0.0.0/0

AS-ABAP-HTTPS-Port

TCP

50213

0.0.0.0/0

HANA Instance Agent

TCP

50214

0.0.0.0/0

HANA Instance Agent (SSL)

Tabelle 1.3 Zugriffspunkte des SAP-Servers

Abbildung 1.24 Ports hinzufgen

Unautorisierten Zugriff auf den Server vermeiden


Falls Sie ber eine feste IP oder einen festen IP-Bereich ins Internet gehen, knnen
Sie auch diese IP bzw. diesen Bereich anstelle von 0.0.0.0/0 angeben. Das
erschwert den unautorisierten Zugriff auf Ihren Server. Mit der in Tabelle 1.3 aufgelisteten Konfiguration hat jeder aus dem Internet Zugriff auf Ihren Server. (Es sei
denn, der Server befindet sich in der VPC.)

50

Backend-System

Einige Funktionen der ADT bentigen den vollqualifizierten Hostnamen des


SAP NetWeaver AS. Daher empfiehlt es sich, diesen in der Datei hosts zu hinterlegen. Hier knnen Sie Hostnamen einer IP-Adresse zuordnen.
1. ffnen Sie die Datei hosts unter C:\Windows\System32\drivers\etc\hosts
(bzw. etc/hosts unter Linux und OS X) mit Notepad oder einem Text-Editor
Ihrer Wahl. Achten Sie darauf, den Editor im Administratormodus zu starten, da Sie die Datei hosts sonst unter Umstnden nicht berschreiben
drfen.
2. Fgen Sie am Ende der Datei eine neue Zeile mit folgendem Inhalt an:
255.255.255.254 abapci abapci.dummy.nodomain

Ersetzen Sie 255.255.255.254 dabei durch die IP-Adresse Ihrer BackendInstanz.


3. Sichern Sie Ihre nderungen. Sollte das Speichern fehlschlagen, berprfen Sie, ob Ihr Virenscanner oder hnliche Sicherheitsprogramme die
Hostdatei vor Vernderungen schtzt.
Nun knnen Sie Ihre in der Cloud betriebene Server-Instanz wie einen Server in Ihrem Firmennetz verwenden. Um sich ber das SAP Logon Pad
anmelden zu knnen, erstellen Sie als Nchstes einen Eintrag:
1. ffnen Sie das SAP Logon Pad.
2. Whlen Sie Neu ( ), und berspringen Sie die erste Seite mit Weiter.
Geben Sie die Zugangsdaten fr Ihr System ein (siehe Abbildung 1.25).

Abbildung 1.25 Neuen Systemeintrag erstellen

51

1.1

Die ersten Schritte Hallo ADT

3. Haben Sie die Datei hosts angepasst, tragen Sie im Feld Anwendungsserver abapci ein, haben Sie den Dateinamen nicht gendert, tragen Sie die
IP-Adresse Ihres SAP-Servers ein. Die Instanznummer lautet 00 und die
System-ID A4H. Je nach gewhlter Lsung kann die ID abweichen. Das
Feld SAProuter-String kann leer bleiben.
4. Besttigen Sie die Anlage des Systemeintrags mit Fertig stellen.
5. Whlen Sie den neu erstellten Eintrag aus der Liste der SAP-Systeme im
SAP Logon Pad. Ihnen sollte nun die Anmeldemaske angezeigt werden.
Melden Sie sich mit dem anfangs vergebenen Masterpasswort als Benutzer
DEVELOPER am Mandanten 001 an.

1.2

Installation und Einrichtung der


Entwicklungsumgebung

Sie sollten nun einen konfigurierten SAP NetWeaver AS zur Verfgung


haben, entweder als virtuelle Instanz in der Cloud oder als On-PremiseLsung, etwa bereitgestellt von der unternehmensinternen IT-Abteilung. In
beiden Fllen kann Eclipse als lokale Installation verwendet werden. Fr die
Instanz in der Amazon Cloud sind lediglich einige Vorarbeiten zu erledigen.
Voraussetzungen
Mchten Sie die ADT nutzen, mssen einige Voraussetzungen erfllt sein:
Sie verfgen ber eine funktionsfhige Installation des SAP GUIs 7.30 (sowohl
SAP GUI for Windows als auch Java).
Sie haben Java Runtime Environment (JRE) mindestens in Version 1.6 installiert.
Sie verfgen ber Eclipse 4.3 (Kepler) oder 4.4 (Luna).
Achten Sie darauf, dass Sie durchgehend nur die 32-Bit- oder 64-Bit-Versionen
nutzen.

Falls Sie noch nicht ber das SAP GUI verfgen, empfehle ich Ihnen, dieses
jetzt zu installieren. Unter der berschrift Entwicklungssystem lokal verwenden in Abschnitt 1.1.2, Amazon Web Services, finden Sie eine kurze
Beschreibung.

1.2.1

Java Runtime Environment

Um die ADT nutzen zu knnen, wird mindestens JRE 1.6 vorausgesetzt. Ob


Sie JRE installiert haben und welche Version auf Ihrem System vorliegt, finden Sie in einem Windows-Betriebssystem am einfachsten wie folgt heraus:

52

Installation und Einrichtung der Entwicklungsumgebung

1. Starten Sie die Kommandozeile. Dazu drcken Sie zunchst () + (R). Im


sich ffnenden Dialogfenster geben Sie cmd ein und besttigen mit ().
2. Geben Sie den Befehl Java version ein. Ihnen wird die aktuell installierte
Version der JRE wie in Listing 1.1 ausgegeben:
C:\>java version
java version "1.8.0_20"
Java(TM) SE Runtime Environment (build 1.8.0_20-b26)
Java HotSpot(TM) 64-Bit Server VM (build 25.20-b23, mixed mode)
Listing 1.1 Abfrage der JRE-Version

Sollten Sie eine ltere JRE-Version 1.6 installiert haben, laden Sie sich die
aktuelle Version unter http://www.oracle.com/technetwork/java/javase/downloads/index.html herunter, und installieren Sie diese. Falls das System meldet,
dass der Befehl Java nicht bekannt ist, haben Sie wahrscheinlich gar kein JRE
installiert. In diesem Fall laden Sie sich ebenfalls einfach die aktuelle Version
herunter. Die Versionen sind weitestgehend abwrtskompatibel. Eine aktuellere Version ist in unserem Fall kein Problem. Ohnehin sollten Sie Ihre
JRE-Version regelmig aktualisieren, um potenzielle Sicherheitslcken zu
schlieen.
Unter Linux oder Mac OS X knnen Sie die JRE-Version ber das Terminal
genauso abfragen wie unter Windows. Geben Sie einfach Java version
ein, und prfen Sie die Ausgabe.

1.2.2

Eclipse

Die Installation von Eclipse gestaltet sich glcklicherweise recht einfach. Es


gengt, die passende Version aus dem Internet zu laden und auf Ihre Festplatte zu kopieren. Die Entwicklungsumgebung ist ohne weitere Installationsroutinen sofort einsatzfhig. Zur Drucklegung dieses Buches waren die
aktuellsten untersttzten Versionen Eclipse Kepler und Luna. Ich zeige Ihnen
die Einrichtung der ADT im folgenden Abschnitt am Beispiel von Eclipse
Kepler. Die Schritte lassen sich aber auch fr nachfolgende Eclipse-Versionen
anwenden.
Eclipse ist in hohem Mae anpassbar. Es existiert eine riesige Menge an Plugins, um die Entwicklungsumgebung an die verschiedensten Aufgaben anpassen zu knnen. Daher steht Eclipse auch nicht nur als ein Download-Paket
zur Verfgung, sondern es wird in verschiedenen Ausprgungen angeboten,
die jeweils auf ein bestimmtes Anwendungsfeld abgestimmt sind.

53

1.2

Die ersten Schritte Hallo ADT

Auch die ADT sind letztlich nichts anderes als eine Erweiterung fr Eclipse.
Zwar gibt es kein fertiges ADT-Eclipse-Paket, aber Sie knnen sich einige
Arbeit ersparen, indem Sie eine passende Eclipse-Version herunterladen. Fr
die ABAP-Entwicklung bietet sich das Paket Eclipse IDE for Java EE Developers
an. Dieses knnen Sie unter http://www.eclipse.org/downloads/packages/
eclipse-ide-java-ee-developers/lunar herunterladen. Dieses Paket bringt alle
Komponenten mit, die von den ADT-Plug-ins bentigt werden.
Die heruntergeladene Datei ist ein einfaches ZIP-Archiv. Um Eclipse nutzen
zu knnen, gengt es, das Archiv in ein beliebiges Verzeichnis zu entpacken.
Um die Eclipse Workbench zu starten, mssen Sie lediglich die Datei
Eclipse.exe aus dem Hauptordner ausfhren.
Aktuell untersttzte Versionen
Aktuelle Informationen zu den Systemvoraussetzungen und den untersttzten
Eclipse-Versionen finden Sie auf der Seite:
https://tools.hana.ondemand.com/#abap.

1.2.3

ABAP Development Tools

Sie sollten nun die Standard-Eclipse-Installation zur Verfgung haben. Als


Nchstes knnen Sie die ADT installieren. Dazu nutzen Sie die entsprechende Update-Seite von SAP und mssen in Eclipse lediglich die URL zu
den Installationsdateien hinterlegen:
1. ffnen Sie die Eclipse-Entwicklungsumgebung ber die Datei Eclipse.exe
(Button ).
2. Sie werden aufgefordert, einen Workspace, d. h. ein leeres Verzeichnis,
auszuwhlen (siehe Abbildung 1.26).
Am besten legen Sie ein neues Verzeichnis an, das Sie fr die Arbeit mit
diesem Buch verwenden. Auf die Bedeutung der Workspaces komme ich
in Abschnitt 1.3.1 noch einmal zurck.
3. Sind Sie mit einem neuen Workspace eingestiegen, wird Ihnen als Nchstes
die Willkommensseite angezeigt. Um die Update-Seite einzutragen, whlen
Sie im Men Help Install New Software (siehe Abbildung 1.27).
4. Im folgenden Dialogfenster klicken Sie auf den Button Add.

54

Installation und Einrichtung der Entwicklungsumgebung

Abbildung 1.26 Auswahl eines Workspaces

Abbildung 1.27 Update-Seite in Eclipse angeben

5. Tragen Sie im Feld Location die URL https://tools.hana.ondemand.com/


kepler (fr Eclipse in der Version 4.3) bzw. https://tools.hana.ondemand.com/luna (fr Eclipse 4.4) und im Feld Name die Bezeichnung
ADT Update Site ein. Besttigen Sie Ihre Eingabe mit OK (siehe Abbildung 1.28).

55

1.2

Die ersten Schritte Hallo ADT

Abbildung 1.28 Update-Seite hinzufgen

6. Whlen Sie im Auswahlfeld Work with den Eintrag ADT Update Site,
den Sie gerade angelegt haben. In der Liste der verfgbaren Updates tauchen nun die Eclipse-Entwickler-Tools von SAP auf.
7. Markieren Sie den Eintrag ABAP Development Tools for SAP NetWeaver ABAP Core Development Tools (Entwickler Edition), und besttigen Sie Ihre Auswahl mit Next.
8. Lesen und besttigen Sie die angezeigten Lizenzbedingungen, und starten Sie die Installation ber den Button Finish.
9. Eclipse ldt nun die bentigten Daten von der Update-Seite. Dabei werden Abhngigkeiten automatisch bercksichtigt und fehlende Plug-ins
nachinstalliert.
Die Installation der Plug-ins knnen Sie auch im Hintergrund ausfhren
lassen, d. h., whrenddessen knnen Sie Eclipse weiterverwenden.
10. Um die Installation abschlieen zu knnen, verlangt Eclipse einen Neustart. Dabei wird erneut der Workspace abgefragt. Sie knnen die
Abfrage dieses Mal einfach mit OK besttigen. Die Vorbelegung sollte der
letzten Auswahl entsprechen.

56

Installation und Einrichtung der Entwicklungsumgebung

Abbildung 1.29 Funktionen der ABAP Development Tools auswhlen

Damit ist die Installation der ADT abgeschlossen. Sie knnen den Willkommensbildschirm nun verlassen. Klicken Sie dazu auf das Symbol
in der
rechten oberen Ecke.
Bei Problemen mit der Installation und Einrichtung der Eclipse-Entwicklungsumgebung ist die FAQ-Seite hilfreich. Diese finden Sie unter der
Adresse http://scn.sap.com/docs/DOC-28325.
Sprache
Eclipse wird standardmig nur mit dem englischen Sprachpaket ausgeliefert. Die
ABAP Development Tools sind allerdings mehrsprachenfhig. Da die ADT sich an
der eingestellten Systemsprache orientieren, kommt es in Eclipse teilweise zu
einem amsanten Sprachmix. Sie haben zwei Mglichkeiten, dies zu umgehen:
Sie knnen die ADT auf die Sprache Englisch umstellen. ffnen Sie dazu die
Datei Eclipse.ini im Eclipse-Hauptverzeichnis. Am Ende der Datei fgen Sie die
Zeile -Duser.language=en hinzu.

57

1.2

Die ersten Schritte Hallo ADT

Sie knnen ein deutsches Sprachpaket installieren. Dieses erhalten Sie ber das
Eclipse Babel Project (https://eclipse.org/babel/). Sie knnen die Update-Seite
http://download.eclipse.org/technology/babel/update-site/R0.12.1/kepler/
(bzw. /luna) aufrufen, um die Pakete zu installieren.
Ich empfehle Ihnen, die ADT auf Englisch zu nutzen. Viele Begriffe sind ohnehin
aus dem Englischen entliehen. Zudem vereinfacht dies die Kommunikation mit der
Eclipse- und ADT-Community.

1.3

Eclipse Workbench

Bevor wir uns in die ABAP-Entwicklung in Eclipse strzen, sollten wir uns
die neue Arbeitsumgebung etwas genauer ansehen. Wer bisher die ABAP
Workbench im SAP GUI gewohnt war, mag sich zunchst in der Eclipse
Workbench etwas verloren vorkommen. Dies liegt unter anderem daran,
dass Eclipse auf ganz anderen Konzepten beruht als die ABAP Workbench.
Whrend im ABAP-Umfeld alle Entwickler, die am gleichen System entwickeln, auf der gleichen Code-Basis arbeiten, erfolgt die Entwicklung in der
Eclipse Workbench normalerweise lokal. Daher stellen sich hier ganz andere
Fragen als bei der Entwicklung auf einem Server. Als Entwickler mssen Sie
sich darum kmmern, Ihre Quelltexte zu organisieren und wiederauffindbar
zu machen.
Die Laufzeitumgebung fr die Entwicklungen ist bei der Verwendung von
Eclipse nicht direkt gegeben, d. h., es ist notwendig, sich darum zu kmmern, dass Code kompiliert, gegebenenfalls deployed bzw. installiert und zu
guter Letzt ausgefhrt wird.
Die in den folgenden Abschnitten beschriebenen Bedienkonzepte mgen
zunchst etwas verwirrend und kompliziert wirken. Das meiste ist in der
Handhabung aber durchaus intuitiv. Nach kurzer Einarbeitungszeit wird
Ihnen die Arbeit mit Eclipse sehr gut und schnell von der Hand gehen.

1.3.1

Workspaces

Schon beim ersten Start der Eclipse-Entwicklungsumgebung hatten Sie


unweigerlich Kontakt mit den Workspaces. Workspaces sind die oberste
Organisationseinheit in Eclipse. Einen Workspace knnen Sie sich als einen
Arbeitsplatz vorstellen, an dem alle Dokumente und Werkzeuge liegen, die
Sie fr eine Aufgabe bzw. Entwicklung bentigen. Kehren Sie morgens an
den Schreibtisch zurck, finden Sie ihn in der Regel genauso vor, wie Sie ihn

58

Eclipse Workbench

verlassen haben wenn Sie Glck haben, ohne die halb leere Kaffeetasse und
den Pizza-Karton vom Mittagessen.
Auf hnliche Weise speichert Eclipse den Zustand der Entwicklungsumgebung in einem Workspace ab. Beim nchsten Laden dieses Workspaces finden Sie die Entwicklungsumgebung genauso vor, wie Sie sie verlassen
haben. So, wie Sie unter Umstnden an mehreren Schreibtischen arbeiten,
knnen Sie in Eclipse beliebig viele Workspaces anlegen. Technisch gesehen,
handelt es sich um ein Verzeichnis auf der Festplatte. In diesem Verzeichnis
speichert Eclipse verschiedene Metadaten ab.
Das Anlegen eines neuen Workspaces bernimmt Eclipse fr Sie. Wenn Sie
beim Start von Eclipse nach dem Workspace gefragt werden, knnen Sie entweder das Verzeichnis eines bestehenden Workspaces oder ein neues Verzeichnis angeben. In letzterem Fall erstellt Eclipse automatisch einen neuen
Workspace.
Verzeichnisse fr Workspaces
Verwenden Sie fr einen neuen Workspace immer ein eigenes, leeres Verzeichnis.
Manipulieren Sie dieses Verzeichnis mglichst nicht von Hand, sondern nur ber
die Eclipse-Umgebung. Mchten Sie bestehende Projekte in einen neuen Workspace berfhren, verwenden Sie die Importfunktion.

Nutzen Sie Eclipse ausschlielich zur ABAP-Entwicklung, bentigen Sie voraussichtlich nur einen einzigen Workspace. In diesem Fall knnen Sie die
Abfrage beim Start von Eclipse unterdrcken. Markieren Sie dazu die Auswahlbox Use this as the default and do not ask again beim Start. Falls Sie
dennoch den Workspace wechseln mchten, knnen Sie dies nachtrglich
immer noch ber den Menpfad File Switch Workspace Other tun. Sie
gelangen ber diesen Pfad in einen Auswahldialog, in dem Sie einen bestehenden Workspace whlen oder einen neuen anlegen knnen.

1.3.2

Projekte

Die Entwicklung in Eclipse ist in Projekte organisiert. Es gibt verschiedene


Arten von Projekten (Java-Projekte, JavaScript-Projekte, Webprojekte etc.).
Ein Projekt fasst verschiedene Dateien zusammen, die zu einer Entwicklung
gehren. Auf der Ebene des Projekts wird ebenfalls definiert, wie Eclipse mit
den gespeicherten Artefakten umgeht, z. B., ob und wie Dateien kompiliert
werden mssen oder wie ein Code zur Ausfhrung gebracht werden kann.

59

1.3

Die ersten Schritte Hallo ADT

Abbildung 1.30 zeigt den Project Explorer in Eclipse 1. Es sind drei verschiedene Projekttypen (Java, ABAP und SAPUI5) geffnet. Abhngig vom
Projekttyp bereitet Eclipse die Projektinhalte unterschiedlich auf 2. Diese
Aufbereitung spiegelt nicht unbedingt die gespeicherte Struktur auf der Festplatte wider. Falls Sie sich diese Struktur ansehen wollen, knnen Sie dies
auf der Registerkarte Navigator 3 tun. Ein Projekt kann einem oder mehreren Workspaces zugewiesen sein. Beim Start des Workspaces stehen diese
Projekte zur Verfgung.

Abbildung 1.30 Project Explorer in der Eclipse Workbench

Projekte schlieen
Sie knnen Projekte, die Sie aktuell nicht bentigen, auch schlieen vor allem,
wenn Sie gleichzeitig mit sehr vielen Projekten arbeiten. Nicht geffnete Projekte
ldt Eclipse nicht in den Speicher. Damit verringert sich die Ladezeit beim Starten
eines Workspaces.
Klicken Sie mit der rechten Maustaste auf das zu schlieende Projekt, und whlen
Sie close project im Kontextmen. Auf dem gleichen Wege knnen Sie das Projekt
ber den Eintrag open project wieder ffnen. Geschlossene Projekte bleiben allerdings im aktuellen Workspace. Sollen diese ganz entfernt werden, geht das ber
den Eintrag Delete im Kontextmen.

60

Eclipse Workbench

Die Eclipse Workbench ist fr die Arbeit in Projekten ausgelegt. Dateien


knnen zwar auch direkt geffnet werden, tauchen dann aber nicht in der
Projektverwaltung auf. Auch in den ADT kommen Sie nicht darum herum,
mit Projekten zu arbeiten. Die Brcke zur Entwicklung auf dem SAP NetWeaver AS ABAP schlgt das ABAP-Projekt. Im ABAP-Projekt sind die Verbindungsdaten zu einem System hinterlegt. Allerdings werden keine ABAPDateien lokal auf der Festplatte gespeichert. Eine reine Offline-Entwicklung
ist daher auch mit den ADT leider nicht mglich. Allerdings verkraftet
Eclipse kurze Ausflle der Verbindung zum Backend-System etwas besser als
das SAP GUI. Um mit mehreren Systemen parallel zu arbeiten, knnen einfach mehrere ABAP-Projekte in einem Workspace angelegt werden.
Projekte knnen auch in Working Sets organisiert werden. Damit behalten
Sie gerade bei groen Workspaces leichter die bersicht. Sie knnen die
Working Sets im Project Explorer organisieren. Abbildung 1.31 zeigt z. B.
das Working Set ADT.

Abbildung 1.31 Verwendung von Working Sets

Semantisches Dateisystem
Die ABAP-Ressourcen werden ber ein sogenanntes semantisches Dateisystem
(Semantic File System, SFS) eingebunden. Das SFS kmmert sich darum, dass Ressourcen vom Server abgerufen und nach der Bearbeitung gespeichert werden knnen. In der Regel ist dieser Vorgang fr den Anwender transparent.

61

1.3

Die ersten Schritte Hallo ADT

1.3.3

Views

Informationen werden in Eclipse in Form von Sichten (Views) dargestellt.


Views knnen zur Navigation dienen (wie z. B. der Project Explorer) oder
mit einem Editor verknpft sein, um Daten anzuzeigen und zu manipulieren.
Views sind untereinander verknpft. Klicken Sie doppelt auf eine Datei im
Project Explorer, versucht Eclipse, den passenden Editor zu ermitteln und
anzuzeigen.
Eine Liste Ihrer zuletzt aufgerufenen Views finden Sie unter Window
Show View. Unter Window Show View Others finden Sie eine Liste aller
verfgbaren Views. Dieses Fenster bietet brigens wie die meisten EclipseFenster eine Live-Suche an. Whrend Sie den gesuchten Begriff eingeben,
grenzt Eclipse die Liste auf jene Elemente ein, die den angegebenen Begriff
enthalten. Sie erreichen die View-Liste auch ber Tastatureingaben, indem
Sie () + (Alt) + (Q) und direkt danach noch mal (Q) drcken.
Views knnen nach Bedarf innerhalb der Eclipse Workbench verschoben
und angeheftet werden. Zudem knnen sie gestapelt werden. Werden
mehre Views in denselben Bildschirmbereich positioniert, zeigt Eclipse diese
automatisch als Registerkarten hintereinander an.
Alle Views haben zwei Kontextmens:
Das erste Men erreichen Sie, indem Sie mit der rechten Maustaste auf das
Register eines Views klicken. ber dieses Men knnen Sie den aktuellen
View, alle Views im Stapel oder alle anderen Views im Stapel auer dem
gerade ausgewhlten schlieen.
Das zweite Men erreichen Sie ber den kleinen Pfeil in der rechten oberen Ecke jedes Views wie in Abbildung 1.31. Dieses Men bietet Operationen an, die sich auf den gesamten Inhalt des Views auswirken.
Einzelne Elemente eines Views (z. B. Dateien im Project Explorer) knnen
wiederum eigene Kontextmens anbieten. Diese sind ber einen Rechtsklick
auf das Element erreichbar.

1.3.4

Perspektiven

Perspektiven bndeln Views und speichern deren Layout. Perspektiven sind


oft dafr ausgelegt, bestimmte Entwicklungsaufgaben abzubilden. So gibt es
fr die Java-, PHP- und ABAP-Entwicklung jeweils eigene Perspektiven, die
alle relevanten Views ffnen.

62

Das erste Programm

Es ist sehr wahrscheinlich, dass Sie whrend der Arbeit mit Eclipse oft zwischen verschiedenen Perspektiven wechseln. Die zuletzt verwendeten Perspektiven finden Sie im rechten Teil der Symbolleiste der Entwicklungsumgebung. In Abbildung 1.32 ist die Perspektive ABAP ausgewhlt. Eine
bersicht ber alle verfgbaren Perspektiven erhalten Sie ber den Menpfad
Window Open Perspective Other.

Abbildung 1.32 Quick Access & Perspektivenauswahl

Quick Access
Views und Perspektiven knnen auch ber die Quick-Access-Funktion (siehe
Abbildung 1.32) geffnet werden. Geben Sie in dieses Feld den Namen der Perspektive ein. Eclipse stellt Ihnen dabei eine Auswahl der verfgbaren Perspektiven
zur Verfgung.
ber den Quick Access knnen Sie brigens auch neue Objekte anlegen oder
Befehle ausfhren. Dies kann insbesondere dann praktisch sein, wenn Sie zwar den
Namen einer Funktion kennen, aber nicht mehr wissen, wo sie zu finden ist bzw.
wie das Tastaturkrzel dazu lautet. Mit der Tastenkombination (Strg) + (3)
springt Ihr Cursor direkt in das Quick-Access-Feld.

1.4

Das erste Programm

Nun ist es endlich so weit, und wir beginnen mit der Aufgabe, die wir eigentlich ausfhren wollen, dem Programmieren. Eine tabellarische bersicht der
wichtigsten hier vorgestellten Funktionen und Tastenkombinationen finden
Sie brigens in Anhang A, Wegweiser durch die ABAP Development Tools.

1.4.1

ABAP-Projekt anlegen

Wie bereits erwhnt, bilden ABAP-Projekte das Bindeglied zwischen dem


Backend-System und der Entwicklungsumgebung. Daher legen wir zunchst
ein solches Projekt fr unser Entwicklungssystem an. Dabei spielt es keine
Rolle, ob es sich um ein virtuelles System in der Cloud oder um einen Server
in Ihrem Rechenzentrum handelt.
1. Starten Sie Eclipse, und ffnen Sie Ihren (leeren) Workspace. Sollte Eclipse
Sie mit der Willkommensseite begren, beenden Sie diese ber den Button
.

63

1.4

Die ersten Schritte Hallo ADT

2. Starten Sie den Anlage-Dialog, indem Sie im Men File New Other
whlen. Alternativ erreichen Sie diesen Dialog ber das Tastenkrzel
(Strg) + (N).
3. Whlen Sie, wie in Abbildung 1.33 gezeigt, aus der Liste der verfgbaren
Anlage-Assistenten den Assistenten ABAP Project. Alternativ knnen Sie
auch ABAP Project in das Eingabefeld des Dialogs eingeben. Eclipse filtert die Auswahlliste dann dynamisch. Fahren Sie mit einem Klick auf
Next fort.

Abbildung 1.33 Anlage-Assistenten fr ABAP-Projekte whlen

4. Als Nchstes whlen Sie Ihr Backend-System aus. Haben Sie das System in
das SAP Logon Pad aufgenommen, knnen Sie es ber den Button Browse
(oder per Eingabe des Namens in das Feld Connection) auswhlen (siehe
Abbildung 1.34). Seit Version 2.28 der ADT knnen Sie die Zugangsdaten
fr den Server auch manuell definieren. Mit einem Klick auf Next gelangen Sie zur Benutzereingabe.
5. Whlen Sie den Entwicklungsmandanten Ihres Systems aus. (Im Falle
eines AWS-Systems ist dies in der Regel 001.) Geben Sie Benutzernamen
und Passwort an. Falls Sie sich nicht in der Standardsprache des Systems
anmelden mchten, knnen Sie die Sprache hier ebenfalls ndern. Das
ndern der Anmeldesprache ist danach fr dieses Projekt nicht mehr mglich. Dazu mssen Sie ein weiteres Projekt erstellen (was allerdings sehr
schnell mglich ist).

64

Das erste Programm

Abbildung 1.34 Systemverbindung whlen

6. ABAP-Projekte sind mit einer eigenen Perspektive verknpft. Daher fragt


Eclipse, ob Sie jetzt in diese Perspektive wechseln wollen. Besttigen Sie
die Abfrage aus Abbildung 1.35 mit Yes.

Abbildung 1.35 Perspektivenwechsel besttigen

7. Als Resultat sollten Sie nun im Project Explorer ein neues Projekt vorfinden. Der Name des Projekts setzt sich aus der System-ID des Servers, dem
Mandanten, dem Benutzernamen und der Anmeldesprache zusammen
(siehe Abbildung 1.36).

65

1.4

Die ersten Schritte Hallo ADT

Abbildung 1.36 Neues ABAP-Projekt im Project Explorer

Unterhalb des ABAP-Projekts sehen Sie nur zwei Knoten im Project Explorer:
Favorite Packages
Derzeit befindet sich nur das Paket $TMP unter den Favoriten. Sie knnen
aber jedes beliebige Paket zu Ihren Favoriten hinzufgen, um schnell darauf zugreifen zu knnen.
System Library
Hier finden Sie eine bersicht ber alle Entwicklungsklassen auf dem
Backend-System.

1.4.2

Hallo Welt

Mit unserem ersten Programm werden wir wohl keinen Preis fr Kreativitt
gewinnen, aber es sollte gengen, um zu verifizieren, dass die Entwicklungsumgebung korrekt eingerichtet ist, und Ihnen ein erstes Gefhl fr die
Arbeit mit Eclipse geben. Am Ende der bung sollte ein freundliches Hallo
Welt auf dem Monitor erscheinen. Wir gehen bei unserem ersten Programm den Weg des geringsten Wiederstands, d. h., wir legen einen einfachen Report als lokales Objekt an:
1. Navigieren Sie im Project Explorer unterhalb des Knotens fr das ABAPProjekt zum Eintrag Favorite Packages $TMP <Benutzername>, und
klicken Sie mit der rechten Maustaste auf den Paketnamen.

Abbildung 1.37 Neues Programm anlegen

66

Das erste Programm

2. Whlen Sie im Kontextmen New ABAP Programm (siehe Abbildung 1.37).


3. Im Anlage-Assistenten vergeben Sie einen Namen (z. B. Z_HELLO_
WORLD) und eine Beschreibung fr Ihr neues Programm (siehe Abbildung 1.38). Beachten Sie, dass hier die Standardnamenskonventionen von
SAP gelten.

Abbildung 1.38 ABAP-Programm anlegen

Neues Programm ber Tastenkombination anlegen


Sie haben auch die Mglichkeit, ein neues Objekt wie Ihr Programm mit der Tastenkombination (Strg) + (N) anzulegen und anschlieend ber einen Dialog das
zugehrige Projekt und Paket auszuwhlen. Dies ist weniger intuitiv, geht aber
dafr etwas schneller.

4. Besttigen Sie Ihre Eingabe durch einen Klick auf Next.


5. Die Auswahl des Transportauftrags knnen Sie in diesem Fall berspringen, da wir ein lokales Objekt anlegen. Beenden Sie den Assistenten mit
dem Button Finish.
Das Resultat Ihrer Bemhungen sehen Sie in Abbildung 1.39. Sollte Ihnen
das neue Objekt nicht unmittelbar angezeigt werden, aktualisieren Sie den
Project Explorer mit (F5).

67

1.4

Die ersten Schritte Hallo ADT

Link with Editor


Sollte Ihr neu angelegtes Programm nicht im Project Explorer angezeigt werden,
aktivieren Sie die Funktion Link With Editor ( ). Diese Funktion ist bei vielen
Views verfgbar und sorgt dafr, dass die Anzeige im View mit dem aktuell im Editor geffneten Objekt verknpft wird. Im Falle des Project Explorers wird auf diese
Weise der Baum expandiert und der Cursor auf das gerade geffnete Objekt
gesetzt.

Abbildung 1.39 Ihr erstes Hallo-Welt-Programm

Nun mssen Sie nur noch etwas ABAP-Code einfgen, und Ihr erstes Programm ist lauffhig:
1. Fgen Sie den Code aus Listing 1.2 in Ihr neues Programm ein.
REPORT z_hello_world.
PARAMETER:
p_name TYPE text30.
WRITE |Hello| && p_name && |!|.
Listing 1.2 Hallo-Welt-Programm

2. Aktivieren Sie das Programm mit der Tastenkombination (Strg) + (F3).


3. Nachdem das Programm aktiviert wurde, starten Sie es mit (F8).
Eclipse sollte das Programm nun ordnungsgem ausfhren. Dazu wird das
SAP GUI aufgerufen und im Editor-View angezeigt. Sie knnen hier nun
einen Namen fr das Programm angeben. Geben Sie z. B. World im Feld
P_NAME ein, und starten Sie den Report. Und siehe da: Die Aufgabe ist
erfllt (siehe Abbildung 1.40).
Funktionstasten
Die verwendeten Funktionen lassen sich nicht nur ber Tastenkrzel aufrufen. Die
meisten finden Sie auch in der Menleiste.

68

Das erste Programm

Abbildung 1.40 Ausgabe des Hallo-Welt-Programms

Das Programm reit sicherlich niemanden vom Hocker. Sind Sie bis hierhin
gekommen, haben Sie Ihre Reise in die Welt von Eclipse jedoch erfolgreich
begonnen. Ihre Sachen sind gepackt, und Sie sind dafr gewappnet, Ihre
erste grere Implementierung mit den ADT zu beginnen.

1.4.3

Feature Explorer

Seit Version 2.24 bringen die ADT den sogenannten Feature Explorer mit.
Dabei handelt es sich um ein interaktives Tutorial innerhalb von Eclipse.
Beim ersten Start der ABAP-Perspektive finden Sie den Feature Explorer auf
der rechten Seite Ihrer Entwicklungsumgebung (siehe Abbildung 1.41).

Abbildung 1.41 Feature Explorer

69

1.4

Die ersten Schritte Hallo ADT

Der Feature Explorer ermglicht einen sehr guten Einstieg in die Arbeit mit
Eclipse. Ich empfehle Ihnen, die kurzen und einfachen Tutorials nachzuvollziehen. Allerdings ist das nicht zwingend erforderlich, um mit diesem Buch
weiterzuarbeiten.
Werfen Sie in diesem Zusammenhang auch einmal einen Blick in das SAP
Community Network (SCN, http://scn.sap.com/community/abap/eclipse/blog/
2014/04/15/become-an-abap-in-eclipse-feature-explorer-and-earn-the-explorerbadge). Hier finden Sie Beitrge von anderen Eclipse-Einsteigern, die Erfahrungsberichte zur Programmierung von ABAP in Eclipse beinhalten. Vielleicht sehen Sie sich ja auch dazu berufen, Ihre ersten Schritte mit dem Feature Explorer in Form eines Blog-Beitrags zu dokumentieren.

70

Develop like never before lautet das Werbeversprechen von SAP.


In diesem Kapitel werden Sie tatschlich Neues entdecken und Altbekanntes mit anderen Augen betrachten. Meistern Sie Ihren
Programmieralltag mit den ABAP Development Tools in Eclipse.

Funktionen der
ABAP Development Tools

In diesem Kapitel arbeiten wir uns durch die verschiedenen Grundfunktionen der Entwicklungsumgebung ABAP Development Tools fr SAP NetWeaver (ADT). Wir beginnen mit dem Anlegen der gngigsten ABAP-Entwicklungsobjekte in Eclipse. Spter sehen wir uns verschiedene Komfortfunktionen an. Diese sind teilweise exklusiv in Eclipse verfgbar, teilweise
handelt es sich auch um Funktionen, die im SAP GUI ebenfalls zur Verfgung stehen, dort aber neu eingefhrt wurden oder bisher ein Schattendasein fristeten. Abschlieend sehen wir uns genauer an, an welchen Stellen
sich die neue Entwicklungsumgebung grundstzlich von der ABAP Workbench unterscheidet und wie Sie auch als erfahrener ABAP-Entwickler
Ihren Arbeitsablauf mit dem neuen Werkzeug noch optimieren knnen.

2.1

Demoszenario

Damit Sie nicht im luftleeren Raum ausprobieren mssen, bauen wir


zunchst ein Demoszenario auf. Dieses Szenario wird uns als Beispiel in den
folgenden Kapiteln dieses Buches begleiten. Es ist bewusst so einfach gehalten, dass Sie nicht zu viel Zeit aufwenden mssen, um es zu implementieren,
und auch mittendrin einsteigen knnen. Gleichzeitig ist es aber komplex
genug, um die wichtigsten Entwicklungsarbeiten demonstrieren zu knnen.
Bei unserem Beispielprojekt handelt es sich um die Entwicklung einer Aufgabenliste (Issue List). Die Entwicklung ist unabhngig von spezifischen SAPKomponenten. Daher kann sie auch auf einem SAP NetWeaver AS ABAP
implementiert werden, auf dem keine weiteren Module verfgbar sind.

71

Funktionen der ABAP Development Tools

ISSUE_LIST
<<enumeration>>
STATUS
+NEW
+OPEN
+WIP
+READY_TO_TEST
+IN_TEST
+READY_TO_TRANSPORT
+CLOSED

COMMENT

PROJECT
1
berichtet
0..*

0..*

Reporter

ISSUE
wird zugeteilt
Developer

CR

BR

DR

Abbildung 2.1 Konzeptionelle bersicht der Aufgabenliste

Fhlen Sie sich eingeladen, Ihre eigene Implementierung beliebig auszubauen oder anzupassen. Das Design bietet genug Spielraum fr Verbesserungen. Im Zentrum unserer Entwicklung steht ein Issue, d. h. einer offener
Punkt oder eine Aufgabe in unserer Entwicklungsliste. Ein Issue kann entweder eine nderungsanfrage (Change Request, CR), eine Entwicklungsanfrage
(Development Request, DR) oder ein Fehlerbericht (Bug Report, BR) sein. Er
wird durch Meldenden bzw. Anforderer (Reporter) gemeldet. Dieser muss
die Aufgabe nicht unbedingt selbst in die Aufgabenliste eintragen, wenn er
z. B. nicht ber einen SAP-Zugang verfgt oder einen Fehler bei einem Support-Mitarbeiter meldet. Ein Eintrag kann einem Entwickler (Developer)
zugeordnet werden, der dann fr die Erledigung dieser Aufgabe verantwortlich ist. Zu einem Issue knnen beliebig viele Kommentare verfasst werden.
Auerdem kann eine Aufgabe einen Status haben, der den Stand der Bearbeitung angibt.
Es gibt auerdem die Mglichkeit, Projekte anzulegen. Ein Projekt besteht
aus mehreren Issues. Abbildung 2.1 stellt die Implementierung schematisch
dar. Abbildung 2.2 gibt Ihnen eine bersicht ber das grundlegende Design
der Demoapplikation. Das Diagramm enthlt zum einen alle Klassen, die wir
im Laufe der Entwicklung anlegen werden, zum anderen sind die Tabellen
definiert, in denen wir unsere Entwicklungsliste abspeichern werden. Nicht
eingezeichnet sind Funktionsbausteine, Programme und Web-Dynpro-

72

Mit Entwicklungsobjekten arbeiten

2.2

Applikationen, die wir entwickeln werden. Ich werde auf die Objekte aber
an entsprechender Stelle eingehen.

Z_ISSUE_LIST
<<table>>
ZCOMMENT
+ISSUE_ID: Z_ISSUE_ID
+COUNTER: Z_COUNTER
+REPORTER: Z_REPORTER
+TIMESTAMP: TIMESTAMP
+LOEVM: LOEVM
+CONTENT: STRING

ZCL_PROJECT
-ms_project: zproject
-is_persistent: boolean
+set_project(is_project: zproject)
+get_project(): zproject
+get_issues(): zissue_t
+get_status(ef_open_items: int4, ef_finished_items: int4, ef_percentage: float)
+list_projects(): z_project_t
0..1
0..*

ZCL_COMMENT
-ms_comment: zcomment
-is_persistent: boolean
+save()
+is_persistent(): boolean
0..*
+delete()
+get_comments(): z_comment_t
+set_comment(if_comment: string, if_autor: name)
+get_next_counter(): int4
+get_next_comment(): zcl_comment
+has_next(): boolean
+append_comment(ir_comment: zcl_comment)

ZCL_ISSUE

-ms_issue: ZISSUE
-is_persistent: boolean
+mr_comments_cl: zcl_comment_t
+set_issue(is_issue: zissue)
+get_issue(): zissue
+get_comments(): zcl_comment
+add_comment(if_comment: string, if_autor: name)
+get_project(): zcl_project

<<table>>
ZPROJECT
+PROJECT_ID: Z_PRJ_ID
+NAME: Z_PRJ_NAME
+BGDAT: Z_START_DATE
+PLEND: Z_DUE_DATE
+LOEVM: LOEVM

<<table>>
ZISSUE
+ISSUE_ID: Z_ISSUE_ID
+NAME: Z_ISSUE_NAME
+DESCRIPTION: STRING
+STATE: Z_ISSUE_STATE
+TYPE: Z_ISSUE_TYPE
+PROJECT_ID: Z_PRJ_ID
+REPORTER: Z_REPORTER
+ASSIGNED_TO: Z_ASSIGNED_TO
+START_DATE: Z_START_DATE
+DUE_DATE: Z_DUE_DATE
+LOEVM: LOEVM

Abbildung 2.2 Issue List Entwicklungsobjekte

Nachdem Sie dieses Buch durchgearbeitet haben, haben Sie die Grundlagen
fr eine kleine Applikation zum Aufgabenmanagement gelegt. Zudem knnen Sie sich eine Liste mit offenen Aufgaben und den Gesamtstatus eines
Projekts anzeigen lassen.
Erweiterungsmglichkeiten
Die Aufgabenliste, die wir im Laufe des Buches entwickeln, ist sehr einfach gehalten. Sie knnen diese Entwicklung jedoch als Grundlage nehmen, um selbst ein
wenig herumzuexperimentieren. Sie knnen z. B. eine Funktion implementieren,
um die Issues beliebig ineinanderschachteln zu knnen. Auch gibt es in der Grundstruktur der Anwendung keine Mglichkeit, Dateien an Kommentare oder Issues
anzuhngen. Sie knnten darber hinaus die Mglichkeit einrichten, Issues mit
Transportauftrgen in SAP NetWeaver AS ABAP zu verknpfen. Es sind unzhlige
solcher Erweiterungen denkbar. Inspiration finden Sie z. B. in Abschnitt 2.8.5,
Aufgabenverwaltung mit Mylyn.

2.2

Mit Entwicklungsobjekten arbeiten

Sobald Sie Ihre Eclipse-Entwicklungsumgebung gestartet haben, knnen Sie


auch schon loslegen. Falls Sie noch kein ABAP-Projekt angelegt haben, finden Sie in Abschnitt 1.4.1, ABAP-Projekt anlegen, eine Anleitung dazu.

73

Funktionen der ABAP Development Tools

Andernfalls ffnen Sie das Projekt zu Ihrem Entwicklungssystem und


authentifizieren sich mit Ihrem Kennwort. In Anhang A, Wegweiser durch
die ABAP Development Tools, finden Sie einige ntzliche Funktionen und
Tastenkombinationen, die Sie bei der Arbeit mit Entwicklungsobjekten kennen sollten.

2.2.1

Pakete anlegen

Fr unser Demoprojekt gengt uns ein einfaches Paket, um alle Entwicklungsobjekte zusammenzufassen. Dieses legen Sie zunchst an. Damit Sie
Ihre Arbeit spter schnell wiederfinden, fgen Sie das neue Paket zudem zur
Liste Ihrer Favoriten hinzu:
1. Whlen Sie im Project Explorer Ihr ABAP-Projekt. Falls die Untereintrge
zu diesem Knoten noch nicht expandiert sind, klappen Sie sie mit dem
kleinen Pfeil neben dem Ordnersymbol auf.
2. Klicken Sie mit der rechten Maustaste auf den Eintrag Systembibliothek,
und whlen Sie im Kontextmen den Eintrag Neu. Die Direktauswahl
schlgt Ihnen die Objekte ABAP Class, ABAP Interface und ABAP Program zur Anlage vor. Da wir aber ein Paket anlegen mchten, klicken Sie
auf OtherABAP Repository Object (() + (Strg) + (N), siehe Abbildung 2.3).

Abbildung 2.3 Neues Entwicklungsobjekt anlegen

Direktauswahlliste anpassen
Sie knnen die Direktauswahlliste brigens nach Ihren Vorlieben anpassen. Wie
das geht, erfahren Sie in Abschnitt 2.5, Mit mehreren Ressourcen arbeiten.

3. Im sich ffnenden Anlage-Dialog whlen Sie Package Package und klicken auf Next (siehe Abbildung 2.4). Achten Sie darauf, dass sie sich im
Dialog ABAP Repository Object befinden, um nicht aus Versehen ein Java

74

Mit Entwicklungsobjekten arbeiten

Package anzulegen. Wie in den meisten Eclipse-Dialogen steht Ihnen auch


hier eine komfortable Suche zur Verfgung. Schon whrend der Eingabe
Ihres Suchbegriffs wird die Ergebnisliste eingeschrnkt.

Abbildung 2.4 Objekttyp zur Anlage auswhlen

4. Im folgenden Schritt nennen Sie Ihr neues Paket Z_ISSUE_LIST und fahren mit einem Klick auf Finish fort (siehe Abbildung 2.5).

Abbildung 2.5 Paketnamen angeben

5. Eclipse startet nun den Dialog zur Anlage des Pakets im SAP GUI und bettet diesen als Sicht im Editor-Bereich ein (siehe Abbildung 2.6). Hier knnen Sie wie gewohnt eine Beschreibung zum Paket angeben und Einstellungen wie die Softwarekomponente oder die Transportschicht ndern.

75

2.2

Funktionen der ABAP Development Tools

Abbildung 2.6 Beschreibung und Eigenschaften des Pakets definieren

Fehler beim Aufrufen des SAP GUIs


Sollten Sie an dieser Stelle die Fehlermeldung erhalten, dass Sie keine Berechtigung haben, eine bestimmte Ressource zu ffnen, wurde Ihrem Benutzer wahrscheinlich nicht die Rolle ADT_RES zugeordnet.

SAP GUI in eigenem Fenster ffnen


Mchten Sie das SAP GUI wie gewohnt in einem eigenen Fenster ffnen, knnen
Sie dies unter Window Preferences ABAP Development SAP GUI Integration
einstellen.

6. Nach der Anlage des Pakets knnen Sie, wie aus der ABAP Workbench
gewohnt, einen Transportauftrag auswhlen (siehe Abbildung 2.7). Legen
Sie einen neuen Transportauftrag an, oder whlen Sie einen bestehenden
Auftrag aus.

Abbildung 2.7 Transportauftrag auswhlen

76

Mit Entwicklungsobjekten arbeiten

7. Nach einem Klick auf Speichern ( ) knnen Sie die Registerkarte des SAP
GUIs schlieen. Klappen Sie die Systembibliothek auf, und drcken Sie
(F5), um die Sicht zu aktualisieren. Eclipse ldt daraufhin die Liste der
Pakete neu. Ihr neu angelegtes Paket sollte sich nun in der Liste befinden.
8. Klicken Sie mit der rechten Maustaste auf das neue Paket, und whlen Sie
Add to Favorites im Kontextmen.
9. Ihr Paket finden Sie nun unter dem Eintrag Favorite Packages (Favoritenpakete, siehe Abbildung 2.8). Diese Zuordnung bleibt fr dieses Projekt
bestehen.

Abbildung 2.8 Neues Paket in den Favoriten

Das Anlegen einer Favoritenliste ist fr die tgliche Arbeit ntzlich. Zum
einen hat die Favoritenliste eine deutlich krzere Ladezeit als die vollstndige Liste der Pakete in der Systembibliothek, und zum anderen ersparen Sie
sich das Suchen Ihrer aktuell bearbeiteten Pakete.
Sie knnen zu einem System auch fr den gleichen Benutzer und Mandanten
mehrere Projekte erstellen. Jedes dieser Projekte kann dann wiederum eine
eigene Favoritenliste haben. Im Verlauf dieses Kapitels lernen Sie noch andere
Mglichkeiten kennen, Ihren persnlichen Arbeitsvorrat zu organisieren.

2.2.2

ABAP-Dictionary-Objekte anlegen

Um weiterarbeiten zu knnen, bentigen Sie einige ABAP-DictionaryObjekte. Eclipse bietet noch keine eigenen Tools zur Erstellung von ABAPDictionary-Objekten an, das SAP GUI ist jedoch vollstndig in Eclipse integriert. Durch die Tastenkombination (Strg) + (6) lsst es sich direkt aufrufen,
Sie knnen aber auch direkt in die Anlage-Maske der entsprechenden
Objekte springen:
1. Markieren Sie im Project Explorer das Paket Z_ISSUE_LIST.
2. Drcken Sie (Strg) + (N), um ein neues Objekt zu erstellen. Alternativ knnen Sie auch den Weg ber die rechte Maustaste und das Kontextmen
gehen, den ich im vorangegangenen Abschnitt beschrieben habe.

77

2.2

Funktionen der ABAP Development Tools

3. Whlen Sie ABAP Repository Object aus der Liste der verfgbaren
Objekte.
4. Sie gelangen nun zu einer bersicht aller verfgbaren Repository-Objekte.
Whlen Sie Dictionary Data Element aus der Liste (siehe Abbildung
2.9). Alternativ knnen Sie mit der Tastenkombination () + (Strg) + (N)
direkt in die Anlage eines neuen Repository-Objekts einsteigen.

Abbildung 2.9 Auswahl der Repository-Objekte

5. Im Editor-Bereich ffnet sich das SAP GUI mit Transaktion SE11 zur
Anlage eines neuen Datenelements. Wir legen zunchst einen Datentyp
(Data Element) an, um den Schlssel unserer Aufgabenliste zu speichern.
Nennen Sie dieses Datenelement Z_ISSUE_ID (siehe Abbildung 2.10).
6. Der Schlssel soll ein einfacher achtstelliger alphanumerischer Wert sein,
daher whlen Sie als Domne CHAR8.
7. Vergeben Sie eine Beschreibung (Short Description), und ergnzen Sie
auf der Registerkarte Field Label die erforderlichen Feldbezeichner. Aktivieren Sie das Objekt mit der Tastenkombination (Strg) + (F3).

78

Mit Entwicklungsobjekten arbeiten

Abbildung 2.10 In Eclipse eingebettetes Data Dictionary zur Anlage eines Datenelements

8. Im Project Explorer wird das neue Objekt erst angezeigt, wenn Sie die
Liste mit (F5) aktualisieren (siehe Abbildung 2.11).

Abbildung 2.11 Objekt Z_ISSUE_ID im Project Explorer

Auf diese Weise legen Sie alle Dictionary-Objekte an, die wir im Verlauf dieses Kapitels bentigen. Tabelle 2.1 zeigt diese Objekte in der bersicht, alle
Quelltexte knnen Sie auch unter www.sap-press.de/3700 herunterladen.
Name

Objekttyp

Datentyp/Domne

Z_ISSUE_ID

Datenelement

CHAR8

Z_ISSUE_NAME

Datenelement

String

Z_ISSUE_DESC

Datenelement

String

Z_ISSUE_STATE

Datenelement

Z_ISSUE_STATE_D

Z_ISSUE_TYPE

Datenelement

Z_ISSUE_TYPE_D

Tabelle 2.1 Neue ABAP-Dictionary-Objekte

79

2.2

Funktionen der ABAP Development Tools

Name

Objekttyp

Datentyp/Domne

Z_PROJEKT_ID

Datenelement

CHAR8

Z_REPORTER

Datenelement

NAME

Z_ASSIGNED_TO

Datenelement

NAME

Z_START_DATE

Datenelement

DATS

Z_DUE_DATE

Datenelement

DATS

Z_PRJ_NAME

Datenelement

String

Z_COUNTER

Datenelement

INT4

Z_ISSUE_STATE_D

Domne

CHAR8

Z_ISSUE_TYPE_D

Domne

CHAR8

Z_ISSUE_T

Tabellentyp

ZISSUE

Z_PROJECT_T

Tabellentyp

ZPROJECT

ZISSUE

Tabelle

ZPROJECT

Tabelle

Tabelle 2.1 Neue ABAP-Dictionary-Objekte (Forts.)

Bei dem Objekt ZISSUE handelt es sich um eine Datenbanktabelle, in der Sie
unsere Aufgaben abspeichern knnen. Die Felder der Tabelle zeigt Tabelle 2.2.
Legen Sie die Tabelle mit der Auslieferungsklasse Applikationstabelle an.
Feld

Datentyp

MANDT

MANDT

ISSUE_ID

Z_ISSUE_ID

NAME

Z_ISSUE_NAME

DESCRIPTION

Z_ISSUE_DESC

STATE

Z_ISSUE_STATE

TYPE

Z_ISSUE_STATE

PROJECT_ID

Z_PROJECT_ID

REPORTER

Z_REPORTER

ASSIGNED_TO

Z_ASSIGNED_TO

ERDAT

ERDAT

ERNAM

ERNAM

AEDAT

AEDAT

AENAM

AENAM

Tabelle 2.2 Felder der Tabelle ZISSUE

80

Mit Entwicklungsobjekten arbeiten

Unsere Projekte werden in der Tabelle ZPROJECT abgelegt. Legen Sie die entsprechende Applikationstabelle mit den Feldern aus Tabelle 2.3 an.
Feld

Datentyp

MANDT

MANDT

PROJECT_ID

Z_PROJEKT_ID

PROJECT_NAME

Z_PROJEKT_NAME

BGDAT

Z_START_DATE

PLEND

Z_DUE_DATE

LOEVM

LOEVM

ERDAT

ERDAT

ERNAM

ERNAM

AEDAT

AEDAT

AENAM

AENAM

Tabelle 2.3 Felder der Tabelle ZPROJECT

Wenn Sie mit dem Anlegen der ABAP-Dictionary-Objekte fertig sind und alle
Objekte erfolgreich aktiviert haben, markieren Sie das Paket Z_ISSUE_LIST
im Project Explorer und drcken (F5). Das Resultat sollte wie in Abbildung
2.12 aussehen.

Abbildung 2.12 Neu angelegte Dictionary-Objekte


im Project Explorer

81

2.2

Funktionen der ABAP Development Tools

Die geffneten Registerkarten mit den SAP-GUI-Dialogen bentigen wir vorerst nicht mehr. Klicken Sie mit der rechten Maustaste auf eine beliebige
Registerkarte, und whlen Sie Close All (siehe Abbildung 2.13).

Abbildung 2.13 Alle Registerkarten eines Views schlieen

2.2.3

Funktionsbausteine anlegen

Auch wenn Sie mit neuesten Entwicklungswerkzeugen und dem aktuellen


SAP-NetWeaver-Release arbeiten, kommen Sie nicht darum herum, ab und
zu einen Funktionsbaustein oder einen Report entwickeln zu mssen. Die
ADT untersttzen Sie bei dieser Aufgabe. In unserem Beispiel nutzen wir
Funktionsbausteine, um den Zugriff auf die Datenbank zu kapseln. Zunchst
legen wir einen einfachen Baustein zum Lesen und einen zum Schreiben
eines Issues an. Beginnen wir damit, eine Funktionsgruppe anzulegen:
1. ffnen Sie den Dialog zur Anlage eines neuen Repository-Objekts im
Paket Z_ISSUE_LIST ((Strg) + (N)). Whlen Sie aus der Liste ABAP Function Group aus, und fahren Sie mit Next fort.
2. Nennen Sie die neue Funktionsgruppe Z_ISSUE_LIST_DB, und vergeben
Sie eine passende Beschreibung.
3. Whlen Sie den Transportauftrag, den Sie fr dieses Projekt angelegt
haben, und beenden Sie die Anlage mit Finish.
Nach der Aktualisierung taucht die Funktionsgruppe im Project Explorer auf.
Als Nchstes legen wir die Funktionsbausteine an. Beginnen wir mit dem
Baustein zum Lesen der Issues.
1. Markieren Sie die Funktionsgruppe Z_ISSUE_LIST_DB im Project Explorer,
und starten Sie die Anlage eines neuen Objekts ((Strg) + (N)).
2. Whlen Sie ABAP ABAP Function Module aus der Liste verfgbarer
Objekte.
3. Geben Sie Z_READ_SINGLE_ISSUE als Namen fr den neuen Funktionsbaustein ein (siehe Abbildung 2.14). An dieser Stelle knnen Sie auch noch
einmal die Funktionsgruppe auswhlen, falls Sie diese nicht schon im Pro-

82

Mit Entwicklungsobjekten arbeiten

ject Explorer gewhlt hatten. Wenn Sie alle Angaben gemacht haben, fahren Sie mit Next fort.

Abbildung 2.14 Namen und Beschreibung des Funktionsbausteins angeben

4. Whlen Sie den Transportauftrag aus, und legen Sie den neuen Baustein
an. Sie knnen an dieser Stelle nur den Transportauftrag whlen, in dem
sich auch Ihre Funktionsgruppe befindet.
5. Im Editor-View sehen Sie den leeren Funktionsbaustein. Ersetzen Sie den
Code durch den aus Listing 2.1.
FUNCTION z_read_single_issue
IMPORTING
if_issue_id TYPE z_issue_id
EXPORTING
es_issue TYPE zissue
EXCEPTIONS
no_issue_found.
SELECT SINGLE *
FROM zissue INTO es_issue
WHERE issue_id = if_issue_id.
IF sy-subrc NE 0.
RAISE no_issue_found.
ENDIF.
ENDFUNCTION.
Listing 2.1 Funktionsbaustein Z_READ_SINGLE_ISSUE

83

2.2

Funktionen der ABAP Development Tools

6. Aktivieren Sie den neuen Funktionsbaustein mit (Strg) + (F3) oder ber
den Button Aktivieren ( ) in der Toolbar.
7. Legen Sie auf die gleiche Art den Baustein zum Schreiben des Issues
Z_CREATE_SINGLE_ISSUE an.
8. Ersetzen Sie den Code Ihres neuen Bausteins im Editor-View durch den
aus Listing 2.2.
FUNCTION z_create_single_issue
IMPORTING
is_issue type zissue
EXPORTING
es_issue type zissue
EXCEPTIONS
duplicate_issue_id
no_issue_id.
es_issue = is_issue.
IF es_issue-issue_id IS INITIAL.
RAISE no_issue_id.
ENDIF.
es_issue-erdat = sy-datum.
es_issue-aedat = sy-datum.
es_issue-ernam = sy-uname.
es_issue-aenam = sy-uname.
INSERT ZISSUE FROM es_issue.
IF sy-subrc = 4.
RAISE duplicate_issue_id.
ENDIF.
ENDFUNCTION.
Listing 2.2 Funktionsbaustein Z_CREATE_SINGLE_ISSUE

Aktivieren Sie den neuen Baustein. Ihre Funktionsgruppe sollte jetzt im Project Explorer wie in Abbildung 2.15 aussehen.

Abbildung 2.15 Funktionsgruppe Z_ISSUE_LIST

Nun haben Sie zwei Bausteine, um die Basisfunktionen unseres Programms


auszufhren. Sie knnen einen Datensatz speichern und wieder von der Da-

84

Mit Entwicklungsobjekten arbeiten

tenbank lesen. Wenn Sie mgen, knnen Sie die neuen Funktionen ausprobieren. Wechseln Sie dazu einfach in den entsprechenden Funktionsbaustein,
und starten Sie die Standard-Testumgebung im SAP GUI mit der Taste (F8).
Vielleicht sind Sie ber die Syntax der Funktionsbausteine irritiert. Im Function Builder, d. h. in Transaktion SE37, wird die Schnittstelle eines Funktionsbausteins formularbasiert aufgebaut. Bei ABAP in Eclipse erfolgt die
Deklaration rein quelltextbasiert. Das hat den Nebeneffekt, dass sich ein
Funktionsbaustein sehr einfach kopieren und an anderer Stelle wieder voll
funktionsfhig einfgen lsst.
Auch wenn Sie die formularbasierte Erstellung von Funktionsbausteinen
gewohnt sind, drfte Ihnen die Angabe der Parameter nicht gnzlich fremd
sein. Der Function Builder fgt genau diese Signatur als Kommentar ein,
wenn Sie einen Baustein anlegen. Die Syntax der Funktionsbausteindeklaration ist in Listing 2.3 noch einmal zusammengefasst:
FUNCTION func.
[IMPORTING parameters]
[EXPORTING parameters]
[CHANGING parameters]
[TABLES table_parameters]
[{RAISING|EXCEPTIONS} exc1 exc2 ...]
Listing 2.3 Deklaration eines Funktionsbausteins

Die Parameter werden dabei wie in Listing 2.4 angegeben.


* Parameter
{ VALUE(p1) | p1 }
{TYPE [REF TO] type} | {LIKE struccomp} | {STRUCTURE struc}
[OPTIONAL|{DEFAULT def1}]
* table_parameter
p1 {TYPE itab_type} | {STRUCTURE struc} [OPTIONAL]
Listing 2.4 Parameterangabe bei Funktionsbausteinen

Diese Deklaration hnelt sehr der Deklaration von Methoden.


Obsolete TABLES-Parameter
Beachten Sie, dass TABLES-Parameter obsolet sind und nach Mglichkeit nicht
mehr verwendet werden sollten. Verwenden Sie stattdessen die Parameter der
Kategorien IMPORTING, EXPORTING oder CHANGING mit den entsprechenden Tabellentypen. Auerdem sollten Sie, falls mglich, klassenbasierte Ausnahmen verwenden.

85

2.2

Funktionen der ABAP Development Tools

Die Syntax zur Erzeugung der Funktionsbausteinsignatur mssen Sie nicht


auswendig lernen. Die ADT werden mit einer Vorlage fr Funktionsbaustein-Parameter ausgeliefert. Sie finden diese Vorlage unter dem Namen
functionModuleParameter. Nheres zu Code-Vorlagen erfahren Sie in
Abschnitt 2.3, Code-Vervollstndigung.

2.2.4

Klassen

Als Nchstes legen wir die erste Klasse unseres Projekts an. In diesem
Abschnitt geht es zunchst um die grundstzliche Vorgehensweise. In
Abschnitt 2.3, Code-Vervollstndigung, und Abschnitt 2.7, Quick Fix und
Quick Assist, zeige ich Ihnen weitere Mglichkeiten, effektiver mit dem
Quellcode zu arbeiten. Wenn Sie bereits im Class Builder der ABAP Workbench (Transaktion SE24) mit ABAP Objects gearbeitet haben, kennen Sie
sicherlich die formularbasierte Anlage von Klassen (siehe Abbildung 2.16).

Abbildung 2.16 Formularbasierter Class Builder

In dieser Sicht werden die Methoden und Attribute einer Klasse tabellarisch
dargestellt. Dies erleichtert die objektorientierte Entwicklung. Es ist nicht
notwendig, von Anfang an die exakte Syntax einer Klasse zu kennen. Allerdings kann es beim Erstellen umfangreicher Klassen mhselig sein, die Definition zu erstellen bzw. zwischen den Ansichten fr die verschiedenen
Methoden hin und her zu springen. Erfahrene Entwickler sind mit einer Tastatureingabe oftmals schneller. Zudem lsst sich eine Klasse in der Formularsicht nur schwierig durchsuchen oder kopieren.
Die formularbasierte Sicht wird in Eclipse nicht direkt untersttzt. Stattdessen sehen Sie hier den reinen Quelltext einer Klasse. Entwickler, die mit
Sprachen wie Java, C# oder C++ vertraut sind, werden sich mit dieser Darstellung wahrscheinlich sehr schnell anfreunden knnen.

86

Mit Entwicklungsobjekten arbeiten

Ein quelltextbasierter Klassen-Editor steht Ihnen brigens auch im SAP GUI


zur Verfgung. Die Mglichkeit, in diese Ansicht zu wechseln, wurde bereits
mit SAP NetWeaver 7.0 Enhancement Package (EHP) 2 eingebaut. Sie rufen
diese Sicht im Class Builder (bzw. in der ABAP Workbench, Transaktion
SE80) ber einen Klick auf den Button Source Code-Based in der Funktionsleiste auf. Die im quelltextbasierten Editor verwendete Syntax ist mit der zur
Anlage lokaler Klassen identisch. Ein Beispiel fr eine leere Klassendefinition
sehen Sie in Abbildung 2.19.

Klasse anlegen
Schauen wir uns nun an, wie Sie in Eclipse ganz einfach zu einer solchen
Klassenhlle kommen. Dazu erstellen wir eine Klasse ZCL_ISSUE, die die Aufgaben in unserer Aufgabenliste reprsentieren kann:
1. Klicken Sie im Project Explorer mit der rechten Maustaste auf das Paket
Z_ISSUE_LIST.
2. Whlen Sie aus dem Kontextmen Neu ABAP Class.
3. Geben Sie als Namen fr die Klasse ZCL_ISSUE ein (siehe Abbildung 2.17).

Abbildung 2.17 Namen und Beschreibung einer Klasse angeben

Namenskonventionen beachten
Es gelten die blichen Einschrnkungen und Konventionen bei der Namensvergabe. Eine kundeneigene Klasse muss mit Y oder Z, gefolgt von CL, beginnen (ausgenommen, es gibt in Ihrem Unternehmen kundeneigene Namensrume).

87

2.2

Funktionen der ABAP Development Tools

4. Vergeben Sie eine sinnvolle Beschreibung, und besttigen Sie mit einem
Klick auf Next.
5. Whlen Sie den Transportauftrag aus, den Sie fr unser Demoprojekt
angelegt haben, und schlieen Sie den Anlage-Assistenten mit einem Klick
auf Finish (siehe Abbildung 2.18).

Abbildung 2.18 Auswahl des Transportauftrags

Im Project Explorer finden Sie unter dem Paket Z_ISSUE_LIST nun einen
neuen Eintrag Source Library und darunter wiederum den Ordner Classes.
In diesem Ordner finden Sie die neu angelegte Klasse ZCL_ISSUE. Der
Anlage-Assistent hat fr uns die Grundstruktur der Klasse angelegt. Wie in
Abbildung 2.19 dargestellt, wurden der Definitionsteil mit der Public, Protected und Private Section sowie der Implementierungsteil angelegt.
Objektorientiertes ABAP
Auf Details zu ABAP Objects gehe ich in diesem Buch nicht ein. Falls Sie tiefer in
das Thema einsteigen mchten oder weitere Informationen bentigen, mchte ich
Ihnen das Buch ABAP Objects von Horst Keller und Sascha Krger ans Herz legen.

88

Mit Entwicklungsobjekten arbeiten

Abbildung 2.19 Rumpf einer frisch angelegten Klasse

Als Nchstes legen wir ein Feld an, in dem der Inhalt eines Issues gespeichert
werden soll. Auerdem definieren wir einen Constructor, der die Klasse sauber instanziiert, sowie eine Getter- und eine Setter-Methode, um den Inhalt
zu lesen bzw. zu ndern. Fgen Sie in die Private Section folgende Datendeklaration ein:
DATA ms_issue TYPE zissue.

In der Public Section tragen Sie die Deklarationen fr den Constructor und
die beiden Methoden wie in Listing 2.5 ein.
METHODS:
constructor IMPORTING if_issue TYPE z_issue_id OPTIONAL,
get_issue RETURNING VALUE(rs_issue) TYPE zissue,
set_issue IMPORTING is_issue TYPE zissue.
Listing 2.5 Public Section der Klasse ZCL_ISSUE

Damit ist der Deklarationsteil frs Erste vollstndig. Versuchen Sie, die
Klasse so zu aktivieren, wird jedoch eine Fehlermeldung ausgegeben, da wir
fr die Methoden noch keine Implementierung angelegt haben. Im Unterschied zur ABAP Workbench zeigt Ihnen Eclipse diesen Fehler sogar schon
vor dem Speichern der Klasse an. Dabei wird in der entsprechenden CodeZeile ein Marker ( , siehe Abbildung 2.20) gesetzt, und die Stelle wird rot
unterstrichen, hnlich wie moderne Textverarbeitungsprogramme es bei
Rechtschreibfehlern tun. Fahren Sie mit der Maus ber den Marker, wird
eine kurze Fehlermeldung eingeblendet. Nheres zu dieser Funktion erfahren Sie in Abschnitt 2.4.3, Lineale und Markierungen, und Abschnitt 2.7,
Quick Fix und Quick Assist).

89

2.2

Funktionen der ABAP Development Tools

Abbildung 2.20 Markierung einer fehlerhaften Zeile

View Problems
Versuchen Sie testweise, die Klasse mit der Tastenkombination (Strg) + (F3)
zu aktivieren. Sie erhalten die Meldung, dass Eclipse die Klasse nicht aktivieren konnte. Zudem wird der View Problems eingeblendet (siehe Abbildung
2.21). Hier finden Sie analog zum Fehlerprotokoll in der ABAP Workbench
eine Liste der aktuellen Aktivierungsfehler. Ein Doppelklick auf die Fehlermeldung bringt Sie direkt zur fehlerhaften Zeile im Quellcode. Sollte Ihnen
die Problemsicht nicht angezeigt werden, knnen Sie diese jederzeit ber
Window Show View Problems einblenden.

Abbildung 2.21 Problemsicht

Klasse implementieren
Implementieren wir nun die fehlenden Methoden:
1. Fgen Sie im Implementierungsteil der Klasse den Quelltext aus Listing
2.6 ein.
METHOD constructor.
DATA:
ls_issue TYPE ZISSUE.
IF if_issue IS NOT INITIAL.
CALL FUNCTION 'Z_READ_SINGLE_ISSUE'
EXPORTING
if_issue_id
= if_issue
IMPORTING
es_issue
= ls_issue
EXCEPTIONS
no_issue_found = 1
.
IF sy-subrc <> 0.
RAISE no_issue_found.

90

Mit Entwicklungsobjekten arbeiten

ENDIF.
ENDIF.
me->set_issue( ls_issue ).
ENDMETHOD.
METHOD GET_ISSUE.
rs_issue = me->ms_issue.
ENDMETHOD.
METHOD SET_ISSUE.
me->ms_issue = is_issue.
ENDMETHOD.
Listing 2.6 Implementierung der Klasse ZCL_ISSUE

2. Aktivieren Sie die Klasse mit der Tastenkombination (Strg) + (F3). Eclipse
speichert alle nderungen Ihrer Klasse vor dem Aktivieren.
Drcken Sie (F8), um die Klasse zu testen. Sie landen in der gewohnten
ABAP-Objects-Testumgebung im Object Builder.

View Outline
Die quelltextbasierte Sicht kann gerade bei umfangreicheren Implementierungen leicht unbersichtlich werden. Eclipse bietet daher den View Outline (Gliederung). In dieser Sicht sehen Sie eine schematische bersicht der
inneren Struktur Ihres Entwicklungsobjekts. Im Falle unserer neuen Klasse
werden Ihnen der Constructor sowie die Methoden und das Attribut MS_
ISSUE angezeigt (siehe Abbildung 2.22). Falls der Outline-View bei Ihnen
nicht von Anfang an sichtbar ist, knnen Sie ihn mit der Tastenkombination
() + (Alt) + (Q), gefolgt von der Taste (O), ffnen.

Abbildung 2.22 Outline der Klasse ZCL_ISSUE

Sie knnen die Elemente alphabetisch sortieren ( ), nur ffentliche Elemente anzeigen lassen ( ) oder alle Elemente auer den Methoden ausblenden ( ). Abbildung 2.23 gibt Ihnen eine bersicht ber die wichtigsten Elemente, die in einer Klasse vorkommen knnen.

91

2.2

Funktionen der ABAP Development Tools

Abbildung 2.23 Verschiedene Elemente in der Outline

Mit einem Klick auf einen Eintrag in der Outline springen Sie zur entsprechenden Implementierung im Quelltext-Editor. Mchten Sie zur Definition
springen, markieren Sie zunchst das gewnschte Element in der Outline und
drcken anschlieend (Strg) + (F3). Befinden Sie sich im Quelltext-Editor,
knnen Sie ebenfalls zwischen Implementierung und Definition hin und her
springen. Klicken Sie dazu mit gedrckter (Strg)-Taste auf den Namen eines
Elements. Der Cursor springt dann von der Definition in die Implementierung
oder umgekehrt. Alternativ setzen Sie den Cursor auf das Element und drcken (F3) oder nutzen das Kontextmen ber die rechte Maustaste.
Verschiedene Navigationsmglichkeiten
Fr viele Aktionen in Eclipse gibt es mehr als eine Mglichkeit, sie auszufhren. Es
schadet nicht, mehrere davon zu kennen, damit Sie je nach Situation die effizienteste einsetzen knnen. Nutzen Sie am besten die Option, die fr Sie am komfortabelsten bzw. einprgsamsten ist.

2.2.5

ABAP-Programme erstellen

Der Umgang mit Programmen unterscheidet sich im Grunde nicht sehr von
dem mit Klassen und Funktionsbausteinen, allerdings ist es hufiger notwendig, in das SAP GUI abzuspringen. Das liegt unter anderem daran, dass das
Augenmerk bei den ADT mehr auf aktuelleren Techniken wie ABAP Objects
und Web Dynpro ABAP liegt.
Das Programm, das wir im Folgenden erstellen, dient dazu, eine Liste von
Issues anzuzeigen:
1. Markieren Sie das Paket Z_ISSUE_LIST im Project Explorer, und legen Sie
mit der Tastenkombination (Strg) + (N) ein neues ABAP Program an.

92

Mit Entwicklungsobjekten arbeiten

2. Nennen Sie diesen neuen Report Z_ISSUE_LIST. Vergeben Sie eine aussagekrftige Beschreibung.
3. Ordnen Sie das Programm dem Transportauftrag fr die Aufgabenliste zu,
und beenden Sie die Anlage.
4. ffnen Sie den neuen Report mit einen Doppelklick auf Z_ISSUE_LIST im
Project Explorer. Im Editor ersetzen Sie den generierten Programmrumpf
durch das Coding aus Listing 2.7.
REPORT z_issue_list.
DATA:
gs_issue TYPE zissue,
gt_issue TYPE TABLE OF zissue,
gr_grid TYPE REF TO cl_gui_alv_grid.
SELECT-OPTIONS:
s_id FOR gs_issue-issue_id,
s_prj FOR gs_issue-project_id,
s_state FOR gs_issue-state NO intervals,
s_erdat FOR gs_issue-erdat.
START-OF-SELECTION.
PERFORM select_issues TABLES gt_issue.
END-OF-SELECTION.
PERFORM display_issue_list.
FORM select_issues TABLES t_issues STRUCTURE gs_issue.
SELECT * FROM zissue INTO TABLE t_issues
WHERE issue_id IN s_id
AND
project_id IN s_prj
AND
state IN s_state
AND
erdat IN s_erdat.
ENDFORM.
FORM display_issue_list.
CREATE OBJECT gr_grid
EXPORTING
i_parent
= cl_gui_container=>default_screen.
GR_GRID->set_table_for_first_display(
EXPORTING
i_structure_name
= 'ZISSUE'
CHANGING
it_outtab
= gt_issue
).
CALL SCREEN 0100.
ENDFORM.
Listing 2.7 Report Z_ISSUE_LIST

5. Drcken Sie (Strg) + (S), um Ihre nderung zu sichern.

93

2.2

Funktionen der ABAP Development Tools

Leider ist es nicht mglich, ein Dynpro innerhalb der ADT zu erstellen,
daher legen wir die Benutzeroberflche im SAP GUI an. Klicken Sie mit der
rechten Maustaste im Quelltext auf die Anweisung CALL SCREEN, und whlen
Sie Open with SAP GUI im Kontextmen. Die entsprechenden Stelle im
Quelltext wird im SAP GUI geffnet.
1. Klicken Sie doppelt auf die Dynpro-Nummer 0100 im Quelltext, um das
Dynpro per Vorwrtsnavigation anzulegen.
2. Speichern Sie, und schlieen Sie das SAP GUI.
3. Aktivieren Sie alle Objekte mittels () + (Strg) + (F3).
Nun knnen Sie den Report wie blich ber die Funktionstaste (F8) ausfhren und testen. Wenn Sie schon Issues ber die Funktionsbausteine angelegt
haben, knnen Sie diese nun mithilfe des Reports anzeigen. Starten Sie den
Report, fllt auf, dass die Bezeichner der Select Options noch fehlen. Leider
knnen Sie diese Texte nicht direkt in Eclipse pflegen. Allerdings knnen Sie
direkt an die Selektionstextpflege im SAP GUI springen:
1. Klicken Sie mit der rechten Maustaste auf eine Select Option im Quelltext,
und whlen Sie im Kontextmen Open others Textelements.
2. Auf der Registerkarte Selection Texts knnen Sie wie gewohnt die
Bezeichner austauschen (siehe Abbildung 2.24). Fr unsere Zwecke
gengt es, die Bezeichner aus dem ABAP Dictionary zu bernehmen. Markieren Sie dazu die Checkbox in der Spalte Dictionary.

Abbildung 2.24 Selektionstexte anpassen

Als Nchstes strukturieren wir unseren Report ein wenig und lagern die
Datendeklarationen in ein Top-Include aus:
1. Legen Sie ein neues Include an. Markieren Sie dazu das Paket Z_ISSUE, und
verwenden Sie die Tastenkombination (Strg) + (N), bzw. whlen Sie Neu
ABAP Repository Object im Kontextmen.

94

Mit Entwicklungsobjekten arbeiten

2. Whlen Sie den Eintrag ABAP Include aus der Objektliste.


3. Nennen Sie das neue Include Z_ISSUE_LIST_TOP, und vergeben Sie eine
aussagekrftige Beschreibung.
4. Kopieren Sie den Deklarationsteil aus dem Report Z_ISSUE_LIST im Editor-View in das neue Include, und aktivieren Sie dieses ((Strg) + (F3)). Das
Include sollte nun den Code aus Listing 2.8 enthalten.
REPORT z_issue_list.
DATA:
gs_issue TYPE zissue,
gt_issue TYPE TABLE OF zissue,
gr_grid TYPE REF TO cl_gui_alv_grid.
Listing 2.8 Inhalt von Z_ISSUE_LIST_TOP

5. Ersetzen Sie den Deklarationsteil des Reports Z_ISSUE_LIST durch den folgenden Code, und aktivieren Sie den Report:
INCLUDE zissue_list_top.

Wenn Sie den Report nun ber die Funktionstaste (F8) testen, sollte er wie
bisher funktionieren.
Diese Methode, Includes anzulegen, ist nicht die schnellste. Im Verlauf dieses Kapitels werden Sie den Report noch weiter strukturieren und eine deutlich schnellere Methode kennenlernen, Includes zu erstellen. Die Struktur
des Reports soll schlielich wie in Abbildung 2.25 aussehen. Mit einem Klick
auf eines der Elemente knnen Sie in den zugehrigen Quelltext navigieren.

Abbildung 2.25 Struktur des Reports Z_ISSUE_LIST

95

2.2

Funktionen der ABAP Development Tools

2.3

Code-Vervollstndigung

Es ist schon hufig passiert, dass ein Kunde oder ein Kollege mir beim Entwickeln ber die Schulter geschaut hat und mich verwundert fragte, wie ich
so schnell den Methodennamen eintippen konnte oder woher auf einmal die
Liste aller Felder einer Struktur gekommen ist. Die Code-Vervollstndigung
ist eine Funktion, die in der Programmierwelt auerhalb von SAP-Systemen
schon lange zum Standard gehrt. Im SAP NetWeaver AS ABAP hat diese
Funktion mehr oder weniger unbemerkt erst mit dem Release 7.02 und SAP
GUI 7.10 Einzug gehalten.
Als ich mit der ABAP-Entwicklung begonnen habe, war ich das Arbeiten mit
Entwicklungsumgebungen wie Eclipse, NetBeans IDE oder Microsoft Visual
Studio gewhnt. Bei diesen Programmen ist die Code-Vervollstndigung
bzw. Code Assist schon seit Jahren Standard. Daher war es auch dieses Feature, das ich am schmerzlichsten vermisst habe. Dementsprechend froh war
ich, als die Funktion in der SAP-Umgebung Einzug hielt.
Der Vorteil der Code-Vervollstndigung liegt auf der Hand. Es ist nahezu
unmglich, alle Methodennamen oder Feldnamen einer Struktur im Kopf zu
behalten. Deshalb ist man immer wieder gezwungen, andere Entwicklungsobjekte zu ffnen und nachzusehen. Sind Sie nicht gerade mit einem Arbeitsplatz mit mehreren Bildschirmen gesegnet, bedeutet das viel hin- und hernavigieren bzw. viele Fensterwechsel, d. h., Sie sind gezwungen, Ihren
Arbeitsrhythmus zu unterbrechen. Sie kommen aus dem Fluss (oder Flow,
wie es neudeutsch heit). Und selbst mit mehreren Monitoren oder wenn
Sie ein ausgezeichnetes Gedchtnis haben, knnen sich immer wieder Tippfehler einschleichen.
Autovervollstndigung in Eingabefeldern
Die Tastenkombination (Strg) + Leertaste ersetzt in Eclipse zum Teil die SuchhilfeTaste (F4) im SAP GUI. Eingabefelder, die diese Funktion bieten, sind meistens mit
einer kleinen Glhbirne gekennzeichnet (siehe Abbildung 2.26). Ansonsten arbeitet diese Funktion genau wie die Code-Vervollstndigung.

Abbildung 2.26 Eingabefeld mit Autovervollstndigung

Obwohl diese Funktion im SAP GUI verfgbar ist, wird sie hufig nicht angewandt entweder, weil Entwickler gar nicht wissen, dass es diese Funktion
berhaupt gibt, oder aus Gewohnheit. Ich empfehle Ihnen, unabhngig

96

Code-Vervollstndigung

davon, ob Sie knftig ausschlielich in Eclipse entwickeln oder der ABAP


Workbench treu bleiben, die Anwendung dieser Funktion in Ihre Arbeitsablufe zu integrieren.

2.3.1

Einfache Code-Vervollstndigung

Die Code-Vervollstndigung funktioniert in der ABAP Workbench und in


Eclipse genau gleich. Sie verwenden die Code-Vervollstndigung, indem Sie
den Cursor im Quelltext positionieren und (Strg) + Leertaste drcken. Sie
erhalten eine Liste von Vorschlgen, basierend auf Ihrer aktuellen Eingabe.
Nehmen wir an, der Code beinhaltet eine Variable gr_grid vom Typ cl_gui_
alv_grid. Geben Sie nun gr_grid-> ein, und drcken Sie die Tasten (Strg)
+ Leertaste, erhalten Sie eine Liste aller verfgbaren Methoden dieser Klasse.
Sollen Ihnen nur die Setter-Methoden angezeigt werden, geben Sie gr_grid>set ein und drcken dann die Tasten (Strg) + Leertaste. Die Liste wird daraufhin automatisch auf Methoden eingeschrnkt, die mit SET beginnen.
Zudem werden Ihnen noch die Signatur und die Kurzbeschreibung der
Methoden eingeblendet. Ihre Auswahl knnen Sie mit der ()- oder Tabulatortaste bernehmen.
Bei Methoden- oder Funktionsbausteinaufrufen ist gerade die Signatur
schwierig zu merken. Dabei hilft Ihnen ebenfalls die Code-Vervollstndigung. Haben Sie eine Auswahl aus der Vorschlagsliste getroffen, bernehmen Sie diese dazu nicht einfach mit der Taste (), sondern mit der Tastenkombination () + (). Neben dem Namen des Objekts wird damit dessen
vollstndige Signatur in den Quelltext eingefgt (siehe Abbildung 2.27).
Optionale Parameter sind dabei zunchst auskommentiert. Diese Funktion
hnelt dem Einfgen ber den Pfad Muster CALL FUNCTION bzw. ABAP
Objects aus der ABAP Workbench, ist aber deutlich schneller anzuwenden.

Abbildung 2.27 Code-Vervollstndigung in der ABAP Workbench

Funktioniert die Code-Vervollstndigung bei Ihnen in der Workbench trotz


passender Server-Version und passenden SAP GUIs nicht, kann es sein, dass

97

2.3

Funktionen der ABAP Development Tools

Sie diese noch aktivieren mssen. Die Einstellung im SAP GUI hat keinen
Einfluss auf Ihre Eclipse-Entwicklungsumgebung. Wenn Sie die Code-Vervollstndigung in der ABAP Workbench deaktiviert haben, knnen Sie diese
in Eclipse daher trotzdem nutzen. Um die Funktion in Eclipse zu verwenden,
mssen Sie sich nicht einmal an andere Tastenkombinationen gewhnen,
sondern knnen die gleichen verwenden wie in der ABAP Workbench.
Abbildung 2.28 zeigt die Vorschlagsliste und eine Methodensignatur in
Eclipse.

Abbildung 2.28 Code-Vervollstndigung in Eclipse

2.3.2

Code-Vorlagen

Code-Vorlagen haben ebenfalls das Potenzial, Ihnen eine Menge Tipparbeit


zu ersparen. Bei diesen Vorlagen handelt es sich um Quelltextschnipsel, die
bei Bedarf einfach in den Programm-Code eingefgt werden knnen. Jedem
dieser Schnipsel wird ein eindeutiges Schlsselwort zugewiesen. Geben Sie
dies im Editor ein, sorgt Eclipse dafr, dass es durch den entsprechenden
Code-Schnipsel ersetzt wird. Diese Schlsselworte tauchen in der EclipseCode-Vervollstndigung auf, wenn Sie diese mit der Tastenkombination
(Strg) + Leertaste aufrufen.
Der einfachste Weg, Code-Vorlagen zu erstellen und zu bearbeiten, geht
ber den View Templates. Wie alle anderen Views finden Sie diesen View
im Men unter Window Show View Other. Die Code-Vorlagen finden
Sie unter General Templates und darber hinaus in den Einstellungen von
Eclipse. Dazu whlen Sie im Hauptmen den Pfad Window Preferences.
Im Dialogfenster Preferences wechseln Sie dann in den Bereich ABAP
Development Editors Source Code Editors Templates (siehe Abbildung 2.29). Hier knnen Sie Vorlagen (Templates) exportieren, importieren
und bearbeiten.

98

Code-Vervollstndigung

Abbildung 2.29 Einstellungen der Code-Vorlagen

Es wird bereits eine kleine Auswahl an Vorlagen mit den ADT ausgeliefert, Sie
knnen aber auch sehr einfach eigene Templates anlegen und verwenden:
1. ffnen Sie den View Templates, und whlen Sie im Men des Views das
Icon Create new Template ( , siehe Abbildung 2.30).

Abbildung 2.30 Neue Code-Vorlage anlegen

99

2.3

Funktionen der ABAP Development Tools

2. Als Beispiel erstellen wir ein Template mit dem Namen HELLO_WORLD. Idealerweise sollte die Beschreibung den Inhalt des Templates kurz zusammenfassen. Sie wird spter in der Code-Vervollstndigung angezeigt. Als
Pattern geben Sie WRITE 'Hello World'. ein (siehe Abbildung 2.31).
Besttigen Sie die Anlage mit OK.

Abbildung 2.31 Code fr die Vorlage eingeben

Sie knnen Ihre Vorlage jetzt berall in Ihrem ABAP-Code verwenden. Achten Sie darauf, dass es fr die Web-Dynpro-Entwicklung einen eigenen Kontext gibt, den Sie bei der Anlage im Feld Context auswhlen knnen.
ffnen Sie zum Testen der Funktion einen eigenen ABAP-Report (z. B. Ihr
Programm Z_HELLO_WORLD). Geben Sie im Quelltext-Editor HELLO ein, und
drcken Sie (Strg) + Leertaste. Ihre Code-Vorlage sollte nun in der Vorschlagsliste der Code-Vervollstndigung zur Auswahl stehen (siehe Abbildung 2.32). Sie knnen diesen Code-Schnipsel einfach mit () einfgen.

Abbildung 2.32 Code-Vervollstndigung mit Template

Unser erster Code-Schnipsel wird bei Ihrer tglichen Arbeit wohl eher selten
zum Einsatz kommen. Auerdem handelt es sich nur um ein statisches Stck

100

Code-Vervollstndigung

Text, das in den Quelltext eingefgt wird. Schauen wir uns daher als Nchstes an, wie Sie Templates etwas ntzlicher gestalten knnen:
1. Markieren Sie im Editor-View den neu eingefgten Quelltext WRITE
'Hello World'.

2. Suchen im View Template nach dem Standard-Template ifElse, und klicken Sie doppelt auf diesen Eintrag. Alternativ knnen Sie auch mit der
rechten Maustaste auf den Eintrag klicken und den Kontextmeneintrag
Insert whlen (siehe Abbildung 2.33).

Abbildung 2.33 Einfgen einer Code-Vorlage ber den View Templates

3. Ihr Code sollte nun wie in Abbildung 2.34 aussehen. Eclipse hat das Template eingefgt, das Sie ausgewhlt haben. Bei diesem Template wird der
markierte Text nicht berschrieben, stattdessen wird die Markierung in
den Quelltext der Vorlage integriert. Zudem wurde der Ausdruck expr
markiert.

Abbildung 2.34 Eingefgte Code-Vorlage

4. Geben Sie anstelle von expr einen sinnvollen Ausdruck, z. B. sy-subrc = 0,


ein.

101

2.3

Funktionen der ABAP Development Tools

5. Drcken Sie die Tabulatortaste. Die Eingabemarke springt zum Text elseblock und markiert diesen vollstndig.
6. Geben Sie anstelle von elseblock einen beliebigen Ausdruck, z. B.
WRITE 'Fehler'., ein.
7. Besttigen Sie wieder mit der Tabulatortaste. Die Eingabemarke steht nun
hinter dem Code-Block WRITE 'Hello World'.
Um zu verstehen, wie die interaktive Code-Vorlage funktioniert, sehen Sie
sich das Template ifElse einmal genauer an. Whlen Sie es dazu mit der
rechten Maustaste im Template-View aus, und klicken Sie auf Edit. Sie
gelangen in den Template-Editor. Das Pattern fr dieses Template wird
Ihnen wie in Listing 2.9 angezeigt.
if ${expr}.
${word_selection}${cursor}
else.
${elseblock}
endif.
Listing 2.9 Pattern des ifElse-Templates

Sie sehen hier zum einen syntaktisch korrektes ABAP, zum anderen Ausdrcke wie ${cursor}, die bei der Aktivierung in jedem System zu Fehlern fhren wrden. Bei diesen Ausdrcken handelt es sich um Variablen, die durch
die Entwicklungsumgebung verarbeitet werden. Der Ausdruck ${cursor}
sorgt z. B. dafr, dass der Cursor nach der Template-Bearbeitung an die Stelle
positioniert wird, an der der Ausdruck steht. Tabelle 2.4 enthlt eine bersicht aller derzeit verfgbaren Variablen. Im Template-Editor finden Sie die
Schaltflche Insert Variable, ber die Ihnen alle untersttzen Variablen
zum Einfgen angeboten werden.
Variable

Funktion

${cursor}

Markiert die Position des Cursors nach dem Einfgen


des Templates.

${date}

aktuelles Datum

${dollar}

Setzt das $-Symbol. Wird dieses Symbol eingefgt,


interpretiert Eclipse die Eingabe als Variable.

${enclosing_object}

Name des aktuellen Objekts. Wird das Template


z. B. in eine Klasse eingefgt, enthlt ${enclosing_
object} den Namen dieser Klasse.

Tabelle 2.4 Variablen fr Code-Vorlagen

102

Code-Vervollstndigung

Variable

Funktion

${enclosing_package}

Paket, in dem sich das aktuelle Objekt befindet

${line_selection}

aktuelle Selektion (quivalent zu ${word_


selection})

${system_id}

aktuelle System-ID (sy-sysid)

${time}

aktuelle Systemzeit

${user}

aktuell angemeldeter Benutzer

${word_selection}

Aktuelle Selektion. Diese Variable funktioniert nur,


wenn sie ber den Template-View eingefgt wird.

${year}

aktuelles Jahr

Tabelle 2.4 Variablen fr Code-Vorlagen (Forts.)

Das ifElse-Template enthlt zudem noch die Ausdrcke ${expr} und


${elseblock}. Diese Variablen werden nicht automatisch durch Eclipse
befllt, sondern es handelt sich um benutzerdefinierte Variablen, die Sie
beim Einfgen des Templates von Hand befllen knnen. Diese werden im
Quelltext-Editor mit einem Kasten umrahmt. Sie knnen, wie im Beispiel
gesehen, mit der Tabulatortaste von einer Variablen zur nchsten springen
und diese mit einer eigenen Eingabe belegen. Wird eine Variable mehrfach
verwendet, mssen Sie diese nur einmal belegen. berall, wo diese Variable
im Template auftaucht, wird dieser Wert eingesetzt.
Vergeben Sie fr Variablen mglichst einen Namen, der gleichzeitig auch als
Default-Wert funktionieren kann. Geben Sie beim Einfgen des Templates nmlich keinen Wert fr eine Variable ein, bleibt der Name der Variablen stehen.
Ist kein Default-Wert mglich, vergeben Sie einen aussagekrftigen Namen.
Listing 2.10 zeigt ein Beispiel, in dem mehrfach die gleiche Variable verwendet wird.
DATA:
lt_${structure} TYPE TABLE OF ${structure},
ls_${structure} TYPE ${structure}.
LOOP AT lt_${structure} INTO ls_${structure}.
${cursor}
ENDLOOP.
Listing 2.10 Loop auf Struktur

berlegen Sie einmal, welche Code-Schnipsel Sie immer wieder in mehr


oder weniger gleicher Form ber die Tastatur eingeben. Dabei muss es sich

103

2.3

Funktionen der ABAP Development Tools

nicht unbedingt nur um Code handeln ich nutze Code-Vorlagen z. B., um


meine Programme zu dokumentieren. Dazu mssen Sie sich nur einmal ein
Format fr einen Kommentarkopf ausdenken und knnen dieses dann in
eine Vorlage gieen, die immer gleich aussieht und immer die gleichen
Informationen enthlt. Wichtige Informationen wie das aktuelle Datum oder
Ihr Benutzername werden sogar automatisch befllt.
Ein anderes Einsatzbeispiel ist das Initialisieren von ALV-Listen (SAP List
Viewer). Die Grundstruktur ist dabei immer gleich, es ndern sich nur
wenige Variablennamen. Mithilfe einer Code-Vorlage knnen Sie die
nchste ALV-Liste mit nur einem Befehl anlegen. Sie knnen die Code-Vorlagen auch als Gedchtnissttze verwenden. Sie haben vergessen, wie die
Klasse und der Befehl zum Auslesen von OTR-Texten (OTR = Online Text
Repository) heien? Wenn Sie ein Template mit dem Namen &OTR anlegen,
mssen Sie sich das nicht mehr merken.
Im Downloadbereich zu diesem Buch habe ich einige Vorlagen zusammengetragen, die Ihnen bei der tglichen Arbeit helfen knnen. Viele davon habe
ich im tglichen Einsatz und freue mich jedes Mal, wenn ich etwas Tipparbeit spare. Um einen Vorteil aus diesem Feature zu ziehen, mssen Sie es nur
anwenden. Ein Template anzulegen bedeutet zunchst einmal einen gewissen Mehraufwand. Wenn Sie die Vorlagen aber konsequent verwenden es
gehrt eine gewisse Disziplin dazu, dies zu tun , vereinfachen Sie sich
gerade die Durchfhrung immer wiederkehrender Codierungsarbeiten.
Code-Vorlagen im SAP GUI
Die ABAP Workbench bietet eine hnliche Funktion zur Code-Vervollstndigung.
Allerdings ist die Auswahl der zur Verfgung stehenden Variablen (hier Tags
genannt) etwas geringer. Sie knnen Ihre Vorlagen in den Optionen des Editors
( ) in der ABAP Workbench bearbeiten.

2.4

Quelltext-Editor

Bei der Entwicklung der ADT wurde viel Wert darauf gelegt, den Umstieg
von der ABAP Workbench so einfach wie mglich zu gestallten. So wurden
etwa viele der Tastenkombinationen aus der ABAP Workbench genauso in
Eclipse bernommen und viele der Icons beibehalten. Allerdings unterscheidet sich das Bedienprinzip von Eclipse von dem des SAP GUIs. In Kapitel 1,
Die ersten Schritte Hallo ADT, habe ich die grundstzliche Funktionsweise von Eclipse bereits kurz erklrt. Nun zeige ich Ihnen, wie Sie Ihren

104

Quelltext-Editor

Programmieralltag in Eclipse meistern knnen. Dabei soll es nicht nur


darum gehen, wie Sie lieb gewonnene Funktionen aus der ABAP Workbench
in Eclipse verwenden knnen, sondern wir mchten auch Profit aus den
genderten Bedienkonzepten schlagen und die Arbeitsablufe optimieren.

2.4.1

Aufbau

Auf den ersten Blick hnelt der Eclipse-Editor dem Editor der ABAP Workbench stark. Beide zeigen im Wesentlichen Quelltext an, bieten Syntax-Highlighting und verstehen Basiskommandos wie das Kopieren, Ausschneiden
und Einfgen. Darber hinaus bieten beide Editoren teilweise unscheinbare
Funktionen, die selbst erfahrenen Entwicklern erst auffallen, wenn man sie
darauf aufmerksam macht. Viele davon werden Sie nicht mehr missen wollen, wenn Sie sie einmal benutzt haben. Zum Vergleich schauen wir uns erst
kurz die bekannten Funktionen des SAP GUIs an.
Abbildung 2.35 zeigt einige der visuellen Hilfestellungen aus dem Editor der
ABAP Workbench. Als Erstes fllt auf, dass der Editor eine Zeilennummerierung bietet 1. Dies mag banal erscheinen, hilft aber ungemein dabei, sich im
Quelltext zu orientieren oder mit Kollegen ber bestimmte Code-Stellen zu
diskutieren.

Abbildung 2.35 Visuelle Hilfestellungen im ABAP Workbench Editor

105

2.4

Funktionen der ABAP Development Tools

Ein unscheinbares, aber ebenfalls praktisches Feature ist die Code-Faltung


(Code Folding 2). Sie erkennen sie an dem kleinen Plus- bzw. Minuszeichen
am linken Rand des Quelltextes. Mit einem Klick auf dieses Symbol knnen
Code-Abschnitte zusammen- bzw. auseinandergeklappt werden, was mit
den meisten Code-Blcken in ABAP funktioniert. Dazu gehren neben den
in der Abbildung dargestellten Form-Routinen auch Methoden, Schleifen,
Konditionalblcke und mehrzeilige Kommentare. Das Code Folding ist
besonders bei lngeren unbersichtlichen Code-Passagen sehr praktisch,
denn Code-Teile, die Sie im Augenblick nicht interessieren, knnen Sie einfach ausblenden. Setzen Sie den Cursor an den Beginn eines Code-Blocks,
werden das einleitende und das beendende Schlsselwort des Code-Blocks hervorgehoben. Dies ist sehr praktisch, wenn Sie sich durch stark verschachtelte
Strukturen arbeiten mssen. Die aktuelle Verschachtelung an der sich der
Cursor gerade befindet, wird Ihnen unter 3 angezeigt.
Eine weitere Funktion, die sich erfolgreich der Wahrnehmung entzieht, ist
die Markierung neuer bzw. genderter Zeilen. Diese werden mit einem kleinen
roten Dreieck gekennzeichnet 4. Haben Sie sich beim Codieren verrannt
und sind sich nicht sicher, was Sie gendert haben bzw. ob Sie alle nderungen sichern mchten, helfen Ihnen diese Markierungen (gerade bei umfangreicheren Ressourcen) bei der Orientierung.
Diese kleinen Helfer knnen Sie auch in den ADT finden. Mglicherweise
werden Ihnen im Eclipse-Quelltext-Editor zunchst die Zeilennummern (1 in
Abbildung 2.35) nicht angezeigt. Sie knnen sie einblenden, indem Sie mit
der rechten Maustaste auf die Leiste am linken Rand des Editors klicken und
Show Line Numbers whlen (siehe Abbildung 2.36).

Abbildung 2.36 Zeilennummern einblenden

106

Quelltext-Editor

Abbildung 2.37 Visuelle Hilfestellungen im Eclipse-Quelltext-Editor

Genau wie in der ABAP Workbench knnen zusammengehrige Blcke ber


das Code Folding komprimiert dargestellt werden (2 in Abbildung 2.37). Bewegen Sie die Maus ber das Minuszeichen, zeigt eine dnne Linie an, welche Zeilen zum aktuellen Block gehren. Bei zusammengeklappten Code-Blcken wird
Ihnen der Inhalt kurz eingeblendet. Markieren Sie das einleitende Schlsselwort des Code-Blocks, werden Beginn und Ende des Blocks hervorgehoben.
Die Brotkrumen-Navigation (Breadcrumb 3) zeigt, in welchem Code-Block
sich der Cursor derzeit befindet. Allerdings werden in Eclipse keine Schleifen oder Kontrollblcke angezeigt, sondern nur Programme, Klassen, Methoden und Form-Routinen. Es handelt sich jedoch nicht nur um eine Anzeige wie in der ABAP Workbench, sondern um eine Navigation inklusive
Suchfunktion. Diese Navigationsleiste knnen Sie ber die Tastenkombination () + (Alt) + (B) bzw. in der Menleiste ber das Icon Toggle Breadcrumb ( ) ein- und ausblenden.
Die Nummern der Code-Zeilen, die Sie in der aktuellen Sitzung gendert
haben, werden farblich markiert. Diese Funktion nennt sich in Eclipse Quick
Diff. Sie lsst sich genau wie die Zeilennummerierung ber das Kontextmen

107

2.4

Funktionen der ABAP Development Tools

ein- und ausschalten. Weitere Einstellungen zu Quick Diff (z. B. die Farbe
der Hinterlegung) knnen Sie unter Window Preferences General Editors Text Editors Quick Diff vornehmen. Sie haben hier sogar die Mglichkeit, unterschiedliche Farben fr neue, genderte und gelschte Zeilen zu
hinterlegen.

2.4.2

Lokale nderungshistorie

Die Funktion Quick Diff ist schon recht praktisch, um eine bersicht ber
nderungen zu behalten. Was Sie whrend einer Arbeitssitzung gendert
haben, knnen Sie jedoch nicht einsehen. Die ABAP Workbench erlaubt nur
Vergleiche zwischen aktiver und inaktiver Version des Quelltextes sowie zu
alten Versionen aus Transportauftrgen. (Dies ist in Eclipse ber den View
Transport Organizer ebenfalls mglich.)
Eclipse sendet die durchgefhrten nderungen am Code nicht nur an das
Backend-System, sondern hlt sie zustzlich lokal vor. Dabei wird nicht nur
die aktuelle Version gepuffert, sondern auch eine Versionshistorie aufgebaut. Sie knnen diese einsehen und sogar nderungen aus der Historie wiederherstellen. Um die Funktion aufzurufen, klicken Sie mit der rechten
Maustaste in den Quelltext des entsprechenden Objekts und whlen Compare with Local History. Daraufhin ffnet sich der View History. Hier
sehen sie alle Versionen, die Eclipse zu dem gewhlten Objekt vorhlt (siehe
Abbildung 2.38). Die aktuell angezeigte Version ist fett ausgezeichnet.

Abbildung 2.38 Lokale nderungshistorie des Funktionsbausteins Z_READ_SINGLE_ISSUE

Klicken sie doppelt auf einen Eintrag, ffnet sich ein Vergleichseditor (siehe
Abbildung 2.39). Auf der linken Seite sehen Sie die aktuelle Version, auf der
rechten die gesicherte Historie. Mit Verbindungslinien werden Unterschiede
zwischen den Versionen angezeigt.
Sie knnen zwischen den nderungen hin und herspringen ( , , , )
und auch einzelne ( ) oder alle nderungen ( ) zurcknehmen. Letzteres
funktioniert allerdings nur, wenn die Rcknahme konfliktfrei mglich ist.

108

Quelltext-Editor

Abbildung 2.39 Lokaler Versionsvergleich

2.4.3

Lineale und Markierungen

Neben den Hilfestellungen, die auch in der ABAP Workbench verfgbar


sind, bietet Eclipse einige weitere Funktionen, dank derer Sie sich schneller
im Quelltext zurechtfinden knnen. Eine davon haben Sie schon in
Abschnitt 2.2.4, Klassen, kennengelernt, die Markierung von Syntaxfehlern. Das Glhbirnen-Symbol ( ) wird in diesem Kontext als Annotation
(Anmerkung) bezeichnet. Von diesen Annotationen gibt es eine ganze Reihe
in Eclipse. Eine bersicht der Symbole finden Sie in den Einstellungen unter
Window Preferences General Editors Text Editors Annotations.
Wie Sie in Abbildung 2.40 sehen, befinden sich auf der linken und rechten
Seite neben dem Editor zwei schmale Leisten (Lineale). Das Lineal auf der linken Seite ist der sogenannte Vertical Ruler 1. Auf der rechten Seite finden Sie
den Overview Ruler 2.
Die Markierungen auf dem Vertical Ruler beziehen sich jeweils unmittelbar
auf die Quelltextzeile, die daneben angezeigt wird. Scrollen Sie im QuelltextEditor nach oben oder unten, verschiebt sich der Vertical Ruler parallel.
Standardmig finden Sie auf dem Vertical Ruler Annotationen 3 fr Syntaxfehler ( ), Breakpoints ( ) oder Lesezeichen ( ), wie auch auf der Leiste
links im Editor der ABAP Workbench.
Rechts neben dem Quelltext befindet sich der Overview Ruler (bersichtslineal). Im Gegensatz zum Vertical Ruler bewegt sich dieses Lineal nicht mit,

109

2.4

Funktionen der ABAP Development Tools

wenn Sie scrollen. Es reprsentiert vielmehr den Quelltext in einer komprimierten Form. Die Annotationen 4, die hier angezeigt werden, beziehen
sich daher nicht auf die Quelltextzeile direkt daneben, sondern auf die relative Position der Code-Stelle im Quelltext. Der Overview Ruler bietet besonders bei sehr umfangreichen Quelltexten eine gute Mglichkeit, die bersicht zu behalten.

Abbildung 2.40 Annotationen in Eclipse

Sie knnen konfigurieren, was Sie auf dem Overview Ruler sehen mchten.
ffnen Sie eine umfangreichere Klasse wie ZCL_ISSUE (oder CL_SFLIGHTAR_
HDS, wenn Sie ein komplexeres Beispiel mchten), und testen Sie die Mglichkeiten (siehe Abbildung 2.41). Sehr praktisch ist es z. B., sich Anfang und
Ende des markierten Blocks anzeigen zu lassen (Annotationstyp ABAP Block
Highlighting). Wenn Sie den Cursor auf einen Variablennamen setzen, werden alle Stellen, an denen diese Variable vorkommt, direkt im Quelltext
sowie auf dem Overview Ruler hervorgehoben. Dies knnen sie unter ABAP
Occurence und ABAP Write Occurences einstellen.
Neben diesen Icons gibt es noch sogenannte Textannotationen 5, d. h. Markierungen, die sich direkt auf den Quelltext beziehen. Die Schlsselwortmarkierung bei Blcken etwa ist ein Beispiel fr eine Textannotation. Eine
Textannotation kann aber auch wie die Rechtschreibprfung bei modernen
Textverarbeitungsprogrammen aussehen. Eclipse unterstreicht Syntaxfehler,
wenn dies nicht anders eingestellt ist.

110

Quelltext-Editor

Abbildung 2.41 Einstellungen zu Annotationen

Rechtschreibprfung
Die Textannotationen erinnern stark an Rechtschreibprfungen. Eclipse ist nicht
nur in der Lage, Markierungen bei Syntaxfehlern zu setzen, es gibt sogar eine eingebaute Rechtschreibprfung. Die Rechtschreibregeln werden bei normalem
Quelltext selbstverstndlich nicht geprft, bei Kommentaren aber schon (siehe
Abbildung 2.40). Standardmig ist die Rechtschreibprfung auf Englisch eingestellt. Dies knnen Sie unter Window Preferences General Editors Text Editors Spelling umstellen. Derzeit ist nur Englisch als Plattform-Wrterbuch verfgbar. Sie knnen Deutsch aber als benutzerdefiniertes Wrterbuch hinzufgen.
Eclipse erwartet dazu eine einfache Wortliste. Ein freies Wrterbuch finden Sie
z. B. unter http://sourceforge.net/projects/germandict/.

Viele der Annotationen, z. B. die Kennzeichnung von Fehlern, implizieren,


dass Sie an dieser Code-Stelle ttig werden mssen. Sie knnen daher im Editor nacheinander zu den einzelnen Annotationen navigieren. Nutzen Sie
dazu die Funktionen Next Annotation ( ) bzw. Previous Annotation ( )
in der Menleiste (siehe Abbildung 2.42). Alternativ knnen Sie auch die
Tastenkombinationen (Strg) + (.) oder (Strg) + (,) verwenden.
Wie Sie in Abbildung 2.42 sehen, knnen Sie im Men auch einstellen, welche Annotationsarten Sie bercksichtigen mchten. So knnen Sie sich z. B.

111

2.4

Funktionen der ABAP Development Tools

darauf konzentrieren, nur Fehler zu korrigieren, oder von Lesezeichen zu


Lesezeichen springen.

Abbildung 2.42 Zur nchsten/vorangegangenen Annotation springen

2.4.4

Navigation

Eine der bekanntesten Arbeitserleichterungen in der ABAP Workbench ist


vermutlich die Vorwrtsnavigation, mit der Sie per Doppelklick direkt aus
dem Quelltext zur Definition eines Objekts abspringen. Klicken Sie in Eclipse
doppelt auf ein Objekt, wird dieses lediglich markiert, eine Navigation stoen Sie damit nicht an. Aber keine Angst: Dieses praktische Feature gibt es
auch in Eclipse. Drcken Sie einfach die (Strg)-Taste. Wenn Sie jetzt mit der
Maus ber den Namen eines Repository-Objekts oder einer Variable fahren,
wird dieses als Hyperlink dargestellt. Ein Klick auf diesen Link ffnet im Editor eine neue Registerkarte mit der Definition des entsprechenden Objekts.
Verwirrenderweise sorgt das Drcken der (Strg)-Taste in der ABAP Workbench fr das gleiche Verhalten wie der Doppelklick in Eclipse. Das angeklickte Wort wird vollstndig markiert.
In Abschnitt 2.2.4, Klassen, haben Sie bereits den View Outline kennengelernt, mit dem Sie sich in Quelltexten sehr schnell zurechtfinden und

112

Quelltext-Editor

bewegen knnen. Dieser View hat noch einen kleinen Bruder, die Quick Outline. Diese Funktion knnen Sie in einem beliebigen Editor in Eclipse mit der
Tastenkombination (Strg) + (O) aufrufen. Die Quick Outline wird direkt im
Editor eingeblendet und zeigt die Struktur des aktuell ausgewhlten Objekts
(siehe Abbildung 2.43). Sie knnen die Anzeige filtern und direkt zum entsprechenden Quelltext springen.

Abbildung 2.43 Quick Outline

hnlich wie die Zurck-Taste in Ihrem Internet-Browser ist die ZurckTaste ( bzw. (F3)) ein tglicher Begleiter bei der Arbeit in der ABAP Workbench. Natrlich bietet auch Eclipse ein Pendant zu dieser Funktion. Mit
dem Zurck-Pfeil in der Toolbar von Eclipse springen Sie zum letzten EditorFenster zurck (siehe Abbildung 2.44), unabhngig davon, ob es sich um
einen nativen Eclipse-Editor handelt oder um das eingebettete SAP GUI. Die
Funktion ist auch ber die Tastenkombination (Alt) + () ausfhrbar. Sie
haben zudem die Mglichkeit, mit (Alt) + () vorwrtszunavigieren. Fr
beide Richtungen knnen Sie ber das kleine Dreieck neben dem Icon eine
Navigationshistorie aufrufen und so direkt in ein bestimmtes Editor-Fenster
springen.

Abbildung 2.44 Navigationsfunktionen in Eclipse

113

2.4

Funktionen der ABAP Development Tools

Navigiere ich durch den Quelltext einer Anwendung, kommt es oft vor, dass
ich mich immer weiter in die Tiefen der verschachtelten Objekte begebe,
d. h. immer weiter weg von der Stelle, an der ich eigentlich gerade arbeite.
Fr den Weg zurck bietet Eclipse die praktische Komfortfunktion Last Edit
Location an ( ). Damit springen Sie von Ihrer aktuellen Position direkt
zurck an die Stelle, die Sie zuletzt bearbeitet haben. Die Tastenkombination
dazu lautet (Strg) + (Q).
Mit mehreren Ressourcen arbeiten
Die Navigationsfunktionen in Eclipse sind sehr ntzlich, und man neigt dazu, mit
ihnen zu arbeiten wie in der ABAP Workbench. Dass Sie die Navigationsfunktionen in der ABAP Workbench intensiv nutzen mssen, liegt allerdings zu einem
groen Teil daran, dass im SAP GUI stets das aktuelle Fenster geschlossen wird,
bevor Sie ein neues ffnen. Eclipse ist dagegen in der Lage, mehrere Editoren und
SAP-GUI-Fenster gleichzeitig zu hndeln, d. h., Sie verlassen Ihren Quelltext nie
wirklich, sondern ffnen nur eine neue Registerkarte. Die Navigationsfunktionen
lassen Sie dementsprechend nur zwischen den geffneten Registerkarten springen,
die geffneten Fenster werden aber nicht geschlossen. In Abschnitt 2.5 besprechen wir, wie Sie mit mehreren Ressourcen gleichzeitig arbeiten knnen.

2.4.5

Textbearbeitung

Wer sehr viel mit (Quell-)Texten arbeitet, wei es in der Regel zu schtzen,
die Hand nicht fr jede Aktion zur Maus bewegen zu mssen. Daher bieten
die meisten Editoren eine Vielzahl ntzlicher Funktionen, fr die Sie den
Nager auf Ihrem Schreibtisch nicht bemhen mssen. Die grundlegenden
Tastenkombinationen wie Kopieren ((Strg) + (C)), Ausschneiden ((Strg) +
(X)) oder Einfgen ((Strg) + (V)) sind Ihnen vermutlich bekannt und funktionieren in Eclipse und der ABAP Workbench gleichermaen. Es gibt aber
auch speziellere Funktionen, die das Arbeiten ungemein beschleunigen,
wenn man sich deren Einsatz angeeignet hat. Leider verhalten sich diese Tastaturbefehle im SAP GUI und in Eclipse unterschiedlich. Tabelle 2.5 stellt die
wichtigsten Tastenkombinationen gegenber.
Funktion

ABAP Workbench

Eclipse

Vorwrtsnavigation

Doppelklick

(Strg) + Klick; (F3)

Wort markieren

(Strg) + Klick

Doppelklick

Block markieren

(Alt) + linke Maustaste

(Alt) + () + (A)

Tabelle 2.5 Tastenkrzel zum Arbeiten mit Quelltexten

114

Quelltext-Editor

Funktion

ABAP Workbench

Eclipse

Zeile duplizieren

(Strg) + (D)

(Strg) + (Alt) + ()/()

Zeile lschen

() + (Strg) + (L)

(Strg) + (D)

Zeile verschieben

(Strg) + (Alt) + ()/()

(Alt) + ()/()

Auskommentieren

(Strg) + ()

(Strg) + ()

Kommentieren

() + (Strg) + ()

() + (Strg) + ()
(Strg) + (7)

Kommentar umschalten
zurckspringen

(F3)

(Alt) + ()

vorwrtsspringen

(Alt) + ()

zur letzten nderung


springen

(Strg) + (Q)

Tabelle 2.5 Tastenkrzel zum Arbeiten mit Quelltexten (Forts.)

Tastenkombinationen einsehen
Sich diese ganzen Tastenkombinationen zu merken und sie immer prsent zu
haben ist schwierig. Abhilfe schafft wie passend ein weiteres Tastenkrzel. Sie
sollten sich daher zumindest die Tastenkombination () + (Strg) + (L) merken,
mit der Sie eine Liste der verfgbaren Tastenkombinationen einblenden knnen.

Operationen, die auf ganze Zeilen angewandt werden, kommen relativ hufig vor. Dazu gehren Vorgnge wie das Lschen, Kopieren oder Verschieben
einer Zeile. Sie knnen dies mit Maus und Tastatur tun oder die Zeile nur mit
der Tastatur kopieren. Dazu bentigen Sie allerdings mehrere Arbeitsschritte: Zeile markieren, kopieren, ausschneiden oder lschen und gegebenenfalls wieder an der neuen Position einfgen.
Um eine Zeile zu duplizieren, gengt es in Eclipse, den Cursor in die entsprechende Zeile zu setzen und (Strg) + (Alt) + () zu drcken. Um eine Zeile zu
verschieben, benutzen Sie die Tastenkombination (Alt) + () bzw. (). Das
Lschen einer kompletten Zeile funktioniert mit den Tasten (Strg) + (D).
hnliche Funktionen gibt es auch in der ABAP Workbench. Allerdings funktionieren sie hier nur mit einzelnen Zeilen, whrend Sie in Eclipse auch mehrere Zeilen dazu markieren knnen.
Bildschirm drehen
Bei einigen Grafikkartentreibern fhrt die Tastenkombination (Strg) + (Alt) +
eine beliebige Pfeiltaste dazu, dass das Monitorbild gespiegelt wird. Diese Funktion knnen Sie in der Regel in den Einstellungen Ihres Treibers abschalten.

115

2.4

Funktionen der ABAP Development Tools

Ebenfalls sehr praktisch ist der Blockmodus. Normalerweise arbeiten TextEditoren zeilenorientiert, d. h., wenn Sie eine vertikale Markierung vornehmen, betrifft das immer die gesamte Zeile. In manchen Fllen mchten Sie
aber vielleicht nur einen Block aus Ihrem Quelltext kopieren, z. B. eine lngere Datendeklaration, aus der Sie nur die Typnamen kopieren mchten.
In der ABAP Workbench knnen Sie eine Markierung bei gedrckter (Alt)Taste vornehmen. Dadurch ziehen Sie einen Rahmen und markieren nur die
Zeichen innerhalb dieses Rahmens. Haben Sie auf diese Weise nun Typnamen kopiert, knnen Sie diese z. B. benutzen, um eine neue Struktur im
ABAP Dictionary anzulegen und dort auf einen Schlag die Datentypen einzufgen. Seit SAP NetWeaver 7.31 funktioniert auch das blockartige Einfgen,
d. h., Sie knnen einen kopierten Block neben Ihrem vorhandenen Quelltext
einfgen. Vor diesem Release wurden kopierte Blcke wie Zeilen behandelt,
d. h., beim Einfgen wurde fr jede Zeile des kopierten Blocks eine neue
Zeile hinzugefgt.
Eclipse verfgt ber einen eigenen Modus fr dieses Verhalten, den Blockmodus. Sie aktivieren diesen mit der Tastenkombination (Alt) + () + (A).
Solange Sie sich in diesem Modus befinden, erfolgt das Markieren, Kopieren
und Einfgen blockartig (siehe Abbildung 2.45). Verlassen Sie diesen
Modus, greifen diese Funktionen wieder zeilenweise (auch wenn Sie etwas
einfgen, das Sie im Blockmodus markiert haben).

Abbildung 2.45 Blockmodus in Eclipse

Funktionen in den Arbeitsalltag integrieren


Die meisten der in diesem Abschnitt beschriebenen Funktionen kannte ich
ursprnglich aus Eclipse. Ich muss zugeben, dass ich selbst berrascht war, dass die
meisten davon auch in der ABAP Workbench verfgbar sind. Auch hier gilt wieder:
Diese Funktionen und die Tastenkombinationen zu kennen ist nur der erste
Schritt. Um wirklich einen Mehrwert daraus zu generieren, mssen Sie diese auch
wirklich anwenden, ganz gleich, ob Sie schon seit Jahren so arbeiten oder den
Umstieg auf Eclipse nutzen, um Ihren Arbeitsablauf zu optimieren.

116

Quelltext-Editor

2.4.6

Quelltext formatieren

Der Pretty Printer ist in der ABAP Workbench eine der Funktionen, die ich
jeden Tag wahrscheinlich am hufigsten aufrufe. Das Drcken von () + (F1)
vor dem Speichern oder Aktivieren eines Entwicklungsobjekts geht mir
quasi automatisch von der Hand. In Eclipse fllt zunchst auf, dass die Schaltflche Pretty Printer fehlt. Das liegt daran, dass diese Funktion hier Format
heit. Die Tastenkombination () + (F1) funktioniert in Eclipse genau wie in
der ABAP Workbench, ist allerdings lediglich eine Alternativbelegung.
Waren Sie bereits fr andere Programmiersprachen mit Eclipse vertraut,
kennen Sie vielleicht die Kombination () + (Strg) + (F).
Bevor Sie die Code-Formatierung nutzen knnen, mssen Sie diese allerdings einrichten.
1. ffnen Sie den Report Z_ISSUE_LIST, und drcken Sie im Editor die Tasten
() + (F1).
2. Beim ersten Aufruf des Pretty Printers wird Ihnen ein Pop-up-Fenster
angezeigt, das Sie darauf aufmerksam macht, dass noch keine Formatierungseinstellungen konfiguriert wurden (siehe Abbildung 2.46).

Abbildung 2.46 Pop-up-Fenster beim ersten Aufruf der Quelltextformatierung

3. Whlen Sie Configure your source code formatting settings, um in


den entsprechenden Einstellungsdialog zu gelangen. Alternativ klicken Sie
mit der rechten Maustaste auf Ihr aktuelles ABAP-Projekt im Project
Explorer und whlen Properties.
4. Im Einstellungsdialog wechseln Sie zu ABAP Development Editors
Source Code Editors Formatter.
Projektbezogene Einstellungen
Bei den Formatierungseinstellungen handelt es sich um eine projektbezogene Einstellung, d. h., Sie knnen sie fr jedes System (und sogar fr jedes ABAP-Projekt)
individuell einstellen.

117

2.4

Funktionen der ABAP Development Tools

5. Konfigurieren Sie die Formatierung nach Ihren Wnschen. Ich bevorzuge


es z. B., die Quelltexteinrckung zu aktivieren. Zudem lasse ich Schlsselworte gro- und Bezeichner kleinschreiben (siehe Abbildung 2.47).

Abbildung 2.47 Formatierungseinstellungen

6. Besttigen Sie Ihre Einstellungen mit OK.


Sollten Sie nicht wnschen, dass der komplette Quelltext formatiert wird,
knnen Sie mit der Tastenkombination () + (Strg) + (F1) auch nur die aktuelle Selektion formatieren. Sie finden die entsprechenden Einstellungen
auch im Kontextmen unter Source (siehe Abbildung 2.48).

Abbildung 2.48 Quellen im Kontextmen

2.5

Mit mehreren Ressourcen arbeiten

Arbeiten Sie an greren Projekten, passiert es schnell, dass Sie parallel vier,
fnf oder mehr Entwicklungsfenster mit Quellcode, ABAP-Dictionary-Typen
oder anderen Repository-Objekten geffnet haben. Dies wird in der ABAP
Workbench durch die maximale Anzahl an Modi begrenzt (die vielleicht der
eine oder andere Entwickler schon hufiger erreicht hat). Abgesehen von dieser
Begrenzung, wird die Arbeit mit vielen SAP-GUI-Fenstern zum Teil sehr un-

118

Mit mehreren Ressourcen arbeiten

bersichtlich. Ich kenne einige SAP-Entwickler, die ihre Taskleiste an die unmglichsten Positionen verschieben, um genau dieses Problem zu entschrfen.
Die ADT funktionieren etwas anders. Daher zunchst die gute Nachricht: So
etwas wie eine maximale Anzahl an Modi gibt es nicht. Sie knnen beliebig
viele Repository-Objekte gleichzeitig ffnen, die auch nicht in der Taskleiste
auftauchen, sondern als Registerkarten im Quelltext-Editor. Whrend die
ABAP Workbench auf die Arbeit mit nur einem Entwicklungsobjekt gleichzeitig ausgelegt ist, bietet Eclipse einige Mglichkeiten, um selbst bei einer
groen Anzahl an Objekten den berblick nicht zu verlieren. Auf einer
Registerkarte wird normalerweise die aktuelle System-ID, gefolgt vom
Objektnamen, angezeigt. Arbeiten Sie nur mit einem einzigen System, bentigen Sie diese Information nicht. Sie knnen sie in den Einstellungen unter
Window Preferences ABAP Development deaktivieren (siehe 2 in Abbildung 2.49). Das System, in dem sie aktuell arbeiten, wird Ihnen in Eclipse
brigens rechts unten im Bild angezeigt. Sie finden dort die System-ID, die
Mandantennummer, den Namen des Servers, den angemeldeten Benutzer
sowie die Anmeldesprache.

Abbildung 2.49 Beschriftung einer Registerkarte einstellen

Arbeiten Sie mit Objekten, die wiederum Unterobjekte enthalten (wie in Web
Dynpro, siehe Kapitel 4, Web Dynpro ABAP in Eclipse), kann der Name des

119

2.5

Funktionen der ABAP Development Tools

Unterobjekts (etwa ein View-Name) interessanter sein als der Objektname


selbst. Daher lsst sich hier die Reihenfolge der Benennung auf dem Register
anpassen (1 in Abbildung 2.49). Um welchen Objekttyp es sich handelt,
sehen Sie brigens auf einen Blick anhand des Icons auf dem Register.
Das aktuell geffnete Objekt wird auch im Project Explorer markiert, was die
Orientierung noch einmal erleichtert. Voraussetzung ist, dass die Funktion
Link with Editor ( ) aktiv ist.
So wie in Abbildung 2.50 knnte eine typische ADT-Umgebung aussehen.
Sie sehen den Quelltext-Editor 1, den Project Explorer 2 und den View
Outline 3. Zudem ist am unteren Rand noch Platz fr weitere Views 4, hier
den View Problems.

Abbildung 2.50 Typischer Aufbau einer Eclipse-Umgebung

Sie mssen jedoch nicht so arbeiten, sondern knnen die verschiedenen


Views anordnen, wie Sie mchten. Dabei ist es auch mglich, mehrere Quell-

120

Mit mehreren Ressourcen arbeiten

text-Editoren parallel geffnet zu haben. Klicken Sie dazu einfach auf das
Register, und ziehen Sie es an eine beliebige Stelle in der Eclipse-Umgebung.
Ein grner Rahmen zeigt an, wo die Registerkarte spter platziert wird (siehe
Abbildung 2.51). So knnen Sie sich mehrere Quelltexte gleichzeitig oder
z. B. auch Dictionary-Strukturen anzeigen lassen, whrend Sie arbeiten.

Abbildung 2.51 Views in der Eclipse Workbench anordnen

Sie knnen Views nicht nur innerhalb der Eclipse Workbench andocken,
sondern auch vollstndig ablsen, wodurch sie in einem eigenen Fenster
angezeigt werden. Dies ist z. B. praktisch, wenn Sie mit mehreren Monitoren
arbeiten. Eclipse merkt sich brigens die Anordnung der Views. Beim nchsten Start finden Sie Ihre Umgebung genauso wieder, wie Sie sie verlassen
haben. Auch smtliche Objekte sind noch geffnet, den Inhalt sehen Sie
allerdings erst nach Eingabe Ihres Kennworts.
Haben Sie sich bei Ihren Umbauarbeiten in eine Sackgasse manvriert und
mchten zum Ausgangspunkt zurckkehren, knnen Sie dies ebenfalls tun.
Whlen Sie Window Reset Perspective. Daraufhin finden Sie Ihre ABAPEntwicklungsperspektive wieder jungfrulich wie am ersten Tag vor. Haben

121

2.5

Funktionen der ABAP Development Tools

Sie die perfekte Anordnung gefunden, knnen Sie auch Ihre eigene Perspektive erstellen. Whlen Sie Window Save Perspective As, und vergeben Sie
einen Namen fr die Perspektive, die Sie anschlieend immer wieder aufrufen knnen. So knnen Sie auch fr verschiedene Aufgaben jeweils eigene
Perspektiven erstellen. Die zuletzt verwendeten Perspektiven finden Sie in
der Schnellauswahl in der rechten oberen Ecke des Fensters. Sie knnen die
Perspektive auch ber die Tastenkombination (Strg) + (F8) wechseln.
Sie knnen Ihre Perspektive noch weiter personalisieren. Die verfgbaren
Einstellungen finden Sie unter Window Customize Perspective. In diesem
Dialog knnen Sie anpassen, was in der Menleiste und der Toolbar angezeigt bzw. ausgeblendet werden soll (siehe Abbildung 2.52). Sie knnen z. B.
auch einstellen, welche Objekte Sie ber den Direktzugriff unter File New
vorfinden. Auch diese Einstellungen knnen Sie in Ihrer eigenen Perspektive
sichern.

Abbildung 2.52 Perspektive personalisieren

122

Mit mehreren Ressourcen arbeiten

Selbst bei den grten Monitoren ist der Platz fr neue Registerkarten
irgendwann erschpft. Eclipse zeigt dann die zuletzt genutzten Registerkarten an, alle weiteren Registerkarten werden in einer Liste zusammengefasst,
die Sie in Abbildung 2.50 sehen (5). Mit der Tastenkombination (Strg) +
(F6) knnen Sie sich zudem jederzeit alle geffneten Editor-Fenster anzeigen
lassen. Solange Sie die (Strg)-Taste gedrckt halten, bleibt die Anzeige sichtbar. Mit den Pfeiltasten knnen Sie dann einen Editor whlen und ohne
Mausklick dorthin wechseln. Per Doppelklick auf ein Register knnen Sie
den View vergrern, sodass er die gesamte Workbench einnimmt. Haben
Sie einmal zu viele Registerkarten geffnet, bentigen aber nur eine, knnen
Sie alle Registerkarten bis auf die bentigte mit der Funktion Close Others
aus dem Kontextmen schlieen.
Eclipse verfgt nicht ber Anzeige- und Editiermodi. Sie knnen ein Repository-Objekt bearbeiten, sobald es geffnet wurde. Allerdings macht auch
Eclipse Gebrauch vom SAP-Sperrkonzept. Sobald Sie die erste nderung vornehmen, wird das Objekt gesperrt. Wird ein Objekt bereits bearbeitet, quittiert Eclipse jeden Bearbeitungsversuch mit einer Fehlermeldung. Sobald ein
Objekt im Quelltext-Editor gesperrt wird, zeigt Eclipse dies mit einem kleinen Schlosssymbol an (siehe Abbildung 2.53). Sollte es erforderlich sein,
knnen Sie die Sperre mit der Tastenkombination (Strg) + (U) (Unlock) lsen.
Ungesicherte nderungen werden mit einem kleinen Sternchen (*) vor dem
Namen des Objekts angezeigt. Enthlt das Objekt inaktive Inhalte, wird dies
durch eine kleine Raute (#) angezeigt.

Abbildung 2.53 Symbole im Quelltext-Editor

Da in der Eclipse-Umgebung mehrere Objekte geffnet sein knnen, besitzt


Eclipse jeweils zwei Versionen der Funktionen Speichern und Aktivieren.
ber die Tastenkombination (Strg) + (S) oder das Speichern-Symbol ( ) in
der Toolbar speichern Sie das aktuelle Objekt. Mchten Sie alle genderten
Objekte speichern, nutzen Sie () + (Strg) + (S) oder das Icon
. Ihre
Objekte aktivieren Sie mit (Strg) + (F3) bzw. dem Icon
. In der ABAP
Workbench wird bei der Aktivierung auch immer eine Liste aller inaktiven
Objekte des Benutzers angezeigt. Mchten Sie in Eclipse alle Objekte aktivieren, knnen Sie dies ber () + (Strg) + (F3) oder das Icon
in der Menleiste erledigen. Auch in Eclipse haben Sie die Wahl, welche Objekte Sie aktivieren mchten.

123

2.5

Funktionen der ABAP Development Tools

2.6

Verwendungsnachweis

Eine weitere ntzliche Funktion ist der Verwendungsnachweis (Where-UsedList). Die aus der ABAP Workbench bekannte Tastenkombination () +
(Strg) + (F3) ist in Eclipse bereits anderweitig vergeben (alle Objekte aktivieren). Die neue Tastenkombination lautet () + (Strg) + (G). Die Funktion findet sich aber auch im Men mit dem Icon . Der Verwendungsnachweis
funktioniert hnlich einfach wie in der ABAP Workbench. Anders als in der
ABAP Workbench werden Sie allerdings nicht gefragt, in welchen Bereichen
Sie suchen mchten, sondern die Analyse erfolgt ber alle Objekttypen hinweg:
1. ffnen Sie z. B. den Include Z_ISSUE_LIST_TOP in Eclipse.
2. Positionieren Sie den Cursor auf dem Objekt ZISSUE.
3. Drcken Sie () + (Strg) + (G), um die Suche zu starten. Ihnen wird ein
Dialog mit einem Fortschrittsbalken angezeigt, der verschwindet, sobald
die Suche beendet ist. Unter Umstnden sehen Sie den Dialog nicht, falls
Sie einen einfachen Verwendungsnachweis durchfhren oder eine
schnelle Datenbank zur Verfgung haben.
4. Das Ergebnis des Nachweises wird in einem eigenen View Search angezeigt (siehe Abbildung 2.54). Die Fundstellen sind dabei nach den enthaltenen Objekten gruppiert. Wie gewohnt, springen Sie mit einem Klick auf
einen Eintrag in den Quelltext-Editor.

Abbildung 2.54 Verwendungsnachweis zu ZISSUE

In Abbildung 2.54 erkennen Sie einen der Vorteile des View-Konzepts in


Eclipse. In der ABAP Workbench wird der Verwendungsnachweis in einem

124

Verwendungsnachweis

Fenster angezeigt, d. h., Sie mssen den Quelltext verlassen, um sich die
Ergebnisliste anzusehen. Wollen Sie sich eine Fundstelle im Quellcode
anschauen, mssen Sie aus der Liste wieder in den Quelltext springen. Mit
dem Search-View knnen Sie dagegen flexibler arbeiten, d. h., Sie haben
gleichzeitig Ihre Ergebnisliste und den Quelltext im Blick. Mit den Pfeilen in
der Symbolleiste 1 springen Sie zu den einzelnen Fundstellen Ihres Verwendungsnachweises. Arbeiten Sie anschlieend weiter am Quelltext und wollen noch einmal nachsehen, wo sich das gesuchte Objekt versteckt, knnen
Sie das Ergebnis einfach aktualisieren ( , 2). Klicken Sie auf das Icon
(3) in der Symbolleiste, werden Ihnen die letzten Verwendungsnachweise
und Suchen angezeigt. Sie knnen die Ergebnisse des Verwendungsnachweises auch einschrnken. Dazu steht Ihnen die Filterfunktion ( , 4) zur Verfgung. Sie knnen die Suche auf ein Paket einschrnken, nur bestimmte
Objekttypen in die Ergebnisliste aufnehmen oder nur in Objekten suchen,
die von einem bestimmten Benutzer bearbeitet wurden.
Version beachten
Die Filterfunktionen beim Verwendungsnachweis wurden mit Version 2.31 der
ABAP Development Tools neu eingefhrt. In lteren Versionen fehlt der entsprechende Dialog. Zudem bentigen Sie mindestens den SAP NetWeaver AS ABAP
7.4 SP08.

Ebenfalls sehr praktisch ist es, die Suche auf Produktiv- oder Test-Code einzuschrnken (siehe Abbildung 2.55). Insbesondere, wenn Sie eine funktionale
Analyse durchfhren wollen, sind Testklassen in der Regel eher uninteressant und verflschen die Ergebnisliste.

Abbildung 2.55 Verwendungsnachweis filtern

125

2.6

Funktionen der ABAP Development Tools

Suchhilfe
Ihnen wird aufgefallen sein, dass Eclipse in Dialogen wie dem Ergebnisfilter keine
Suchhilfe anbietet. Stattdessen bietet Eclipse in vielen Eingabefeldern eine Autovervollstndigung an. Diese aktivieren Sie mit der Tastenkombination (Strg) +
Leertaste. Diese Funktion bercksichtigt auch Ihre bisherige Eingabe. Felder, die
eine Autovervollstndigung bieten, sind meist mit einer kleinen Glhbirne gekennzeichnet, wenn der Cursor sich darin befindet (siehe Abbildung 2.26).

Ebenfalls sehr angenehm ist die Mglichkeit, die Suche im Hintergrund


durchfhren zu lassen. Dies ist in Eclipse brigens bei vielen lang laufenden
Prozessen mglich. Wird Ihnen der Dialog mit dem Fortschrittsbalken angezeigt, whlen Sie einfach Run in Background. Anschlieend knnen Sie einfach weiterarbeiten, bis die Aktion abgeschlossen ist und Ihnen das Ergebnis
angezeigt wird.
Der Vorteil ist, dass Sie Ihren Arbeitsfluss nicht unterbrechen mssen, wenn
Sie einen ausgiebigeren Verwendungsnachweis durchfhren wollen. Ich
frchte allerdings, dass Sie dadurch auch weniger Kaffeepausen haben werden zumindest, wenn Ihr Chef dieses Feature auch kennt.

2.7

Quick Fix und Quick Assist

Stellen Sie sich vor, Sie arbeiten gerade an einer neuen Klasse. Die Funktion
haben Sie schon vor Augen und mssen sie nur noch in Quelltext gieen. Sie
schreiben den Code und stellen pltzlich fest, dass Sie eine neue Methode
bentigen, um fortzufahren. Sie springen daher in den Implementierungsteil, deklarieren die Methode, geben die Parameter an und legen eine
Implementierung an. Und schon kann es weitergehen. Doch wo waren Sie
noch gleich? Schnell geraten Sie in einer solchen Situation aus dem Fluss.
Wie toll wre es da, wenn Ihnen jemand die lstigen Aufgaben abnehmen
knnte, die Sie nur erledigen mssen, um den Compiler zufriedenzustellen.
Finden Sie sich in dieser Szene wieder? Dann drfte Ihr neuer LieblingsShortcut ab sofort (Strg) + (1) lauten, hinter dem sich die Funktion Quick Fix
in Eclipse verbirgt. Mit deren Hilfe legen Sie eine fehlende Implementierung
einer Methode schnell an oder erstellen z. B. ein Textelement fr einen
Report.

126

Quick Fix und Quick Assist

2.7.1

Quick Fix

Nehmen wir unsere Klasse ZCL_ISSUE als Beispiel. Bisher knnen wir mit
dieser Klasse lediglich Issues lesen, die schon auf der Datenbank gespeichert
sind. Wir wollen die Klasse darber hinaus befhigen, ein neues Issue zu
speichern bzw. ein vorhandenes Issue zu aktualisieren. Um das Speichern zu
ermglichen, erstellen wir eine neue Methode SAVE.
1. ffnen Sie die Klasse ZCL_ISSUE im Editor-View.
2. Fgen Sie in der Public Section am Ende der Methodendeklarationen die
Methode SAVE mit der Ausnahme failed_to_save hinzu (siehe Listing 2.11).
PUBLIC SECTION.
METHODS:
constructor IMPORTING if_issue TYPE z_issue_
id EXCEPTIONS no_issue_found optional,
get_issue RETURNING VALUE(rs_issue) TYPE zissue,
set_issue IMPORTING is_issue TYPE zissue,
save
EXCEPTIONS failed_to_save.
Listing 2.11 Public Section der Klasse ZCL_ISSUE

Eclipse zeigt daraufhin mit dem Icon


auf dem Vertical Ruler einen Fehler
an: Die Methode SAVE ist zwar deklariert, aber die Implementierung fehlt.
Die kleine Glhbirne neben der Annotation weist darauf hin, dass Eclipse zu
diesem Fehler auch direkt eine Lsung anbieten mchte, einen Quick Fix.
Gehen Sie nun wie folgt vor:
1. Setzen Sie den Cursor in die markierte, fehlerhafte Zeile.
2. Drcken Sie die Tastenkombination (Strg) + (1), oder klicken Sie auf das
Icon , um in die Quick-Fix-Auswahl zu gelangen (siehe Abbildung 2.56).

Abbildung 2.56 Verfgbare Quick Fixes

127

2.7

Funktionen der ABAP Development Tools

3. Whlen Sie Add implementation for save aus der Liste. Eclipse fgt automatisch eine neue Methodenimplementierung in den Quelltext ein und
springt mit der Eingabemarke an die entsprechende Stelle.
Wir sehen in Abbildung 2.56 auch, dass es mehrere Mglichkeiten gibt, mit
dem Fehler umzugehen. Sie knnen die Methode entweder implementieren
lassen oder die Definition entfernen. Die anderen beiden Mglichkeiten
Make save private und Make save protected sind streng genommen keine
Quick Fixes, da sie keinen Fehler beheben. Bei diesen Vorschlgen handelt
es sich um Quick Assists, auf die ich in Abschnitt 2.7.2 noch nher eingehe. In
Abschnitt 3.4, Refactoring, finden Sie einige praktische Beispiele zum
Thema Quick Assist.
Unsere neu implementierte Methode fllen wir als Nchstes ein wenig mit
Leben. Die Methode SAVE soll Folgendes leisten:
Wurde ein Issue bereits einmal gespeichert, soll ein Update auf der Datenbank durchgefhrt werden.
Wurde das Issue noch nicht gesichert, soll es entsprechend markiert und
gespeichert werden.
Handelt es sich um ein neues Issue, soll es mit dem Baustein Z_CREATE_
SINGLE_ISSUE gespeichert werden.
Beim Schreiben des Quelltextes knnen Sie von den in den vorangegangenen Abschnitten erlernten Techniken sowie der Code-Vervollstndigung
Gebrauch machen. Fgen Sie Listing 2.12 als Implementierung der Methode
SAVE ein. Lassen Sie sich beim Eingeben erst einmal nicht von den Fehlermeldungen ablenken. Sichern Sie Ihre nderungen anschlieend.
METHOD save.
IF me->is_persistent( ) = abap_true.
CALL FUNCTION 'Z_UPDATE_SINGLE_ISSUE'
EXPORTING
is_issue
= me->ms_issue
IMPORTING
es_issue
= me->ms_issue
EXCEPTIONS
issue_not_found = 1
OTHERS
= 2.
IF sy-subrc = 1.
me->mf_persistent = abap_false.
me->save( ).

128

Quick Fix und Quick Assist

ELSEIF sy-subrc EQ 2.
RAISE failed_to_save.
ENDIF.
ELSE.
CALL FUNCTION 'Z_CREATE_SINGLE_ISSUE'
EXPORTING
is_issue
= me->ms_issue
IMPORTING
es_issue
= me->ms_issue
EXCEPTIONS
duplicate_issue_id = 1
no_issue_id
= 2
OTHERS
= 3.
IF sy-subrc <> 0.
RAISE failed_to_save.
ENDIF.
ENDIF.
ENDMETHOD.
Listing 2.12 Methode SAVE

Anhand von Listing 2.12 knnen Sie den Einsatz von Quick Fixes nachvollziehen. Schon die Zeile IF me->is_persistent( ) = abap_true. wird von
Eclipse bemngelt: Die Methode is_persistent( ) wurde bislang noch nicht
angelegt. Die Annotation mit Glhbirne zeigt uns aber an, dass ein Quick Fix
verfgbar ist. Schauen Sie, was Eclipse als Lsung anbietet:
1. Setzen Sie den Cursor auf den Methodennamen, und drcken Sie (Strg) + (1).
2. Aus der Liste whlen Sie Create method is_persistent, um die fehlende
Methode anzulegen.
3. Im daraufhin angezeigten Anlage-Dialog (siehe Abbildung 2.57) hat
Eclipse bereits erkannt, dass die Methode einen Returning-Parameter
beinhalten soll. Benennen Sie diesen in RF_PERSISTENT um, und geben Sie
als Rckgabetyp BOOLEAN an. Deklaration und Implementierung einer
neuen Methode werden erstellt.
4. Fgen Sie in die neue Methode das Coding aus Listing 2.13 ein:
METHOD is_persistent.
rf_persistent = me->mf_persistent.
ENDMETHOD.
Listing 2.13 Methode IS_PERSISTENT

129

2.7

Funktionen der ABAP Development Tools

Abbildung 2.57 Anlegen einer neuen Methode

Eine weitere Fehlermeldung bleibt zu bearbeiten, nmlich dass das Attribut


MF_PERSISTENT noch nicht vorhanden ist:
1. Setzen Sie den Cursor auf MF_PERSISTENT (ob in der Methode SAVE oder
der Methode IS_PERSISTENT, ist dabei egal).
2. Rufen Sie den Quick Fix mit (Strg) + (1) auf, und whlen Sie Declare
attribute mf_persistent aus der Liste.
3. Um die Klasse konsistent zu halten, initialisieren Sie das Attribut MF_PERSISTENT noch im Constructor. Ersetzen Sie die If-Abfrage nach dem Aufruf
des Funktionsbausteins Z_READ_SINGLE_ISSUE durch den Inhalt von Listing 2.14.
IF sy-subrc <> 0.
RAISE no_issue_found.
ELSE.
me->mf_persistent = abap_true.
ENDIF.
Listing 2.14 Initialisierung von mf_persistent

Die Fehlermeldung ist nun verschwunden, und in der Private Section findet
sich eine neue Datendeklaration:

130

Quick Fix und Quick Assist

PRIVATE SECTION.
DATA ms_issue TYPE zissue.
DATA mf_persistent TYPE abap_bool.

Das System hat den Datentyp abap_bool ausgewhlt. Wenn es Sie interessiert, welche Definition sich dahinter verbirgt, knnen Sie das mit der Taste
(Strg) und einem Klick auf abap_bool herausfinden. Die automatische Typdeklaration tut ihren Dienst in der Regel sehr gut. Probieren Sie sie einfach
aus, indem Sie automatisch Attribute generieren lassen, denen Sie verschiedene Daten zuweisen.
Wenn Sie wie ich bei der Datendeklaration die Schreibweise als Kettensatz
bevorzugen, werden Sie sich vielleicht fragen, ob man einstellen kann, wie
Eclipse Datendeklarationen anlegt. Eine solche Einstellung suchen Sie vergebens, allerdings versucht Quick Fix, es Ihnen immer recht zu machen.
Lschen Sie probeweise einmal die Datendeklaration von MF_PERSISTENT
((Strg) + (D)), und ndern Sie die Deklaration von MS_ISSUE, indem Sie hinter
die DATA-Anweisung einen Doppelpunkt setzen:
DATA: ms_issue TYPE zissue.

Fhren Sie die Datendeklaration von MF_PERSISTENT nun noch einmal per
Quick Fix aus, wird der folgende Code generiert:
PRIVATE SECTION.
DATA: ms_issue TYPE zissue,
mf_persistent TYPE abap_bool.

Diese Kontextsensitivitt sehen Sie an anderen Stellen. So erkennt Eclipse


schon durch das Voranstellen von me, dass es sich bei der angegebenen Variable um ein Feld der Klasse handeln muss und nicht um eine lokale Variable.
Erstellen wir nun die Methode GET_PROJECT. Diese Methode soll das Projekt
zurckliefern, zu dem das aktuelle Issue gehrt. Wir beginnen dieses Mal mit
der Implementierung:
1. Fgen Sie in den Implementierungsteil von ZCL_ISSUE den Inhalt von Listing 2.15 ein.
CLASS zcl_issue IMPLEMENTATION.
[...]
METHOD get_project.
ENDMETHOD.
END CLASS.
Listing 2.15 Implementierung der Methode GET_PROJECT

131

2.7

Funktionen der ABAP Development Tools

2. Positionieren Sie den Cursor auf dem Methodenbezeichner get_project,


und drcken Sie (Strg) + (1).
3. Whlen Sie die Lsung Create definition of get_project. Sie knnten die
Definition auch mit einem Assistenten anlegen, um unmittelbar Parameter
angeben zu knnen, wir wollen die Parameter in diesem Beispiel allerdings im Verlauf der Implementierung hinzufgen lassen.
4. Geben Sie den Code aus Listing 2.16 als Methodenimplementierung ein.
METHOD get_project.
lf_project_id = me->ms_issue-project_id.
IF lf_project_id IS NOT INITIAL.
CREATE OBJECT rr_project TYPE zcl_project
EXPORTING
if_project_id
= lf_project_id
EXCEPTIONS
no_project_found = 1.
IF sy-subrc NE 0.
CLEAR rr_project.
ENDIF.
ENDIF.
ENDMETHOD.
Listing 2.16 Implementierung von get_project

5. Es werden vier Fehler wegen fehlender Deklarationen ausgegeben.


Zunchst setzen Sie den Cursor auf lf_project_id und drcken die
Tastenkombination (Strg) + (1). Whlen Sie Declare local variable lf_
project_id. Eclipse legt eine lokale Variable an und vergibt auch den Typ
mit Z_PROJECT_ID korrekt.
6. Als Nchstes deklarieren Sie den Returning-Parameter RR_PROJECT. Setzen
Sie den Cursor auf rr_returning, und drcken Sie (Strg) + (1). Whlen Sie
Declare returning parameter rr_returning. Der Parameter wird der
Methodendeklaration hinzugefgt.
7. Springen Sie zur Methodendeklaration, indem Sie den Cursor auf get_
project setzen und (F3) drcken. Eclipse bemngelt, dass der Typ ZCL_
PROJECT unbekannt sei. Setzen Sie den Cursor auf zcl_project, und drcken Sie (Strg) + (1). Whlen Sie Create global class zcl_project.
8. Geben Sie eine Beschreibung im Assistenten an, und fahren Sie mit Next
fort (siehe Abbildung 2.58).
9. Ordnen Sie der Klasse einen Transportauftrag zu, und beenden Sie die
Anlage mit Finish.

132

Quick Fix und Quick Assist

Abbildung 2.58 Klasse ZCL_PROJECT anlegen

Prfen Sie den Code erneut mit (Strg) + (F2). Falls Sie die Fehlermeldung
erhalten, dass der Constructor der Klasse noch fehlt, legen Sie ihn wie folgt
an:
1. Setzen Sie den Cursor in die Definition der Klasse ZCL_PROJECT.
2. Drcken Sie (Strg) + (1), und whlen Sie den Vorschlag Generate Constructor.
3. Implementieren Sie den Constructor, wie in Listing 2.17 vorgegeben.
METHOD constructor.
SELECT single * from zproject into me->ms_project
WHERE project_id = if_project_id.
if sy-subrc ne 0.
RAISE no_project_found.
endif.
ENDMETHOD.
Listing 2.17 Constructor der Klasse ZCL_PROJECT

4. Beheben Sie die angezeigten Fehler mittels Quick Fix. Passen Sie abschlieend die Deklaration der Klasse wie in Listing 2.18 an.
PUBLIC SECTION.
METHODS constructor
IMPORTING
if_project_id TYPE z_project_id OPTIONAL

133

2.7

Funktionen der ABAP Development Tools

EXCEPTIONS
no_project_found.
PROTECTED SECTION.
PRIVATE SECTION.
DATA ms_project TYPE zproject.
Listing 2.18 Deklaration von ZCL_PROJECT

5. Aktivieren Sie Ihre Klasse (() + (Strg) + (F3)).


Systemvoraussetzungen fr die Parameter- und Attributerstellung
Die Mglichkeit, Methodenparameter zu deklarieren, Klassenattribute zu erstellen
und Constructors per Quick Fix anzulegen, wurde erst mit den ABAP Development
Tools 2.19 implementiert. Sie bentigen zudem ein SAP NetWeaver 7.4 SP5 oder
7.31 SP11 als Backend-System.

Sie sollten Ihre Entwicklung nun ohne Fehler aktivieren knnen. Allerdings
werden Sie beim Ausprobieren feststellen, dass das Aktualisieren eines
bestehenden Issues mit einem Programmabbruch quittiert wird. Das liegt
daran, dass der Funktionsbaustein Z_UPDATE_SINGLE_ISSUE noch nicht vorhanden ist. Da der ABAP Compiler dies aber nicht bemngelt, wird an dieser
Stelle kein Fehler angezeigt. Wie Sie solche Probleme identifizieren, bevor
Anwender Sie verrgert anrufen, besprechen wir in Abschnitt 3.1.3, ABAP
Test Cockpit.

2.7.2

Quick Assist

Die Funktionen Quick Assist und Quick Fix sind enge Verwandte. Der groe
Unterschied besteht darin, dass der Quick Fix zur Fehlerbeseitigung dient,
der Quick Assist stattdessen Assistenzdienste anbietet, wenn es darum geht,
den Quelltext umzustellen. Beide Funktionen werden mit der Tastenkombination (Strg) + (1) aktiviert.
Testen Sie den Quick Assist, um ein Gefhl dafr zu bekommen, welche
Mglichkeiten Ihnen diese Funktion bietet. Da es keinen direkten Indikator
gibt, ist es allerdings manchmal schwierig, zu erkennen, an welchen Stellen
Ihnen die Untersttzung zur Verfgung steht. Ein wenig Abhilfe schafft der
View Quick Assist (siehe Abbildung 2.59), den Sie ber den Menpfad
Window Show View Other aktivieren. Dieser View zeigt Ihnen jederzeit
alle verfgbaren Quick Assists und ebenso die Quick Fixes an. Dabei bezieht
sich die Anzeige immer auf die Code-Stelle, in der sich der Cursor aktuell

134

Quick Fix und Quick Assist

befindet. Zudem bietet dieser View noch eine Historie der zuletzt durchgefhrten Quick Fixes und Assists.

Abbildung 2.59 View Quick Assist

Um dafr sorgen, dass unsere Klasse wie gewnscht funktioniert, legen wir
nun den Funktionsbaustein Z_UPDATE_SINGLE_ISSUE aus der Methode SAVE
an:
1. Wechseln Sie mit dem Cursor in die Methode ZCL_ISSUE->SAVE( ).
Ohne Maus navigieren
Haben Sie die Klasse ZCL_ISSUE bereits geffnet, mssen Sie nicht einmal die
Maus bemhen, um zum Quellcode der Methode SAVE zu gelangen. Wechseln Sie
zunchst mit (Strg) + (F6) zum Editor-Fenster fr Ihre Klasse. Befinden Sie sich im
Klassen-Editor, knnen Sie mit (Strg) + (O) einen Outline-View aktivieren und in
diesem ber die Eingabezeile filtern, um die Methode auszuwhlen. Mit der Taste
() springen Sie unmittelbar in die gewhlte Methode.

2. Platzieren Sie den Cursor auf dem Aufruf des Funktionsbausteins


Z_UPDATE_SINGLE_ISSUE, und drcken Sie (Strg) + (1).
3. Whlen Sie Create function module z_update_single_issue aus der
Quick-Assist-Liste.
4. Im Dialog zur Anlage des Funktionsbausteins geben Sie Z_ISSUE_LIST_
DB als Funktionsgruppe ein (siehe Abbildung 2.60). Vergeben Sie zudem
eine passende Beschreibung. Fahren Sie mit Next fort.
5. Ordnen Sie gegebenenfalls einen Transportauftrag zu, und schlieen Sie
die Anlage des Funktionsbausteins mit Finish ab.

135

2.7

Funktionen der ABAP Development Tools

Abbildung 2.60 Funktionsbaustein Z_UPDTE_SINGLE_ISSUE anlegen

6. Der Editor mit dem neuen Funktionsbaustein ffnet sich. Fgen Sie hier
den Quelltext aus Listing 2.19 ein.
FUNCTION z_update_single_issue
IMPORTING
VALUE(is_issue) TYPE zissue
EXPORTING
es_issue TYPE zissue
EXCEPTIONS
issue_not_found.
es_issue = is_issue.
IF es_issue-issue_id IS INITIAL.
RAISE issue_not_found.
ENDIF.
es_issue-aedat = sy-datum.
es_issue-aenam = sy-uname.
UPDATE ZISSUE FROM es_issue.
IF sy-subrc = 4.
RAISE issue_not_found.
ENDIF.
ENDFUNCTION.
Listing 2.19 Funktionsbaustein Z_UPDATE_SINGLE_ISSUE

7. Aktivieren Sie alle nderungen mit () + (Strg) + (F3).

136

Arbeitsvorrat organisieren

Funktionsbausteine und Includes anlegen


Um Funktionsbausteine und Includes mittels Quick Fix bzw. Quick Assist anzulegen, bentigen Sie mindestens Version 2.19 der ABAP Development Tools. Sie
bentigen zudem SAP NetWeaver 7.4 SP5 oder 7.31 SP11 als Backend-System.

Nun haben wir unsere Klasse so erweitert, dass wir Issues auch sichern und
aktualisieren knnen. Die Funktionen Quick Fix und Quick Assist bieten
noch mehr Funktionen, die Sie zum Teil in Abschnitt 3.4, Refactoring,
noch kennenlernen werden. Das soll Sie aber nicht davon abhalten, auf
eigene Faust Anwendungsgebiete fr Quick Fix und Quick Assist zu erkunden. Sie knnten z. B. den Report Z_ISSUE_LIST in mehrere Includes aufteilen oder der Klasse ZCL_ISSUE eine Funktion is_dirty( ) hinzufgen, die
anzeigt, ob das Issue verndert wurde. Lassen Sie Ihrer Kreativitt freien
Lauf. Eine Liste der verfgbaren Quick Assists finden sie auch in der ADTHilfe (Help Help Contents) unter SAP ABAP Development User Guide
Concepts Quick Assists.

2.8

Arbeitsvorrat organisieren

Selten beginnen Sie Ihre Arbeit auf der grnen Wiese, sodass Sie alle
Objekte nach Ihrem Gutdnken neu anlegen knnen. Genauso selten knnen Sie Ihre Arbeit an einem Stck durchfhren und abschlieen. Oft
beginnt Ihre Arbeit damit, die Klasse zu finden, in der sich eine bestimmte
SELECT-Anweisung verbirgt, oder Sie sollen Ihren Report, den Sie vor zwei
Monaten entwickelt haben, um ein Feld erweitern. Aber wie hie das Programm noch gleich, und welche Objekte gehrten dazu? Knnen Sie diese
Methode ndern, oder wird sie noch an anderer Stelle verwendet? Diese Fragen stellen sich die meisten Entwickler so oder in hnlicher Form wohl hufiger. Bei der Beantwortung knnten Sie viel Zeit und die eine oder andere
Tasse Kaffee brauchen. Darum sehen wir uns in diesem Abschnitt an, wie Sie
Objekte (wieder-)finden knnen und wie Sie Ihre Aufgaben so organisieren,
dass Sie jeden Tag mglichst reibungsfrei mit der Arbeit beginnen oder fortsetzen knnen. Das soll natrlich nicht heien, dass Sie Ihren Tag nicht trotzdem mit einem frisch gebrhten Kaffee beginnen drfen.

2.8.1

Objekte finden

Beginnen wir zunchst damit, Entwicklungsobjekte nach Namen zu suchen.


Bestimmt haben Sie keine Lust, sich durch verschachtelte Paketlisten zu kli-

137

2.8

Funktionen der ABAP Development Tools

cken, um ein Objekt zu finden. Im SAP GUI gibt es verschiedene Transaktionen, in denen Sie nach ABAP-Dictionary-Objekten, Funktionsbausteinen,
Programmen oder Klassen suchen knnen, sowie Transaktion SE80, in der
diese Suchen gebndelt mglich sind. In Eclipse startet die Tastenkombination () + (Strg) + (A) oder der Menpfad Navigate Open ABAP Development Object ( ) den Dialog zum ffnen von Entwicklungsobjekten (siehe
Abbildung 2.61). Der Dialog ist relativ einfach gehalten. Sie sehen ein Eingabefeld und eine Ergebnisliste, die live bei der Eingabe Ihrer Suchanfrage eingeschrnkt wird. Bei der Suche werden auch Wildcard-Zeichen untersttzt:
Ein Asterisk (*) ist ein Platzhalter fr eine beliebige Zeichenkette.
Ein Fragezeichen (?) ist ein Platzhalter fr ein einzelnes beliebiges Zeichen.
Haben Sie mehrere Projekte in Ihren Workspace eingebettet, knnen Sie an
dieser Stelle auswhlen, welches Sie durchsuchen mchten. Sie knnen die
Suche auch auf bestimmte Objekttypen beschrnken. Die RepositoryObjekte haben vierstellige Typ-Codes, mit denen sie eindeutig identifiziert
werden knnen. Geben Sie dazu in der Suchzeile des Dialogs Open ABAP
Development Object type: ein (siehe Abbildung 2.61). Mit der Tastenkombination (Strg) + Leertaste knnen Sie sich die Liste der verfgbaren
Objekte anzeigen lassen.

Abbildung 2.61 Objektsuche in der Eclipse-Umgebung

Um ein Objekt zu ffnen, klicken Sie doppelt auf dieses Objekt in der Liste.
Der Dialog merkt sich zwar die zuletzt geffneten Objekte, allerdings bleibt

138

Arbeitsvorrat organisieren

Ihre Suchanfrage nicht erhalten, wenn Sie den Dialog erneut aufrufen. Diese
Funktion dient hauptschlich dem ffnen von Objekten und nicht zum
Durcharbeiten mehrerer Suchergebnisse. Dazu gibt es eine umfangreichere
Suchfunktion.
Objektsuche in der ABAP Workbench
Bis SAP NetWeaver 7.31 gab es in der ABAP Workbench keine Mglichkeit, generisch nach dem Namen eines Repository-Objekts zu suchen. Mit diesem Release
wurde die Funktion Anderes Objekt ( , () + (F5)) so umgebaut, dass es nun
auch mglich ist, nach dem Namen zu suchen.

Den erweiterten Suchdialog erreichen Sie ber die Tastenkombination (Strg)


+ (H). Dabei handelt es sich um eine allgemeine Suchfunktion, die nicht nur
die ABAP-Objekt-Suche beinhaltet. Die anderen Suchfunktionen erreichen
Sie ber verschiedene Registerkarten. Wenn Sie nicht alle Funktionen benutzen (weil Sie z. B. keine Java-Entwicklung betreiben), knnen Sie die Anzahl
der Registerkarten ber den Button Customizing einschrnken, wie in
Abbildung 2.62 geschehen.

Abbildung 2.62 Der Eclipse-Suchdialog

Auch die ABAP-Objektsuche ist sehr einfach gehalten. In ein Eingabefeld


knnen Sie den Namen des gesuchten Objekts eingeben. Im Unterschied
zum Dialog ABAP-Entwicklungsobjekt ffnen mssen Sie am Ende des
Suchbegriffs mit Wildcards arbeiten. Die Suche nach Z_ISSUE liefert z. B.
keinen Treffer. Um das Programm Z_ISSUE_LIST zu erhalten, mssen Sie
nach Z_ISSUE* suchen. Sie knnen die Suche auf Ihre Favoriten-Pakete einschrnken. Dies ist vor allem praktisch, wenn Sie nach Objekten suchen, die
Sie zuletzt bearbeitet haben. Zudem knnen Sie auch alle Systeme durchsuchen, die Sie in Ihren Workspace eingebettet haben. Stellen Sie dazu den
Umfang auf Arbeitsbereich ein.

139

2.8

Funktionen der ABAP Development Tools

Die Suche knnen Sie wie gewohnt im Vordergrund ausfhren lassen, whrenddessen weiterarbeiten und Eclipse im Hintergrund werkeln lassen. Das
Ergebnis wird Ihnen in einem eigenen View angezeigt. Den View Search
haben Sie schon in Abschnitt 2.6, Verwendungsnachweis, kennengelernt.
Genau wie beim Verwendungsnachweis haben Sie die Mglichkeit, Ihre
Suche erneut auszufhren oder auf Ergebnisse Ihrer letzten Suchen zurckzugreifen.
Neben der Suche nach Objektnamen ist es manchmal interessant, im Quellcode zu suchen. Vermutlich kennen Sie die Standardsuche in der ABAP
Workbench, die Sie ber die Tastenkombination (Strg) + (F) erreichen. Mit
der Standardsuche haben Sie die Mglichkeit, im aktuellen Editor oder Rahmenprogramm bzw. der aktuellen Klasse zu suchen. An den Programmgrenzen ist jedoch Schluss. hnliche Funktionen bietet Ihnen auch Eclipse. Die
Tastenkombination (Strg) + (F) ffnet den Dialog Find/Replace, in dem Sie
im aktuell geffneten Editor-Fenster suchen knnen (siehe Abbildung 2.63).
Der Suchdialog ermglicht die blichen Suchen nach Ausdrcken im Quelltext, von denen die meisten auch in der ABAP Workbench zur Verfgung
stehen.

Abbildung 2.63 Suchen/Ersetzen-Dialog

Der Dialog Find/Replace ist auf die Suche im aktuellen Editor beschrnkt.
Wenn Sie einen Ausdruck suchen, von dem Sie nicht mehr genau wissen, an
welcher Stelle er sich befindet, knnen Sie die Funktion ABAP Source Search
verwenden, die ebenfalls ber die Tastenkombination (Strg) + (H) zu erreichen ist und auf der Textsuche in SAP HANA basiert.

140

Arbeitsvorrat organisieren

ABAP Source Search aktivieren


Wenn Sie die ABAP Source Search zum ersten Mal verwenden wollen, kann es
sein, dass Sie die Fehlermeldung Text search services are not supported on erhalten. Das kann daran liegen, dass die Business Function SRIS_SOURCE_SEARCH nicht
aktiv ist. Sie knnen diese Funktion in Transaktion SFW5 aktivieren bzw. deaktivieren. Beachten Sie, dass die HANA-Textsuchmaschine speicherintensiv ist. Sie kann
mehrere Gigabyte Hauptspeicher belegen.
Die ABAP Source Search funktioniert im Moment aufgrund des begrenzten
Arbeitsspeichers nicht bei einem AWS-Testsystem. Aktivieren Sie hier die Business
Function, kann dies zum Absturz des HANA-Server-Prozesses fhren.

Vorsicht beim Aktivieren von Business Functions


Business Functions sollten Sie nur aktivieren, wenn Sie alle Seiteneffekte absehen
knnen. Lassen Sie solche nderungen in Ihrer Produktivlandschaft in jedem Fall
von einem SAP-Administrator und nur nach Absprache durchfhren!

Die Textsuche basiert auf einem Index, dessen Aufbau asynchron erfolgt und
bis zu einigen Stunden dauern kann. Verwenden Sie den Report SRIS_CODE_
SEARCH_PREPARATION, um zu prfen, ob der Index vollstndig angelegt
wurde. Weitere Informationen finden Sie unter: http://scn.sap.com/commu
nity/abap/eclipse/blog/2014/01/23/abap-sourcecode-search.
Die ABAP Source Search knnen Sie wie die Standardsuche ber einen einzelnen Editor verwenden. Wenn Sie mehrere Begriffe eingeben, die durch Leerzeichen voneinander getrennt sind, wird eine UND-Verknpfung angenommen,
d. h., nur wenn alle angegebenen Begriffe zutreffen, wird das entsprechende
Objekt angezeigt. Weitere logische Operatoren finden Sie in Tabelle 2.6.
Operator

Beschreibung

Der Wildcard-Operator steht als Platzhalter fr eine Kette beliebiger


Zeichen.

Mit dem Minuszeichen knnen Sie Begriffe explizit von der Suche
ausschlieen.

OR

Mit dem OR-Operator knnen Sie Begriffe mit einem logischen ODER
verknpfen. Ihnen werden dann alle Stellen angezeigt, an denen
mindestens einer der angegebenen Begriffe auftaucht.

<Begriff>

Anfhrungszeichen sorgen dafr, dass der angegebene Begriff so


gesucht wird, wie er eingegeben wurde, d. h., Leerzeichen werden
auch als Leerzeichen gesucht und nicht als logisches UND.

Tabelle 2.6 Operatoren der ABAP Source Search

141

2.8

Funktionen der ABAP Development Tools

Sie knnen zustzliche Suchfilter definieren, um Ihre Suche etwa auf


bestimmte Pakete einzuschrnken (siehe Abbildung 2.64). Alternativ knnen
Sie nur bestimmte Objekttypen (wie Klassen, Programme, Funktionsbausteine etc.) durchsuchen lassen oder die Suche auf bestimmte Benutzer einschrnken, die fr die entsprechenden Objekte verantwortlich sind. Das
Sucheingabefeld untersttzt die Autovervollstndigung mittels (Strg) + Leertaste. Wollen Sie mit mehreren Kriterien einschrnken, knnen Sie diese einfach getrennt durch ein Leerzeichen angeben.

Abbildung 2.64 Suchbegriff und Suchfilter bei der ABAP Code Search

Mindestvoraussetzung fr die ABAP Source Search


Die ABAP Source Search ist erst ab SAP NetWeaver AS ABAP 7.4 SP5 verfgbar
und funktioniert nur zusammen mit SAP HANA. Die Funktion wurde mit den
ABAP Development Tools 2.19 ausgeliefert.

Wie helfen Ihnen die Suchfunktionen nun dabei, Ihren Arbeitsvorrat zu


organisieren? Zum einen knnen Sie nach bestimmten Quelltextfragmenten
suchen. So lsst sich z. B. die Frage beantworten, an welcher Stelle harte
Updates der Tabelle VBAP vorgenommen werden. Fr mich persnlich entfaltet diese Funktion aber erst in Verbindung mit gut durchdachten Code- und
Kommentarkonventionen ihr volles Potenzial. Stellen Sie sich z. B. vor, Sie
mssen einen Fehler beheben, der im Zusammenhang mit einem bestimmten Change Request ins System gespielt wurde, oder suchen eine nderung,
die Kollege X irgendwann im Mai gemacht hat. In diesen Fllen macht es sich
bezahlt, neuen Quellcode mit einheitlich formatierten Kommentaren zu verse-

142

Arbeitsvorrat organisieren

hen. Ist dieses Format einmal festgelegt, ist es im Zusammenspiel mit CodeVorlagen (siehe Abschnitt 2.3.2) praktisch kein Mehraufwand, solche Kommentare zu platzieren. So gebe ich bei meinen Entwicklungen in der Regel
folgende Informationen an:
Autor
nderungsdatum
Beschreibung (Dies ist generell bei komplexeren Entwicklungen eine gute
Idee.)
angefordert durch
Anforderungsnummer
Versehen Sie diese Informationen immer mit den gleichen Schlsselworten,
knnen Sie auch nach Jahren noch problemlos alle Entwicklungen finden,
die z. B. zur Anforderungsnummer CR 0815 gehren.
Bei nderungen an bestehenden Codes hat sich zudem eine Art Stempel etabliert, um eine angepasste Zeile auf den ersten Blick auffindbar zu machen.
So ein Stempel knnte z. B. so aussehen:
"SCHOEND20140101

Damit haben Sie den Benutzernamen des nderers und den aktuellen Zeitstempel in Ihrem Kommentar. Eine andere Variante ist es, offene Punkte als
Kommentar abzulegen. Sie knnen solche Kommentare immer mit Todo:
oder FixMe: einleiten.
Quelltextsuche in der ABAP Workbench
Der Vollstndigkeit halber sei erwhnt, dass es auch im SAP GUI hnliche Funktionen gibt. Zum einen knnen Sie Transaktion CODE_SCANNER nutzen. Etwas feinere Einschrnkungsmglichkeiten bietet der Report RS_ABAP_SOURCE_SCAN. Bei
beiden Suchfunktionen muss aber der Suchraum eingeschrnkt werden. Wird dieser zu gro gewhlt, dauert die Suche dementsprechend lange.

2.8.2

Lesezeichen

Lesezeichen oder Bookmarks kennen Sie vielleicht aus der ABAP Workbench.
Sie knnen diese innerhalb eines Quelltextes setzen und dann ber das Kontextmen oder per Tastenkombination anspringen. Die Bezeichnung Lesezeichen ist vielleicht etwas irrefhrend, denn dessen Lebensdauer ist auf ein
Editor-Fenster begrenzt. Verlassen Sie dieses, werden die Bookmarks wieder

143

2.8

Funktionen der ABAP Development Tools

verworfen. Was wrden Sie sagen, wenn Sie ein Buch lesen und Ihr Lesezeichen nach dem Umblttern pltzlich spurlos verschwindet? Der Begriff
Sprungmarke wrde deshalb vielleicht besser passen, d. h., Sie knnen z. B.
eine Markierung in die Datendeklaration und eine an die Stelle setzen, an
der Sie gerade arbeiten, und so sehr schnell zwischen diesen beiden Punkten
hin und her springen.
Dauerhafter verhlt sich die Objektliste (Worklist), die Sie in Transaktion
SE80 ber Utilities Worklist Display aufrufen knnen. Hier knnen Sie
Quelltextabschnitte speichern und diese sogar mit einem Kommentar versehen. Leider wird die Objektliste meiner Erfahrung nach selten oder nur sehr
inkonsequent verwendet. Dies mag daran liegen, dass sie sich nicht so leicht
in den Arbeitsfluss einfgt. Zudem gibt es kein optisches Feedback im Quellcode zu den gesetzten Markierungen.
Das Konzept der Bookmarks in Eclipse ist eine Mischung aus den Bookmarks
in der ABAP Workbench und der Objektliste. Sie knnen Bookmarks mit
einem Rechtsklick auf den Vertical Ruler und dem Kontextmeneintrag Add
Bookmark anlegen (siehe Abbildung 2.65). Zu jedem dieser Lesezeichen
knnen Sie zudem einen kurzen Kommentar verfassen. Die Bookmarks werden dann als Marker ( ) im Vertical Ruler angezeigt. Darber hinaus tauchen
sie standardmig auch im Overview Ruler auf.

Abbildung 2.65 Bookmark hinzufgen

Auerdem finden Sie alle Bookmarks in Ihrem Projekt im View Bookmarks


(siehe Abbildung 2.66), den Sie ber den Menpfad Window Open View
bzw. ber den Quick Access ffnen knnen. Ihre gesetzten Lesezeichen knnen Sie mit einem Klick auf den entsprechenden Eintrag im Bookmarks-

144

Arbeitsvorrat organisieren

View anspringen. Ihnen werden standardmig alle Bookmarks angezeigt,


auch die, die sich in anderen (geffneten) Projekten Ihres Workspaces befinden. Sie knnen aber die Sicht einschrnken. Whlen Sie dazu Configure
Content aus dem Men des Bookmarks-Views. Sie knnen z. B. dafr
sorgen, dass Ihnen nur die Bookmarks des aktuell geffneten Objekts angezeigt werden, oder einen Textfilter fr die Beschreibung anlegen. Vielleicht
haben Sie sich bei der Lektre der bisherigen Abschnitte eine umfangreiche
Sammlung von Beispielen zusammengestellt, die Sie mit Bookmarks kennzeichnen knnen. Benennen Sie die Bookmarks einheitlich (etwa beginnend
mit Beispiel:), und schon knnen Sie den Bookmarks-View als Ihr persnliches Vorlagenverzeichnis verwenden.

Abbildung 2.66 View Bookmarks

Um mithilfe der Tastatur zwischen Bookmarks hin und her zu navigieren,


knnen Sie die in Abschnitt 2.4.3, Lineale und Markierungen, beschriebene Funktion Next Annotation nutzen. Sie mssen allerdings zuerst
sicherstellen, dass auch Bookmarks mit dieser Funktion angesprungen werden. Klappen Sie dazu ber das kleine Dreieck neben dem Icon Next Annotation
das Men aus, und markieren Sie den Eintrag Bookmarks (siehe
auch Abbildung 2.42). Von nun an knnen Sie ber die Funktionen der Toolbar oder mit den Tastenkrzeln (Strg) + (.) bzw. (Strg) + (,) zwischen Ihren
Lesezeichen hin und her springen.
Positionierung von Bookmarks
Beachten Sie, dass Bookmarks, anders als Eintrge in der ABAP-Objektliste, nicht
starr an einer Zeile hngen, d. h., wenn Sie ber einem Bookmark Zeilen einfgen
oder lschen, verschiebt sich auch das Lesezeichen dementsprechend.

2.8.3

Aufgaben verwalten

Frher habe ich offene Punkte oft als Kommentar in meinen Quelltext
geschrieben, um dann am nchsten Tag an dieser Stelle weitermachen zu
knnen. Leider ist es manchmal bei diesem Kommentar geblieben. Mit den

145

2.8

Funktionen der ABAP Development Tools

neuen Suchfunktionen bzw. mit Transaktion CODE_SCANNER ist es zwar


mglich, nach To-do-Kommentaren zu suchen, aber wirklich bequem ist dieses Vorgehen nicht. Zudem sollten Sie versuchen, Quelltexte von solchen
persnlichen Notizen frei zu halten.
Schner wre es, solche Aufgaben als Metadaten an den Quelltext zu heften.
Dies ist in Eclipse mglich. Auf die gleiche Art, auf die Bookmarks angelegt
werden, ist es auch mglich, Aufgaben zu definieren. Nutzen Sie dazu wieder das Kontextmen des Vertical Rulers, und whlen Sie Add Task (siehe
Abbildung 2.65). Zustzlich zu einer Beschreibung knnen Sie hier auch eine
Prioritt vergeben.
Aufgaben erscheinen als Markierung
im Vertical Ruler und zustzlich in
einem eigenen Tasks-View. Verwechseln Sie diese nicht mir der Task List
oder dem Task Repository, ber die Sie in Abschnitt 2.8.5, Aufgabenverwaltung mit Mylyn, noch mehr erfahren.
Den View Tasks knnen Sie hnlich wie den View Bookmarks anpassen. Es
gibt hier bereits einen vordefinierten Textfilter, mit dem Sie auf TODOs
einschrnken knnen, d. h., es werden nur Aufgaben angezeigt, in deren
Beschreibung der Begriff TODO in Grobuchstaben vorkommt. Sie knnen
aber auch beliebige eigene Filter eingeben.
Sie haben im Tasks-View zudem die Mglichkeit, eine Aufgabe als erledigt
zu markieren. Damit ist der Funktionsumfang dieser einfachen Aufgabenliste auch schon erschpft. Sie soll allerdings auch nicht die Aufgaben eines
ganzen Projektteams koordinieren, sondern mglichst einfach sein, damit
Sie schnell und ohne groe Unterbrechungen Ihres Arbeitsflusses Aufgaben
festhalten knnen, zu denen Sie spter noch kommen wollen, z. B. Implementiere diese Methode! oder Erstelle einen eigenen Datentyp!. So knnen Sie sich darauf konzentrieren, eine Aufgabe zu beenden, ohne dabei
Gefahr zu laufen, etwas zu vergessen, das Sie fr den Moment zurckgestellt
hatten. Wenn Ihnen die Mglichkeiten des Tasks-Views nicht gengen, sei
Ihnen Abschnitt 2.8.5, Aufgabenverwaltung mit Mylyn, ans Herz gelegt, in
dem Sie eine wesentlich mchtigere Mglichkeit kennenlernen werden, Aufgaben, Bug-Reports oder Anforderungen zu managen.
Auch Aufgaben lassen sich mit (Strg) + (.) bzw. (Strg) + (,) anspringen, dazu
mssen Sie ein Hkchen bei Next Annotation Tasks in der Toolbar setzen.
Die Annotationen fr Tasks und Bookmarks knnen Sie in den Einstellungen
unter Window Preferences Editors Text Editors Annotations anpassen.

146

Arbeitsvorrat organisieren

2.8.4

Quellcode-Links

Mit Bookmarks und Tasks knnen Sie zwar Ihren eigenen Arbeitsvorrat
organisieren, die Interaktion mit den Kollegen haben wir dabei aber vllig
auen vor gelassen. Leider gibt es keine einfache Mglichkeit, BookmarkListen auszutauschen. Allerdings bringen die ADT ein praktisches neues Feature mit, um Quellcode-Stellen einfach mit Kollegen auszutauschen, und
zwar ber einen ABAP-Link. Dabei handelt es sich um eine URL, die z. B. per
E-Mail oder Messenger geteilt werden kann. Die URL beginnt mit einem
eigenen Protokoll, fr das die ADT registriert sind. Sobald Sie auf den Link
klicken, ffnet sich die entsprechende Stelle im Quelltext in Ihrer EclipseUmgebung sofern Sie einen Benutzer fr das betreffende System haben.
Bevor Sie diese sogenannten ADT-Links nutzen knnen, mssen Sie in den
Einstellungen unter Window Preferences ABAP Development Ihre
Eclipse-Umgebung als Handler fr das Protokoll adt einstellen (siehe Abbildung 2.67). Haben Sie mehrere Eclipse-Installationen im Einsatz, knnen Sie
whlen, welche die Code-Links ffnen soll.

Abbildung 2.67 Handler fr ADT-Links aktivieren

1. ffnen Sie die Klasse ZCL_ISSUE, und markieren Sie ein paar Zeilen in der
Klasse.
2. Klicken Sie mit der rechten Maustaste auf die markierte Stelle, und whlen
Sie im Kontextmen den Eintrag Share Link for Selection.
3. Whlen Sie ADT-Link, und klicken Sie anschlieend auf den Button Copy
link to clipboard (siehe Abbildung 2.68).
Alternativ knnen Sie den Link auch direkt per E-Mail versenden. Eclipse
ruft dann Ihr Standard-E-Mail-Programm auf und fgt den Link in eine
Nachricht ein.

147

2.8

Funktionen der ABAP Development Tools

Abbildung 2.68 Link in die Zwischenablage kopieren

4. Schlieen Sie die Registerkarte mit dem Editor und die Entwicklungsumgebung.
5. Fgen Sie den Link z. B. in eine Datei in einem Textverarbeitungsprogramm ein. Sorgen Sie gegebenenfalls dafr, dass der Link auch als Hyperlink erkannt wird. Der Link sollte etwa so aussehen:
adt://A4H/sap/bc/adt/oo/classes/zcl_issue/source/main#start=18,0;end=
21,35
6. Klicken Sie auf den Link, ffnet sich Eclipse und fordert Sie auf, sich am
System anzumelden.
Sie knnen brigens auch ganze Objekte mit einem Link markieren. Klicken
Sie dazu im Project Explorer mit der rechten Maustaste auf das entsprechende Objekt, und whlen Sie im Kontextmen den Eintrag Share Link.
Auch wenn Sie keinen Editor zur Hand haben, der Ihren ADT-Link automatisch als Hyperlink erkennt, knnen Sie diese Funktion verwenden:
1. Starten Sie die ADT in Eclipse.
2. Whlen Sie Navigate Open ADT Link, oder nutzen Sie die Tastenkombination (Strg) + (Alt) + (O).
3. Fgen Sie den ADT-LINK ein, und besttigen Sie mit OK.
Seit SAP NetWeaver 7.4 SP5 und den ABAP Development Tools 2.31 gibt es
eine weitere Mglichkeit, Quellcode-Stellen zu teilen auch, wenn der Empfnger gerade nicht ber einen Zugang zu Eclipse oder dem SAP GUI verfgt.
Es muss lediglich ein Browser vorhanden sein und eine Verbindung zum
Zielsystem bestehen. Der Applikationsserver kann den Quellcode als HTMLSeite im Browser darstellen, auf den Empfnger zugreifen knnen, die ber
einen gltigen Benutzer mit den entsprechenden Rechten verfgen. Diese
Funktion muss allerdings zunchst aktiviert werden:

148

Arbeitsvorrat organisieren

1. Starten Sie Transaktion SICF, indem Sie in Eclipse die Tasten (Alt) + (F8)
(Run ABAP Application) drcken und nach SICF suchen. Ein Doppelklick auf den Transaktionsnamen startet den SAP GUI.
2. Wechseln Sie in die Servicehierarchie, indem Sie (F8) drcken.
3. ffnen Sie den Pfad Default Host SAP BC ADT.
4. Klicken Sie mit der rechten Maustaste auf den Service ADT, und whlen
Sie Activate Service. Besttigen Sie die Aktivierung anschlieend.
Nach dem Aktivieren haben Sie im Fenster Link freigeben (siehe Abbildung
2.68) neben dem ADT-Link auch die Mglichkeit, einen HTTP-Link zu generieren. Den so erstellten Link knnen Sie in einem beliebigen Browser ffnen (siehe Abbildung 2.69). Sogar die Anzeige auf einem mobilen Gert ist
prinzipiell mglich.

Abbildung 2.69 HTTP-Link im Browser anzeigen

149

2.8

Funktionen der ABAP Development Tools

Neustart der Entwicklungsumgebung


Sollte die Funktion zur Generierung des HTTP-Links auch nach dem Aktivieren des
SICF-Services nicht verfgbar sein, starten Sie die Entwicklungsumgebung neu.

2.8.5

Aufgabenverwaltung mit Mylyn

Mylyn ist ein Plug-in, das mittlerweile einen festen Platz in den Eclipse-Auslieferungen hat. Dabei handelt es sich, einfach gesagt, um eine Aufgabenverwaltung. Mit dieser Kategorisierung wird man den Mglichkeiten dieses
Plug-ins allerdings kaum gerecht. Wir sehen uns an dieser Stelle die Basisfunktion von Mylyn an, damit Sie Ihre ersten Gehversuche unternehmen
knnen. ber dieses Plug-in wurden ganze Bcher verfasst, daher bitte ich
zu entschuldigen, dass wir uns nicht in voller Breite mit diesem Thema befassen knnen. Mchten Sie noch weitere Informationen zu Mylyn bekommen,
ist die Mylyn-Seite auf der Eclipse-Homepage ein guter Anlaufpunkt: http://
eclipse.org/mylyn/start/.
Aufgabenkontext
Kennen Sie Mylyn bereits, haben Sie vielleicht schon vom Aufgabenkontext
Gebrauch gemacht, mit dem Sie Entwicklungsobjekte an die aktuelle Aufgabe binden knnen. Bei Wiederaufnahme der Aktivitt werden nur die Objekte aus dem
Aufgabenkontext angezeigt, sodass Sie fokussiert an einer Aufgabe arbeiten knnen.
Diese Funktion wird in den ADT nicht voll untersttzt. Sie knnen keine einzelnen
Repository-Objekte hinzufgen, Mylyn merkt sich allerdings, welche Editoren Sie
geffnet haben. Wenn Sie eine Aufgabe aktivieren werden die entsprechenden Editoren angezeigt. Die Funktion Link With Editor ( ) sollten sie ggf. kurzzeitig deaktivieren, da Eclipse sonst versucht, zu jedem Editor das entsprechende Objekt im
Project Explorer zu ffnen, was einige Zeit in Anspruch nehmen kann. Lokale Aufgaben

Lokale Aufgaben
Lokale Aufgaben in Mylyn dienen wie die Aufgaben, die wir in Abschnitt
2.8.3, Aufgaben verwalten, besprochen haben, primr der eigenen Organisation. Der zentrale Einstiegspunkt ist der View Task List. Diese lokale Aufgabenliste bietet Ihnen allerdings einige Mglichkeiten mehr als die einfachen Aufgaben des Views Tasks.
1. ffnen Sie den View Task List ber Window Show View Other
Task List.

150

Arbeitsvorrat organisieren

2. Klicken Sie mit der rechten Maustaste in den View, und whlen Sie Local
Task im Kontextmen, oder drcken Sie die (Einfg)-Taste.
3. Geben Sie einen Titel fr Ihre lokale Aufgabe an (siehe 1 in Abbildung 2.70).

Abbildung 2.70 Aufgabe anlegen

4. Geben Sie an, wann Sie die Aufgabe angehen mchten und wann die Aufgabe sptestens fllig ist. Sie knnen zudem eine Schtzung ber die voraussichtliche Dauer der Aufgabe abgeben 2.
5. Beschreiben Sie die Aufgabe nher 3.
6. Legen Sie die Prioritt der Aufgabe fest 4, und speichern Sie Ihre Aufgabe
mit der Tastenkombination (Strg) + (S).
Sie knnen Ihre Aufgaben auch kategorisieren. Dazu mssen Sie vorher eine
Kategorie ber das Kontextmen der Task List (Eintrag Category) anlegen. Weitere Aufgaben knnen Sie entweder direkt in der Kategorie anlegen oder per
Drag & Drop in die Kategorie verschieben. Darber hinaus knnen Sie zu einer
Aufgabe beliebig viele Unteraufgaben definieren. Dazu markieren Sie die entsprechende Aufgabe und whlen New Subtask oder die Tasten () + (Einfg).
Die angelegte Aufgabenliste bringt einige hilfreiche Funktionen mit. Positionieren Sie die Maus lnger auf einem Eintrag (Aufgabe oder Kategorie), um
Details einblenden zu lassen (siehe Abbildung 2.71). In einem kleinen Balken unten in der Quickinfo wird Ihnen der Gesamtfortschritt angezeigt.
ber die Symbolleiste knnen Sie Ihre Aufgaben in der Liste nach Kategorien gruppieren ( ) oder die Liste nach Erledigungsdatum einteilen lassen
( ). Die bereits erledigten Aufgaben knnen Sie ausblenden ( ). Die Funktion Focus on Workweek ( ) stellt sicher, dass Sie von Ihrer Aufgabenflut

151

2.8

Funktionen der ABAP Development Tools

nicht berwltigt werden, sondern nur das sehen, was Sie sich fr diese
Woche vorgenommen haben.

Abbildung 2.71 Funktionen der Task List

Um lokale Aufgaben mit Ihren Kollegen zu teilen, steht Ihnen eine Importund Exportfunktion zur Verfgung. Markieren Sie die Aufgaben, die Sie
exportieren mchten, und whlen Sie Import and Export Export im Kontextmen. Die gewhlten Aufgaben werden als gezippte XML-Datei abgespeichert. ber die Funktion Import and Export Import knnen Sie analog
Aufgaben wieder importieren. Wirklich kollaborativ lsst sich ber den Austausch lokaler Aufgaben via XML jedoch nicht arbeiten.

Task Repositories
Vielleicht setzt Ihr Unternehmen bereits Ticketsysteme oder Bug-Tracker
(d. h. Lsungen zur Meldung und Verfolgung von Fehlermeldungen und
neuen Anforderungen) ein, um Anfragen und Aufgaben zu verwalten.
Mylyn bietet eine Integration mit einer Vielzahl von Ticketsystemen an, z. B.
Bugzilla (http://www.bugzilla.org), ein freies webbasiertes Tracking-System.
Eine Liste der untersttzen Systeme finden Sie unter http://wiki.eclipse.org/
Mylyn/Extensions.
Bugzilla-Testsystem
Es gibt einige fertig konfigurierte freie Testumgebungen fr Bugzilla im Internet,
z. B. Landfill (https://landfill.bugzilla.org/), eine Testumgebung, in der Bugzilla in
verschiedenen Versionen gehostet wird. Sie knnen sich kostenlos fr eine oder
mehrere Versionen registrieren. Verwenden Sie mglichst nicht das aktuellste
Release, da dieses unter Umstnden nicht von Mylyn untersttzt wird. Ich verwende Version 4.4 (https://landfill.bugzilla.org/bugzilla-4.4-branch/).

152

Dokumentation

2.9

Dokumentation

Vielleicht haben Sie sich auf Ihrer bisherigen Reise durch Eclipse schon
gefragt, was mit den Beschreibungen und Dokumentationen ist, die Sie in
der ABAP Workbench bei den meisten Entwicklungsobjekten vergeben
konnten oder sogar mussten. Dieses Konzept wurde in den ADT (teilweise)
abgelst. Es wurde ein spezielles Kommentarformat entwickelt, mit dem
Objekte dokumentiert werden knnen und das als ABAP Doc bezeichnet
wird. ABAP Doc knnen Sie fr Klassen, Programme oder Funktionsbausteine verwenden. Aber auch lokale Variablen und Typendeklarationen knnen Sie mit Dokumentationen anreichern. Im Eclipse-Editor knnen Sie sich
die Dokumentation mit der Funktionstaste (F2) oder im View ABAP Element
Info anzeigen lassen. Eine hnlicher Ansatz wird schon seit Jahren bei Programmiersprachen wie Java oder C# verwendet. Um ABAP Doc zu nutzen,
mssen Sie mindestens ber einen SAP NetWeaver AS ABAP 7.4 SP2 verfgen. Eine Untersttzung des AS ABAP 7.31 ist derzeit nicht geplant. Weitere
Informationen zu ABAP Doc finden Sie unter http://scn.sap.com/docs/DOC40872.

2.9.1

Objekte dokumentieren

Bei ABAP Doc handelt es sich um speziell formatierte Kommentare, die Sie in
ABAP vor den meisten Deklarationen ergnzen knnen. ABAP-Doc-Kommentare werden mit "! eingeleitet. Hinter diesem Zeichen kann dann ein
beliebiger beschreibender Text stehen, z. B.:
"! Nummer des aktuell bearbeiteten Belegs
lf_order_number TYPE VBELN.

Bei mehrzeiligen Kommentaren muss jede neue Zeile mit "! eingeleitet werden. Eclipse fgt dieses Kommentarzeichen bei jedem Zeilenumbruch automatisch hinzu.
"!Enthlt die erste Position
"!des aktuellen Belegs
ls_item TYPE VBAP.

Auch Methoden, Funktionsbausteine und Form-Routinen knnen Sie mit


ABAP Doc dokumentieren. Zudem knnen Sie zustzliche Beschreibungen
zu Parametern und Ausnahmen angeben. Dazu stehen Ihnen die in Tabelle
2.7 zusammengefassten Schlsselwrter zur Verfgung. Beachten Sie, dass
Sie auch hier ein "! voranstellen mssen.

153

2.9

Funktionen der ABAP Development Tools

Syntax

Beschreibung

@parameter <Parametername> |
<Beschreibung>

Beschreibung eines Parameters

@exception <Ausnahmenname> |
<Beschreibung>

Beschreibung einer Ausnahme

@raising >Ausnahmenname> |
<Beschreibung>

Beschreibung einer klassenbasierten


Ausnahme

Tabelle 2.7 ABAP-Doc-Schlsselwrter

Eine dokumentierte Methode knnte wie in Listing 2.20 aussehen.


"! Sets the content of an issue. The current
"! content is completely replaced.
"! @parameter is_issue | The new content
set_issue IMPORTING is_issue TYPE zissue
Listing 2.20 Mit ABAP Doc dokumentierte Methode

Auch ABAP Doc bietet Ihnen Quick-Fix-Funktionen an. Erstellen Sie z. B. zu


einer Methode einen ABAP-Doc-Kommentar, knnen Sie sich mit der Tastenkombination (Strg) + (1) Vorlagen fr die Parameterkommentare generieren lassen.
In begrenztem Umfang haben Sie die Mglichkeit, ABAP Doc zu formatieren. Dazu stehen Ihnen die HTML-Tags aus Tabelle 2.8 zur Verfgung.
HTML-Tag

Beschreibung

<h1> </h1>

berschrift Ebene 1

<h2> </h2>

berschrift Ebene 2

<h3> </h3>

berschrift Ebene 3

<p> </p>

Absatz

<em> </em>

kursiver Text

<strong> </strong>

fett gedruckter Text

<ul>
<li></li>
</ul>

unnummerierte Liste

<ol>
<li></li>
</ol>

nummerierte Liste

<br/> bzw. <br></br>

Zeilenumbruch

Tabelle 2.8 Untersttzte HTML-Tags zur Formatierung

154

Dokumentation

Den zu formatierenden Text umschlieen Sie einfach mit dem entsprechenden Tag. Weitere Deklarationen (wie BODY-Tags) sind nicht erforderlich.
Wichtig ist allerdings, dass geffnete Tags wieder geschlossen werden. Das
Schachteln von Tags ist im Augenblick noch nicht mglich.
Sonderzeichen und Umlaute mssen in ABAP Doc maskiert werden. Dabei
kommt die aus HTML-bekannte Syntax zum Einsatz (siehe Tabelle 2.9). Verstoen Sie bei der Eingabe Ihres ABAP Docs gegen Syntaxregeln, wird Ihnen
dies mit einer Annotation ( ) angezeigt.
Zeichen

Escaped

Zeichen

Escaped

<

&lt;

&Auml;

>

&gt;

&Ouml;

"

&quot;

&Uuml;

'

&apos;

&auml;

&#64;

&ouml;

&#124;

&uuml;

Tabelle 2.9 Escaped-Zeichenketten zur Maskierung von Sonderzeichen und Umlauten

Beliebige ASCII-Zeichen ersetzen


Tabelle 2.9 zeigt nur eine Teilmenge der untersttzten Sonderzeichen. Sie knnen
auf diese Weise jedes beliebige ASCII-Zeichen abbilden. Eine Referenz finden Sie
z. B. hier: http://www.ascii-code.com/.

Im Folgenden statten wir unsere Beispielentwicklung mit einer Dokumentation aus:


1. ffnen Sie die Klasse ZCL_ISSUE.
2. Fgen Sie Listing 2.21 oberhalb der Klassendeklaration ein:
"! Klasse zur Bearbeitung von Issues.
"! Es wird das Laden, Anlegen und &Auml;ndern
"! von Issues unterst&uuml;tzt.
CLASS zcl_issue DEFINITION
Listing 2.21 Dokumentation von ZCL_ISSUE

3. Springen Sie zur Definition des Constructors von ZCL_ISSUE, und fgen Sie
davor den Code aus Listing 2.22 ein.
"! Erstellt ein leeres Issue oder l&auml;dt
"! ein Issue von der Datenbank.

155

2.9

Funktionen der ABAP Development Tools

"! Zur Neuanlage geben Sie <strong>keine</strong>


"! <em>issue ID</em> an.
constructor
IMPORTING ls_issue TYPE z_issue_id
EXCEPTIONS no_issue_found optional,
Listing 2.22 ABAP Doc zum Constructor in ZCL_ISSUE

4. Drcken Sie (Strg) + (1), whrend der Cursor noch in der letzten Kommentarzeile steht, und whlen Sie Fgen Sie der Dokumentation fehlende Parameter hinzu.
5. Das System generiert Parameter und Ausnahmenkommentare (siehe Listing 2.23), die Sie ebenfalls ergnzen.
"!
"!
"!
"!
"!

@parameter if_issue | Inhalt eines Issues


Technische Felder wie ERDAT werden
automatisch bef&uuml;llt.
@exception no_issue_found | Zur angegebenen
ID wurde kein Issue gefunden.

Listing 2.23 Parameter-Dokumentation-Constructors der Klasse ZCL_ISSUE

6. Optional knnen Sie auf die gleiche Weise zu allen Deklarationen einen
ABAP-Doc-Kommentar erstellen.
7. Aktivieren Sie Ihre nderungen.
Es ist generell eine gute Idee, den eigenen Quellcode zu dokumentieren, und
das besser frher als spter. Vielleicht probieren Sie auch einmal aus, Methoden zuerst zu dokumentieren und erst anschlieend zu implementieren. Die
Dokumentation kann dann als eine Art Leitfaden bei der Implementierung
dienen. Sehr praktisch ist auch, dass lokale Variablen mit einer Dokumentation versehen werden knnen, was bisher nicht mglich war.

2.9.2

Dokumentation anzeigen

ABAP Doc bietet einen Mehrwert bei der Anzeige, denn die Dokumentation
eines Elements steht Ihnen jederzeit zur Verfgung. Sie sehen nicht nur den
geschriebenen Kommentar in der Definition, sondern knnen sich diese
Dokumentation auch bei der Verwendung des Elements bzw. bei seiner
Implementierung anzeigen lassen. Dazu gibt es drei Mglichkeiten:
Die Code-Vervollstndigung greift den ABAP-Doc-Kommentar auf und
zeigt ihn als ergnzende Information an (siehe Abbildung 2.72).

156

Dokumentation

Abbildung 2.72 ABAP Doc in der Code-Vervollstndigung

Die zweite Variante ist die Code Element Info, die Sie aufrufen, indem Sie
(F2) drcken, whrend Sie mit dem Cursor auf einem dokumentierten Element stehen. Die Code Element Info wird direkt an Ihrem Cursor eingeblendet, und Sie sehen die Signatur des Elements sowie die Dokumentation (siehe Abbildung 2.73). Beachten Sie, dass dies nicht im Deklarationsteil eines Elements funktioniert, sondern nur bei der Verwendung und der
Implementierung (etwa bei Methoden).

Abbildung 2.73 Code Element Info

Zu guter Letzt gibt es noch den View ABAP Element Info, der Ihnen die
Signatur und die Dokumentation des aktuellen Elements anzeigt. Sie erreichen ihn ber die View-Auswahl (Window Open View Other bzw. ()
+ (Alt) + (Q), (Q)). Alternativ gelangen Sie zu dem View, wenn Sie in der
Code Element Info ((F2)) auf das @-Zeichen in der linken unteren Ecke klicken. Der Inhalt des Views entspricht dem der Code Element Info, mit
dem Unterschied, dass der View nicht ausgeblendet wird, sondern bei
Bedarf stndig geffnet sein kann.

157

2.9

Funktionen der ABAP Development Tools

Klassische Dokumentation
Beim Aufruf der Dokumentation in der Code Element Info macht es keinen Unterschied, ob Sie klassisch im SAP GUI kommentiert oder ABAP Doc verwendet
haben. In beiden Fllen wird Ihnen die Dokumentation angezeigt. Sind beide Versionen vorhanden, erhlt ABAP Doc den Vorzug.

2.9.3

Dokumentation importieren

Haben Sie bestehende Entwicklungen, die Sie gerne in Eclipse fortsetzen


mchten, mssen Sie die Kommentare nicht neu anlegen. Zum einen zeigt
Ihnen die ABAP Element Info auch die bestehende Dokumentation des Elements an, zum anderen bieten Ihnen die ADT die Mglichkeit, bestehende
Dokumentationen zu importieren. Dazu whlen Sie aus dem Source-Men,
das Sie mit der Tastenkombination () + (Alt) + (S) oder im Kontextmen
des Quelltextes aufrufen, den Eintrag Import ABAP Doc from Description.
Daraufhin wird ein valides ABAP Doc generiert, Umlaute werden allerdings
unter Umstnden falsch dargestellt. Beachten Sie daher die Warnungen, die
Ihnen angezeigt werden. Sie knnen ABAP Doc nur in Objekte laden, die Sie
auch ndern knnen.
Gehen Sie wie folgt vor, wenn Sie eine bestehende Entwicklung fortfhren
mchten:
1. ffnen Sie die Klasse ZCL_PROJECT in der ABAP Workbench.
2. Legen Sie die Methodendeklarationen inklusive einer Beschreibung an,
wie in Abbildung 2.74 dargestellt.

Abbildung 2.74 Methoden von ZCL_PROJECT

3. Legen Sie zur Methode is_persistent den Rckgabeparameter rf_persistent an, und vergeben Sie auch hier eine Beschreibung (siehe Abbil-

158

Dokumentation

dung 2.75). Dies soll als Beispiel zunchst gengen. Mchten Sie noch
mehr ausprobieren, knnen Sie die Methodendeklarationen basierend auf
Abbildung 2.2 vervollstndigen.

Abbildung 2.75 Methodendeklaration von IS_PERSISTENT

4. Speichern und aktivieren Sie die Klasse.


5. Wechseln Sie zu den ABAP Development Tools, und ffnen Sie die Klasse
ZCL_PROJECT (() + (Strg) + (A)).
6. Whlen Sie aus dem Kontextmen Quelle Import ABAP Doc from
Description. Alternativ erreichen Sie das Men Source auch ber die Tastenkombination () + (Alt) + (S).
Nach dem Import sollte Ihre Klasse wie in Abbildung 2.76 aussehen. Sie knnen nun die Dokumentation auch in Eclipse anpassen.

Abbildung 2.76 ZCL_PROJECT mit importierten Beschreibungen

159

2.9

Funktionen der ABAP Development Tools

Sprache beachten
Der Import der Dokumentation ist sprachabhngig, d. h., wenn Sie sich ber Ihr
ABAP-Projekt mit der Anmeldesprache Deutsch am Server anmelden, wird die
deutsche Dokumentation geladen. Liegt keine bersetzung fr diese Sprache vor,
wird keine Dokumentation importiert.

2.9.4

ABAP Language Help

Neben der Objekt-Dokumentation bentigt man von Zeit zu Zeit auch die
ABAP-Schlsselwort-Hilfe. Diese knnen Sie, wie Sie es von der ABAP Workbench gewohnt sind, mit der Funktionstaste (F1) aufrufen. Befindet sich der
Cursor dabei ber einem Schlsselwort, wird die entsprechende Hilfeseite
im View ABAP Language Help angezeigt.
Sie knnen ber die Funktion Link with Editor ( ) dafr sorgen, dass die
Hilfeseite zu dem Schlsselwort, auf dem sich der Cursor gerade befindet,
automatisch angezeigt wird. Zudem bietet Eclipse eine sehr umfangreiche
Hilfe zu allen verfgbaren Eclipse-Funktionen an. Diese finden Sie im Men
unter Help Help Contents. Auch die durch die ADT beigesteuerten Funktionen sind hier unter SAP ABAP Development User Guide dokumentiert.
Die Hilfe ist sehr gut strukturiert und vollstndig. Ein Blick in die Hilfe lohnt
sich daher in jedem Fall.

160

Leider ist die Softwareentwicklung keine perfekte Welt, in der alles


immer auf Anhieb funktioniert. Dass sich Fehler immer wieder
einschleichen, lsst sich kaum verhindern. Mit den richtigen Tools
ist es jedoch nicht mehr so schwierig, diese aufzuspren und zu
beheben.

Wenn mal etwas schiefluft:


Fehler finden, analysieren und beheben

Stellen Sie sich folgendes Szenario vor: Sie erstellen ein neues Programm.
Alles luft super, der Quelltext fliet geradezu aus Ihren Fingern auf den
Bildschirm. Sie aktivieren Ihre Kreation, ohne dass Fehlermeldungen auftreten. Sie transportieren das Programm direkt ins Produktivsystem und melden die Fertigstellung. Zwei Wochen spter kommt ein freudestrahlender
Anwender auf Sie zu und mchte sich fr Ihre tolle Arbeit bedanken: Sie
haben ein Programm fr die Ewigkeit erschaffen!.
Wem kommt so eine Geschichte bekannt vor? Wahrscheinlich keinem einzigen Entwickler. Der Alltag in der Entwicklung sieht in der Regel anders aus.
Zunchst einmal haben wir selten die Gelegenheit, auf der grnen Wiese zu
beginnen. Und selbst wenn das mglich ist, wird kaum ein Entwickler auf
die Idee kommen, ein Programm freizugeben, ohne es zumindest einmal
ausgefhrt zu haben.
In der Regel ist der Entwicklungsprozess von unzhligen Entwicklertests
begleitet, gefolgt von Integrationstests sowie anderen Qualittssicherungsmanahmen. Dabei fallen leider immer wieder Probleme und Fehler auf, die
analysiert, verstanden und behoben werden mssen. Darber hinaus kommt
es hufig vor, dass sich Anforderungen ndern und Programme umgebaut
werden mssen. Dass dies einen erheblichen Aufwand nach sich zieht, muss
ich Ihnen wahrscheinlich nicht erzhlen. In diesem Kapitel geht es daher um
Funktionen in den ABAP Development Tools for SAP NetWeaver (ADT), die
Sie bei diesen alltglichen Herausforderungen untersttzen.

161

Wenn mal etwas schiefluft: Fehler finden, analysieren und beheben

3.1

Testen

Testen ist fr viele Entwickler gleichbedeutend mit ausprobieren. Programme, Funktionsbausteine oder Klassen werden whrend der Entwicklungsphase aufgerufen und mit verschiedenen Parametern gefttert, um auszuprobieren, ob die Entwicklung sich so verhlt, wie man es vorgesehen hat.
Werden im Anschluss daran noch nderungen vorgenommen, werden nur
noch bestimmte (Test-)flle abgeklopft. Dieses Vorgehen hat jedoch wenig
mit einem strukturiertem Testen zu tun. Dazu bringt ABAP seit Jahren ein
mchtiges Tool mit: ABAP Unit. Einer der Vorteile von ABAP-Unit-Tests
besteht darin, dass sich diese Tests immer wieder ausfhren lassen. Der
grte Aufwand besteht daher einmalig beim Erstellen der Tests, die Ausfhrung der Tests ist dagegen ohne groen Aufwand mglich. So knnen Sie
eine Entwicklung immer wieder testen, wenn nderungen vorgenommen
wurden. Damit erkennen Sie schneller Seiteneffekte Ihrer Software und verbessern die Qualitt Ihrer Programme.
In diesem Abschnitt geht es weniger um das Vorgehen und die Techniken
bei Softwaretests im Allgemeinen oder Unit-Tests im Besonderen, sondern
lediglich um die Werkzeuge, die Ihnen dazu in Eclipse zur Verfgung stehen.
Vielleicht kann ich Sie sogar ermutigen, sich zum ersten Mal an Unit-Tests zu
wagen und diese zuknftig regelmig durchzufhren.

3.1.1

ABAP-Testklassen

Die Grundlage der Unit-Tests in ABAP bildet eine ABAP-Testklasse. Diese


knnen Sie als lokale Klasse in einem Include anlegen und zum Testen von
Reports, Funktionsbausteinen und wahrscheinlich die bekannteste Variante Klassen nutzen. Wir betrachten hier exemplarisch das Testen von
Klassen.
Als Grundlage fr unsere Beispiel-Unit-Tests dient uns die Klasse ZCL_PROJECT, die wir in Abschnitt 2.2.4, Klassen, entwickelt haben. Bisher besteht
diese Klasse nur aus leeren Methoden. Den Quellcode der vollstndig implementierten Klasse, die in diesem Abschnitt als Ausgangspunkt dient, knnen
Sie auf der Webseite von SAP PRESS unter www.sap-press.de/3700 im Bereich
Materialien zum Buch herunterladen.
Vielleicht ist Ihnen schon aufgefallen, dass im Editor-View fr Klassen eine
Reihe von Registerkarten unterhalb des Quelltextes angeboten wird, darunter die Registerkarte Testklassen (siehe Abbildung 3.1). Hier knnen Sie
lokale Klassen fr Ihren Unit-Test implementieren.

162

Testen

Abbildung 3.1 Registerkarte Testklassen

Es gibt in den ADT keinen Assistenten, der Sie bei der Anlage von Testklassen untersttzt, trotzdem werden Sie nicht ganz alleine gelassen. Mit den
ADT wird ein Template ausgeliefert, das Sie im View Templates unter dem
Namen testClass finden.
Fixture-Methoden
Wenn Sie bereits in der ABAP Workbench mit Testklassen gearbeitet haben, vermissen Sie vielleicht die Fixture-Methoden wie SETUP oder TEARDOWN bei der Vorlage. Sie knnen dazu einfach ein eigenes Template anlegen und sich dazu ebenfalls eine Vorlage im Download-Bereich zum Buch herunterladen.

Auf Basis dieser Vorlage erstellen Sie eine Testklasse fr unsere Klasse ZCL_
PROJECT wie folgt:
1. ffnen Sie die Klasse ZCL_PROJECT im Editor, und wechseln Sie zur Registerkarte Testklassen. Sie sollten einen leeren Editor-Bereich vorfinden, in
dem Sie Ihre Klasse implementieren knnen.
2. Fgen Sie das Template testClass ein. Am einfachsten geben Sie dazu
testClass im Editor ein und aktivieren die Code-Vervollstndigung mit
den Tasten (Strg) + Leertaste.
3. Nennen Sie die neue Testklasse LCL_PROJECT_TEST. Springen Sie mit der
Tabulatortaste von einer Variablen des Templates zur nchsten. Die Testeigenschaften HARMLESS (fr die Risikostufe) und SHORT (Ausfhrungsdauer) knnen Sie so beibehalten. Den Namen der ersten Testmethode
ndern Sie in GET_PROJECT.
4. Fgen Sie in der Private Section die Deklarationen der Methoden SETUP
und TEARDOWN hinzu, und legen Sie per Quick Fix ((Strg) + (1)) deren
Implementierungen an. Ihre Testklasse sollte nun wie in Abbildung 3.2
aussehen.
5. Aktivieren Sie Ihre nderungen mit der Tastenkombination (Strg) + (F3).
Sie haben nun das Grundgerst fr Ihre Unit-Tests angelegt. Der Zusatz FOR
TESTING in der Klassendeklaration weist diese Klasse als Testklasse aus. Jede
Methode, die Sie anlegen und ebenfalls mit FOR TESTING kennzeichnen, wird
automatisch vom ABAP Unit Framework aufgegriffen und als Testmethode
ausgefhrt. Mit der Klasse CL_ABAP_UNIT_ASSERT, die durch das Framework

163

3.1

Wenn mal etwas schiefluft: Fehler finden, analysieren und beheben

bereitgestellt wird, knnen Sie verschiedene Bedingungen prfen, Tests


gezielt fehlschlagen lassen oder den gesamten Testablauf abbrechen. Das
Template enthlt bereits einen Aufruf der Methode FAIL dieser Klasse als
Vorlage (Zeile 15 in Abbildung 3.2).

Abbildung 3.2 Neu erstellte Testklasse LCL_PROJECT_TEST

Bei den beiden Methoden SETUP und TEARDOWN handelt es sich um sogenannte Fixture-Methoden. Sie werden ebenfalls vom ABAP Unit Framework
aufgerufen. Die Methode SETUP wird jedes Mal vor und die Methode TEARDOWN jedes Mal nach dem Aufruf einer Testmethode aufgerufen. Sie dienen
dazu, jeder Testmethode einen definierten Ausgangsstatus zu liefern (den
Test-Fixture). Es gibt brigens auch ein statisches Pendant zu den beiden
Instanzmethoden: Die Klassenmethoden CLASS_SETUP und CLASS_TEARDOWN
werden jeweils zu Beginn und am Ende des Gesamttests aufgerufen.
Mit unserer einfachen Testklasse knnen Sie schon einen Unit-Test durchfhren:
1. Klicken Sie mit der rechten Maustaste in den Editor-View fr die Klasse
ZCL_PROJECT. Ob Sie sich gerade auf der Registerkarte Globale Klasse
oder im Testklassen-Include befinden, spielt dabei keine Rolle. Whlen Sie
im Kontextmen den Eintrag Run As ABAP Unit Test, oder verwenden
Sie die Tastenkombination () + (Strg) + (F10), um den ABAP-Unit-Testlauf zu starten.

164

Testen

2. Der View ABAP Unit Runner ffnet sich daraufhin und zeigt Ihnen das
Ergebnis Ihres Testlaufs an (siehe Abbildung 3.3).

Abbildung 3.3 View ABAP Unit Runner

Unser Test ist fehlgeschlagen, was mit einem sehr prominent platzierten
roten Balken angezeigt wird. Unterhalb dieses Balkens finden Sie eine Auflistung der Tests, die ausgefhrt wurden, inklusive ihrer Ausfhrungsdauer.
Auf der rechten Seite sehen Sie eine detaillierte Fehlermeldung inklusive
eines Aufrufstapels (Stack). Im Stack finden Sie alle Aufrufe (Methoden,
Funktionen etc.) bis zu der Stelle, die den Fehler verursacht hat. In unserem
Fall wurde der Fehler absichtlich innerhalb der lokalen Testmethode erzeugt,
um den Test zum Scheitern zu bringen. Den Text der angezeigten Fehlermeldung knnen Sie bei der Definition Ihrer Tests selbst mitgeben. Mit einem
Klick auf den Link im Stack gelangen Sie direkt an die Abbruchstelle im
Quellcode.
Testdaten und stabiler Testfall
Das Testen von ABAP-Quellcode ist leider nicht immer ganz einfach. Dies liegt
weniger in der Natur von ABAP als in der Natur des Testumfelds. Die meisten
ABAP-Entwicklungen basieren auf fachlichen Daten, die aus der Datenbank stammen. Oft sind diese Daten im Test sehr schwierig nachzustellen und verndern sich
auch durch den Test. (Denken Sie etwa an Materialbestnde, Kreditlimits oder
Belegstatus). Leider gibt es fr diese Problematik keine Universallsung. Sie knnen das Problem nur minimieren, indem Sie schon beim Aufbau Ihrer Implementierungen auf eine gute Testbarkeit achten, z. B. durch eine lose Kopplung der
Komponenten sowie durch eine starke Kohsion innerhalb der Modularisierungseinheiten. Knnen Sie kleinere Einheiten testen, knnen Sie die Programmteile,
die Sie gerade nicht betrachten, durch Komponenten ersetzen, die immer die gleichen Testparameter liefern, sogenannte Mock-Daten.
Nicht immer ist es mglich oder gewollt, Komponenten (hier insbesondere Klassen) auf diese Weise zu entkoppeln. In diesen Fllen ist es schwierig, den Zustand
einer Klasse so zu verndern, dass ein bestimmtes Szenario nachstellbar ist, Sie

165

3.1

Wenn mal etwas schiefluft: Fehler finden, analysieren und beheben

knnen aber Ihre Testklasse zum Freund Ihrer zu testenden Klasse erklren,
sodass die Testklasse auch Zugriff auf den privaten (PRIVATE SECTION) und
geschtzten (PROTECTED SECTION) Bereich der zu testenden Klasse erhlt. Eine
Vorlage zu einer entsprechenden Deklaration stelle ich Ihnen ebenfalls zum
Download bereit. Ziel dieses Vorgehens ist es, einen reproduzierbaren Test zu
erhalten, der bei jeder Ausfhrung gleich funktioniert. Daher mssen Sie fr einen
stabilen Testfall sorgen, die sogenannte Fixture-Methode. Sie fr jeden Test aufs
Neue bereitzustellen bzw. zu validieren ist die Aufgabe der Fixture-Methoden
(SETUP, TEARDOWN, CLASS_SETUP und CLASS-TEARDOWN).

Um unseren Testfall zu definieren, implementieren Sie die Methoden SETUP


und TEARDOWN und erstellen anschlieend den Test fr die Methode GET_PROJECT. Implementieren Sie zunchst die Methode SETUP wie in Listing 3.1.
METHOD setup.
generate_testdata( ).
create object me->mr_project
EXPORTING
if_project_id
= c_pos_project_1
EXCEPTIONS
no_project_found = 1
others
= 2
IF sy-subrc <> 0.
cl_abap_unit_assert=>abort( |Erstellen der Testklasse | &&
c_pos_project_1 && | ist fehlgeschlagen| ).
ENDIF.
ENDMETHOD.
Listing 3.1 Implementierung der Methode SETUP

Erstellen Sie als Nchstes mithilfe der Tastenkombination (Strg) + (1) eine
Methode GENERATE_TESTDATA, und implementieren Sie diese wie in Listing 3.2.
METHOD generate_testdata.
ms_testprj_pos_1 =
VALUE #( mandt = sy-mandt
project_id = c_pos_project_1
project_name = 'Testprojekt'
bgdat = '01.01.2015' plend = '31.12.2015'
erdat = sy-datum ernam = sy-uname ).
MODIFY zproject FROM ms_testprj_pos_1.
IF sy-subrc NE 0.
cl_abap_unit_assert=>abort( |Projekt | && c_pos_project_1 &&
| konnte nicht erstellt werden.| ).
ENDIF.

166

Testen

COMMIT WORK AND WAIT.


ENDMETHOD.
Listing 3.2 Implementierung der Methode GENERATE_DATA

Implementieren Sie nun die Methode TEARDOWN der Testklasse wie in Listing 3.3.
METHOD teardown.
DELETE FROM zproject
WHERE project_id = c_pos_project_1.
COMMIT WORK AND WAIT.
ENDMETHOD.
Listing 3.3 Implementierung der Methode TEARDOWN

Erstellen Sie die fehlenden Datendeklarationen per Quick Fix, oder ersetzen
Sie die Private Section der Testklasse durch den Quellcode aus Listing 3.4.
PRIVATE SECTION.
METHODS:
"[...]
generate_testdata.
DATA: ms_testprj_pos_1 TYPE zproject,
mt_issues
TYPE z_issue_t,
mr_project
TYPE REF TO zcl_project.
CONSTANTS:
c_pos_project_1
TYPE z_projekt_id VALUE '$UT-0001'.
Listing 3.4 Private Section der Testklasse LCL_PROJECT_TEST

Zu guter Letzt ersetzen Sie die Implementierung der Methode GET_PROJECT


durch den Code aus Listing 3.5.
METHOD get_project.
DATA: ls_project TYPE zproject.
ls_project = me->mr_project->get_project( ).
cl_abap_unit_assert=>assert_equals( msg =
| Datenbankprojekt unterscheidet sich vom geladenen | &&
|Projekt| exp = me->ms_testprj_pos_1 act = ls_project ).
ENDMETHOD.
Listing 3.5 Implementierung der Methode GET_PROJECT

Fhren Sie den Test nun ber die Tastenkombination () + (Strg) + (F10)
oder Run As ABAP Unit Test aus, sollte Ihnen der ABAP Unit Runner einen
grnen Balken anzeigen, um Ihnen mitzuteilen, dass alle Tests erfolgreich
durchlaufen wurden.

167

3.1

Wenn mal etwas schiefluft: Fehler finden, analysieren und beheben

Die Gltigkeit der Testdaten stellen Sie sicher, indem Sie diese selbst anlegen
und wieder aufrumen. Bei unserem einfachen Datenmodell brauchen Sie
dazu nur ein Datenbank-Update durchzufhren. Seien Sie jedoch vorsichtig,
wenn Sie mit SAP-eigenen Tabellen arbeiten. Nutzen Sie in diesen Fllen
unbedingt die vorgesehenen Funktionsbausteine und Klassen, um ausschlielich valide Daten anzulegen und nicht aus Versehen andere Datenstze zu zerstren. Verwenden Sie beim Erstellen von Testdaten mglichst
nicht die Methoden der Klasse, die Sie gerade testen mchten.
Vervollstndigen wir nun unseren Unit-Test und testen die restlichen
Methoden der Klasse ZCL_PROJECT:
1. Kopieren Sie den Quelltext der Testklasse LCL_PROJECT_TEST, der zum
Download auf der Webseite von SAP PRESS bereitsteht, und ersetzen Sie
damit den bisherigen Quelltext.
2. Aktivieren Sie Ihre nderungen, und fhren Sie den Test aus (() + (Strg)
+ (F10)).
Einzelne Testmethoden ausfhren
Sie knnen auch einzelne Methoden testweise ausfhren. Klicken Sie dazu im
View Outline mit der rechten Maustaste auf die Testmethode, die Sie ausfhren
mchten, und whlen Sie Run As ABAP Unit Test im Kontextmen. Testmethoden erkennen Sie an dem kleinen grauen T vor dem Methodennamen.

3. Der ABAP Unit Runner zeigt wieder einen roten Balken an, zudem sehen
Sie eine Liste aller ausgefhrten Tests (siehe Abbildung 3.4). Die Methode
GET_PROJECT wurde erfolgreich ausgefhrt, die restlichen Tests sind fehlgeschlagen.

Abbildung 3.4 Zweiter Lauf von LCL_PROJECT_TEST

Schauen wir uns die Testmethode CREATE_NEW_PROJECT genauer an. Die Fehlermeldung besagt, dass das Erstellungsdatum nicht korrekt gesetzt wurde.

168

Testen

Offensichtlich wurde nur der Initialwert auf die Datenbank geschrieben.


Diesen Fehler knnen Sie nun mit den Mitteln von Eclipse beheben:
1. Sie befinden sich im View ABAP Unit Runner (siehe Abbildung 3.4). Mit
einem Klick auf den Aufrufstapel Include: <ZCL_PROJECT gelangen Sie
an die Abbruchstelle in unserem Test-Code. Oberhalb dieser Stelle finden
Sie neben einigen Zeilen Test-Code den Aufruf der Methode SAVE der
Klasse ZCL_PROJECT.
2. Da es an dieser Stelle ein Problem gab, markieren Sie den Methodennamen und springen mit der Funktionstaste (F3) in die Implementierung
der Methode ab.
3. In unserem Beispielprogramm handelt es sich um einen offensichtlichen
Fehler: Fr den nderungs- und den Anlage-Fall werden jeweils die nderungsdaten des Projekts aktualisiert. Bei der Neuanlage sollten die Erstellungsdaten aber angepasst werden. Passen Sie also die folgenden Zeilen
aus dem ELSE-Zweig der Abfrage an:
me->ms_project-aedat = sy-datum.
me->ms_project-aenam = sy-uname.

Ersetzen Sie sie durch die folgenden Zeilen:


me->ms_project-erdat = sy-datum.
me->ms_project-ernam = sy-uname.

4. Aktivieren Sie Ihre nderung ((Strg) + (F3)), und fhren Sie den Test
erneut aus (() + (Strg) + (F10)).
Der Test der Methode CREATE_NEW_PROJECT verluft nun erfolgreich, wir
haben aber immer noch drei Problemflle, deren Test fehlschlgt. Um diese
Fehler zu beheben, bentigen wir weitere Werkzeuge, die ich Ihnen in
Abschnitt 3.2, Debugging, vorstelle.

3.1.2

Code Coverage

Mit Unit-Tests versucht man in der Regel, alle Flle, die auftreten knnen,
abzudecken, daher sollten alle Zweige des getesteten Quelltextes durchlaufen werden. Ein weit verbreiteter Indikator fr die Abdeckung, die ein Test
erzielt, ist die sogenannte Code Coverage (Quelltext- oder Testabdeckung).
Die Code Coverage zeigt an, welche Teile des Quellcodes bei einem Testfall
durchlaufen wurden. Auch in die ABAP-Unit-Welt hat dieser Indikator Einzug gehalten, d. h., Sie knnen zu jeder Ihrer Testklassen die Abdeckung
ermitteln lassen.

169

3.1

Wenn mal etwas schiefluft: Fehler finden, analysieren und beheben

Aussagekraft der Code Coverage


Die Code Coverage ist eine trgerische Gre. Eine geringe Quelltextabdeckung zu
erzielen ist zweifellos ein Indiz dafr, dass Ihre Tests nicht alle mglichen Flle
abdecken. Aber auch 100 % Abdeckung bedeutet noch lange nicht, dass Sie vor
Fehlern gefeit sind. Dieser Wert sagt zum einen nichts ber die Qualitt des
eigentlichen Tests aus, zum anderen ist nicht garantiert, dass auch wirklich alle
mglichen Wertekombinationen getestet wurden. Die Formel A = B C knnen
Sie tausende Male problemlos mit unterschiedlichsten Werten durchlaufen. Setzt
ein Anwender C auf 0, strzt Ihr Programm trotzdem ab.

Um die Code Coverage Ihres Unit-Tests zu ermitteln, ffnen Sie die Klasse
ZCL_PROJECTS im Editor-View und whlen Coverage As ABAP Unit Test
im Kontextmen oder drcken die Tasten () + (Strg) + (F11). Der ABAP
Unit Runner fhrt nun Ihren Unit-Test aus, und das Ergebnis wird Ihnen wie
gewohnt im View ABAP Unit Runner angezeigt. Darber hinaus wird ermittelt, welche Anweisungen whrend der Testausfhrung durchlaufen wurden. Die Ergebnisse dieser Prfung werden Ihnen im View ABAP Coverage
angezeigt. Zudem werden die Anweisungen der durchlaufenen Klasse im
Quelltext-Editor eingefrbt.
Der View ABAP Coverage stellt das Ergebnis des Coverage-Testlaufs tabellarisch dar (siehe Abbildung 3.5). Sie erkennen die getestete Klasse und darunter
angeordnet die Methoden dieser Klasse. Rechts daneben wird die prozentuale
Abdeckung der Anweisungen innerhalb der entsprechenden Methode mit
einem kleinen Balken grafisch dargestellt. Die Spalten rechts daneben geben
die absoluten Werte an, aus denen die Abdeckungsrate berechnet wurde.

Abbildung 3.5 View ABAP Coverage

Neben der Anweisungsabdeckung ermittelt das Werkzeug auch die Verzweigungsabdeckung. Sie knnen die Ansicht umstellen, indem Sie im ViewMen, das Sie ber das kleine Dreieckssymbol ( ) ffnen, den Eintrag Verzweigungsabdeckung whlen. Die Ansicht ndert sich dabei nur wenig. Der

170

Testen

Aufriss nach Methoden etwa bleibt bestehen, die Werte ndern sich jedoch
leicht. Es werden nun alle mglichen Verzweigungspunkte, wie z. B. IFoder CASE-Anweisungen, dahingehend betrachtet, ob sie durchlaufen und ob
alle mglichen Flle untersucht wurden, etwa die Flle true und false bei
einer IF-Anweisung. Diese Statistik kann, richtig ausgewertet, viel ber die
Qualitt Ihrer Tests verraten, auch wenn hier ebenso wie fr die Anweisungsabdeckung gilt, dass eine 100 %ige Abdeckung keine Garantie fr
einen vollstndigen Test gibt.
Zu guter Letzt knnen Sie im View-Men den Eintrag Prozedurabdeckung
whlen. Dabei handelt es sich um eine sehr grobe Richtgre, die angibt, ob
eine Routine berhaupt durchlaufen wurde, d. h., hier gibt es nur die Werte
100 % oder 0 %. Der Blick auf diesen Wert eignet sich gut, um sich einen ersten berblick darber zu verschaffen, welche Methoden getestet wurden.
Ergnzend zu den Daten im View ABAP Coverage zeigt Eclipse farbige Markierungen im Quelltext an. Eine grn hinterlegte Anweisung wurde vom
Test mindestens einmal durchlaufen. Eine rote Zeile blieb unberhrt. Abbildung 3.6 zeigt die Abdeckung in der Klasse ZCL_PROJECT nach unserem Testlauf.

Abbildung 3.6 Code-Coverage-Markierungen im Quelltext

Betrachten Sie anstelle der Anweisungsabdeckung die Verzweigungsabdeckung, werden nur die entsprechenden konditionalen Anweisungen markiert. Diese knnen rot, grn oder gelb sein:

171

3.1

Wenn mal etwas schiefluft: Fehler finden, analysieren und beheben

Rot bedeutet, dass diese Anweisung gar nicht durchlaufen wurde.


Gelb heit, die Anweisung wurde angesprungen, aber es wurden nicht alle
Flle durchlaufen.
Bei einer grnen Markierung wurde die Abfrage vollstndig fr alle
Zweige durchlaufen.
Wenn Sie die Markierungen stren, knnen Sie diese im View ABAP Coverage jederzeit deaktivieren. Klicken Sie dazu auf den Button Hervorhebung
Ausblenden ( ) oben rechts.
Betrachten Sie die Prozedurabdeckung unseres Testlaufs, sehen Sie sofort,
dass die Methode GET_STATUS berhaupt nicht getestet wurde. Einen Test fr
diese Methode finden Sie bereits auskommentiert in unserer Testklasse. Um
die Kommentarzeichen zu entfernen, wechseln Sie auf die Registerkarte
Testklassen, setzen den Cursor auf die Definition der Methode GET_STATUS
und drcken (Strg) + (7). Suchen Sie anschlieend die auskommentierte
Implementierung der Methode, markieren Sie diese vollstndig, und entfernen Sie mit der Tastenkombination (Strg) + (7) auch hier die Kommentarzeichen. Aktivieren Sie nun die Testklasse mit den Tasten (Strg) + (F3), und fhren Sie den Code-Coverage-Lauf mit () + (Strg) + (F11) erneut aus. Wir
haben nun eine Prozedurabdeckung von 100 % erreicht. Bei der Anweisungs- bzw. Verzweigungsabdeckung haben wir gut zwei Drittel geschafft,
und leider schlagen immer noch vier von sechs Tests fehl. Die Verzweigungsabdeckung kann uns aber schon einen Hinweis darauf geben, an welcher
Stelle wir einen Fehler gemacht haben. Auffllig viele Abfragen auf das
Ergebnis der Methode IS_PERSISTENT( ) haben nur in einen Ergebnispfad
verzweigt. In Abschnitt 3.2 kommen wir im Rahmen des Debuggings darauf
zurck.

3.1.3

ABAP Test Cockpit

Das ABAP Test Cockpit (ATC) wurde ursprnglich als internes Werkzeug bei
der SAP SE genutzt. Mit SAP NetWeaver 7.0 SP2 wurde es auch ffentlich
verfgbar gemacht. Wir konzentrieren uns in diesem Abschnitt auf die
Anwendung des ATCs als Entwickler. Trotzdem mchte ich Ihnen kurz die
generelle Funktionsweise des ATCs beschreiben.
Beim ABAP Test Cockpit handelt es sich um ein Tool zur Qualittssicherung.
Es dient dazu, Unit-Tests und statische Quelltextprfungen auszufhren.
Das ATC ist vollstndig in die ABAP Workbench und in die ABAP Development Tools integriert. Die Ergebnisse der Testlufe werden tabellarisch dar-

172

Testen

gestellt und knnen von einem Entwickler wie eine Aufgabenliste abgearbeitet werden.

Entwicklungssystem 1

Prfung bei
Transportfreigabe
Durchfhrung von Konsolidierungstests und Verteilung der Ergebnisse

Durchfhrung von statischen, Unitund Szenario-Tests durch Entwickler,


Durchfhrung periodischer Tests

Entwicklungssystem 2

Konsolidierungssystem

Prfung bei
Transportfreigabe

Abbildung 3.7 Qualittssicherungsprozess mit dem ABAP Test Cockpit (Quelle: SAP)

Das ATC ist nicht nur ein Entwickler-Tool, sondern kann Teil eines Qualittssicherungsprozesses sein, der in Abbildung 3.7 grafisch dargestellt ist. Entwickler knnen das ATC whrend der Implementierungsphase nutzen, um
Tests durchzufhren und dafr zu sorgen, dass gewisse Qualittsstandards
eingehalten werden. Beim Transport sorgen automatische Tests dafr, dass
nur Quellcode ins Konsolidierungssystem gelangt, der den Qualittsstandards Ihres Unternehmens entspricht. Im Konsolidierungssystem knnen
dann automatisierte Regressionstests durchgefhrt werden, um zu verhindern, dass nderungen an bestimmten Systemkomponenten Auswirkungen
an anderen, vielleicht unvorhersehbaren, Stellen haben (z. B. Signaturnderungen von Funktionsbausteinen). Die Ergebnisse dieser zentralen Testlufe
knnen von Qualittsmanagern analysiert, auf die Entwicklungssysteme
zurckverteilt und als aktiv markiert werden. Daraufhin knnen sich die Entwickler um die Behebung dieser Fehler kmmern.
Die zentrale Transaktion zur Administration der ATC heit ATC. Als Entwickler werden Sie sich hier allerdings eher selten aufhalten. Um Ihnen die
Arbeit mit dem ATC in Eclipse zeigen zu knnen, planen wir in dieser Transaktion zunchst einen einfachen zentralen Lauf ein. Falls Sie sich unsicher
sind, ob Sie das ATC verwenden drfen oder keine Berechtigung haben,
wenden Sie sich an Ihren Systemadministrator oder Qualittsmanager.

173

3.1

Wenn mal etwas schiefluft: Fehler finden, analysieren und beheben

1. Starten Sie Transaktion ATC im SAP GUI.


2. Whlen Sie aus der Liste der verfgbaren Aktionen den Eintrag Schedule
Runs (siehe Abbildung 3.8).

Abbildung 3.8 Verfgbare Aktionen im ABAP Test Cockpit

3. Klicken Sie auf den Button Create (siehe Abbildung 3.9), um eine Konfiguration fr den ATC-Lauf anzulegen, die festlegt, welche Tests innerhalb
eines Laufs durchgefhrt werden.

Abbildung 3.9 Namen fr die Konfiguration vergeben

4. Als Namen der Konfiguration whlen Sie z. B. Z_ISSUE und besttigen


mit dem grnen Hkchen.
5. Lassen Sie die Beschreibung im Konfigurationseditor so, wie sie ist. Die
dort angegebenen Variablen werden spter im Protokoll durch die Werte
aus dem entsprechenden Lauf ersetzt. Whlen Sie als Check Variant den
Wert PERFORMANCE_DB. Als Package whlen Sie Z_ISSUE_LIST.

174

Testen

Code Inspector
Der Begriff Check Variant kommt Ihnen vielleicht bekannt vor. Dabei handelt es
sich um die Varianten, die Sie im Code Inspector (Transaktion SCI) anlegen und
pflegen knnen und mit denen Sie den Umfang der Prfungen festlegen, die der
Code Inspector ausfhren soll. Sie knnen auch sogenannte Object Sets verwenden, die Sie fr den Code Inspector angelegt haben, um eine Menge von Objekten
zu definieren, die in einem Lauf bercksichtigt werden sollen. Dazu mssen Sie nur
die Auswahl von By Query in By Object Set ndern.

6. Speichern Sie die Konfiguration.


7. Markieren Sie Ihre Konfiguration in der Liste, und planen Sie den Lauf mit
einem Klick auf den Button Schedule ein.
8. Es ffnet sich der Dialog Schedule run series, in dem Sie alle Standardeinstellungen vornehmen und den Lauf mit (F8) ausfhren knnen.
9. Kehren Sie zum Hauptbildschirm des ATCs zurck.
Damit haben Sie einen ATC-Prflauf gestartet, was normalerweise im zentralen Qualittssicherungssystem passieren wrde. ber den Eintrag Monitor
and Control runs auf der Startseite von Transaktion ATC (siehe Abbildung
3.8) knnen Sie den Status des Laufs abfragen. Einen abgeschlossenen Lauf
erkennen Sie an dem Zielfahnen-Icon ( ) in der Monitoring-Sicht. Sie knnen das Ergebnis des Laufs aktivieren und verteilen, indem Sie den Eintrag
Manage Results auf der Startseite von Transaktion ATC whlen. Aus der so
aufgerufenen Liste whlen Sie den letzten Lauf aus und aktivieren dieses
Ergebnis mit einem Klick auf den Button Activate (siehe Abbildung 3.10).

Abbildung 3.10 Ergebnisse aktivieren

In der Ergebnisliste sehen Sie auch schon, dass es zwei Probleme mit der Prioritt 1 gibt. Wollen Sie sich die Ergebnisse im Detail ansehen, knnen Sie
mit einem Klick auf Display in die ABAP Workbench abspringen und sich
dort die entsprechenden Stellen im Quelltext ansehen. Nun geht es daran,
die gefundenen Fehler und Probleme zu analysieren und zu beseitigen, d. h.,

175

3.1

Wenn mal etwas schiefluft: Fehler finden, analysieren und beheben

Sie als Entwickler sind gefragt. Die Ergebnisse der Qualittsprfung finden
Sie in Eclipse im View ATC Result Browser. Sie sehen hier alle Systeme, die
im aktuellen Workspace eingebunden sind (siehe Abbildung 3.11). Klappen
Sie die Knoten auf, wird Ihnen eine Liste mit den durchgefhrten Testlufen
angezeigt, in der Sie ganz oben das aktive Ergebnis finden. Gehen Sie nun
wie folgt vor, um die entsprechenden Code-Stellen zu korrigieren:
1. Markieren Sie das aktive Ergebnis, damit Ihnen auf der rechten Seite des
Views die Details zum Lauf angezeigt werden.

Abbildung 3.11 ATC Result Browser

2. Wir wollen uns erst mal auf die Fehler konzentrieren. Markieren Sie den
Eintrag Simple Nested Writing DB OP.
3. Klicken Sie mit der rechten Maustaste auf den Eintrag, und whlen Sie
Show Details ( ), um eine genauere Beschreibung zu erhalten. Mit
einem Klick auf das Icon Show results overview ( ) knnen Sie jederzeit zur bersicht zurckspringen.
4. Klicken Sie doppelt auf den Eintrag Simple Nested Writing DB OP, um an
die entsprechende Stelle im Quelltext zu gelangen.
5. Die meisten Prfungen im Code Inspector wurden mit einer ausfhrlichen
Dokumentation versehen. Die Prfung, die diesen Fehler ausgelst hat,
betrifft die Verwendung eines DELETE-Statements innerhalb einer Schleife.
Das Problem lsst sich jedoch leicht beheben. Durch das ATC sollten Sie
sich bereits im Quelltext-Editor der Klasse ZCL_PROJECT befinden. Markieren Sie den Quelltextausschnitt aus Listing 3.6.
LOOP AT me->mt_issues INTO ls_issue.
DELETE FROM zissue
WHERE issue_id = ls_issue-issue_id.
ENDLOOP.
Listing 3.6 Verschachtelte Lschen-Anweisung in der Klasse ZCL_PROJECT

176

Testen

Fgen Sie stattdessen den folgenden Code-Baustein ein:


DELETE zissue FROM TABLE me->mt_issues.

6. Aktivieren Sie Ihre nderungen, wechseln Sie zum ATC Result Browser,
klicken Sie mit der rechten Maustaste auf den aktiven Eintrag, und whlen
Sie den Eintrag Recheck (Erneut prfen) im Kontextmen.
Die gleiche Prfvariante wird nun erneut durchgefhrt, allerdings erfolgt der
Lauf nur lokal, d. h., die Ergebnisse werden nicht zentral verteilt und tauchen daher auch nicht im ATC Result Browser auf. Stattdessen finden Sie das
Ergebnis der erneuten Prfung im View ATC Problems. Dieser View stellt
sozusagen Ihren persnlichen Arbeitsvorrat im ATC dar und ist hnlich aufgebaut wie die Detailsicht des ATC Result Browsers (siehe Abbildung 3.12).

Abbildung 3.12 View ATC Problems

Wie erwartet hat unsere Korrektur den Fehler behoben, und es wird nur
noch ein roter Eintrag angezeigt. Schauen wir uns diesen nun genauer an.
Springen Sie per Doppelklick auf das Ergebnis an die Fundstelle im Quelltext. Im Gegensatz zu den Ergebnissen des ATC Result Browsers werden
Ihnen die Ergebnisse des Views ATC Problems auch als Annotation auf dem
Vertical und Overview Ruler angezeigt. Wenn Sie mit der Maus ber die
Markierung fahren, erhalten Sie weitere Informationen zu diesem Fehler.
Versuchen Sie sich doch einmal daran, den Fehler zu beheben, um die Probleme mit hchster Prioritt zu beseitigen. Die Warnungen mit Prioritt 2
knnen Sie fr unser Beispiel ignorieren.
Sie mssen nicht zwangsweise darauf warten, dass Ihnen ber das ATC ein
Ergebnis zugewiesen wird, sondern knnen auch proaktiv Prfungen durchfhren. Dabei knnen Sie entweder die systemweite Standardprfvariante
verwenden oder wie folgt eine eigene Prfvariante auswhlen:

177

3.1

Wenn mal etwas schiefluft: Fehler finden, analysieren und beheben

1. Markieren Sie Ihr aktuelles ABAP-Projekt im Project Explorer.


2. Starten Sie die projektspezifischen Einstellungen mit (Alt) + () oder
alternativ im Kontextmen des Projekts ber den Eintrag Properties.
3. Navigieren Sie zur Einstellung ABAP Development ABAP Test Cockpit
(siehe Abbildung 3.13).
4. Aktivieren Sie die Option Global Code Inspector check variant.

Abbildung 3.13 Einstellungen zum ABAP Test Cockpit

5. Whlen Sie SWF_ABAP_UNIT als Prfvariante. Sie knnen bei der Eingabe die Code-Vervollstndigung ((Strg) + Leertaste) verwenden.
6. Besttigen Sie mit OK.
Die Prfvariante SWF_ABAP_UNIT sorgt dafr, dass vorhandene Unit-Tests fr
die aktuell gewhlten Objekte ausgefhrt werden. Das Ergebnis wird dann
im View ATC Problems angezeigt.
Um die Variante auszufhren, ffnen Sie die Klasse ZCL_PROJECT und drcken die Tasten () + (Strg) + (F2) oder whlen Run As ABAP Test Cockpit,
um das ATC auszufhren. Das ATC fhrt Ihre Unit-Tests aus und fgt die
Ergebnisse dem View ATC Problems hinzu. Die Fundstellen werden wieder
im Quelltext hervorgehoben.

178

Testen

Prfvarianten erstellen
Sie sind nicht darauf angewiesen, eine der Standardvarianten des Code Inspectors
zu verwenden, sondern knnen in Transaktion SCI Ihre eigenen Varianten erstellen
oder eine Variante verwenden, die von Ihrem Qualittsmanager bereitgestellt
wird. So knnen Sie ber das ATC Ihre Unit-Tests ausfhren lassen, ineffiziente
SQL-Statements abfragen und dafr sorgen, dass die Entwicklungsstandards
durchgngig eingehalten werden.

3.1.4

Laufzeitanalyse

Die Leistung einer Entwicklung zu optimieren kann je nach Komplexitt der


Anwendung ein schwieriges Unterfangen sein. Oftmals ist nicht auf den ersten Blick ersichtlich, ob die Ursache des Performance-Engpasses ein besonders ineffizientes SQL-Statement ist oder wie lange der Durchlauf einer
Schleife dauert. Um diese Code-Stellen einfacher identifizieren zu knnen,
gibt es die Laufzeitanalyse (Transaktion SAT bzw. frher SE30). Die Verwendung dieser Werkzeuge hat sich leider bisher nicht sehr gut in den Arbeitsfluss eingefgt.
Mit den ABAP Development Tools wurde die Mglichkeit, Laufzeitanalysen
(bzw. den Performance Profiler) auszufhren, direkt in die Entwicklungsumgebung integriert. Um diese Analyse fr unsere Klasse ZCL_PROJECT aufzurufen, ffnen Sie die Klasse mit einem Doppelklick im Project Explorer und
whlen im Kontextmen Profile as ABAP Unit Test. ffnen Sie anschlieend den View ABAP Traces, falls dieser nicht automatisch geffnet wurde.
Dieser View ist nach den Projekten in Ihrem Workspace untergliedert. Klappen Sie ein ABAP-Projekt auf, erhalten Sie eine Liste der letzten Performance-Traces. Klicken Sie doppelt auf einen Eintrag, um den Trace zu ffnen. Sie gelangen zu einer bersichtsseite wie in Abbildung 3.14. Hier
erhalten Sie nur die Metadaten zu Ihrem Performance-Trace-Lauf, eingeteilt
in Datenbank-, ABAP- und Systemaufrufe.
Interessanter sind die anderen Registerkarten:
In der Hit List (Trefferliste) sind einzelne Anweisungen mit der Hufigkeit
des Aufrufs sowie der Einzel- (Netto) und Gesamtausfhrungszeit (Brutto)
aufgefhrt. Mit einem Klick auf eine Anweisung springen Sie direkt in den
Quelltext.
Der Call Tree (Aufrufstruktur) zeigt nur Routinen und ihre Aufrufhierarchie an. Zudem werden auch hier die Ausfhrungszeiten ausgegeben.

179

3.1

Wenn mal etwas schiefluft: Fehler finden, analysieren und beheben

Abbildung 3.14 bersicht des Performance-Traces

Die Call Timeline (Zeitachse) (siehe Abbildung 3.15) visualisiert den


Trace grafisch. Verschiedenartige Anweisungen werden mit verschiedenen Farben gekennzeichnet und auf einer Zeitachse aufgefhrt. Ein Klick
auf eines der Felder bringt Sie an die passende Stelle im Quelltext.
Auf der Registerkarte Database Accesses (Datenbankzugriffe) werden nur
Operationen auf der Datenbank angezeigt. Dabei werden der Tabellenname, die Operation sowie die Ausfhrungshufigkeit und Ausfhrungszeit angegeben. Zudem sehen Sie hier auf den ersten Blick, ob es sich um
einen gepufferten oder einen ungepufferten Zugriff auf die Datenbank
handelte.
Performance-Traces, die Sie ber Eclipse aufzeichnen, knnen Sie auch ber
Transaktion SAT einsehen und umgekehrt.

180

Debugging

Selbstverstndlich knnen Sie einen Performance-Trace auch whrend einer


normalen Programmausfhrung oder in der ABAP-Objects-Testumgebung
aufzeichnen. Whlen Sie dann die Option Profile As ABAP Application,
oder starten Sie den Trace mit () + (Strg) + (F9).

Abbildung 3.15 Zeitachse im Performance-Trace

Performance-Trace bei Unit-Tests


Es ist einerseits sehr praktisch, Unit-Tests zur Generierung von Performance-Traces
zu nutzen, da sich so Ergebnisse ohne Benutzerinteraktionen reproduzieren lassen,
beachten Sie aber, dass der Unit-Test den Performance-Trace verflscht, da nicht
nur die getesteten Methoden mit in die Auswertung flieen. Zum einen werden
auch smtliche Aufrufe des ABAP Unit Frameworks mit bercksichtigt, zum anderen sollten Sie bedenken, dass auch die Fixture-Methoden mit in das Ergebnis einflieen, die ja vor und nach jeder Testmethode durchlaufen werden. In unserer
Beispielklasse ZCL_PROJECT machen diese Aufrufe einen Groteil der Datenbankzugriffe aus.

3.2

Debugging

Der ABAP Debugger ist fr viele ABAP-Entwicklern ber die Jahre zum
treuen Freund geworden, um Fehler zu finden, Programme zu analysieren
oder Werte von Feldern testweise zu ndern. Auch in Eclipse mssen Sie
nicht auf ihn verzichten. Da auch auerhalb der ABAP-Welt fleiig nach Feh-

181

3.2

Wenn mal etwas schiefluft: Fehler finden, analysieren und beheben

lern gesucht wird, verwundert es nicht, dass in Eclipse ein hnlich mchtiges
Tool wie in der ABAP Workbench herangewachsen ist. In diesem Abschnitt
schauen wir uns die Grundfunktionen des Eclipse Debuggers an.

3.2.1

Breakpoints setzen

Meistens beginnt der Einstieg in den Debugger ber einen Breakpoint. In


Eclipse ist es hnlich einfach wie in der ABAP Workbench, einen Breakpoint
zu setzen. Klicken Sie einfach auf den Vertical Ruler, und ein kleiner Punkt
( ) zeigt an, dass der Breakpoint gesetzt wurde.
Breakpoints in Eclipse sind standardmig fr den angemeldeten Benutzer
gesetzt. Sie knnen aber, genau wie in der ABAP Workbench, auch fr
andere Benutzer Breakpoints setzen. Dazu knnen Sie die Breakpoints in
den Einstellungen zum Projekt konfigurieren. Markieren Sie dazu das Projekt im Project Explorer, und drcken Sie die Tasten (Alt) + (). Sie finden
die Einstellungen unter ABAP Development Debug. Schalten Sie die Einstellung Debugger stops at breakpoints for requests of auf die Option
User um, und geben Sie den alternativen Benutzernamen an (siehe Abbildung 3.16).

Abbildung 3.16 Projektspezifische Debug-Einstellungen

Um einen Einstieg in die Analyse der Klasse ZCL_PROJECT zu erhalten, wollen


wir einen Breakpoint in dieser Klasse setzen:

182

Debugging

1. ffnen Sie die Klasse ZCL_PROJECT im Quelltext-Editor.


2. Navigieren Sie zur Methode GET_ISSUES.
3. Klicken Sie in der Zeile mit der IF-Anweisung auf den Vertical Ruler, um
einen Breakpoint zu setzen (siehe Abbildung 3.17).

Abbildung 3.17 Breakpoint in der Klasse ZCL_ISSUE setzen

Damit steht unserer Debug-Sitzung nichts mehr im Wege. Solange in den


Debug-Einstellungen der Debugger aktiviert ist (siehe Abbildung 3.16), hlt
die Ausfhrung der Klasse an jedem Breakpoint an. Anders, als Sie es vielleicht von Java gewohnt sind, mssen Sie eine Anwendung nicht explizit im
Debug-Modus starten, obwohl dieser Eintrag im Kontextmen auch fr
ABAP-Ressourcen noch angezeigt wird.
Voll qualifizierter Hostname
Der ADT-Debugger bentigt den Full Qualified Host Name (FQHN) Ihres Servers.
Wird dieser von Ihrem System nicht korrekt aufgelst (etwa wenn Sie den Server in
der Cloud betreiben), mssen Sie ihn Ihrem System erst bekannt machen. In
Windows-Systemen tragen Sie dazu die IP Ihres Servers, gefolgt vom FQHN, in die
Datei hosts ein. Beachten Sie dazu auch den SAP-Hinweis 1906917.

3.2.2

Debugger

Fhren Sie nun unseren Unit-Test fr die Klasse ZCL_PROJECT erneut aus
(() + (Strg) + (F10)), um mithilfe des Debuggers herauszufinden, warum einige
der Tests fehlschlagen. Eclipse macht Sie darauf aufmerksam, dass der Debugger in einer eigenen Perspektive ausgefhrt wird. Besttigen Sie dieses Pop-upFenster mit Yes (Abbildung 3.18). Sie knnen auch die Option Remember My
Decision aktivieren, um die Frage nicht erneut beantworten zu mssen.
Eclipse wechselt in die Debug-Perspektive, die standardmig in fnf ViewStapel unterteilt ist. Abbildung 3.19 zeigt das typische Layout dieser Perspektive. Unten finden Sie den Editor mit dem aktuellen Quelltext 1. Die aktuell
bearbeitete Zeile ist grn hervorgehoben und auerdem mit einem kleinen
Pfeil ( ) annotiert. Rechts daneben findet sich der Outline-View 2, der hier
der Orientierung und der Navigation im Quelltext dient. Im Debug-View 3

183

3.2

Wenn mal etwas schiefluft: Fehler finden, analysieren und beheben

wird der aktuelle Aufrufstapel angezeigt. Im Variables-View 4 knnen Sie


sich Felder und Werte aus dem aktuellen Programm anzeigen lassen und
diese auch ndern. Der View Breakpoints auf der Registerkarte dahinter 5
zeigt alle aktiven Break- und Watchpoints an. Am unteren Rand der Perspektive findet sich der View ABAP Internal Table (Debugger) 6. Hier lassen
sich interne Tabellen betrachten und anpassen.

Abbildung 3.18 Wechsel in die Debug-Perspektive

Abbildung 3.19 Perspektive Debug

184

Debugging

Die Basisfunktionen des Debuggers beinhalten die Einzelschrittausfhrung


sowie das Springen zur Anweisung Funktionen, die auch der ABAP Debugger mit Leichtigkeit meistert. Praktischerweise sind die Tastenkrzel fr
diese Grundfunktionen die gleichen wie in der ABAP Workbench.
Tabelle 3.1 zeigt die Buttons und Tastenkombinationen des Eclipse-Debuggers im berblick.
Icon

Tastenkrzel

Funktion

(F5)

Einzelschritt (Step Into)

(F6)

Weiter (Step Over)

(F7)

Herausspringen (Step Return)

(F8)

Weiter (Resume)

() + (F8)

Weiter bis Cursor (Run to Line)

() + (F12)

Zur Anweisung springen (Jump to Line)


Anwendung beenden (Terminate)
Debugger beenden (Disconnect)

Tabelle 3.1 Grundfunktionen des Eclipse-Debuggers

Beginnen wir nun mit dem Debugging unserer Beispielanwendung. Nachdem Sie den Unit-Test gestartet haben, sehen Sie sich in der Debug-Perspektive die Methode GET_ISSUES an. Prfen Sie, ob eine Liste von Issues ausgegeben wird:
1. Schauen Sie sich den Aufrufstapel im Debug-View an, und klicken Sie auf
die Methode, die GET_ISSUES aufgerufen hat. In Abbildung 3.20 heit
diese Methode ebenfalls GET_ISSUES, es handelt es sich hier jedoch um
den Aufruf aus der lokalen Testklasse.
2. Sie gelangen in die Testmethode GET_ISSUE und befinden sich im PositivTestfall. Kehren Sie ber den Aufrufstapel zurck zu Ihrem Ausgangspunkt.

185

3.2

Wenn mal etwas schiefluft: Fehler finden, analysieren und beheben

Abbildung 3.20 Aufrufstapel des GET_ISSUE-Testfalls

Fhren Sie mit (F6) einen Debug-Schritt aus. Die Ausfhrung berspringt
den positiven Zweig der IF-Anweisung, denn anscheinend liefert die
Methode IS_PERSISTENT nicht den Wert ABAP_TRUE. Das sollten wir uns
genauer ansehen.
1. Setzen Sie den Cursor auf die IF-Anweisung, und drcken Sie () + (F12),
um zurck zu dieser Anweisung zu springen.
2. Drcken Sie (F5), um in die Anweisung IS_PERSISTENT zu gelangen. Dem
Rckgabeparameter RF_PERSISTENT wird direkt das Feld MF_STORED bergeben. Fahren Sie mit der Maus ber das Feld MF_STORED, zeigt Ihnen ein
Pop-up-Fenster den Inhalt der Variablen. Er ist wie erwartet leer.
3. Setzen Sie den Wert testweise auf X. Klicken Sie dazu doppelt auf MF_
STORED, um das Feld dem View Variables (siehe Abbildung 3.19, 4) hinzuzufgen. Alternativ knnen Sie den Variablennamen auch von Hand
eingeben. Klicken Sie im View Variables doppelt auf die Spalte Value, um
den Wert ndern zu knnen. Besttigen Sie mit der ()-Taste.
4. Da wir den Wert dieser Variablen vielleicht auch in zuknftigen DebugSitzungen bentigen, fgen Sie ihn zu den Favoriten hinzu. Klicken Sie mit
der rechten Maustaste auf den Eintrag, und whlen Sie Keep as Favorite
im Kontextmen.
5. Um zu prfen, was der neue Wert gendert hat, springen Sie mit (F7) zum
Methodenaufruf von IS_PERSISTENT zurck und fahren mit (F6) mit dem
nchsten Debug-Schritt fort, der Sie in den positiven Zweig der IF-Bedingung fhrt.
6. Klicken Sie doppelt auf die Variable RT_ISSUES, die daraufhin sowohl dem
View Variables als auch dem View ABAP Internal Table hinzugefgt wird.

186

Debugging

7. Fahren Sie mit (F6) fort. Im View ABAP Internal Table sehen Sie nun den
Inhalt der Variablen RT_ISSUES. In diesem View knnen Sie ber das Kontextmen Zeilen einfgen und lschen. Zudem knnen Sie den Inhalt der
Tabelle direkt im View anpassen.
8. Beenden Sie die Debug-Sitzung mit einem Klick auf den Button Disconnect ( ). Die Ausfhrung des Programms wird dadurch nicht abgebrochen, aber es werden auch keine weiteren Breakpoints mehr angesprungen.
9. Wechseln Sie zurck in die Perspektive ABAP.
Test-Timeout
Es kann sein, dass der Test trotz der vorgenommenen nderungen fehlschlgt. Das
liegt daran, dass ABAP Unit auch die Ausfhrungszeit prft, was Sie mit der Anweisung DURATION SHORT in der Testdeklaration einstellen. Die Ausfhrung eines Tests
darf bei dieser Einstellung standardmig nicht lnger als 60 Sekunden dauern. Die
Zeiten knnen aber in Transaktion SAUNIT_CLIENT_SETUP angepasst werden.

Nun mssen wir nur noch herausfinden, warum das Persistenz-Flag MF_
STORED nicht korrekt gesetzt wird. Vermutlich findet sich das Problem beim
Laden der Struktur MS_PROJECTS von der Datenbank. Setzen Sie einen Watchpoint, um direkt an diese Stelle zu springen:
1. Wir wollen zu einem mglichst frhen Zeitpunkt in die Analyse des Quellcodes einsteigen. Setzen Sie daher einen Breakpoint in die erste Anweisung des Constructors der Klasse ZCL_PROJECT.
2. Starten Sie eine neue Debugging-Sitzung, indem Sie mit der Tastenkombination () + (Alt) + (F10) einen neuen Unit-Test ausfhren.
3. Geben Sie ME->MS_PROJECT-PROJECT_ID in dem View Variables in
der mit <Enter variable> markierten Zelle ein. (Alternativ knnen Sie
auch ME->MS_PROJECT eingeben und die Struktur aufklappen.)
4. Klicken Sie mit der rechten Maustaste auf den neuen Eintrag, und whlen
Sie Set Watchpoint ( ) aus dem Kontextmen.
5. Wechseln Sie zum View Breakpoints, und markieren Sie den neuen
Watchpoint (siehe Abbildung 3.21).
6. Wir kennen die ID unseres SET_ISSUE-Testfalls, daher knnen wir den
Watchpoint auf einen bestimmten Wert eingrenzen. Geben Sie in das Feld
Bedingung den Ausdruck = $UT-0001 ein.

187

3.2

Wenn mal etwas schiefluft: Fehler finden, analysieren und beheben

Abbildung 3.21 Bedingung zu einem Watchpoint setzen

7. Die verbliebenen Breakpoints stren uns im Moment nur. Markieren Sie


diese, und entfernen Sie sie mit der Taste (Entf). Alternativ knnen Sie die
Breakpoints auch nur deaktivieren, indem Sie das Hkchen davor entfernen.
Fhren Sie die Debug-Session mit der Taste (F8) fort. Der Debugger hlt an,
sobald der Watchpoint erreicht wird. Im Vertical Ruler zeigt Ihnen ein Symbol ( ) an, dass ein Watchpoint erreicht wurde. An dieser Stelle knnen Sie
mit der Analyse fortfahren.
1. Fgen Sie den Eintrag ME->MS_STORED im View Variables hinzu.
2. Springen Sie im Einzelschrittmodus ((F5)) durch den Constructor, und
behalten Sie dabei die Variable MF_STORED im Auge. Wenn Sie in der SETUPMethode des Tests angekommen sind, knnen Sie den Debugger beenden.
Wechseln Sie anschlieend wieder in die ABAP-Perspektive.
Die Variable MF_STORED ndert sich nicht. Wir haben festgestellt, dass zwar
ein Datensatz von der Datenbank geladen, aber das Flag nicht gesetzt wird.
Hier knnen Sie zum Glck einfach Abhilfe schaffen:
1. Springen Sie zum Constructor der Klasse ZCL_PROJECT im Quelltext-Editor.
2. Ergnzen Sie die IF-Abfrage zu SY-SUBRC um einen ELSE-Zweig, der die
Variable MF_STORED auf den Wert 'X' setzt (siehe Listing 3.7).
IF sy-subrc NE 0.
RAISE no_project_found.
ELSE.
me->mf_stored = abap_true.
ENDIF.
Listing 3.7 Setzen von MF_STORED

188

Systemmeldungen abonnieren

3. Aktivieren Sie Ihre nderungen ((Strg) + (F3)), und fhren Sie den UnitTest mit () + (Strg) + (F10) erneut aus. Falls noch Breakpoints gesetzt
sind, berspringen Sie diese mit (F8).
Unser kleiner Bugfix hat nicht nur den Testfall zu GET_ISSUE, sondern auch
die anderen Testflle, die fehlgeschlagen sind, korrigiert. Kleine Ursache,
groe Wirkung.
Anweisungs- und Ausnahme-Breakpoints
Sie knnen auch Breakpoints definieren, die bei bestimmten Anweisungen oder
bei Auftreten einer bestimmten Ausnahme aktiv werden. ffnen Sie dazu den
Breakpoint-View, und whlen Sie Add ABAP Breakpoint. Hier haben Sie nun die
Mglichkeit, Anweisungs- oder Ausnahme-Breakpoints anzulegen (siehe Abbildung 3.22). Ein Dialog fordert Sie dabei auf, die entsprechende Anweisung bzw.
Ausnahme anzugeben. Wenn Sie diese Breakpoints nicht in einer laufenden
Debug-Sitzung setzen, mssen Sie daran denken, das Hkchen bei Restrict to
running debuggers zu entfernen.

Abbildung 3.22 Anweisungs-Breakpoint setzen

3.3

Systemmeldungen abonnieren

Laufzeitfehlerknnen nervig und zeitraubend sein, geben aber Aufschluss


darber, dass in einem Programm etwas nicht so funktioniert, wie es sollte.
Die ABAP-Runtime-Error-Liste in Transaktion ST22 ist daher ebenfalls ein
wichtiges Analyse-Tool fr die tgliche Arbeit. Die ADT haben einen eigenen
Mechanismus, um solche Systemmeldungen abzufragen. Die Eintrge werden vom SAP NetWeaver AS ABAP als Feed bereitgestellt, den Sie ber den
View Feed Reader abonnieren knnen. Daraufhin erhalten Sie eine Benachrichtigung, wenn es einen neuen Eintrag gibt. Praktischerweise werden Sie
nicht nur ber Ihre eigenen Laufzeitfehler benachrichtigt, sondern der Feed
liefert alle Nachrichten. So knnen Sie z. B. berwachen, ob es im laufenden
Betrieb Ihrer Anwendungen Probleme gibt, die sonst vielleicht lange unentdeckt geblieben wren.

189

3.3

Wenn mal etwas schiefluft: Fehler finden, analysieren und beheben

Damit Sie aber nicht in der Flut von Meldungen untergehen, knnen Sie wie
folgt Filter definieren:
1. ffnen Sie den View Feed Reader ber Window Open View Other
Feed Reader (oder mit den Tasten (Strg) + (3)).
2. Klicken Sie auf den Button Add Feed ( ) im Men, und whlen Sie Add
feed from repository (siehe Abbildung 3.23).

Abbildung 3.23 Feed hinzufgen

3. Whlen Sie im folgenden Dialog auf der linken Seite Ihr aktuelles ABAPProjekt und auf der rechten Seite ABAP Runtime Errors (siehe Abbildung
3.24). Sie haben auch die Mglichkeit, Systemnachrichten oder neue Eintrge aus dem ABAP Test Cockpit abzufragen. Fahren Sie mit Next fort.

Abbildung 3.24 ABAP-Feed definieren

4. Vergeben Sie einen Titel, der im Feed Reader angezeigt werden soll.
ndern Sie die Filterauswahl auf die Variante Package, und geben Sie
Z_ISSUE_LIST, den Namen Ihres Pakets, ein (siehe Abbildung 3.25).
Schlieen Sie die Anlage des Feeds mit Finish ab.

190

Systemmeldungen abonnieren

Abbildung 3.25 Abfrageintervall und Filter definieren

Der neu abonnierte Feed wird nun im Feed Reader angezeigt (siehe Abbildung 3.26). Alle fnf Minuten wird geprft, ob es neue Eintrge gibt.

Abbildung 3.26 Laufzeitfehleranzeige im Feed Reader

Wird ein neuer Eintrag gefunden, der Ihren Filterkriterien entspricht, werden Sie benachrichtigt und sehen den neuen Eintrag im Feed Reader. Markieren Sie den Eintrag, um in der Detailsicht eine Beschreibung des Fehlers
zu erhalten. Mit einem Doppelklick auf den Eintrag gelangen Sie in Transaktion ST22 im SAP GUI.

191

3.3

Wenn mal etwas schiefluft: Fehler finden, analysieren und beheben

3.4

Refactoring

Selbst beim besten Software-Design ist es irgendwann notwendig, nderungen vorzunehmen, was auch Umbauten in Programmen und Klassen nach
sich zieht. Dabei kann es sich um das Umbenennen einer Variablen oder das
Verschieben ganzer Programmteile in eine neue Modularisierungseinheit
handeln. Dieser Prozess wird im Allgemeinen als Refactoring oder Restrukturierung bezeichnet. Das Refactoring zeichnet sich dadurch aus, dass es keine
funktionalen nderungen nach sich zieht, d. h., die restrukturierte Einheit
verhlt sich nach dem Umbau genau wie vorher. Nur die Struktur hat sich
hoffentlich zum Besseren hin gendert. Um gleichbleibende Funktionalitt
zu gewhrleisten, werden in der Regel Unit-Tests durchgefhrt. Ein Test, der
vor dem Refactoring funktioniert hat, sollte danach ebenfalls erfolgreich
durchlaufen werden. Die ADT bringen viele Funktionen mit, die Sie bei der
Restrukturierung Ihrer Programmierung untersttzen. Ich werde Ihnen die
wichtigsten in diesem Abschnitt vorstellen. Eine Liste der verfgbaren Funktionen finden Sie in der Eclipse-Hilfe (Help Help Contents) unter SAP
ABAP Development User Guide Tasks Fundamental Tasks and Tools
Applying Quick Assists Refactoring ABAP Source Code.
Die Klasse ZCL_PROJECT hat unseren Unit-Test in Abschnitt 3.1, Testen,
und Abschnitt 3.2, Debugging, erfolgreich durchlaufen, aber das Potenzial,
ein wenig umstrukturiert zu werden. Beginnen wir damit, den Deklarationsteil der Klasse aufzurumen. Bei der Entwicklung kommt es oft vor, dass Sie
eine Idee verfolgen, wieder verwerfen und etwas umbauen mssen. Auch
wenn Sie den Quelltext von nicht bentigten Stellen bereinigt haben, bleiben Deklarationen oft unbeachtet stehen. Zwar kann mit einem Verwendungsnachweis geprft werden, ob eine Variable noch verwendet wird, aber
wer will das schon machen, wenn es sich um ein Programm mit hunderten
Feldern handelt? Mithilfe der Refactoring-Funktionen von Eclipse knnen
Sie sich so einer Variablen schnell entledigen:
1. ffnen Sie die Klasse ZCL_PROJECT im Editor, springen Sie zur Private Section, und markieren Sie die komplette Datendeklaration.
2. Whlen Sie im Kontextmen Quelle Delete unused variables (selection), oder drcken Sie () + (Alt) + (U).
3. Die Variable MF_ISSUE_ID scheint nicht mehr verwendet zu werden und
wurde daher entfernt.
Aktivieren Sie Ihre nderung, und fhren Sie den Unit-Test erneut durch.
Alternativ knnen Sie auch mit der Tastenkombination (Alt) + (U) alle nicht
verwendeten Variablen im Editor entfernen lassen.

192

Refactoring

Manchmal stelle ich mitten in der Arbeit fest, dass eine Variable einen
unpassenden Namen trgt oder eine Methode nur unzureichend die Funktion beschreibt. Wurde die Variable gerade erst deklariert, mag dies kein
greres Problem sein. Wenn aber schon mehrere Tausend Zeilen Code nach
dieser Variablen stehen, sieht die Sache schon anders aus. Selbst wenn wir
mit der Suchfunktion arbeiten, knnen wir nie ganz sicher sein, alle relevanten Stellen auch in anderen Modulen gefunden und umbenannt zu haben.
Zu diesem Zweck bietet Eclipse eine intelligente Renaming-Funktion an, die
auch Verwendungen in anderen Modulen erkennt und korrekt auflst.
In der Klasse ZCL_PROJECT gibt es die Variable MF_STORED, deren Name etwas
unpassend ist. Besser wre MF_PERSISTENT, daher ndern wir diese Bezeichnung wie folgt:
1. Suchen Sie im Quelltext die Deklaration der Variablen MF_STORED. Setzen
Sie den Cursor auf den Variablennamen, und drcken Sie die Tasten () +
(Alt) + (R). Die Funktion knnen Sie alternativ auch ber Quick Fix auswhlen ((Strg) + (1)).
2. Geben Sie im Textfeld den neuen Namen MF_PERSISTENT ein, und klicken Sie auf Next.
3. Im nchsten Schritt sehen Sie die betroffenen Objekte. Sie knnen Eclipse
hier dazu zwingen, die nderung durchzufhren, selbst wenn diese nderung Syntaxfehler hervorrufen wrde. Fahren Sie mit Next fort.
4. Abschlieend wird Ihnen genau gezeigt, an welchen Stellen die nderung
greifen wird (siehe Abbildung 3.27). Allerdings haben Sie an dieser Stelle
keine Mglichkeit mehr, etwas zu ndern, sondern knnen nur noch
besttigen oder abbrechen. Besttigen Sie mit Finish.
5. Aktivieren Sie Ihre nderungen, und testen Sie das Ergebnis.
Auf die gleiche Art und Weise knnen Sie auch Methoden umbenennen.
Achten Sie darauf, keine Konflikte auszulsen, indem Sie den gleichen
Namen doppelt vergeben. Methoden anzulegen bedeutet immer einen
gewissen Aufwand, auch wenn sich dieser mit Quick Fix drastisch reduziert
hat. Wenn sich nicht unmittelbar ein Vorteil fr die Arbeit ergibt, scheut
man sich oft davor, Funktionen auszulagern. Werden diese Funktionen
(etwa eine SELECT-Anweisung) wieder bentigt, wird hufig Copy and Paste
anstelle eines sauberen Umstrukturierens verwendet, wodurch QuellcodeDoppelungen in der Entwicklung entstehen. Mit der Funktion Methode extrahieren knnen Sie ganz einfach Quellcode-Stcke aus einer Programmierung lsen und in eine eigene Methode auslagern. Um die Anlage von Parametern kmmert sich Eclipse.

193

3.4

Wenn mal etwas schiefluft: Fehler finden, analysieren und beheben

Abbildung 3.27 Details zur nderung des Feldnamens

In unserer Klasse ZCL_PROJECT haben wir auch dafr ein Beispiel. Im Constructor befindet sich eine SELECT-Anweisung. Wollen wir die Klasse von der
Datenbank aktualisieren, ist dies leider nicht mglich, sondern es muss jedes
Mal eine neue Instanz erzeugt werden. Dies knnen wir wie folgt ndern:
1. Navigieren Sie im Quelltext-Editor zur Implementierung des Constructors
der Klasse ZCL_PROJECT.
2. Markieren Sie den vollstndigen Inhalt des Constructors (siehe Listing
3.8), und whlen Sie im Kontextmen Quelle Extract Method, oder
drcken Sie () + (Alt) + (M).
IF if_project_id IS NOT INITIAL.
SELECT SINGLE * FROM zproject INTO me->ms_project
WHERE project_id = if_project_id
AND
loevm
= abap_false.
IF sy-subrc NE 0.
RAISE no_project_found.
ELSE.
me->mf_persistent = abap_true.
ENDIF.
ENDIF.
Listing 3.8 Inhalt des Constructors der Klasse ZCL_PROJECT

194

Refactoring

3. Es erscheint ein Dialog zur Anlage der Methode (siehe Abbildung 3.28).
Geben Sie hier REFRESH als Namen fr die Methode ein. Beenden Sie
die Anlage mit Finish. Die folgenden Schritte verlaufen analog zum
Rename-Assistenten und zeigen lediglich die nderungen.

Abbildung 3.28 Methode extrahieren

4. Aktivieren Sie Ihre nderungen, und testen Sie erneut.


Die extrahierte Methode wurde durch die Markierung der Option Privat in
der Private Section der Klasse angelegt. Mchten Sie die Sichtbarkeit der
Methode nachtrglich noch ndern, setzen Sie den Cursor im Quelltext-Editor auf die Methode REFRESH, drcken Sie die Tasten (Strg) + (1), und whlen
Sie die Quick-Fix-Option Make refresh public. Aktivieren Sie Ihre nderungen, und fhren Sie den Unit-Test erneut durch.
Sichtbarkeit ndern
Beachten Sie, dass Sie mit der Sichtbarkeit auch die Funktionalitt Ihres Objekts
ndern knnen. Verstecken Sie eine zuvor ffentliche Methode, kann dies dazu
fhren, dass Ihr Programm nicht mehr lauffhig ist.

Methoden anzulegen ist ein guter Weg, um die Wiederverwendbarkeit des


Codes zu verbessern. Noch besser ist es, gleichartige Funktionen in einer eige-

195

3.4

Wenn mal etwas schiefluft: Fehler finden, analysieren und beheben

nen Klasse oder einem Interface zu bndeln. Sehen wir uns die Klassen ZCL_
ISSUE und ZCL_PROJECT einmal genauer an. Wie in dem UML-Diagramm in
Abbildung 3.29 zu erkennen ist, weisen beide die Methoden SAVE, DELETE
und IS_PERSISTENT auf. Alle drei Methoden haben auch jeweils die gleiche
Bedeutung. Daher knnen wir diese Methoden in einem Interface zusammenfassen.
ZCL_ISSUE
ZCL_PROJECT

-ms_issue: ZISSUE
-is_persistent: boolean
+mr_comments_cl: zcl_comment
+save()
+is_persistent(): boolean
+delete()
+set_issue(is_issue: zissue)
+get_issue(): zissue
+get_comments(): zcl_comment
+add_comment(if_comment: string, if_autor: name)
+get_project(): zcl_project

-ms_project: zproject
-is_persistent: boolean

0..*

+save()
+is_persistent(): boolean
+delete()
+set_project(is_project: zproject)
+get_project(): zproject
+get_issues(): zissue_t
+get_status(ef_open_items: int4, ef_finished_items: int4, ef_percentage: float)

Abbildung 3.29 Struktur der Klassen ZCL_ISSUE und ZCL_PROJECT

Das Ziel-Design knnte etwa wie in Abbildung 3.30 aussehen. Die Funktionen, die mit der Handhabung der persistenten Daten zu tun haben, sind nun
in einem Interface zusammengefasst. Man knnte auch die Methode REFRESH
noch in das Interface ziehen. Da diese aber noch auf einer objektspezifischen
ID als Importing-Parameter beruht, wrden wir dazu ein paar Umbauten
mehr bentigen.
Wenn Sie mgen, knnen Sie sich ja im Anschluss an die Lektre dieses
Kapitels daran versuchen. Eine mgliche Lsung finden Sie im DownloadBereich zu diesem Buch.

ZIF_PERSISTENT_ITEM

+save()
+is_persistent()
+delete()

ZCL_ISSUE

-ms_issue: ZISSUE
-is_persistent: boolean
+mr_comments_cl: zcl_comment
+set_issue(is_issue: zissue)
+get_issue(): zissue
+get_comments(): zcl_comment
+add_comment(if_comment: string, if_autor: name)
+get_project(): zcl_project

ZCL_PROJECT

0..*

-ms_project: zproject
-is_persistent: boolean
+set_project(is_project: zproject)
+get_project(): zproject
+get_issues(): zissue_t
+get_status(ef_open_items: int4, ef_finished_items: int4, ef_percentage: float)

Abbildung 3.30 Interface ZIF_PERSISTENT_ITEM

196

Refactoring

Legen Sie das Interface wie folgt an:


1. Erweitern Sie die Public Section der Klasse ZCL_PROJECT um das Interface
ZIF_PERSISTENT_ITEM aus Listing 3.9.
PUBLIC SECTION.
INTERFACES zif_persistent_item.
Listing 3.9 Interface ZIF_PERSISTENT_ITEM in der Klasse ZCL_PROJECT

2. Das Interface ist noch nicht vorhanden. Legen Sie es via Quick Fix an (Create global Interface ZIF_PERSISTENT_ITEM).
3. Vergeben Sie im Anlage-Dialog eine Beschreibung, und besttigen Sie die
Anlage. Sie landen im Quelltext des angelegten Interfaces.
4. Aktivieren Sie das neue Interface, und wechseln Sie zurck zur Klasse ZCL_
PROJECT. Aktivieren Sie auch diese Klasse, da das neue Interface sonst nicht
korrekt erkannt wird.
5. Verschieben Sie die Methode SAVE() in das Interface. Setzen Sie dazu den
Cursor auf die Methodendeklaration, und aktivieren Sie Quick Fix. Whlen Sie den Vorschlag Pull-Up save to interface zif_persistent_item.
6. Verfahren Sie genauso mit den Methoden DELETE() und IS_PERSISTENT().
7. Aktivieren Sie alle nderungen (() + (Strg) + (F3)), und testen Sie erneut.
Eclipse hat nicht nur die Methoden zusammen mit der Dokumentation in
das neue Interface verschoben, sondern auch ein Alias fr die Methodennamen angelegt, d. h., die Methoden knnen wie bisher direkt ber die
Klasse angesprochen werden und nicht nur ber den Interface-Namen. Um
dasselbe Interface auch in die Klasse ZCL_ISSUE einzufgen, mssen wir
allerdings das gute alte Copy and Paste bemhen:
1. ffnen Sie die Klasse ZCL_ISSUE im Quelltext-Editor, und fgen Sie in der
Public Section die Interface-Implementierung aus Listing 3.10 hinzu.
PUBLIC SECTION.
INTERFACES zif_persistent_item.
ALIASES: save FOR zif_persistent_item~save,
delete FOR zif_persistent_item~delete,
is_persistent FOR zif_persistent_item~is_
persistent.
Listing 3.10 Interface ZIF_PERSISTENT_ITEM in der Klasse ZCL_ISSUE

2. Lschen Sie die Deklarationen der Methoden SAVE(), IS_PERSISTENT()


und ZCL_ISSUE. Die Methode DELETE() ist in der Klasse ZCL_ISSUE noch

197

3.4

Wenn mal etwas schiefluft: Fehler finden, analysieren und beheben

nicht implementiert gewesen, daher wird Ihnen eine Warnung angezeigt.


Klicken Sie auf die Warnung, und whlen Sie Add implementation for
delete.
3. Fgen Sie me->ms_issue-loevm = abap_true. als Implementierung der
Methode DELETE() ein, und aktivieren Sie Ihre nderungen.
Mit diesem geringen manuellen Aufwand haben Sie das Interface auch in der
Klasse ZCL_ISSUE implementiert und knnen die Basismethoden SAVE,
DELETE und IS_PERSISTENT generisch ber das Interface aufrufen. Insgesamt
haben wir damit das Design unserer Anwendung deutlich verbessert, ohne
die Funktionalitt zu ndern. Langfristig sorgen solche Refactoring-Lufe
dafr, dass die Software wartbar und leicht erweiterbar bleibt. Ich hoffe, ich
konnte Ihre Hemmschwelle fr das Refactoring durch die Vorstellung der
Mglichkeiten in den ADT deutlich reduzieren.
Testgetriebene Entwicklung
Bei der testgetriebenen Entwicklung (Test-driven Development) wird das Testen an
den Beginn des Entwicklungszyklus gestellt. Nach der Anforderungsanalyse wird
zunchst berlegt, wie die Anforderungen mit einem Test verifiziert werden knnen, anschlieend wird dieser Test implementiert. Die erste Ausfhrung des Tests
schlgt zwangslufig fehl. Der Entwickler sorgt nun dafr, dass gerade so viel Code
geschrieben wird, dass der Test erfolgreich durchlaufen werden kann. Da der Test
ja eine formale Reprsentation der ursprnglichen Anforderung war, kann man
diese Anforderung bei erfolgreichem Durchlaufen des Tests als erfllt ansehen.
Anschlieend wird der erstellte Code mittels Refactoring so umgebaut, dass CodeDopplungen und schlecht lesbarer Code entfernt werden und Wildwuchs vermieden wird. Danach wird die nchste Anforderung analysiert, als Test implementiert
und so fort.
Mangels Refactoring-Mglichkeiten in der ABAP Workbench war die testgetriebene Entwicklung in ABAP wenig verbreitet. Mit den neuen Mglichkeiten der
ADT eignet sich ABAP aber hnlich gut wie Java oder C# zur Anwendung dieses
Ansatzes. Wenn Sie sich selbst an dieser Entwicklungsmethode versuchen mchten, knnen Sie die Klasse ZCL_COMMENT nutzen, um ein wenig auszuprobieren.
Einen Unit-Test und eine Beispiellsung finden Sie im Download-Bereich dieses
Buches.

198

Web Dynpro ABAP ist eine der Schlssel-UI-Technologien von SAP.


Auch in den ABAP Development Tools ist die Web-Dynpro-Entwicklung mglich.

Web Dynpro ABAP in Eclipse

Web Dynpro ABAP gehrt neben dem SAP UI Development Toolkit for HTML5
(SAPUI5) zu den Schlssel-Oberflchentechnologien von SAP. Neue Anwendungen sollten daher in Web Dynpro ABAP oder SAPUI5 umgesetzt werden.
Fr die SAPUI5-Entwicklung steht ein eigenes Toolset in der Eclipse-Entwicklungsumgebung zur Verfgung, das Sie ber die Seite https://tools.hana.
ondemand.com/#sapui5 beziehen knnen. Die Entwicklung mit Web Dynpro
ABAP ist hingegen in den ABAP Development Tools for SAP NetWeaver (ADT)
mglich und Thema dieses Kapitels.
Web Dynpro Java
Verwechseln Sie die Entwicklungsumgebung fr Web Dynpro ABAP in den ADT
nicht mit den Werkzeugen fr Web Dynpro Java, die im SAP NetWeaver Developer
Studio verfgbar sind. Bei den Web-Dynpro-ABAP-Werkzeugen handelt es sich
um ein neues Toolset, d. h., Sie bentigen kein Developer Studio.

Zur Einfhrung in die Web-Dynpro-Entwicklung in Eclipse entwerfen wir in


diesem Kapitel eine Applikation, um unsere in Kapitel 2, Funktionen der
ABAP Development Tools, eingefhrte Aufgabenliste nach Projekten strukturiert auszugeben. Wir sehen uns auerdem an, wie Sie eine Anwendung
auf Basis des Floorplan Managers anlegen knnen. Ziel dieses Kapitels ist es,
Ihnen die Entwicklungsumgebung vorzustellen, Kenntnisse in Web Dynpro
ABAP und des Floorplan Managers werden daher vorausgesetzt.

4.1

Controller-Programmierung

Um zu beginnen, mssen wir zunchst eine neue Web-Dynpro-ABAP-Komponente anlegen. ffnen Sie dazu die ABAP Development Tools in Eclipse,

199

Web Dynpro ABAP in Eclipse

und whlen Sie Ihr aktuelles ABAP-Projekt. Sie bentigen kein neues ABAPProjekt, um in Web Dynpro zu entwickeln. Gehen Sie dann wie folgt vor:
1. Markieren Sie das Paket Z_ISSUE_LIST im Project Explorer.
2. Starten Sie den Anlage-Assistenten im Kontextmen ber New Other
ABAP Repository Object oder mithilfe der Tastenkombination (Strg) + (N).
3. Whlen Sie aus der Liste der verfgbaren Assistenten ABAP Web Dynpro Component, und besttigen Sie mit Next (siehe Abbildung 4.1).

Abbildung 4.1 Assistenten zum Anlegen einer Web-Dynpro-Komponente aufrufen

4. Geben Sie im folgenden Dialog New Web Dynpro Component ZWD_C_


ISSUE_LIST als Namen fr die Komponente ein (siehe Abbildung 4.2).
5. Genau wie in der ABAP Workbench knnen Sie sich direkt einen initialen
Window- und View-Controller anlegen lassen. Markieren Sie dazu die
Option Create Window, und tragen Sie W_ISSUE_LIST als Namen fr
das Window ein. Markieren Sie auch die Option Create View. Als Namen
fr den View whlen Sie V_MAIN. Fahren Sie mit Next fort.
6. Whlen Sie den Transportauftrag, den Sie fr unser Demoszenario angelegt haben, und besttigen Sie die Anlage der Komponente mit Finish.

200

Controller-Programmierung

Abbildung 4.2 Web-Dynpro-Komponente anlegen

7. Der Assistent erstellt die neue Komponente und ffnet diese in einem
SAP-GUI-Bildschirm. Aktivieren Sie hier Ihre Komponente und alle automatisch angelegten Controller mit der Tastenkombination (Strg) + (F3),
und schlieen Sie die Registerkarte.
Das Ergebnis sehen Sie in Abbildung 4.3. Unterhalb des Namens der WebDynpro-Komponente werden die einzelnen Bestandteile aufgelistet hnlich
wie in der ABAP Workbench.

Abbildung 4.3 Struktur der neuen Web-Dynpro-Komponente

201

4.1

Web Dynpro ABAP in Eclipse

Die Eclipse-Editoren zur Web-Dynpro-Bearbeitung sind in mehrere Registerkarten aufgeteilt hnlich den Registerkarten in der ABAP Workbench. Der
Editor fr Komponenten-Controller unterteilt sich in die Bereiche Overview, Context, Attributes, Methods, Events und Implementation. Die
Register zur Navigation, die in Abbildung 4.4 dargestellt sind, befinden sich
unterhalb des Editor-Fensters. Zustzliche Informationen und Einstellungen
zu den Elementen eines Controllers sind im View Properties zu finden.

Abbildung 4.4 Registerkarten im Editor fr Komponenten-Controller

4.1.1

Kontext-Editor

Als Nchstes mssen wir den Kontext unserer Applikation anlegen. Da wir
unsere Aufgabenliste (Issue List) als Baum darstellen mchten, sollte sich
diese Struktur im Kontext wiederfinden:
1. ffnen Sie den Komponenten-Controller der Komponente ZWD_C_ISSUE_
LIST. Die Registerkarte Context ist standardmig zuerst geffnet.
2. Klicken Sie mit der rechten Maustaste auf den Wurzelknoten Context,
und whlen Sie Add Node im Kontextmen (siehe Abbildung 4.5), um
einen neuen Knoten anzulegen. Alternativ knnen Sie das Tastenkrzel
(Alt) + (O) verwenden.

Abbildung 4.5 Kontextknoten einfgen

3. Markieren Sie den neuen Knoten, und drcken Sie (F2), um ihn umzubenennen (Alternativ knnen Sie den Namen auch im Properties-View
ndern.). Nennen Sie den neuen Knoten PROJECTS.

202

Controller-Programmierung

4. ffnen Sie den Properties-View mit einem Doppelklick auf den Kontextknoten. ndern Sie die Cardinality (Kardinalitt) des Knotens PROJECTS
auf 0..n.

Abbildung 4.6 Eigenschaften des Knotens PROJECTS

5. Klicken Sie mit der rechten Maustaste auf den Knoten PROJECTS, und
fgen Sie ber die Funktion Add Attribute im Kontextmen (oder per
(Alt) + (T)) ein neues Attribut ein.
6. Drcken Sie die Funktionstaste (F2), und benennen Sie das neue Attribut
in PROJECT_ID um.
7. ndern Sie den Typ des Attributs im Properties-View in Z_PROJECT_
ID. Sie knnen in diesem Feld brigens auch die Code-Vervollstndigung verwenden oder ber den Button mit den Pnktchen ( ) in eine
Suchmaske springen.
8. Legen Sie auf die gleiche Art und Weise ein weiteres Element PROJECT_
NAME vom Typ Z_PROJECT_NAME an.
9. Markieren Sie den PROJECTS-Knoten, und fgen Sie mit der Tastenkombination (Alt) + (O) einen neuen Unterknoten ein. Nennen Sie ihn
ISSUES, und vergeben Sie die Kardinalitt 0..n.
10. Markieren Sie die Eigenschaft Supply Function im Properties-View,
und klicken Sie auf den Button Create (siehe Abbildung 4.7), um eine
neue Methode anzulegen.
11. Nennen Sie die Methode SUPPLY_ISSUES, und vergeben Sie eine
Beschreibung.
Fgen Sie die drei Attribute, die Sie in Abbildung 4.8 sehen, zu Ihrem neuen
ISSUES-Knoten hinzu.

203

4.1

Web Dynpro ABAP in Eclipse

Abbildung 4.7 Eigenschaften des Knotens ISSUES

Abbildung 4.8 Fertige Struktur des Kontextes PROJECTS

Damit haben Sie den Kontext fr die Navigation in der Aufgabenliste angelegt. Jetzt bentigen wir noch einen Speicher fr die Detailanzeige. Die Kontextstruktur dazu soll jedoch nicht manuell, sondern mit Bezug auf ein
ABAP-Dictionary-Objekt angelegt werden. Wir beschrnken uns in diesem
Beispiel auf die Anzeige von Projekten. Sie knnen die Lsung aber nach
dem gleichen Prinzip um die Anzeige von Issues erweitern.
1. Fgen Sie dem Kontext mit der Tastenkombination (Alt) + (O) einen neuen Knoten hinzu, den Sie ber die Funktionstaste (F2) in PROJECT umbenennen.
2. Im Properties-View geben Sie ZPROJECT als Dictionary Structure an.
Auch dabei knnen Sie wieder mit der Code-Vervollstndigung ((Strg) +
Leertaste) arbeiten. Klicken Sie in derselbe Zeile auf den Button Derive
(siehe Abbildung 4.9).
3. Ihnen wird ein Dialogfenster mit den Elementen der Struktur angezeigt.
Belassen Sie es bei der Auswahl, und besttigen Sie den Dialog mit Finish.

204

Controller-Programmierung

Abbildung 4.9 Kontext mit Bezug auf Dictionary-Objekt anlegen

4. Fgen Sie unterhalb des Knotens PROJECT noch einen Knoten PROJECT_
ISSUES hinzu. Vergeben Sie die Kardinalitt 0..n, und binden Sie ihn an
die Dictionary-Struktur ZISSUE. bernehmen Sie mit dem Button Derive
alle Elemente aus der Struktur wieder in den Kontextknoten.
Der neue Kontext-Editor hnelt zwar sehr dem aus der ABAP Workbench,
allerdings wurden viele Kleinigkeiten gendert, die Ihre Arbeit sehr erleichtern knnen. So sind die wichtigsten Funktionen ber Tastenkrzel zu erreichen und stehen zudem im Kontextmen sowie ber Funktionstasten zur
Verfgung. Die wichtigsten Informationen zu Ihren Kontextknoten finden
Sie nun direkt im Kontextbaum. Neben dem Namen werden auch die Kardinalitt sowie der Knoten- bzw. Attributstyp angezeigt. Die Einstellungen
knnen Sie, wie bereits gesehen, im Properties-View ndern. Die Anzeige
knnen Sie durch ein Suchfeld oberhalb der Baumdarstellung filtern.
Sie knnen auch einen Verwendungsnachweis fr Kontextelemente anfordern
(() + (Strg) + (G)). Bei allen Controllern haben Sie auerdem die Mglichkeit, Methoden, Attribute und Kontextelemente zu verlinken, wozu Ihnen
ADT-Links oder HTTP-Links zur Verfgung sehen.

205

4.1

Web Dynpro ABAP in Eclipse

Design der Beispielkomponente


Das Design unserer Beispielkomponente wurde bewusst einfach ausgelegt und
sieht nur eine Komponente vor. Bei einer produktiven Anwendung knnte man
die Detailsicht in eine oder mehrere Komponenten verlagern und den Kontext
anders aufbauen.

4.1.2

Attribute

Als Nchstes wollen wir ein Attribut anlegen, um eine Instanz unserer Klasse
ZCL_ISSUE abzulegen. Diese Instanz dient uns spter zur Bearbeitung der
angezeigten Aufgabe. Attribute pflegen Sie wie folgt:
1. Wechseln Sie im Editor des Komponenten-Controllers auf die Registerkarte Attributes.
2. Klicken Sie auf die Schaltflche Add Attribute, oder drcken Sie (Alt) +
(T).
3. Geben Sie MR_PROJECT als Attributsnamen im folgenden Dialogfenster
ein. Whlen Sie zudem eine passende Beschreibung, und besttigen Sie
mit Finish.
4. Geben Sie im Feld Type bei den Attribute Details ZCL_PROJECT ein.
Markieren Sie zudem das Ankreuzfeld Ref To, um zu kennzeichnen, dass
es sich um eine Referenzvariable handelt. Sie knnen im Feld Type auch
mit der Tastenkombination (Strg) + Leertaste arbeiten oder ber den Button Browse einen Suchdialog ffnen.
Attribute werden in Eclipse in einer filterbaren Liste dargestellt, in der Sie
genau wie bei Kontextknoten schon die Typisierung des Attributs erkennen.
Die Eigenschaften zu einem Attribut finden Sie rechts neben der Listendarstellung (nicht im Properties-View). Ist der Text Type:* blau hinterlegt (siehe
Abbildung 4.10), wird damit eine Verlinkung angedeutet, ber die Sie sich
die Definition des angegebenen Typs anzeigen lassen knnen. Diese Navigationsform finden Sie in einigen Web-Dynpro-Editoren in Eclipse wieder. Leider ist es derzeit nicht mglich, Attribute umzubenennen. Sie knnen sie
lediglich kopieren ((Strg) + (C)) und unter einem neuen Namen wieder einfgen ((Strg) + (V)).

4.1.3

Methoden

Nun wollen wir unserer Komponente ein wenig Intelligenz einhauchen und
dazu Methoden anlegen. Die Controller-Programmierung unterscheidet sich

206

Controller-Programmierung

in diesem Punkt von der ABAP-Objects-Entwicklung, da die Definition von


Methoden nicht im Quelltext, sondern in einer eigenen Maske erfolgt. Die
Implementierung luft aber sehr hnlich ab.
1. Wechseln Sie auf die Registerkarte Methods im Komponenten-Controller.
2. Klicken Sie auf den Button Add Method. Alternativ knnen Sie auch mit
den Tasten (Alt) + (O) eine neue Methode anlegen.
3. Geben Sie im Dialogfenster New Method FILL_PROJECTS_NODE als
Namen sowie eine beliebige Beschreibung ein.
4. Damit haben Sie schon Ihre zweite Web-Dynpro-Methode in Eclipse
erstellt. Die erste Methode war die Supply-Methode, die Sie beim Erstellen des Kontextes angelegt haben. Diese finden Sie auch in der Liste der
Methoden. Ein Icon
symbolisiert, dass es sich hierbei um eine SupplyMethode handelt..
Als Nchstes bentigen wir eine Methode, mit der ein Projekt zur Anzeige
im Detailbild ausgewhlt wird.
1. Legen Sie eine weitere Methode mit dem Namen SELECT_PROJECT an.
2. Klicken Sie auf den Button Add Parameter (alternativ (Alt) + (T)). Ein
neuer Parameter wird zu Ihrer Methode hinzugefgt und als Element
unterhalb des Methodennamens dargestellt. Auf der rechten Seite knnen
Sie die Eigenschaften des Parameters ndern.
3. Geben Sie IF_PROJECT_ID als Namen dieses Parameters ein. Als Type
tragen Sie Z_PROJECT_ID ein (siehe Abbildung 4.10). Nachdem Sie die
Methoden angelegt haben, sollte die bersicht in Ihrem Editor etwa wie in
Abbildung 4.11 aussehen.

Abbildung 4.10 Eigenschaften eines Methodenparameters

207

4.1

Web Dynpro ABAP in Eclipse

Abbildung 4.11 bersicht und Details im Methoden-Editor

Auf hnliche Art und Weise knnen Sie einer Methode ber die Tastenkombination (Alt) + (X) eine Ausnahme hinzufgen. Wie Sie in Abbildung 4.11
sehen knnen, knnen Sie in dieser Sicht auch eine neue Supply-Methode
(Add Supply Function) oder einen neuen Ereignisbehandler (Add Event
Handler) anlegen.
Als Nchstes implementieren wir unsere Methoden. Markieren Sie dazu die
Methode FILL_PROJECTS_NODE in der bersichtsliste. Anschlieend klicken
Sie auf der rechten Seite auf den Bezeichner Name*. Der Link bringt Sie
direkt in den Quelltext-Editor Ihres Controllers zur Implementierung der
Methode.
Der Quelltext-Editor funktioniert sehr hnlich wie der Editor anderer Entwicklungsobjekte in den ADT, mit dem Unterschied, dass Sie nicht uneingeschrnkt ndern drfen. Beim Code von Web-Dynpro-Controllern handelt es
sich grtenteils um generierten Code, d. h., ein Grundgerst wird Ihnen
durch das Framework bereits vorgegeben und sollte nicht gendert werden.
Sie haben lediglich die Mglichkeit, an geeigneten Stellen eignen Quelltext
einzubringen. Daher sind groe Teile des Web-Dynpro-Quelltextes grau hinterlegt und fr nderungen gesperrt. Methodenimplementierungen sind
hingegen nderbar. Die Editor-Sicht fr den Komponenten-Controller ZWD_
C_ISSUE_LIST sehen Sie in Abbildung 4.12.
Zur Navigation innerhalb des Quelltextes steht Ihnen wieder der OutlineView zur Verfgung (siehe Abbildung 4.13 und Abschnitt 2.2.4, Klassen).
Sie sehen hier den Inhalt des generierten Includes zum aktuellen Controller.
Daher werden Ihnen auch die beiden Interfaces IG_COMPONENTCONTROLLER
und IF_COMPONENTCONTROLLER angezeigt.

208

Controller-Programmierung

Abbildung 4.12 Der Quelltext-Editor zum Komponenten-Controller ZWD_C_ISSUE_LIST

Abbildung 4.13 View Outline zum Komponenten-Controller ZWD_C_ISSUE_LIST

Fr die Entwicklung in Web Dynpro stehen Ihnen spezielle Code-Templates


zur Verfgung. Daneben knnen Sie eigene Web-Dynpro-Templates erstellen. Im Anlage-Dialog finden Sie eine Auswahlbox, um ein Template fr
Web Dynpro zu kennzeichnen. Auch auf den Web Dynpro Code Wizard zur
Erzeugung von Kontextzugriffen mssen Sie nicht verzichten. Dieses aus der
ABAP Workbench bekannte Tool versteckt sich nun hinter der Code-Vervollstndigung ((Strg) + Leertaste).

209

4.1

Web Dynpro ABAP in Eclipse

Implementieren wir nun zunchst die Methode FILL_PROJECTS_NODE unserer


Web-Dynpro-Komponente:
1. Wechseln Sie zur Registerkarte Implementation und zur Methode FILL_
PROJECTS_NODE. (Entweder springen Sie von der Registerkarte Methods ab
oder vom Outline-View.)
2. Fgen Sie nach der folgenden Code-Zeile eine Leerzeile ein:
METHOD fill_projects_node. "EC NEEDED

3. Verwenden Sie die Tastenkombination (Strg) + Leertaste, um die CodeVervollstndigung aufzurufen.


4. Die Code-Vervollstndigung wird wie in Abbildung 4.14 angezeigt. Whlen Sie die Option contextWrite aus, um eine Set-Operation auf den Kontext auszufhren.

Abbildung 4.14 Kontext lesen und schreiben

5. Im nchsten Schritt knnen Sie, wie in Abbildung 4.15 gezeigt, einen Kontextknoten whlen. Ob Sie die statischen Attribute des Elements oder die
ganze Tabelle auslesen mchten, steuern Sie ber die Auswahlbox Code
generated as table operations.
Whlen Sie fr unser Beispiel den Knoten PROJECTS aus, und besttigen
Sie mit OK.
6. Nun mssen wir selbst ttig werden und den generierten Code ein wenig
anpassen. Die Methode ZCL_PROJECTS=>LIST_PROJECTS liefert eine Tabelle
mit allen auf der Datenbank gespeicherten Projekten. Holen Sie sich die
aktuelle Projektliste und speichern sie diese in eine Variable vom Typ
Z_PROJECT_T.
7. Iterieren Sie mit einem LOOP ber die Projektliste. bertragen Sie die Eintrge aus der Projektliste in die Kontextstruktur (Typ WD_THIS->ELEMENT_
PROJECTS), und fllen Sie die Tabelle fr den Knoten PROJECTS mit diesen
Eintrgen. Ein entsprechendes Feld LT_PROJECTS wurde schon vom
Wizard angelegt. Verschieben Sie abschlieend die Methode zum Binden

210

Controller-Programmierung

der Tabelle an den Kontext ans Ende der Methode FILL_PROJECTS_NODE.


Die Methode sollte daraufhin hnlich wie in Listing 4.1 aussehen.

Abbildung 4.15 Auswahl eines Kontextknotens

Knoten mit Dictionary-Bezug


Wenn Sie einen Kontextknoten mit Bezug zu einem ABAP-Dictionary-Objekt anlegen, knnen Sie wie gewohnt Strukturen bzw. Tabellen dieses Typs direkt an den
Knoten binden. In unserem Beispiel ist das nicht mglich, da wir die Knoten
manuell aufgebaut haben und die Struktur nicht mit der auf der Datenbank kompatibel ist.
METHOD fill_projects_node.
DATA: lo_nd_projects TYPE
lt_projects
TYPE
ls_project
TYPE
lt_project_list TYPE

REF TO if_wd_context_node,
wd_this->elements_projects,
wd_this->element_projects,
z_project_t.

lo_nd_projects = wd_context->get_child_node(
name = wd_this->wdctx_projects ).
lt_project_list = zcl_project=>list_projects( ).
LOOP AT lt_project_list INTO DATA(ls_project_list).
ls_project-project_id = ls_project_list-project_id.
ls_project-project_name = ls_project_list-project_name.
APPEND ls_project TO lt_projects.

211

4.1

Web Dynpro ABAP in Eclipse

ENDLOOP.
lo_nd_projects->bind_table( new_items = lt_projects
set_initial_elements = abap_true ).
ENDMETHOD.
Listing 4.1 Implementierung der Methode FILL_PROJECTS_NODE

Nun kmmern wir uns um die Implementierung der verbleibenden Methoden des Komponenten-Controllers:
1. Drcken Sie die Tasten (Strg) + (O), und whlen Sie aus dem Quick Overview die Methode SELECT_PROJECT, um zur Implementierung dieser
Methode zu springen.
2. Sie mssen nicht zurck zur Registerkarte Methods springen, um sich die
Methodensignatur ins Gedchtnis zu rufen. Setzen Sie den Cursor auf den
Methodennamen, und drcken Sie (F2). Die ABAP Element Info zeigt
Ihnen die Signatur der Methode an (siehe Abbildung 4.16).

Abbildung 4.16 ABAP Element Info zur Methode SELECT_PROJECT

3. Fgen Sie den Code aus Listing 4.2 als Implementierung der Methode ein.
METHOD
DATA
DATA
DATA
DATA
DATA

select_project.
lo_nd_project TYPE REF TO if_wd_context_node.
lo_el_project TYPE REF TO if_wd_context_element.
ls_project TYPE wd_this->element_project.
lo_nd_project_issues TYPE REF TO if_wd_context_node.
lt_project_issues TYPE
wd_this->elements_project_issues.
wd_this->mr_project = NEW #( if_project_id ).
lo_nd_project = wd_context->get_child_node(
name = wd_this->wdctx_project ).
lo_el_project = lo_nd_project->get_element( ).
ls_project = wd_this->mr_project->get_project( ).

212

Controller-Programmierung

lo_el_project->set_static_attributes(
static_attributes = ls_project ).
* Issues setzen
lo_nd_project_issues = lo_nd_project->get_child_node(
name = wd_this->wdctx_project_issues ).
lt_project_issues = wd_this->mr_project->get_issues( ).
lo_nd_project_issues->bind_table(
new_items = lt_project_issues
set_initial_elements = abap_true ).
ENDMETHOD.
Listing 4.2 Implementierung der Methode SELECT_PROJECT

4. Navigieren Sie zur Methode SUPPLY_ISSUES, und fgen Sie den Code aus
Listing 4.3 als Implementierung ein.
METHOD supply_issues.
DATA:
ls_project
TYPE
lt_issues
TYPE
ls_issues
TYPE
lt_issue_list TYPE
lr_project
TYPE

zproject,
wd_this->elements_issues,
wd_this->element_issues,
z_issue_t,
REF TO zcl_project.

parent_element->get_static_attributes(
IMPORTING
static_attributes = ls_project
).
IF ls_project-project_id IS NOT INITIAL.
lr_project = NEW #( ls_project-project_id ).
lt_issue_list = lr_project->get_issues( ).
LOOP AT lt_issue_list INTO DATA(ls_issue_list).
ls_issues-issue_id = ls_issue_list-issue_id.
ls_issues-issue_name = ls_issue_list-name.
ls_issues-issue_description =
ls_issue_list-description.
APPEND ls_issues TO lt_issues.
ENDLOOP.
ENDIF.
node->bind_table( new_items = lt_issues
set_initial_elements = abap_true ).
ENDMETHOD.
Listing 4.3 Implementierung der Methode SUPPLY_ISSUES

213

4.1

Web Dynpro ABAP in Eclipse

5. Zu guter Letzt mssen wir noch dafr sorgen, dass unsere Projektliste initial befllt wird. Navigieren Sie daher zur Methode WDDOINIT, und fgen
Sie den folgenden Aufruf ein:
wd_this->fill_projects( ).

Sie knnen dazu die Code-Vervollstndigung fr die Variable WD_THIS verwenden.


6. Aktivieren Sie Ihre nderungen.
Damit sind unsere Arbeiten am Komponenten-Controller abgeschlossen.

4.2

Views und Windows

In diesem Abschnitt widmen wir uns den visuellen Bestandteilen unserer


Web-Dynpro-Komponente. Zunchst erstellen wir die Views, die die Navigation und die Detailanzeige bernehmen sollen. Anschlieend kombinieren
wir diese Views in einem Window.

4.2.1

Views

Der View-Editor ist hnlich aufgebaut wie der des Komponenten-Controllers. Die Registerkarten, die Sie aus der ABAP Workbench gewhnt sind,
wurden mehr oder weniger 1:1 nachempfunden und finden sich nun am
unteren Rand des Editors. Wenn Sie im Project Explorer doppelt auf einen
View klicken, landen Sie zunchst in der Kontextansicht. Diese ist genauso
aufgebaut wie die Sicht, die Sie schon vom Komponenten-Controller kennen. Auf der linken Seite sehen Sie den (im Moment noch leeren) Kontext
des Views. In unserem Fall sehen Sie auf der rechten Seite die Kontextknoten, die Sie im Komponenten-Controller angelegt haben.
Ordnen Sie nun die bentigten Knoten aus dem Komponenten-Controller
dem View zu (Mapping).
1. Wechseln Sie zum View V_MAIN auf der Registerkarte Context.
2. Expandieren Sie den Kontextbaum auf der rechten Seite, bis Sie zur Ebene
des Knotens PROJECTS gelangen.
3. Markieren Sie den Knoten PROJECTS, und ziehen Sie ihn per Drag & Drop
auf den (Wurzel-)Knoten CONTEXT auf der linken Seite.

214

Views und Windows

4. Der Dialog Context Mapping ffnet sich (siehe Abbildung 4.17). Hier
knnen Sie, anders als im SAP GUI, noch einmal genau differenzieren,
welche Elemente Sie mappen mchten.

Abbildung 4.17 Elemente fr das Kontext-Mapping auswhlen

5. Der Knoten mit den gewhlten Elementen wird in den View-Controller


kopiert, und das Mapping wird angelegt. Es wird Ihnen durch Verbindungslinien angezeigt (siehe Abbildung 4.18).
6. Aktivieren Sie Ihre nderungen.

Abbildung 4.18 Anzeige des Kontext-Mappings

215

4.2

Web Dynpro ABAP in Eclipse

Als Nchstes bauen wir das Layout der Views auf. Der Layout-Editor lsst sich
etwas anders bedienen als sein Verwandter im SAP GUI, das neue Bedienkonzept kann Ihnen die Arbeit aber erleichtern. Neben dem Layout-Editor
arbeiten Sie mit den Views Outline und Properties:
Layout-Editor
Im grafischen Layout-Editor wird eine Vorschau angezeigt, die an die Layout-Vorschau der ABAP Workbench erinnert. Allerdings gibt es keine
Palette mit UI-Elementen. Mchten Sie ein UI-Element im Layout-Editor
einfgen, knnen Sie dies ber das Kontextmen tun (mit Insert Element). Ein Dialog stellt Ihnen die zum Einfgen verfgbaren UI-Elemente
zur Auswahl. Mit dem Ankreuzfeld Highlight Containers oben rechts
knnen Sie die Anzeige der Umrisse smtlicher Container aktivieren, was
beim Erstellen verschachtelter Layouts sehr hilfreich sein kann. Ist das
Feld deaktiviert, wird Ihnen eine Vorschau angezeigt, die fast dem Endergebnis entspricht.
Outline-View
Die Hierarchie im View Outline entspricht der Hierarchiedarstellung in
der ABAP Workbench. Bei einem leeren Layout sehen Sie die Standardcontainer CONTEXT_MENUES und ROOTELEMENTCONTAINER. Neue Elemente
fgen Sie ber das Kontextmen hinzu (Insert Element). Das Layout
lsst sich viel intuitiver bearbeiten als in der ABAP Workbench. Neben der
Mglichkeit, Elemente nach oben und unten zu verschieben, wurden auch
das Kopieren, Ausschneiden und Einfgen von Elementen ber das Men
oder Shortcuts ermglicht. Auerdem knnen Sie mehrere Elemente markieren und gleichzeitig bearbeiten.
Properties-View
Im View Properties werden die Eigenschaften der UI-Elemente angezeigt.
Sie sind in Kategorien unterteilt, die auf jeweils eigenen Registerkarten
untergebracht sind:
UI Element: allgemeine Eigenschaften
Layout: Auf der Registerkarte Layout stellen Sie den Layout-Manager
ein und nehmen allgemeine Einstellungen zum Layout vor.
Layout Data: Auf der Registerkarte Layout Data stellen Sie die elementspezifischen Eigenschaften zum Layout-Manager des bergeordneten Containers ein.
Events: Auf der Registerkarte Events knnen Sie dem aktuell gewhlten UI-Element Aktionen zuweisen.

216

Views und Windows

Die auf der Registerkarte UI Element angezeigte Eigenschaft ist immer die
Element-ID. Darauf folgen smtliche Pflichtfelder des UI-Elements. Alle
anderen Eigenschaften werden in alphabetischer Reihenfolge angezeigt
(siehe Abbildung 4.19). Der View Properties bietet zudem die bekannten
Filter- und Suchfunktionen ber ein einzelnes Eingabefeld.

Abbildung 4.19 View Properties zu einem UI-Element

Ist im Outline-View bzw. im Layout-Editor mehr als ein Element markiert,


zeigt der Properties-View alle Eigenschaften an, die die selektierten Elemente gemeinsam haben. Bei gleichen Werten werden diese ebenfalls angezeigt, bei unterschiedlichen Werten bleibt das Feld Value leer. Sie knnen
aber in beiden Fllen die Eigenschaftswerte aller markierten Elemente
gleichzeitig bearbeiten.
Um Ihnen zu zeigen, wie Sie mit den Werkzeugen arbeiten, fgen wir als
Erstes neue UI-Elemente ein.
1. Klicken Sie im Outline-View mit der rechten Maustaste auf das Element
ROOTELEMENTCONTAINER, und whlen Sie im Kontextmen Insert Element.
2. Es ffnet sich der Dialog New UI Element (siehe Abbildung 4.20). Whlen
Sie aus der Liste das UI-Element TransparentContainer.
3. Nennen Sie das Element TCN_NAVIGATION, und besttigen Sie mit OK.

217

4.2

Web Dynpro ABAP in Eclipse

4. Wiederholen Sie den Vorgang, um einen weiteren Transparent Container


einzufgen. Nennen Sie diesen TCN_DETAIL.
5. Die neu eingefgten Transparent Container tauchen nun im Outline-View
auf und knnen verwendet werden.
Der Dialog New UI Element in Abbildung 4.20 unterscheidet sich etwas
vom Fenster UI-Element einfgen der ABAP Workbench. Sie haben
zunchst die vollstndige Liste aller verfgbaren UI-Elemente zur Auswahl
und knnen die Liste ber das Eingabefeld oberhalb der Liste auf einen
Suchbegriff einschrnken. ber die Auswahlliste Categories knnen Sie die
Liste der UI-Elemente auerdem auf eine bestimmte Kategorie einschrnken.
Die Kategorien entsprechen denen, die Sie vielleicht schon aus der Palette
des Layout-Editors in der ABAP Workbench kennen.

Abbildung 4.20 Dialog zur Anlage eines neuen UI-Elements

218

Views und Windows

Einige UI-Elemente, wie das Input Field, werden brigens direkt zusammen
mit ihrem Label (Bezeichner) eingefgt. Wenn Sie lieber mit dem LayoutEditor arbeiten, ist das Vorgehen beim Einfgen neuer UI-Elemente analog.
Als Nchstes knnen wir die Eigenschaften unserer UI-Elemente, der Transparent Container, bearbeiten:
1. Klicken Sie im Outline-View doppelt auf das Element ROOTELEMENTCONTAINER , um den Properties-View zu ffnen (Alternativ markieren Sie das
Element und whlen () + (Strg) + (Z) diese Tastenkombination funktioniert auch im Layout-Editor.).
2. Wechseln Sie auf die Registerkarte Layout, und whlen Sie fr die Eigenschaft Layout den Eintrag MatrixLayout.
3. Markieren Sie nun die angelegten Transparent Container TCN_NAVIGATION
und TCN_DETAIL. Die Eigenschaften Ihrer Auswahl werden sofort im Properties-View angezeigt.
4. Stellen Sie nun gleichzeitig fr diese beiden Container das Layout auf
Matrix Layout um. Die restlichen Einstellungen knnen Sie beibehalten.
Mit den beiden Transparent Containern allein knnen wir noch nicht viel
anfangen, wir mssen auch eine Navigationsmglichkeit anlegen. Dazu verwenden wir einen Navigationsbaum. Aufgrund des Aufbaus unseres Kontextes mssen wir dazu keinen groen Aufwand betreiben:
1. Fgen sie im Container TCN_NAVIGATION ein neues UI-Element vom Typ
Tree an, und nennen Sie es TRE_NAVIGATION.
2. Im Properties-View wechseln Sie in den Bereich UI Element und markieren die Eigenschaft DataSource. Es erscheint ein Button mit der Aufschrift
Bind, auf den Sie klicken. Whlen Sie im so aufgerufenen Men den Eintrag To Context.

Abbildung 4.21 Kontext an das UI-Element anbinden

3. Daraufhin erscheint der Dialog Bind to Context. Whlen Sie hier den
Kontextknoten PROJECTS, fr den nun ein kleines Ordnersymbol als Wert

219

4.2

Web Dynpro ABAP in Eclipse

der Eigenschaft angezeigt wird. Zudem erscheint der Button Reset, der es
Ihnen ermglicht, die Bindung wieder zu lsen.
4. Als Letztes wollen wir dem Wurzelknoten des Baums noch einen nachvollziehbaren Namen geben. Whlen Sie dazu die Eigenschaft RootText, klicken Sie auf den Button Bind, und whlen Sie To OTR im erscheinenden
Men.
5. Im folgenden Dialog Search online text repository object geben Sie als
Paket das Standardpaket SOTR_VOCABULARY_BASIC an (siehe Abbildung 4.22). Sie knnen in diesem Feld auch die Code-Vervollstndigung
verwenden.
6. Whlen Sie aus der Liste der OTR-Texte den Eintrag Navigation aus, und
besttigen Sie mit OK. Der ausgewhlte Text wurde damit an die Eigenschaft gebunden.

Abbildung 4.22 Dialog zur Anbindung eines Textes aus dem Online Text Repository

OTR-Texte
Sie mssen OTR-Texte in den Eigenschaften nicht ber den Dialog anbinden, sondern knnen auch $OTR:<Paket>/<Aliasname> ber die Tastatur eingeben.
Eigene OTR-Texte knnen Sie ber Transaktion SOTR_EDIT im SAP GUI pflegen.
Eine direkte Eclipse-Integration ist derzeit noch nicht verfgbar.

220

Views und Windows

Sie haben nun gesehen, wie Sie einzelne Werte an den Kontext binden knnen. Wenn Sie schon grere Anwendungen in Web Dynpro geschrieben
haben, wissen Sie, wie zeitaufwendig es sein kann, viele UI-Elemente an den
Kontext zu binden. Die Web-Dynpro-Tools in Eclipse bieten zu diesem
Zweck einen neuen Kontext-Editor an, den wir uns im nchsten Beispiel ansehen werden. Dazu legen wir zu unserem Baum die Knoten fr Projekte und
Aufgaben an und binden diese in einem Rutsch an den Kontext:
1. Klicken Sie im Outline-View mit der rechten Maustaste auf das UI-Element
TRE_NAVIGATION, und whlen Sie Insert Node Type im Kontextmen.
2. Whlen Sie aus der Liste der verfgbaren Elemente TreeNodeType, nennen
Sie das anzulegende Element TNT_PROJECT, und besttigen Sie mit OK.
3. Fgen Sie auf die gleiche Weise ein TreeItemType mit dem Namen TIT_
ISSUE ein.
4. Klicken Sie nun mit der rechten Maustaste auf TRE_NAVIGATION, und whlen Sie Bind To Context im Kontextmen (() + (Strg) + (P)).
5. Whlen Sie die Eigenschaft DataSource unterhalb des Elements TNT_PROJECT, und ziehen Sie diese per Drag & Drop auf den Knoten PROJECTS auf
der rechten Seite. Sie haben nun die Eigenschaft an den Kontext gebunden, was Ihnen durch eine Verbindungslinie angezeigt wird.
6. Alle Eigenschaften, die gebunden werden sollen, finden Sie in Tabelle 4.1.
Schlielich sollte Ihr Binding wie in Abbildung 4.23 aussehen. Schlieen
Sie die Bearbeitung mit Finish ab.
Layout

Kontext

Element

Eigenschaft

Knoten

Attribut

TRE_NAVIGATION

DataSource

PROJECTS

TNT_PROJECT

DataSource

PROJECTS

TNT_PROJECT

Text

PROJECTS

Project_Name

TIT_ISSUE

DataSource

ISSUES

TIT_ISSUE

Text

ISSUES

Issue_Name

TIT_ISSUE

Tooltip

ISSUES

Issue_Description

Tabelle 4.1 Kontext-Binding fr das UI-Element TRE_NAVIGATION

Auf diese Weise knnen Sie beliebige UI-Elemente mit dem Kontext verknpfen. Dabei werden Ihnen im Editor alle UI-Elemente angezeigt, die dem
Element zugeordnet sind, das Sie ausgewhlt haben, z. B. ein transparenter

221

4.2

Web Dynpro ABAP in Eclipse

Container und alle Elemente, die sich in diesem Container befinden. Sie
haben auch die Mglichkeit, die Ansicht im Dialog Bind to Context nur auf
die obligatorischen Eigenschaften einzuschrnken. Klicken Sie dazu auf den
Button Show only mandatory UI element properties ( ) oberhalb des
Layout-Baums.

Abbildung 4.23 Dialog fr das Kontext-Binding

Im nchsten Schritt bestimmen wir, wie die Detailanzeige aussehen soll, um


ein ausgewhltes Projekt anzuzeigen. Diese soll rechts neben dem Navigationsbaum zu finden sein. Sie besteht aus einem einfachen Formular sowie
einer Tabelle mit smtlichen Issues zu einem Projekt.
Es gibt in den Web-Dynpro-Tools in Eclipse keine Mglichkeit, ein Formular
aus dem Kontext zu generieren. Allerdings ist diese Methode auch in der

222

Views und Windows

ABAP Workbench mit einigen Nacharbeiten verbunden, sodass die Zeitersparnis durch die Generierung dort nur minimal ist. Durch den neuen Binding-Editor und die Mglichkeit, Elemente zu kopieren, legen Sie Formulare
daher in Eclipse mit etwas bung eher schneller an. Gehen wir die Anlage an
unserem Beispiel gemeinsam durch:
1. Fgen Sie unterhalb des UI-Elements TCN_DETAIL ein UI-Element Caption
mit dem Namen CPT_TITLE ein.
2. Fgen Sie unterhalb des Elements TCN_DETAIL ein InputField ein, und
nennen Sie es INP_ID. Eclipse fgt automatisch das passende Label dazu
ein.
3. Markieren Sie das Label und das Input Field, und drcken Sie (Strg) + (C),
um beides zu kopieren.
4. Markieren Sie wieder das Element TCN_DETAIL, und drcken Sie dreimal
(Strg) + (V), um drei neue Label/InputField-Prchen einzufgen.
5. Markieren Sie nun alle Label-Elemente, und whlen Sie im PropertiesView unter LayoutData LayoutData den Eintrag MatrixHeadData.
Damit bewirken Sie, dass jedes Label in einer neuen Zeile angezeigt wird.
6. Als Nchstes benennen Sie die IDs der Elemente um. Markieren Sie dazu
das Element, das Sie umbenennen mchten, und drcken Sie (F2). Sie knnen es dann direkt im Outline-View umbenennen. Einen Vorschlag fr
eine mgliche Benennung finden Sie in Abbildung 4.24.

Abbildung 4.24 Das Detailformular

7. Es fehlen noch die Label-Zuordnungen fr die Eingabefelder LBL_NAME,


LBL_START sowie LBL_END, da wir diese lediglich kopiert hatten. Markieren
Sie zuerst LBL_NAME, navigieren Sie im Properties-View zu UIElement
LabelFor, und whlen Sie das Label INP_NAME aus der Dropdown-Liste.

223

4.2

Web Dynpro ABAP in Eclipse

8. Gehen Sie bei den Eingabefeldern LBL_START und LBL_END auf die gleiche
Weise vor.
Vielleicht haben Sie beim Anlegen des Detailformulars gedacht, dass es schner wre, diese Sicht in einen eigenen View auszulagern. Aber alles lschen
und neu anlegen? Das ist nicht notwendig. Sie knnen alle UI-Elemente so,
wie sie sind, in einen neuen View verlegen:
1. Klicken Sie im Outline-View mit der rechten Maustaste auf den Transparent Container TCN_DETAIL, und whlen Sie Copy ((Strg) + (C)) aus dem
Kontextmen.
2. Klicken Sie im Project Explorer mit der rechten Maustaste auf die WebDynpro-Komponente ZWD_C_ISSUE_LIST, und whlen Sie New View im
Kontextmen.
3. Nennen Sie den neuen View V_PROJECT_DETAILS, und legen Sie diesen an.
4. Wechseln Sie auf die Registerkarte Layout, markieren Sie den Container
ROOTELEMENTCONTAINER, und drcken Sie (Strg) + (V). Die kopierte UIStruktur wird eingefgt.
5. Wechseln Sie zur Registerkarte Layout des Views V_MAIN, und lschen Sie
das Element TCN_DETAIL. Fgen Sie stattdessen ein VIEWCONTAINERUIELEMENT ein, und nennen Sie es VCN_DETAILS.
Es wre sogar noch besser, die Detailsicht fr verschiedene Objekte in
jeweils eigenen Komponenten zur Verfgung zu haben. Selbst dies knnen
Sie ber die Kopierfunktion erreichen. Sie knnen UI-Elemente, Methoden,
Kontextknoten oder Attribute einfach zwischen Komponenten hin- und her
kopieren.
Schlielich binden wir unsere Detailsicht an den Kontext:
1. Wechseln Sie dazu zur Registerkarte Context des Views V_PROJECT_
DETAILS.
2. Ziehen Sie den Kontextknoten PROJECTS aus dem Komponenten-Controller in den Kontext des Views, um diesen zu mappen.
3. Whlen Sie alle Elemente aus (auch den Unterknoten PROJECT_ISSUES).
4. Wechseln Sie zur Registerkarte Layout, und markieren Sie das Element
TCN_DETAIL. Drcken Sie () + (Strg) + (P), um den Binding-Dialog zu ffnen. Stellen Sie ein Binding wie in Abbildung 4.25 her, und besttigen Sie
mit Finish.

224

Views und Windows

Abbildung 4.25 Kontext-Mapping fr den View V_PROJECT_DETAILS

In unserer Dateiansicht bentigen wir noch eine Tabelle zur Anzeige der
Aufgaben zu einem Projekt. Zur Anlage von Tabellen gibt es einen Assistenten, der Ihnen einiges an Arbeit abnehmen kann. Dieser funktioniert sowohl
fr das UI-Element Table als auch fr das Element CTable.
1. Klicken Sie mit der rechten Maustaste auf den Knoten TCN_DETAILS, und
whlen Sie Insert Element. Whlen Sie Table aus der Liste der UI-Elemente, und nennen Sie das neue Element TBL_ISSUES. Besttigen Sie
Ihre Angaben.
2. Beim Einfgen der Tabelle ffnet sich ein Assistent, der Ihnen den aktuellen Kontext zur Auswahl stellt. Markieren Sie hier den Knoten PROJECT_
ISSUES, und heben Sie die Markierung des Feldes MANDT auf. Besttigen Sie
mit Next.
3. Im nchsten Schritt knnen Sie nderungen an den Spalteneigenschaften
vornehmen. Wir begngen uns aber mit den Voreinstellungen und besttigen mit Finish.
4. ndern Sie nun noch in den Eigenschaften Ihrer Tabelle den Wert fr die
Eigenschaft LayoutData auf MatrixHeadData und den Wert fr die Eigenschaft ColSpan auf 2.

225

4.2

Web Dynpro ABAP in Eclipse

Sie haben nun eine Tabelle mit Issues eingebaut. Die Kontextbindung und
die Eigenschaften der Spalten knnen Sie jederzeit ber das Kontextmen
mit der Funktion Edit Table ndern. Zudem knnen Sie auf die Tabelle und
deren Spalten im Outline-View zugreifen.
Nun mssen wir noch dafr sorgen, dass dem Anwender die Details auch
angezeigt werden. Dazu mssen wir ein Inbound- und ein Outbound-Plug in
unseren beiden Views definieren. Diese Plugs sollen bei der Auswahl eines
Projektes ausgelst werden. Wechseln Sie dazu zur Registerkarte Plugs des
Views V_MAIN, und klicken Sie auf Add Outbound Plug. Im folgenden Dialog geben Sie OP_PROJECT_DETAILS als Namen fr das neue Plug ein. Sie
haben hier auch die Mglichkeit, ber die Funktion Add Parameter zustzliche bergabeparameter anzulegen. Dies ist in unserem Fall aber nicht notwendig. Legen Sie den Inbound-Plug fr den Detail-View V_PROJECT_
DETAILS ber die Funktion Add Inbound Plug an, und nennen Sie diesen
Plug IP_SHOW_PROJECT.
Damit die Plugs ausgelst und die korrekten Projektdetails geladen werden,
legen wir eine neue Aktion fr den Projektknoten an. Nach dem gleichen
Prinzip knnen Sie bei Bedarf auch Ereignisbehandler fr andere UI-Elemente anlegen:
1. Wechseln Sie zur Registerkarte Layout des Views V_PROJECT_DETAILS. Klicken Sie im Outline-View doppelt auf das UI-Element TNT_PROJECTS, und
wechseln Sie im Properties-View auf die Registerkarte Event.
2. Markieren Sie die Eigenschaft onAction, und klicken Sie auf den Button
Create.
3. Im folgenden Dialog nennen Sie die neue Aktion DISPLAY_PROJECT
und vergeben eine Beschreibung (siehe Abbildung 4.26). Der Dialog zeigt
Ihnen direkt an, wie der Ereignisbehandler zu Ihrer Aktion heien wird.
Sie knnen auerdem den Aktionstyp whlen. Wir belassen es bei der Einstellung Standard und besttigen die Anlage mit Finish.
ber den Button Go gelangen Sie in die Implementierung der Ereignisbehandler-Methode. In dieser Methode sorgen Sie dafr, dass das gewhlte
Projekt geladen wird. Dazu rufen Sie die Methode SELECT_PROJECT im Komponenten-Controller auf und lsen anschlieend das Plug OP_PROJECT_
DETAILS aus. Es gibt keinen Assistenten, der die Methodenaufrufe oder den
Code zum Auslsen eines Plugs erzeugt. Stattdessen knnen Sie die CodeVervollstndigung verwenden. Der Komponenten-Controller steht in jedem
View ber das Attribut WD_COMP_CONTROLLER zur Verfgung. ber die Tasten-

226

Views und Windows

kombination (Strg) + Leertaste knnen alle verfgbaren Methoden aufgelistet und inklusive ihrer Signatur ber die Tastenkombination () + () eingefgt werden. Zum Auslsen eines Plugs steht zudem das Template
firePlug zur Verfgung. Es fgt eine Code-Vorlage ein, die Sie nur noch um
den Namen des Plugs ergnzen mssen. Diesen finden Sie ebenfalls mithilfe
der Code-Vervollstndigung.

Abbildung 4.26 Dialog New Action

Bauen wir nun den Ereignisbehandler zusammen:


1. Mithilfe des Codes aus Listing 4.4 ermitteln Sie zunchst die ID des
gewhlten Projekts.
DATA:
lr_project TYPE REF TO if_wd_context_element,
lf_project_id TYPE z_projekt_id.
lr_project = wdevent->get_context_element(
name = 'CONTEXT_ELEMENT' ).
lr_project->get_attribute(
EXPORTING
name = `PROJECT_ID`

227

4.2

Web Dynpro ABAP in Eclipse

IMPORTING
value = lf_project_id ).
Listing 4.4 Projekt-ID ermitteln

2. Als Nchstes rufen Sie die Selektionsmethode im Komponenten-Controller auf. Tippen Sie dazu wd_comp_controller-> ein, gefolgt der Tastenkombination (Strg) + Leertaste. Whlen Sie aus der Liste die Methode
SELECT_PROJECT, und fgen Sie den Code mit () + () ein.
3. Vervollstndigen Sie den Aufruf mit der Projekt-ID, sodass Sie die folgende Zeile erhalten:
wd_comp_controller->select_project( if_project_id = lf_project_
id ).

4. Fgen Sie das Template firePlug ein, und geben Sie OP_PROJECTS_
DETAILS als Namen fr das Plug ein. Am Ende sollte Ihr Quelltext wie in
Listing 4.5 aussehen.
METHOD onactiondisplay_project.
DATA:
lr_project TYPE REF TO if_wd_context_element,
lf_project_id TYPE z_projekt_id.
lr_project = wdevent->get_context_element(
name = 'CONTEXT_ELEMENT' ).
lr_project->get_attribute(
EXPORTING
name = `PROJECT_ID`
IMPORTING
value = lf_project_id ).
wd_comp_controller->select_project(
if_project_id = lf_project_id ).
WD_THIS->fire_op_projects_details_plg( ).
ENDMETHOD.
Listing 4.5 Implementierung der Methode ONACTIONDISPLAY_PROJECT

Wenn Sie diese Arbeitsablufe erst einmal verinnerlicht haben, geht das Einfgen von Code schnell von der Hand. Der Vorteil im Vergleich zum CodeWizard liegt vor allem darin, dass Sie nicht aus dem Fluss gerissen werden.
Es ist nicht notwendig, die Maus in die Hand zu nehmen und eine Funktion
in der Toolbar aufzurufen. Die Hilfen stehen Ihnen direkt whrend der
Arbeit im Quelltext zur Verfgung.

228

Web-Dynpro-Applikationen

4.2.2

Windows

Damit unser neuer View angezeigt werden kann, muss er im Window-Controller unserer Web-Dynpro-Komponente eingebunden werden. Der Editor
fr den Window-Controller ist einer der wenigen Editoren, die noch nicht in
Eclipse umgesetzt wurden. Daher ist an dieser Stelle auch wenig Neues zu
erklren:
1. Klicken Sie im Project Explorer doppelt auf das Window W_ISSUE_LIST.
Ein in Eclipse integriertes SAP-GUI-Fenster mit dem gewhlten Window
ffnet sich.
2. Wechseln Sie mit (Strg) + (F1) in den Editiermodus, und expandieren Sie
die Window Structure vollstndig.
3. Klicken Sie mit der rechten Maustaste auf den View VCN_DETAILS, und
whlen Sie Embed View, um den View einzubinden. Whlen Sie ber die
Wertehilfe des Feldes View to Be Embedded den Eintrag V_PROJECT_
DETAILS.
4. Klappen Sie auch die Views VCN_DETAILS und V_PROJECT_DETAILS auf.
5. Ziehen Sie den Outbound-Plug OP_PROJECT_DETAILS auf den Inbound-Plug
IP_SHOW_PROJECT, und aktivieren Sie Ihre nderungen ((Strg) + (F3)).
Damit haben wir die Views in das Window eingebettet. Das Ergebnis sollte
wie in Abbildung 4.27 aussehen.

Abbildung 4.27 Struktur des Windows W_ISSUE_LIST

4.3

Web-Dynpro-Applikationen

Web-Dynpro-Komponenten lassen sich selbst nicht ausfhren, es wird


zwangslufig eine Applikation bentigt, die dem Endanwender den Zugriff

229

4.3

Web Dynpro ABAP in Eclipse

auf das System erlaubt. Im Folgenden lesen Sie, was Sie tun mssen, um
unsere Komponente ausfhren zu knnen.
Eine Web-Dynpro-Anwendung ordnet der Komponente einen aktiven Interface-View (ein Window) zu, das zur Anzeige gebracht wird. Zudem wird ein
ICF-Service (ICF = Internet Communication Framework) erstellt, ber den
die Applikation aufgerufen wird.
Das Erstellen einer Applikation ist einfach. Der Aufwand beschrnkt sich
mehr oder weniger darauf, sich einen Namen und eine Beschreibung einfallen zu lassen:
1. Klicken Sie im Project Explorer mit der rechten Maustaste auf die Komponente ZWD_C_ISSUE_LIST, und whlen Sie New Application.
2. Im folgenden Dialog geben Sie z. B. ZWD_A_ISSUE_LIST als Namen fr
die Applikation und Issue List als Beschreibung ein (siehe Abbildung
4.28). Fahren Sie mit einem Klick auf Next fort.

Abbildung 4.28 Neue Web-Dynpro-Applikation erstellen

3. Whlen Sie Ihren Transportauftrag fr unsere Beispielanwendung aus,


und legen Sie die Anwendung mit Finish an.
4. Das SAP GUI startet und zeigt Ihre neue Anwendung an. Speichern Sie
diese, und schlieen Sie die SAP-GUI-Registerkarte.
Die neu angelegte Applikation taucht nun unterhalb der Komponente im
Project Explorer auf. Sie knnen die Anwendung auch direkt ber Eclipse

230

Floorplan Manager

ausfhren. ffnen Sie dazu das Kontextmen zu Ihrer Applikation im Project


Explorer, und whlen Sie Run As Web Dynpro ABAP Application. Der in
Eclipse integrierte Browser startet und zeigt Ihre Anwendung an. Unter
Umstnden werden Sie vorab noch nach Benutzernamen und Passwort
gefragt.

4.4

Floorplan Manager

Der Floorplan Manager ist ein Framework zur Erstellung konfigurierbarer


Web-Dynpro-Anwendungen. ber den Floorplan Manager knnen Sie verschiedene Bausteine in Form sogenannter Building Blocks zu einer Anwendung zusammensetzen. Der Floorplan Manager basiert zu einem Groteil
auf Web-Dynpro-Konfigurationen.
In der Vergangenheit war es mitunter mhselig, eine neue Anwendung zu
erstellen, da diese und eine Reihe von Konfigurationen zunchst angelegt
werden mussten. Seit der Einfhrung des Application Creation Tools (ACT)
kann diese Aufgabe automatisiert durchgefhrt werden. Das ACT ist auch in
Eclipse verfgbar.
Eine Floorplan-Manager-Anwendung legen Sie in Eclipse wie folgt an:
1. Markieren Sie im Project Explorer das Paket Z_ISSUE_LIST, und drcken
Sie (Strg) + (N), um ein neues Objekt zu erstellen. Whlen Sie Floorplan
Manager Application aus der Liste, und fahren Sie mit Next fort.
2. Aus der Liste der Assistenten whlen Sie Wizard for Creating Empty
FPM Applications und besttigen die Auswahl mit Finish (siehe Abbildung 4.29).

Abbildung 4.29 Neue Floorplan-Manager-Anwendung anlegen

231

4.4

Web Dynpro ABAP in Eclipse

3. Im integrierten Browser ffnet sich das ACT (siehe Abbildung 4.30).


Geben Sie als Namen der Web-Dynpro-Applikation ZWD_FPM_ISSUE_
LIST sowie eine passende Beschreibung ein.

Abbildung 4.30 Application Creation Tool

4. Whlen Sie als Floorplan-Typ, d. h. als Grundriss, der der Anwendung


zugrunde liegen soll, unter Select Floorplan die Option Overview Page.
5. Das ACT schlgt automatisch Namen fr die Konfigurationen vor. Sie knnen diese Namen einfach bernehmen und mit Next zum nchsten Schritt
gehen.
6. Whlen Sie als Package Z_ISSUE_LIST, und tragen Sie Ihren Transportauftrag im Feld Request/Task ein.
7. Schlieen Sie die Anlage mit Save ab.
Ihnen werden nun zwei Links angezeigt, einer, um in den Floorplan-Konfigurationseditor (Flexible UI Designer, FLUID) abzuspringen, und einer, um
die Anwendung auszufhren. Wenn Sie den Project Explorer aktualisieren,
werden Ihnen zudem die neu angelegte Anwendung und die zugehrigen
Konfigurationen angezeigt (siehe Abbildung 4.31).

232

Floorplan Manager

Abbildung 4.31 Floorplan-Manager-Objekte im Project Explorer

Die Floorplan-Manager-Tools sind alle webbasiert. Daher unterscheidet sich


die Arbeit mit diesen Tools, ausgehend von Eclipse, nicht von der Arbeit, die
von der SAP-GUI-Oberflche ausgeht. Sie knnen unsere Aufgabenliste mithilfe dieser Tools nun als Floorplan-Manager-Anwendung zur Verfgung
stellen. Die dazu notwendigen Konfigurationen sind nun angelegt und knnen in Eclipse aufgerufen werden.

233

4.4

Die Datenbank ist das Gedchtnis eines SAP-ERP-Systems. ABAPProgramme legen stndig Datenstze an und lesen sie wieder aus.
Fr einen Entwickler ist es unbedingt notwendig, Einblick in die
Datenbank zu haben sei es bei der Entwicklung neuer Anwendungen oder bei der Analyse bestehender Programme.

Datenbankzugriffe

Das reibungslose Funktionieren eines SAP-ERP-Systems hngt immer mit


der Datenbank zusammen. Der Anwender der Transaktionen und Web-Dynpro-Applikationen ist meist sehr gut gegen die technischen Details abgeschirmt. Der erste Blick des erfahrenen ABAP-Entwicklers geht aber meistens zuerst auf die Datenbank, wenn es Probleme gibt. Eines der wichtigsten
Werkzeuge des Entwicklers ist daher der Data Browser (Transaktion SE16)
bzw. die allgemeine Tabellenanzeige (Transaktion SE16N).
Seit Version 2.19 der ABAP Development Tools for SAP NetWeaver (ADT)
gibt es eine Alternative zur Tabellenanzeige im SAP GUI. Die Data Preview
ermglicht die Anzeige von Tabelleninhalten innerhalb eines nativen
Eclipse-Views. In diesem Kapitel sehen wir uns dieses praktische Tool
genauer an. Zudem betrachten wir die neue SQL-Konsole, die mit den ADT
2.31 als Ergnzung zur Data Preview eingefhrt wurde. Schlielich werfen
wir noch einen Blick auf die Core Data Services, mit denen Sie Views in einer
SQL-hnlichen Sprache anlegen knnen.

5.1

Data Preview

Vielleicht haben Sie sich schon gefragt, ob Sie jedes Mal in das SAP GUI
springen mssen, wenn Sie einen Blick in die Datenbank werfen wollen. Bis
zur Version 2.19 der ADT war dies noch so. Mit dieser Version wurde die
Data Preview eingefhrt, mit der Sie sich schnell den Inhalt einer beliebigen
Datenbanktabelle oder eines Views anzeigen lassen knnen. Dazu mssen
Sie nur mit der rechten Maustaste auf den entsprechenden Eintrag im Project
Explorer klicken und im Kontextmen den Eintrag Open Data Preview wh-

235

Datenbankzugriffe

len. Eclipse ffnet daraufhin im Editor-Bereich eine Tabellensicht mit den


ersten 100 Eintrgen der ausgewhlten Tabelle (siehe Abbildung 5.1). Keine
Angst, damit ist der Funktionsumfang der Data Preview noch lange nicht
erschpft. Im Folgenden schauen wir uns anhand unserer Beispieltabelle
ZISSUE an, was dieses Tool zu bieten hat.

Abbildung 5.1 Data-Preview-Sicht

In der Data-Preview-Sicht steigen Sie direkt in die Anzeige der Daten ein,
d. h., es gibt kein vorgeschaltetes Selektionsbild. Die Anzahl der angezeigten
Zeilen knnen Sie im Feld Max rows von 100 Zeilen auf bis zu 5.000 erhhen. Auerdem knnen Sie Ihre Selektion ber Filter einschrnken. Fgen
Sie als Nchstes einen neuen Filter auf die Spalte LOEVM hinzu, um alle zum
Lschen vorgemerkten Eintrge auszublenden:
1. Klicken Sie mit der rechten Maustaste auf die Spaltenberschrift der Spalte
LOEVM, und whlen Sie Add a filter on [LOEVM] im Kontextmen (siehe
Abbildung 5.2).
2. Im sich ffnenden Dialog knnen Sie Ihre Filterkriterien pflegen. Dabei
stehen Ihnen auch verschiedene Operatoren wie kleiner als oder ungleich
zur Verfgung. Die vollstndige Liste sehen Sie in Abbildung 5.3. Whlen
Sie Not Equal to.
3. Geben Sie fr unser Beispiel in das Filter-Eingabefeld X ein, und drcken
Sie ().

236

Data Preview

Abbildung 5.2 Filter fr eine Tabellenspalte setzen

Abbildung 5.3 Filter bearbeiten

Sofort nach der Eingabe wird die Ausgabe aktualisiert, und die gelschten
Eintrge verschwinden. ber die Schaltflche mit den Pnktchen ( ) haben
Sie Zugriff auf die Wertehilfe. Vielleicht vermissen Sie die Mglichkeit, eine
Werteliste anzugeben. Diese Mglichkeit steht Ihnen nur zur Verfgung,
wenn Sie als Filteroperator In List bzw. Not in List whlen. ber den Button
knnen Sie dann mehrere Werte hinzufgen.
In vielen Fllen wird die Gre der Datenbanktabellen deutlich ber 5.000
Zeilen liegen. Der einzelne Datensatz ist dann allerdings in der Regel weniger interessant (falls doch, mssen Sie sich mit einem Filter an diesen herantasten). Sehr interessant ist hingegen hufig die Anzahl der Eintrge, die ein
bestimmtes Kriterium erfllen. In der linken oberen Ecke ist dauerhaft die
Anzahl der angezeigten Zeilen eingeblendet (xx rows retrieved). Die
Gesamtzahl der Datenstze auf der Datenbank erhalten Sie ber den Button
Number of Entries ( ).

237

5.1

Datenbankzugriffe

Um die Ausgabe zu sortieren, klicken Sie auf den Namen der Spalte, nach der
Sie sortieren mchten. Die Sortierung bezieht sich nicht nur auf die angezeigten Zeilen, sondern auf die komplette Datenbanktabelle (bzw. auf alle
Zeilen, die in den aktuellen Filter fallen). ber die Schaltflche Select
Columns haben Sie die Mglichkeit, die angezeigten Spalten zu begrenzen.
Blenden Sie testweise die Verwaltungsfelder MANDT, ERNAM, ERDAT, AENAM
sowie AEDAT aus.
Per Maustaste knnen Sie auerdem einen sogenannten Quick Filter anlegen.
Dabei bernehmen Sie den Wert der gewhlten Spalte direkt in die Filterbedingungen. Klicken Sie dazu mit der rechten Maustaste auf einen Eintrag,
und whlen Sie Quick Filter on [<Value>] im Kontextmen (siehe Abbildung 5.4). Der neue Filter wird in die Liste der aktiven Filter bernommen
und sofort angewandt.

Abbildung 5.4 Quick Filter anlegen

Die Verteilung einzelner Werte einer Spalte knnen Sie sich ebenfalls anzeigen lassen, wobei alle mglichen Werte nur einmal angezeigt werden. Die
Anfrage entspricht der Abfrage SELECT DISTINCT aus OpenSQL. Wollen Sie
sich ein Bild davon machen, welche Projekte in der Tabelle ZISSUE vorkommen, gehen Sie wie folgt vor:
1. Klicken Sie mit der rechten Maustaste irgendwo in die Spalte PROJECT_ID,
und whlen Sie im Kontextmen Distinct values for [PROJECT_ID].
2. Die Anzeige vermittelt Ihnen einen berblick ber die vorkommenden
Projekt-IDs in der Tabelle ZISSUE (siehe Abbildung 5.5), in diesem Beispiel
sind es vier. Neben der ID wird Ihnen die absolute Hufigkeit dieses Eintrags angezeigt (Count). Zudem rechnet Ihnen Eclipse die relative Verteilung (Distribution) aus. Die Anzeige bezieht sich auf den kompletten
Datenbestand, nicht nur auf die angezeigten Zeilen.
ber die Eingabe eines Filtermusters (Eingabefeld Filter Pattern, siehe
Abbildung 5.6) knnen Sie die angezeigten Zeilen schnell nach einem Wert
durchsuchen. Die Eingabe bezieht sich auf alle Spalten der angezeigten Zeilen. Das Filter-Pattern blendet keine Daten aus, sondern bereinstimmun-

238

SQL-Konsole

gen werden lediglich farblich hervorgehoben. Die blichen Wildcard-Symbole (* und ?) werden auch an dieser Stelle untersttzt.

Abbildung 5.5 Projekte in der Tabelle ZISSUE

Abbildung 5.6 Filter-Pattern

Die Ergebnisse Ihrer Anfrage knnen Sie sichern, indem Sie oben rechts auf
das Speichern-Symbol ( ) klicken. Sie haben die Wahl, Ihre Ergebnisse als
XML-, HTML- oder CSV-Datei zu sichern. Die ausgegebene Datei entspricht
der aktuell angezeigten Tabelle.

5.2

SQL-Konsole

Die Data-Preview-Funktion lsst sich intuitiv bedienen und bietet alle Funktionen, die man auch aus der Tabellenanzeige im SAP GUI gewhnt ist
wenn auch etwas anders prsentiert. Allerdings reit sie gestandene ABAP-

239

5.2

Datenbankzugriffe

Entwickler wahrscheinlich nicht vom Hocker. Ein anderes Kaliber hat die
SQL-Konsole. Mit ihr knnen Sie nicht nur den Inhalt einer Tabelle betrachten und ber Eingabefelder filtern, sondern auch SQL-Abfragen formulieren
und sich das Ergebnis sofort in Ihrer Ausgabetabelle ansehen. Dabei steht
Ihnen das volle Repertoire der OpenSQL-Syntax zur Verfgung, inklusive
Joins und Aggregationen. Die SQL-Konsole ist ab SAP NetWeaver 7.4 SP08
und den ADT 2.31 verfgbar.
Neue OpenSQL-Syntax
Mit SAP NetWeaver 7.4 (SP05) wurde die Syntax von OpenSQL leicht angepasst.
Dies ist hauptschlich dem Bestreben geschuldet, mehr Funktionen direkt von der
Datenbank ausfhren zu lassen (Code Pushdown). Die wichtigsten nderungen
sind:
Die Liste der selektierten Spalten wird nun per Komma separiert.
Hostvariablen Felder aus dem ABAP-Coding werden mit einem @-Zeichen
gekennzeichnet.
Sie mssen Ihre alten Programme jedoch nicht umbauen. Innerhalb des ABAPCodings ist Ihnen freigestellt, die alte Syntax weiterhin zu verwenden. Die SQLKonsole hingegen verlangt zwingend neue Syntax.

Sie rufen die SQL-Konsole ber die Schaltflche SQL Console im Data-Preview-Editor auf. Alternativ knnen Sie sie ber das Kontextmen zu Ihrem
ABAP-Projekt ffnen. Wenn Sie die SQL-Konsole fr unsere Beispieltabelle
ffnen, achten Sie darauf, dass der Filter LOEVM auf die Spalte noch aktiv ist.
In einem neuen Editor-Fenster ffnet sich daraufhin eine Tabelle zusammen
mit einem Eingabebereich fr SQL-Abfragen. Ihre Abfrage sollte wie in Listing 5.1 aussehen.
SELECT
ZISSUE~ISSUE_ID,
ZISSUE~NAME,
ZISSUE~DESCRIPTION,
ZISSUE~STATE,
ZISSUE~TYPE,
ZISSUE~PROJECT_ID,
ZISSUE~REPORTER,
ZISSUE~ASSIGNED_TO,
ZISSUE~LOEVM
FROM
ZISSUE
WHERE
LOEVM NE 'X'
Listing 5.1 Generierte SQL-Abfrage mit gesetztem Filter

240

SQL-Konsole

Der generierte SQL-Quelltext entspricht den Filtereinstellungen, die Sie in


der Data Preview angegeben haben. Es handelt sich dabei um vollwertigen
OpenSQL-Code, den Sie bis auf die fehlende INTO-Klausel so in Ihren Programmen verwenden knnen. Sie knnen brigens auch eine INTO-Klausel
angeben. Die SQL-Konsole ersetzt die Klausel mit der Ausgabetabelle. Sie ist
also ein praktisches Werkzeug, um ohne groen Aufwand Abfragen zu testen
und zu evaluieren.
Lassen Sie uns als Nchstes eine etwas komplexere Abfrage definieren. Es
wre z. B. interessant, zu den Issues auch den Namen des zugehrigen Projekts anzuzeigen:
1. Fgen Sie in der SQL-Konsole nach FROM ZISSUE den folgenden Code ein:
INNER JOIN ZPROJECT ON ( ZPROJECT~PROJECT_ID = ZISSUE~PROJECT_
ID )

Verwenden Sie dabei die Code-Vervollstndigung ((Strg) + Leertaste), z. B.


nach der Eingabe von ZPROJECT~.
2. Fgen Sie in der Liste der Spalten nach ZISSUE~PROJECT_ID die Spalte
ZPROJECT~NAME ein.
3. Ersetzen Sie die WHERE-Bedingung durch:
WHERE zissue~loevm NE 'X'
AND
zproject~LOEVM NE 'X'

4. Prfen Sie Ihre Anfrage mit einem Klick auf den Button Check (
(Strg) + (F2)) auf Korrektheit.
5. Fhren Sie die Anfrage mit dem Button Run (

, oder

oder (F8)) aus.

Das Ergebnis wird sofort in der Ausgabetabelle angezeigt. Unterhalb der


SQL-Eingabe finden Sie das Ausfhrungsprotokoll Ihrer Anfrage. Dort wird
die genaue Ausfhrungszeit angezeigt. Zudem zeigt Ihnen das System, wie
Ihre Anfrage umgebaut wurde, um ausgefhrt zu werden. In unserem Fall
wurden eine INTO- und eine UP TO-Klausel hinzugefgt (siehe Abbildung 5.7).
Das Protokoll kann insbesondere bei der Analyse von SQL-Statements von
groem Nutzen sein. Sie mssen sich so kein Hilfsprogramm mit Timern
schreiben oder einen Performance-Trace starten. Nehmen Sie einfache Analysen einfach direkt in der SQL-Konsole vor. ber das Ausklappmen bei der
Schaltflche Run knnen Sie Ihre letzten Anfragen auch noch mal ausfhren
lassen. Sie knnen Ihre Abfragen auch als Favorit kennzeichnen und haben
sie damit dauerhaft im Zugriff.

241

5.2

Datenbankzugriffe

Abbildung 5.7 Ausgabe der SQL-Konsole

5.3

Core Data Services

Wenn Sie zuvor noch nicht mit den ADT oder SAP HANA gearbeitet haben,
sind Ihnen die Core Data Services wahrscheinlich noch nicht ber den Weg
gelaufen. Mit den Core Data Services (CDS) haben Sie die Mglichkeit,
datenbanknahe Modelle in einer domnenspezifischen Sprache zu definieren und mit Metadaten anzureichern. Im Augenblick wird nur die Definition
von Datenbank-Views untersttzt. Die Sprache, die dabei zum Einsatz
kommt, ist die Data Definition Language (DDL). Eines der Hauptziele, die mit
CDS verfolgt werden, besteht darin, einen greren Funktionsumfang direkt
auf der Datenbank abzubilden (Code Pushdown).
Die CDS wurden mit SAP NetWeaver 7.4 SP05 eingefhrt. Sie knnen sie
nicht im SAP GUI anlegen, sondern nur ber Eclipse. Dazu bentigen Sie
mindestens die ADT 2.19. Als Datenbank wird brigens nicht zwingend
HANA vorausgesetzt, Sie knnen CDS-Views auch verwenden, wenn Sie eine
konventionelle relationale Datenbank einsetzen.
Das Konzept der CDS verdeutliche ich anhand unseres Beispiels. Dazu legen
wir einen CDS-View zu unserer Aufgabenliste an:

242

Core Data Services

1. Markieren Sie das Paket Z_ISSUE_LIST im Project Explorer, und drcken


Sie (Strg) + (N), um ein neues Objekt anzulegen. Whlen Sie ABAP DDL
Source aus der Liste.
2. Nennen Sie das neue Objekt ZCDSV_ISSUE, und vergeben Sie eine passende Beschreibung. Fahren Sie mit einem Klick auf Next fort.
3. Whlen Sie Ihren Transportauftrag fr die Aufgabenliste aus, und klicken
Sie auf Next.
4. Whlen Sie aus der Vorlagenliste das Template Define View with join,
und besttigen Sie mit Finish (siehe Abbildung 5.8).

Abbildung 5.8 CDS-View mit Template anlegen

5. Vervollstndigen Sie das Template wie in Listing 5.2. Dazu knnen Sie mit
der Tabulatortaste durch die Variablen des Templates springen und die
Code-Vervollstndigung verwenden.
@AbapCatalog.sqlViewName: 'ZISSUE_V'
@EndUserText.label: 'Issue List View'
define view Zcdsv_Issue as select from ZISSUE
left outer join ZPROJECT
on ZISSUE.project_id = ZPROJECT.project_id {
}
Listing 5.2 CDS-View ZCDSV_ISSUE

243

5.3

Datenbankzugriffe

Template ab ABAP Development Tools 2.36


Die Auswahl eines Templates bei der Anlage eines CDS-Views ist erst mit den
ADT 2.36 mglich. In frheren Releases wurde eine leere DDL Source angelegt.
Es ist ein Assistent in Planung, der den Aufbau von Join-Bedingungen bernehmen
kann. Dieser wird wahrscheinlich in einer der nchsten Versionen der ADT verfgbar werden. Falls Sie eine ltere Version verwenden, knnen Sie einfach mit dem
Code aus Listing 5.2 weiterarbeiten.

Die Definition des Views wird in Listing 5.2 mit den Schlsselwrtern
define view eingeleitet. Darauf folgt der Name der View-Entity. Das ist nicht
zwangslufig auch der Name, mit dem wir unseren View ansprechen werden, dazu spter mehr.
Die Selektion der Daten wird durch das Schlsselwort AS eingeleitet. Darauf
folgt ein SELECT-Statement mit FROM-Klausel und in diesem Fall auch mit
einem LEFT OUTER JOIN zwischen den Tabellen ZISSUE und ZPROJECT. Als
Quelle fr den CDS-View knnen Sie Datenbanktabellen, andere CDS-Views
oder klassische ABAP-Dictionary-Views verwenden. Die Syntax zur Referenzierung von Spaltennamen ist bei CDS-Views etwas anders (. anstelle von
~). Zudem fehlt in Listing 5.2 noch die Angabe der selektierten Spalten.
Dazu kommen wir ebenfalls erst spter.
Bei der Angabe der Join-Bedingungen knnen Sie aus dem Vollen schpfen.
Neben INNER JOIN knnen Sie auch LEFT OUTER JOIN oder RIGHT OUTER JOIN
verwenden. Zudem untersttzen die CDS auch Vereinigungsmengen (UNION).
Wenn Sie mit der Java-Welt vertraut sind, sind Ihnen Annotationen wahrscheinlich schon einmal ber den Weg gelaufen, mit denen Sie Quelltexte
mit Metadaten anreichern knnen. hnlich ist das auch in den CDS-Views
mglich. Schauen Sie sich die ersten beiden Zeilen aus Listing 5.2 an. Mit der
Annotation @AbapCatalog.sqlViewName geben Sie den verffentlichten
View-Namen an. Unter diesem Namen finden Sie den View spter im ABAP
Dictionary wieder. Mit @EndUserText.label vergeben Sie eine Beschreibung
Ihres Views. Die Annotation @AbapCatalog.sqlViewName ist brigens zwingend erforderlich, da Ihr View sonst nicht ber das ABAP Dictionary erreichbar ist.
ber Annotationen knnen Sie verschiedene Eigenschaften Ihres Views
beeinflussen. Neben rein semantischen Annotationen knnen Sie z. B. auch
das Pufferverhalten steuern (@AbapCatalog.Buffering.status/@AbapCatalog.Buffering.type) oder die Mandantenabhngigkeit des Views abschalten (@ClientDependent). Eine vollstndige Liste der verfgbaren Annotatio-

244

Core Data Services

nen finden Sie in der SAP-Hilfe unter http://help.sap.com/abapdocu_740/en/


index.htm?file=abencds_annotations.htm.
Unterschied zwischen Annotationen und Hostvariablen
Verwechseln Sie das @-Zeichen zur Kennzeichnung von Annotationen nicht mit
dem @-Zeichen zur Kennzeichnung von Hostvariablen in OpenSQL. Diese beiden
Konzepte haben nichts miteinander zu tun. DDL ist zwar stark an OpenSQL angelehnt, ist aber eine eigene Sprache.

Wir haben nun ein Grundgerst fr den View in DDL definiert. Bei der
Anlage wurden Sie nach einem Transportauftrag gefragt. CDS-Views werden
ber das Standardtransportwesen des SAP NetWeaver AS transportiert, es
sind also keine zustzlichen Schritte notwendig, um das Objekt in das nderungs- und Transportsystem zu bringen. Den View knnen Sie allerdings so
noch nicht aktivieren, da noch die Angabe der auszugebenden Spalten fehlt.
Kmmern wir uns daher als Nchstes darum, Felder in die Ausgabe zu bringen. Fgen Sie dazu zwischen die geschweiften Klammern in Listing 5.2 den
Inhalt aus Listing 5.3 ein.
@EndUserText.label: 'Eindeutige Issue ID'
key zissue.name as Issue_Name, //Normales Feld
zissue.description as ISSUE_DESCRIPTION,
zproject.project_name as PROJECT_NAME,
@EndUserText.label: 'Aktion fr den Entwickler'
case zissue.state
//Bedingte Ausgabe
when 'NEW' then 'Noch nicht begonnen'
when 'WIP' then 'In Bearbeitung'
else 'Entwicklung abgeschlossen'
end as DEVELOPMENT_STATE
Listing 5.3 Spaltendefinition zum CDS-View ZCDSV_ISSUE

Aktivieren Sie Ihren CDS-View mit der Tastenkombination (Strg) + (F3). Klicken Sie im Project Explorer mit der rechten Maustaste auf den View ZCDSV_
ISSUE, und whlen Sie Data Preview im Kontextmen. ffnen Sie das SAP
GUI ((Strg) + (6)), und wechseln Sie in Transaktion SE11. Geben Sie als
View-Namen ZISSUE_V ein, und klicken Sie auf Display. Damit haben wir
unseren ersten funktionstchtigen CDS-View gebaut.
Die Definition der angezeigten Spalten ist relativ simpel. Sie referenzieren
auf den Namen der Spalte ber den Tabellennamen und den Spaltennamen
auf der Datenbank, getrennt mit einem Punkt. Sie haben hier die volle Untersttzung der Code-Vervollstndigung. Schlsselfelder definieren Sie, indem

245

5.3

Datenbankzugriffe

Sie der Definition der Spalte ein KEY voranstellen. Einen alternativen
Bezeichner zu einer Spalte legen Sie optional mit dem Schlsselwort AS fest.
Auch fr Spalten knnen Sie Annotationen angeben, z. B. eine zustzliche
Beschreibung zu den Spalten ISSUE_ID und zum DEVELOPMENT_STATE.
Anhand des Feldes DEVELOPMENT_STATE sehen Sie noch eine Besonderheit der
CDS-Views. Sie haben die Mglichkeit, konditionale Ausdrcke zu verwenden, um Felder direkt in der Abfrage auszuwerten. In unserem Beispiel sorgen wir etwa dafr, dass nur Status angezeigt werden, die fr den Entwickler
auch interessant sind.
Den CDS-View knnen Sie wie eine normale Datenbanktabelle oder einen
ABAP Dictionary View in der Data Preview oder auch in der Tabellenanzeige
des SAP GUIs anzeigen lassen. Er taucht sogar in Transaktion SE11 als View
auf. Allerdings knnen Sie den View dort nicht bearbeiten, da DictionaryViews nicht alle Funktionen untersttzen, die ein CDS-View bietet. Es werden daher nur die Eigenschaften angezeigt, die vom ABAP Dictionary auch
verstanden werden. Verwenden Sie einen CDS-View im Quelltext, knnen
Sie sich Details ber die Elementinfo ((F2)) anzeigen lassen.
Die Ausgabe unseres Views knnen Sie noch mit einer WHERE-Bedingung einschrnken. Fgen Sie dazu hinter der geschwungenen Klammer die folgende
Bedingung ein:
WHERE zproject.loevm = '' AND zissue.loevm = ''.

Aktivieren Sie Ihre nderungen mit (Strg) + (F3), und aktualisieren Sie die
Anzeige der Data Preview. Das Einschrnken der Ausgabe ber eine WHEREBedingung hnelt stark der Syntax aus OpenSQL. Es werden alle gngigen
Vergleichsoperatoren (BETWEEN, =, <>, <, >, <=, >=, NOT und LIKE) untersttzt,
allerdings nicht die Schreibweise ber Schlsselwrter (EQ, LT etc.).
Sie knnen diesen View nun wie eine Tabelle innerhalb einer SELECTAbfrage verwenden oder den neuen SAP List Viewer With Integrated Data
Access (IDA) nutzen. Wir legen einen Report an, um das Ergebnis unseres
Views in einer herkmmlichen ALV-Liste anzuzeigen. Erstellen Sie dazu
einen neuen Report mit dem Namen Z_ISSUE_OVERVIEW, und fgen Sie den
Code aus Listing 5.4 ein. Aktivieren Sie dann den Report, und fhren Sie ihn
mit (F8) aus.
REPORT z_issue_overview.
cl_salv_gui_table_ida=>create( 'ZISSUE_V' )
->fullscreen( )->display( ).
Listing 5.4 Report Z_ISSUE_OVERVIEW

246

Core Data Services

Anders als bei Dictionary-Views knnen Sie auch Aggregationen bilden. Die
Klausel GROUP BY ... HAVING wird genauso untersttzt wie die Aggregationsoperatoren SUM, MIN, MAX, AVG und COUNT. Erstellen wir zum Abschluss einen
neuen CDS-View mit einer Aggregationsfunktion.
1. Erstellen Sie eine neue DDL Source ((Strg) + (N)), und nennen Sie diese
ZCDSV_ISSUE_BY_STATE. Ordnen Sie die DDL Source Ihrem Transportauftrag fr die Aufgabenliste zu.
2. Whlen Sie als Template Define view with parameters, und legen Sie den
View mit Finish an. Vervollstndigen Sie das Listing wie in Abbildung 5.9.

Abbildung 5.9 CDS-View ZCDSV_ISSUE_BY_STATE

3. Fgen Sie nach der geschweiften Klammer eine WHERE-Klausel hinzu:


where zissue.assigned_to = $parameters.ASSIGNED_TO.

Auch fr die Angabe von Parametern knnen Sie die Code-Vervollstndigung verwenden.
4. Markieren Sie die SELECT-Anweisung, und drcken Sie (Strg) + (1), um
den Quick Fix zu ffnen. Whlen Sie den Vorschlag Add Group By
Clause. Ihr Coding sollte nun aussehen wie in Listing 5.5.
@AbapCatalog.sqlViewName: 'ZISSUE_STATE_V'
@EndUserText.label: 'List Issues by their current state'
define view Zcdsv_Issue_By_State
with parameters ASSIGNED_TO : z_assigned_to
as select from zissue {
zissue.state as state,
zissue.assigned_to as Responsible,
count( * ) as Number_of_Entries
}
where zissue.assigned_to = $parameters.ASSIGNED_TO
group by
zissue.state,
zissue.assigned_to
Listing 5.5 CDS-View ZCDSV_ISSUE_BY_STATE

247

5.3

Datenbankzugriffe

5. Aktivieren Sie Ihre nderungen ((Strg) + (F3)), und starten Sie die Data
Preview fr den eben angelegten View.
6. Geben Sie im Feld ASSIGNED_TO einen Namen an, der sich in Ihrem Demodatenbestand befindet.
Neben der Aggregation haben Sie an diesem Beispiel noch zwei weitere
Eigenschaften von CDS-Views kennengelernt:
Zum einen haben wir einen Parameter hinzugefgt und diesen ber eine
WHERE-Bedingung ausgewertet. Die Data-Preview-Funktion ist in der
Lage, diesen Parameter auszuwerten, und fragt ihn bei der Anzeige des
Views ab.
Zum anderen haben Sie gesehen, wie Sie Quick Fix innerhalb einer DDL
Source verwenden knnen. Sie knnen hier im brigen fast alle QuelltextHilfen (wie Zeile lschen, duplizieren etc.) verwenden.
Die Entwicklung der Core Data Services und der Data Definition Language
steht erst am Anfang. Zuknftig ist geplant, auch andere ABAP-DictionaryObjekte mit Hilfe der DDL zu definieren. Damit wre der Aufruf des SAP
GUIs auch bei der Anlage von ABAP-Dictionary-Objekten nicht mehr notwendig. Derzeit gibt es Bestrebungen, Strukturen nativ in die ADT-Entwicklung zu integrieren. Anders als die CDS-Views sollen diese aber sowohl per
DDL als auch in Transaktion SE11 zu bearbeiten sein.

248

Haben Sie sich schon einmal ein bestimmtes Werkzeug gewnscht,


das Ihre Entwicklungsarbeiten vereinfachen wrde? Sie sind Entwickler was spricht also dagegen, sich selbst ein solches Werkzeug zu
bauen? Eclipse ist eine Plattform, die alles mitbringt, um eigene
Erweiterungen zu integrieren.

Erweiterungen der
ABAP Development Tools

Eines der meiner Meinung nach spannendsten Themen der ABAP


Development Tools for SAP NetWeaver (ADT) ist das Entwickeln eigener
Erweiterungen. Eclipse ist von Grund auf flexibel und hoch erweiterbar ausgelegt, daher ist es recht einfach, eigene Erweiterungen (sogenannte Plug-ins)
fr Eclipse zu erstellen. Ob Sie einen einfachen Meneintrag hinzufgen
oder einen komplexen grafischen Editor zur Generierung von Quellcode
erstellen mchten Ihrer Kreativitt sind praktisch keine Grenzen gesetzt.
In den vorangegangenen Kapiteln konnten wir uns sehr gut um die technischen Details der ADT in Eclipse herumdrcken. Wenn Sie aber eigene
Erweiterungen schreiben wollen, bleibt Ihnen ein bisschen Theorie nicht
erspart. Ich beschrnke die theoretischen Ausfhrungen in diesem Kapitel
aber auf ein Minimum, sodass wir schnell wieder mit praktischen Beispielen
fortfahren knnen.
Fr die Erweiterung der ADT gengen reine ABAP-Kenntnisse nicht. Sie
mssen sowohl ABAP- als auch Java-Code schreiben. Das Beispiel in diesem
Kapitel ist einfach gehalten, sodass Sie auch ohne fundiertes Wissen in Java
folgen knnen sollten. Eine Einfhrung in Java kann dieses Buch jedoch
nicht leisten.
Bei der Entwicklung eines eigenen Plug-ins werden Sie auf Begriffe wie Feature, Manifest oder Extension stoen. Ich beginne das Kapitel daher mit einer
kurzen Fhrung durch die Welt der Eclipse-Plug-ins und beschrnke mich
dabei auf die grundlegenden Prinzipien. Sollten Sie bereits Erfahrung mit der
Entwicklung von Eclipse-Plug-ins haben, knnen Sie Abschnitt 6.1, Eclipse

249

Erweiterungen der ABAP Development Tools

Rich Client Platform, berspringen und direkt mit Abschnitt 6.2, ServerKomponente der ABAP Development Tools, beginnen.

6.1

Eclipse Rich Client Platform

Viele verbinden mit Eclipse die Erstellung von Java-Programmen. Dies ist
zwar die populrste Inkarnation der Eclipse Rich Client Platform (RCP), wird
aber dem Wesen von Eclipse bei Weitem nicht gerecht. Der Anwendungskern von Eclipse ist vergleichsweise klein und fr einen Endanwender recht
langweilig. Er stellt nur eine grundlegende Ausfhrungsumgebung bereit.
Sie knnen sich die reine Plattform unter http://download.eclipse.org/eclipse/
downloads/ herunterladen. Sie schlgt derzeit mit ca. 64 MB zu Buche und
stellt Grundfunktionen wie die Workspace-Verwaltung, das Hilfesystem und
eine OSGi-Laufzeitumgebungbereit. Die eigentlichen Funktionen werden
durch Plug-ins implementiert.
Die Java Development Tools (JDT), die Entwicklungsumgebung fr Java, sind
demnach genauso eine Erweiterung zur Eclipse-Plattform wie die ABAP
Development Tools. Auch zur Entwicklung von Eclipse-Erweiterungen gibt
es eine eigene Erweiterung: das Plug-in Development Environment (PDE)
(siehe Abbildung 6.1). Die Eclipse-Plattform bildet zusammen mit den Java
Development Tools und dem Plug-in Development Environment das Eclipse
Software Development Kit (SDK).
Java
Development
Tooling
(JDT)
Plug-in
Development
Environment
(PDE)

Workbench

Eclipse-Plattform

JFace

SWT

Help

Workspace

Team

Plattform-Runtime

Eclipse SDK

Abbildung 6.1 Aufbau des Eclipse Software Development Kits (SDK)

250

Neues
Werkzeug

Neues
Werkzeug

ABAP
Development
Tools
(ADT)

Eclipse Rich Client Platform

6.1.1

Plug-in-System in Eclipse

Das Plug-in-System von Eclipse basiert auf der OSGi Service Platform. OSGi
stand ursprnglich fr Open Services Gateway initative wird heute jedoch
von der OSGi Alliance als Eigenname verwendet. Die OSGi Alliance hat ein
offenes Komponentenmodell spezifiziert, das die Modularisierung von Softwaresystemen auf Basis von Plug-ins und Services ermglicht. Vielleicht
haben Sie im Zusammenhang mit OSGi schon einmal den Begriff Bundle
gehrt, den ich im Kontext dieses Kapitels quivalent zu Plug-in verwende.
Die OSGi Alliance gibt lediglich die Spezifikation des Komponentenmodells
vor, andere Anbieter knnen diese Spezifikation nutzen, um OSGi-Laufzeitumgebungen zu implementieren. In Eclipse kommt Equinox als Laufzeitumgebung zum Einsatz.
Ein Plug-in oder Bundle stellt eine abgegrenzte Funktionseinheit dar. Es
kann Teil der grafischen Oberflche von Eclipse sein oder nur Services anbieten, die von anderen Plug-ins verwendet werden knnen. Dementsprechend
knnen mehrere Plug-ins zusammenarbeiten, um eine Funktionalitt abzubilden. Sie werden in diesem Fall zu Features gruppiert. Features knnen
wiederum ber Update-Seiten ausgeliefert und einzeln installiert werden.
Plug-ins sind lose gekoppelt, damit Eclipse flexibel auf bestimmte Anwendungsflle angepasst werden kann. Diese lose Kopplung wird durch den
Erweiterungsmechanismus erreicht, der von Eclipse (bzw. Equinox) angeboten wird. Plug-ins knnen Erweiterungspunkte definieren (Extension Points),
fr die sich andere Plug-ins registrieren knnen. Auf diese Weise bieten die
Plug-ins Erweiterungen (Extensions) an. Die Extension Points und Extensions
mssen (anders, als in der OSGi-Spezifikation vorgegeben) explizit ber eine
XML-basierte Konfiguration deklariert werden. Diese Technik zieht sich konsequent durch die Eclipse-Plattform und bildet die Grundlage zur Implementierung eigener Plug-ins bzw. ganzer Anwendungen. Um z. B. einen neuen
Eintrag in einem beliebigen Men zu erstellen, steht der Extension Point
org.eclipse.ui.menu zur Verfgung. Mchten Sie einem Befehl einen Shortcut zuweisen, knnen Sie dies ber den Extension Point
org.eclipse.ui.bindings tun. Der Mechanismus ist am ehesten mit Enhancement Spots und Enhancement-Implementierungen bei der ABAP-Entwicklung zu vergleichen.

6.1.2

Anatomie eines Plug-ins

Ein Plug-in ist ein Bndel (oder eben Bundle) aus verschiedenen Bestandteilen, die zusammen ausgeliefert werden. Diese Bestandteile knnen in einer

251

6.1

Erweiterungen der ABAP Development Tools

JAR-Datei (Java-Archiv) zusammengefasst werden. Einer der Bestandteile


eines Plug-ins ist der Quellcode. Eclipse-Plug-ins werden in Java geschrieben. Der Code wird zur Ausfhrung in class-Dateien kompiliert, d. h., anders
als bei ABAP-Programmen sind Sie nicht automatisch in der Lage, den Code
der Erweiterungen einzusehen oder zu debuggen. Allerdings wird zu den
meisten Eclipse-Plug-ins der lesbare Java-Code zusammen mit der Quelltextdokumentation zustzlich bereitgestellt. Haben Sie ein Plug-in-Projekt im
Project Explorer geffnet, finden Sie den Java-Code im Verzeichnis src (siehe
1 in Abbildung 6.2).

Abbildung 6.2 Aufbau eines Eclipse-Plug-in-Projekts

Einen weiteren Bestandteil bilden die Ressourcen, also alles, was ein Plug-in
an zustzlichen Dateien bentigt. Dies knnen Icons, Bilder, Textdateien
oder hnliche Bestandteile sein. In Abbildung 6.2 sehen Sie den Ordner
Icons 2, den Eclipse beim Erstellen eines Plug-ins automatisch anlegt. Sie
knnen weitere Ordner anlegen, um die Ablage zustzlicher Dateien zu organisieren. Achten Sie aber darauf, dass Sie diese Ordner explizit im Manifest
deklarieren mssen, wenn sie Bestandteil des ausgelieferten Plug-ins werden
sollen. Das Manifest ist eine formale Beschreibung des Plug-ins. Es besteht
aus mehreren Dateien 3:
MANIFEST.MF
Die Datei MANIFEST.MF enthlt Informationen zum Plug-in wie den
Namen und die Versionsnummer sowie die Haupt-Klasse (den Activator). Zudem knnen Sie hier die Abhngigkeiten zu anderen Plug-ins definieren, wenn Ihr Plug-in mit anderen Bestandteilen von Eclipse zusammenspielen soll was praktisch immer der Fall ist.
Plugin.xml
In der Datei Plugin.xml spezifizieren Sie, an welchen Stellen Sie Erweiterungen (Extensions) zu anderen Plug-ins einbringen mchten. Zudem

252

Eclipse Rich Client Platform

deklarieren Sie hier Extension Points, um anderen Plug-ins die Mglichkeit zu bieten, Ihre Implementierung zu erweitern.
Build.properties
In dieser Datei werden Informationen zur Erstellung des Plug-ins hinterlegt, z. B. die Verzeichnisse fr den Quelltext und fr Ressourcen, die mit
ausgeliefert werden sollen.
Sie mssen diese Dateien nicht von Hand pflegen, sondern Eclipse bietet
dazu einen grafischen Manifest-Editor (siehe Abbildung 6.3), der sich ffnet,
sobald Sie eine der Manifest-Dateien im Project Explorer ffnen. Der Manifest-Editor bietet fr alle Dateien eigene Oberflchen, die, wie in Abbildung
6.3 unten dargestellt, in einzelne Registerkarten aufgeteilt sind. nderungen
auf den Einstellungsseiten spiegeln sich in den Dateien des Manifests wider
und umgekehrt.

Abbildung 6.3 Manifest-Editor

253

6.1

Erweiterungen der ABAP Development Tools

Sie mssen sich nicht selbst darum kmmern, die Struktur in Abbildung 6.2
fr Ihr Plug-in aufzubauen oder Konfigurationsdateien anzulegen. Dies erledigt Eclipse beim Erstellen eines Plug-in-Projekts automatisch. Zudem bietet
Eclipse eine Reihe von Vorlagen-Plug-ins an, die Sie als Ausgangspunkt fr
eigene Entwicklungen verwenden knnen. In Abschnitt 6.5, Implementierungen im Frontend (Eclipse), werden wir das hier Gelernte anwenden und
ein Eclipse-Plug-in erstellen.

6.2

Server-Komponente der ABAP Development Tools

Man neigt dazu, die ADT auf das zu reduzieren, was sich auf dem EclipseFrontend abspielt, das ist allerdings so, als beschrnke man ein Auto auf die
Karosserie. Die ADT bestehen aus zwei Bestandteilen (siehe Abbildung 6.4):
dem Eclipse-Client, also den Features und Plug-ins, die Sie ber die UpdateSeite installiert haben. Die ADT-Plug-ins basieren auf den in Abschnitt 6.1,
Eclipse Rich Client Platform, beschriebenen Prinzipien.
der Server-Komponente, also dem, was sich unter der Haube abspielt

Werkzeuge

HTTP via RFC

Eclipse-Client

Entwickler
Eclipse-Plattform

ABAP-Backend 1
REST-Services

ABAP-Backend n
REST-Services

Abbildung 6.4 Architektur der ADT (Quelle: SAP)

Sie entwickeln zwar in den ADT in einem Client, der vermeintlich losgelst
von einem (ABAP-)Server existiert, der SAP NetWeaver Application Server
(AS) ist allerdings bei fast allen Operationen fhrend. Ob Sie Quelltext abspeichern, einen Syntaxcheck durchfhren oder den Pretty Printer ausfhren
alle diese Aktionen werden von Eclipse lediglich angefragt, der Server fhrt
die Arbeiten durch und liefert dem Frontend das Ergebnis zurck. Wenn Sie
ein Objekt bearbeiten, wird es zunchst auf dem Server gesperrt. Daher gibt
es keine Probleme bei der Synchronisation von Objekten, wie sie bei einem
Check-in-/Check-out-Szenario auftreten wrden. Die Kehrseite der Medaille

254

Server-Komponente der ABAP Development Tools

ist, dass es nicht mglich ist, die ADT in einem reinen Offline-Szenario zu
betreiben. Allerdings kommt Eclipse sehr gut mit kurzzeitigen Unterbrechungen der Verbindung klar. Es kommt ein intelligenter Caching-Mechanismus
zum Einsatz, der lokale nderungen puffert und zum gegebenen Zeitpunkt
auf den Server bertrgt. Aktionen wie das Aktivieren oder Speichern des
Quelltextes sind zu diesen Zeitpunkten allerdings nicht mglich.
Eclipse kommuniziert ber Remote Function Calls (RFC) mit dem AS ABAP.
Diese Schnittstelle ist nach dem REST-Prinzip (Representational State Transfer)
konzipiert. Objekte werden als Ressourcenbetrachtet, die ber eine eindeutige Identifikation (Unique Resource Identifier, URI) adressiert werden knnen. Operationen auf den Ressourcen werden ber eine Untermenge der im
HTTP-Protokoll spezifizierten Methoden (GET, POST, PUT und DELETE) abgebildet. Um etwa den Quelltext einer Klasse anzufragen, wird eine GET-Anforderung auf die URL http(s)://<Server>:<Port>/sap/bc/adt/oo/classes/<Klassenname>/source/main ausgefhrt. Im Prinzip passiert hier das Gleiche, als
wrden Sie in Ihrem Webbrowser eine Adresse eingeben und sich die entsprechende Seite anzeigen lassen. Der Browser setzt im Hintergrund ebenfalls eine GET-Anforderung fr die angegebene Adresse ab und erhlt die
angefragte Ressource (Webseite). Die empfangene Seite wird geparst und
aufbereitet angezeigt. Eclipse stellt den Inhalt einer HTTP-Anfrage dagegen
z. B. als Quelltext im Editor oder als Inhalt eines Views dar.
Client

ABAP-Server

Resource
Application
A

RFC
Handler
Resource
Application
B

Resource
Controller A1
Resource
Controller A2
Resource
Controller B1
Resource
Controller A2

Datenbank
Datenmodell A
OpenSQL
Datenmodell B

Abbildung 6.5 Interaktion zwischen Client und ABAP-Server (Quelle: SAP)

Abbildung 6.5 zeigt die Interaktion zwischen dem (Eclipse-)Client und dem
AS ABAP schematisch. Zu jeder Ressource, die abgefragt werden kann, gibt
es einen Resource Controller fr den Zugriff der Schnittstelle auf das domnenspezifische Modell. Er kmmert sich darum, dass bei einer GET-Anfrage
der korrekte Datensatz von der Datenbank gelesen und zurckgegeben wird,
sollte dabei allerdings nur koordinative Aufgaben erfllen und nicht direkt
mit der Datenbank kommunizieren, sondern Anfragen mglichst ber ein

255

6.2

Erweiterungen der ABAP Development Tools

Datenmodell stellen. Die bersetzung des gefundenen Datensatzes zur bertragung erfolgt ber einen Content Handler (nicht in der Abbildung). Der
Resource Controller sorgt lediglich dafr, dass der richtige Handler instanziiert und mit den entsprechenden Daten versorgt wird.
Damit Ressourcen (bzw. deren Controller) verwendet werden knnen, mssen sie einer Resource Application zugewiesen werden. Dabei knnen eine
oder mehrere Ressourcen zu einer Applikation zusammengefasst werden. In
unserem Beispiel knnten diese Ressourcen Issues oder Projekte sein. Anfragen werden durch den RFC Handler zunchst an die entsprechende ResourceApplication-Klasse geleitet, die sich darum kmmert, dass der korrekte
Resource Controller gefunden und aufgerufen wird.
Es ist mglich, eigene Ressourcen bzw. Resource Applications zu erstellen.
Dazu steht ein BAdI (BADI_ADT_REST_RFC_APPLICATION) im Enhancement Spot
SADT_REST_RFC_APPLICATION bereit, das erweitert werden kann. Die neuen
Ressourcen knnen dann ber ein Eclipse-Plug-in konsumiert werden.
Eines der Grundprinzipien einer REST-basierten Architektur ist die Entkopplung des Clients vom Server. Zu dieser strengen Trennung gehrt, dass der
Client einer Anwendung keine Vermutungen ber die interne Struktur der
Ressourcen anstellen darf, es sollen also keinerlei URIs fest hinterlegt werden, sondern durch die REST-Applikation selbst bereitgestellt werden. Der
Client bentigt lediglich einen Einstiegspunkt. Dieses Prinzip wird auch als
Hypermedia as the engine of application state (HATEOAS) bezeichnet. Man
kann sich das in etwa so vorstellen, als liefere die Anwendung ihre eigene
Gebrauchsanweisung mit.
Diese Anforderung wird innerhalb der ADT ber den sogenannten Discovery
Service erfllt, der ber einen festen Einstiegspunkt erreichbar ist. Neue
Applikationen (bzw. Ressourcen) werden hier registriert, die Plug-in-Seite
bentigt also nur noch die Adresse des Servers und den festen URI des Discovery Services. Auch der Discovery Service kann ber ein BAdI (BADI_ADT_
DISCOVERY_PROVIDER) erweitert werden.

6.3

Entwicklungsumgebung fr
Erweiterungen vorbereiten

Praktischerweise haben Sie mit Eclipse gleich das beste Werkzeug zur Verfgung, um Eclipse-Plug-ins zu schreiben. Je nachdem, welches Eclipse-Paket
Sie heruntergeladen haben, sollten Sie allerdings zuvor noch einige vorberei-

256

Entwicklungsumgebung fr Erweiterungen vorbereiten

tende Manahmen treffen. Sind Sie den Anleitungen in Kapitel 1, Die ersten Schritte Hallo ADT, gefolgt, haben Sie die Eclipse IDE for Java EE
Developers (PDE) heruntergeladen, mit der Sie auch Plug-in-Projekte anlegen
knnen. Allerdings fehlen in dieser Version viele Features des Plug-in
Development Environments, und Ihnen stehen nicht die Dokumentationen
und die Quelltexte der Eclipse-Plattform-Plug-ins zur Verfgung.
Der einfachste Weg, dem Abhilfe zu schaffen, ist die im Folgenden beschriebene Installation des Features Eclipse SDK (Software Development Kit) ber
den Update-Manager, mit dem alle wichtigen Features der PDE heruntergeladen und installiert werden.
1. Whlen Sie Help Install New Software in Ihrer Eclipse-Umgebung.
2. Whlen Sie unter Work with aus der Liste der verfgbaren Update-Seiten
The Eclipse Project Updates http://download.eclipse.org/eclipse/updates/
4.4 (siehe Abbildung 6.6). Wenn Sie Eclipse Kepler verwenden, whlen
Sie die Update-Seite http://download.eclipse.org/eclipse/updates/4.3.

Abbildung 6.6 Zu installierende Features auswhlen

257

6.3

Erweiterungen der ABAP Development Tools

3. Whlen Sie in der Liste darunter Eclipse SDK, und fahren Sie mit Next fort.
4. Ihnen werden die abhngigen Features und Plug-ins, die mit installiert
werden, angezeigt. Fahren Sie mit Next fort.
5. Lesen und besttigen Sie die Lizenzvereinbarungen, und starten Sie die
Installation mit Finish.
Die Installation kann einige Minuten dauern, kann aber wie blich auch im
Hintergrund ausgefhrt werden. Sie werden benachrichtigt, sobald die Komponenten installiert wurden. Um den Prozess abzuschlieen, ist ein Neustart
der IDE notwendig. Die erfolgreiche Installation erkennen Sie unter anderem daran, dass Ihnen in der Datei plugin.xml nun eine Kontexthilfe bei der
Bearbeitung der Extensions sowie eine integrierte Hilfe zu den Extension
Points zur Verfgung steht. Zudem sind nun die vollstndige SDK-Dokumentation sowie die Quelltexte der Eclipse-Plattform-Komponenten verfgbar.
Um auch in den Genuss einer Dokumentation fr die ADT-Komponenten zu
kommen, mssen Sie noch einmal Hand anlegen. Die Dokumentation des
ADT SDKs besteht aus einem How-to-Guide und der Dokumentation im Format Javadoc). Beides knnen Sie unter http://scn.sap.com/docs/DOC-40894
herunterladen. Merken Sie sich die Stelle, an der Sie die SDK-Dokumentation entpacken, da Sie diese spter noch an die projektspezifischen Bibliotheken anhngen mssen.

6.4

Implementierungen im Backend
(SAP NetWeaver AS ABAP)

Um einen guten Ausgangspunkt fr die Entwicklung Ihres ersten eigenen


ADT-Plug-ins zu haben, bentigen Sie zunchst die entsprechenden Ressourcen auf dem Server. Wir bleiben bei unserem Beispiel und bieten unsere
Issues als Ressourcen an.
Mindestvoraussetzungen
Um das REST-Framework erweitern zu knnen, bentigen Sie mindestens SAP
NetWeaver AS ABAP 7.4 SP2. Beachten Sie auch, dass Sie unter Umstnden den
SAP-Hinweis 1774777 einspielen mssen.

Abbildung 6.7 vermittelt einen Eindruck von unserer geplanten Beispielerweiterung. Neben den Klassen ist dort die Vererbungsstruktur innerhalb
des Frameworks abgebildet, um Ihnen die Orientierung im Framework zu

258

Implementierungen im Backend (SAP NetWeaver AS ABAP)

6.4

vereinfachen. Wir legen zunchst den Resource Controller ZCL_ISSUE_RES_


CTRL an. Dieser sollte von der Klasse CL_ADT_REST_RESOURCE aus dem ADT

SDK erben. Anschlieend legen wir die Resource Application ZCL_ISSUE_


RES_APP an, die von der Klasse CL_ADT_DISC_RES_APP_BASE erbt. Die
Resource Application ZCL_ISSUE_RES_APP tragen wir als Implementierung
des BAdIs BADI_ADT_REST_RFC_APPLICATION ein. Auerdem legen wir in
Abschnitt 6.6, Discovery Service, noch die Klasse ZCL_ISSUE_DISCOVERY an,
um unsere Ressource dem Discovery Service verfgbar zu machen.

IF_HTTP_EXTENSION
CL_ADT_REST_RESOURCE

CL_REST_HTTP_HANDLER

IF_REST_HANDLER
IF_REST_APPLICATION

CL_ADT_RES_APP_BASE

IF_ADT_REST_RFC_APPLICATION

IF_ADT_DISCOVERY_PROVIDER
CL_ADT_DISC_RES_APP_BASE
IF_BADI_INTERFACE

<<Resource Controller>>
ZCL_ISSUE_RES_CTRL

<<Resource Application>>
ZCL_ISSUE_RES_APP

<<Discovery Provider>>
ZCL_ISSUE_DISCOVERY

Abbildung 6.7 Serverseitige Implementierung der Beispielerweiterung

6.4.1

Resource Controller

Um den Resource Controller zu implementieren, legen Sie im Paket Z_


ISSUE_LIST eine neue ABAP-Klasse ber die Tastenkombination (Strg) + (N)
an. Nennen Sie die neue Klasse ZCL_ISSUE_RES_CTRL, und vergeben Sie
eine passende Beschreibung (siehe Abbildung 6.8). Whlen Sie als Superklasse CL_ADT_REST_RESOURCE. Fgen Sie die Klasse Ihrem Transportauftrag
hinzu, und beenden Sie die Anlage mit Finish.
In der Resource-Controller-Klasse knnen Sie Implementierungen zu den
untersttzten HTTP-Methoden anlegen, in unserem Fall gibt es nur die POSTMethode. ber den Request-Parameter haben Sie Zugriff auf den Inhalt der
HTTP-Anfrage. Die POST-Methode soll Anfragen zur Anlage neuer Issues entgegennehmen. Die Daten werden dabei im XML-Format geliefert. Das ADT
SDK bringt einige Hilfsklassen mit, die Sie dabei untersttzen, die Daten aus
der Anfrage zu extrahieren und zur Weiterverarbeitung bereitzustellen, die

259

Erweiterungen der ABAP Development Tools

sogenannten Content Handler. Um mit XML-Strukturen umzugehen, steht


Ihnen der Handler CL_ADT_REST_ST_HANDLER zur Verfgung. Sie bergeben
ihm eine Simple Transformation, und er sorgt dafr, dass Sie Strukturen und
Tabellen in XML umwandeln knnen und umgekehrt.

Abbildung 6.8 Klasse ZCL_ISSUE_RES_CTRL anlegen

Beginnen wir damit, eine solche Transformation fr unsere Issues zu erstellen.


1. Markieren Sie das Paket Z_ISSUE_LIST im Project Explorer.
2. Drcken Sie () + (Strg) + (N), um ein neues Dictionary-Objekt anzulegen.
3. Whlen Sie aus der Liste der verfgbaren Objekte Transformation.
4. Nennen Sie die Transformation Z_ISSUE_ST, und starten Sie die Anlage
mit Finish. Da Transformationen noch nicht durch die ADT untersttzt
werden, springen Sie in ein SAP-GUI-Fenster ab (siehe Abbildung 6.9).
5. Vergeben Sie eine Beschreibung zu Ihrer Transformation, und whlen Sie
Simple Transformation aus der Auswahlliste Transformation Type.

Abbildung 6.9 Simple Transformation Z_ISSUE_ST anlegen

260

Implementierungen im Backend (SAP NetWeaver AS ABAP)

6. Besttigen Sie Ihre Angaben sowie die Auswahl des Pakets Z_ISSUE_LIST,
und hngen Sie die Transformation an Ihren Transportauftrag fr die Aufgabenliste.
7. Wechseln Sie nach erfolgreicher Anlage zur Registerkarte Source Code,
und ersetzen Sie den Inhalt durch Listing 6.1.
<?sap.transform simple?>
<tt:transform xmlns:tt="http://www.sap.com/transformationtemplates"
xmlns:ddic="http://www.sap.com/abapxml/types/dictionary"
xmlns:def="http://www.sap.com/abapxml/types/defined"
xmlns:issues="http://psp.solutions/adt/issues">
<tt:root name="ISSUES" type="ddic:ZISSUE"/>
<tt:template>
<issues:issue tt:ref="issues">
<tt:attribute name="issueid"
tt:value-ref=".ISSUES.ISSUE_ID"/>
<tt:attribute name="name"
tt:value-ref=".ISSUES.NAME"/>
<tt:attribute name="description"
tt:value-ref=".ISSUES.DESCRIPTION"/>
<tt:attribute name="reporter"
tt:value-ref=".ISSUES.REPORTER"/>
<tt:attribute name="assignedTo"
tt:value-ref=".ISSUES.ASSIGNED_TO"/>
<tt:attribute name="type"
tt:value-ref=".ISSUES.TYPE"/>
<tt:attribute name="state"
tt:value-ref=".ISSUES.STATE"/>
</issues:issue>
</tt:template>
</tt:transform>
Listing 6.1 Implementierung der Transformation Z_ISSUE_ST

8. Aktivieren Sie die Transformation mit den Tasten (Strg) + (F3).


Die Transformation kann nun innerhalb eines Content Handlers verwendet
werden. Ersetzen Sie dazu den Inhalt der Klasse ZCL_ISSUE_RES_CTRL durch
den Code aus Listing 6.2.
CLASS zcl_issue_res_ctrl DEFINITION
PUBLIC
INHERITING FROM cl_adt_rest_resource
FINAL
CREATE PUBLIC.

261

6.4

Erweiterungen der ABAP Development Tools

PUBLIC SECTION.
CONSTANTS: c_class_name TYPE seoclsname
VALUE 'ZCL_ISSUE_RES_CTRL',
c_st_transformation TYPE string
VALUE 'Z_ISSUE_ST',
c_root_element
TYPE string
VALUE 'ISSUES'.
METHODS: post REDEFINITION.
PROTECTED SECTION.
PRIVATE SECTION.
ENDCLASS.
CLASS zcl_issue_res_ctrl IMPLEMENTATION.
METHOD post.
DATA:
ls_issue
TYPE zissue,
lr_handler TYPE REF TO if_adt_rest_content_handler,
lr_issue
TYPE REF TO zcl_issue.
* Content Handler anlegen
lr_handler = cl_adt_rest_cnt_hdl_factory=>get_instance( )->get_
handler_for_xml_using_st(
st_name
= c_st_transformation
root_name
= c_root_element
).
* Inhalt des Requests abfragen
request->get_body_data(
EXPORTING
content_handler = lr_handler
IMPORTING
data
= ls_issue
).
* Issue anlegen
CHECK ls_issue is not initial.
lr_issue = NEW zcl_issue( ).
lr_issue->set_issue( is_issue = ls_issue ).
lr_issue->save(
EXCEPTIONS
failed_to_save = 1
OTHERS
= 2
).
IF sy-subrc <> 0.
response->set_status( status = 409 ).
ELSE.
* Daten anhngen
ls_issue = lr_issue->get_issue( ).
response->set_body_data(
content_handler = lr_handler

262

Implementierungen im Backend (SAP NetWeaver AS ABAP)

data = ls_issue ).
response->set_status( status = 201 ).
ENDIF.
ENDMETHOD.
ENDCLASS.
Listing 6.2 Implementierung der Klasse ZCL_ISSUE_RES_CTRL

Die Methode POST wird aufgerufen, wenn ein Client (Eclipse) versucht, eine
neue Ressource anzulegen. Zugriff auf den Inhalt der Anfrage liefert der
Parameter Request. Die Antwort kann ber den Parameter Response beeinflusst werden. Um die XML-Struktur der Anfrage verarbeiten zu knnen,
wird in Listing 6.2 zunchst ein neuer Handler mithilfe der Factory-Klasse
CL_ADT_REST_CNT_HDL_FACTORY angelegt. Sie geben ihm den Namen der
Transformation sowie das Wurzelelement mit (das Sie in der Transformation
angegeben haben), den Rest erledigt die Factory-Klasse. ber diesen Weg
knnen Sie auch andere Content Handler (etwa fr die Verarbeitung von einfachem Text) instanziieren. Dazu stellt die Klasse CL_ADT_REST_CNT_HDL_FACTORY jeweils eigene Methoden bereit. Reichen Ihnen die Mglichkeiten der
vorhandenen Handler nicht aus, ist es prinzipiell auch mglich, einen eigenen Handler zu programmieren.
Den Inhalt des Requests erhalten Sie ber request->get_body_data. Der
generische Rckgabeparameter kann direkt in eine Struktur vom Typ ZISSUE
konvertiert werden. Es folgt die Anlage eines Issues ber die Methoden, die
wir selbst in Kapitel 2, Funktionen der ABAP Development Tools, implementiert haben. Geht bei der Anlage etwas schief, wird ein HTTP-FehlerCode (409) zurckgegeben. Andernfalls wird der Code fr Ressource angelegt
(201) gesetzt. Das Coding zeigt zudem, wie Sie einer Response Daten anhngen knnen. Wir werden die Daten in diesem Beispiel nicht auswerten, das
Vorgehen knnen Sie aber als Beispiel heranziehen. Bei der Anlage einer
Getter-Methode knnen Sie genauso vorgehen, um Daten zurckzuliefern.

6.4.2

Resource-Application-Klasse

Der Resource Controller, den wir geschrieben haben, existiert im Moment


vollkommen losgelst und ist daher noch nicht verwendbar. Sie mssen nun
dafr sorgen, dass Anfragen vom Frontend korrekt weitergeleitet werden.
Um Ressourcen zu registrieren, gibt es ein BAdI, dessen Implementierungen
die Resource-Application-Klassen bilden. Welche Resource-ApplicationKlasse verwendet wird, kann ber einen Filter auf den URI gesteuert wer-

263

6.4

Erweiterungen der ABAP Development Tools

den. Innerhalb der Methode REGISTER_RESOURCE der Implementierung knnen nun einzelne Resource Controller registriert werden.
Legen Sie die Resource-Application-Klasse im Paket Z_ISSUE_LIST an, und
nennen Sie sie ZCL_ISSUE_RES_APP. Geben Sie CL_ADT_DISC_RES_APP_
BASE als Superklasse an. Den Quellcode der Klasse sehen Sie in Listing 6.3.
CLASS zcl_issue_res_app DEFINITION
PUBLIC
INHERITING FROM cl_adt_disc_res_app_base
FINAL
CREATE PUBLIC.
PUBLIC SECTION.
METHODS:
if_adt_rest_rfc_application~get_static_uri_path
REDEFINITION.
PROTECTED SECTION.
METHODS: get_application_title REDEFINITION,
register_resources REDEFINITION.
PRIVATE SECTION.
ENDCLASS.
CLASS zcl_issue_res_app IMPLEMENTATION.
METHOD get_application_title.
result = 'Issue List'.
ENDMETHOD.
METHOD register_resources.
registry->register_discoverable_resource(
EXPORTING
url
= '/issues'
handler_class
= zcl_issue_res_ctrl=>c_class_name
description
= 'Issue in the issue list'
category_scheme = 'http://psp.solutions/adt/issues'
category_term
= 'issues'
).
ENDMETHOD.
METHOD if_adt_rest_rfc_application~get_static_uri_path.
result = '/solutions/psp/issuelist'.
ENDMETHOD.
ENDCLASS.
Listing 6.3 Implementierung der Resource-Application-Klasse ZCL_ISSUE_RES_APP

Aus Platzgrnden habe ich in Listing 6.3 auf die Deklaration von Konstanten
verzichtet. Generell ist es aber eine gute Idee, Festwerte in Konstanten abzulegen. In der Klasse werden drei Methoden implementiert. Die Methode
GET_APPLICATION_TITLE liefert einen sprechenden Titel fr unsere Resource

264

Implementierungen im Backend (SAP NetWeaver AS ABAP)

Application. Die Methode GET_STATIC_URI_PATH liefert als Rckgabewert


den Teil des URIs, der fr alle Ressourcen Ihrer Applikation gelten soll. Dementsprechend werden alle URIs unserer Aufgabenliste mit /solutions/psp/
issuelist beginnen. In der Methode REGISTER_DISCOVERABLE_RESOURCES hinterlegen wir nun noch, dass es eine Ressource namens issue gibt, die unter
der URI /solutions/psp/issuelist/issues zu erreichen ist und deren Resource
Controller ZCL_ISSUE_RES_CTRL heit.
Nun mssen Sie noch die Resource-Application-Klasse als BAdI-Implementierung hinterlegen:
1. ffnen Sie in Eclipse den Enhancement Spot SADT_REST_RFC_APPLICATION
mit der Tastenkombination () + (Strg) + (A).
2. Klappen Sie auf der linken Seite den Knoten BADI_ADT_REST_RFC_APPLICATION auf, klicken Sie mit der rechten Maustaste auf den Eintrag Implementations, und whlen Sie Create BAdI Implementation (siehe Abbildung 6.10).

Abbildung 6.10 Implementierung des BAdIs BADI_ADT_REST_RFC_APPLICATION

3. Es erscheint ein Dialog zur Auswahl einer Erweiterungsimplementierung.


Legen Sie mit (F8) oder dem Anlegen-Button ( ) eine neue Implementierung an.
4. Nennen Sie das neue Enhancement Z_ISSUE_LIST, und vergeben Sie
eine Beschreibung. Legen Sie die Erweiterung mit () bzw. ber einen
Klick auf das grne Hkchen ( ) an. Weisen Sie das Paket Z_ISSUE_LIST
und den passenden Transportauftrag zu.
5. Sie gelangen zurck zur Auswahlliste, in der Z_ISSUE_LIST schon vorgewhlt sein sollte. Besttigen Sie die Auswahl mit () oder dem grnen
Hkchen ( ).

265

6.4

Erweiterungen der ABAP Development Tools

6. Sie gelangen in den Dialog Create BAdI Implementation. Tragen Sie hier
ISSUE_RESOURCE_APPLICATION als BAdI Implementation und ZCL_
ISSUE_RES_APP als Implementing class ein. Vergeben Sie auch eine aussagekrftige Beschreibung, und besttigen Sie mit () oder dem grnen
Hkchen ( ). Abbildung 6.11 zeigt das Ergebnis.

Abbildung 6.11 Enhancement Implementation zur Resource Application

Damit haben wir dem BAdI unsere Resource-Application-Klasse als Implementierung zugewiesen. Nun mssen wir noch dafr sorgen, dass diese
Implementierung nur an geeigneter Stelle greift. Dazu legen wir einen Filter
auf den angefragten URI an:
1. Klicken Sie in der Enhancement-Implementierung Z_ISSUE_LIST doppelt
auf den Eintrag Filter Val. auf der linken Seite (siehe Abbildung 6.11).
2. Wechseln Sie in den nderungsmodus, und klicken Sie auf die Schaltflche Combination zur Anlage einer neuen Filterkombination.
3. Klicken Sie doppelt auf die neue Filterkombination (1 in Abbildung 6.12).
4. Geben Sie im Feld Comparator 2 den Wert CP 2 und als Value 2
/solutions/psp/issuelist/* ein, und besttigen Sie Ihre Eingaben.
5. Der Resource-Application-Klasse wurde automatisch das Interface IF_ADT_
REST_RFC_APPLICATION hinzugefgt, das wir nicht bentigen, da die Klasse
von der Klasse CL_ADT_DISC_RES_APP_BASE erbt. Wechseln Sie in die Klasse
ZCL_ISSUE_RES_APP, entfernen Sie die Interface-Deklaration interface
IF_ADT_REST_RFC_APPLICATION, und aktivieren Sie die Klasse.

266

Implementierungen im Frontend (Eclipse)

Abbildung 6.12 Neuen Filter anlegen

6. Wechseln Sie zurck zur Enhancement-Implementierung Z_ISSUE_LIST,


und prfen Sie die Konsistenz der BAdI-Implementierung ((Strg) + (F2)).
Aktivieren Sie sie anschlieend ((Strg) + (F3)).
Damit haben wir unser Issue als Ressource auf dem Backend bereitgestellt
und knnen beginnen, das Plug-in zu entwickeln.

6.5

Implementierungen im Frontend (Eclipse)

Der einfachste Weg, ein neues Plug-in zu erstellen, ist, mit einer der vielen
Vorlagen zu beginnen, die der Anlage-Assistent von Eclipse bietet. Wir verwenden daher eine Vorlage, die bereits einen Eintrag zum Aufruf eines Kommandos in der Toolbar und im Men von Eclipse erzeugt.
1. Erstellen Sie ein neues Eclipse-Plug-in-Projekt. Im Project Explorer drcken Sie dazu (Strg) + (N) und whlen Plug-In Project im Dialog zur
Anlage.
2. Nennen Sie das Projekt solutions.psp.issuelist. (Die Benennung nach
der Namenskonvention Reverse Domain Naming ist nicht verpflichtend,
hat sich aber bei Plug-ins und Paketstrukturen durchgesetzt.) Achten Sie
darauf, im Bereich Target Plattform die Eclipse Version 3.5 or greater
einzustellen (siehe Abbildung 6.13). Die restlichen Einstellungen knnen
Sie so belassen und mit Next fortfahren.

267

6.5

Erweiterungen der ABAP Development Tools

Abbildung 6.13 Plug-in solutions.psp.issuelist anlegen

3. Im folgenden Dialog Content knnen Sie den Namen Ihres Plug-ins sowie
verschiedene Laufzeitinformationen eintragen bzw. so lassen, wie sie sind.
Achten Sie darauf, dass die Option This Plug-in will make contribution
tot he UI ausgewhlt ist, und dass Sie keine RCP-Anwendung (Rich Client
Application) erstellen (siehe Abbildung 6.14). Fahren Sie mit Next fort.
4. Whlen Sie aus der Liste der verfgbaren Vorlagen Hello, World Command, und fahren Sie mit Next fort.
5. ndern Sie auf der Seite Sample Command Contribution nur den Handler Class Name in CreateIssueHandler (siehe Abbildung 6.15). Schlieen Sie die Anlage mit Finish ab.
Eclipse legt nun ein Plug-in-Projekt an, das Sie so, wie es ist, bereits ausfhren knnen. Klicken Sie dazu mit der rechten Maustaste auf den Projektnamen, und whlen Sie Run As Eclipse Application im Kontextmen.

268

Implementierungen im Frontend (Eclipse)

Abbildung 6.14 Einstellungen zum Inhalt des Plug-ins

Abbildung 6.15 Sample Command Contribution Einstellungen

Debugging
Breakpoints knnen in Java-Quelltext genau wie in ABAP-Quelltext gesetzt werden. Allerdings mssen Sie Ihr Plug-in (so wie jeden anderen Java-Code auch) im
Debug-Modus starten, damit diese bercksichtigt werden. Whlen Sie dazu einfach Debug As Eclipse Application anstelle von Run As Eclipse Application.

269

6.5

Erweiterungen der ABAP Development Tools

Daraufhin startet eine neue Eclipse-Instanz mit einem eigenen Workspace


und dem neuen Plug-in an Bord. Sie finden einen neuen Button in der Toolbar ( ) sowie einen neuen Eintrag Sample Menu im Eclipse-Men. Klicken
Sie auf einen dieser Eintrge, ffnet sich ein Dialogfenster, das freundlich die
Welt grt (siehe Abbildung 6.16).

Abbildung 6.16 Erste Version des Plug-ins Issuelist in Aktion

Wie funktioniert das Plug-in? Zunchst einmal muss Eclipse (bzw. die OSGiPlattform) wissen, in welcher Weise das Plug-in seinen Beitrag leisten wird.
Dies ist im Manifest hinterlegt. Schlieen Sie die Testinstanz von Eclipse,
und kehren Sie zurck zu Ihrem Plug-in-Projekt. Klicken Sie dort auf die
Datei Plugin.xml im Project Explorer (1 in Abbildung 6.17). Sie gelangen zur
Registerkarte Extensions 2 im Manifest-Editor. Hier knnen Sie deklarieren, in welcher Form das Plug-in sich an einer Erweiterung der Eclipse IDE
beteiligen soll. In der Extension org.eclipse.ui.menus 3 registrieren Sie Ihr
Plug-in z. B. dafr, Eintrge in einem Men hinzuzufgen. Welches Men
Sie dabei genau ansprechen, spezifizieren Sie mit einem location URI 4.
Plug-in Selection Spy
Wenn Sie vorhandene Plug-ins der Eclipse-Umgebung erweitern mchten, ist es
ntzlich, einige technische Details zu kennen. Der Plug-in Selection Spy liefert
Informationen ber den Plug-in-Namen, die Location-URIs einzelner Mens oder
die Selektionsmglichkeiten. Sie rufen den Plug-in Selection Spy auf, indem Sie mit
der Maus an die Stelle klicken, ber die Sie mehr erfahren mchten, und dann die
Tastenkombination () + (Alt) + (F1) drcken.

Meneintrgen knnen Kommandos (Commands) zugewiesen werden, die


Sie bei der Extension org.eclipse.ui.commands registrieren knnen. ber
die Erweiterung org.eclipse.ui.handlers kann fr das Kommando dann

270

Implementierungen im Frontend (Eclipse)

eine Handler-Klasse hinterlegt werden. Im Fall unseres Demo-Plug-ins finden Sie die Handler-Klasse (CreateIssueHandler) im Project Explorer im
Verzeichnis src, im Paket solutions.psp.issuelist.handlers.

Abbildung 6.17 Extensions des Plug-ins Issuelist

Die Registerkarte Extensions ist nur eine aufbereitete Ansicht. Die Datei, auf
der sie basiert, knnen Sie auf der Registerkarte plugin.xml einsehen.

6.5.1

Abhngigkeiten

Abhngigkeiten zu anderen Plug-ins werden im Manifest auf der Registerkarte Dependencies definiert. Im Augenblick finden sich hier nur die Plugins org.eclipse.ui und org.eclipse.core.runtime. Um mit dem SAPBackend kommunizieren zu knnen, bentigen Sie noch die Dienste weiterer Plug-ins. Fgen Sie nun alle bentigten Plug-ins auf der Registerkarte
Dependency hinzu:
1. Klicken Sie doppelt auf die Datei plugin.xml (oder MANIFEST.MF), um in
den Manifest-Editor zu gelangen. Wechseln Sie hier zur Registerkarte
Dependencies.
2. Klicken Sie auf den Button Add, um neue Abhngigkeiten zu definieren.
Es ffnet sich der Dialog Plug-in Selection.
3. Suchen Sie mithilfe des Eingabefeldes nach dem Plug-in org.eclipse.
core.resources. Die Ergebnisliste wird erst aufgebaut, wenn Sie etwas in
das Suchfeld eingeben. Markieren Sie das gesuchte Plug-in in der Ergebnisliste, und besttigen Sie mit OK.

271

6.5

Erweiterungen der ABAP Development Tools

4. Verfahren Sie auf die gleiche Weise, um die Abhngigkeiten zu den folgenden ADT-Plug-ins zu definieren:
com.sap.adt.communication
com.sap.adt.compatibility
com.sap.adt.destinations
com.sap.adt.destinations.ui
com.sap.adt.tools.core
com.sap.adt.project.ui
com.sap.adt.project
Die nderungen, die Sie im Manifest-Editor vorgenommen haben, werden
in der Datei MANIFEST.MF gesichert. Dabei handelt es sich um eine Konfigurationsdatei, die Sie prinzipiell auch manuell pflegen knnten. Um sich
den Inhalt direkt anzusehen, wechseln Sie im Manifest-Editor zur Registerkarte MANIFEST.MF.
Neben den Eintrgen im Manifest hat die Definition der Abhngigkeiten
auch dafr gesorgt, dass Ihr Plug-in-Projekt mit den entsprechenden Bibliotheken verknpft wurde. Sie finden smtliche referenzierten Bibliotheken im
Project Explorer unter dem Eintrag Plug-in Dependencies. Anhand dieser
Referenzen knnen Sie innerhalb Ihres Codes auf die Klassen der einzelnen
Plug-ins zugreifen. Allerdings fehlt zunchst die Dokumentation.
Wenn Sie innerhalb Ihres Java-Codes eine Klasse oder eine Methode markieren und (F2) drcken, erhalten Sie wie bei der ABAP-Programmierung auch
die Signatur sowie die vorhandene Dokumentation. Da die ADT-Plug-ins
ohne Dokumentation ausgeliefert werden, erhalten Sie fr unser Plug-in
ber die Element Info nur die Signatur und einen Hinweis auf die fehlende
Dokumentation. Abbildung 6.18 zeigt die Element Info zum Interface IAdtCoreProject aus dem ADT SDK.

Abbildung 6.18 Fehlende Dokumentation zum Interface IAdtCoreProject

272

Implementierungen im Frontend (Eclipse)

Nun kommt die SDK-Dokumentation zum Tragen, die Sie in Abschnitt 6.3,
Entwicklungsumgebung fr Erweiterungen vorbereiten, heruntergeladen
haben. Um diese Dokumentation an eine Bibliothek zu hngen, gehen Sie
wie folgt vor:
1. Klicken Sie mit der rechten Maustaste auf die Bibliothek, und whlen Sie
den Eintrag Properties im Kontextmen.
2. Im folgenden Dialog wechseln Sie in den Bereich Javadoc Location
(siehe Abbildung 6.19).

Abbildung 6.19 Pfad zur Dokumentation verknpfen

3. Geben Sie im Feld Javadoc Location Path den Pfad zu Ihrer heruntergeladenen Dokumentation an, und stellen Sie ber den Button Validate
sicher, dass Sie das richtige Verzeichnis gewhlt haben. Besttigen Sie mit
dem Button OK.
Wenn Sie nun ein Quellcode-Element der entsprechenden Bibliothek markieren und (F2) drcken, sollte Ihnen die Dokumentation wie in Abbildung
6.20 angezeigt werden.
Leider mssen Sie diesen Vorgang fr alle Bibliotheken wiederholen, fr die
die Dokumentation verfgbar sein soll. Ich empfehle Ihnen, die Quelltextdokumentation nur bei Bedarf an die Bibliotheken anzuhngen.

273

6.5

Erweiterungen der ABAP Development Tools

Bibliotheken identifizieren
Es ist nicht immer ganz einfach, herauszufinden, in welcher Bibliothek bzw. in welchem Plug-in sich eine bestimmte Klasse befindet. Einen Anhaltspunkt bietet das
Paket, dem die Klasse zugeordnet ist. Wenn Sie sich ber die Taste (F2) Elementinformationen anzeigen lassen, wird Ihnen wie in Abbildung 6.18 das Paket angezeigt. Anhand der Benennung der Bibliotheken knnen Sie meistens erahnen, in
welchem Paket sich die Klasse befindet. Sicherheit erhalten Sie, indem Sie die Bibliothek im Project Explorer aufklappen und sich die Pakete und Klassen (als classDatei) innerhalb der Bibliotheken anzeigen lassen.

Mit der Dokumentation sind Sie gewappnet, um die Eclipse-Welt mit der
ABAP-Welt zu verknpfen.

Abbildung 6.20 Dokumentation einer ADT-spezifischen Klasse

6.5.2

Verbindung zum Backend

Nun ist es an der Zeit, den SAP NetWeaver Application Server (AS) zu kontaktieren. Das Bindeglied zwischen Eclipse Worbench und AS ABAP ist das
ABAP-Projekt, das auch als Einstiegspunkt dient, um eine Verbindung mit
dem Backend herzustellen. ber das Projekt erhalten Sie Informationen ber
das Zielsystem (Destination ID), mit denen Sie in der Lage sind, REST-Ressourcen anzulegen und auf dem Backend abzufragen.
Oft genutzte Funktionen wie das Beschaffen einer Destination ID knnen Sie
in eine eigene Utility-Klasse auslagern, um den Code leichter wiederverwenden zu knnen:
1. Klicken Sie im Project Explorer mit der rechten Maustaste auf das Paket
solutions.psp.issuelist, und whlen Sie New Class im Kontextmen.

274

Implementierungen im Frontend (Eclipse)

(Achten Sie darauf, dieses Mal eine Java-Klasse anzulegen keine ABAPKlasse.)
2. Geben Sie im Dialog New Java Class IssueUtils als Klassennamen ein.
Die Paketzuordnung wurde bereits mit solutions.psp.issuelist vorbelegt. Lassen Sie die restlichen Einstellungen, wie sie sind, und legen Sie die
Klasse mit Finish an.
3. Fgen Sie den Code aus Listing 6.4 in Ihre Klasse ein:
public class IssueUtils {
// Hlt die aktuelle Selektion
private ISelection selection;
public IssueUtils(ISelection selection) {
this.selection = selection;
}
public String getDestination() {
// ausgewhltes Projekt ermitteln
IProject project =
ProjectUtil.getActiveAdtCoreProject(
this.selection, null, null,
IAdtCoreProject.ABAP_PROJECT_NATURE);
IAbapProject abapProject = (IAbapProject) project
.getAdapter(IAbapProject.class);
// korrekte Anmeldung am System sicherstellen
AdtLogonServiceUIFactory.createLogonServiceUI()
.ensureLoggedOn(abapProject.getDestinationData(),
PlatformUI.getWorkbench().getProgressService());
// Logisches Ziel bestimmen
String destination = abapProject.getDestinationId();
return destination;
}
// URIs fr ein Issue ermitteln
public URI getURI() {
return URI.create("/solutions/psp/issuelist/issues");
}
}
Listing 6.4 Implementierung der Klasse IssueUtils

4. Drcken Sie () + (Strg) + (O), um die fehlenden Importanweisungen zu


generieren. Speichern Sie die Klasse mit (Strg) + (S). (Ein Aktivieren ist bei
Java-Code nicht notwendig. Eclipse kompiliert den Quellcode automatisch
in ausfhrbaren Byte-Code.)

275

6.5

Erweiterungen der ABAP Development Tools

Die Klasse sorgt dafr, dass die Destination ID des aktuell ausgewhlten Projekts gewhlt wird. Dazu holt sie ber die Hilfsklasse ProjectUtil zunchst
das aktuell ausgewhlte ABAP-Projekt, wozu sie die aktuelle Selektion in
Form des Interfaces ISelection bentigt. ISelection ist ein sehr allgemeines Interface, um jegliche Art von Auswahl in Eclipse abzubilden. Konkrete
Ausprgungen sind dabei z. B. die Klassen TreeSelection oder BlockTextSelection. Die Methode getActiveAdtCoreProject() der Klasse ProjectUtlil liefert ebenfalls nur eine sehr allgemeine Klasse IProject zurck. Das
konkrete ABAP-Projekt wird ber einen Adapter bezogen.
Adapter Pattern
Projekte sind nicht das einzige Beispiel fr die Nutzung von Adaptern. Das Adapter
Pattern zieht sich durch die gesamte Eclipse-API. Es sorgt dafr, dass die Kopplung
zwischen den einzelnen Plug-ins so gering wie mglich gehalten wird. IProject
und IAbapProject stehen in keiner direkten Vererbungsbeziehung zueinander.
Die Anweisung abapProject = (IAbapProject)project; ist zwar syntaktisch
korrekt, fhrt aber bei Ausfhrung zu einer ClassCastException. Durch den
Adapter knnen Sie die beiden Klassen aber dennoch ineinander konvertieren.

ber die Klasse AdtLogonServiceUIFactory beziehen Sie den Logon-Service.


Damit stellen Sie sicher, dass Sie authentifiziert sind und auf das ausgewhlte
System zugreifen knnen. Sollte keine gltige Anmeldung vorliegen, wird
ber die Methode ensureLoggedOn() automatisch eine Anmeldemaske angezeigt. ber die Methode abapProject.getDestinationId() erhalten Sie den
Namen des logischen Ziels, mit dem Sie eine Verbindung aufbauen knnen.
Die Adressierung einer Issue-Ressource erfolgt ber einen relativen URI, den
die Methode getURI() liefert. In Abschnitt 6.6, Discovery Service, werden
wir die Implementierung durch den Discovery Service ersetzten. Damit die
Ressource beim Aufruf des Kommandos abgerufen wird, ersetzen Sie den
Code der Methode execute() in der Klasse CreateIssueHandler durch den
Code aus Listing 6.5.
public Object execute(ExecutionEvent event)
throws ExecutionException {
IWorkbenchWindow window = HandlerUtil
.getActiveWorkbenchWindowChecked(event);
ISelection selection = window.getSelectionService()
.getSelection();
IssueUtils utils = new IssueUtils(selection);
String destination = utils.getDestination();

276

Implementierungen im Frontend (Eclipse)

URI issueURI = utils.getURI();


// Anlage des Resource Issue
IRestResource issueResource = AdtRestResourceFactory
.createRestResourceFactory()
.createResourceWithStatelessSession(issueURI,
destination);
try {
//HTTP-Methode absetzen (Issue senden)
IResponse response = issueResource.post(
new NullProgressMonitor(), IResponse.class);
MessageDialog.openInformation(window.getShell(),
"Issuelist", response.getStatusLine());
} catch (RuntimeException e) {
MessageDialog.openInformation(window.getShell(),
"Issuelist", e.getMessage());
}
return null;
}
Listing 6.5 Implementierung der Methode CreateIssueHandler.execute()

Sie knnen das Plug-in nun ber Run As Eclipse Application testen. Achten Sie darauf, dass Sie auch in der Testumgebung ein neues ABAP-Projekt
anlegen mssen. Starten Sie das neue Kommando, werden Sie nach einem
Passwort fr Ihr Projekt gefragt, wenn Sie noch nicht angemeldet waren.
Als Ergebnis der Testausfhrung ffnet sich das Pop-up-Fenster in Abbildung 6.21.

Abbildung 6.21 Resultat des Testaufrufs

Ein interessanter Abschnitt in Listing 6.5 ist das Anlegen der Ressource. ber
die Klasse AdtRestResourceFactory wird eine Ressource mit einer zustands-

277

6.5

Erweiterungen der ABAP Development Tools

losen Session erstellt, d. h., auf dem Server werden zwischen zwei Aufrufen
durch den Eclipse Client keine Daten vorgehalten. Es gibt auch die Mglichkeit, eine zustandsbehaftete Session zu erstellen, dies sollte aber nur in Ausnahmesituationen geschehen, da REST eine zustandslose Kommunikation
vorschreibt.
Mithilfe der erstellten Ressource knnen nun HTTP-Anfragen an den Server
gestellt werden, in unserem Fall ein POST. Das Ergebnis ist vom Typ
IResponse und gibt uns den Zugriff auf die Antwort vom Server. Das Vorgehen knnen Sie auf alle anderen untersttzten HTTP-Methoden anwenden
(GET, PUT, DELETE). In Abschnitt 6.5.3, Datenaustausch, schauen wir uns
auch noch an, wie wir mit Inhalten in der Anfrage bzw. der Antwort umgehen knnen.
Mit der jetzigen Konfiguration knnen Sie bereits die grundstzliche Funktionsweise eines ADT-Plug-ins analysieren. Setzen Sie in der Methode zcl_
issue_res_ctrl->post auf dem ABAP-Server einen Breakpoint. Fhren Sie
Ihr neues Plug-in per Run As Eclipse Application aus. Klicken Sie nun auf
den neuen Toolbar-Button ( ). Nun sehen Sie, wie Ihre Anfrage im
Backend-System ankommt.
Debugging von ABAP- und Java-Quellcode
Vermeiden Sie, gleichzeitig ABAP- und Java-Quellcode zu debuggen, da dies derzeit noch zu Problemen fhrt. Analysieren Sie bei Bedarf zunchst die eine und
dann die andere Seite. Um dieses Problem zu umgehen, starten Sie Ihre Plug-ins
nicht im Debug-Modus, wenn Sie Breakpoints im ABAP-Code gesetzt haben.

Einen berblick ber die Kommunikation zwischen Eclipse und AS ABAP


erhalten Sie mit dem ABAP Communication Log unter Window Show
View Others ABAP Communication Log. Um die Kommunikation
zwischen Plug-in und Server zu visualisieren, mssen Sie das Communication Log zunchst ber den Button Start Logging ( ) in der Toolbar des
Views aktivieren. Daraufhin werden Ihnen in einer Tabelle alle Anfragen der
ABAP Development Tools angezeigt. Mit einem Doppelklick auf die entsprechende Zeile knnen Sie sich Details zu der Anfrage ansehen. Sie sehen den
Header sowie den Inhalt von Request und Response. Abbildung 6.22 zeigt
die Anfrage des Plug-ins issuelist. Da wir noch keinen Content definiert
haben, ist der untere Teil der Detailanzeige leer.
Das ABAP Communication Log ist ein guter erster Anhaltspunkt, um herauszufinden, warum etwas nicht funktioniert. Zudem eignet es sich hervorragend, um bestehende Funktionen der ADT zu analysieren.

278

Implementierungen im Frontend (Eclipse)

Abbildung 6.22 View ABAP Communication Log

6.5.3

Datenaustausch

Die Verbindung zum Server funktioniert nun. Allerdings werden noch keine
Daten versendet. Anders als ABAP besitzt Java keine nativen Sprachelemente, um Tabellen und Strukturen abzubilden, sondern bleibt hier seiner
Natur als objektorientierter Sprache treu. Um ein Issue abzubilden, legen wir
daher eine (Daten-)Klasse an. Dabei halten wir uns an die JavaBean-Spezifikation, nach der alle Felder der Klasse privat (von auen nicht sichtbar) und
nur durch Getter- und Setter-Methoden erreichbar sind. Zudem soll eine
Bean einen parameterlosen Constructor implementieren, um die Klasse zu
initialisieren.
Legen Sie die Datenklasse wie folgt an:
1. Markieren Sie im Project Explorer das Paket solutions.psp.issuelist,
drcken Sie (Strg) + (N), und whlen Sie das Objekt Class.
2. ndern Sie die Paketzuordnung auf solutions.psp.issuelist.beans, und
geben Sie IssueData als Klassennamen an.
3. Legen Sie die Klasse mit einem Klick auf Finish an, und implementieren
Sie sie wie in Listing 6.6.
public class IssueData {
private String id;
private String name;

279

6.5

Erweiterungen der ABAP Development Tools

private
private
private
private
private

String
String
String
String
String

description;
reporter;
assignedTo;
type;
status;

public IssueData(){ }
}
Listing 6.6 Implementierung der Klasse IssueData

4. Setzen Sie den Cursor auf eine der Datendeklarationen, und drcken Sie
() + (Alt) + (S), um in das Quellcode-Men zu gelangen, in dem Sie
Generate Getters and Setters whlen.
5. Im folgenden Dialog markieren Sie alle Felder und klicken auf OK (siehe
Abbildung 6.23). Eclipse generiert nun jeweils eine Getter- und eine SetterMethode fr jedes gewhlte Feld. Speichern Sie die Klasse mit (Strg) + (S).

Abbildung 6.23 Getter- und Setter-Methoden generieren

Streng genommen, msste diese Datenklasse noch das Interface java.


io.Serializable implementieren, um die Bean-Definition vollstndig zu

280

Implementierungen im Frontend (Eclipse)

erfllen. Da wir keine automatische Serialisierung verwenden, ist dies fr


das Beispiel jedoch nicht unbedingt erforderlich.
Als Nchstes mssen Sie dafr sorgen, die Klasse IssueData mithilfe der
Methode POST bertragen zu knnen. Das Bindeglied zwischen der Datenklasse und dem HTTP-Request ist ein Content Handler. Das ADT SDK bietet
dazu das Interface IContentHandler<T> an. Auf dieser Basis knnen Sie einen
eigenen Content Handler fr Issues erstellen:
1. Legen Sie eine neue Klasse IssueDataContentHandler im Paket solutions.psp.issuelist.beans an.
2. Whlen Sie ber den Button Add das Interface com.sap.adt.communication.content.IContentHandler<T>, und fgen Sie es hinzu.
3. Legen Sie die Klasse mit Finish an, und ersetzen Sie den Code durch den
in Listing 6.7. Speichern Sie den Content Handler mit (Strg) + (S).
public class IssueDataContentHandler implements
IContentHandler<IssueData> {
private static final String PREFIX = "issues";
private static final String ISSUE_ELEMENT = "issue";
private static final String ID = "issueid";
private static final String NAME = "name";
private static final String DESCRIPTION = "description";
private static final String REPORTER = "reporter";
private static final String ASSIGNED_TO = "assignedTo";
private static final String TYPE = "type";
private static final String STATUS = "state";
private static final String NAMESPACE = "http://
psp.solutions/adt/issues";
private AdtStaxContentHandlerUtility staxUtility =
new AdtStaxContentHandlerUtility();
@Override
public IssueData deserialize(IMessageBody arg0,
Class<? extends IssueData> arg1) {
// nicht Teil des Beispiels
return null;
}
@Override
public String getSupportedContentType() {
return AdtMediaType.APPLICATION_XML;
}

281

6.5

Erweiterungen der ABAP Development Tools

@Override
public Class<IssueData> getSupportedDataType() {
return IssueData.class;
}
@Override
public IMessageBody serialize(IssueData data,
Charset charset) {
XMLStreamWriter xmlSW = null;
try {
xmlSW = this.staxUtility
.getXMLStreamWriterAndStartDocument(charset,
AdtStaxContentHandlerUtility.XML_VERSION_1_0);
xmlSW.setPrefix(PREFIX, NAMESPACE);
xmlSW.writeStartElement(NAMESPACE, ISSUE_ELEMENT);
xmlSW.writeAttribute(STATUS, data.getStatus());
xmlSW.writeAttribute(TYPE, data.getType());
xmlSW.writeAttribute(ASSIGNED_TO,
data.getAssignedTo());
xmlSW.writeAttribute(REPORTER, data.getReporter());
xmlSW.writeAttribute(DESCRIPTION,
data.getDescription());
xmlSW.writeAttribute(NAME, data.getName());
xmlSW.writeAttribute(ID, data.getId());
xmlSW.writeNamespace(PREFIX, NAMESPACE);
xmlSW.writeEndElement();
xmlSW.writeEndDocument();
} catch (XMLStreamException e) {
throw new ContentHandlerException(null, e);
} finally {
this.staxUtility.closeXMLStreamWriter(xmlSW);
}
return this.staxUtility.createMessageBody(this
.getSupportedContentType());
}
}
Listing 6.7 Implementierung der Klasse IssueDataContentHandler

Beachten Sie, dass wir in unserem Beispiel nur Issues verschicken wollen.
Daher wurde die Methode deserialize() nicht implementiert. Die Klasse
AdtStaxContentHandlerUtility bietet auch einen XMLStreamReader an,
ber den Sie den IMessageBody deserialisieren und den Inhalt in die Bean
IssueData schreiben knnen.

282

Implementierungen im Frontend (Eclipse)

Die aktuelle Implementierung funktioniert nur, wenn alle Attribute der


Klasse IssueData gefllt sind. Andernfalls gibt der XMLStreamWriter einen
Fehler aus. Dies knnen Sie beheben, indem Sie vor dem Aufruf von
xmlSW.writeAttribute(...) prfen, ob der entsprechende Wert ungleich
null ist.
Klasse AdtStaxContentHandlerUtility
Wahrscheinlich werden Sie von Eclipse eine Warnung erhalten, wenn Sie die
Klasse AdtStaxContentHandlerUtility verwenden, da die Klasse offiziell (noch)
nicht fr die allgemeine Verwendung freigegeben ist. SAP behlt sich vor, hier
noch nderungen vorzunehmen. Mit den ADT 2.31 funktioniert das hier gezeigte
Vorgehen allerdings einwandfrei. Ich stelle eine alternative Version dieser Klasse
im Download-Bereich auf www.sap-press.de/3700 bereit, mit der Sie das Beispiel
im Zweifelsfall implementieren knnen.

4. Um den Content Handler zu verwenden, wechseln Sie in die Klasse CreateIssueHandler zur Methode execute(), und fgen Sie die fett gedruckten Teile aus Listing 6.8 ein. Speichern Sie die Klasse mit (Strg) + (S).
//...
IRestResource issueResource = AdtRestResourceFactory
.createRestResourceFactory()
.createResourceWithStatelessSession(issueURI,
destination);
//Dummy-Daten
//Issue-Test-Daten setzen
//Das Befuellen kann spaeter auch durch einen Dialog
//oder einen Wizard erfolgen.
IssueData issueData = new IssueData();
issueData.setId("ADT-001");
issueData.setName("Test Issue");
issueData.setDescription("Issue from ADT");
issueData.setReporter("Roland Reporter");
issueData.setAssignedTo("Andy Assigned");
issueData.setType("DR");
issueData.setStatus("NEW");
//neuen Content Handler erstellen
IssueDataContentHandler ch = new IssueDataContentHandler();
issueResource.addContentHandler(ch);
try {
//Issue-Daten per Post versenden
IResponse response = issueResource.post(
new NullProgressMonitor(), IResponse.class,

283

6.5

Erweiterungen der ABAP Development Tools

issueData);
//...
Listing 6.8 Content Handler verwenden

Wenn Sie Ihr Plug-in nun ausfhren und das Communication Log aktivieren,
sollte Ihnen das Request-Ergebnis aus Abbildung 6.24 angezeigt werden.

Abbildung 6.24 Anfrage mit Daten zu einem Issue

Gratulation, Sie haben nun die Grundlagen zur Erstellung eines ADT-Plugins geschaffen. Wenn Sie nun in die Tabelle ZISSUE schauen, sollten Sie
einen neuen Eintrag mit der ID ADT-001 vorfinden. Beachten Sie, dass ein
erneuter Aufruf des Kommandos im Moment noch mit einem 409-FehlerCode quittiert wird, da Sie versuchen, die gleiche Ressource erneut anzulegen. Um ein weiteres Issue zu erstellen, mssen Sie die Issue-ID in der
Methode execute()von der Klasse CreateIssueHandler ndern. Die Versorgung der Schnittstelle mit Daten ist derzeit noch fest im Quelltext hinterlegt.
An dieser Stelle sollten Sie sich berlegen, wie Sie die Daten eingeben mchten. Eine Mglichkeit wre etwa, den Inhalt aus einer Aufgabe des TasksViews zu bernehmen und in ein Issue zu berfhren. Oder Sie erstellen
einen Assistenten, der Sie bei der Dateneingabe untersttzt. Dazu bentigen
Sie keine weiteren Funktionen des ADT SDKs. Daher mchte ich Sie an dieser Stelle auf die sehr umfangreiche Literatur zur Eclipse Rich Client Platform
bzw. zur Eclipse-Plug-in-Entwicklung verweisen.

284

Discovery Service

6.6

Discovery Service

Wie bereits erwhnt, sollte unser Plug-in keine fest hinterlegten URIs beinhalten. Im Moment haben wir noch einen festen Verweis auf ein Issue in der
Methode IssueUtils.getURI() hinterlegt, die nun durch einen Discovery
Service abgelst werden soll. Bei einem Discovery Service handelt es sich im
Grunde auch wieder um eine Ressource, die Sie ber eine HTTP-Methode
abfragen knnen. Das Ergebnis ist eine Art Inhaltsverzeichnis der verfgbaren Ressourcen inklusive deren URIs.
Einen Discovery Service bauen Sie in zwei Schritten auf:
1. Die Resource Application muss fr die Verwendung im Discovery Service
registriert werden. Dies erfolgt wieder im Enhancement Spot SADT_REST_
RFC_APPLICATION, dieses Mal allerdings im BADI_ADT_DISCOVERY_PROVIDER.
2. Anschlieend erstellen Sie eine neue Resource Application, die den Discovery Service nach auen hin zur Verfgung stellt.
Beginnen wir mit dem Eintragen der Resource Application zu unserem Issue
als Discovery Provider:
1. Stellen Sie sicher, dass Sie sich in der ABAP-Perspektive von Eclipse befinden (
), und ffnen Sie den Enhancement Spot SADT_REST_RFC_
APPLICATION (() + (Strg) + (A)).
2. Klappen Sie den Knoten BADI_ADT_DISCOVERY_PROVIDER auf, klicken Sie
mit der rechten Maustaste auf Implementation, und whlen Sie Create
BAdI Implementation aus dem Kontextmen.
3. Whlen Sie die Enhancement-Implementierung Z_ISSUE_LIST aus, und
fahren Sie mit () fort.
4. Geben Sie als BAdI-Implementierungsnamen ISSUE_DISCOVERY_PROVIDER ein, und vergeben Sie eine passende Beschreibung (siehe Abbildung 6.25).

Abbildung 6.25 BAdI-Implementierung des Issue Discovery Providers

285

6.6

Erweiterungen der ABAP Development Tools

5. Whlen Sie die Klasse ZCL_ISSUE_RES_APP als Implementing Class. Schlieen Sie die Anlage mit () ab.
6. Der BAdI-Mechanismus versucht wieder, das passende Interface in der
angegebenen Klasse einzubringen. Das ist allerdings in unserem Fall nicht
notwendig bzw. sogar falsch. ffnen Sie daher (parallel) die Klasse ZCL_
ISSUE_RES_APP, entfernen Sie in der Klasse die Zeile interfaces IF_ADT_
DISCOVERY_PROVIDER, und aktivieren Sie die Klasse ((Strg) + (F3)).
7. Kehren Sie zum Enhancement Spot SADT_REST_RFC_APPLICATION zurck,
und aktivieren Sie diesen ebenfalls mit (Strg) + (F3).
8. Genau wie bei der Registrierung der Resource-Application-Klasse in
Abschnitt 6.4.2 mssen wir noch einen Filter einrichten. Geben Sie dazu
im Dialog Change Filter Value als Value 1 den Wert /solutions/psp/discovery ein (siehe Abbildung 6.26). Als Comparator 1 whlen Sie =.

Abbildung 6.26 Filter zur BAdI-Implementierung ISSUE_DISCOVERY_PROVIDER anlegen

Schlielich bentigt der Discovery Service selbst noch eine Resource Application. Legen Sie, wie in Abschnitt 6.4.2, Resource-Application-Klasse,
beschrieben, eine neue ABAP-Klasse unter dem Namen ZCL_ISSUE_DISCOVERY_APP und mit der Superklasse CL_ADT_RES_APP_BASE an, und implementieren Sie sie wie in Listing 6.9.

286

Discovery Service

CLASS zcl_issue_discovery_app DEFINITION


PUBLIC
INHERITING FROM cl_adt_res_app_base
FINAL
CREATE PUBLIC.
PUBLIC SECTION.
METHODS:
if_adt_rest_rfc_application~get_static_uri_path
REDEFINITION.
PROTECTED SECTION.
METHODS: fill_router REDEFINITION.
PRIVATE SECTION.
ENDCLASS.
CLASS zcl_issue_discovery_app IMPLEMENTATION.
METHOD fill_router.
router->attach( iv_template = '/discovery'
iv_handler_class = CL_ADT_RES_DISCOVERY=>co_class_name ).
ENDMETHOD.
METHOD if_adt_rest_rfc_application~get_static_uri_path.
result = '/solutions/psp'.
ENDMETHOD.
ENDCLASS.
Listing 6.9 Implementierung der Resource-Application-Klasse ZCL_ISSUE_DISCOVERY_APP

Auch diese Klasse mssen Sie als Resource Application registrieren und
einen Filter einrichten. Legen Sie dazu eine neue Implementierung des
BAdIs BADI_ADT_REST_RFC_APPLICATION in der Erweiterung Z_ISSUE_LIST
an. Nennen Sie die Implementierung ISSUE_DISCOVERY_RESOURCE, und
whlen Sie ZCL_ISSUE_DISCOVERY_APP als implementierende Klasse. Legen
Sie den Filter mit dem Wert /solutions/psp/discovery fr den Value 1 und
den Comparator = an. Laden Sie anschlieend die Klasse ZCL_ISSUE_DISCOVERY_APP erneut, und entfernen Sie die Zeile interfaces IF_ADT_DISCOVERY_
PROVIDER, falls vorhanden. Den Discovery Service knnen Sie fr mehrere
Ressourcen verwenden, solange diese den gleichen statischen URI-Pfad nutzen (in unserem Fall /solutions/psp).
Im letzten Schritt sorgen wir dafr, dass der URI zu unserer Issue-Ressource
nun ber den Discovery Service ermittelt wird. Wechseln Sie dazu in die Perspektive Plug-in Development, ffnen Sie die Klasse IssueUtils, und navigieren Sie zur Methode getURI(). Ersetzen Sie den Inhalt der Methode durch
den Code aus Listing 6.10, und speichern Sie Ihre nderungen.

287

6.6

Erweiterungen der ABAP Development Tools

public URI getURI() {


String destination = getDestination();
IAdtDiscovery discovery = AdtDiscoveryFactory
.createDiscovery(destination,
URI.create("/solutions/psp/discovery"));
IAdtDiscoveryCollectionMember collectionMember =
discovery.getCollectionMember(
"http://psp.solutions/adt/issues",
"issues",
new NullProgressMonitor());
return collectionMember.getUri();
}
}
Listing 6.10 Implementierung der Methode getURI() der Klasse IssueUtils
mit Discovery Service

Wenn Sie nun das Plug-in ausfhren, wird zunchst ein GET-Request zur
Bestimmung der verfgbaren Services (Service Discovery) ausgefhrt. Dies
knnen Sie im ABAP Communication Log nachverfolgen. Als Ergebnis wird
genau der URI ermittelt, der vorher statisch im Quelltext vergeben war, nun
liegt jedoch die Hoheit ber die Generierung des URIs aufseiten des Servers.
Der Client muss so keine Annahmen mehr ber die internen Strukturen
machen.
SAPlink
Sie haben gesehen, wie Sie mithilfe des ADT SDKs eigene Erweiterungen entwickeln knnen. Ich hoffe, dass in naher Zukunft viele Entwickler von dieser Mglichkeit Gebrauch machen, damit ein gewisses Portfolio an Erweiterungen aus der
Community entsteht. Im Moment ist die Anzahl der zustzlich verfgbaren ADTPlug-ins noch sehr berschaubar.
Ein schnes Beispiel fr eine Erweiterung der ABAP Development Tools ist das
SAPlink-Eclipse-Plug-in. Dabei handelt es sich um eine Erweiterung, die die Funktionen des bereits seit Jahren verfgbaren ABAP-Programms SAPlink (http://
www.saplink.org) auch in Eclipse zur Verfgung stellt. Mit diesem Plug-in sind Sie
in der Lage, im Project Explorer Pakete als sogenannte Nuggets zu exportieren
bzw. zu importieren.
Ich stelle Ihnen die vollstndigen ABAP-Beispiel-Codes im Download-Bereich zu
diesem Buch als Nuggets zur Verfgung, sodass Sie diese importieren knnen und
nicht abtippen mssen. Das SAPlink-Eclipse-Plug-in steht Ihnen auf der UpdateSeite http://eclipse.saplink.org zur Verfgung. Sie knnen die Update-Seite ber
Help Install new Software in Eclipse einbinden und das Plug-in installieren. Eine
Anleitung dazu finden Sie auch unter http://eclipse.saplink.org im Bereich files.

288

Anhang
A

Wegweiser durch die ABAP Development Tools ............... 291

Literatur und weiterfhrende Informationsquellen ........... 299

Autor ................................................................................ 303

A
Anhang A

Wegweiser durch die


ABAP Development Tools

Der Einstieg in eine neue Entwicklungsumgebung kann wie der erste Besuch
in einer neuen Stadt sein. Da alles neu ist und man sich nicht zurechtfindet,
ist man froh, wenn man einen Wegweiser findet, der einem Orientierung
bietet, zumindest bis man die ungewohnte Umgebung so weit erkundet hat,
dass man sich selbst zurechtfinden kann. hnlich geht es Ihnen vielleicht
beim Umstieg von der ABAP Workbench auf die Eclipse-Umgebung. Funktionen, die Sie seit Jahren kennen und schtzen gelernt haben, sind auf einmal
verschwunden. Sie wissen nicht, wo sie sich verstecken oder ob sie berhaupt vorhanden sind. Dieser Wegweiser soll Ihnen bei der Orientierung in
der Grostadt Eclipse helfen. Er listet die Namen der wichtigsten Funktionen
aus der ABAP Workbench auf und bersetzt diese so gut wie mglich in
Eclipse. Zu jeder Funktion ist auch der Abschnitt dieses Buches angegeben,
in dem diese Funktion beschrieben wird.

A.1

Grundfunktionen

In Tabelle A.1 sind einige Funktionen der ABAP Workbench aufgelistet.


Soweit es mglich ist, stehen daneben die quivalente Eclipse-Funktion und
die Tastenkombination dazu. Steht eine Funktion in Klammern, gibt es diese
Funktion in dieser Form nicht in der Workbench, weil sie implizit ausgefhrt wird oder nicht notwendig ist.
ABAP-WorkbenchFunktion

Eclipse-Funktion

Tastenkombination

Abschnitt

(Alles aktivieren)

Activate All

() + (Strg) + (F3)

1.4/2.5

(Alles speichern)

Save All

() + (Strg) + (S)

2.5

(Kommentar wechseln) Toggle Comment

(Strg) + (7)

2.4.5

(Object im SAP GUI


ausfhren)

Run Development
Object As ABAP Application

(Alt) + (F8)

1.4

(Zeile nach oben


verschieben)

Move Lines Up

(Alt) + ()

2.4.5

Tabelle A.1 Grundfunktionen in der ABAP Workbench und in Eclipse

291

Wegweiser durch die ABAP Development Tools

ABAP-WorkbenchFunktion

Eclipse-Funktion

Tastenkombination

Abschnitt

(Zeile nach unten


verschieben)

Move Lines Down

(Alt) + ()

2.4.5

Aktivieren

Activate

(Strg) + (F3)

1.4

Alles markieren

Select All

(Strg) + (A)

2.4.4

Anderes Objekt

Open ABAP Development Object

() + (Strg) + (A)

2.8.1

Anlegen

New

(Strg) + (N)

1.4/2.2

Ausfhren

Run As

(F8)

1.4

Block selektieren

Block Select Mode

() + (Alt) + (A)

2.4.4

Im aktuellen
Quelltext ersetzen

Find/Replace

(Strg) + (F)

2.8.1

Im aktuellen
Quelltext suchen

Find/Replace

(Strg) + (F)

2.8.1

Kommentar entfernen Remove Comment

() + (Strg) + ()

2.4.5

Kommentar
hinzufgen

Add Comment

(Strg) + ()

2.4.5

Muster Einfgen

Code Completion

(Strg) + Leertaste

2.3

Einfgen

()

2.3

Einfgen mit Signatur

(Strg) + ()

2.3

Pretty Printer

Format

() + (Strg) + () +
(F1)

2.4.6

Speichern

Save

(Strg) + (S)

1.4

Springe zu Zeile

Go to Line

(Strg) + (L)

Suchen

ABAP Code Search

(Strg) + (H)

2.8.1

Verwendungsnachweis

Where-used-list

() + (Strg) + (G)

2.6

Vorwrtsnavigation

Open Declaration/
Implementation

(Strg) + Klick

2.4.4

Navigate To

(F3)

Wort markieren

Select Word

Doppelklick

2.4.5

Zeile duplizieren

Duplicate Line

(Strg) + (Alt) +
() / ()

2.4.5

Zeile lschen

Delete Lines

(Strg) + (D)

2.4.5

Tabelle A.1 Grundfunktionen in der ABAP Workbench und in Eclipse (Forts.)

292

Views

ABAP-WorkbenchFunktion

Eclipse-Funktion

Tastenkombination

Abschnitt

Zeile nach oben


verschieben

Move Lines up

(Alt) + ()

2.4.5

Zeile nach unten


verschieben

Move Lines down

(Alt) + ()

2.4.5

Tabelle A.1 Grundfunktionen in der ABAP Workbench und in Eclipse (Forts.)

A.2

Views

In Eclipse gibt es eine Vielzahl von Sichten, die z. T. sehr ntzliche Funktionen haben. Manche davon erschlieen sich aber nicht unmittelbar. Tabelle
A.2 gibt Ihnen eine bersicht ber die wichtigsten Views, die in den ABAP
Development Tools verwendet werden.
View

Funktion

Abschnitt

ABAP Communication Log Trace der Kommunikation mit dem


Backend

6.5.2

ABAP Coverage

Anzeige der Anweisungsabdeckung

3.1.2

ABAP Debugger Session

Aufrufstapel im Debugger

3.2.2

ABAP Element Info

Dokumentation und Signatur zu ABAPElementen

2.9

ABAP Internal Table

Anzeigen und ndern interner Tabellen


im Debugger

3.2.2

ABAP Language Help

ABAP(-Schlsselwort-)Hilfe

2.9.4

ABAP Trace Request

Einplanen eines Performance-Traces

3.1.4

ABAP Traces

Anzeige eines Performance-Traces

3.1.4

ABAP Type Hierarchy

Vererbungshierarchie zu einem Objekt

2.2.4

ABAP Unit Runner

Ergebnisanzeige eines ABAP-Unit-Tests

3.1.1

ATC Problems

Anzeige der Ergebnisse aus dem ABAP


Test Cockpit (lokal)

3.1.3

ATC Result Browser

Anzeige zentraler ABAP-Test-CockpitLufe

3.1.3

Bookmarks

bersicht ber Lesezeichen

2.8.2

Breakpoints

bersicht ber gesetzte Break- und


Watchpoints

2.2.2

Tabelle A.2 Wichtige Views der ABAP Development Tools

293

A.2

Wegweiser durch die ABAP Development Tools

View

Funktion

Abschnitt

Debug

Anzeige des Aufrufstapels (Call Stack)

3.2.2

Error Log

Anzeige von Eclipse-Fehlern und


Warnungen

Feature Explorer

Interaktive Tour durch die Funktionen


der ADT

1.4.3

Feed Reader

Abonnement und Anzeige von Fehlern


(ST22) und Systemmeldungen

3.3

History

Lokale nderungshistorie des Quelltextes

2.4.2

Outline

Struktur des aktiven Entwicklungsobjekts 2.2.4/2.4.3

Problems

Fehlerprotokoll (nach dem Aktivieren)

2.2.4

Project Explorer

bersicht ber ABAP-Projekte und die


zugeordneten Objekte

1.3.2/1.4

Properties

Eigenschaften eines Entwicklungsobjekts 2.2.5/4.1

Quick Assist

Anzeige und Beschreibung mglicher


Assistenzfunktionen

2.7

Search

Anzeige von Suchergebnissen

2.8.1

Task List

bersicht ber Mylyn-Aufgaben

2.8.5

Task Repositories

bersicht ber angebundene TicketSysteme

2.8.5

Templates

Vorlagen

2.3.1

Transport Organizer

bersicht ber Transporte

Variables

Anzeige von Variableninhalten im


Debugger

3.2.2

Tabelle A.2 Wichtige Views der ABAP Development Tools (Forts.)

A.3

Zustzliche Funktionen in Eclipse

Zustzlich zu den Funktionen, die eine Entsprechung in der ABAP Workbench haben, gibt es eine ganze Reihe ntzlicher Funktionen, die es in der
SAP-Welt bisher nicht gab (siehe Tabelle A.3).
Funktion

Shortcut

Abschnitt

Quick Fix

(Strg) + (1)

2.7

Rename (Refactor)

() + (Alt) + (R)

3.4

Tabelle A.3 Eclipse-spezifische Funktionen

294

Funktionen des Web Dynpro Code Wizards

Funktion

Shortcut

Abschnitt

Delete Unused Variables

(Alt) + (U)

3.4

Show Key Assist

() + (Strg) + (L)

2.4.5

Show Other View

() + (Alt) + (Q), (Q)

1.3.3

Activate Task

(Strg) + (F9)

2.8.5

Quick Access

(Strg) + (F3)

1.3.4

Next Annotation

(Strg) + (.)

2.4.3

Previous Annotation

(Strg) + (,)

2.4.3

Back to View

(Alt) + ()

2.4.4

Forward (to View)

(Alt) + ()

2.4.4

Last Edit Location

(Strg) + (Q)

2.4.4

Open SAP GUI

(Strg) + (6)

1.4

Dictionary-Objekt anlegen

() + (Strg) + (N)

2.2.2

Neue Zeile einfgen (unabhngig von der


Cursor-Position)

() + ()

Zwischen Editor-Registerkarten wechseln

(Strg) + (F6)

2.5

Neue Zeile oberhalb einfgen

() + (Strg) + ()

Zwischen Views wechseln

(Strg) + (F7)

Zwischen Perspektiven wechseln

(Strg) + (F8)

2.5

Editor maximieren

(Strg) + (M)

Tabelle A.3 Eclipse-spezifische Funktionen (Forts.)

A.4

Funktionen des Web Dynpro Code Wizards

Funktion

in Eclipse

Beschreibung

Kontext auslesen

Code-Vervollstndigung
((Strg) + Leertaste)

Kontextoperationen sind
direkt im Quelltext
ber Tastenkombination
erreichbar.

Kontext setzen
Kontext anhngen
Methodenaufruf im
aktuellen Controller
Wird ber Code-Vervollstndigung direkt
aus dem Quelltext ausgefhrt.

Tabelle A.4 Funktionen des Web Dynpro Code Wizards

295

A.4

Wegweiser durch die ABAP Development Tools

Funktion

in Eclipse

Beschreibung

Methodenaufruf
im verwendeten
Controller

Code-Vervollstndigung
((Strg) + Leertaste) und
Template

Wird ber Code-Vervollstndigung direkt aus dem


Quelltext ausgefhrt. Die
Initialisierung des verwendeten Controllers kann ber
ein Template erfolgen.

Verwendete Komponente instanziieren

Template (instantiateUsedComponent)

einfaches Template, das


lediglich den Verwendungsnamen bentigt

Ereignis auslsen

Template (firePlug)

Template zum Auslsen der


Navigation aus einem View
heraus

Meldung erzeugen

Template (generateMessage) und Code-Vervollstndigung ((Strg) + Leertaste)

Das Template generiert den


Rahmen-Code. Die einzelnen Methoden des Message
Managers knnen per CodeVervollstndigung ausgewhlt werden.

Textsymbol-Zugriff

Code-Vervollstndigung
((Strg) + Leertaste)

Code-Vervollstndigung der
Methode get_text der
Assistance-Klasse. Alternativ
ber ein eigenes Template.

Pop-up erzeugen

nicht verfgbar

Nur ber eigenes CodeTemplate mglich. Ein


Beispiel steht auf www.
sap-press.de/3700 zum
Download bereit.

Portal-Integration

Template (portalIntegration) und Code-Vervollstndigung ((Strg) + Leertaste)

Template zur Beschaffung


des Portal Managers.
Auswahl der Methode
dann ber Code-Vervollstndigung.

Personalisierung

Template (personalization) und Code-Vervollstndigung ((Strg) + Leertaste)

Template zur Beschaffung


des Personalisierungsmanagers. Auswahl der Methode
dann ber Code-Vervollstndigung.

Tabelle A.4 Funktionen des Web Dynpro Code Wizards (Forts.)

296

Web-Dynpro-Entwicklungsobjekte im Project Explorer

A.5

Icon

Web-Dynpro-Entwicklungsobjekte im
Project Explorer
Beschreibung

Icon

Beschreibung

Web-Dynpro-Komponente

Interface View

Komponenten-Controller

FPM-KomponentenKonfiguration

Window-Controller

FPM-Anwendung

View-Controller

FPMAnwendungskonfiguration

Interface-Controller

Komponenten-/
Anwendungskonfiguration

Custom-Controller

Implementierte Interfaces

Web-Dynpro-Anwendung
Tabelle A.5 Web-Dynpro-Entwicklungsobjekte

297

A.5

B
Anhang B

Literatur und weiterfhrende


Informationsquellen

Im Folgenden sind einige hilfreiche Bcher und Internetseiten mit ntzlichen Informationen thematisch geordnet zusammengestellt.
ABAP Development Tools
Availability Matrix
http://scn.sap.com/community/abap/eclipse/blog/2013/06/05/
adt-feature-availability-matrix-for-as-abap-releases
Backend Guide
http://help.sap.com/download/netweaver/adt/SAP_ADT_Configuration_
Guide_Backend_en.pdf
Tutorials
http://scn.sap.com/docs/DOC-31815
Installationshinweise
http://service.sap.com/sap/support/notes/1718399
Online-Hilfe der ABAP Development Tools
http://help.sap.com/saphelp_nw74/helpdata/en/4e/c0ca886e391014ad
c9fffe4e204223/frameset.htm
ADT-Links
http://scn.sap.com/community/abap/eclipse/blog/2013/05/10/how-adtlinks-change-the-way-you-work
ABAP Objects
Franz, Thorsten; Khnhauser, Karl-Heinz: Discover ABAP. Der praktische Einstieg. Bonn: SAP PRESS 2011.
Keller, Horst; Krger, Sascha: ABAP Objects. ABAP-Programmierung
mit SAP NetWeaver. Bonn: SAP PRESS 2006.
ABAP Test Cockpit
ABAP Test Cockpit an Introduction to SAPs new ABAP Quality
Assurance Tool, SCN-Blog von Christopher Kstner
http://scn.sap.com/docs/DOC-31773
SAP-Hilfe
http://help.sap.com/saphelp_nw70ehp2/helpdata/de/62/
c41ad841554516bb06fb3620540e47/content.htm

299

Literatur und weiterfhrende Informationsquellen

ABAP Doc
SAP-Hilfe
http://help.sap.com/abapdocu_740/en/abendoccomment.htm
ABAP Doc, SCN-Blog von Michael Schneider
http://scn.sap.com/docs/DOC-40872
Core Data Services
New Data Modeling Features in SAP NW ABAP 7.4 SP5, SCN-Blog
von Christiaan Edward Swanepoel
http://scn.sap.com/community/abap/eclipse/blog/2014/02/04/new-datamodeling-features-in-abap-for-hana
Code Push Down for HANA Starts with ABAP Open SQL, SCN-Blog
von Sundaresan Krishnamurthy
http://scn.sap.com/community/abap/hana/blog/2014/09/26/code-pushdown-for-hana-from-abap-starts-with-open-sql
SAPUI5
Antolovic, Miroslav: Einfhrung in SAPUI5. Bonn: SAP PRESS 2014.
SAP Gateway
Bnnen, Carsten; Drees, Volker; Fischer, Andr; Heinz, Ludwig; Strothmann, Karsten: OData und SAP Gateway. Bonn: SAP PRESS 2014.
Eclipse
Eclipse
https://eclipse.org/
Mylyn
http://eclipse.org/mylyn/
Mylyn, untersttzte Erweiterungen
http://wiki.eclipse.org/Mylyn/Extensions
Plug-in-Entwicklung (Allgemein)
Tutorial
http://www.vogella.com/tutorials/EclipsePlugIn/article.html
Documentation zu Eclipse Luna
http://help.eclipse.org/luna/index.jsp
Plug-in-Entwicklung (ABAP Development Tools)
berblick ber das ADT SDK
http://scn.sap.com/community/abap/eclipse/blog/2013/05/10/
first-version-sdk-for-abap-development-tools

300

Literatur und weiterfhrende Informationsquellen

Anleitung zur Entwicklung von ADT-Plug-ins


http://scn.sap.com/docs/DOC-40668
Tutorial zur Entwicklung von ADT-Plug-ins
http://scn.sap.com/community/abap/eclipse/blog/2014/08/27/creating-aabap-in-eclipse-plug-in-using-the-adt-sdk
SAPlink
Projekthomepage fr SAPlink
http://www.saplink.org
Projekthomepage fr SAPlink for ABAP in Eclipse
http://eclipse.saplink.org
Amazon Web Services
Dokumentation zur Amazon Elastic Compute Cloud
http://aws.amazon.com/de/documentation/ec2/
Testen
Vigenshow, Uwe: Objektorientiertes Testen und Testautomatisierung
in der Praxis. Heidelberg: dpunkt 2004.

301

C
Anhang C

Autor

Daniel Schn ist seit 2014 Partner bei PSP Solutions


in Bergisch Gladbach, wo er auch als SAP-Entwickler
und -Berater ttig ist. Er studierte Software Engineering an der Fontys Hogeschool Techniek en Bedrijfsmanagement in Venlo. 2008 schloss er diesen Studiengang erfolgreich ab. Ab 2008 arbeitete er bei der
Itelligence AG in Kln, wo er auch seine Abschlussarbeit ber serviceorientierte Architekturen mit SAP
NetWeaver CE schrieb. Danach war er schwerpunktmig im Bereich Web Dynpro ABAP ttig und entwickelte Softwarearchitekturen mit ABAP Objects. Spter weitete er dieses Ttigkeitsfeld auch auf
neue UI-Technologien von SAP, insbesondere SAPUI5, aus.
2012/2013 war Daniel Schn Mitglied beim Design Partner Council Web
Dynpro ABAP in Eclipse von SAP. Die Teilnehmer des Design Partner Councils konnten schon vorab die neuen Web-Dynpro-Tools fr Eclipse verwenden und aktiv Verbesserungsvorschlge in den Entwicklungsprozess einbringen. Seitdem setzt Daniel Schn Eclipse nicht nur zur Java-, sondern auch zur
ABAP-Entwicklung ein.

303

Index
@AbapCatalog.Buffering.status 244
@AbapCatalog.Buffering.type 244
@AbapCatalog.sqlViewName 244
@ClientDependent 244
@EndUserText.label 244

A
ABAP Communication Log 278, 288
ABAP Coverage 170
ABAP Debugger 181
ABAP Development Tools 21
Arbeitsoberflche 120
Dokumentation 24
Einstellungen 98
Erweiterungen 249
Funktionen 71
Installation 54
Navigation 114
SDK 258
Systemvoraussetzungen 22, 52
ABAP Dictionary 79, 94, 116, 246
ABAP Doc 153
Anzeige 156
Formatierung 154
Sonderzeichen 155
ABAP Element Info 153
ABAP in Eclipse ABAP Development
Tools
ABAP Internal Table 184
ABAP Language Help 160
ABAP Objects 86
ABAP Runtime Error 189
ABAP Source Search 140
ABAP Test Cockpit 172
ABAP Trace 179
ABAP Unit 162
ABAP Unit Runner 165
ABAP Workbench 13, 58
Editor 105
Funktionen 105
Vergleich mit Eclipse 105
Zeilennummerierung 105
ABAP-Dictionary-Objekt 16, 77, 79
ABAP-Link 147
ABAP-Projekt 61, 274
ABAP-Projekt anlegen 63

ABAP-Testklasse 162
Access Key ID 32
ACT 231
Activator 252
Adapter Pattern 276
ADT ABAP Development Tools
ADT-Debugger 183
ADT-Link 147, 205
Aggregation 240, 247
aktivieren 123
Alias 197
ALV-Vorlage 104
Amazon EC2 28
Amazon Elastic Compute Cloud 28
Amazon Machine Images 28
Amazon Web Services 28, 29
Benutzer 30, 32
Identity and Access Management 30
Regionen 28
AMI 28
nderungshistorie, lokale 108
Annotation 109, 127, 145
DDL 244
Textannotation 110
Anweisungsabdeckung 170
Anzeigemodus 123
Application Creation Tool 231
Applikationstabelle 80
Arbeitsvorrat organisieren 137
ATC 172
ATC Problems 177
ATC Result Browser 176
Attribut 86
anlegen 206
hinzufgen 203
Typ 203
Aufgabe
aktivieren 150
anlegen 151
definieren 146
exportieren 152
importieren 152
kategorisieren 151
Kontext 150
lokale 150
teilen 152
Unteraufgabe 151
verwalten 146, 150

305

Index

Aufgabenliste 71
Aufrufstapel 165, 185
Ausnahme 85
Ausnahme hinzufgen 208
ausschneiden 114
Autovervollstndigung 96, 126
AWS Amazon Web Services
Azure 28

B
Background 126
BAdI
BADI_ADT_DISCOVERY_PROVIDER
256, 285
BADI_ADT_REST_RFC_
APPLICATION 256
Bearbeitungsmodus 123
Benutzer 23
Benutzergruppe 30
Benutzerpflege 23
Berechtigung 23
Bezeichner 118
Bibliothek 272
Bibliothek, Dokumentation anhngen 273
Binding 220
Blockmodus 116
Bookmark 143
Bookmarks-View 144
Breadcrumb 107
Breakpoint 182, 187, 269
Annahme 189
Ausnahme 189
Breakpoints-View 184
Bug Report 72
Bugzilla 152
Build.properties 253
Building Block 231
Bundle 251
Business Function aktivieren 141

C
Caching-Mechanismus 255
CDS 16, 242
CDS-View definieren 244
Change Request 72
Check Variant 175
Class Builder 86

306

Class Builder, formularbasierter 86


CLI 28
Cloud Computing 27
Code Assist 96
Code Coverage 169
Code Element Info 157
Code Folding 106
Code Inspector 175
Code kompilieren 58
Code Pushdown 240, 242
Code-Block 106
Code-Deployment 58
Code-Formatierung 117
Code-Vervollstndigung 96, 203
aktivieren 97
verwenden 97
Code-Vorlage 98, 209
ABAP Workbench 104
erstellen 98, 99
interaktive 102
Command 270
Command-Line Interface 28
Community 17
Constructor 89
Container 216
Content Handler 256, 260, 281
Context 202
Controller 201
Copy and Paste 193, 197
Core Data Services 16, 242

D
Data Browser 235
Data Definition Language 16, 242, 245
Data Definition Language,
Annotation 244
Data Dictionary ABAP Dictionary
Data Element 78
Data Preview 235
Data Preview, Filter 236
Dateisystem, semantisches 61
Datenbank
Tabelle 80, 235
Views 242
Zugriff 235
Datendeklaration 94
Datendeklaration, Formatierung 131
Datenelement anlegen 78
Datenklasse 279
Datentyp 78

Index

Datentyp anlegen 78
DDIC ABAP Dictionary
DDL 16, 242
DDL Source 243
Debugger 182
Debugging 181, 269
Debug-Modus 183, 269
Debug-Perspektive 183
Debug-View 183
Demoszenario 71
Deployment 30, 58
Destination ID 274
Developer Studio 14, 199
Development Request 72
Dictionary-Objekt ABAP-DictionaryObjekt
Direktzugriff 122
Discovery Service 256, 285
Dokumentation 24, 153
anzeigen 156
importieren 158
Vorlage 104
Domne anlegen 16

E
Eclipse
Community 17
IDE for Java EE Developers 54
Installation 53
Kepler 53
Workbench 58
Workbench-Datei 61
Eclipse Debugger 182
Eclipse Foundation 14
Eclipse Rich Client Platform 250
Eclipse SDK 250, 257
Eclipse Software Development Kit
250, 257
Editiermodus 123
Editor 62, 104, 106
Editor, ABAP Workbench 105
Einfgen 114
Elastic Cloud Computing 28
Enhancement Spot 251, 285
Entwicklungsobjekt 73
aktivieren 123
finden 137
ffnen 138
speichern 123

Entwicklungsumgebung,
Vergleich 13, 291
Equinox 251
Ereignisbehandler 208, 226
Erweiterung 249, 270
Erweiterungspunkt Extension Point
Event Handler 226
Extension 249, 270
Extension Point 251
org.eclipse.ui.bindings 251
org.eclipse.ui.menu 251

F
Favorit 77, 186
Favoritenpaket 66
Feature 251
Feature Explorer 69
Feed 190
Feed Reader 189
Feed Reader, Filter 190
Fehler 161
Fehlerbehebung 161, 169
Fehlermeldung 127
Fehlerprotokoll 90
Feld anlegen 89
Filterfunktion 125
Filter-Pattern 238
Fixture-Methode 163, 164, 166
Flexible UI Designer 232
Floorplan 232
Floorplan Manager 231
Floorplan-Konfiguration 232
Floorplan-Manager-Anwendung
anlegen 231
FLUID 232
Format 117
Format einrichten 117
Function Builder 85
Funktionsbaustein 82
anlegen 82, 135
Deklaration 85
functionModuleParameter 86
Syntax 85
Funktionseinheit 251
Funktionsgruppe 135
Funktionsgruppe anlegen 82

307

Index

H
Hallo-Welt-Programm 67
HANA SAP HANA
HATEOAS 256
Help Contents 160
Hilfe 160
Hilfetext 24
Hintergrundprozess 126
History 108
Hostvariable 245
HTTP-Link 205
Hypermedia as the engine of application
state 256

I
IAM 30
IAM-Benutzer 30
ICF 24
ICF-Service 24, 230
IDA 246
IDE 13
Image 30
Inbound-Plug 226
Include anlegen 94, 137
Inner Join 244
Installationsvoraussetzung 21
Integrated Development
Environment 13
Integrierte Entwicklungsumgebung 13
Interface 196
anlegen 197
IContentHandler<T> 281
ISelection 276
View 230
Internet Communication Framework 24
IRestResource 255, 274
Issue 72
Kommentar 72
List 71
Status 72

J
Java 249
Java Development Tools 250
Java Runtime Environment 52
JavaBean 279
JDT 250

308

Join 240, 244


JRE 52

K
Kardinalitt 203
Kettensatz 131
Klasse 196
anlegen 86
CL_ABAP_UNIT_ASSERT 163
definieren 86
IProject 276
testen 162
Klassen-Editor
formularbasierter 86
quelltextbasierter 87
Knoten
anlegen 202
Unterknoten 203
Kohsion 165
Kommentar 142, 153
Kommentarzeichen entfernen 172
Kontext
anlegen 202
Binding 222
Editor 221
Mapping 214
Men 62
Sensitivitt 131
kopieren 114
Kopplung, lose 165

L
Laufzeitanalyse 179
Laufzeitfehler 189
Laufzeitumgebung 250, 251
Layout 216
Layout-Editor 216
Layout-Editor, Kopierfunktion 224
Layout-Manager 216
Left Outer Join 244
Lesezeichen 143
Lesezeichen anlegen 144
Lineal 109
Link 147
Link with Editor 68, 120
Linux 43
Local History 108
Logon-Service 276

Index

Logon-Ticket 22
lose Kopplung 14
Lsung 38
Lsung, Instanz 43

M
Mac 43
Manifest 252, 270
Dateien 252
Editor 253
MANIFEST.MF 252
Mapping 214
Marker 89, 146
Metadaten 146
Methode 86
anlegen 127
CLASS_SETUP 164
CLASS_TEARDOWN 164
definieren 206
extrahieren 193
Implementierung 89, 90, 127, 128
kommentieren 154
SAVE 127
SETUP 164, 166
TEARDOWN 164, 166
umbenennen 193
Microsoft Remote Desktop 43
Mini SAP 44
Mock-Daten 165
Modus, maximale Anzahl 118
Mylyn 150
lokale Aufgaben 150
Task Repository 152

N
Namenskonvention 87
Navigate to Vorwrtsnavigation
Navigation 62, 135
Navigator 60
NWDS 14, 199

O
Object Set 175
Objekt 137
Objektliste 144

Objektorientierung 86
On-Demand 27
On-Premise 27
OpenSQL 238, 240, 245
Operator 141
OSGi 250
Alliance 251
Service Platform 251
OTR 104
OTR-Text 220
Outbound-Plug 226
Outline-View 91, 135, 208, 216
Overview Ruler 109, 144

P
Paket anlegen 74
PDE 250
Performance 179
Performance Profiler 179
Performance-Trace 179
Aufrufstruktur 179
Datenbankzugriff 180
Trefferliste 179
Zeitachse 180
Perspektive 62, 65
erstellen 122
personalisieren 122
wechseln 63
zurcksetzen 122
Platzhalter 138
Plug 226
Plug auslsen 227
Plug-in 14, 150, 250, 251
Abhngigkeiten 271
Aufbau 251
entwickeln 249
Projekt 254
Projekt anlegen 267
Selection Spy 270
testen 277
Vorlage 254, 267
Plug-in Development Environment
250, 257
Plugin.XML 252, 270
Port 48
Preferences 98
Pretty Printer 117
Problems-View 90
Produktiv-Code 125

309

Index

Programm
anlegen 66
erstellen 92
Hallo Welt 67
Project Explorer 60, 120
Projekt 59
projektbezogene Einstellung 117
Properties-View 202, 216
Prozedurabdeckung 171
Prfvariante 177

Q
Qualittssicherung 172
Quelltext
Abdeckung 170
Editor 104, 106
Einrckung 118
Formatierung 117
Kommentar 142
Link 147
Quick Access 63
Quick Assist 128, 134
Quick Diff 107
Quick Filter 238
Quick Fix 126, 127, 134, 154, 193
Quick Outline 113

R
RCP 250
Rechtschreibprfung 111
Refactoring 192, 198
Registerkarte 114
Anzeige einstellen 119
schlieen 82
bersicht 123
Regressionstest 173
Remote Desktop 48
Client 44
Connection 43
Remote Function Call RFC
Remote-Zugriff 48
Renaming 193
Report
erstellen 92
RS_ABAP_SOURCE_SCAN 143
SRIS_SOURCE_SEARCH 141
Reporter 72

310

Resource Application 256, 285, 286


Resource Controller 255, 259
Resource-Application-Klasse 263
Ressource 252, 255, 285
REST 14, 255, 256
REST-Ressource 255, 274
Restrukturierung 192
Reverse Domain Naming 267
RFC 14, 24, 255
RFC Handler 256
Right Outer Join 244
Rolle 23
SAP_BC_DWB_ABAPDEVELOPER 23
SAP_BC_DWB_WBDISPLAY 23

S
SAP Cloud Appliance Library 28, 30
Konto 35
Lsungen 38
SAP Community Network 17
SAP GUI 14, 52
SAP GUI installieren 48
SAP HANA 38, 140, 242
SAP List Viewer With Integrated Data
Access 246
SAP MaxDB 38
SAP NetWeaver Application Server
22, 274
SAP NetWeaver Developer Studio
14, 199
SAP_ALL 47
SAPlink 17, 288
SAP-Server, Remote-Zugriff 48
SAPUI5 15, 199
Schlsselwort 118
Screen Painter 16
Search-View 124, 140
Secret Access Key 32
SELECT DISTINCT 238
Select Options 94
semantisches Dateisystem 61
Service Discovery 288
Session
zustandsbehaftete 278
zustandslose 278
SFS 61
Sichtbarkeit 195
Signatur 97
Simple Transformation 260
Single Sign-on 22

Index

Sonderzeichen 155
Source Library 88
Speichern 123, 127
Sperrkonzept 123
Sprungmarke 144
SQL-Abfrage 240
SQL-Abfrage, Ausfhrungsprotokoll 241
SQL-Konsole 240
Stack 165
Standardsuche 140
Stempel 143
Struktur anlegen 16
Suche 126, 137
ABAP Source Search 140
erweiterter Suchdialog 139
Filter 142
Hilfe 126
Syntax 85
Syntaxprfung 111
Systembibliothek 66
System-ID 119
Systemmeldung 189

T
Tab 123
Tabelle
anlegen 225
Anzeige, allgemeine 235
TABLES-Parameter 85
Tag 104
Task 146
Task List 150
Tasks-View 146
Tastenkombination 114, 291
TCP-Port 49
Template 98, 209, 296
Templates-View 98, 163
Testabdeckung 169
Testbarkeit 165
Test-Code 125
Testdaten 165
Testdaten-Gltigkeit 168
Testen 162
Testfall 166
Test-Fixture 164
testgetriebene Entwicklung 198
Testklasse 162
anlegen 163
Template 163
Testmethode 163

Testqualitt 170
Testumgebung 85
Textannotation 110
Textsuche 140
Timeout 187
Top-Include 94
Transaktion
ATC 173
CODE_SCANNER 143, 146
SAT 179
SCI 175
SE11 78
SE16 235
SE16N 235
SE24 86
SE30 179
SE37 85
SE80 144
SECSTORE 45
SFW5 141
SICF 24, 149
SLICENSE 44
SOTR_EDIT 220
ST22 189
SU01 23
Transformation anlegen 260
Transparent Container 218

U
bergabeparameter 226
UI-Element
anlegen 217
CTable 225
Eigenschaften 216
Table 225
TransparentContainer 217
verschieben 224
Umbenennung 193
Umlaut 155
Union 244
Unique Resource Identifier URI
Unit-Test 162, 192
durchfhren 164
Ergebnis 165
Update-Seite 54, 251
URI 255, 266, 285
URI generieren 288
User Experience 17
Utility-Klasse 274

311

Index

Variable 102
Name 103
umbenennen 193
Variables-View 184
Vereinigungsmenge 244
Versionshistorie 108
Vertical Ruler 109, 127, 144, 146, 182
Verwendungsnachweis 124, 192
Verwendungsnachweis, Kontextelemente 205
Verzweigungsabdeckung 170
View 62
ABAP Communication Log 278, 288
ABAP Coverage 170
ABAP ELEMENT INFO 153
ABAP Internal Table 184
ABAP Traces 179
ABAP Unit Runner 165
anlegen 214, 224
anordnen 120
ATC Problems 177
ATC Result Browser 176
Bookmarks 144
Breakpoints 184
Controller 200
Debug 183
Entity 244
Feed Reader 189
Layout 216
Outline 91, 135
Problems 90
Properties 202, 216
Quick Assist 134
Search 124, 140
Task List 150
Tasks 146
Templates 98, 163
bersicht 62
Variables 184
vergrern 123
verschieben 62
View Designer 27
View Outline 216
Virtual Appliance 29
Virtual Appliance einrichten 42
Virtual Private Cloud 41, 49
Vorwrtsnavigation 112

Watchpoint 184, 187


Web Dynpro ABAP 16, 199, 295
Code Wizard 209
Template 295
Web Dynpro Java 199
Web-Dynpro-Applikation 229
anlegen 230
ausfhren 230
Web-Dynpro-Komponente 229
Web-Dynpro-Komponente anlegen 199
Web-Dynpro-Service 26
Werteliste 237
Wildcard 138, 141
Window 43, 200, 214, 229, 230
Window-Controller 200, 229
Window-Struktur 229
Working Set 61
Worklist 144
Workspace 54, 58
Abfrage unterdrcken 59
anlegen 59
Verwaltung 250

312

Z
Zeile
kopieren 115
lschen 115
verschieben 115
Zeitstempel 143
Zurck-Taste 113

Die Serviceseiten
Im Folgenden finden Sie Hinweise, wie Sie Kontakt zu uns aufnehmen knnen.

Lob und Tadel


Wir hoffen sehr, dass Ihnen dieses Buch gefallen hat. Wenn Sie zufrieden waren, empfehlen Sie das Buch bitte weiter. Wenn Sie meinen, es gebe doch etwas zu verbessern, schreiben Sie direkt an die Lektorin dieses Buches: janina.
schweitzer@rheinwerk-verlag.de. Wir freuen uns ber jeden Verbesserungs
vorschlag, aber ber ein Lob freuen wir uns natrlich auch!
Auch auf unserer Webkatalogseite zu diesem Buch haben Sie die Mglichkeit, Ihr Feedback an uns zu senden oder Ihre Leseerfahrung per Facebook,
Twitter oder E-Mail mit anderen zu teilen. Folgen Sie einfach diesem Link:
http://www.sap-press.de/3700.

Zusatzmaterialien
Zusatzmaterialien (Beispielcode, bungsmaterial, Listen usw.) finden Sie
in Ihrer Online-Bibliothek sowie auf der Webkatalogseite zu diesem Buch:
http://www.sap-press.de/3700. Wenn uns sinnentstellende Tippfehler oder
inhaltliche Mngel bekannt werden, stellen wir Ihnen dort auch eine Liste mit
Korrekturen zur Verfgung.

Technische Probleme
Im Falle von technischen Schwierigkeiten mit dem E-Book oder Ihrem
E-Book-Konto beim Rheinwerk Verlag steht Ihnen gerne unser Leserservice
zur Verfgung: ebooks@rheinwerk-verlag.de.

ber uns und unser Programm


Informationen zu unserem Verlag und weitere Kontaktmglichkeiten bieten
wir Ihnen auf unserer Verlagswebsite http://www.rheinwerk-verlag.de. Dort
knnen Sie sich auch umfassend und aus erster Hand ber unser aktuelles Verlagsprogramm informieren und alle unsere Bcher und E-Books schnell und
komfortabel bestellen. Alle Buchbestellungen sind fr Sie versandkostenfrei.

Rechtliche Hinweise
In diesem Abschnitt finden Sie die ausfhrlichen und rechtlich verbindlichen
Nutzungsbedingungen fr dieses E-Book.

Copyright-Vermerk
Das vorliegende Werk ist in all seinen Teilen urheberrechtlich geschtzt. Alle
Nutzungs- und Verwertungsrechte liegen beim Autor und beim Rheinwerk
Verlag. Insbesondere das Recht der Vervielfltigung und Verbreitung, sei es in
gedruckter oder in elektronischer Form.
Rheinwerk Verlag GmbH, Bonn 2015

Ihre Rechte als Nutzer


Sie sind berechtigt, dieses E-Book ausschlielich fr persnliche Zwecke zu
nutzen. Insbesondere sind Sie berechtigt, das E-Book fr Ihren eigenen Gebrauch auszudrucken oder eine Kopie herzustellen, sofern Sie diese Kopie auf
einem von Ihnen alleine und persnlich genutzten Endgert speichern. Zu
anderen oder weitergehenden Nutzungen und Verwertungen sind Sie nicht
berechtigt.
So ist es insbesondere unzulssig, eine elektronische oder gedruckte Kopie
an Dritte weiterzugeben. Unzulssig und nicht erlaubt ist des Weiteren, das
E-Book im Internet, in Intranets oder auf andere Weise zu verbreiten oder
Dritten zur Verfgung zu stellen. Eine ffentliche Wiedergabe oder sonstige
Weiterverffentlichung und jegliche den persnlichen Gebrauch bersteigende Vervielfltigung des E-Books ist ausdrcklich untersagt. Das vorstehend
Gesagte gilt nicht nur fr das E-Book insgesamt, sondern auch fr seine Teile
(z.B. Grafiken, Fotos, Tabellen, Textabschnitte).
Urheberrechtsvermerke, Markenzeichen und andere Rechtsvorbehalte drfen
aus dem E-Book nicht entfernt werden, auh nicht das digitale Wasserzeichen.

Digitales Wasserzeichen
Dieses E-Book-Exemplar ist mit einem digitalen Wasserzeichen versehen,
einem Vermerk, der kenntlich macht, welche Person dieses Exemplar nutzen
darf. Wenn Sie, lieber Leser, diese Person nicht sind, liegt ein Versto gegen das Urheberrecht vor, und wir bitten Sie freundlich, das E-Book nicht
weiter zu nutzen und uns diesen Versto zu melden. Eine kurze E-Mail an
service@rheinwerk-verlag.de reicht schon. Vielen Dank!

Markenschutz
Die in diesem Werk wiedergegebenen Gebrauchsnamen, Handelsnamen, Warenbezeichnungen usw. knnen auch ohne besondere Kennzeichnung Marken
sein und als solche den gesetzlichen Bestimmungen unterliegen.
Smtliche in diesem Werk abgedruckten Bildschirmabzge unterliegen dem
Urheberrecht der SAP SE, Dietmar-Hopp-Allee 16, 69190 Walldorf. SAP,
das SAP-Logo, ABAP, BAPI, Duet, mySAP.com, mySAP, SAP ArchiveLink, SAP
EarlyWatch, SAP NetWeaver, SAP Business ByDesign, SAP BusinessObjects,
SAP BusinessObjects Rapid Mart, SAP BusinessObjects Desktop Intelligence, SAP BusinessObjects Explorer, SAP Rapid Marts, SAP BusinessObjects Watchlist Security, SAP BusinessObjects Web Intelligence, SAP Crystal
Reports, SAP GoingLive, SAP HANA, SAP MaxAttention, SAP MaxDB, SAP
PartnerEdge, SAP R/2, SAP R/3, SAP R/3 Enterprise, SAP Strategic Enterprise Management (SAP SEM), SAP StreamWork, SAP Sybase Adaptive Server
Enterprise (SAP Sybase ASE), SAP Sybase IQ, SAP xApps, SAPPHIRE NOW und
Xcelsius sind Marken oder eingetragene Marken der SAP SE, Walldorf.

Haftungsausschluss
Ungeachtet der Sorgfalt, die auf die Erstellung von Text, Abbildungen und
Programmen verwendet wurde, knnen weder Verlag noch Autor, Herausgeber oder bersetzer fr mgliche Fehler und deren Folgen eine juristische
Verantwortung oder irgendeine Haftung bernehmen.