Sie sind auf Seite 1von 423

BC400

ABAP Workbench – Grundlagen

.
.
TEILNEHMERHANDBUCH
PRÄSENZSCHULUNG
.
Version der Schulung: 18
Dauer der Schulung: 5 Tage
Materialnummer: 50150865

Beachten Sie, dass diese Schulung maschinell übersetzt wurde und die Genauigkeit
der Übersetzung daher möglicherweise nicht mit der einer menschlichen Übersetzung
vergleichbar ist. Greifen Sie im Zweifelsfall auf die Sprachversion für US-Englisch
zurück.
SAP-Urheberrechte, Marken und
Haftungsausschlüsse

© 2022 SAP SE oder ein SAP-Konzernunternehmen. Alle Rechte vorbehalten.

Weitergabe und Vervielfältigung dieser Publikation oder von Teilen daraus sind, zu
welchem Zweck und in welcher Form auch immer, ohne die ausdrückliche schriftliche
Genehmigung durch SAP SE oder ein SAP-Konzernunternehmen nicht gestattet.
SAP und andere in diesem Dokument erwähnte Produkte und Dienstleistungen von
SAP sowie die dazugehörigen Logos sind Marken oder eingetragene Marken der SAP
SE (oder von einem SAP-Konzernunternehmen) in Deutschland und verschiedenen
anderen Ländern weltweit. Weitere Hinweise und Informationen zum Markenrecht
finden Sie unter https://www.sap.com/corporate/en/legal/copyright.html
Die von SAP SE oder deren Vertriebsfirmen angebotenen Softwareprodukte können
Softwarekomponenten auch anderer Softwarehersteller enthalten.
Produkte können länderspezifische Unterschiede aufweisen.
Diese Materialien wurden unter Umständen maschinell übersetzt und können
grammatikalische Fehler oder Ungenauigkeiten enthalten.
Die vorliegenden Unterlagen werden von der SAP SE oder einem SAP-
Konzernunternehmen bereitgestellt und dienen ausschließlich zu Informations-
zwecken. Die SAP SE oder ihre Konzernunternehmen übernehmen keinerlei Haftung
oder Gewährleistung für Fehler oder Unvollständigkeiten in dieser Publikation. Die
SAP SE oder ein SAP-Konzernunternehmen steht lediglich für Produkte und
Dienstleistungen nach der Maßgabe ein, die in der Vereinbarung über die jeweiligen
Produkte und Dienstleistungen ausdrücklich geregelt ist. Keine der hierin enthaltenen
Informationen ist als zusätzliche Garantie zu interpretieren.
Insbesondere sind die SAP SE oder ihre Konzernunternehmen in keiner Weise
verpflichtet, in dieser Publikation oder einer zugehörigen Präsentation dargestellte
Geschäftsabläufe zu verfolgen oder hierin wiedergegebene Funktionen zu entwickeln
oder zu veröffentlichen. Diese Publikation oder eine zugehörige Präsentation, die
Strategie und etwaige künftige Entwicklungen, Produkte und/oder Plattformen der
SAP SE oder ihrer Konzern- unternehmen können von der SAP SE oder ihren
Konzernunternehmen jederzeit und ohne Angabe von Gründen unangekündigt
geändert werden. Die in dieser Publikation enthaltenen Informationen stellen keine
Zusage, kein Versprechen und keine rechtliche Verpflichtung zur Lieferung von
Material, Code oder Funktionen dar. Sämtliche vorausschauenden Aussagen
unterliegen unterschiedlichen Risiken und Unsicherheiten, durch die die
tatsächlichen Ergebnisse von den Erwartungen abweichen können. Die
vorausschauenden Aussagen geben die Sicht zu dem Zeitpunkt wieder, zu dem sie
getätigt wurden. Dem Leser wird empfohlen, diesen Aussagen kein übertriebenes
Vertrauen zu schenken und sich bei Kaufentscheidungen nicht auf sie zu stützen.
Typografische Konventionen

Dieses Handbuch wurde vom Amerikanischen Englisch ins Deutsche übersetzt.


Die folgenden typografischen Konventionen werden in diesem Handbuch verwendet:

Diese Informationen werden in der Präsentation des Schulungsreferenten


angezeigt.

Demonstration

Vorgehensweise

Warnung oder Achtung

Hinweis

Zugehörige oder zusätzliche Informationen

Moderierte Diskussion

Steuerung der Benutzungsoberfläche Beispieltext

Fenstertitel Beispieltext

© Copyright. Alle Rechte vorbehalten. iii


iv © Copyright. Alle Rechte vorbehalten.
Inhaltsverzeichnis

vii Überblick über die Schulung

1 Kapitel 1 : Ablauf eines ABAP-Programms

3 Lektion: Beschreibung der Verarbeitung von ABAP-Programmen

17 Kapitel 2 : ABAP Workbench

19 Lektion: Einführung in die ABAP Workbench


29 Lektion: Organisation von ABAP-Entwicklungsprojekten
37 Lektion: Entwicklung von ABAP-Programmen
49 Lektion: Abschließen von ABAP-Entwicklungsprojekten

63 Kapitel 3 : Grundlegende ABAP-Sprachelemente

65 Lektion: Definition elementarer Datenobjekte


77 Lektion: Verwenden grundlegender ABAP-Anweisungen
87 Lektion: Analysieren von Programmen mit dem ABAP Debugger

101 Kapitel 4 : Modularisierungstechniken in ABAP

103 Lektion: Erläutern der Modularisierung


109 Lektion: Definieren und Aufrufen von Unterprogrammen
123 Lektion: Aufruf von Funktionsbausteinen
133 Lektion: Funktionsbausteine anlegen
137 Lektion: Beschreiben von Business Application Programming
Interfaces (BAPIs)
143 Lektion: Aufruf von Methoden globaler Klassen
157 Lektion: Anlegen von globalen Klassen und statischen Methoden
161 Lektion: Verwenden von lokalen Klassen

175 Kapitel 5 : Komplexe Datenobjekte

177 Lektion: Verwenden von strukturierten Datenobjekten


183 Lektion: Verwenden von internen Tabellen

207 Kapitel 6 : Datenmodellierung und Datenbeschaffung

209 Lektion: Erläutern von Datenmodellen


219 Lektion: Abrufen von einzelnen Datenbanksätzen
227 Lektion: Abrufen mehrerer Datenbanksätze
231 Lektion: Beschreiben von weiteren Aspekten des Datenbankzugriffs
243 Lektion: Implementieren von Berechtigungsprüfungen

© Copyright. Alle Rechte vorbehalten. v


257 Kapitel 7 : Klassische ABAP-Reports

259 Lektion: Implementieren von ABAP-Listen


265 Lektion: Implementieren von Selektionsbildern
273 Lektion: Implementieren von Ereignissen in ABAP-Reports

285 Kapitel 8 : Dynpros

287 Lektion: Anlegen von Dynpros


307 Lektion: Anlegen von Ein- und Ausgabefeldern
311 Lektion: Implementieren des Datentransports

323 Kapitel 9 : SAP List Viewer

325 Lektion: Verwendung des SAP List Viewer

341 Kapitel 10 : Web Dynpro ABAP

343 Lektion: Einführung in Web Dynpro ABAP


351 Lektion: Implementieren einer Navigation in Web Dynpro
363 Lektion: Implementieren des Datentransports in Web Dynpro

375 Kapitel 11 : Werkzeuge zur Programmanalyse

377 Lektion: Verbessern der ABAP-Code-Qualität mit dem Code


Inspector

387 Kapitel 12 : ABAP Development Tools for SAP NetWeaver

389 Lektion: Einführung in ABAP Development Tools for SAP NetWeaver


393 Lektion: Anlegen eines ABAP-Projekts in Eclipse

401 Kapitel 13 : Anpassen der SAP-Standardsoftware

403 Lektion: Anpassen der SAP-Standardsoftware

vi © Copyright. Alle Rechte vorbehalten.


Überblick über die Schulung

ZIELGRUPPE
Diese Schulung richtet sich an die folgenden Zielgruppen:
● Entwickler
● Entwicklungsberater
● IT-Support
● Projektmanager

© Copyright. Alle Rechte vorbehalten. vii


viii © Copyright. Alle Rechte vorbehalten.
KAPITEL 1 Ablauf eines ABAP-Programms

Lektion 1
Beschreibung der Verarbeitung von ABAP-Programmen 3

LERNZIELE

● Die Architektur des SAP NetWeaver Application Server beschreiben


● Die Ausführung eines Dialogprogramms durch das ABAP-Laufzeitsystem beschreiben

© Copyright. Alle Rechte vorbehalten. 1


Kapitel 1 : Ablauf eines ABAP-Programms

2 © Copyright. Alle Rechte vorbehalten.


Kapitel 1
Lektion 1
Beschreibung der Verarbeitung von ABAP-
Programmen

ÜBERBLICK ÜBER DIE LEKTION


In dieser Lektion wird erklärt, wie ein einfaches Dialogprogramm vom SAP NetWeaver
Application Server (AS) ausgeführt wird.

Unternehmensszenario
Sie sollen die Architektur des SAP NetWeaver AS sowie die Ausführung von ABAP-
Programmen prinzipiell erläutern. Dazu müssen Sie über folgende Kenntnisse verfügen:
● Kenntnisse in der Architektur des SAP NetWeaver AS
● Kenntnisse in der Ausführung eines einfachen Dialogprogramms durch das ABAP-
Laufzeitsystem

LERNZIELE DER LEKTION


Am Ende dieser Lektion können Sie:
● Die Architektur des SAP NetWeaver Application Server beschreiben
● Die Ausführung eines Dialogprogramms durch das ABAP-Laufzeitsystem beschreiben

© Copyright. Alle Rechte vorbehalten. 3


Kapitel 1 : Ablauf eines ABAP-Programms

ABAP-Systemarchitektur

Abbildung 1: Client-/Server-Architektur des SAP NetWeaver AS

Der SAP NetWeaver AS hat eine modulare Architektur, die dem softwareorientierten Client-/
Serverprinzip folgt.
Im SAP NetWeaver AS können Präsentationen, Anwendungslogik und Datenspeicherung
verschiedenen Systemen zugeordnet werden. Dies ist die Grundlage für die Skalierbarkeit des
Systems.

Architektur des SAP NetWeaver Application Server

Architekturschichten
● In der Architektur von SAP NetWeaver AS werden folgende Schichten unterschieden:
- Die Datenbankschicht ist die unterste Schicht. Auf dieser Schicht werden die Daten
mithilfe eines relationalen Datenbankmanagementsystems (RDBMS) verwaltet. Neben
den Anwendungsdaten enthält sie Programme und die Metadaten, die das SAP-System
für den Betrieb benötigt.
- Die Applikationsserverschicht ist die mittlere Schicht. Auf dieser Schicht werden ABAP-
Programme wie Anwendungen, die SAP bereitstellt, und alle eigenentwickelten
Anwendungen ausgeführt. Die ABAP-Programme lesen Daten aus der Datenbank,
verarbeiten sie und speichern bei Bedarf neue Daten in der Datenbank.
- Die Präsentationsserverschicht ist die oberste Schicht. Sie umfasst die
Benutzungsoberfläche, über die der Benutzer auf das Programm zugreift, neue Daten
eingibt und die Ergebnisse eines Workprozesses präsentiert bekommt.

4 © Copyright. Alle Rechte vorbehalten.


Lektion: Beschreibung der Verarbeitung von ABAP-Programmen

Die technische Verteilung der Software ist unabhängig von ihrem physischen Speicherort auf
der Hardware. Vertikal können alle Schichten übereinander auf einem einzigen Rechner
installiert werden. Jede einzelne Schicht kann auch auf einem separaten Computer installiert
werden. Horizontal können Sie die Präsentationsserver- und die Applikationsserverschicht
auf eine beliebige Anzahl von Computern verteilen. Die horizontale Verteilung der
Datenbankkomponenten hängt von der Art der installierten Datenbank ab.

Ausschnitt für ein ABAP-Programm

Abbildung 2: Ausschnitt für ein ABAP-Programm

Notiz:
Für die meisten Themen, die in dieser Schulung behandelt werden, können wir das
Bild vereinfachen. In dieser Schulung liegt der Schwerpunkt auf der Interaktion
zwischen einem Benutzer und einem ABAP-Programm.

Zu verstehen, wie ein ABAP-Programm geschrieben wird, ist wichtiger als die genauen
Prozesse zu verstehen, die auf dem Applikationsserver stattfinden. Daher werden Sie mit
einem vereinfachten Bild arbeiten, auf dem der Dispatcher und der Workprozess nicht explizit
zu sehen sind. Bestimmte Folien werden jedoch um diese Details erweitert, wenn sie für die
ABAP-Programmierung relevant sind.
ABAP-Programme werden auf dem Applikationsserver verarbeitet. Die Gestaltung der
Benutzerdialoge und Datenbankzugriffe spielt eine besonders wichtige Rolle beim Schreiben
von Anwendungsprogrammen.

© Copyright. Alle Rechte vorbehalten. 5


Kapitel 1 : Ablauf eines ABAP-Programms

Überblick über den Programmablauf

Abbildung 3: Sicht für den Benutzer

Notiz:
In diesem Abschnitt wird der grundlegende Prozess beschrieben, der beginnt,
wenn ein ABAP-Programm ausgeführt wird. Sie verwenden dafür ein Programm,
bei dem der Benutzer das Kürzel einer Fluggesellschaft eingibt (z.B. LH) und als
Ergebnis Details zu dieser Fluggesellschaft angezeigt bekommt.

Das SAP-System ist für den Durchschnittsbenutzer wie eine Black Box. Die Benutzer müssen
sich nicht mit dem genauen Prozessablauf eines ABAP-Programms auskennen. Den
Durchschnittsbenutzer interessiert nur der Geschäftsprozess und wie Daten eingegeben und
angezeigt werden können. Die technischen Aspekte des Programms sind dagegen für den
Durchschnittsbenutzer weniger interessant.
Die Entwickler hingegen müssen sowohl das Wechselspiel zwischen den Serverebenen als
auch den Prozessablauf bei der Ausführung von Programmen kennen, um eigene Programme
entwickeln zu können.

6 © Copyright. Alle Rechte vorbehalten.


Lektion: Beschreibung der Verarbeitung von ABAP-Programmen

Wechselspiel zwischen den Serverebenen und Programmablauf

Abbildung 4: Wechselspiel zwischen den Serverebenen und Programmablauf

Führt der Benutzer eine Aktion aus (z.B. Drücken der Eingabetaste oder einer Funktionstaste,
Auswählen einer Menüfunktion oder einer Drucktaste), so wird die Steuerung vom
Präsentationsserver an den Applikationsserver übergeben.
Wenn ein anderer Benutzerdialog vom ABAP-Programm ausgelöst wird, übermittelt das
System das Bild, und die Steuerung wird wieder an den Präsentationsserver übergeben.
Ein Programm besteht nicht nur aus einem einzelnen Block, sondern aus mehreren Einheiten.
Hierbei spricht man von Modularisierung. Die meisten dieser Modularisierungseinheiten
können in mehreren Programmen verwendet werden. Deshalb werden sie oft als Reuse-
Einheiten bezeichnet. In einem guten Programm sollten die Datenbankzugriffe in solchen
Reuse-Einheiten gekapselt sein. Die Reuse-Einheit macht eine Unterteilung zwischen der
Darstellung des Benutzerdialogs und den Datenbankzugriffen und ermöglicht somit die
Verwendung der gleichen Datenbankzugriffe für verschiedene Benutzerdialoge.

© Copyright. Alle Rechte vorbehalten. 7


Kapitel 1 : Ablauf eines ABAP-Programms

Programmablauf im Detail: Selektionsbild und Liste

Abbildung 5: Programmstart

Sobald sich ein Benutzer am System anmeldet, wird ein Bild angezeigt. Von dort kann er über
einen Menüpfad ein ABAP-Programm starten.

Abbildung 6: Vom System geladener Programmkontext

8 © Copyright. Alle Rechte vorbehalten.


Lektion: Beschreibung der Verarbeitung von ABAP-Programmen

In diesem Fall wird auf dem Applikationsserver zuerst der Programmkontext geladen. Der
Programmkontext enthält Speicherbereiche für Variablen und komplexe Datenobjekte,
Informationen auf den Dynpros für Benutzerdialoge und ABAP-Verarbeitungsblöcke. All diese
Informationen zu dem Programm entnimmt das Laufzeitsystem dem Repository, einem
speziellen Bereich der Datenbank. Das Beispielprogramm hat ein Selektionsbild als
Benutzerdialog, eine Variable und eine Struktur als Datenobjekte und einen ABAP-
Verarbeitungsblock. Die Liste, auf der die Daten ausgegeben werden sollen, wird erst
dynamisch zur Laufzeit erzeugt. Das ABAP-Laufzeitsystem steuert den weiteren
Programmverlauf.

Abbildung 7: Vom Laufzeitsystem gesendetes Selektionsbild

Da das Programm ein Selektionsbild enthält, sendet das ABAP-Laufzeitsystem danach das
Selektionsbild zum Präsentationsserver. Die Kontrolle über den Programmverlauf liegt beim
Präsentationsserver, solange der Anwender die Eingabefelder ausfüllt.
Auf den Selektionsbildern können die Benutzer Auswahlkriterien eingeben, die für die
Fortsetzung des Programmverlaufs erforderlich sind.

© Copyright. Alle Rechte vorbehalten. 9


Kapitel 1 : Ablauf eines ABAP-Programms

Abbildung 8: In Datenobjekte eingefügte Eingabewerte

Sobald der Anwender die Eingabe der Daten beendet hat, kann über die Funktion Ausführen
der Programmverlauf fortgesetzt werden.
Die eingegebenen Daten werden dann automatisch in die zugehörigen Datenobjekte gestellt,
und das ABAP-Laufzeitsystem übernimmt wieder die Kontrolle.
In diesem einfachen Beispielprogramm existiert nur ein ABAP-Verarbeitungsblock. Das
ABAP-Laufzeitsystem stößt die sequenzielle Verarbeitung dieses ABAP-Verarbeitungsblocks
an.
Ist die Eingabe des Anwenders nicht typkonform, so wird automatisch ein Fehlerdialog
angestoßen. Der Anwender muss die Eingabe korrigieren.

10 © Copyright. Alle Rechte vorbehalten.


Lektion: Beschreibung der Verarbeitung von ABAP-Programmen

Abbildung 9: Laden der Reuse-Einheit

Im Verarbeitungsblock wird eine wiederverwendbare Einheit aufgerufen, die den


Datenbankzugriff kapselt. Die Reuse-Einheit ist ein spezieller Verarbeitungsblock in einem
gesonderten Programm. Im konkreten Beispiel handelt es sich um eine Methode in einer
globalen Klasse. Beim Aufruf der Reuse-Einheit wird das Programm, in dem sie enthalten ist,
ebenfalls aus dem Repository gelesen und auf den Applikationsserver geladen.

Abbildung 10: Aufrufen der Reuse-Einheit

© Copyright. Alle Rechte vorbehalten. 11


Kapitel 1 : Ablauf eines ABAP-Programms

Der eigentliche Aufruf besteht darin, dass erforderliche Daten an das gerufene Programm
übergeben werden und dann die Reuse-Einheit ausgeführt wird. Diese Ausführung erfolgt
synchron, das heißt, das aufrufende Programm wartet, bis die Verarbeitung der Reuse-Einheit
abgeschlossen ist.

Abbildung 11: Anforderung des Satzes aus der Datenbank durch das Programm

Im Beispielsprogramm ist innerhalb der Reuse-Einheit ein lesender Zugriff auf die Datenbank
programmiert worden. Entsprechend werden die Informationen, auf welche Datenbanktabelle
zugegriffen werden soll und welche Zeile gelesen werden soll, an die Datenbank
weitergereicht.

12 © Copyright. Alle Rechte vorbehalten.


Lektion: Beschreibung der Verarbeitung von ABAP-Programmen

Abbildung 12: Von der Datenbank gelieferter Satz

Die Datenbank liefert den angeforderten Satz, und das Laufzeitsystem sorgt dafür, dass die
Daten in die zugehörigen Datenobjekte gestellt werden.
Bei einem Einzelsatzzugriff wird dieses Datenobjekt in aller Regel eine Struktur sein, die
entsprechende Komponenten für die angeforderten Datenbankfelder enthält.

Abbildung 13: Rückgabe der Daten durch die Reuse-Einheit

© Copyright. Alle Rechte vorbehalten. 13


Kapitel 1 : Ablauf eines ABAP-Programms

Damit ist die Verarbeitung der Reuse-Einheit abgeschlossen und die Kontrolle geht wieder an
das aufrufende Programm zurück, das unmittelbar nach dem Aufruf fortgesetzt wird. Beim
Verlassen der Reuse-Einheit werden die Daten, die von der Datenbank gelesen wurden, in ein
entsprechendes Datenobjekt des rufenden Programms geschrieben, von wo aus sie
weiterverarbeitet werden können.

Abbildung 14: Vom Laufzeitsystem gesendete Liste

Im Anschluss an den Aufruf der Reuse-Einheit enthält der ABAP-Verarbeitungsblock


Anweisungen zur Gestaltung der Liste, mit der das Ergebnis angezeigt werden soll. Nach
Beendigung des Verarbeitungsblocks sendet das Laufzeitsystem diese Liste als
Bildschirmbild zum Präsentationsserver.

ZUSAMMENFASSUNG DER LEKTION


Nun können Sie
● Die Architektur des SAP NetWeaver Application Server beschreiben
● Die Ausführung eines Dialogprogramms durch das ABAP-Laufzeitsystem beschreiben

14 © Copyright. Alle Rechte vorbehalten.


Kapitel 1

Überprüfung des Lernerfolgs

1. Welche der folgenden Schichten enthält die Benutzungsoberfläche, über die alle Benutzer
auf ein Programm zugreifen und neue Daten eingeben können und die Ergebnisse eines
Workprozesses präsentiert bekommen?
Wählen Sie die richtige Antwort.

X A Applikationsserverschicht

X B Präsentationsserverschicht

X C Applikationsserverschicht

X D SAP-NetWeaver-Anwendung

2. Welche der folgenden Aussagen beschreibt das Konzept eines Programms, das aus
mehreren Einheiten anstatt eines einzigen Blocks besteht?
Wählen Sie die richtige Antwort.

X A Isolation

X B Modularisierung

X C Universalität

X D Multiplizität

© Copyright. Alle Rechte vorbehalten. 15


Kapitel 1

Überprüfung des Lernerfolgs - Antworten

1. Welche der folgenden Schichten enthält die Benutzungsoberfläche, über die alle Benutzer
auf ein Programm zugreifen und neue Daten eingeben können und die Ergebnisse eines
Workprozesses präsentiert bekommen?
Wählen Sie die richtige Antwort.

X A Applikationsserverschicht

X B Präsentationsserverschicht

X C Applikationsserverschicht

X D SAP-NetWeaver-Anwendung

Das ist richtig. Die Präsentationsserverschicht ist die oberste Schicht. Sie umfasst die
Benutzungsoberfläche, über die der Benutzer auf das Programm zugreift, neue Daten
eingibt und die Ergebnisse eines Workprozesses präsentiert bekommt. Weitere
Informationen finden Sie im Abschnitt „ABAP-Systemarchitektur“ in der Lektion
„Beschreibung der Verarbeitung von ABAP-Programmen“ im Kurs BC400 (Kapitel 1,
Lektion 1) oder TAW10 Teil I (Kapitel 7, Lektion 1).

2. Welche der folgenden Aussagen beschreibt das Konzept eines Programms, das aus
mehreren Einheiten anstatt eines einzigen Blocks besteht?
Wählen Sie die richtige Antwort.

X A Isolation

X B Modularisierung

X C Universalität

X D Multiplizität

Das ist richtig. Ein Programm besteht nicht nur aus einem einzelnen Block, sondern aus
mehreren Einheiten. Hierbei spricht man von Modularisierung. Die meisten dieser
Modularisierungseinheiten können in mehreren Programmen verwendet werden. Deshalb
werden sie oft als Reuse-Einheiten bezeichnet. Weitere Informationen finden Sie im
Abschnitt „Wechselspiel zwischen den Serverebenen und dem Programmablauf“ in der
Lektion „Beschreibung der Verarbeitung von ABAP-Programmen“ im Kurs BC400
(Kapitel 1, Lektion 1) oder TAW10 Teil I (Kapitel 7, Lektion 1).

16 © Copyright. Alle Rechte vorbehalten.


KAPITEL 2 ABAP Workbench

Lektion 1
Einführung in die ABAP Workbench 19

Lektion 2
Organisation von ABAP-Entwicklungsprojekten 29

Lektion 3
Entwicklung von ABAP-Programmen 37

Lektion 4
Abschließen von ABAP-Entwicklungsprojekten 49

LERNZIELE

● die Struktur des ABAP Repositorys beschreiben


● die Suchwerkzeuge des ABAP Repositorys verwenden
● ABAP-Repository-Objekte mit dem Object Navigator anzeigen
● Die ABAP-Development-Infrastruktur beschreiben
● Pakete anlegen
● ABAP-Programme anlegen
● ABAP-Programme mit dem ABAP Editor schreiben
● ABAP-Programme aktivieren
● Transaktionen anlegen
● Änderungsaufträge freigeben

© Copyright. Alle Rechte vorbehalten. 17


Kapitel 2 : ABAP Workbench

18 © Copyright. Alle Rechte vorbehalten.


Kapitel 2
Lektion 1
Einführung in die ABAP Workbench

ÜBERBLICK ÜBER DIE LEKTION


Diese Lektion beinhaltet einen Überblick über das ABAP Repository und die Komponenten der
ABAP Workbench. Dabei wird der Object Navigator als zentrales Entwicklungswerkzeug
vorgestellt.

Unternehmensszenario
Sie müssen den Aufbau des Repositorys beschreiben, mithilfe geeigneter Werkzeuge nach
Repository-Objekten suchen und deren Struktur analysieren.
Dazu müssen Sie über folgende Kenntnisse verfügen:
● Struktur des Repositorys
● Benennung und Verwendung von Suchwerkzeugen des Repositorys
● Verwendung des Object Navigator zum Anzeigen von Repository-Objekten

LERNZIELE DER LEKTION


Am Ende dieser Lektion können Sie:
● die Struktur des ABAP Repositorys beschreiben
● die Suchwerkzeuge des ABAP Repositorys verwenden
● ABAP-Repository-Objekte mit dem Object Navigator anzeigen

© Copyright. Alle Rechte vorbehalten. 19


Kapitel 2 : ABAP Workbench

ABAP Repository

Abbildung 15: Die Mandantenunabhängigkeit des Repositorys

Das Repository besteht aus allen Entwicklungsobjekten des Systems wie Programmen,
Funktionsbausteinen, Definitionen von Datenbanktabellen usw. Das Repository enthält
Objekte, die von SAP bereitgestellt wurden, sowie vom Kunden definierte Objekte. Das
Repository befindet sich in der Datenbank und ist unabhängig vom Mandanten. Das heißt,
dass ein Repository-Objekt von jedem beliebigen Mandanten aus aufgerufen werden kann
und in jedem Mandanten im System gleich aussieht.
Die Datenbank enthält außerdem Anwendungsdaten und Customizing-Daten, die in der Regel
mandantenabhängig sind. Das bedeutet, dass jeder Datensatz einem bestimmten Mandanten
zugeordnet ist und nur von Benutzern gelesen und geändert werden kann, die an diesem
Mandanten angemeldet sind.

20 © Copyright. Alle Rechte vorbehalten.


Lektion: Einführung in die ABAP Workbench

Aufbau des ABAP Repositorys

Abbildung 16: Aufbau des ABAP Repositorys

Das System unterteilt das Repository nach Anwendungskomponenten.


Eine Anwendungskomponente, z.B. Materials Management (MM), besteht aus mehreren
Paketen, die relevante Objekte enthalten. Dies dient einer detaillierteren logischen
Unterteilung.
Ein Repository-Objekt muss beim Anlegen stets einem Paket zugeordnet werden.
Manche Repository-Objekte können Teilobjekte besitzen, die ihrerseits Repository-Objekte
sind. Außerdem können Repository-Objekte auf andere Repository-Objekte verweisen.

© Copyright. Alle Rechte vorbehalten. 21


Kapitel 2 : ABAP Workbench

Suchwerkzeuge des ABAP Repositorys

Abbildung 17: Repository-Infosystem

Das Repository-Infosystem eignet sich für die sogenannte freie (also nicht
anwendungsspezifische) Suche nach Repository-Objekten, z.B. alle Programme eines
bestimmten Entwicklers oder alle Funktionsbausteine, die nach einem bestimmten Datum
geändert wurden.

Zugriff auf das ABAP-Repository-Infosystem


● Gehen Sie für den Zugriff auf das ABAP-Repository-Infosystem folgendermaßen vor:

1. Wählen Sie im Menü SAP Easy Access den Pfad Werkzeuge → ABAP
Workbench → Übersicht → Infosystem.
Alternativ können Sie die Transaktion SE84 ausführen.

2. Doppelklicken Sie auf einen Objekttyp. Daraufhin wird ein Selektionsbild angezeigt, auf
dem Sie die Suche eingrenzen können.

22 © Copyright. Alle Rechte vorbehalten.


Lektion: Einführung in die ABAP Workbench

Object Navigator

Abbildung 18: Werkzeuge der ABAP Workbench

Die ABAP Workbench enthält alle Werkzeuge, die zum Anlegen und Bearbeiten von
Repository-Objekten benötigt werden. Die Werkzeuge decken den gesamten Zyklus der
Software-Entwicklung ab.

Werkzeuge der ABAP Workbench


● Beispiele für Werkzeuge der ABAP Workbench sind:
- Der ABAP Editor wird zur Bearbeitung von Quelltexten verwendet.
- das ABAP Dictionary zur Bearbeitung von Datenbanktabellendefinitionen, Datentypen
und anderen Entitäten
- der Screen Painter zur Konfiguration von Dynpros sowie Funktionen für
Benutzerdialoge
- der Menu Painter zum Entwerfen von Komponenten für die Benutzungsoberfläche:
Menüleiste, Symbolleiste, Drucktastenleiste und Tastenbelegung
- der Function Builder zur Bearbeitung von Funktionsbausteinen
- der Class Builder zur Bearbeitung globaler Klassen und Interfaces

Sie können jedes dieser Werkzeuge explizit aufrufen und dann ein Repository-Objekt zur
Bearbeitung laden. Es ist jedoch praktischer, die Werkzeuge über den Object Navigator
aufzurufen.
● ABAP Editor: Transaktion SE38
● ABAP Dictionary (anzeigen, ändern, anlegen): Transaktion SE11
● ABAP Dictionary (nur anzeigen): Transaktion SE12
● Screen Painter: Transaktion SE51

© Copyright. Alle Rechte vorbehalten. 23


Kapitel 2 : ABAP Workbench

● Menu Painter: Transaktion SE41


● Function Builder: Transaktion SE37
● Class Builder: Transaktion SE24

In diesem zentralen Entwicklungswerkzeug können Sie gewünschte Repository-Objekte


auflisten lassen. Zum Bearbeiten eines der Repository-Objekte wählen Sie es per Doppelklick
aus. Das entsprechende Werkzeug wird dann automatisch aufgerufen, und das ausgewählte
Repository-Objekt befindet sich zur Anzeige bzw. Bearbeitung darin.

Bildaufbau im Object Navigator

Abbildung 19: Bildaufbau im Object Navigator

Das Bild des Object Navigator


● Das Bildschirmbild des Object Navigator ist in folgende Bereiche aufgeteilt:
- Navigationsbereich zur hierarchischen Anzeige einer Objektliste
- Werkzeugbereich, in dem ein Entwicklungsobjekt mithilfe des passenden Werkzeugs
angezeigt und bearbeitet werden kann

Sie können den Navigationsbereich aus- und wieder einblenden (Vollbild → ein/aus).
In beiden Bereichen können Sie die Funktionen im Kontextmenü auswählen, das Sie mit der
rechten Maustaste aufrufen. Im Kontextmenü werden Ihnen nur die Funktionen zur Auswahl
angeboten, die für das jeweilige Objekt vorgesehen sind.

24 © Copyright. Alle Rechte vorbehalten.


Lektion: Einführung in die ABAP Workbench

Verwendung des Navigationsbereichs

Abbildung 20: Verwendung des Navigationsbereichs

Das System zeigt im Navigationsbereich Objektlisten an. Möchten Sie dort beispielsweise ein
Paket anzeigen, dann werden alle zu diesem Paket gehörenden Repository-Objekte
aufgelistet.
Per Doppelklick auf ein Objekt können Sie dieses anzeigen und bearbeiten.
Sie können zwischen den Objektlisten navigieren, die zuvor in der aktuellen Object-Navigator-
Sitzung angezeigt wurden (blaue Pfeile).
Sie können die Objektlisten, die Sie häufig benutzen, in Ihre Favoriten aufnehmen.

© Copyright. Alle Rechte vorbehalten. 25


Kapitel 2 : ABAP Workbench

Funktionen im Werkzeugbereich

Abbildung 21: Funktionen im Werkzeugbereich

Im Werkzeugbereich wird ein Repository-Objekt im entsprechenden Werkzeug dargestellt.


Sie können zwischen den Objekten navigieren, die zuvor in der aktuellen Object-Navigator-
Sitzung angezeigt wurden (blaue Pfeile).
Sie können auch ein Teilfenster mit der bisherigen Navigationshistorie anzeigen. Durch einen
Doppelklick auf ein Objekt in der Navigationshistorie wird dieses im Werkzeugbereich
angezeigt.

26 © Copyright. Alle Rechte vorbehalten.


Lektion: Einführung in die ABAP Workbench

Synchronisation des Navigationsbereichs und des Werkzeugbereichs

Abbildung 22: Synchronisation des Navigationsbereichs und des Werkzeugbereichs

Die Navigation im Navigationsbereich ist unabhängig von der Navigation im Werkzeugbereich.


Dies ermöglicht einen sehr flexiblen Einsatz beider Bereiche.

Synchronisierungsmethode
● Bei Bedarf können Sie die beiden Bereiche wie folgt synchronisieren:
- Sie können ein Objekt im Werkzeugbereich anzeigen, indem Sie in den
Navigationsbereich doppelklicken oder die entsprechende Kontextmenüfunktion des
Objekts verwenden.
- Die Objektliste eines gerade im Werkzeugbereich bearbeiteten Objekts können Sie über
die Drucktaste Objektliste anzeigen im Navigationsbereich anzeigen lassen.

Um ein neues Objekt anzulegen, können Sie in der jeweiligen Objektliste das Kontextmenü
eines Objekttyps verwenden. Alternativ dazu können Sie über die Drucktaste Objekt
bearbeiten oder Anderes Objekt ein Objekt anlegen.

ZUSAMMENFASSUNG DER LEKTION


Nun können Sie
● die Struktur des ABAP Repositorys beschreiben
● die Suchwerkzeuge des ABAP Repositorys verwenden
● ABAP-Repository-Objekte mit dem Object Navigator anzeigen

© Copyright. Alle Rechte vorbehalten. 27


Kapitel 2 : ABAP Workbench

28 © Copyright. Alle Rechte vorbehalten.


Kapitel 2
Lektion 2
Organisation von ABAP-Entwicklungsprojekten

ÜBERBLICK ÜBER DIE LEKTION


In dieser Lektion wird erklärt, wie neue Repository-Objekte, Pakete, Programme und
Transaktionscodes angelegt werden. Sie erfahren außerdem, wie in der SAP-Umgebung
Änderungsaufträge in der ABAP Workbench eingesetzt werden, um Entwicklungsprojekte zu
organisieren und einen konsistenten Transport der Änderungen in die Produktivsysteme zu
gewährleisten.

Unternehmensszenario
Sie sollen im Rahmen eines Entwicklungsprojekts ein neues Paket sowie ein ABAP-Programm
anlegen und dieses Programm den Benutzern über einen Transaktionscode zur Verfügung
stellen. Dazu müssen Sie über folgende Kenntnisse verfügen:
● Benennung und Verwendung von Hilfsmitteln für eine ordnungsgemäße
Softwareentwicklung
● Anlegen von Paketen, Programmen und Transaktionen

LERNZIELE DER LEKTION


Am Ende dieser Lektion können Sie:
● Die ABAP-Development-Infrastruktur beschreiben
● Pakete anlegen

© Copyright. Alle Rechte vorbehalten. 29


Kapitel 2 : ABAP Workbench

Transport von Entwicklungsobjekten

Abbildung 23: Transport von Entwicklungsobjekten

Entwicklungsprojekte werden in einem Entwicklungssystem durchgeführt. Die in einem


Projekt bearbeiteten bzw. angelegten Entwicklungsobjekte werden bei Projektabschluss in
Nachfolgesysteme (Test- bzw. Produktivsystem) transportiert. Zu Beginn eines
Entwicklungsprojektes legt der Projektleiter einen Änderungsauftrag an, in dem er Mitarbeiter
dieses Projekts im Transport Organizer oder direkt in der ABAP Workbench benennt. Der
Transport Organizer legt dann für jeden Projektmitarbeiter eine Aufgabe im
Änderungsauftrag an.
Bei der Bearbeitung bzw. Erstellung eines Entwicklungsobjekts ordnet der betreffende
Mitarbeiter dieses dem Änderungsauftrag zu. Dabei wird das Objekt in die Aufgabe des
Mitarbeiters eingetragen. In der Aufgabe des Mitarbeiters werden alle Repository-Objekte
gesammelt, an denen er während des Entwicklungsprojekts arbeitet.

30 © Copyright. Alle Rechte vorbehalten.


Lektion: Organisation von ABAP-Entwicklungsprojekten

Organisation von Entwicklungsprojekten

Abbildung 24: Organisation eines Entwicklungsprojekts im Änderungsauftrag

Organisation eines Entwicklungsprojekts mit einem Änderungsauftrag


Die Organisation eines Entwicklungsprojekts mit Hilfe eines Änderungsauftrags bietet
folgende Vorzüge:
● Mitarbeiter können ihre projektspezifischen Aktivitäten überwachen.
● Die an einem Projekt beteiligten Mitarbeiter können alle dem Projekt zugeordneten
Repository-Objekte bearbeiten. Für Entwickler, die nicht dem Projektteam angehören,
bleiben die Repository-Objekte bis zum Projektabschluss (Freigabe des
Änderungsauftrags) gesperrt.
● Durch Zuordnung der Objekte zum Änderungsauftrag wird sichergestellt, dass alle
Entwicklungsobjekte, die während des Projekts angelegt oder bearbeitet wurden, bei
Projektabschluss (Freigabe des Änderungsauftrags) automatisch transportiert werden.
Dabei legt der Transportweg der beteiligten Pakete (in denen entwickelt wurde) fest, in
welches Nachfolgesystem transportiert wird.

Im Gegensatz zur logischen und funktionalen Abgrenzung von Repository-Objekten bei


Paketen erfolgt bei Änderungsaufträgen, die projektbezogen sind, eine zeitliche Abgrenzung
der Objekte. Obwohl ein Programm immer nur zu einem Paket gehört, kann es zeitlich
versetzt zu verschiedenen Projekten gehören.

© Copyright. Alle Rechte vorbehalten. 31


Kapitel 2 : ABAP Workbench

Anlegen von Paketen

Abbildung 25: Beispiel für das Einstellen von Paketattributen

Paketattribute
Die Attribute eines Pakets haben folgende Bedeutung (Detailinformationen erhalten Sie über
die Feldhilfe (F1)):
● Anwendungskomponente
Bestimmen Sie die Position des Pakets in der Anwendungshierarchie, indem Sie die
entsprechende Anwendungskomponente angeben.
● Softwarekomponente
Bei Eigenentwicklungen tragen Sie hier HOME ein.

● Transportschicht
Sie entscheidet darüber, ob und wenn ja, in welches Nachfolgesystem die Objekte dieses
Pakets später transportiert werden. Für Kundenentwicklungen müssen Sie die
Transportschicht bestimmen, die Ihr Systemadministrator für diesen Zweck eingerichtet
hat.
● Direktes Oberpaket
Das unmittelbare Oberpaket (oder synonym "umfassende Paket") bezieht sich auf das
Paket, das das aktuelle Paket gemäß der Pakethierachie als direktes Unterpaket enthält.
Die Pakethierarchie ordnet alle Pakete in Form mehrerer Bäume an: Jedes Paket verfügt
(potenziell) über eine Anzahl von Unterpaketen und kann wiederum das Unterpaket eines
umfassenden Pakets sein.
● Pakettyp
Sie können zwischen drei Pakettypen wählen: Entwicklungspaket (kann Repository-
Objekte und andere Pakete enthalten), Hauptpaket (enthält nur andere Pakete) und
Strukturpaket (enthält nur Hauptpakete).

32 © Copyright. Alle Rechte vorbehalten.


Lektion: Organisation von ABAP-Entwicklungsprojekten

● Kennzeichen für Paketkapselung


Wenn diese Paketeigenschaft aktiviert ist, ist das Paket gekapselt. Dies hat zur Folge, dass
nur die in Paketschnittstellen exponierten Entwicklungselemente des Pakets von außen
sichtbar sind. Mögliche Verwenderpakete brauchen Verwendungserklärungen für die
Paketschnittstellen, die die verwendeten Entwicklungselemente enthalten.

Festlegung des Transportwegs

Abbildung 26: Festlegung des Transportwegs

Selbst mit einer einfachen Systemlandschaft benötigen Sie mindestens zwei verschiedene
Transportschichten, um zwischen Kundenentwicklungen und Modifikationen an SAP-
Objekten zu unterscheiden. In einer komplexeren Systemlandschaft können noch weitere
Transportschichten mit unterschiedlichen Zielsystemen vorhanden sein.

© Copyright. Alle Rechte vorbehalten. 33


Kapitel 2 : ABAP Workbench

Zuordnung zu einem Änderungsauftrag

Abbildung 27: Zuordnung zu einem Änderungsauftrag

Sie können sich alle Änderungsaufträge, in denen Sie eine Aufgabe besitzen, über die
Drucktaste Eigene Aufträge anzeigen lassen. Doppelklicken Sie auf einen bestimmten
Transportauftrag, um ihn auszuwählen.

Notiz:
Die Zuordnung für Ihre Aufgabe erfolgt durch das System.

Hinweis:
Sie müssen alle angelegten und geänderten Repository-Objekte dem
Änderungsauftrag des entsprechenden Projekts zuordnen.

So legen Sie ein Paket an

1. Navigieren Sie zum Object Navigator.

2. Wählen Sie im Navigationsbereich den Objekttyp Paket, und geben Sie den Namen des
Pakets unten im Eingabefeld ein. Beachten Sie dabei die Konventionen für Namensräume
des Kunden. Drücken Sie die Eingabetaste. Ist das angegebene Paket noch nicht
vorhanden, gelangen Sie zu einem Dialog zum Anlegen des Pakets.

34 © Copyright. Alle Rechte vorbehalten.


Lektion: Organisation von ABAP-Entwicklungsprojekten

Alternativ können Sie auch Objekt bearbeiten im Einstiegsbild des Object Navigator
wählen. Suchen Sie im folgenden Dialogfenster nach der Möglichkeit, ein Paket
anzugeben, und tragen Sie den Namen des Pakets ein. Drücken Sie F5, um das Objekt
anzulegen.

3. Legen Sie die Attribute des anzulegenden Pakets fest.

4. Ordnen Sie das Paket einem Änderungsauftrag zu.

ZUSAMMENFASSUNG DER LEKTION


Nun können Sie
● Die ABAP-Development-Infrastruktur beschreiben
● Pakete anlegen

© Copyright. Alle Rechte vorbehalten. 35


Kapitel 2 : ABAP Workbench

36 © Copyright. Alle Rechte vorbehalten.


Kapitel 2
Lektion 3
Entwicklung von ABAP-Programmen

ÜBERBLICK ÜBER DIE LEKTION


In dieser Lektion wird erläutert, wie ABAP-Programme angelegt werden. Außerdem werden
Sie in die Programmiersprache ABAP und deren Syntax eingeführt.

Unternehmensszenario
Sie müssen im Rahmen eines Entwicklungsprojektes ein neues Paket und ein neues ABAP-
Programm anlegen. Sie müssen dieses Programm mithilfe eines Transaktionscodes
Benutzern zur Verfügung stellen. Dazu müssen Sie über folgende Kenntnisse verfügen:
● Anlegen von ABAP-Programmen
● Verwenden des ABAP Editor
● Aktivieren von ABAP-Programmen

LERNZIELE DER LEKTION


Am Ende dieser Lektion können Sie:
● ABAP-Programme anlegen
● ABAP-Programme mit dem ABAP Editor schreiben
● ABAP-Programme aktivieren

© Copyright. Alle Rechte vorbehalten. 37


Kapitel 2 : ABAP Workbench

Anlegen von ABAP-Programmen

Abbildung 28: Anlegen von ABAP-Programmen

In der Abbildung werden das Anlegen eines ABAP-Programms ohne Top-Include sowie die
Attribute des angelegten Programms gezeigt.
Sie lernen, wie Programme und Transaktionen in der ABAP Workbench angelegt werden.

So legen Sie ein ABAP-Programm an

1. Navigieren Sie zum Object Navigator, und verwenden Sie eine der folgenden Optionen:
a) Wählen Sie im Navigationsbereich den Objekttyp Programm, und geben Sie den
Namen des Programms im Eingabefeld ein. Beachten Sie dabei die Konventionen für
Namensräume des Kunden. Drücken Sie die Eingabetaste. Wenn das Programm nicht
vorhanden ist, wird ein Dialog angezeigt, in dem Sie das Programm anlegen können.

b) Lassen Sie sich das Paket anzeigen, in dem das Programm angelegt werden soll. Über
das Kontextmenü des Pakets oder des Knotens „Programme“ können Sie zum Dialog
zum Anlegen eines Programms gelangen.

c) Wählen Sie im Einstiegsbild des Object Navigator die Taste Objekt bearbeiten. Wählen
Sie in dem Dialogfenster die Registerkarte Programm, und geben Sie den Namen des
Programms ein. Drücken Sie zum Anlegen des Objekts die Taste F5.

2. Lassen Sie das Kennzeichen Mit TOP-Include gesetzt, um zu verhindern, dass der
Quelltext auf verschiedene Programme verteilt wird.

38 © Copyright. Alle Rechte vorbehalten.


Lektion: Entwicklung von ABAP-Programmen

Achtung:
In früheren Releases (vor SAP NetWeaver 7.40) wird dieses Ankreuzfeld
standardmäßig gesetzt und muss manuell entmarkiert werden.

3. Ändern Sie den Titel in einen selbsterklärenden Kurztext, und wählen Sie im Rahmen
dieser Schulung als Programmtyp Ausführbares Programm. Alle anderen
Programmattribute sind optional. Zum Aufrufen der Hilfe oder für weitere Details können
Sie die Taste F1 drücken.

ABAP-Grundprinzipien
Funktionen der Programmiersprache ABAP

● Die Merkmale der Programmiersprache ABAP sind folgende:


- Sie ist typisiert.
- Sie ermöglicht mehrsprachige Anwendungen.
- Sie ermöglicht den SQL-Zugriff.
- Sie ist als objektorientierte Sprache erweitert worden.
- Sie ist plattformunabhängig.
- Sie ist aufwärtskompatibel.

Die Programmiersprache ABAP ist für dialogbasierte Geschäftsanwendungen ausgelegt.


Die typgerechte Verarbeitung von Daten wird durch Typkonvertierungen und Type Casting
unterstützt.
Durch die Verwendung von übersetzbaren Textelementen können mehrsprachige
Anwendungen entwickelt werden.
Der in ABAP eingebettete Open-SQL-Standard ermöglicht einen direkten Datenbankzugriff.
ABAP Objects ist die objektorientierte Erweiterung der Programmiersprache ABAP. Die
ABAP-Syntax ist plattformunabhängig. Das heißt, ihre Bedeutung bzw. Funktion ist immer die
gleiche, unabhängig vom relationalen Datenbanksystem und Betriebssystem für den
Applikations- und Präsentationsserver. In ABAP implementierte Anwendungen werden auch
in zukünftigen Releases aufgrund der Aufwärtskompatibilität der Sprache ausgeführt werden
können.

© Copyright. Alle Rechte vorbehalten. 39


Kapitel 2 : ABAP Workbench

Allgemeine ABAP-Syntax I

Abbildung 29: Allgemeine ABAP-Syntax I

Merkmale der ABAP-Syntax


● ABAP-Programme bestehen aus einzelnen Anweisungen.
● Das erste Wort in einer Anweisung wird als ABAP-Schlüsselwort bezeichnet.
● Jede Anweisung endet mit einem Punkt.
● Zwei Wörter müssen immer durch ein Leerzeichen voneinander getrennt sein.
● Anweisungen können eingerückt sein.
● Das ABAP-Laufzeitsystem unterscheidet bei Schlüsselwörtern, Zusätzen und Operanden
nicht zwischen Groß- und Kleinschreibung.

Hinweis:
Obwohl das ABAP-Laufzeitsystem nicht zwischen Groß- und Kleinschreibung
unterscheidet, hat es sich eingebürgert, Schlüsselwörter und ihre Zusätze in
Großbuchstaben und die Operanden in Kleinbuchstaben zu schreiben. In dieser
Schulung wird diese Form der Darstellung verwendet.

Verwenden Sie für Einrückungen und die Umwandlung von Groß- und Kleinbuchstaben den
Pretty Printer im ABAP Editor. Über folgenden Menüpfad im Object Navigator können Sie die
benutzerspezifischen Einstellungen für den Pretty Printer vornehmen:
Hilfsmittel → Einstellungen → ABAP Editor → Pretty Printer.

40 © Copyright. Alle Rechte vorbehalten.


Lektion: Entwicklung von ABAP-Programmen

Allgemeine ABAP-Syntax II

Abbildung 30: Allgemeine ABAP-Syntax II

Zusätzliche Merkmale der ABAP-Syntax


● Anweisungen können über eine Zeile hinausgehen.
● Mehrere Anweisungen in einer Zeile sind möglich (aber nicht empfohlen).
● Zeilen, die mit einem Sternchen (*) in der ersten Spalte beginnen, werden vom ABAP-
Laufzeitsystem als Kommentarzeilen erkannt und ignoriert.
● Ein doppeltes Anführungszeichen (") bedeutet, dass der Rest einer Zeile ein Kommentar
ist.

Kombination von Anweisungen


● Sie können aufeinanderfolgende Anweisungen mit identischem Anfang wie folgt in einem
Kettensatz kombinieren:
- Schreiben Sie den identischen Anfang der Anweisungen, gefolgt von einem
Doppelpunkt.
- Führen Sie die Endteile der Anweisungen durch Kommas voneinander getrennt auf.
- Vor und nach Trennzeichen wie Doppelpunkten, Kommas und Punkten können Sie
Leerzeichen und Zeilenumbrüche verwenden.

Hinweis:
Diese Kurzform stellt eine vereinfachte Form der Syntax dar und führt zu keiner
Performanceverbesserung. Das ABAP-Laufzeitsystem verarbeitet jede einzelne
Anweisung.

© Copyright. Alle Rechte vorbehalten. 41


Kapitel 2 : ABAP Workbench

Schlüsselwortdokumentation im ABAP Editor

Abbildung 31: Schlüsselwortdokumentation im ABAP Editor

Zugriff auf die Dokumentation für eine ABAP-Anweisung


● Es gibt folgende Möglichkeiten, zur Dokumentation einer ABAP-Anweisung zu gelangen:
- Drücken Sie die Taste F1, um direkt zur Dokumentation für die Anweisung zu gelangen,
auf der sich der Cursor befindet.
- Wählen Sie die Drucktaste „i" mit der Beschreibung „Hilfe zu...“, um zu einem
Dialogfenster zu gelangen, in dem Sie das gewünschte ABAP-Schlüsselwort eingeben
können.

42 © Copyright. Alle Rechte vorbehalten.


Lektion: Entwicklung von ABAP-Programmen

ABAP Editor

Abbildung 32: Voriger ABAP Editor

Je nach Release und Support-Package-Level stehen für die Entwicklung von ABAP-
Programmen verschiedene Editoren zur Verfügung. Die Wahl des Editors ist
benutzerspezifisch und kann geändert werden (wählen Sie im Object Navigator den Pfad
Hilfsmittel → Einstellungen → ABAP Editor).
Der neueste ABAP Editor (Frontend-Editor (neu)) bietet gegenüber dem klassischen ABAP
Editor (Frontend-Editor (alt)) eine Reihe neuer Optionen und einfach zu handhabender
Zusatzfunktionen. Er wurde für SAP NetWeaver 7.0 entwickelt. Eine Verwendung in älteren
Releases ist mit einem entsprechenden Support-Package-Level möglich (SAP NetWeaver AS
6.40: SP18; SAP Web Application Server 6.20: SP59).

© Copyright. Alle Rechte vorbehalten. 43


Kapitel 2 : ABAP Workbench

Neuer ABAP Editor

Abbildung 33: Neuer ABAP Editor

Vom neuen ABAP Editor bereitgestellte Optionen


Einige wichtige Optionen des neuen ABAP Editor sind folgende:
● Für verschiedene Objekte im Quelltext können unterschiedliche Darstellungsfarben
gewählt werden.
● Schriftart und -größe können benutzerspezifisch eingestellt werden.
● Sie können verschiedene Quelltextblöcke wie Schleifen und bedingte Verzweigungen
komprimieren, um einen besseren Überblick zu erhalten.
● Mit Lesezeichen können Sie relevante Quelltextstellen schneller wiederfinden.
● Die Anzeige von Zeilennummern und der aktuellen Schachtelung erleichtert die
Orientierung.
● Sie können sich vom ABAP Editor ganze Wörter vorschlagen lassen, wenn Sie die ersten
Zeichen von ABAP-Schlüsselwörtern und Datenobjekten eingeben.
● Sie können sich eine kleine Popup-Liste mit geeigneten Vorschlägen für die aktuelle
Cursor-Position vom neuen ABAP Editor generieren lassen (seit SAP NetWeaver 7.0
EhP2), wenn Sie STRG und die Leertaste drücken.

44 © Copyright. Alle Rechte vorbehalten.


Lektion: Entwicklung von ABAP-Programmen

Aktivierung von Programmen

Abbildung 34: Inaktive und aktive Entwicklungsobjekte

Immer, wenn Sie ein Entwicklungsobjekt anlegen oder ändern und danach sichern, speichert
das System eine inaktive Version im Repository.
Sie können eine aktive und eine inaktive Version des Objekts haben. Wenn Sie die Entwicklung
des Objekts abgeschlossen haben, müssen Sie die inaktive Version (Bearbeitungsversion)
des Objekts aktivieren. Die inaktive Version wird dann zur neuen aktiven Version des Objekts.

Notiz:
Die Auftragsfreigabe und der Transport der entwickelten Objekte sind nur dann
möglich, wenn alle im Auftrag befindlichen Objekte aktiviert sind.

Wenn Ihr Programm in beiden Versionen (aktiv und inaktiv) verfügbar ist, können Sie im ABAP
Editor über die entsprechende Drucktaste zwischen diesen beiden Versionen wechseln.
Immer, wenn Sie ein Programm aktivieren, zeigt das System eine Liste aller inaktiven Objekte
an, die Sie bearbeitet haben. Dies ist Ihr Arbeitsvorrat. Wählen Sie die Objekte aus, die Sie im
aktuellen Aktivierungsvorgang aktivieren möchten.

Während der Aktivierung eines Objekts ausgeführte Funktionen


● Die Aktivierung eines Objekts beinhaltet folgende Funktionen:
- Sichern des Objekts als inaktive Version

© Copyright. Alle Rechte vorbehalten. 45


Kapitel 2 : ABAP Workbench

- Überprüfen der Syntax und Konsistenz der inaktiven Version


- Überschreiben der bisher aktiven Version mit der inaktiven (nur nach erfolgreicher
Prüfung)
- Generieren des zugehörigen Laufzeitobjekts für die spätere Ausführung, wenn es sich
bei dem Objekt um ein Programm handelt

Generierung von Laufzeitobjekten

Abbildung 35: Generierung von Laufzeitobjekten

Beim Generieren eines Entwicklungsobjekts wird ein separates Laufzeitobjekt (LOAD-


Kompilierung) erzeugt, das im Repository gespeichert wird. Diese generierte Version wird zur
Laufzeit ausgeführt bzw. interpretiert.

Verwendung von aktiven und inaktiven Versionen


● Wenn Sie Ihr Programm über das Kontextmenü des Navigationsbereichs oder durch
Ausführen einer Transaktion starten, wird die aktive Version verwendet. Das heißt, die bei
der letzten Aktivierung generierte LOAD wird ausgeführt.
● In Releases vor SAP NetWeaver 7.50 kann die inaktive Version eines Programms auch
über die Option Direkt oder die Taste F8 ausgeführt werden. In diesem Fall wird ein
temporäres Laufzeitobjekt generiert und ausgeführt.
● Ab Release SAP NetWeaver 7.50 können Sie Ihr Programm nur nach der Aktivierung
ausführen. Wenn Sie für eine inaktive Programmversion die Option Direkt wählen oder die
Taste F8 drücken, wird eine Fehlermeldung angezeigt.

46 © Copyright. Alle Rechte vorbehalten.


Lektion: Entwicklung von ABAP-Programmen

ZUSAMMENFASSUNG DER LEKTION


Nun können Sie
● ABAP-Programme anlegen
● ABAP-Programme mit dem ABAP Editor schreiben
● ABAP-Programme aktivieren

© Copyright. Alle Rechte vorbehalten. 47


Kapitel 2 : ABAP Workbench

48 © Copyright. Alle Rechte vorbehalten.


Kapitel 2
Lektion 4
Abschließen von ABAP-Entwicklungsprojekten

ÜBERBLICK ÜBER DIE LEKTION


In dieser Lektion wird erläutert, wie Transaktionen angelegt und Änderungsaufträge
freigegeben werden.

Unternehmensszenario
Sie müssen Transaktionen anlegen und Änderungsaufträge freigeben. Dazu müssen Sie über
folgende Kenntnisse verfügen:
● Anlegen von Transaktionen
● Freigabe von Änderungsaufträgen

LERNZIELE DER LEKTION


Am Ende dieser Lektion können Sie:
● Transaktionen anlegen
● Änderungsaufträge freigeben

Anlegen von Transaktionen

Abbildung 36: Anlegen von Transaktionen

© Copyright. Alle Rechte vorbehalten. 49


Kapitel 2 : ABAP Workbench

In ein Rollenmenü und in die Favoriten eines Benutzers können nur Transaktionen
aufgenommen werden. Wenn Sie ein Programm in einem Rollenmenü oder den Favoriten
eines Benutzers platzieren möchten, müssen Sie eine Transaktion anlegen, die das
Programm repräsentiert und diese Transaktion in das Menü integriert. Alternativ dazu kann
das Programm auch durch die Eingabe des Transaktionscodes in das Befehlsfeld gestartet
werden.

So legen Sie eine Transaktion an

1. Lassen Sie sich die Objektliste des Programms im Object Navigator anzeigen.

2. Markieren Sie im Navigationsbereich Ihr Programm, und wählen Sie


Anlegen → Transaktion im Kontextmenü.

3. Geben Sie den gewünschten Transaktionscode ein. Beachten Sie dabei die Konventionen
des Kunden für Namensräume.
Vergeben Sie einen Kurztext, und wählen Sie den Auswahlknopf Programm und
Selektionsbild (Reporttransaktion).

4. Geben Sie auf dem Folgebild den Namen des Programms ein, und wählen Sie Professional
User Transaction.
Setzen Sie unter GUI-Fähigkeit das Kennzeichen SAP GUI for Windows.

5. Sichern Sie die Transaktion.

6. Ordnen Sie die Transaktion auf den folgenden Bildern einem Paket und einem
Änderungsauftrag zu.

Notiz:
Jede Transaktion ist ein Repository-Objekt.

50 © Copyright. Alle Rechte vorbehalten.


Lektion: Abschließen von ABAP-Entwicklungsprojekten

Transaktionen in den persönlichen Favoriten

Abbildung 37: Einfügen einer Transaktion in die persönlichen Favoriten

So fügen Sie eine Transaktion zu den persönlichen Favoriten hinzu

1. Navigieren Sie zum Einstiegsbild, dem Bild SAP Easy Access.

2. Wählen Sie im Kontextmenü für Favoriten den Eintrag Transaktion einfügen.

3. Geben Sie im Dialogfenster den gewünschten Transaktionscode ein.


Der Kurztext der Transaktion wird nun unter dem Kontextmenü Favoriten angezeigt. Sie
können das entsprechende Programm mit einem Doppelklick starten.

© Copyright. Alle Rechte vorbehalten. 51


Kapitel 2 : ABAP Workbench

Freigabe von Änderungsaufträgen

Abbildung 38: Freigabe von Aufgaben durch den Entwickler

Hat ein Projektmitarbeiter die Entwicklungsaufgabe abgeschlossen, führt er eine


Qualitätskontrolle durch und gibt die Aufgabe innerhalb des Änderungsauftrags frei.
Das System überträgt die entsprechenden Objekteinträge sowie die bei Projektbeginn
automatisch gesetzten Änderungssperren des Objekts für Dritte von der Aufgabe an den
Auftrag.
Diese Objekte können jedoch weiterhin von allen Mitarbeitern des Projektes bearbeitet
werden. Nach der Freigabe aller Aufgaben in einem Änderungsauftrag führt der Projektleiter
die Endkontrolle der Objekte durch und gibt den Änderungsauftrag frei. Damit ist das Projekt
abgeschlossen.

52 © Copyright. Alle Rechte vorbehalten.


Lektion: Abschließen von ABAP-Entwicklungsprojekten

Abschluss des Projekts durch Freigabe des Auftrags (Projektleiter)

Abbildung 39: Abschluss des Projekts durch Freigabe des Auftrags (Projektleiter)

Bei Auftragsfreigabe werden alle zum Auftrag gehörenden Objektsperren aufgehoben.


Kopien der entwickelten Objekte werden in das systemeigene Transportverzeichnis exportiert
und warten dort auf den Import in das vorgesehene Zielsystem durch den
Systemadministrator.
Eine weitere Kopie der exportierten Entwicklungsobjekte wird in der systemeigenen
Versionsdatenbank abgelegt.

ZUSAMMENFASSUNG DER LEKTION


Nun können Sie
● Transaktionen anlegen
● Änderungsaufträge freigeben

© Copyright. Alle Rechte vorbehalten. 53


Kapitel 2 : ABAP Workbench

54 © Copyright. Alle Rechte vorbehalten.


Kapitel 2

Überprüfung des Lernerfolgs

1. Welche der folgenden Entwicklungsobjekte befinden sich im Repository?


Wählen Sie die richtigen Antworten.

X A Programme

X B Funktionsbausteine

X C Object Navigator

X D Definitionen von Datenbanktabellen

2. Mit welchem der folgenden ABAP-Workbench-Werkzeuge werden Quelltexte bearbeitet?


Wählen Sie die richtige Antwort.

X A ABAP Editor

X B ABAP Dictionary

X C Repository-Infosystem

X D Menu Painter

3. Bei welchen der folgenden Punkte handelt es sich um Pakettypen?


Wählen Sie die richtigen Antworten.

X A Anwendungskomponente

X B Entwicklungspaket

X C Hauptpaket

X D Softwarekomponente

© Copyright. Alle Rechte vorbehalten. 55


Kapitel 2 : Überprüfung des Lernerfolgs

4. Bei welcher Aktion wird der Transport von Entwicklungsobjekten für einen
Entwicklungsauftrag ausgelöst?
Wählen Sie die richtige Antwort.

X A Beim Sichern eines Objekts

X B Beim Aktivieren eines Objekts

X C Bei der Freigabe einer Aufgabe

X D Bei der Freigabe eines Auftrags

5. Immer, wenn Sie ein Entwicklungsobjekt anlegen oder ändern und danach sichern,
speichert das System zwei inaktive Versionen im Repository.
Entscheiden Sie, ob diese Aussage richtig oder falsch ist.

X Richtig

X Falsch

6. Welche der folgenden Aussagen über die Programmiersprache ABAP ist richtig?
Wählen Sie die richtigen Antworten.

X A Sie ermöglicht mehrsprachige Anwendungen.

X B Sie ermöglicht den SQL-Zugriff.

X C Sie ist plattformabhängig.

X D Sie ist typisiert.

7. ABAP Objects ist die objektorientierte Erweiterung der Programmiersprache ABAP.


Entscheiden Sie, ob diese Aussage richtig oder falsch ist.

X Richtig

X Falsch

8. Wie fügen Sie Kommentarzeilen ein?


Wählen Sie die richtige Antwort.

X A Sie beginnen die Zeile mit einem Rautezeichen (#) in der ersten Spalte.

X B Sie beginnen die Zeile mit einem Sternchen (*) in der ersten Spalte.

X C Sie beenden die Zeile mit einem Sternchen (*) in der letzten Spalte.

X D Sie beenden die Zeile mit einem Rautezeichen (#) in der letzten Spalte.

56 © Copyright. Alle Rechte vorbehalten.


Kapitel 2 : Überprüfung des Lernerfolgs

9. Wenn ein Projektmitarbeiter die entsprechende Entwicklungsaufgabe abgeschlossen hat,


sollte er:
Wählen Sie die richtige Antwort.

X A die Aufgabe an das Produktivsystem übergeben

X B die Aufgabe innerhalb des Änderungsauftrags freigeben

X C die Aufgabe entsperren und in das Transportverzeichnis exportieren

X D den Projektauftrag exportieren

© Copyright. Alle Rechte vorbehalten. 57


Kapitel 2

Überprüfung des Lernerfolgs - Antworten

1. Welche der folgenden Entwicklungsobjekte befinden sich im Repository?


Wählen Sie die richtigen Antworten.

X A Programme

X B Funktionsbausteine

X C Object Navigator

X D Definitionen von Datenbanktabellen

Das ist richtig. Das Repository besteht aus allen ABAP-Entwicklungsobjekten wie
Programmen, Funktionsbausteinen und Definitionen für Datenbanktabellen usw. Es
enthält Objekte, die von SAP bereitgestellt wurden, sowie vom Kunden definierte Objekte.
Beachten Sie, dass die Begriffe Repository-Objekt und Entwicklungsobjekt oft synonym
verwendet werden. Weitere Informationen finden Sie im Abschnitt „ABAP Repository“ in
der Lektion „Vorstellung der ABAP Workbench“ im Kurs BC400 (Kapitel 2, Lektion 1) oder
TAW10 Teil I (Kapitel 8, Lektion 1).

2. Mit welchem der folgenden ABAP-Workbench-Werkzeuge werden Quelltexte bearbeitet?


Wählen Sie die richtige Antwort.

X A ABAP Editor

X B ABAP Dictionary

X C Repository-Infosystem

X D Menu Painter

Das ist richtig. Der ABAP Editor bietet neben vielen weiteren Funktionen die Bearbeitung
des Quelltextes, Syntaxprüfungen und Optionen für die Großschreibung von ABAP-
Schlüsselwörtern. Weitere Informationen finden Sie im Abschnitt „Tools der ABAP
Workbench“ in der Lektion „Vorstellung der ABAP Workbench“ im Kurs BC400 (Kapitel 2,
Lektion 1) oder TAW10 Teil I (Kapitel 8, Lektion 1).

58 © Copyright. Alle Rechte vorbehalten.


Kapitel 2 : Überprüfung des Lernerfolgs - Antworten

3. Bei welchen der folgenden Punkte handelt es sich um Pakettypen?


Wählen Sie die richtigen Antworten.

X A Anwendungskomponente

X B Entwicklungspaket

X C Hauptpaket

X D Softwarekomponente

Das ist richtig. Es gibt drei Pakettypen: Entwicklungspaket (kann Repository-Objekte und
andere Pakete enthalten), Hauptpaket (enthält nur andere Pakete) und Strukturpaket
(enthält nur Hauptpakete). Weitere Informationen finden Sie im Abschnitt „Attribute eines
Pakets“ in der Lektion „Organisation von ABAP-Entwicklungsprojekten“ im Kurs BC400
(Kapitel 2, Lektion 2) oder TAW10 Teil I (Kapitel 8, Lektion 2).

4. Bei welcher Aktion wird der Transport von Entwicklungsobjekten für einen
Entwicklungsauftrag ausgelöst?
Wählen Sie die richtige Antwort.

X A Beim Sichern eines Objekts

X B Beim Aktivieren eines Objekts

X C Bei der Freigabe einer Aufgabe

X D Bei der Freigabe eines Auftrags

Das ist richtig. Wenn ein Entwickler das Entwicklungsprojekt abschließt, gibt der
Entwickler die zugehörige Aufgabe frei. Durch diese Freigabe werden die Objekte der
Aufgabe an den Transportauftrag übergeben. Geben alle Mitarbeiter ihre Aufgaben frei,
kann der Entwicklungsverantwortliche den Transportauftrag freigeben und der Transport
wird ausgelöst. Weitere Informationen finden Sie im Abschnitt „Projektabschluss durch
Freigabe des Auftrags (Projektmanager)“ in der Lektion „Abschluss von ABAP-
Entwicklungsprojekten“ im Kurs BC400 (Kapitel 2, Lektion 4) oder TAW10 Teil I (Kapitel 8,
Lektion 4).

© Copyright. Alle Rechte vorbehalten. 59


Kapitel 2 : Überprüfung des Lernerfolgs - Antworten

5. Immer, wenn Sie ein Entwicklungsobjekt anlegen oder ändern und danach sichern,
speichert das System zwei inaktive Versionen im Repository.
Entscheiden Sie, ob diese Aussage richtig oder falsch ist.

X Richtig

X Falsch

Das ist richtig. Immer, wenn Sie ein Entwicklungsobjekt anlegen oder ändern und danach
sichern, speichert das System nur eine inaktive Version im Repository. Sie haben eine
aktive und eine inaktive Version des Objekts. Wenn Sie mit der Objektentwicklung fertig
sind, müssen Sie die inaktive Version (Bearbeitungsversion) des Objekts aktivieren. Dabei
wird sie zur neuen aktiven Version des Objektes. Weitere Informationen finden Sie im
Abschnitt „Aktivierung von Programmen“ in der Lektion „Entwicklung von ABAP-
Programmen“ im Kurs BC400 (Kapitel 2, Lektion 3) oder TAW10 Teil I (Kapitel 8, Lektion
3).

6. Welche der folgenden Aussagen über die Programmiersprache ABAP ist richtig?
Wählen Sie die richtigen Antworten.

X A Sie ermöglicht mehrsprachige Anwendungen.

X B Sie ermöglicht den SQL-Zugriff.

X C Sie ist plattformabhängig.

X D Sie ist typisiert.

Das ist richtig. Die Merkmale der Programmiersprache ABAP sind folgende: Sie ist
typisiert, sie ermöglicht mehrsprachige Anwendungen, sie ermöglicht SQL-Zugriffe, sie ist
als objektorientierte Sprache erweitert worden, sie ist plattformunabhängig, sie ist
aufwärtskompatibel. Weitere Informationen finden Sie im Abschnitt „Funktionen der
Programmiersprache ABAP“ in der Lektion „Entwicklung von ABAP-Programmen“ im
Kurs BC400 (Kapitel 2, Lektion 3) oder TAW10 Teil I (Kapitel 8, Lektion 3).

7. ABAP Objects ist die objektorientierte Erweiterung der Programmiersprache ABAP.


Entscheiden Sie, ob diese Aussage richtig oder falsch ist.

X Richtig

X Falsch

Das ist richtig. ABAP Objects ist die objektorientierte Erweiterung der
Programmiersprache ABAP. Weitere Informationen erhalten Sie in der Lektion
„Entwicklung von ABAP-Programmen“ im Abschnitt „Funktionen der
Programmiersprache ABAP“ im Kurs BC400 (Kapitel 2, Lektion 3) oder TAW10 Teil I
(Kapitel 8, Lektion 3).

60 © Copyright. Alle Rechte vorbehalten.


Kapitel 2 : Überprüfung des Lernerfolgs - Antworten

8. Wie fügen Sie Kommentarzeilen ein?


Wählen Sie die richtige Antwort.

X A Sie beginnen die Zeile mit einem Rautezeichen (#) in der ersten Spalte.

X B Sie beginnen die Zeile mit einem Sternchen (*) in der ersten Spalte.

X C Sie beenden die Zeile mit einem Sternchen (*) in der letzten Spalte.

X D Sie beenden die Zeile mit einem Rautezeichen (#) in der letzten Spalte.

Das ist richtig. Zeilen, die mit einem Sternchen (*) in der ersten Spalte beginnen, werden
vom ABAP-Laufzeitsystem als Kommentarzeilen erkannt und ignoriert. Weitere
Informationen erhalten Sie in der Lektion „Entwicklung von ABAP-Programmen“ im
Abschnitt „Allgemeine ABAP-Syntax II“ im Kurs BC400 (Kapitel 2, Lektion 3) oder TAW10
Teil I (Kapitel 8, Lektion 3).

9. Wenn ein Projektmitarbeiter die entsprechende Entwicklungsaufgabe abgeschlossen hat,


sollte er:
Wählen Sie die richtige Antwort.

X A die Aufgabe an das Produktivsystem übergeben

X B die Aufgabe innerhalb des Änderungsauftrags freigeben

X C die Aufgabe entsperren und in das Transportverzeichnis exportieren

X D den Projektauftrag exportieren

Das ist richtig. Bei der Bearbeitung bzw. Erstellung eines Entwicklungsobjekts ordnet der
betreffende Mitarbeiter dieses dem Änderungsauftrag zu. Dabei wird das Objekt in die
Aufgabe des Mitarbeiters eingetragen. In der Aufgabe des Mitarbeiters werden alle
Repository-Objekte gesammelt, an denen er während des Entwicklungsprojekts arbeitet.
Die Aufgabe wird vom Mitarbeiter freigegeben, wenn jegliche zugeordnete Arbeit erledigt
ist. Weitere Informationen erhalten Sie in der Lektion „Organisation von ABAP-
Entwicklungsprojekten“ im Abschnitt „Transport von Entwicklungsobjekten“ im Kurs
BC400 (Kapitel 2, Lektion 2) oder TAW10 Teil I (Kapitel 8, Lektion 2).

© Copyright. Alle Rechte vorbehalten. 61


Kapitel 2 : Überprüfung des Lernerfolgs - Antworten

62 © Copyright. Alle Rechte vorbehalten.


KAPITEL 3 Grundlegende ABAP-
Sprachelemente

Lektion 1
Definition elementarer Datenobjekte 65

Lektion 2
Verwenden grundlegender ABAP-Anweisungen 77

Lektion 3
Analysieren von Programmen mit dem ABAP Debugger 87

LERNZIELE

● Datentypen und Datenobjekte vergleichen


● Die ABAP-Syntax von grundlegenden Programmierkonzepten erläutern
● Werte von elementaren Datenobjekten mit dem ABAP Debugger analysieren

© Copyright. Alle Rechte vorbehalten. 63


Kapitel 3 : Grundlegende ABAP-Sprachelemente

64 © Copyright. Alle Rechte vorbehalten.


Kapitel 3
Lektion 1
Definition elementarer Datenobjekte

ÜBERBLICK ÜBER DIE LEKTION


In dieser Lektion werden die Verwendung elementarer Datenobjekte und deren Definition in
ABAP-Programmen beschrieben.

Unternehmensszenario
Beim Entwickeln von ABAP-Programmen verwenden Sie verschiedene Datenobjekte für den
Umgang mit Daten. Deshalb benötigen Sie folgende Kenntnisse:
● Wie sich Datentypen und Variablen voneinander unterscheiden und wie sie verwendet
werden
● Wie sich lokale und globale Datentypen voneinander unterscheiden und wie sie verwendet
werden
● Verwendung von Literalen, Konstanten und Textsymbolen

LERNZIELE DER LEKTION


Am Ende dieser Lektion können Sie:
● Datentypen und Datenobjekte vergleichen

Datentypen und Datenobjekte

Abbildung 40: Verwendung von Datentypen

© Copyright. Alle Rechte vorbehalten. 65


Kapitel 3 : Grundlegende ABAP-Sprachelemente

Eine formale Variablenbeschreibung wird als Datentyp bezeichnet. Eine Variable oder
Konstante, die konkret durch einen Datentyp definiert ist, wird als Datenobjekt bezeichnet.
Die Abbildung zeigt die Einsatzmöglichkeiten von Datentypen.

Verwendung von Datentypen


● Sie können Datentypen in den folgenden Situationen verwenden:
- Zum Definieren von Datenobjekten.
Der Typ eines Datenobjekts bestimmt dessen technische Eigenschaften.
- Zum Definieren von Schnittstellenparamenern.
Der Typ eines Schnittstellenparameters legt fest, von welchem Typ der
Aktualparameter sein muss, der beim Aufruf der Modularisierungseinheit übergeben
wird.
- Zum Definieren von Eingabe- und Ausgabefeldern.
Der Typ eines Ein- bzw. Ausgabefeldes kann neben den technischen Eigenschaften
weitere Informationen liefern, z.B. Feld- und Eingabehilfe.

Der Schwerpunkt dieser Lektion liegt auf der Verwendung von Datentypen bei der Definition
interner Programmvariablen.

ABAP-Standarddatentypen
Gruppen von ABAP-Standarddatentypen
● Die ABAP-Standarddatentypen (eingebaute Datentypen) sind in zwei Gruppen unterteilt:
- Vollständig
- Unvollständig

Vollständige ABAP-Standarddatentypen
Die eingebauten ABAP-Standarddatentypen, die bereits eine typspezifische feste
Längenangabe enthalten, werden als vollständige Datentypen bezeichnet.

Tabelle 1: Vollständige ABAP-Standarddatentypen


Standardtypen Beschreibung
D Typ für Datum (D), Format: JJJJMMTT, Länge 8 (fix)
T Typ für Uhrzeit (T), Format: HHMMSS, Länge 6 (fix)
I, INT8 Typ für Integer, entweder Länge 4 (fix) (für I), oder Län-
ge 8 (fix) (für INT8)
F Typ für Gleitpunktzahl (Floating point number), Länge 8
(fix)
STRING Typ für Zeichenfolge dynamischer Länge
XSTRING Typ für Byte-Folge dynamischer Länge (HeXadecimal
string)

66 © Copyright. Alle Rechte vorbehalten.


Lektion: Definition elementarer Datenobjekte

Standardtypen Beschreibung
DECFLOAT16, DECFLOAT34 Typ zum Sichern von Zahlen mit Mantisse und Exponent
(DECimal FLOATing point), entweder Länge 8 Byte mit
16 Dezimalstellen (fix) (für DECFLOAT16) oder Länge 16
Byte mit 34 Dezimalstellen (fix) (für DECFLOAT34)

Unvollständige ABAP-Standarddatentypen
Die Standardtypen, die keine feste Länge haben, werden als unvollständige Datentypen
bezeichnet. Beim Definieren von Datenobjekten müssen Sie die Länge der Variable angeben.

Tabelle 2: Unvollständige ABAP-Standarddatentypen


Standardtypen Beschreibung
C Typ für Zeichenfolge (Character), für welche die Länge
angegeben werden muss
N Typ für numerische Zeichenfolge (Numerical character),
für welche die Länge angegeben werden muss
X Typ für Byte-Folge (HeXadecimal), für welche die Länge
angegeben werden muss
P Typ für gepackte Zahl (Packed number), für welche die
Länge angegeben werden muss (beim Definieren einer
gepackten Zahl kann auch die Anzahl der Dezimalstellen
angegeben werden)

Weitere Informationen zu den vordefinierten ABAP-Typen finden Sie in der


Schlüsselwortdokumentation für die TYPES- oder DATA-Anweisung.

Notiz:
Die Datentypen DECFLOAT16 und DECFLOAT34 wurden in NetWeaver 7.0 EhP2
eingeführt. In ihnen sind die Vorteile der klassischen Datentypen P (exakte
Berechnung im Dezimalmodus) und F (großer Wertebereich) miteinander
kombiniert, während die Nachteile der beiden klassischen Datentypen vermieden
werden.
Typ INT8 wurde mit SAP AS 7.50 eingeführt. Er ermöglicht größere Integer-Werte.

© Copyright. Alle Rechte vorbehalten. 67


Kapitel 3 : Grundlegende ABAP-Sprachelemente

Lokale Datentypen

Abbildung 41: Deklaration lokaler Typen

Unter Verwendung der Standarddatentypen können Sie im Programm lokale Datentypen


deklarieren, die vollständiger oder komplexer sein können als die zugrunde liegenden
Standarddatentypen. Lokale Datentypen existieren nur im betreffenden Programm und
können auch nur dort verwendet werden. Die Deklaration erfolgt mithilfe der TYPES-
Anweisung.

Hinweis:
Zur Angabe der Länge mit dem Zusatz LENGTH gibt es eine alternative Syntax,
die Sie in älteren Programmen finden.
Die Länge wird in Klammern direkt nach dem Namen des Typs angegeben.
TYPES tv_c_type(3) TYPE c.
TYPES tv_p_type(3) TYPE p DECIMALS 2.
Um die Lesbarkeit Ihrer Programme zu verbessern, sollten Sie diese veraltete
Syntax nicht mehr verwenden.

68 © Copyright. Alle Rechte vorbehalten.


Lektion: Definition elementarer Datenobjekte

Globale Datentypen

Abbildung 42: Globale Datentypen im Dictionary

Ein Datentyp, der im ABAP Dictionary definiert wurde, ist ein globaler Datentyp, da er im
gesamten betreffenden SAP-System verwendet werden kann.
In dieser Lektion lernen Sie lediglich, wie Datenelemente als Datentypen für elementare
Datenobjekte verwendet werden.

© Copyright. Alle Rechte vorbehalten. 69


Kapitel 3 : Grundlegende ABAP-Sprachelemente

Definition variabler Datenobjekte

Abbildung 43: Definition variabler Datenobjekte

Kategorien von Datentypen


● Eingebaut
● Lokal
● Global

Diese Typen werden zum Definieren von Variablen (Datenobjekte) verwendet.


Datenobjekte werden stets mit dem Schlüsselwort DATA definiert. Zum Definieren eines
Datenobjekts können Sie einen ABAP-Standardtyp, einen lokalen oder globalen Typ
verwenden.
Es besteht die Möglichkeit, sich bei der Definition weiterer Variablen auf ein bereits definiertes
Datenobjekt zu beziehen (LIKE-Zusatz).

70 © Copyright. Alle Rechte vorbehalten.


Lektion: Definition elementarer Datenobjekte

Notiz:
Um die Lesbarkeit Ihres Codes zu verbessern, empfiehlt SAP,
Namenskonventionen für Namen von selbst definierten Typen (mit der TYPES-
Anweisung deklariert) oder Variablen (mit der DATA-Anweisung deklariert) zu
verwenden. In dieser Schulung verwenden wir die folgende Namenskonvention:
Zweck Präfix

Programm-globaler* Typ oder loka- tv_


ler** Typ (keine Unterscheidung)
Programm-globale* Variable gv_
Lokale** Variable lv_

* Hinweis: Programm-global meint in diesem Fall, dass ein Typ bzw. eine Variable
in Ihrem gesamten Programm zu sehen ist. Der Typ bzw. die Variable wird jedoch
lokal in Ihrem Programm definiert. Sie können Typen auch systemglobal
definieren (über Einträge im ABAP Dictionary). Diese Typdefinitionen sind in allen
ABAP-Programmen Ihres SAP-Systems sichtbar und verwendbar.
** Hinweis: Lokal bedeutet in diesem Fall lokal für ein Unterprogramm.

Beispiele für die Definition elementarer Datenobjekte

Abbildung 44: Beispiele für die Definition elementarer Datenobjekte

Mit dem Zusatz VALUE können Sie den Wert eines elementaren Datenobjekts vorbelegen.

© Copyright. Alle Rechte vorbehalten. 71


Kapitel 3 : Grundlegende ABAP-Sprachelemente

Hinweis:
Auch in der DATA-Anweisung besteht die Möglichkeit, die Länge in Klammern
nach dem Variablennamen anzugeben. Beispiel:
DATA gv_myvar(15) TYPE c.
DATA gv_myvar_p(4) TYPE p DECIMALS 2.
Um die Lesbarkeit Ihres Programmcodings zu verbessern, empfehlen wir die
Verwendung des Zusatzes LENGTH.

Fehlt bei einer Variablendefinition die Längenangabe, wird eine Standardlänge für den
(unvollständigen) Standarddatentyp verwendet (Länge 1 bei den Typen C, N und X und Länge
8 beim Typ P). Wenn auch der Datentyp fehlt, wird der Standardtyp C verwendet. Die
Anweisung „DATA gv_myvar.“ beispielsweise, die keine Typ- und Längenangabe hat, definiert
eine Variable vom Typ C mit der Länge 1.

Hinweis:
Um die Lesbarkeit zu verbessern, sollten Sie immer den Datentyp und die Länge
angeben.

Weitere Details können Sie der Schlüsselwortdokumentation für die TYPES- oder DATA-
Anweisung entnehmen.

Literale, Konstanten und Textsymbole

Abbildung 45: Literale und Konstanten (fixe Datenobjekte)

72 © Copyright. Alle Rechte vorbehalten.


Lektion: Definition elementarer Datenobjekte

Fixe Datenobjekte haben einen Festwert, der beim Schreiben des Quelltexts definiert wird und
nicht zur Laufzeit geändert werden kann. Literale und Konstanten gehören zu den fixen
Datenobjekten.

Notiz:
Für die Namen fixer Datenobjekte (Konstanten) werden die folgenden Definitionen
zur Namenskonvention hinzugefügt:

Zweck Präfix
Programm-globale* Konstante gc_

* Hinweis: Programm-global meint in diesem Fall, dass ein Typ bzw. eine Variable
in Ihrem gesamten Programm zu sehen ist. Der Typ bzw. die Variable wird jedoch
lokal in Ihrem Programm definiert. Sie können Typen auch systemglobal
definieren (über das ABAP Dictionary). Diese Typdefinitionen sind in allen ABAP-
Programmen Ihres SAP-Systems sichtbar und verwendbar.

Mit Literalen können Sie in Ihren Programmen feste Werte angeben. Es gibt Zahlenliterale
(Angabe ohne Hochkommata) und Textliterale (Angabe mit Hochkommata). In der Abbildung
„Textsymbole“ sehen Sie ein Beispiel für ein Textliteral (dritte Zeile der WRITE-Anweisung).
Konstanten werden mit der CONSTANTS-Anweisung definiert. Der Zusatz TYPE wird ähnlich
verwendet wie in der DATA-Anweisung. Der Zusatz VALUE ist bei Konstanten obligatorisch.
Damit definieren Sie den Wert von Konstanten.

Hinweis:
Verzichten Sie bei Ihren Anweisungen möglichst vollständig auf Literale. Nutzen
Sie stattdessen Konstanten und Textsymbole. Dadurch wird die Wartung Ihres
Programms wesentlich erleichtert.

© Copyright. Alle Rechte vorbehalten. 73


Kapitel 3 : Grundlegende ABAP-Sprachelemente

Textsymbole

Abbildung 46: Textsymbole

Ein ganz wesentliches Prinzip bei der ABAP-Entwicklung ist die Mehrsprachigkeit. Damit ist
gemeint, dass bei der Anzeige von Texten auf der Benutzungsoberfläche die Anmeldesprache
des aktuellen Benutzers berücksichtigt wird. Die Verwendung von Textliteralen ist in diesem
Zusammenhang kritisch zu sehen, weil das Literal im Quelltext nur in einer Version vorliegt
und unabhängig von der Sprache ist.
Sprachenabhängige Texte sollten Sie deshalb nur zu Testzwecken als Textliterale anlegen.
Für produktive Programme, die mit unterschiedlichen Anmeldesprachen ausführbar sind,
stellt die Programmiersprache ABAP die Textsymbole zur Verfügung.
Jedes Textsymbol wird in dem jeweiligen Programm verwendet, zu dem es gehört. Diese
Symbole werden außerhalb des Quelltexts in einem eigenen Repository-Objekt gespeichert,
dem Text-Pool für das Programm. Textsymbole können in verschiedene Sprachen übersetzt
und jeweils mit einem Sprachkennzeichen im Text-Pool gespeichert werden (siehe
Abbildung). Greift das Programm während der Ausführung auf ein Textsymbol zu,
berücksichtigt das System die Anmeldesprache des Benutzers und gibt den Text in dieser
Sprache zurück.
Ein Textsymbol wird anhand einer dreistelligen alphanumerischen ID (-xxx) identifiziert.
Um ein Textsymbol in Ihrem Programm verwenden zu können, müssen Sie sich mit TEXT-xxx
darauf beziehen, wobei xxx für die dreistellige ID des Textsymbols steht.
Um die Angabe eines Textsymbols intuitiver zu gestalten, können Sie anstelle von TEXT-xxx
auch folgende Syntax verwenden: '...'(xxx). Hierbei sollte '...' der Text des Textsymbols in der
Originalsprache des Programms sein.

74 © Copyright. Alle Rechte vorbehalten.


Lektion: Definition elementarer Datenobjekte

Definition von Textsymbolen für Programme

Optionen für die Definition von Textsymbolen für Programmme


● Wählen Sie im ABAP Editor den Pfad Springen → Textelemente und dann die Registerkarte
Textsymbole.
● Beziehen Sie sich in Ihrem Quelltext mit der Syntax TEXT-xxx: '...'(xxx) auf das
Textsymbol, und doppelklicken Sie auf seine ID (Vorwärtsnavigation).
● Für die Übersetzung der Textsymbole Ihres Programms wählen Sie
Springen → Übersetzung im Menü des ABAP Editor.

Hinweis:
Beachten Sie, dass auch Textelemente aktiviert werden müssen.

Vergleich – lokale und globale Datentypen

Abbildung 47: Lokale versus globale Datentypen

Lokale Datentypen können nur in dem Programm verwendet werden, in dem sie definiert
wurden. Bei globalen Datentypen dagegen ist eine systemweite Verwendung möglich.

Vorteile globaler Datentypen


● Globale Datentypen haben folgende Vorteile:

© Copyright. Alle Rechte vorbehalten. 75


Kapitel 3 : Grundlegende ABAP-Sprachelemente

- Die systemweite Verwendung erhöht die System Systemkonsistenz und verringert


notwendige Wartungen.
- Der Verwendungsnachweis enthält Repository-Objekte, die den betreffenden Datentyp
verwenden.
- Die semantischen Informationen in den Datentypen stimmen mit den
betriebswirtschaftlichen Beschreibungen der zu definierenden Objekte überein.
● Globale Datentypen können im gesamten System verwendet werden. Dies verbessert die
Konsistenz des Systems. Die Tatsache, dass sie wiederverwendet werden können,
reduziert den erforderlichen Wartungsaufwand.
● Für globale Datentypen kann im ABAP Dictionary ein Verwendungsnachweis durchgeführt
werden. Der Verwendungsnachweis enthält Repository-Objekte, die den betreffenden
Datentyp verwenden.
● Globale Datentypen können neben den technischen Informationen auch semantische
Informationen enthalten, die den betriebswirtschaftlichen Beschreibungen der zu
definierenden Objekte entsprechen. Diese können dann auch zur Gestaltung von
Bildschirmanzeigen genutzt werden (z.B. die Bezeichnung links neben dem Eingabefeld).

Lokale Datentypen sollten definiert werden, wenn sie nur in einem Programm benötigt
werden, und nur dann, wenn bei der Definition entsprechender Datenobjekte semantische
Informationen keine Rolle spielen.

ZUSAMMENFASSUNG DER LEKTION


Nun können Sie
● Datentypen und Datenobjekte vergleichen

76 © Copyright. Alle Rechte vorbehalten.


Kapitel 3
Lektion 2
Verwenden grundlegender ABAP-Anweisungen

ÜBERBLICK ÜBER DIE LEKTION


In dieser Lektion wird erklärt, wie elementare Datenobjekte mit Werten gefüllt und
Berechnungen in ABAP ausgeführt werden. Außerdem erhalten Sie eine Einführung in die
Konstrukte, mit denen der Programmablauf abhängig vom Inhalt der Datenobjekte gesteuert
werden kann.

Unternehmensszenario
Sie sollen ein einfaches ABAP-Programm für die Grundrechenarten erstellen. Sie müssen in
der Lage sein, Werte und den Rechenoperator einzugeben. Aus diesem Grund müssen Sie
Folgendes wissen:
● Wie elementare Datenobjekte mit Werten gefüllt werden
● Wie Berechnungen in ABAP ausgeführt werden

LERNZIELE DER LEKTION


Am Ende dieser Lektion können Sie:
● Die ABAP-Syntax von grundlegenden Programmierkonzepten erläutern

© Copyright. Alle Rechte vorbehalten. 77


Kapitel 3 : Grundlegende ABAP-Sprachelemente

Wertzuweisungen

Abbildung 48: Wertzuweisungen

Wenn Sie ein Programm starten, wird der Programmkontext in einen Speicherbereich des
Applikationsservers geladen und Speicher für die im Programm definierten Datenobjekte zur
Verfügung gestellt. Jedes elementare Datenobjekt wird mit dem typspezifischen Initialwert
vorbelegt, es sein denn, es wurde ein anderer Wert mithilfe des VALUE-Zusatzes festgelegt.

Syntaxvarianten für die MOVE-Anweisung


● Mit der MOVE-Anweisung können Sie die Inhalte eines Datenobjekts an ein anderes
Datenobjekt übertragen. Die folgenden Syntaxvarianten haben den gleichen Effekt:
- MOVE gv_var1 TO gv_var2.

- gv_var2 = gv_var1.

Wenn die beiden Datenobjekte „gv_var1“ und „gv_var2“ unterschiedlichen Typs sind, gibt es
einen Typkonflikt. In diesem Fall wird automatisch eine Typkonvertierung durchgeführt, falls
eine Konvertierungsregel existiert. Detaillierte Informationen zum Kopieren und zu den
Konvertierungsregeln erhalten Sie in der Schlüsselwortdokumentation.
Die CLEAR-Anweisung setzt den Inhalt eines Datenobjekts auf den typbezogenen Initialwert
zurück. Detaillierte Informationen zu den Initialwerten für einen bestimmten Typ können Sie
der Schlüsselwortdokumentation für die CLEAR-Anweisung entnehmen.

78 © Copyright. Alle Rechte vorbehalten.


Lektion: Verwenden grundlegender ABAP-Anweisungen

Berechnungen und arithmetische Ausdrücke

Abbildung 49: Berechnungen

Gültige Operatoren in ABAP-Programmen

● Sie können in ABAP beliebig tief geschachtelte arithmetische Ausdrücke programmieren.


- + (Addition)
- - (Subtraktion)
- * (Multiplikation)
- / (Division)
- ** (Potenzierung)
- DIV (ganzzahlige Division ohne Rest)
- MOD (Rest bei ganzzahliger Division)

Notiz:
Klammern und Operatoren sind ABAP-Schlüsselwörter und müssen daher durch
mindestens ein Leerzeichen von anderen Wörtern oder Symbolen getrennt
werden.

In die ABAP-Laufzeitumgebung sind zahlreiche Funktionen für verschiedene Datentypen


eingebaut. Zum Beispiel liefert folgende Anweisung die aktuelle Länge des Inhalts einer
Character-Variablen:
gv_length = STRLEN (gd_cityfrom).

© Copyright. Alle Rechte vorbehalten. 79


Kapitel 3 : Grundlegende ABAP-Sprachelemente

Bei Funktionen gehört die öffnende Klammer zum Funktionsnamen. Die übrigen Bestandteile
müssen durch mindestens ein Leerzeichen voneinander getrennt sein.
Bei der Verarbeitungsreihenfolge gelten algebraische Standardregeln. Ausdrücke in
Klammern kommen zuerst, gefolgt von Funktionen, Potenzen, Multiplikation und Division
sowie Addition und Subtraktion.
Weitere Informationen zu den verfügbaren Operationen und Funktionen können Sie der
Schlüsselwortdokumentation für den Zuweisungsoperator = entnehmen.

Bedingte Verzweigungen und logische Ausdrücke

Abbildung 50: Bedingte Verzweigungen

Ausführung quelltextbasierter Bedingungen


● ABAP bietet zwei Möglichkeiten, in Abhängigkeit von gewissen Bedingungen
unterschiedliche Anweisungsfolgen auszuführen:
- Im IF-Konstrukt können Sie beliebige logische Ausdrücke als Prüfbedingung definieren.
- Im CASE-Konstrukt können Sie Fälle eindeutig voneinander unterscheiden.
● Im IF-Konstrukt können Sie beliebige logische Ausdrücke als Prüfbedingung definieren. Ist
die Bedingung erfüllt, wird der zugehörige Anweisungsblock ausgeführt. Ansonsten wird
die im nächsten ELSEIF-Zweig (mehrere Zweige sind möglich) angegebene Bedingung
geprüft. Wenn keine der angegebenen Bedingungen erfüllt ist, wird der ELSE-Zweig
ausgeführt, vorausgesetzt, er ist vorhanden. Der ELSEIF-Zweig und der ELSE-Zweig sind
optional. Weitere Informationen zur Formulierung eines logischen Ausdrucks finden Sie in
der Schlüsselwortdokumentation zur IF-Anweisung.
● Im CASE-Konstrukt können Sie Fälle eindeutig voneinander unterscheiden. Der Inhalt des
im CASE-Teil angegebenen Feldes wird mit den im WHEN-Zweig aufgelisteten

80 © Copyright. Alle Rechte vorbehalten.


Lektion: Verwenden grundlegender ABAP-Anweisungen

Datenobjekten auf Übereinstimmung geprüft. Bei Übereinstimmung der Feldinhalte wird


der entsprechende Anweisungsblock verarbeitet. Wenn bei dem Vergleich keine
Übereinstimmung gefunden wurde, führt das System den OTHERS-Zweig aus, sofern er
vorhanden ist. Bis auf den ersten WHEN-Zweig sind alle weiteren Zweige optional.

In beiden Szenarios erfolgt die Prüfung der Bedingungen bzw. der Übereinstimmung
sequenziell von oben nach unten. Wenn der Anweisungsblock eines Zweigs ausgeführt wird,
verarbeitet das System die ENDIF- oder ENDCASE-Anweisungen nicht.

Hinweis:
Wenn Sie Prüfungen auf Ähnlichkeiten zwischen einem Feld und verschiedenen
Werten implementieren möchten, sollten Sie das CASE-Konstrukt der IF-
Anweisung vorziehen, da es transparenter und performanter ist.

IF-Anweisung

Abbildung 51: Beispiele – IF-Anweisung

In der Abbildung sind verschiedene einfache Beispiele (Negation, AND- und OR-Verbindungen
mit Klammern sowie Negation vor logischen Bedingungen) für die Verwendung der IF-
Anweisung zu sehen.
Sie können Negationen formulieren, indem Sie den Operator NOT vor dem logischen
Ausdruck platzieren. Beim Negieren der IS-INITIAL-Abfrage kann die spezielle IS-NOT-
INITIAL Abfrage verwendet werden.

© Copyright. Alle Rechte vorbehalten. 81


Kapitel 3 : Grundlegende ABAP-Sprachelemente

Hinweis:
Die Anweisung „IF NOT var IS INITIAL“ ist auch eine gültige Anweisung (korrekte
Syntax). Zur Verbesserung der Lesbarkeit des Programmcodes empfiehlt SAP
jedoch, diese Anweisung/Syntax nicht zu verwenden.

Erweiterte Beispiele – IF-Anweisung

Abbildung 52: Erweiterte Beispiele – IF-Anweisung

In der Abbildung sind einige erweiterte Beispiele (eingebaute Funktionen, arithmetische


Ausdrücke und Zeichenkettenausdrücke) für die Verwendung der IF-Anweisung zu sehen.
Zur Angabe eines logischen Ausdrucks kann (u.a.) Folgendes verwendet werden:
Datenobjekte, eingebaute Funktionen, arithmetische Ausdrücke und
Zeichenkettenausdrücke.
Stellen Sie beim Verschachteln der IF- und CASE-Struktur sicher, dass die Logik jeder
Struktur korrekt ist. Jede Struktur muss geschlossen sein, z.B.:
IF <log. condition1> . ...
IF <log. condition2> . .. .
ENDIF.
ENDIF.

82 © Copyright. Alle Rechte vorbehalten.


Lektion: Verwenden grundlegender ABAP-Anweisungen

Schleifen

Abbildung 53: Schleifen

Schleifenkonstrukte
In ABAP gibt es vier Schleifenkonstrukte. Das Systemfeld macht nur Sinn, wenn die Abfrage in
einer Schleife erfolgt. Bei geschachtelten Schleifen enthält das Systemfeld „sy-index“ immer
die Durchlaufnummer der Schleife, in der es sich befindet. In der DO-Schleife und der WHILE-
Schleife enthält das Systemfeld „sy-index“ die Nummer des aktuellen Schleifendurchlaufs.
Deshalb sollten Sie dieses Systemfeld nur innerhalb einer Schleife abfragen.
● Unbedingte und indexgesteuerte Schleifen
Der Anweisungsblock zwischen DO und ENDDO wird so lange immer wieder ausgeführt,
bis die Schleife über Abbruchanweisungen, z.B. EXIT, verlassen wird. Geben Sie die
maximale Anzahl der Schleifendurchläufe an. Andernfalls erhalten Sie unter Umständen
eine Endlosschleife.
● Kopfgesteuerte Schleifen
Der Anweisungsblock zwischen WHILE und ENDWHILE wird so lange immer wieder
ausgeführt, bis die angegebene Bedingung nicht mehr erfüllt ist. Die Prüfung der
Bedingung geschieht jeweils vor Ausführung des Anweisungsblocks.
● Leseschleifen
Die SELECT-Schleife liest mehrere Einträge einer Datenbanktabelle nacheinander. Die
gleiche Lesefunktionalität bei einer internen Tabelle (Tabellenvariable im Programm) wird
mit der LOOP-Schleife realisiert.

© Copyright. Alle Rechte vorbehalten. 83


Kapitel 3 : Grundlegende ABAP-Sprachelemente

Systemfelder (Auszug)

Tabelle 3: Einige nützliche Systemfelder


Systemfelder Bedeutung
sy-mandt Anmeldemandant
sy-uname Anmeldename des Benutzers
sy-langu Anmeldesprache des Benutzers

sy-datum Lokales Datum des ABAP-Systems


sy-uzeit Lokale Uhrzeit des ABAP-Systems

sy-tcode Aktueller Transaktionscode


sy-repid Name des aktuellen ABAP-Programms

sy-index Schleifenzähler bei DO- und WHILE-Schleifen

Im ABAP-Quelltext können Sie verschiedene Datenobjekte verwenden, ohne sie zuvor explizit
zu deklarieren (z.B. sy-datum und sy-index). Mit diesen Systemfeldern stellt das
Laufzeitsystem dem Anwendungsprogramm Informationen über den momentanen
Systemstatus zur Verfügung. In der Tabelle werden verschiedene Systemfelder angezeigt.
Eine vollständige Liste der Systemfelder finden Sie in der Schlüsselwortdokumentation unter
dem Begriff „Systemfelder“.
Greifen Sie in Ihren Programmen nur mit Lesezugriff auf die Systemfelder zu. Bei einem
Schreibzugriff können wichtige Informationen für Programmteile verloren gehen, die diese
Informationen benötigen. Darüber hinaus könnte das Laufzeitsystem den Feldinhalt wieder
ändern. Deshalb empfiehlt SAP, diese Felder nur zu lesen.

84 © Copyright. Alle Rechte vorbehalten.


Lektion: Verwenden grundlegender ABAP-Anweisungen

Returncode einer ABAP-Anweisung

Abbildung 54: Returncode einer ABAP-Anweisung

Eines der wichtigsten Systemfelder ist das Feld „sy-subrc“. Es wird vom ABAP-
Laufzeitsystem bei vielen Anweisungen mit dem zugehörigen Returncode ausgefüllt, um
anzugeben, ob die Anweisung erfolgreich ausgeführt werden konnte. Der Wert 0 bedeutet,
dass die Anweisung erfolgreich ausgeführt wurde. Ob und wie dieser Returncode im Einzelfall
gesetzt wird, können Sie der Schlüsselwortdokumentation zur jeweiligen Anweisung
entnehmen.

© Copyright. Alle Rechte vorbehalten. 85


Kapitel 3 : Grundlegende ABAP-Sprachelemente

Dialognachrichten

Abbildung 55: Dialognachrichten

Mit der MESSAGE-Anweisung können Sie Dialognachrichten an die Benutzer Ihres


Programms senden. Geben Sie die dreistellige Nachrichtennummer sowie die
Nachrichtenklasse an, wenn Sie die MESSAGE-Anweisung verwenden.
Nachrichtennummer und Nachrichtenklasse identifizieren eindeutig die anzuzeigende
Nachricht. Mit dem Nachrichtentyp legen Sie fest, wo die Nachricht angezeigt werden soll.
Das Anzeigeverhalten für verschiedene Nachrichtentypen können Sie mithilfe des im SAP-
Standardsystem bereitgestellten Demo-Programms DEMO_MESSAGES testen.
Sind Platzhalter in der angegebenen Nachricht enthalten, so können Sie diese mithilfe des
WITH-Zusatzes durch Werte aus Ihrem Programm ersetzen. Im angezeigten Nachrichtentext
erscheinen dann anstelle der Platzhalter die übergebenen Werte.
Weitere Informationen zu syntaktischen Alternativen zur MESSAGE-Anweisung können Sie
der Schlüsselwortdokumentation entnehmen.

ZUSAMMENFASSUNG DER LEKTION


Nun können Sie
● Die ABAP-Syntax von grundlegenden Programmierkonzepten erläutern

86 © Copyright. Alle Rechte vorbehalten.


Kapitel 3
Lektion 3
Analysieren von Programmen mit dem ABAP
Debugger

ÜBERBLICK ÜBER DIE LEKTION


In dieser Lektion wird die Funktionsweise des ABAP Debugger in Verbindung mit elementaren
Datenobjekten erklärt.

Unternehmensszenario
Als ABAP-Programmierer entwickeln Sie Programme in ABAP. Für die Programme, die Sie
entwickeln, führen Sie das Debugging durch. Dazu müssen Sie über folgende Kenntnisse
verfügen:
● Funktionsweise des ABAP Debugger in Verbindung mit elementaren Datenobjekten

LERNZIELE DER LEKTION


Am Ende dieser Lektion können Sie:
● Werte von elementaren Datenobjekten mit dem ABAP Debugger analysieren

© Copyright. Alle Rechte vorbehalten. 87


Kapitel 3 : Grundlegende ABAP-Sprachelemente

ABAP Debugger

Abbildung 56: Ein Programm im Debugging-Modus ausführen

Methoden zum Starten eines Programms im Debugging-Modus


● Die zwei Methoden, mit denen ein Programm im Debugging-Modus aus dem Object
Navigator gestartet wird, sind die folgenden:
- Öffnen Sie im Navigationsbereich das Kontextmenü für das ausgewählte Programm,
und wählen Sie Ausführen → Debugging.
- Markieren Sie im ABAP-Editor-Bereich die gewünschte Programmzeile, ab der Sie das
Debugging vornehmen möchten. Wählen Sie Breakpoint setzen/löschen. Starten Sie
das Programm, indem Sie F8 drücken oder das Kontextmenü im Navigationsbereich
aufrufen und Ausführen → Direkt wählen.
Das Setzen eines Breakpoint im ABAP Editor ist nur bei aktiven Quelltexten möglich.

88 © Copyright. Alle Rechte vorbehalten.


Lektion: Analysieren von Programmen mit dem ABAP Debugger

Debugging-Modus zur Laufzeit

Abbildung 57: Debugging-Modus zur Laufzeit

Möglichkeiten zum Wechseln in den Debugging-Modus zur Laufzeit


Wenn Sie eine bestimmte Funktion eines Programms debuggen möchten, starten Sie das
Programm zunächst ohne den ABAP Debugger, und wechseln Sie dann unmittelbar vor der
Ausführung der Funktion (z.B. Drucktaste) in den Debugging-Modus.

Möglichkeiten zum Wechseln in den Debugging-Modus zur Laufzeit


● Wählen Sie System → Hilfsmittel → Debugging ABAP (oder Dynpro).
● Geben Sie /h in das Befehlsfeld in der Standardsymbolleiste ein, und drücken Sie Enter.

© Copyright. Alle Rechte vorbehalten. 89


Kapitel 3 : Grundlegende ABAP-Sprachelemente

ABAP Debugger – Einzelschritt und Feldinhalte

Abbildung 58: ABAP Debugger – Einzelschritt und Feldinhalte

Im ABAP Debugger können Sie über „Einzelschritt“ das Programm Anweisung für Anweisung
ausführen. Darüber hinaus können Sie Datenobjekte und deren aktuelle Inhalte in der
Variablenanzeige anzeigen. Geben Sie einfach den Namen des Datenobjekts in die
Variablenanzeige ein. Alternativ dazu können Sie im Quelltext auf das Datenobjekt
doppelklicken, um den Variablennamen in die Debugger-Feldliste zu übertragen.

Notiz:
Bei Systemen mit Releases vor SAP NetWeaver AS 6.40 haben Sie nur Zugriff auf
den „klassischen“ ABAP Debugger. Bei neueren Releases stehen Ihnen der neue
und der klassische ABAP Debugger zur Verfügung. Sie können ganz einfach vom
neuen zum klassischen ABAP Debugger wechseln, indem Sie im Menü
Debugger → Wechsel zum klassischen ABAP Debugger wählen.
Im klassischen ABAP Debugger können Sie sich die Inhalte von bis zu acht
Datenobjekten anzeigen lassen. Gehen Sie hierzu wie im neuen ABAP Debugger
vor.

90 © Copyright. Alle Rechte vorbehalten.


Lektion: Analysieren von Programmen mit dem ABAP Debugger

ABAP Debugger – Breakpoints

Abbildung 59: ABAP Debugger – Breakpoints

Sie können im neuen ABAP Debugger mit einem Klick (im klassischen ABAP Debugger mit
einem Doppelklick) vor einer Quelltextzeile einen Breakpoint setzen.
Zusätzlich können Sie einen Breakpoint für bestimmte ABAP-Anweisungen setzen, indem Sie
Breakpoints → Breakpoint bei → Anweisung wählen. Wenn Sie Weiter wählen, wird das
Programm bis zum nächsten Breakpoint ausgeführt.
Die gesetzten Breakpoints gelten nur für den aktuellen ABAP-Debugger-Modus. Wenn Sie
jedoch Sichern wählen, bleiben die Breakpoints während der aktuellen SAP-Sitzung erhalten.

© Copyright. Alle Rechte vorbehalten. 91


Kapitel 3 : Grundlegende ABAP-Sprachelemente

ABAP Debugger – Verfolgen von Datenänderungen

Abbildung 60: ABAP Debugger – Verfolgen von Datenänderungen

Watchpoints
● Beachten Sie bei der Verwendung von Watchpoints folgende Punkte:
- Ein Watchpoint ist ein feldinhaltsabhängiger Breakpoint.
- Wenn Sie einen Watchpoint ohne Angabe eines Vergleichsoperators und
Vergleichswertes für ein Feld setzen und Weiter wählen, wird das Programm so lange
ausgeführt, bis sich der Inhalt des Feldes ändert.
- Wenn Sie den Vergleichsoperator und den Vergleichswert festlegen, wird das
Programm so lange ausgeführt, bis die angegebene Bedingung erfüllt ist.
- Im klassischen ABAP Debugger können Sie maximal 10 Watchpoints festlegen. Sie
können Watchpoints mithilfe eines logischen Operators (AND oder OR) auf die gleiche
Weise verknüpfen wie im neuen ABAP Debugger.

92 © Copyright. Alle Rechte vorbehalten.


Lektion: Analysieren von Programmen mit dem ABAP Debugger

ABAP Debugger – Ändern von Feldinhalten

Abbildung 61: ABAP Debugger – Ändern von Feldinhalten

Wenn Sie den Inhalt eines Feldes beim Debugging ändern möchten, doppelklicken Sie in der
Variablenanzeige auf die Bleistift-Ikone. Der Wert ist dann eingabebereit. Ändern Sie nun den
Feldwert, und bestätigen Sie dies mit der Eingabetaste. Der Wert ändert sich, während der
ABAP Debugger ausgeführt wird.
Im klassischen ABAP Debugger können Sie den Inhalt direkt in der Feldansicht ändern.
Anschließend wählen Sie die Bleistift-Ikone, um den geänderten Wert zu übernehmen.

Zusatzfunktionen des ABAP Debuggers

ABAP Debugger: zusätzliche Funktionen

● Der ABAP Debugger hat die folgenden zusätzlichen Funktionen:


- ABAP Debugger im zweiten Modus
Eingaben für das Anwendungsprogramm sind parallel sichtbar
- Parallelanzeigemöglichkeiten dank frei konfigurierbarer Anzeigebereiche
- Integration des neuen ABAP Editor
- Quick-Info im Quelltextbereich zur Wertanzeige von Datenobjekten
- Watchpoints für interne Tabellen und Objektreferenzen
- Wertvergleich bei Strings, Strukturen und internen Tabellen

© Copyright. Alle Rechte vorbehalten. 93


Kapitel 3 : Grundlegende ABAP-Sprachelemente

- Erweitertes Tabellenwerkzeug
- Erweitertes Web-Dynpro-Werkzeug

Erweiterte Funktionen des ABAP Debuggers


● Der ABAP Debugger hat die folgenden erweiterten Funktionen:
- Software-Layer Aware Debugging (SLAD)
- Automatisiertes Debugging – Debugger-Scripting
- Analyse des Speicherverbrauchs

ZUSAMMENFASSUNG DER LEKTION


Nun können Sie
● Werte von elementaren Datenobjekten mit dem ABAP Debugger analysieren

94 © Copyright. Alle Rechte vorbehalten.


Kapitel 3

Überprüfung des Lernerfolgs

1. Welche der folgenden Typen sind vollständige ABAP-Standardtypen?


Wählen Sie die richtigen Antworten.

X A T (Time)

X B C (Character)

X C N (Numerical character)

X D INT8 (Integer mit einer Länge von 8 Byte)

X E D (Date)

2. Welcher der folgenden Operatoren wird in einer IF-Anweisung verwendet, um eine


Negation vor logischen Bedingungen zu formulieren?
Wählen Sie die richtige Antwort.

X A AND

X B OR

X C END

X D NOT

3. Welche der folgenden Elemente sind in der Syntax von MESSAGE-Anweisungen


erforderlich?
Wählen Sie die richtigen Antworten.

X A Nachrichtennummer

X B Nachrichtentyp

X C Nachrichtenklasse

X D Nachrichtenrolle

© Copyright. Alle Rechte vorbehalten. 95


Kapitel 3 : Überprüfung des Lernerfolgs

4. Welches der folgenden Systemfelder enthält bei geschachtelten Schleifen die


Durchlaufnummer der Schleife, in der sich das Systemfeld befindet?
Wählen Sie die richtige Antwort.

X A sy-index

X B sy-repid

X C sy-uname

X D sy-mandt

5. Welchen der folgenden Systembefehle können Sie im Befehlsfeld eines Bilds eingeben, um
den Debugger zu starten?
Wählen Sie die richtige Antwort.

X A /d

X B /h

X C /i

X D /a

96 © Copyright. Alle Rechte vorbehalten.


Kapitel 3

Überprüfung des Lernerfolgs - Antworten

1. Welche der folgenden Typen sind vollständige ABAP-Standardtypen?


Wählen Sie die richtigen Antworten.

X A T (Time)

X B C (Character)

X C N (Numerical character)

X D INT8 (Integer mit einer Länge von 8 Byte)

X E D (Date)

Das ist richtig. Die eingebauten ABAP-Standarddatentypen, die bereits eine typspezifische
feste Längenangabe enthalten, gelten als vollständige Datentypen, und zwar folgende: D,
T, I, INT8, F, STRING, XSTRING, DECFLOAT16, DECFLOAT34. Weitere Informationen
erhalten Sie in der Lektion „Definition von elementaren Datenobjekten“ im Abschnitt
„Vervollständigung von ABAP-Standarddatentypen“ im Kurs BC400 (Kapitel 3, Lektion 1)
oder TAW10 Teil I (Kapitel 9, Lektion 1).

2. Welcher der folgenden Operatoren wird in einer IF-Anweisung verwendet, um eine


Negation vor logischen Bedingungen zu formulieren?
Wählen Sie die richtige Antwort.

X A AND

X B OR

X C END

X D NOT

Das ist richtig. Sie können Negationen formulieren, indem Sie den Operator NOT vor dem
logischen Ausdruck platzieren. Beim Negieren der IS-INITIAL-Abfrage kann die spezielle
IS-NOT-INITIAL Abfrage verwendet werden. Weitere Informationen erhalten Sie in der
Lektion „Verwendung grundlegender ABAP-Anweisungen“ im Abschnitt „IF-
Anweisungen“ im Kurs BC400 (Kapitel 3, Lektion 2) oder TAW10 Teil I (Kapitel 9, Lektion
2).

© Copyright. Alle Rechte vorbehalten. 97


Kapitel 3 : Überprüfung des Lernerfolgs - Antworten

3. Welche der folgenden Elemente sind in der Syntax von MESSAGE-Anweisungen


erforderlich?
Wählen Sie die richtigen Antworten.

X A Nachrichtennummer

X B Nachrichtentyp

X C Nachrichtenklasse

X D Nachrichtenrolle

Das ist richtig. Geben Sie die dreistellige Nachrichtennummer sowie die
Nachrichtenklasse an, wenn Sie die MESSAGE-Anweisung verwenden. Mit dem
Nachrichtentyp legen Sie fest, wo die Nachricht angezeigt werden soll. Weitere
Informationen erhalten Sie in der Lektion „Verwendung grundlegender ABAP-
Anweisungen“ im Abschnitt „Dialognachrichten“ im Kurs BC400 (Kapitel 3, Lektion 2)
oder TAW10 Teil I (Kapitel 9, Lektion 2).

4. Welches der folgenden Systemfelder enthält bei geschachtelten Schleifen die


Durchlaufnummer der Schleife, in der sich das Systemfeld befindet?
Wählen Sie die richtige Antwort.

X A sy-index

X B sy-repid

X C sy-uname

X D sy-mandt

Das ist richtig. Bei geschachtelten Schleifen enthält das Systemfeld „sy-index“ immer die
Durchlaufnummer der Schleife, in der es sich befindet. In der DO-Schleife und der WHILE-
Schleife enthält das Systemfeld „sy-index“ die Nummer des aktuellen
Schleifendurchlaufs. Deshalb sollten Sie dieses Systemfeld nur innerhalb einer Schleife
abfragen. Weitere Informationen erhalten Sie in der Lektion „Verwendung grundlegender
ABAP-Anweisungen“ im Abschnitt „Schleifenkonstrukte“ im Kurs BC400 (Kapitel 3,
Lektion 2) oder TAW10 Teil I (Kapitel 9, Lektion 2).

98 © Copyright. Alle Rechte vorbehalten.


Kapitel 3 : Überprüfung des Lernerfolgs - Antworten

5. Welchen der folgenden Systembefehle können Sie im Befehlsfeld eines Bilds eingeben, um
den Debugger zu starten?
Wählen Sie die richtige Antwort.

X A /d

X B /h

X C /i

X D /a

Das ist richtig. Um den Debugger aus einem Bild zu starten, geben Sie im Befehlsfeld /h
ein und drücken die Eingabetaste. Weitere Informationen erhalten Sie in der Lektion
„Analyse von Programmen mit dem ABAP Debugger“ im Abschnitt „Debugging-Modus
zur Laufzeit“ im Kurs BC400 (Kapitel 3, Lektion 3) oder TAW10 Teil I (Kapitel 9, Lektion 3).

© Copyright. Alle Rechte vorbehalten. 99


Kapitel 3 : Überprüfung des Lernerfolgs - Antworten

100 © Copyright. Alle Rechte vorbehalten.


KAPITEL 4 Modularisierungstechniken in
ABAP

Lektion 1
Erläutern der Modularisierung 103

Lektion 2
Definieren und Aufrufen von Unterprogrammen 109

Lektion 3
Aufruf von Funktionsbausteinen 123

Lektion 4
Funktionsbausteine anlegen 133

Lektion 5
Beschreiben von Business Application Programming Interfaces (BAPIs) 137

Lektion 6
Aufruf von Methoden globaler Klassen 143

Lektion 7
Anlegen von globalen Klassen und statischen Methoden 157

Lektion 8
Verwenden von lokalen Klassen 161

LERNZIELE

● Modularisierungstechniken beschreiben
● Mithilfe von Unterprogrammen modularisieren
● Funktionsbausteine von Funktionsgruppen verwenden
● Funktionsgruppen anlegen

© Copyright. Alle Rechte vorbehalten. 101


Kapitel 4 : Modularisierungstechniken in ABAP

● Funktionsbausteine anlegen
● Mithilfe von BAPIs modularisieren
● Die objektorientierte Programmierung beschreiben
● Methoden globaler Klassen verwenden
● Instanzen verwenden
● einfache globale Klassen und statische Methoden anlegen
● Lokale Klassen verwenden

102 © Copyright. Alle Rechte vorbehalten.


Kapitel 4
Lektion 1
Erläutern der Modularisierung

ÜBERBLICK ÜBER DIE LEKTION


In dieser Lektion werden die Gründe dafür erläutert, warum es sinnvoll sein kann,
Programmteile in Modularisierungseinheiten zu speichern. Außerdem erhalten Sie einen
Überblick über die verschiedenen Möglichkeiten zur Modularisierung in ABAP-Programmen.

Unternehmensszenario
In der Qualitätssicherung hat ein Mitarbeiter festgestellt, dass sich viele Programmteile
wiederholen. Sie sollen nun herausfinden, welche Techniken zur Modularisierung eingesetzt
werden können. Dazu müssen Sie über folgende Kenntnisse verfügen:
● Grundlegende Modularisierungstechniken

LERNZIELE DER LEKTION


Am Ende dieser Lektion können Sie:
● Modularisierungstechniken beschreiben

Modularisierungstechniken

Abbildung 62: Einsatzmöglichkeiten für Modularisierungseinheiten

© Copyright. Alle Rechte vorbehalten. 103


Kapitel 4 : Modularisierungstechniken in ABAP

Eine Modularisierungseinheit ist ein Programmteil, in dem eine bestimmte Funktion gekapselt
ist. Sie speichern einen Teil des Quelltexts in einem Modul, um einerseits die Transparenz des
Programms zu verbessern und andererseits die entsprechende Funktion mehrfach im
Programm verwenden zu können, ohne den gesamten Quelltext immer wieder neu
implementieren zu müssen (siehe Abbildung).
Die verbesserte Transparenz ergibt sich daraus, dass das Programm funktionsorientierter
wird. Die Gesamtaufgabe wird in Teilfunktionen untergliedert, für deren Erledigung
entsprechende Modularisierungseinheiten zuständig sind.
Durch die Modularisierung werden Programme leichter wartbar, da Funktionsänderungen
und Korrekturen nur in den jeweiligen Modularisierungseinheiten vorgenommen werden
müssen und nicht an verschiedenen Stellen des Hauptprogramms. Außerdem können Sie
während der Ausführung Ihres Programms im ABAP Debugger einen Aufruf als Einheit
verarbeiten lassen und sich dann das Ergebnis anschauen. So können Sie eine Fehlerquelle
schneller finden.

Programmlokale Modularisierung

Abbildung 63: Programmlokale Modularisierung

Techniken zur programmlokalen Modularisierung in der Programmiersprache ABAP


● Unterprogramme, auch Formroutinen genannt
● Methoden in lokalen Klassen

Für beide Techniken der lokalen Modularisierung gilt, dass die Modularisierungseinheiten nur
in dem Programm zur Verfügung stehen, in dem sie implementiert wurden. Zum Aufruf des
lokalen Moduls muss zur Laufzeit kein weiteres Programm in den Benutzerkontext geladen
werden. Lokale Klassen, Methoden und Unterprogramme können in verschiedenen
Programmen denselben Namen haben, ohne dass dies zu Konflikten führt. Das liegt daran,

104 © Copyright. Alle Rechte vorbehalten.


Lektion: Erläutern der Modularisierung

dass der Quelltext für die Programme im Hauptspeicher des Applikationsservers separat
behandelt wird.

Hinweis:
Technisch ist es möglich, ein Unterprogramm von einem anderen Programm aus
aufzurufen. Machen Sie von dieser Möglichkeit jedoch keinen Gebrauch, da diese
Technik dem Prinzip der Kapselung von Daten und Funktionen widerspricht.

Globale Modularisierung

Abbildung 64: Globale Modularisierung

Techniken zur globalen Modularisierung in der Programmiersprache ABAP


● Funktionsbausteine, die in Funktionsgruppen unterteilt sind
● Methoden in globalen Klassen

Global definierte Modularisierungseinheiten können von beliebig vielen Programmen


gleichzeitig verwendet werden. Diese Modularisierungseinheiten werden zentral im
Repository gespeichert und dann beim Aufrufen in den Kontext des aufrufenden Programms
geladen.

© Copyright. Alle Rechte vorbehalten. 105


Kapitel 4 : Modularisierungstechniken in ABAP

Datenkapselung

Abbildung 65: Trennen von Daten

Im Idealfall werden die Datenobjekte des aufrufenden Programms von den aufgerufenen
Modularisierungseinheiten nicht direkt verwendet. Umgekehrt ändert das aufrufende
Programm die Daten in den Modularisierungseinheiten nicht direkt. Dieses Prinzip nennt man
Datenkapselung.
Die Datenkapselung ist ein wichtiges Hilfsmittel bei der Entwicklung von transparentem und
wartbarem Quelltext. Durch die Datenkapselung ist es leichter zu ermitteln, an welchen
Stellen im Programm die Inhalte von Datenobjekten geändert wurden. Zudem kann leichter
sichergestellt werden, dass Daten innerhalb der Modularisierungseinheiten konsistent
geändert werden, wenn beispielsweise die Inhalte mehrerer Datenobjekte innerhalb einer
Modularisierungseinheit voneinander abhängen.
Nehmen Sie als Beispiel eine Modularisierungseinheit, in der Sie eine Reihe von
Rechnungsbelegen verarbeiten. Die Eingabe unterschiedlicher Rechnungsnummern für
Rechnungspositionen, die zueinander gehören, kann schwere Folgen haben. Die für die
Modularisierungseinheit Zuständigen hätten es in einem solchen Fall sehr schwer, die
Ursache der Dateninkonsistenz zu ermitteln.

106 © Copyright. Alle Rechte vorbehalten.


Lektion: Erläutern der Modularisierung

Datentransport, Parameter und Schnittstelle

Abbildung 66: Datentransporte zwischen Programm und Modularisierungseinheit

Parameter dienen dem Datenaustausch zwischen Programm und Modul. Die Menge aller
Parameter in einer Modularisierungseinheit wird als Schnittstelle oder Signatur bezeichnet.
Der Entwickler, der die Modularisierungseinheit definiert, legt auch die Parameter fest.

Kriterien für die Unterscheidung von Parametern


● Abhängig von ihrer Verwendung werden Parameter wie folgt unterschieden:
- Übertragung von Daten an die Modularisierungseinheit (Importing-Parameter)
- Rückgabe von Daten von der Modularisierungseinheit an den Aufrufenden (Exporting-
Parameter)
- Übertragung von Daten an die Modularisierungseinheit und Rückgabe der Daten,
nachdem sie geändert wurden (Changing-Parameter)

Hinweis:
Bei den Unterprogrammen (Formroutinen) stehen nur Changing-Parameter und
die sehr speziellen Using-Parameter zur Verfügung, was die Möglichkeiten der
Steuerung des Datentransports stark einschränkt. Verwenden Sie aus diesem
Grund für die programmlokale Modularisierung nach Möglichkeit lokale Klassen.

© Copyright. Alle Rechte vorbehalten. 107


Kapitel 4 : Modularisierungstechniken in ABAP

ZUSAMMENFASSUNG DER LEKTION


Nun können Sie
● Modularisierungstechniken beschreiben

108 © Copyright. Alle Rechte vorbehalten.


Kapitel 4
Lektion 2
Definieren und Aufrufen von
Unterprogrammen

ÜBERBLICK ÜBER DIE LEKTION


In dieser Lektion wird erläutert, wie Unterprogramme in ABAP-Programmen verwendet
werden. Ferner erfahren Sie, wie die Schnittstelle eines Unterprogramms zur
Parameterübergabe verwendet wird und wie die verschiedenen Übergabearten verwendet
werden.

Unternehmensszenario
Sie sollen Ihr Programm strukturieren und mehrfach auszuführenden Quelltext in einem
Unterprogramm kapseln. Dazu müssen Sie über folgende Kenntnisse verfügen:
● Definieren und Aufrufen von Unterprogrammen
● Ausführung von Unterprogrammen im Debugging-Modus

LERNZIELE DER LEKTION


Am Ende dieser Lektion können Sie:
● Mithilfe von Unterprogrammen modularisieren

© Copyright. Alle Rechte vorbehalten. 109


Kapitel 4 : Modularisierungstechniken in ABAP

Programminterne Modularisierung mit Unterprogrammen

Abbildung 67: Einfaches Beispiel für ein Unterprogramm

Ein Unterprogramm ist eine programminterne Modularisierungseinheit. Für den ABAP-


Interpreter ist ein Unterprogramm immer Bestandteil des Hauptprogramms. In dem in der
Abbildung gezeigten Beispiel werden keine Parameter verwendet, was die Syntax des
Unterprogramms sehr vereinfacht. Doch ein Unterprogramm verwendet in der Regel Werte
aus Datenobjekten und gibt auch Werte zurück. Wie diese Variablen im Unterprogramm
verwendet werden können, sehen Sie in der folgenden Abbildung „Parameterübergabe –
Sichtbarkeit globaler Variablen“.

110 © Copyright. Alle Rechte vorbehalten.


Lektion: Definieren und Aufrufen von Unterprogrammen

Parameterdefinition bei Unterprogrammen

Abbildung 68: Parameterübergabe – Sichtbarkeit globaler Variablen

Im Hauptprogramm definierte Variablen sind global im Programm sichtbar und können zu


jedem beliebigen Zeitpunkt im Programm geändert werden. Das bedeutet, dass auch die im
Programm definierten Unterprogramme die Variablen ändern können.

© Copyright. Alle Rechte vorbehalten. 111


Kapitel 4 : Modularisierungstechniken in ABAP

Parameterübergabe – Definition einer Schnittstelle

Abbildung 69: Parameterübergabe – Definition einer Schnittstelle

Sie können alle im Hauptprogramm definierten globalen Variablen aus einem Unterprogramm
heraus ansprechen. Um jedoch ein Unterprogramm je nach Situation mit unterschiedlichen
Datenobjekten aufzurufen, müssen Sie anstelle globaler Variablen Platzhalter verwenden.
Diese Platzhalter werden beim Aufrufen des Unterprogramms durch die erforderlichen
globalen Variablen ersetzt. Die Platzhalter werden Formalparameter genannt und bilden
zusammen die Schnittstelle des Unterprogramms. Die Schnittstelle muss bei der Definition
des Unterprogramms deklariert werden.
Wenn das Unterprogramm aufgerufen wird, müssen die Formalparameter mittels
entsprechender globaler Variablen (Aktualparameter) spezialisiert werden. Diese Zuordnung
von Aktualparametern zu Formalparametern beim Aufrufen eines Unterprogramms wird
Parameterübergabe genannt.

112 © Copyright. Alle Rechte vorbehalten.


Lektion: Definieren und Aufrufen von Unterprogrammen

Arten der Übergabe von Schnittstellenparametern

Abbildung 70: Arten der Übergabe von Schnittstellenparametern

Die Art und Weise, wie Variablen des Hauptprogramms an Formalparameter des
Unterprogramms übergeben werden, wird Übergabeart genannt und in der Schnittstelle des
Unterprogramms für jeden Parameter festgelegt.

Übergabearten für Unterprogramme

Definition der Übergabearten für Unterprogramme


● Call by Value
Verwenden Sie diese Übergabeart, um dem Unterprogramm den Wert einer globalen
Variablen in Form einer Variablenkopie zur Verfügung zu stellen, ohne dem
Unterprogramm die Änderung der betreffenden globalen Variablen zu erlauben.
● Call by Value and Result
Verwenden Sie diese Übergabeart, um den Wert einer globalen Variablen an das
Unterprogramm zu übergeben und den vollständig verarbeiteten Endwert der Kopie
zurück in das Original zu schreiben.
● Call by Reference
Verwenden Sie diese Übergabeart, um die Unterprogrammverarbeitung direkt am
angegebenen Aktualparameter auszuführen.

Verwendung der Übergabearten für Unterprogramme


● Call by Value

© Copyright. Alle Rechte vorbehalten. 113


Kapitel 4 : Modularisierungstechniken in ABAP

Das System erstellt vom Aktualparameter eine Kopie und ordnet sie dem
Formalparameter zu. Im Unterprogramm befindliche Wertzuweisungen an den
entsprechenden Formalparameter beziehen sich daher nur auf die Kopie des
Aktualparameters und nicht auf das Original.
Verwenden Sie diese Übergabeart, um dem Unterprogramm den Wert einer globalen
Variablen in Form einer Variablenkopie zur Verfügung zu stellen, ohne dem
Unterprogramm die Änderung der betreffenden globalen Variablen zu erlauben. Durch
Anlegen einer Kopie des Variablenwertes wird das Original geschützt. Das Anlegen von
Kopien kann jedoch sehr zeitaufwendig sein, insbesondere bei großen internen Tabellen.
● Call by Value and Result
Die Übergabeart „Call by Value and Result“ ähnelt der Übergabeart „Call by Value“. Jedoch
wird hier am regulären Ende des Unterprogramms der in der Kopie geänderte Wert in das
Original zurückgeschrieben. Bei einem vorzeitigen Abbruch des Programms durch eine
STOP-Anweisung oder eine Benutzernachricht vom Typ E wird das Zurückschreiben des
Werts unterdrückt.
Diese Übergabeart verwenden Sie, um den Wert einer globalen Variablen an das
Unterprogramm zu übergeben und den vollständig verarbeiteten Endwert der Kopie
zurück in das Original zu schreiben. Das Anlegen von Kopien und das Zurückschreiben von
Werten kann jedoch insbesondere bei großen internen Tabellen sehr zeitaufwendig sein.
● Call by Reference
Das System ordnet den Aktualparameter direkt dem Formalparameter zu. Das bedeutet,
dass die Wertzuweisungen an den Formalparameter direkt am Aktualparameter erfolgt.
Diese Übergabeart verwenden Sie, um die Unterprogrammverarbeitung direkt am
angegebenen Aktualparameter auszuführen. Sie wird auch gerne genutzt, um die
zeitaufwendige Kopieerstellung bei großen internen Tabellen zu vermeiden.

114 © Copyright. Alle Rechte vorbehalten.


Lektion: Definieren und Aufrufen von Unterprogrammen

Definition und Aufruf von Unterprogrammen

Abbildung 71: Definition und Aufruf von Unterprogrammen

Ablauf der Definition eines Unterprogramms


● Definieren Sie ein Unterprogramm wie folgt:

1. Leiten Sie ein Unterprogramm mit FORM ein.

2. Geben Sie hinter FORM den Namen und die Schnittstelle des Unterprogramms an.
Anschließend folgen die Anweisungen des Unterprogramms.

3. Schließen Sie das Unterprogramm mit der ENDFORM-Anweisung ab.

In der Schnittstellendefinition können Sie die Formalparameter des Unterprogramms


aufführen (f1, f2 und f3) und sie typisieren.

Festlegung der Übergabeart


● Legen Sie die erforderliche Übergabeart für jeden Parameter wie folgt fest:
- Call by Value
Führen Sie alle Formalparameter, welche die Übergabeart „Call by Value“ (f1) haben
müssen, mit dem Präfix VALUE unter USING auf. Die Syntax können Sie der Abbildung
entnehmen.
- Call by Value and Result

© Copyright. Alle Rechte vorbehalten. 115


Kapitel 4 : Modularisierungstechniken in ABAP

Führen Sie alle Formalparameter, welche die Übergabeart „Call by Value and Result“
(f2) haben müssen, mit dem Präfix VALUE unter CHANGING auf. Die Syntax können Sie
der Abbildung entnehmen.
- Call by Reference
Führen Sie alle Formalparameter, welche die Übergabeart „Call by Reference“ (f3)
haben müssen, OHNE den Präfix VALUE unter CHANGING auf. Die Syntax können Sie
der Abbildung entnehmen.

Hinweis:
Ein Parameter, der ohne das Präfix VALUE unter USING platziert wird, hat auch
die Übergabeart „Call by Reference“. Diese Deklarationssyntax macht jedoch nur
bei Formalparametern Sinn, an die größere interne Tabellen übergeben werden.
Diese Formalparameter werden nicht im Unterprogramm geändert (siehe
Dokumentation für USING), aber mit „Call by Reference“ übergeben, um die
zeitaufwendige Erstellung von Kopien zu vermeiden.

Beim Aufrufen des Unterprogramms werden die zu übergebenden Aktualparameter ohne das
Präfix VALUE unter USING bzw. CHANGING angegeben. Die Reihenfolge der Angabe
bestimmt die Zuordnung zu den Formalparametern. In dem in der Abbildung gezeigten
Beispiel wird a an f1, b an f2 und c an f3 übergeben.

Typisierung von Schnittstellenparametern

Abbildung 72: Typisierung von Schnittstellenparametern

116 © Copyright. Alle Rechte vorbehalten.


Lektion: Definieren und Aufrufen von Unterprogrammen

Ein Formalparameter ist generisch typisiert, wenn er mit TYPE ANY oder gar nicht typisiert
wurde. An solch einen Parameter können Aktualparameter eines beliebigen Typs übergeben
werden.
Zur Laufzeit wird beim Aufrufen des Unterprogramms der Typ des Aktualparameters
ermittelt und dem Formalparameter zugewiesen (Typvererbung). Wenn allerdings die
Anweisungen im Unterprogramm nicht zum geerbten Typ passen, kann es zu einem
Laufzeitfehler kommen (Typkonflikt). Verwenden Sie die generische Typisierung nur, wenn
der Typ des Aktualparameters beim Anlegen des Programms nicht bekannt ist oder zur
Laufzeit variieren kann (dynamische Programmierung).
Die konkrete Typisierung eines Formalparameters realisieren Sie durch Angabe eines
globalen oder vordefinierten Typs im TYPE-Zusatz. Dadurch legen Sie fest, dass dem
Unterprogramm nur Aktualparameter des angegebenen Typs übergeben werden dürfen. Eine
Verletzung der Typkonsistenz zwischen Formal- und Aktualparameter wird bei der
Syntaxprüfung erkannt. Die Syntaxprüfung verbessert die Stabilität Ihres Programms durch
Verhindern von Typkonflikten in Anweisungen innerhalb des Unterprogramms.
Wenn Sie mit den Standardtypen P, N, C und X typisieren, wird die fehlende Eigenschaft
„Feldlänge“ zur Laufzeit vom Aktualparameter an den Formalparameter übertragen. Eine
vollständige Typisierung mit diesen Typen (d.h. einschließlich Feldlänge) erreichen Sie durch
Definition und Angabe lokal definierter Typen.

Hinweis:
Neben elementaren Datenobjekten kennt ABAP auch Strukturen und interne
Tabellen. Formalparameter für solche Datenobjekte müssen immer typisiert
werden, damit innerhalb des Unterprogramms auf ihre Komponenten
zugegriffen werden kann.

Notiz:
"<scope><kind>_<name>" -> "<scope>" p = Using/Passing, "<scope>" c =
Changing

© Copyright. Alle Rechte vorbehalten. 117


Kapitel 4 : Modularisierungstechniken in ABAP

Lokale und globale Datenobjekte

Abbildung 73: Sichtbarkeit globaler und lokaler Datenobjekte

Im Hauptprogramm definierte Variablen sind globale Datenobjekte. Sie sind im gesamten


Hauptprogramm sowie in jedem aufgerufenen Unterprogramm sichtbar und ansprechbar.
In einem Unterprogramm definierte Variablen werden als lokale Variablen bezeichnet, da sie
genauso wie Formalparameter im entsprechenden Unterprogramm vorliegen. Der
Speicherplatz für Formalparameter und lokale Datenobjekte wird beim Unterprogrammaufruf
zugeordnet und nach der Ausführung wieder freigegeben.

Notiz:
"<scope><kind>_<name>" -> "<scope>" l = local

Formalparameter und lokale Datenobjekte eines Unterprogramms dürfen nicht den gleichen
Namen haben. Ist zu einem Formalparameter oder lokalen Datenobjekt ein gleichnamiges
globales Datenobjekt vorhanden, so wird innerhalb des Unterprogramms der
Formalparameter bzw. das lokale Datenobjekt und außerhalb des Unterprogramms das
globale Datenobjekt angesprochen. Dies ist die sogenannte Verschattungsregel: Innerhalb
eines Unterprogramms verschattet das lokale Datenobjekt das gleichnamige globale
Datenobjekt.
Verwenden Sie die folgenden Präfixe für Ihre Unterprogrammobjekte, um eine eindeutige
Identifizierung der internen Programmobjekte sicherzustellen: p... für Using-Parameter,
c... für Changing-Parameter und l... für lokale Datenobjekte.

118 © Copyright. Alle Rechte vorbehalten.


Lektion: Definieren und Aufrufen von Unterprogrammen

Syntaxbeispiel – lokale Hilfsvariable für das Runden

Abbildung 74: Syntaxbeispiel – lokale Hilfsvariablen für das Runden

In dem in der Abbildung gezeigten Syntaxbeispiel soll das Ergebnis der Prozentberechnung
intern auf eine Nachkommastelle gerundet, aber dennoch mit zwei Dezimalstellen
zurückgegeben werden.
Dazu wird eine lokale Variable mit nur einer Nachkommastelle angelegt und das Ergebnis der
Berechnung zunächst dort gespeichert. Das Laufzeitsystem rundet das Ergebnis auf die
nächste ganze Zahl mit der verfügbaren Anzahl an Nachkommastellen. Beim anschließenden
Kopieren des Ergebnisses in den Rückgabeparameter wird eine Null für die zweite
Nachkommastelle angehängt.

© Copyright. Alle Rechte vorbehalten. 119


Kapitel 4 : Modularisierungstechniken in ABAP

Aufrufen von Unterprogrammen

Abbildung 75: Implementierung eines Unterprogrammaufrufs

Die PERFORM-Anweisung zum Aufrufen eines Unterprogramms können Sie von der ABAP
Workbench in Ihren Quelltext hinein generieren lassen. Definieren Sie das Unterprogramm,
und sichern Ihr Hauptprogramm. Im Navigationsbereich erscheint dann das neu definierte
Unterprogramm. Ziehen Sie es per Drag&Drop an die gewünschte Aufrufstelle in Ihrem
Programm. Ersetzen Sie dann die Formalparameter im generierten Quelltext durch die
entsprechen Aktualparameter.
Alternativ dazu können Sie das Generieren des Aufrufs auch über die Drucktaste Muster im
ABAP Editor implementieren.
Der Vorteil beim Generieren des Aufrufs besteht darin, dass keine Parameter vergessen oder
vertauscht werden können.

120 © Copyright. Alle Rechte vorbehalten.


Lektion: Definieren und Aufrufen von Unterprogrammen

Modularisierungseinheiten im ABAP Debugger

Abbildung 76: Unterprogramm im Debugging-Modus

Unterprogramme im Debugging-Modus
● Bei der Ausführung von Unterprogrammen im Debugging-Modus ist Folgendes zu
beachten:
- Ist die aktuelle Anweisung ein Unterprogrammaufruf, können Sie über Ausführen das
gesamte Unterprogramm ohne Unterbrechung ausführen. Die Verarbeitung wird nach
Abschluss des Unterprogramms angehalten.
- Dagegen können Sie über Einzelschritt an der ersten Anweisung des Unterprogramms
anhalten lassen und dieses im weiteren Verlauf genauer verfolgen.
- Befindet sich die aktuelle Anweisung in einem Unterprogramm, können Sie mit der
Drucktaste Return den Rest des Unterprogramms ohne Halt ausführen lassen. Die
Verarbeitung wird nach Abschluss des Unterprogramms angehalten.
- Die ABAP-Debugger-Steuerungsfunktionen (einschließlich Einzelschritt, Ausführen,
Return und Weiter) sind auch im klassischen ABAP Debugger mit der gleichen
Bedeutung verfügbar.

© Copyright. Alle Rechte vorbehalten. 121


Kapitel 4 : Modularisierungstechniken in ABAP

Aufrufstack

Abbildung 77: Debugging – Aufrufstack

Auf der Registerkarte Standard im Debugger können Sie sehen, aus welchen Programmen
heraus das Unterprogramm aufgerufen wurde. Das Werkzeug dazu ist der Aufrufstack.

ZUSAMMENFASSUNG DER LEKTION


Nun können Sie
● Mithilfe von Unterprogrammen modularisieren

122 © Copyright. Alle Rechte vorbehalten.


Kapitel 4
Lektion 3
Aufruf von Funktionsbausteinen

ÜBERBLICK ÜBER DIE LEKTION


In dieser Lektion wird erklärt, wie nach Funktionsbausteinen gesucht, ihre Schnittstellen und
Dokumentation analysiert und ihre Funktionen getestet werden. Sie lernen, mit vorhandenen
Funktionsbausteinen in Ihren Programmen zu arbeiten sowie Fehler abzufangen und zu
behandeln. Zum Schluss legen Sie Funktionsbausteine an und kapseln darin Funktionen, die
Sie dann in anderen Programmen wiederverwenden können.

Unternehmensszenario
Sie benötigen eine Funktion für Ihr Programm, die bereits in Form eines Funktionsbausteins
vorliegt. Darüber hinaus möchten Sie diesen Funktionsbaustein in Ihrem Programm
verwenden. Dazu müssen Sie über folgende Kenntnisse verfügen:
● Suchen nach Funktionsbausteinen
● Abrufen von Informationen zu den Funktionen und der Verwendung von
Funktionsbausteinen
● Aufrufen von Funktionsbausteinen in Ihrem Programm
● Anlegen von Funktionsgruppen und Funktionsbausteinen
● BAPIs und ihre speziellen Eigenschaften

LERNZIELE DER LEKTION


Am Ende dieser Lektion können Sie:
● Funktionsbausteine von Funktionsgruppen verwenden

© Copyright. Alle Rechte vorbehalten. 123


Kapitel 4 : Modularisierungstechniken in ABAP

Aufbau von Funktionsgruppen

Abbildung 78: Funktionsgruppe

Ein Funktionsbaustein ist eine zentral in der Funktionsbibliothek des SAP-Systems


gespeicherte Prozedur mit einer entsprechenden Funktion. Funktionsbausteine haben jeweils
eine Schnittstelle, über deren Parameter Daten im- bzw. exportiert werden. Der Vorteil von
Funktionsbausteinen liegt in ihrer Wiederverwendbarkeit.
Funktionsbausteine sind Funktionsgruppen zugeordnet. Jede Funktionsgruppe ist eine
Sammlung von Funktionsbausteinen, die verwandte Funktionen haben oder die gleichen
Daten verarbeiten.
Eine Funktionsgruppe kann die gleichen Komponenten enthalten wie ein ausführbares
Programm.

Komponenten einer Funktionsgruppe


● Datenobjekte
Datenobjekte sind global in Bezug auf die Funktionsgruppe, d.h., sie sind für alle
Funktionsbausteine innerhalb der Gruppe sichtbar und können von ihnen geändert
werden.
● Unterprogramme
Unterprogramme können von allen Funktionsbausteinen in der Gruppe aus aufgerufen
werden.
● Dynpros
Dynpros können von allen Funktionsbausteinen in der Gruppe aus aufgerufen werden.

124 © Copyright. Alle Rechte vorbehalten.


Lektion: Aufruf von Funktionsbausteinen

Funktionsbausteine

Abbildung 79: Funktionsbaustein

Zu den Eigenschaften eines Funktionsbausteins gehören eine Kurzbeschreibung des


Bausteins und der Name der Funktionsgruppe, zu der er gehört.
Ähnlich wie bei Unterprogrammen kann ein Funktionsbaustein seine eigenen lokalen
Definitionen von Typen und Datenobjekten enthalten. Lokale Typen und Datenobjekte sind
nur im Funktionsbaustein sichtbar.

Elemente der Schnittstelle eines Funktionsbausteins


Die Schnittstelle eines Funktionsbausteins kann folgende Elemente enthalten:

Importparameter
Beim Aufruf des Funktionsbausteins übergibt das aufrufende Programm Werte oder
Variablen an den Funktionsbaustein. Für optionale Parameter muss nicht zwingend ein
Wert oder eine Variable bereitgestellt werden.
Exportparameter
Über die Zuordnung einer „Empfangsvariablen“ zu einem Exportparameter nimmt das
aufrufende Programm die Ausgabe des Funktionsbausteins entgegen. Exportparameter
sind immer optional.
Changing-Parameter
Wenn der Funktionsbaustein Changing-Parameter verwendet, werden die Variablen vom
aufrufenden Programm an den Funktionsbaustein übertragen und am Ende
zurückgegeben.
Ausnahmen
Ausnahmen können vom Funktionsbaustein in bestimmten Fehlersituationen ausgelöst
werden und liefern Informationen zu dem jeweiligen Verarbeitungsfehler im
Funktionsbaustein. Ausnahmen sollten vom aufrufenden Programm behandelt werden.

© Copyright. Alle Rechte vorbehalten. 125


Kapitel 4 : Modularisierungstechniken in ABAP

In der Regel werden die Schnittstellenparameter mit Typen aus dem ABAP Dictionary
definiert.

Datenobjekte innerhalb einer Funktionsgruppe

Abbildung 80: Datenobjekte innerhalb einer Funktionsgruppe

Wenn ein Programm einen Funktionsbaustein aufruft, wird die zugehörige Funktionsgruppe
geladen und der betreffende Funktionsbaustein ausgeführt. Die Funktionsgruppe bleibt so
lange im Arbeitsspeicher geladen, bis das aufrufende Programm beendet wird. Wenn Sie
einen weiteren Funktionsbaustein dieser Gruppe aufrufen, wird er ohne erneutes Laden und
mit denselben globalen Daten der Funktionsgruppe verarbeitet.
Wenn ein Funktionsbaustein aufgerufen wird, der Werte in die globalen Daten der
Funktionsgruppe schreibt, können andere Funktionsbausteine in derselben Gruppe auf die
Daten zugreifen, wenn sie in demselben Programmlauf aufgerufen werden.
Neben den globalen Daten seiner Funktionsgruppe kann ein Funktionsbaustein auch auf die
eigenen, lokal definierten Datenobjekte und Schnittstellenparameter zugreifen.
Schnittstellenparameter nehmen Daten entgegen oder geben sie an das aufrufende
Programm zurück.

Suche nach Funktionsbausteinen


Methoden für die Suche nach Funktionsbausteinen

● Sie können folgendermaßen nach Funktionsbausteinen suchen:


- Anwendungsbezogene Suche
Suchen Sie in einer bestimmten Anwendungskomponente (Anwendungshierarchie).

126 © Copyright. Alle Rechte vorbehalten.


Lektion: Aufruf von Funktionsbausteinen

- Anwendungsunabhängige Suche
Führen Sie eine freie Suche durch, die unabhängig von Anwendungskomponenten ist
(Repository-Infosystem).
- Programmbezogene Suche
Suchen Sie im Programmquelltext nach der Anweisung CALL FUNCTION.
Aktivieren Sie vor dem Auslösen einer Programmfunktion (z.B. Auswahl einer
Drucktaste) mit „/h“ den ABAP Debugger, und setzen Sie bei der Anweisung CALL
FUNCTION einen Breakpoint.
Wenn der gesuchte Funktionsbaustein ein Dynpro übergibt, verwenden Sie die Taste F1
und „Technische Informationen“, um die Dynpro-Nummer zu ermitteln. Navigieren Sie
zu dieser Nummer, indem Sie darauf doppelklicken, und führen Sie den
„Verwendungsnachweis in Programmen“ aus.

Überprüfen Sie, nachdem Sie einen Funktionsbaustein gefunden haben, ob er freigegeben ist
(Attribute des Funktionsbausteins). Nur bei freigegebenen Funktionsbausteinen haben Sie
Anspruch auf Support und Aufwärtskompatibilität. Es wird empfohlen, nur freigegebene
Funktionsbausteine zu verwenden.
In der Dokumentation zum Funktionsbaustein erfahren Sie etwas über seine Funktionalität
und erhalten weitere Informationen.

Untersuchung eines Funktionsbausteins

Abbildung 81: Schnittstelle des Funktionsbausteins

Die Schnittstelle des Funktionsbausteins besteht aus Import-, Export- und Changing-
Parametern sowie Ausnahmen.
Wie bei Unterprogrammen kann zwischen Wert- und Referenzübergabe unterschieden
werden.
Nicht optionale Parameter müssen beim Aufrufen des Funktionsbausteins versorgt werden.
Wann welche zusätzlichen Parameter versorgt werden müssen, können Sie der

© Copyright. Alle Rechte vorbehalten. 127


Kapitel 4 : Modularisierungstechniken in ABAP

Dokumentation zum Funktionsbaustein und der Dokumentation zu den


Schnittstellenparametern entnehmen.

Dokumentation und Testumgebung

Abbildung 82: Dokumentation und Testumgebung

Elemente der Dokumentation

● Kurztext
● Funktionale Beschreibung
● Anwendungsbeispiel
● Hinweise
● Parameterbeschreibung
● Ausnahmebeschreibung

Funktionsbausteine, die zur Verwendung in anderen Programmen vorgesehen und


freigegeben sind, sollten dokumentiert werden. Man unterscheidet zwischen der
Funktionsbausteindokumentation, welche die Funktion des Bausteins beschreibt, und der
Parameterdokumentation, die Hinweise zur Verwendung einzelner Parameter und
Ausnahmen enthält.
Die Funktionsbausteindokumentation können Sie über die Drucktaste
Fbausteindokumentation aufrufen. Wählen Sie die angezeigten Links, um zur
Parameterdokumentation zu gelangen (nur im Anzeigemodus). Sie können die
Parameterdokumentation auch über die Drucktaste für den entsprechenden Parameter in der
Spalte Langtext aufrufen. Die „grüne Ampel“ zeigt an, das für den Parameter eine
Dokumentation angelegt wurde.
Wenn Sie sich nicht sicher sind, ob der Funktionsbaustein genau das macht, was Sie von ihm
erwarten, können Sie ihn vor der Integration in Ihr Programm in der Testumgebung testen. In

128 © Copyright. Alle Rechte vorbehalten.


Lektion: Aufruf von Funktionsbausteinen

einer Eingabemaske können Sie Werte für die Import- und Changing-Parameter eingeben. Um
Werte während der Laufzeit zu prüfen, können Sie in den Debugging-Modus wechseln. Die
Werte der Export- und Changing-Parameter werden nach der Ausführung aufgelistet.
Löst der Funktionsbaustein aufgrund eines Fehlers eine Ausnahme aus, wird diese Ausnahme
gegebenenfalls mit ihrem Nachrichtentext angezeigt.
Das Test-Framework für Funktionsbausteine zeigt auch die Laufzeit an. Für die Werte gelten
die gleichen Einschränkungen wie für die Laufzeitanalyse. Wiederholen Sie die Tests daher
mehrmals mit den gleichen Daten.
Speichern Sie die Testdaten in einem Testdatenverzeichnis, und legen Sie Testsequenzen an.

Aufrufen von Funktionsbausteinen

Abbildung 83: Aufrufen von Funktionsbausteinen

Funktionsbausteine werden mit der Anweisung CALL FUNCTION aufgerufen. Der Name des
Funktionsbausteins folgt großgeschrieben in einfachen Hochkommata.
Im EXPORTING-Block übergibt das System Werte an die Importparameter des
Funktionsbausteins.
Im IMPORTING-Block werden den Exportparametern Aktualparameter zugeordnet. Mit ihnen
können Sie auf die Ergebnisse des Aufrufs zugreifen.
Aus Sicht des aufrufenden Programms werden Werte in die Importparameter des
Funktionsbausteins exportiert und Werte für die Empfangsvariablen, die den
Exportparametern des Funktionsbausteins zugeordnet sind, importiert.
In der Aufrufsyntax müssen Sie auf der linken Seite der Parameterzuordnung den Namen des
Schnittstellenparameters (Formalparameter) und auf der rechten Seite der
Parameterzuordnung das Datenobjekt oder den Wert des aufrufenden Programms
(Aktualparameter) angeben.

© Copyright. Alle Rechte vorbehalten. 129


Kapitel 4 : Modularisierungstechniken in ABAP

Quelltexterstellung für einen Funktionsbausteinaufruf

Abbildung 84: Quelltexterstellung für einen Funktionsbausteinaufruf

Um Schreibfehler zu vermeiden, verwenden Sie bei der Implementierung eines Aufrufs im


Quelltext die Drucktaste Muster zur Generierung des Aufrufs. Alternativ dazu können Sie sich
die Funktionsgruppe im Navigationsbereich anzeigen lassen und den Aufruf im Quelltext
durch Einfügen des Funktionsbausteins in den ABAP-Editor-Bereich mit Drag&Drop
generieren.
Dabei wird die komplette Aufrufsyntax generiert, in der alle Schnittstellenparameter und
Ausnahmen aufgeführt sind. Optionale Angaben im Aufruf sind auskommentiert.
Anschließend müssen Sie nur noch die Aktualparameter ergänzen und eventuell die
Ausnahmebehandlung realisieren.

130 © Copyright. Alle Rechte vorbehalten.


Lektion: Aufruf von Funktionsbausteinen

Klassische Ausnahmebehandlung

Abbildung 85: Behandlung von Ausnahmen

Treten während der Verarbeitung eines Funktionsbausteins Anwendungsfehler auf (z.B. wenn
ein Wert nicht für die Berechnung geeignet ist), löst der Funktionsbaustein eine
entsprechende Ausnahme aus. Die Ausnahme bricht die Verarbeitung des
Funktionsbausteins ab und das System kehrt zum aufrufenden Programm zurück. Ist die
Ausnahme im EXCEPTIONS-Block des Aufrufs aufgelistet (abgefangen), wird der angegebene
Rückgabewert in das Systemfeld „sy-subrc“ des aufrufenden Programms eingegeben. Durch
Überprüfung dieses Feldes nach dem Aufruf können Sie ermitteln, ob und gegebenenfalls
welche Ausnahme ausgelöst wurde, um entsprechend reagieren zu können. Wird vom
Funktionsbaustein keine Ausnahme ausgelöst, wird das Feld „sy-subrc“ des aufrufenden
Programms auf Null gesetzt.
Sie haben auch die Möglichkeit, explizit für einige der möglichen Ausnahmen einen
Rückgabewert und für alle nicht genannten Ausnahmen einen anderen Rückgabewert
festzulegen. Dafür führen Sie die formale Ausnahme OTHERS mit dem gewünschten
Rückgabewert auf.
Fangen Sie alle Ausnahmen in Ihrem Aufruf ab, und reagieren Sie im Programm auf sie. Wird
eine ausgelöste Ausnahme nicht abgefangen, kommt es zu einem Laufzeitfehler.

ZUSAMMENFASSUNG DER LEKTION


Nun können Sie
● Funktionsbausteine von Funktionsgruppen verwenden

© Copyright. Alle Rechte vorbehalten. 131


Kapitel 4 : Modularisierungstechniken in ABAP

132 © Copyright. Alle Rechte vorbehalten.


Kapitel 4
Lektion 4
Funktionsbausteine anlegen

ÜBERBLICK ÜBER DIE LEKTION


In dieser Lektion wird erklärt, wie Funktionsgruppen und Funktionsbausteine angelegt
werden.

Unternehmensszenario
Sie sollen Berechnungsfunktionen implementieren und möchten einen globalen
Funktionsbaustein zum Berechnen von Prozentwerten anlegen.
Dazu müssen Sie über folgende Kenntnisse verfügen:
● Anlegen von Funktionsgruppen und Funktionsbausteinen

LERNZIELE DER LEKTION


Am Ende dieser Lektion können Sie:
● Funktionsgruppen anlegen
● Funktionsbausteine anlegen

© Copyright. Alle Rechte vorbehalten. 133


Kapitel 4 : Modularisierungstechniken in ABAP

Anlegen von Funktionsgruppen

Abbildung 86: Anlegen einer Funktionsgruppe

Ihr Ziel ist es, Funktionsbausteine anzulegen. Da ein Funktionsbaustein in einer


Funktionsgruppe enthalten sein muss, müssen Sie zunächst lernen, wie Sie eine neue
Funktionsgruppe anlegen.

134 © Copyright. Alle Rechte vorbehalten.


Lektion: Funktionsbausteine anlegen

Anlegen von Funktionsbausteinen

Abbildung 87: Anlegen von Funktionsbausteinen

Notiz:
Der empfohlene Kundennamensraum für Funktionsbausteine ist
Z_<FUNCTION_MODULE> bzw. Y_<FUNCTION_MODULE>.

© Copyright. Alle Rechte vorbehalten. 135


Kapitel 4 : Modularisierungstechniken in ABAP

Bearbeiten des Quelltextes

Abbildung 88: Bearbeiten des Quelltextes

Nach der Definition der entsprechenden IMPORTING- und EXPORTING-Parameter können


Sie zur Registerkarte Quelltext wechseln, um die Funktionen des Funktionsbausteins zu
implementieren.

Hinweis:
Der Kommentarblock direkt unter dem Schlüsselwort FUNCTION wird vom
Function Builder angelegt und bei Änderung der Parameter mitgeändert.

ZUSAMMENFASSUNG DER LEKTION


Nun können Sie
● Funktionsgruppen anlegen
● Funktionsbausteine anlegen

136 © Copyright. Alle Rechte vorbehalten.


Kapitel 4
Lektion 5
Beschreiben von Business Application
Programming Interfaces (BAPIs)

ÜBERBLICK ÜBER DIE LEKTION


In dieser Lektion wird das Business Application Programming Interface (BAPI) vorgestellt.

Unternehmensszenario
Sie arbeiten im SAP-System und möchten Daten aufrufen. Der Aufruf erfolgt mithilfe eines
BAPI. Dazu müssen Sie über folgende Kenntnisse verfügen:
● BAPI-Grundlagen

LERNZIELE DER LEKTION


Am Ende dieser Lektion können Sie:
● Mithilfe von BAPIs modularisieren

Business Application Programming Interface (BAPI)

Abbildung 89: Business-Objekte und BAPIs

© Copyright. Alle Rechte vorbehalten. 137


Kapitel 4 : Modularisierungstechniken in ABAP

Das Business Object Repository (BOR) im SAP-System enthält Business-Objekttypen. Ein


Business-Objekttyp ist ein Programm, das sich wie eine Klasse verhält und eine SAP-Tabelle
oder eine Tabellenhierarchie repräsentiert. Ein Business-Objekt hat BAPIs als Methoden. Sie
können diese BAPIs aufrufen, um auf die zugehörigen Tabellen zuzugreifen. Mithilfe eines
BAPI kann auf die Daten im SAP-System zugegriffen werden.

Verwendung von BAPIs als Funktionen eines Business-Objekttyps


Die Funktionen eines BAPI sind in einem remote aufrufbaren Funktionsbaustein gekapselt.
Daher können BAPIs sowohl von ABAP-Programmen desselben SAP-Systems als auch von
externen Programmen aufgerufen werden.

● BAPIs dienen den folgenden Funktionen eines Business-Objekttyps:


- Anlegen eines Objekts
- Abrufen von Objektattributen
- Ändern von Objektattributen
- Auflisten von Objekten

Verwendung von BAPIs

Abbildung 90: Verwendung von BAPIs

In der Abbildung sehen Sie die Anwendungsmöglichkeiten von BAPIs.


Es gibt Standardmethoden in Form von BAPIs mit standardisierten Namen.

Standard-BAPIs

● GetList

138 © Copyright. Alle Rechte vorbehalten.


Lektion: Beschreiben von Business Application Programming Interfaces (BAPIs)

Alle „GetList“-BAPIs geben eine Liste mit verfügbaren Objekten zurück, die den
angegebenen Auswahlkriterien entsprechen.
● GetDetail
Alle „GetDetail“-BAPIs geben Detailinformationen (Attribute) zu einem Objekt zurück
(kompletter Schlüssel muss angegeben werden).
● Create, Change, Delete, Cancel
Alle „Create, Change, Delete, Cancel“-BAPIs ermöglichen Ihnen das Anlegen, Ändern und
Löschen von Objekten.
● AddItem, RemoveItem
Mit allen „AddItem, RemoveItem“-BAPIs werden Unterobjekte hinzugefügt bzw. entfernt
(z.B. eine Position für einen Auftrag).

BAPI Explorer

Abbildung 91: BAPI Explorer

Mithilfe des BAPI Explorer können Sie Business-Objekte sowie die zugehörigen BAPIs
anwendungsbezogen auflisten. Der Aufruf des BAPI-Explorers erfolgt über das Menü SAP
Easy Access, Menüpfad Werkzeuge → Business Framework → BAPI Explorer oder über die
Transaktion BAPI.
Wenn Sie das gewünschte Business-Objekt bzw. BAPI gefunden haben, können Sie die
zugehörigen Details auf der rechten Seite des Bildes anzeigen, indem Sie „BAPI“ wählen. Per
Doppelklick auf den angezeigten Funktionsbaustein können Sie in seine Anzeige mittels
Function Builder navigieren.

© Copyright. Alle Rechte vorbehalten. 139


Kapitel 4 : Modularisierungstechniken in ABAP

Eigenschaften eines BAPI-Funktionsbausteins

Abbildung 92: Eigenschaften eines BAPI-Funktionsbausteins

Technische Anforderungen an Funktionsbausteine für BAPIs


● Funktionsbausteine für BAPIs müssen folgende technische Voraussetzungen erfüllen:
- Namenskonvention: BAPI <Business-Objektname> <Methodenname>
- Remote-fähig
- Keine Benutzerdialoge und Benutzernachrichten
- Namenspräfix für BAPI-Strukturen: BAPI
Schnittstellenparameter sind mit Komponenten von Strukturen aus dem ABAP
Dictionary typisiert, die für dieses BAPI angelegt wurden.
- Keine Changing-Parameter bis Release 4.6
- Keine Ausnahmen auslösen
Fehler werden dem Benutzer über den speziellen Exportparameter RETURN gemeldet.

140 © Copyright. Alle Rechte vorbehalten.


Lektion: Beschreiben von Business Application Programming Interfaces (BAPIs)

BAPI-Aufruf in einem ABAP-Programm

Abbildung 93: BAPI-Aufruf in einem ABAP-Programm

Um ein BAPI innerhalb desselben SAP-Systems verwenden zu können, müssen Sie den
entsprechenden Funktionsbaustein direkt aufrufen. Beachten Sie die im Abschnitt
„Eigenschaften eines BAPI-Funktionsbausteins“ erwähnten Einschränkungen.

Hinweis:
BAPI-Schnittstellen werden entsprechend den externen Aufrufanforderungen,
d.h. einem Aufruf aus einem externen System heraus, angelegt. Daher werden
Beträge in einem externen Format mit 4 oder 9 Nachkommastellen erwartet.
Während des Aufrufs müssen die Beträge im entsprechend konvertierten Format
an die Schnittstelle übergeben werden, auch wenn die zugehörige Währung keine
Nachkommastellen besitzt.
Für diese Konvertierung bzw. Rückkonvertierung können Sie Funktionsbausteine
aus der Funktionsgruppe „BACV“ (Paket SBF_BAPI) verwenden.

ZUSAMMENFASSUNG DER LEKTION


Nun können Sie
● Mithilfe von BAPIs modularisieren

© Copyright. Alle Rechte vorbehalten. 141


Kapitel 4 : Modularisierungstechniken in ABAP

142 © Copyright. Alle Rechte vorbehalten.


Kapitel 4
Lektion 6
Aufruf von Methoden globaler Klassen

ÜBERBLICK ÜBER DIE LEKTION


Diese Lektion gibt eine Einführung in eine weitere Technik zur programmübergreifenden
Modularisierung: den Aufruf von Methoden globaler Klassen. Wie bei Funktionsgruppen und
Funktionsbausteinen suchen Sie zunächst nach vorhandenen Klassen und Methoden und
analysieren, testen und verwenden sie. Darüber hinaus werden Sie eine globale Klasse mit
einer einfachen Methode anlegen.
In dieser Lektion geht es nicht darum, eine umfassende Einführung in die objektorientierte
Programmierung mit ABAP zu geben. Machen Sie sich vielmehr mit den Grundbegriffen der
objektorientierten Programmierung vertraut, damit Sie in der Lage sind, die Funktionen
vorhandener globaler Klassen in Ihren eigenen Programmen zu verwenden.

Unternehmensszenario
Sie benötigen in Ihrem Programm eine Funktion, die eventuell bereits in Form einer Methode
einer globalen Klasse vorhanden ist. Diese Methode möchten Sie in Ihrem Programm
verwenden.
Wenn die Funktion noch nicht vorhanden ist oder nicht Ihren Anforderungen entspricht,
müssen Sie eine eigene globale Klasse und eine Methode anlegen. Dazu müssen Sie über
folgende Kenntnisse verfügen:
● Grundbegriffe der objektorientierten Programmierung
● Abrufen von Informationen zur Funktion und Verwendung von globalen Klassen und ihren
Methoden
● Aufruf von globalen Klassen in Ihren Programmen
● Anlegen von globalen Klassen
● Anlegen und Implementieren von einfachen Methoden in globalen Klassen

LERNZIELE DER LEKTION


Am Ende dieser Lektion können Sie:
● Die objektorientierte Programmierung beschreiben
● Methoden globaler Klassen verwenden
● Instanzen verwenden

© Copyright. Alle Rechte vorbehalten. 143


Kapitel 4 : Modularisierungstechniken in ABAP

Grundlagen der objektorientierten Programmierung

Abbildung 94: Darstellung einer globalen Klasse

Bevor Sie mit globalen Klassen und Methoden arbeiten, müssen Sie einige Grundbegriffe
kennen, die bei der objektorientierten Programmierung verwendet werden.
Sie haben etwas über Funktionsgruppen gelesen, die wiederverwendbare Einheiten in Form
von Funktionsbausteinen zur Verfügung stellen.
Mit objektorientierten Erweiterungen für ABAP wurde die Verwendung globaler Klassen
eingeführt, die Funktionen in Form von Methoden zur Verfügung stellen. Ähnlich wie
Funktionsbausteine haben Methoden eine Schnittstelle (Signatur genannt), die aus Import-,
Export- und Changing-Parametern sowie Ausnahmen besteht.
Klassen haben neben Methoden noch weitere Komponenten. Klassen enthalten
beispielsweise globale Datenobjekte, die als Attribute bezeichnet werden. Auf die gleiche
Weise, wie alle Funktionsbausteine auf die globalen Datenobjekte in einer Funktionsgruppe
zugreifen können, können auch alle Methoden einer Klasse auf die Attribute dieser Klasse
zugreifen.

144 © Copyright. Alle Rechte vorbehalten.


Lektion: Aufruf von Methoden globaler Klassen

Beispiel für die Zugriffsmöglichkeiten einer globalen Klasse

Abbildung 95: Beispiel für die Zugriffsmöglichkeiten einer globalen Klasse

Globale Datenobjekte in der Funktionsgruppe sind außerhalb der Funktionsgruppe nicht


sichtbar. Hierbei spricht man von der Kapselung von Daten in der Funktionsgruppe.
Attribute sind in der Regel in der Klasse gekapselt und können deshalb nur mithilfe von
Methoden derselben Klasse gelesen und geändert werden.
Anders als bei Funktionsbausteinen besteht bei Klassen die Möglichkeit, bestimmte Attribute
für die Benutzer der Klasse sichtbar zu machen. Daher wird zwischen öffentlichen und
privaten Attributen unterschieden.
Die Unterscheidung zwischen öffentlich und privat kann nicht nur bei Attributen, sondern
auch bei Methoden gemacht werden. Während alle Funktionsbausteine von außerhalb der
Funktionsgruppe aufgerufen werden können, sind nur öffentliche Methoden außerhalb der
Klasse verfügbar. Private Methoden können nur von Methoden derselben Klasse aufgerufen
werden und ähneln in dieser Hinsicht den Unterprogrammen innerhalb einer
Funktionsgruppe.

© Copyright. Alle Rechte vorbehalten. 145


Kapitel 4 : Modularisierungstechniken in ABAP

Mehrfachinstanziierung von Klassen

Abbildung 96: Klassen und Objekte

Der Hauptunterschied zwischen globalen Klassen und Funktionsgruppen besteht darin, dass
eine Funktionsgruppe mit globalen Datenobjekten nur einmal pro Hauptprogramm in den
Programmkontext geladen werden kann, während eine globale Klasse beliebig oft geladen
werden kann. Hierbei spricht man von Mehrfachinstanziierung der Klasse. Die Werte in den
globalen Datenobjekten einer Funktionsgruppe sind bei allen Funktionsbausteinaufrufen die
gleichen.
Im Gegensatz dazu kann eine Klasse mehrere Instanzen (auch Objekte genannt) haben, von
denen jede separat im Programmkontext des Hauptprogramms gespeichert wird. Jede
Instanz kann deshalb unterschiedliche Attributwerte haben. Eine Methode sieht dann jeweils
andere Werte in den Attributen, je nachdem, für welche Instanz sie aufgerufen wird.
Eine Klasseninstanz muss mit der Anweisung CREATE OBJECT im ABAP-Quelltext explizit
angelegt werden.

Instanzkomponenten und statische Komponenten


Attribute, die für jede Instanz einen anderen Wert haben können, werden Instanzattribute
genannt, um sie von statischen Attributen bzw. Klassenattributen zu unterscheiden. Statische
Attribute existieren für jeden Programmkontext nur ein Mal, unabhängig davon, wie viele
Klasseninstanzen bei der Programmausführung generiert werden. Wenn Instanzmethoden
auf ein statisches Attribut zugreifen, lesen alle Instanzen den gleichen Wert. Eine
Instanzmethode kann den Wert ändern. Alle anderen Instanzen lesen dann den neuen Wert.
Auch bei den Methoden unterscheidet man zwischen statischen Methoden und
Instanzmethoden. Der Hauptunterschied besteht darin, dass eine Instanzmethode erst
aufgerufen werden kann, wenn zuvor eine Klasseninstanz angelegt wurde. Im Vergleich dazu

146 © Copyright. Alle Rechte vorbehalten.


Lektion: Aufruf von Methoden globaler Klassen

können statische Methoden auch ohne vorherige Instanziierung der Klasse aufgerufen
werden.

Notiz:
In dieser Schulung konzentrieren wir uns hauptsächlich auf statische Methoden.

Attribute globaler Klassen

Abbildung 97: Definition von Attributen

Wie bei anderen Repository-Objekten ist die Anzeige und Verarbeitung globaler Klassen in
den Object Navigator eingebunden. Sie haben mehrere Möglichkeiten, eine globale Klasse zu
öffnen. Wählen Sie zum Beispiel im Navigationsbereich den Eintrag Klasse/Interface, und
geben Sie im Eingabefeld direkt darunter den Namen der Klasse ein. Sie können sich auch
zuerst die Objektliste eines Pakets anzeigen lassen und dann im Unterknoten
Klassenbibliothek → Klassen auf den Namen der gewünschten Klasse doppelklicken.
Um die Liste der Attributdefinitionen in der Klasse zu öffnen, wählen Sie die Registerkarte
Attribute.
Wenn Sie die Klasse nur verwenden möchten, sind nur die Attribute interessant, die öffentlich
sind. Diese Attribute können Sie direkt von außerhalb der Klasse ansprechen.

© Copyright. Alle Rechte vorbehalten. 147


Kapitel 4 : Modularisierungstechniken in ABAP

Methoden und ihre Signaturen

Abbildung 98: Definition von Methoden

Um die Liste aller Methodendefinitionen in der Klasse zu öffnen, wählen Sie die Registerkarte
Methoden. Bei Methoden sind für den Benutzer nur die Einträge interessant, die als öffentlich
gekennzeichnet sind. Nur diese öffentlichen Methoden können extern aufgerufen werden. Alle
anderen Methoden werden für die Modularisierung innerhalb der globalen Klasse verwendet.
Eine als statisch gekennzeichnete Methode kann direkt aufgerufen werden, ohne dass zuerst
eine Instanz der Klasse generiert werden muss. Bei Instanzmethoden müssen Sie eine Instanz
anlegen und die Methode dann speziell für diese Instanz aufrufen. In der Regel wird die
Instanzmethode dann auf Instanzattribute zugreifen, die für unterschiedliche Instanzen
unterschiedliche Werte enthalten.

148 © Copyright. Alle Rechte vorbehalten.


Lektion: Aufruf von Methoden globaler Klassen

Methodenparameter

Abbildung 99: Methodenparameter

Die Parameter einer Methode werden in einem separaten Fenster angezeigt. Sie können das
Fenster von der Methodenliste aus aufrufen, indem Sie mit dem Cursor auf die gewünschte
Methode zeigen und dann die Drucktaste Parameter wählen. Anders als bei
Funktionsbausteinen gibt es keine separate Liste für Export-, Import- und Changing-
Parameter. Stattdessen ist die Parameterart in der Spalte Art angegeben.

© Copyright. Alle Rechte vorbehalten. 149


Kapitel 4 : Modularisierungstechniken in ABAP

Methodenausnahmen

Abbildung 100: Methodenausnahmen

Zum Anzeigen von Methodenausnahmen müssen Sie zu einem separaten Anzeigefenster


navigieren. Sie können das Fenster von der Methodenliste aus aufrufen, indem Sie mit dem
Cursor auf die gewünschte Methode zeigen und dann die Drucktaste Ausnahmen wählen.
Mit dem Basis Release 6.10 wurden klassenbasierte Ausnahmen in ABAP eingeführt. Die
Behandlung dieser Ausnahmen unterscheidet sich ganz wesentlich von der Behandlung der
klassischen Ausnahmen bei Funktionsbausteinen. Eine Methode kann entweder nur neue
klassenbasierte Ausnahmen auslösen oder aber nur klassische Ausnahmen. Eine
Kombination der beiden Konzepte ist nicht möglich. Ein Ankreuzfeld zeigt Ihnen, welches
Ausnahmekonzept von der jeweiligen Methode verwendet wird.
Während das klassische Ausnahmekonzept es Ihnen ermöglicht, einen beliebigen
Ausnahmebezeichner zu wählen, müssen Sie beim neuen Ausnahmekonzept die Namen von
speziellen Klassen, den sogenannten Ausnahmeklassen, angeben.

Hinweis:
Das klassenbasierte Ausnahmekonzept steht auch für Funktionsbausteine zur
Verfügung.

150 © Copyright. Alle Rechte vorbehalten.


Lektion: Aufruf von Methoden globaler Klassen

Globale Klasse – Dokumentation und Test

Abbildung 101: Testumgebung des Class Builder

Bei der Dokumentation globaler Klassen wird zwischen der Dokumentation der Klassen als
Ganzes und der Dokumentation einzelner Komponenten unterschieden.
Die Klassendokumentation können Sie über die Drucktaste Klassen-Dokumentation aufrufen.
Um sich die Dokumentation einer einzelnen Methode oder eines einzelnen Attributs
anzuschauen, navigieren Sie zu der entsprechenden Liste, markieren die gewünschte
Komponente mit dem Cursor und wählen die Drucktaste Dokumentation.

Sie können aktive globale Klassen testen.


Dabei wird für die Komponenten der Klasse temporärer Speicher allokiert. Bei statischen
Komponenten wird der Speicher sofort allokiert, wohingegen das System bei
Instanzkomponenten den Speicher erst allokiert, nachdem Sie die Drucktaste Instanz gewählt
haben.
Das System führt nur die öffentlichen Komponenten auf. Methoden können durch Auswahl
der Drucktaste Methode ausführen getestet werden.
Sie müssen keine Instanz generieren, um eine statische Methode testen zu können. Sie
können die statische Methode sofort ausführen.
Auf dem Bild werden alle vorhandenen Importparameter angezeigt, nachdem Sie die
Drucktaste Ausführen gewählt haben.
Nachdem Sie für die Parameter Werte eingegeben haben, können Sie die Methode testen.
Das System zeigt dann das Ergebnis der Exportparameter an.

© Copyright. Alle Rechte vorbehalten. 151


Kapitel 4 : Modularisierungstechniken in ABAP

Statische Methoden

Abbildung 102: Methodenaufrufe per Drag&Drop

Sie verwenden die Anweisung CALL METHOD, um eine Methode aufzurufen, und geben dann
die Methode an. Sie müssen zwischen einer Instanzmethode und einer statischen Methode
unterscheiden. Bei statischen Methoden setzt sich diese Angabe aus dem Namen der Klasse
und dem Namen der Methode zusammen, die durch den statischen Komponentenselektor
„=>“ (Doppelpfeil) voneinander getrennt sind.
Die Parameter werden dann in einem EXPORTING-Block und einem IMPORTING-Block an den
Funktionsbausteinaufruf übergeben.
Wie bei Funktionsbausteinen haben Sie mehrere Möglichkeiten, den Methodenaufruf
generieren zu lassen. SAP empfiehlt die Verwendung dieser Optionen, um Typisierungsfehler
zu vermeiden.
Markieren Sie im Navigationsbereich einen Methodennamen, und ziehen Sie ihn bei
gedrückter linker Maustaste in den Bearbeitungsbereich. Wenn die Anweisung so generiert
wird, müssen Sie nur noch die Aktualparameter hinzufügen.
Alternativ dazu können Sie auch die Drucktaste Muster wählen. Suchen Sie unter Muster zu
ABAP Objects nach der Option Call Method. Geben Sie unter Klasse/Interface die Klasse und
unter Methode den Namen der Methode ein. Das Feld Instanz muss bei statischen Methoden
nicht ausgefüllt werden.

Ausnahmebehandlung
Methoden können entweder klassische Ausnahmen oder klassenbasierte Ausnahmen
auslösen. Die Behandlung klassischer Ausnahmen erfolgt genau so, wie Sie es von
Funktionsbausteinen kennen.

152 © Copyright. Alle Rechte vorbehalten.


Lektion: Aufruf von Methoden globaler Klassen

Klassische Ausnahmebehandlung

CALL METHOD cl_bc400_compute=>get_power


EXPORTING
iv_base = pa_int1
iv_power = pa_int2
IMPORTING
ev_result = gv_result
EXCEPTIONS
POWER_VALUE_TOO_HIGH = 1
RESULT_VALUE_TOO_HIGH = 2.

CASE sy-subrc.
WHEN 0.
WRITE gv_result.
WHEN 1.
WRITE 'Max Value for Power is 4'.
WHEN 2.
WRITE 'Result value was too high'.
ENDCASE.

Im EXCEPTIONS-Block des Methodenaufrufs ordnen Sie der Ausnahme einen Rückgabewert


zu. Beim Abbruch der Methode mit dieser klassischen Ausnahme wird dieser Rückgabewert
in das Systemfeld „sy-subrc“ eingetragen. Durch Abfrage von „sy-subrc“ kann das aufrufende
Programm auf die Ausnahme reagieren.
Die Behandlung von klassenbasierten Ausnahmen ist dagegen wesentlich komplexer.

Klassenbasierte Ausnahmen

Behandlung von klassenbasierten Ausnahmen

TRY.
CALL METHOD cl_bc400_compute=>get_power
EXPORTING
iv_base = pa_int1
iv_power = pa_int2
IMPORTING
ev_result = gv_result.
WRITE gv_result.
CATCH cx_bc400_power_too_high .
WRITE 'Max Value for Power is 4'.
CATCH cx_bc400_result_too_high .
WRITE 'Result value was too high'.
ENDTRY.

Der Aufruf muss zwischen der TRY.- und der ENDTRY.-Anweisung stehen. Die Ausnahme wird
dann in einem Verarbeitungsblock behandelt, der mit der Anweisung „CATCH <exception
class>“ beginnt, wobei <exception class> für die Ausnahmeklasse steht, die behandelt
werden soll. Wird innerhalb des TRY-ENDTRY-Blocks die entsprechende Ausnahme
ausgelöst, wird die Verarbeitung abgebrochen, und der Programmverlauf verzweigt direkt
zum entsprechenden CATCH-Block.

© Copyright. Alle Rechte vorbehalten. 153


Kapitel 4 : Modularisierungstechniken in ABAP

Ausnahmebehandlung mit Ausnahmeklassen

Abbildung 103: Ausnahmebehandlung mit Ausnahmeklassen

Wenn Sie Methodenaufrufe mit der Drag&Drop-Funktion oder durch Auswahl der Drucktaste
„Muster“ generieren, generiert das System auch die Anweisungen für die Behandlung der
klassenbasierten Ausnahmen. Sie müssen die Kommentare dann entfernen und die CATCH-
Blöcke implementieren.

154 © Copyright. Alle Rechte vorbehalten.


Lektion: Aufruf von Methoden globaler Klassen

Instanzerzeugung und Methoden zum Aufrufen von Instanzen

Abbildung 104: Instanzerzeugung und Methoden zum Aufrufen von Instanzen

Da Instanzen keinen Namen haben, müssen Sie Referenzvariablen definieren, um Instanzen


von Klassen anlegen und ansprechen zu können. Referenzvariablen sind Zeiger, die Sie auf
entsprechende Instanzen richten können. Jede Referenzvariable hat einen Namen, mit dem
die entsprechende Instanz angesprochen werden kann.
Referenzvariablen werden mithilfe von „DATA reference_name TYPE REF TO class_name“
definiert.
Beim Starten des Programms hat eine Referenzvariable noch ihren Initialwert (zeigt auf keine
Instanz). Erst wenn mithilfe der Referenzvariablen eine Instanz angelegt wurde, hat sie nicht
mehr den Initialwert und zeigt auf die neu angelegte Instanz.
Mit der Anweisung „CREATE OBJECT reference_name“ kann eine Instanz der Klasse angelegt
werden, die in der Definition der Referenzvariablen angegeben wurde. Danach zeigt die
Referenzvariable auf die neu erzeugte Instanz.
Wenn Sie CREATE OBJECT verwenden, müssen Sie eventuell für die Importparameter der
speziellen Methode CONSTRUCTOR Daten eingeben. Diese spezielle Methode wird
automatisch sofort nach dem Anlegen der Instanz ausgeführt. Mit ihren Importparametern
pflegt diese spezielle Methode die entsprechenden Attribute der neuen Instanz.
Die Methoden einer Instanz rufen Sie mit der Anweisung „CALL METHOD reference_name-
>method_name“ auf.
Im Gegensatz zum Aufrufen eines Funktionsbausteins reicht in diesem Fall der
Methodenname allein nicht aus. Sie müssen auch die entsprechende Instanz angeben, da das
Programm mehrere Instanzen dieser Klasse haben kann.

© Copyright. Alle Rechte vorbehalten. 155


Kapitel 4 : Modularisierungstechniken in ABAP

ZUSAMMENFASSUNG DER LEKTION


Nun können Sie
● Die objektorientierte Programmierung beschreiben
● Methoden globaler Klassen verwenden
● Instanzen verwenden

156 © Copyright. Alle Rechte vorbehalten.


Kapitel 4
Lektion 7
Anlegen von globalen Klassen und statischen
Methoden

ÜBERBLICK ÜBER DIE LEKTION


In dieser Lektion wird erklärt, wie eine globale Klasse mit einer Methode angelegt wird, in der
eine Funktion zur Wiederverwendung gekapselt wird. Dabei beschränken wir uns auf das
Anlegen einer statischen Methode. Sie erfahren, wie Sie globale Klassen und statische
Methoden in Ihren ABAP-Programmen verwenden.

Unternehmensszenario
Sie möchten eine Anwendung entwickeln, bei der mehrere Funktionen in unterschiedlichen
Programmen verwendet werden. Sie werden mit der Implementierung von
Berechnungsfunktionen betraut. Sie beschließen, diese als globale Klasse mit statischen
Methoden zu programmieren. Dazu müssen Sie über folgende Kenntnisse verfügen:
● Anlegen von globalen Klassen
● Anlegen von statischen Methoden

LERNZIELE DER LEKTION


Am Ende dieser Lektion können Sie:
● einfache globale Klassen und statische Methoden anlegen

© Copyright. Alle Rechte vorbehalten. 157


Kapitel 4 : Modularisierungstechniken in ABAP

Anlegen globaler Klassen

Abbildung 105: Anlegen globaler Klassen im Object Navigator

Um eine globale Klasse anzulegen, öffnen Sie im Navigationsbereich das Kontextmenü für Ihr
Paket, und wählen Sie Anlegen → Klassenbibliothek → Klasse. In dem folgenden Dialogfenster
geben Sie den Namen der Klasse, eine Kurzbeschreibung der Klasse und einige weitere
Eigenschaften ein. Nach dem Sichern ordnen Sie die Klasse einem Workbench-Auftrag zu.
Alternativ dazu können Sie auch im Navigationsbereich in der Dropdown-Box den Eintrag
Klasse/Interface auswählen, im Feld darunter den Namen der neuen Klasse eingeben und
Anzeigen wählen. Bestätigen Sie, dass die nicht vorhandene Klasse angelegt werden soll.

158 © Copyright. Alle Rechte vorbehalten.


Lektion: Anlegen von globalen Klassen und statischen Methoden

Anlegen von statischen Methoden

Abbildung 106: Verwenden des Quelltexteditors

Zum Anlegen einer statischen Methode geben Sie einfach den Methodennamen in der Liste
Methoden auf der Registerkarte Methoden ein. Über die entsprechende Eingabehilfe können
Sie die Sichtbarkeit und die Art (statisch oder Instanz) der Methode angeben.
Um für eine Methode einen Parameter anzulegen, gehen Sie zur Parameterliste für die
entsprechende Methode. Wechseln Sie in den Änderungsmodus, und geben Sie den Namen
des Parameters in die Liste ein. Geben Sie den Parametertyp (Import, Export usw.) über die
Eingabehilfe ein, und geben Sie einen Bezugstyp an.
Um den Quelltext einer Methode zu implementieren, markieren Sie die Methode in der
Methodenliste und wählen die Drucktaste Quelltext. Implementieren Sie den Quelltext
zwischen der Anweisung „METHOD <method_name>.“ und der Anweisung „ENDMETHOD.“.

© Copyright. Alle Rechte vorbehalten. 159


Kapitel 4 : Modularisierungstechniken in ABAP

Anzeigen der Signatur im Quelltexteditor

Abbildung 107: Anzeigen der Signatur im Quelltexteditor

Während Sie den Quelltext bearbeiten, können Sie sich die Signatur der Methode anzeigen
lassen. Wählen Sie dafür, wie in der Abbildung zu sehen, die Drucktaste Signatur.

ZUSAMMENFASSUNG DER LEKTION


Nun können Sie
● einfache globale Klassen und statische Methoden anlegen

160 © Copyright. Alle Rechte vorbehalten.


Kapitel 4
Lektion 8
Verwenden von lokalen Klassen

ÜBERBLICK ÜBER DIE LEKTION


In dieser Lektion erhalten Sie einen kurzen Ausblick darauf, wie lokale Klassen die
Verwendung von objektorientierten Programmierungsmethoden für die programminterne
Modularisierung ermöglichen.

Unternehmensszenario
Eine Funktionalität soll in einer statischen Methode einer lokalen Klasse gekapselt werden.
Dazu müssen Sie über folgende Kenntnisse verfügen:
● Definition, Implementierung und Verwendung von lokalen Klassen

LERNZIELE DER LEKTION


Am Ende dieser Lektion können Sie:
● Lokale Klassen verwenden

Lokale Klassen

Abbildung 108: Definition lokaler Klassen

Sie haben bereits gelernt, wie globale Klassen definiert und verwendet werden. In dieser
Lektion wird die Definition und Verwendung lokaler Klassen erklärt. Lokale Klassen werden so

© Copyright. Alle Rechte vorbehalten. 161


Kapitel 4 : Modularisierungstechniken in ABAP

genannt, weil sie nur lokal innerhalb des Programms verwendet werden können, in dem sie
definiert wurden.

Der Hauptunterschied zwischen globalen Klassen und lokalen Klassen besteht in der Art und
Weise, wie sie definiert werden. Während globale Klassen mit einem speziellen Werkzeug,
dem sogenannten Class Builder definiert werden, werden lokale Klassen direkt im Quelltext
des jeweiligen Hauptprogramms angelegt.
Die Abbildung zeigt, wie eine lokale Klasse im Quelltext des Programms angelegt wird. Es wird
zwischen dem Definitionsteil und dem Implementierungsteil der Klasse unterschieden. Die
Beschreibung der Attribute und die Signaturen der Methoden befinden sich im Definitionsteil,
während der Implementierungsteil den Quelltext der Methoden enthält.
Die Anweisung CLASS ... ENDCLASS ist eine lokale Definition im Programm. So wie die
TYPES-Anweisung programmlokale Datentypen definiert, definiert die Anweisung CLASS ...
ENDCLASS programmlokale Objekttypen.
Der Definitionsteil ist in mehrere Abschnitte unterteilt, in denen die öffentlichen und privaten
Komponenten definiert sind (PUBLIC SECTION und PRIVATE SECTION).

Syntax für statische Methoden

Abbildung 109: Syntax für statische Methoden

In der Abbildung sehen Sie eine schematische Darstellung der Definition und
Implementierung einer öffentlichen statischen Methode. Öffentlich ist die Methode deshalb,
weil sich die Definition im Abschnitt PUBLIC SECTION der Klasse befindet. Um eine
Instanzmethode anstelle einer statischen Methode zu definieren, wird anstelle von CLASS-
METHODS die Anweisung METHODS verwendet.
Methoden haben eine Signatur (Schnittstellenparameter und Ausnahmen), über die sie beim
Aufrufen Werte empfangen und Werte an das aufrufende Programm zurückgeben können.
Methoden können beliebig viele IMPORTING-, EXPORTING- und CHANGING-Parameter
haben. Alle Parameter können sowohl als Wert als auch als Referenz übergeben werden.

162 © Copyright. Alle Rechte vorbehalten.


Lektion: Verwenden von lokalen Klassen

Sie können alle Eingabeparameter (IMPORTING- und CHANGING-Parameter) bei der


Deklaration mit dem Zusatz OPTIONAL als optionale Parameter definieren. Das aufrufende
Programm muss diese Parameter nicht übergeben, wenn das System das Objekt aufruft. Der
Zusatz „DEFAULT“ ermöglicht die Angabe eines Startwerts.

Implementierung und Verwendung einer statischen Methode

Abbildung 110: Implementieren und Verwenden einer statischen Methode

Das Syntaxbeispiel zeigt, wie eine lokale Klasse mit einer statischen Methode definiert wird
(Abschnitt rechts oben) und wie die Methode implementiert wird (Abschnitt rechts unten).
Im Abschnitt links sehen Sie den Aufruf der statischen Methode aus dem Hauptprogramm.
Wie Sie sehen, ist der Aufruf mit dem Aufruf der statischen Methode in einer globalen Klasse
identisch.
Die Definition der lokalen Klasse kann entweder direkt im Quelltext des Hauptprogramms
oder in einem INCLUDE-Programm erfolgen.

Hinweis:
Sie müssen die lokale Klasse vor dem Aufruf definieren.
Dies ist ein Unterschied gegenüber Unterprogrammen, die normalerweise nach
dem Aufruf definiert werden.

ZUSAMMENFASSUNG DER LEKTION


Nun können Sie
● Lokale Klassen verwenden

© Copyright. Alle Rechte vorbehalten. 163


Kapitel 4 : Modularisierungstechniken in ABAP

164 © Copyright. Alle Rechte vorbehalten.


Kapitel 4

Überprüfung des Lernerfolgs

1. Für welche Zwecke wird die Modularisierung verwendet?


Wählen Sie die richtigen Antworten.

X A Verbesserung der Performance

X B Erzielen eines übersichtlicheren Programmaufbaus

X C Kapselung einer Funktion, die in einem Programm mehrmals benötigt wird, für die
Mehrfachnutzung

X D Realisierung der zentralen Wartbarkeit einer Funktion innerhalb eines Programms

X E Systemweite Bereitstellung einer Funktion

2. Mit welcher der folgenden Bezeichnungen wird die Zuordnung von Aktualparametern zu
Formalparametern beim Aufruf eines Unterprogramms benannt?
Wählen Sie die richtige Antwort.

X A Schnittstellenzuordnung

X B Parameterübergabe

X C Schnittstellenaufruf

X D Unterprogrammaufruf

3. Mit welcher der folgenden Bezeichnungen werden im Hauptprogramm definierte


Variablen benannt?
Wählen Sie die richtige Antwort.

X A Globale Datenobjekte

X B Lokale Datentypen

X C Lokale und globale Datentypen

© Copyright. Alle Rechte vorbehalten. 165


Kapitel 4 : Überprüfung des Lernerfolgs

4. Welche der folgenden Elemente sind in der Schnittstelle eines Funktionsbausteins


enthalten?
Wählen Sie die richtigen Antworten.

X A Exportparameter

X B Unterprogramme

X C Changing-Parameter

X D Dynpro

5. Zu welcher der folgenden Registerkarten können Sie wechseln, um den Funktionsbaustein


nach der Definition der entsprechenden Schnittstelle zu implementieren?
Wählen Sie die richtige Antwort.

X A Standard

X B Ausnahmen

X C Quelltext

X D Attribute

6. Nach der Definition der entsprechenden IMPORTING- und EXPORTING-Parameter


können Sie zur Registerkarte Quelltext wechseln, um die Funktionen des
Funktionsbausteins zu implementieren.
Entscheiden Sie, ob diese Aussage richtig oder falsch ist.

X Richtig

X Falsch

7. Der Zugriff auf die Daten im SAP-System kann mittels eines Business Application
Programming Interface (BAPI) erfolgen.
Entscheiden Sie, ob diese Aussage richtig oder falsch ist.

X Richtig

X Falsch

166 © Copyright. Alle Rechte vorbehalten.


Kapitel 4 : Überprüfung des Lernerfolgs

8. Welche der folgenden Begriffe bezeichnen mögliche Werte für die Sichtbarkeit eines
Attributs?
Wählen Sie die richtigen Antworten.

X A Public

X B Private

X C Statisch

X D Instanz

9. Statische Methoden werden mit der Anweisung „CALL CLASS METHOD“ aufgerufen.
Entscheiden Sie, ob diese Aussage richtig oder falsch ist.

X Richtig

X Falsch

10. Wenn Sie eine Methode als statisch kennzeichnen, kann sie direkt aufgerufen werden,
ohne dass zuerst eine Instanz der Klasse erzeugt werden muss.
Entscheiden Sie, ob diese Aussage richtig oder falsch ist.

X Richtig

X Falsch

11. Um eine statische Methode anzulegen, genügt es, ihren Namen in der Konstruktorliste
einzugeben.
Entscheiden Sie, ob diese Aussage richtig oder falsch ist.

X Richtig

X Falsch

12. Mit welchem der folgenden speziellen Werkzeuge werden globale Klassen definiert?
Wählen Sie die richtige Antwort.

X A Object Builder

X B Class Builder

X C Method Builder

X D Attribute Builder

© Copyright. Alle Rechte vorbehalten. 167


Kapitel 4 : Überprüfung des Lernerfolgs

13. Um eine Instanzmethode anstelle einer statischen Methode in einer lokalen Klasse zu
definieren, wird anstelle von „CLASS-METHODS“ die Anweisung „METHODS“ verwendet.
Entscheiden Sie, ob diese Aussage richtig oder falsch ist.

X Richtig

X Falsch

168 © Copyright. Alle Rechte vorbehalten.


Kapitel 4

Überprüfung des Lernerfolgs - Antworten

1. Für welche Zwecke wird die Modularisierung verwendet?


Wählen Sie die richtigen Antworten.

X A Verbesserung der Performance

X B Erzielen eines übersichtlicheren Programmaufbaus

X C Kapselung einer Funktion, die in einem Programm mehrmals benötigt wird, für die
Mehrfachnutzung

X D Realisierung der zentralen Wartbarkeit einer Funktion innerhalb eines Programms

X E Systemweite Bereitstellung einer Funktion

Das ist richtig. Eine Modularisierungseinheit kapselt eine Funktion. Die meisten der
Modularisierungseinheiten können in mehreren Programmen verwendet werden. Deshalb
werden sie oft als Reuse-Einheiten bezeichnet. Die verbesserte Transparenz ergibt sich
daraus, dass das Programm funktionsorientierter wird. Durch die Modularisierung werden
Programme leichter wartbar, da Änderungen nur in der Modularisierungseinheit
vorgenommen werden müssen und nicht an verschiedenen Stellen des Hauptprogramms.
Weitere Informationen erhalten Sie in der Lektion „Erläuterung der Modularisierung“ im
Abschnitt „Modularisierungstechniken“ im Kurs BC400 (Kapitel 4, Lektion 1) oder TAW10
Teil I (Kapitel 10, Lektion 1).

2. Mit welcher der folgenden Bezeichnungen wird die Zuordnung von Aktualparametern zu
Formalparametern beim Aufruf eines Unterprogramms benannt?
Wählen Sie die richtige Antwort.

X A Schnittstellenzuordnung

X B Parameterübergabe

X C Schnittstellenaufruf

X D Unterprogrammaufruf

Das ist richtig. Die Zuordnung von Aktualparametern zu Formalparametern beim Aufrufen
eines Unterprogramms wird „Parameterübergabe“ genannt. Weitere Informationen
erhalten Sie in der Lektion „Definieren und Aufrufen von Unterprogrammen“ im Abschnitt
„Parameterdefinition bei Unterprogrammen“ im Kurs BC400 (Kapitel 4, Lektion 2) oder
TAW10 Teil I (Kapitel 10, Lektion 2).

© Copyright. Alle Rechte vorbehalten. 169


Kapitel 4 : Überprüfung des Lernerfolgs - Antworten

3. Mit welcher der folgenden Bezeichnungen werden im Hauptprogramm definierte


Variablen benannt?
Wählen Sie die richtige Antwort.

X A Globale Datenobjekte

X B Lokale Datentypen

X C Lokale und globale Datentypen

Das ist richtig. Im Hauptprogramm definierte Variablen sind globale Datenobjekte. Sie sind
im gesamten Hauptprogramm sowie in jedem aufgerufenen Unterprogramm sichtbar und
ansprechbar. Weitere Informationen erhalten Sie in der Lektion „Definieren und Aufrufen
von Unterprogrammen“ im Abschnitt „Lokale und globale Datenobjekte“ im Kurs BC400
(Kapitel 4, Lektion 2) oder TAW10 Teil I (Kapitel 10, Lektion 2).

4. Welche der folgenden Elemente sind in der Schnittstelle eines Funktionsbausteins


enthalten?
Wählen Sie die richtigen Antworten.

X A Exportparameter

X B Unterprogramme

X C Changing-Parameter

X D Dynpro

Das ist richtig. Funktionsbausteine haben jeweils eine Schnittstelle, über deren Parameter
Daten im- bzw. exportiert werden. Die Schnittstelle des Funktionsbausteins besteht aus
Import-, Export- und Changing-Parametern sowie Ausnahmen. Weitere Informationen
erhalten Sie in der Lektion „Aufrufen von Funktionsbausteinen“ im Abschnitt
„Untersuchung eines Funktionsbausteins“ im Kurs BC400 (Kapitel 4, Lektion 3) oder
TAW10 Teil I (Kapitel 10, Lektion 3).

5. Zu welcher der folgenden Registerkarten können Sie wechseln, um den Funktionsbaustein


nach der Definition der entsprechenden Schnittstelle zu implementieren?
Wählen Sie die richtige Antwort.

X A Standard

X B Ausnahmen

X C Quelltext

X D Attribute

Das ist richtig. Nach der Definition der entsprechenden IMPORTING- und EXPORTING-
Parameter können Sie zur Registerkarte „Quelltext“ wechseln, um die Funktionen des
Funktionsbausteins zu implementieren. Weitere Informationen erhalten Sie in der Lektion
„Anlegen von Funktionsbausteinen“ im Abschnitt „Bearbeitung von Quelltext“ im Kurs
BC400 (Kapitel 4, Lektion 4) oder TAW10 Teil I (Kapitel 10, Lektion 4).

170 © Copyright. Alle Rechte vorbehalten.


Kapitel 4 : Überprüfung des Lernerfolgs - Antworten

6. Nach der Definition der entsprechenden IMPORTING- und EXPORTING-Parameter


können Sie zur Registerkarte Quelltext wechseln, um die Funktionen des
Funktionsbausteins zu implementieren.
Entscheiden Sie, ob diese Aussage richtig oder falsch ist.

X Richtig

X Falsch

Das ist richtig. Nach der Definition der entsprechenden IMPORTING- und EXPORTING-
Parameter können Sie zur Registerkarte „Quelltext“ wechseln, um die Funktionen des
Funktionsbausteins zu implementieren. Weitere Informationen erhalten Sie in der Lektion
„Anlegen von Funktionsbausteinen“ im Abschnitt „Bearbeitung von Quelltext“ im Kurs
BC400 (Kapitel 4, Lektion 4) oder TAW10 Teil I (Kapitel 10, Lektion 4).

7. Der Zugriff auf die Daten im SAP-System kann mittels eines Business Application
Programming Interface (BAPI) erfolgen.
Entscheiden Sie, ob diese Aussage richtig oder falsch ist.

X Richtig

X Falsch

Das ist richtig. Das Business Object Repository (BOR) im SAP-System enthält Business-
Objekttypen. Ein Business-Objekttyp ist ein Programm, das sich wie eine Klasse verhält
und eine SAP-Tabelle oder eine Tabellenhierarchie repräsentiert. Ein Business-Objekt hat
BAPIs als Methoden. Sie können diese BAPIs aufrufen, um auf die zugehörigen Tabellen
zuzugreifen. Mithilfe eines BAPI kann auf die Daten im SAP-System zugegriffen werden.
Weitere Informationen erhalten Sie in der Lektion „Beschreiben von Business Application
Programming Interfaces (BAPIs)“ im Abschnitt „Business Application Programming
Interface (BAPI)“ im Kurs BC400 (Kapitel 4, Lektion 5) oder TAW10 Teil I (Kapitel 10,
Lektion 5).

© Copyright. Alle Rechte vorbehalten. 171


Kapitel 4 : Überprüfung des Lernerfolgs - Antworten

8. Welche der folgenden Begriffe bezeichnen mögliche Werte für die Sichtbarkeit eines
Attributs?
Wählen Sie die richtigen Antworten.

X A Public

X B Private

X C Statisch

X D Instanz

Das ist richtig. Attribute sind in der Regel durch Definition als PRIVATE in der Klasse
gekapselt und können deshalb nur mithilfe von Methoden derselben Klasse gelesen und
geändert werden. Durch Klassen können Sie bestimmte Attribute für die Benutzer der
Klasse sichtbar machen, falls diese als PUBLIC definiert sind. Weitere Informationen
erhalten Sie in der Lektion „Aufrufen globaler Klassen“ im Abschnitt „Beispiel für
Zugriffsoptionen für eine globale Klasse“ im Kurs BC400 (Kapitel 4, Lektion 6) oder
TAW10 Teil I (Kapitel 10, Lektion 6).

9. Statische Methoden werden mit der Anweisung „CALL CLASS METHOD“ aufgerufen.
Entscheiden Sie, ob diese Aussage richtig oder falsch ist.

X Richtig

X Falsch

Das ist richtig. Sie verwenden die Anweisung CALL METHOD, um eine Methode
aufzurufen, und geben dann die Methode an. Bei statischen Methoden setzt sich diese
Angabe aus dem Namen der Klasse und dem Namen der Methode zusammen, die durch
den statischen Komponentenselektor „=>“ (Doppelpfeil) voneinander getrennt sind.
Weitere Informationen erhalten Sie in der Lektion „Aufrufen globaler Klassen“ im
Abschnitt „Statische Methoden“ im Kurs BC400 (Kapitel 4, Lektion 6) oder TAW10 Teil I
(Kapitel 10, Lektion 6).

10. Wenn Sie eine Methode als statisch kennzeichnen, kann sie direkt aufgerufen werden,
ohne dass zuerst eine Instanz der Klasse erzeugt werden muss.
Entscheiden Sie, ob diese Aussage richtig oder falsch ist.

X Richtig

X Falsch

Das ist richtig. Sie müssen keine Instanz generieren, um eine statische Methode testen zu
können. Sie können die statische Methode sofort ausführen. Weitere Informationen
erhalten Sie in der Lektion „Aufrufen globaler Klassen“ im Abschnitt „Dokumentieren und
Testen globaler Klassen“ im Kurs BC400 (Kapitel 4, Lektion 6) oder TAW10 Teil I (Kapitel
10, Lektion 6).

172 © Copyright. Alle Rechte vorbehalten.


Kapitel 4 : Überprüfung des Lernerfolgs - Antworten

11. Um eine statische Methode anzulegen, genügt es, ihren Namen in der Konstruktorliste
einzugeben.
Entscheiden Sie, ob diese Aussage richtig oder falsch ist.

X Richtig

X Falsch

Das ist richtig. Zum Anlegen einer statischen Methode mit dem Class Builder geben Sie
einfach den Methodennamen in der Liste „Methoden“ auf der Registerkarte „Methoden“
ein. Weitere Informationen erhalten Sie in der Lektion „Anlegen von globalen Klassen und
statischen Methoden“ im Abschnitt „Anlegen statischer Methoden“ im Kurs BC400
(Kapitel 4, Lektion 7) oder TAW10 Teil I (Kapitel 10, Lektion 7).

12. Mit welchem der folgenden speziellen Werkzeuge werden globale Klassen definiert?
Wählen Sie die richtige Antwort.

X A Object Builder

X B Class Builder

X C Method Builder

X D Attribute Builder

Das ist richtig. Globale Klassen werden mit einem speziellen Werkzeug, dem sogenannten
Class Builder, definiert. Weitere Informationen erhalten Sie in der Lektion „Verwendung
lokaler Klassen“ im Abschnitt „Lokale Klassen“ im Kurs BC400 (Kapitel 4, Lektion 8) oder
TAW10 Teil I (Kapitel 10, Lektion 8).

13. Um eine Instanzmethode anstelle einer statischen Methode in einer lokalen Klasse zu
definieren, wird anstelle von „CLASS-METHODS“ die Anweisung „METHODS“ verwendet.
Entscheiden Sie, ob diese Aussage richtig oder falsch ist.

X Richtig

X Falsch

Das ist richtig. Um in einer lokalen Klasse eine Instanzmethode anstelle einer statischen
Methode zu definieren, wird anstelle von CLASS-METHODS die Anweisung METHODS
verwendet. Weitere Informationen erhalten Sie in der Lektion „Verwendung lokaler
Klassen“ im Abschnitt „Syntax für statische Methoden“ im Kurs BC400 (Kapitel 4, Lektion
8) oder TAW10 Teil I (Kapitel 10, Lektion 8).

© Copyright. Alle Rechte vorbehalten. 173


Kapitel 4 : Überprüfung des Lernerfolgs - Antworten

174 © Copyright. Alle Rechte vorbehalten.


KAPITEL 5 Komplexe Datenobjekte

Lektion 1
Verwenden von strukturierten Datenobjekten 177

Lektion 2
Verwenden von internen Tabellen 183

LERNZIELE

● Strukturierte Datenobjekte definieren


● Grundlegende ABAP-Anweisungen für strukturierte Datenobjekte implementieren
● Strukturierte Datenobjekte im Debugging-Modus analysieren
● Interne Tabellen definieren
● Grundlegende ABAP-Anweisungen bei internen Tabellen implementieren
● Interne Tabellen im Debugging-Modus analysieren

© Copyright. Alle Rechte vorbehalten. 175


Kapitel 5 : Komplexe Datenobjekte

176 © Copyright. Alle Rechte vorbehalten.


Kapitel 5
Lektion 1
Verwenden von strukturierten Datenobjekten

ÜBERBLICK ÜBER DIE LEKTION


Diese Lektion beschreibt die Definition strukturierter Datenobjekte (strukturierte Variablen)
und deren Analyse im ABAP Debugger. Außerdem lernen Sie hier, wie Sie grundlegende
ABAP-Anweisungen auf strukturierte Datenobjekte anwenden.

Unternehmensszenario
Sie sollen eigene Datenstrukturen verarbeiten und Ihre Programme mit dem ABAP Debugger
nach semantischen Fehlern durchsuchen. Aus diesem Grund müssen Sie Folgendes wissen:
● Wie strukturierte Datenobjekte (Strukturvariablen) definiert werden
● Wie grundlegende ABAP-Anweisungen bei strukturierten Datenobjekten verwendet
werden
● Wie strukturierte Datenobjekte im Debugging-Modus analysiert werden

LERNZIELE DER LEKTION


Am Ende dieser Lektion können Sie:
● Strukturierte Datenobjekte definieren
● Grundlegende ABAP-Anweisungen für strukturierte Datenobjekte implementieren
● Strukturierte Datenobjekte im Debugging-Modus analysieren

© Copyright. Alle Rechte vorbehalten. 177


Kapitel 5 : Komplexe Datenobjekte

Definition von strukturierten Datenobjekten

Abbildung 111: Definition von Strukturen mit globalen Typen

Bei der Typisierung verwendete Strukturen


Bei der Typisierung können Sie sich auf Folgendes beziehen:
● eine Struktur im ABAP Dictionary (globaler Strukturtyp)
● einen Strukturtyp, den Sie lokal im Programm deklarieren

Für die Namen von Strukturtypen und Strukturvariablen werden die folgenden Definitionen
zur Namenskonvention hinzugefügt:

Tabelle 4: Zur Namenskonvention hinzugefügte Definitionen


Zweck Präfix

Programm-globaler* oder lokaler** struktu- ts_


rierter Typ
Programm-globale* strukturierte Variable gs_
Lokale** strukturierte Variable ls_

178 © Copyright. Alle Rechte vorbehalten.


Lektion: Verwenden von strukturierten Datenobjekten

Notiz:
* Programm-global meint in diesem Fall, dass ein Typ bzw. eine Variable in Ihrem
gesamten Programm zu sehen ist. Der Typ bzw. die Variable wird jedoch lokal in
Ihrem Programm definiert. Sie können Typen auch systemglobal definieren (über
das ABAP Dictionary). Diese Typdefinitionen sind in allen ABAP-Programmen
Ihres SAP-Systems sichtbar und verwendbar.
** Lokal bedeutet in diesem Fall „lokal für ein Unterprogramm“.

Indem Sie strukturierte Datenobjekte (auch bekannt als strukturierte Variablen oder einfach
Strukturen) in ABAP definieren, kombinieren Sie Werte, die logisch zusammengehören, in
einem Datenobjekt. Strukturen können geschachtelt werden. Das heißt, dass Komponenten
wiederum aus Strukturen oder sogar internen Tabellen bestehen können.
Strukturvariablen werden im Programm wie elementare Datenobjekte mit der DATA-
Anweisung definiert.

Definition von Strukturen mit lokalen Typen

Abbildung 112: Definition von Strukturen mit lokalen Typen

In der Abbildung ist die Definition einer Strukturvariablen unter Verwendung eines lokal
deklarierten Strukturtyps zu sehen.
Verwenden Sie die TYPES-Anweisung, um lokale Strukturtypen zu definieren. Die
Komponenten werden dabei, wie in der Abbildung zu sehen ist, eingeschlossen.
TYPES: BEGIN OF structure_type, ... , END OF structure_type.
Ordnen Sie jeder Komponente mithilfe des TYPE-Zusatzes einen Typ zu. Weitere
Informationen können Sie der Schlüsselwortdokumentation zur TYPES-Anweisung
entnehmen.
Definieren Sie das Datenobjekt wie gewohnt.

© Copyright. Alle Rechte vorbehalten. 179


Kapitel 5 : Komplexe Datenobjekte

Bei Bedarf kann ein strukturiertes Datenobjekt auch direkt definiert werden. Dafür muss
lediglich das führende Schlüsselwort TYPES durch DATA ersetzt werden.
DATA: BEGIN OF structure_name, ... , END OF structure_name.

Zugriff auf Strukturkomponenten

Abbildung 113: Zugriff auf Strukturkomponenten

Komponenten einer Struktur werden immer mittels Bindestrich angesprochen:


structure_name-component_name.

Hinweis:
Prinzipiell erlaubt es die ABAP-Syntax, dass Namen von Datenobjekten
Bindestriche enthalten, z.B. „DATA h-var TYPE c LENGTH 5“. Um
Verwechslungen mit dem Ansprechen von Strukturkomponenten zu vermeiden,
sollten Sie unbedingt auf Bindestriche als Namensbestandteil verzichten.

180 © Copyright. Alle Rechte vorbehalten.


Lektion: Verwenden von strukturierten Datenobjekten

Verwendung von strukturierten Datenobjekten

Abbildung 114: Kopieren namensgleicher Strukturkomponenten

Mit der Anweisung MOVE-CORRESPONDING werden die Inhalte der Quellstruktur


komponentenweise in die Zielstruktur kopiert. Dabei werden nur die Komponenten
berücksichtigt, die sowohl in der Quellstruktur als auch in der Zielstruktur unter dem gleichen
Namen vorhanden sind. Die übrigen Komponenten der Strukturen bleiben unverändert.
Die einzelnen Zuweisungen werden wie in der MOVE-Anweisung durchgeführt.

© Copyright. Alle Rechte vorbehalten. 181


Kapitel 5 : Komplexe Datenobjekte

Strukturierte Datenobjekte im Debugging-Modus

Abbildung 115: Strukturen im Debugging-Modus

Verfolgen Sie die Feldinhalte einer Struktur im ABAP Debugger, indem Sie den
Strukturnamen im Bereich „Variable 1“ eingeben oder ihn mit einem Doppelklick aus dem
Quelltext übernehmen. Sie können die Komponente der Struktur mit einem Doppelklick auf
den Strukturnamen im Bereich „Variable 1“ anzeigen. Außerdem kann auf einem der
Desktops ein Anzeigebereich zur Strukturanzeige konfiguriert werden.
Um eine Strukturvariable im klassischen ABAP Debugger anzuzeigen, doppelklicken Sie
darauf. Mit einem Doppelklick auf die Struktur im Quelltext kopieren Sie sie in die Feldansicht.
Mit einem weiteren Doppelklick auf die Feldansicht gelangen Sie zur Strukturanzeige, wo Sie
den Namen, Inhalt und Typ der einzelnen Komponenten sehen können.

ZUSAMMENFASSUNG DER LEKTION


Nun können Sie
● Strukturierte Datenobjekte definieren
● Grundlegende ABAP-Anweisungen für strukturierte Datenobjekte implementieren
● Strukturierte Datenobjekte im Debugging-Modus analysieren

182 © Copyright. Alle Rechte vorbehalten.


Kapitel 5
Lektion 2
Verwenden von internen Tabellen

ÜBERBLICK ÜBER DIE LEKTION


In dieser Lektion wird erklärt, wie interne Tabellen definiert und in ABAP-Programmen
verwendet werden. Außerdem werden Sie interne Tabellen zur Laufzeit im ABAP Debugger
analysieren.

Unternehmensszenario
Sie sollen in Ihren Programmen Tabellenvariablen als Datenspeicher verwenden und diese
Programme dann mit dem ABAP Debugger nach semantischen Fehlern durchsuchen. Aus
diesem Grund müssen Sie Folgendes wissen:
● Wie interne Tabellen definiert werden
● Wie grundlegende ABAP-Anweisungen bei internen Tabellen verwendet werden
● Wie interne Tabellen im Debugging-Modus analysiert werden

LERNZIELE DER LEKTION


Am Ende dieser Lektion können Sie:
● Interne Tabellen definieren
● Grundlegende ABAP-Anweisungen bei internen Tabellen implementieren
● Interne Tabellen im Debugging-Modus analysieren

© Copyright. Alle Rechte vorbehalten. 183


Kapitel 5 : Komplexe Datenobjekte

Tabellentypen

Abbildung 116: Interne Tabellen – Verwendungsmöglichkeiten

Eine interne Tabelle ist ein Datenobjekt, in dem Sie zur Laufzeit mehrere identisch
strukturierte Datensätze aufbewahren können (Tabellenvariable). Die Anzahl der Datensätze
ist nur durch die Kapazität konkreter Systeminstallationen beschränkt.
Die Größe der internen Tabelle wird vom ABAP-Laufzeitsystem dynamisch verwaltet. Der
Entwickler muss sich daher nicht um die Speicherverwaltung kümmern.
Die einzelnen Datensätze in einer internen Tabelle werden als Tabellenzeilen oder
Tabelleneinträge bezeichnet. Die einzelnen Komponenten in einer Zeile werden als Felder
oder Spalten der internen Tabelle bezeichnet.
Interne Tabellen bieten eine einfache Möglichkeit, große Datenmengen in strukturierter Form
zu verarbeiten.

Typische Verwendungsmöglichkeiten für eine interne Tabelle


● Ablage von Daten aus Datenbanktabellen oder sequenziellen Dateien für eine spätere
Verarbeitung
● Vorbereiten der Daten für die Ausgabe auf einem Bildschirm oder Drucker (z.B. sortieren)
● Vorbereiten der Daten für die Verwendung anderer Dienste (z.B. für Methoden-,
Funktionsbaustein- oder Unterprogrammaufrufe)

184 © Copyright. Alle Rechte vorbehalten.


Lektion: Verwenden von internen Tabellen

Attribute interner Tabellen

Abbildung 117: Attribute interner Tabellen

Attribute einer internen Tabelle


● Zeilentyp
Der Zeilentyp beschreibt den Aufbau der Tabellenzeilen. In der Regel gibt der Entwickler
einen Strukturtyp dafür an, es sind aber beliebige Datentypen möglich.
● Primärschlüssel
Der Primärschlüssel einer internen Tabelle besteht aus Schlüsselfeldern in einer
bestimmten Reihenfolge. Die Reihenfolge der Schlüsselfelder wird unter anderem für die
Sortierung nach Schlüsseln verwendet. Der Primärschlüssel kann je nach Zugriffsart als
eindeutig oder nicht eindeutig definiert werden. Eindeutigkeit bedeutet, dass eine
bestimmte Kombination von Schlüsselfeldwerten jeweils nur einmal in der Tabelle
vorkommen darf.
● Tabellenart
Es gibt drei Tabellenarten: Standardtabellen, sortierte Tabellen und Hashed-Tabellen. Je
nach verwendeter Zugriffsart sollten Sie bei der Definition die entsprechende Tabellenart
wählen, um Zugriffe mit hoher Performance zu ermöglichen.

© Copyright. Alle Rechte vorbehalten. 185


Kapitel 5 : Komplexe Datenobjekte

Attribute und Verwendungsmöglichkeiten von Tabellen

Abbildung 118: Attribute und Verwendungsmöglichkeiten von Tabellen

In der Abbildung ist die Auswahl des entsprechenden Tabellentyps dargestellt.

Zugriff auf Tabelleneinträge


Sie haben folgende Möglichkeiten, auf einen Tabelleneintrag zuzugreifen:
● Indexzugriff
Identifizieren Sie den Tabelleneintrag über seine Zeilennummer.
● Schlüsselzugriff
Identifizieren Sie den Tabelleneintrag über seine Werte in Feldern.

Wählen Sie je nach Zugriffsart die am besten geeigneten Tabellenarten, um einen Zugriff mit
hoher Performance zu ermöglichen.

Tabellenarten
Es gibt die folgenden Arten von internen Tabellen:

Standardtabellen
Die Laufzeitumgebung verwaltet eine interne Zeilennummerierung (Index). Sowohl
Index- als auch Schlüsselzugriffe sind möglich.
Wählen Sie diese Tabellenart für interne Tabellen, bei denen Sie vorwiegend mit
Indexzugriff arbeiten.
Sortierte Tabellen
Die Laufzeitumgebung hält die Datensätze aufsteigend nach Schlüsselfeldern sortiert.
Sie verwaltet auch den internen Index. Sowohl Index- als auch Schlüsselzugriffe sind
möglich.

186 © Copyright. Alle Rechte vorbehalten.


Lektion: Verwenden von internen Tabellen

Wählen Sie diese Tabellenart, wenn Sie in der Regel den Schlüssel für den Zugriff auf die
interne Tabelle verwenden oder möchten, dass die Tabelle automatisch nach dem
Schlüssel sortiert wird.
Hash-Tabellen
Die Laufzeitumgebung verwaltet die Datensätze für den schnellen Schlüsselzugriff mit
der Hash-Methode. Dazu ist ein eindeutiger Schlüssel notwendig. Bei Hash-Tabellen sind
nur Schlüsselzugriffe möglich.
Wählen Sie diese Tabellenart, wenn die interne Tabelle sehr groß ist und Sie
ausschließlich per Schlüssel darauf zugreifen möchten.

Hinweis:
Im Rahmen dieser Schulung werden nur Standardtabellen verwendet. Die Syntax
ist jedoch bis auf wenige Sonderfälle bei allen drei Tabellenarten identisch.

Definition von internen Tabellen

Abbildung 119: Definition von internen Tabellen mit globalen Typen

Der Typ einer internen Tabelle heißt Tabellentyp. Tabellentypen können global im ABAP
Dictionary oder programmlokal definiert werden.
In der Abbildung sehen Sie einen im ABAP Dictionary deklarierten Tabellentyp sowie die
programminterne Definition einer Tabellenvariablen mit Bezug auf den Tabellentyp.

© Copyright. Alle Rechte vorbehalten. 187


Kapitel 5 : Komplexe Datenobjekte

Detaillierte Informationen zur Deklaration von globalen Tabellentypen im ABAP Dictionary


können Sie der Online-Dokumentation entnehmen. Wählen Sie dazu (Hilfe zur
Anwendung), während Sie den Tabellentyp anzeigen.

Definition von internen Tabellen mit lokalen Typen

Abbildung 120: Definition von internen Tabellen mit lokalen Typen

Die Abbildung zeigt einen lokal im Programm deklarierten Tabellentyp sowie die interne
Definition einer Tabellenvariablen im Programm mit Bezug auf den lokal deklarierten
Tabellentyp.
Beachten Sie bei der Auflistung der Schlüsselfelder im Tabellentyp, dass die Reihenfolge bei
bestimmten Verarbeitungsarten eine Rolle spielt (z.B. nach Schlüssel sortieren). Detaillierte
Informationen zur Deklaration von lokalen Tabellentypen können Sie der
Schlüsselwortdokumentation zur TYPES-Anweisung entnehmen.

Hinweis:
Anstatt zuerst einen Tabellentyp zu definieren, können Sie eine interne Tabelle
auch direkt definieren. Dafür müssen Sie lediglich DATA anstelle von TYPES
verwenden.

Achtung:
Ein häufiger Anfängerfehler ist folgende Syntax:
DATA gt_itab TYPE TABLE OF <Table type>.
Dabei würde eine interne Tabelle definiert, deren Zeilen interne Tabellen vom
angegebenen Tabellentyp sind.

188 © Copyright. Alle Rechte vorbehalten.


Lektion: Verwenden von internen Tabellen

Eigenständige Definition interner Tabellen


Für Namen von Tabellentypen und internen Tabellen (Datenobjekte), die in Ihrem Programm
definiert sind, werden die folgenden Definitionen zur Namenskonvention hinzugefügt:

Zweck Präfix

Programm-globaler* oder lokaler** Tabellen- tt_


typ
Programm-globale* interne Tabelle gt_
Lokale** interne Tabelle lt_

* Hinweis: Programm-global meint in diesem Fall, dass ein Typ bzw. eine Variable in Ihrem
gesamten Programm zu sehen ist. Der Typ bzw. die Variable wird jedoch lokal in Ihrem
Programm definiert. Sie können Typen auch systemglobal definieren (über das ABAP
Dictionary). Diese Typdefinitionen sind in allen ABAP-Programmen Ihres SAP-Systems
sichtbar und verwendbar.
** Hinweis: Lokal bedeutet in diesem Fall „lokal für ein Unterprogramm“.

Abbildung 121: Eigenständige Definition interner Tabellen

In den bisherigen Definitionen von internen Tabellen wurden ABAP-Dictionary-Objekte, z.B.


ein Tabellentyp (BC400_T_FLIGHTS) oder ein Strukturtyp (BC400_S_FLIGHT), verwendet. In
der Abbildung ist eine eigenständige Tabellendefinition zu sehen.
Die eigenständige Tabellendefinition ermöglicht es Ihnen, interne Tabellen mit beliebigem
Aufbau zu implementieren, ohne sich auf vorhandene Dictionary-Typen zu beziehen.

© Copyright. Alle Rechte vorbehalten. 189


Kapitel 5 : Komplexe Datenobjekte

Mögliche Definitionen interner Tabellen

Abbildung 122: Mögliche Definitionen interner Tabellen

Die Abbildung zeigt einen Überblick über die möglichen Definitionen interner Tabellen.

Standardwerte für die Kurzform einer Tabellendefinition


Die in der Abbildung dargestellte Kurzform einer Tabellendefinition nutzt implizit folgende
Standardwerte:
● Tabellenart – STANDARD (Standard)
● Schlüsseleindeutigkeit – NON-UNIQUE (einzige Möglichkeit bei Standardtabelle)
● Tabellenschlüssel – Default-Key (alle nicht-numerischen Tabellenfelder sind
Schlüsselfelder)

Hinweis:
Da der Default-Key im Allgemeinen nicht sinnvoll nutzbar ist, sollten Sie eine
interne Tabelle nur dann damit definieren, wenn Sie bei der Verarbeitung Ihrer
Tabelle den Tabellenschlüssel nicht benötigen.

190 © Copyright. Alle Rechte vorbehalten.


Lektion: Verwenden von internen Tabellen

Verwendung interner Tabellen

Abbildung 123: Einzelsatzzugriff (Überblick)

Für die Verarbeitung von Einzelsätzen einer internen Tabelle wird eine Strukturvariable
benötigt, die vom gleichen Typ ist wie der Zeilentyp der internen Tabelle. Diese
Strukturvariable wird Arbeitsbereich genannt.
Die Abbildung veranschaulicht die Verarbeitung einer internen Tabelle über den
entsprechenden Arbeitsbereich.

Anweisungen für den Zugriff auf Einzelsätze interner Tabellen


Für den Zugriff auf Einzelsätze interner Tabellen stehen folgende Anweisungen zur
Verfügung:
● Mit APPEND wird der Inhalt einer Struktur an eine interne Tabelle angehängt. Diese
Operation ist nur bei Standardtabellen möglich.
● Mit INSERT wird der Inhalt einer Struktur in eine interne Tabelle eingefügt.
● Mit READ TABLE wird der Inhalt einer Tabellenzeile in eine Struktur kopiert.
● Mit MODIFY TABLE wird eine Zeile einer internen Tabelle mit dem Inhalt einer Struktur
überschrieben.
● Mit DELETE wird eine Zeile in einer internen Tabelle gelöscht.
● Mit COLLECT wird der Inhalt einer Struktur zu derjenigen Zeile einer internen Tabelle
kumuliert, die den gleichen Schlüssel hat. Dabei werden nur Nicht-Schlüsselfelder addiert.
Daher kann diese Anweisung auch nur für Tabellen verwendet werden, bei denen alle
Nicht-Schlüsselfelder numerisch sind.

© Copyright. Alle Rechte vorbehalten. 191


Kapitel 5 : Komplexe Datenobjekte

Detaillierte Informationen zu den beschriebenen ABAP-Anweisungen können Sie der


jeweiligen Schlüsselwortdokumentation entnehmen.

Verarbeiten von Datensatzmengen (Überblick)

Abbildung 124: Verarbeiten von Datensatzmengen (Überblick)

Anweisungen für die Verarbeitung von Datensatzmengen


Für die Verarbeitung von mehreren Datensätzen stehen folgende Anweisungen zur
Verfügung:
● Mit LOOP AT . . . ENDLOOP werden die Zeilen einer internen Tabelle nacheinander in der
Struktur platziert, die in der INTO-Klausel angegeben ist. Innerhalb der Schleife kann der
aktuelle Inhalt der Struktur ausgegeben werden, oder Sie ändern den aktuellen Inhalt und
schreiben ihn zurück in die Tabelle.
● Mit DELETE werden alle Zeilen einer internen Tabelle gelöscht, welche die logische
Bedingung „<Bedingung>“ erfüllen.
● INSERT LINES OF kopiert den Inhalt mehrerer Zeilen einer internen Tabelle in eine andere
interne Tabelle.
● Mit APPEND LINES OF werden die Inhalte mehrerer Zeilen einer internen Tabelle an eine
andere Standardtabelle angehängt.

Detaillierte Informationen zu den hier beschriebenen ABAP-Anweisungen können Sie der


jeweiligen Schlüsselwortdokumentation entnehmen.
Für die gebräuchlichsten Anweisungen folgen hier einige konkrete Syntaxbeispiele.

192 © Copyright. Alle Rechte vorbehalten.


Lektion: Verwenden von internen Tabellen

Syntaxbeispiel – Einfügen einer Zeile

Abbildung 125: Syntaxbeispiel – Einfügen einer Zeile

Sie können in eine interne Tabelle eine Zeile einfügen, indem Sie die Daten für den
gewünschten Datensatz in den vorbereiteten Arbeitsbereich schreiben und diesen dann mit
der INSERT-Anweisung in die interne Tabelle einfügen.
Bei Standard-Tabellen bewirkt dies ein Anhängen. Bei sortierten Tabellen wird die Zeile
bezüglich der Schlüsselfelder einsortiert. Bei Hash-Tabellen erfolgt das Einfügen gemäß
einem Hash-Algorithmus.

© Copyright. Alle Rechte vorbehalten. 193


Kapitel 5 : Komplexe Datenobjekte

Syntaxbeispiel – Zeilenweise Ausgabe einer internen Tabelle

Abbildung 126: Syntaxbeispiel – Zeilenweise Ausgabe einer internen Tabelle

Sie können den Inhalt einer internen Tabelle mithilfe einer Schleife zeilenweise lesen und
bearbeiten. In jedem Zyklus enthält das Systemfeld „sy-tabix“ die Zeilennummer des
aktuellen Tabelleneintrags.
In dem Beispiel verarbeitet das System alle Zeilen der internen Tabelle nacheinander und
erzeugt die Ausgabe mithilfe der WRITE-Anweisung.
Wenn Sie innerhalb eines Schleifendurchlaufs den Inhalt der aktuellen Tabellenzeile ändern
möchten, dann ändern Sie die Kopie der Zeile im Arbeitsbereich und schreiben den Inhalt
dann mit der MODIFY-Anweisung in die aktuelle Tabellenzeile zurück. Die Syntax dazu lautet:
MODIFY itab FROM wa.

194 © Copyright. Alle Rechte vorbehalten.


Lektion: Verwenden von internen Tabellen

Syntaxbeispiel – Lesen per Index

Abbildung 127: Syntaxbeispiel – Lesen per Index

Sie können in der LOOP-Anweisung mithilfe des Zusatzes „FROM-TO“ den Zugriff auf
bestimmte Zeilen beschränken. In dem Beispiel werden nur die ersten fünf Zeilen der internen
Tabelle nacheinander verarbeitet.
Zum Lesen eines Einzelsatzes können Sie die Anweisung „READ TABLE“ verwenden. Mit dem
INDEX-Zusatz geben Sie die Zeilennummer des gewünschten Datensatzes an.
Der Zugriff auf eine interne Tabelle per Index ist nur bei Indextabellen (Standardtabellen und
sortierte Tabellen) möglich.

© Copyright. Alle Rechte vorbehalten. 195


Kapitel 5 : Komplexe Datenobjekte

Syntaxbeispiel – Lesen per Schlüssel

Abbildung 128: Syntaxbeispiel – Lesen per Schlüssel

Sie können in der Schleife mithilfe des Zusatzes „WHERE“ den Zugriff auf bestimmte Zeilen
beschränken. In dem Beispiel verarbeitet das System nur die Zeilen der internen Tabelle, bei
denen das Feld „CARRID“ den Wert „LH“ hat.

Hinweis:
Im Hinblick auf den Laufzeitbedarf eignet sich für diese Art der Verarbeitung eine
sortierte Tabelle, die das Feld „CARRID“ als erstes Schlüsselfeld besitzt, am
besten.

Mit der Syntax „READ TABLE“ aus der Abbildung können Sie eine bestimmte Zeile der
internen Tabelle lesen. In diesem Fall müssen Sie den vollständigen Schlüsselwert des zu
lesenden Eintrags nach dem Zusatz „WITH TABLE KEY“ angeben. Der Rückgabewert „sy-
subrc“ wird nur dann auf Null gesetzt, wenn eine entsprechende Zeile in der internen Tabelle
gefunden wurde.

Hinweis:
Im Hinblick auf den Laufzeitbedarf ist bei einer großen Datenmenge eine Hash-
Tabelle für diese Art des Zugriffs am besten geeignet.

196 © Copyright. Alle Rechte vorbehalten.


Lektion: Verwenden von internen Tabellen

Bei Verwendung des Zusatzes „WITH TABLE KEY“ müssen Sie für alle Schlüsselfelder Werte
bereitstellen. Wenn Sie für eine beliebige Menge von Feldern Werte angeben möchten,
müssen Sie den Zusatz „WITH KEY“ verwenden.

Kopieren namensgleicher Tabellenkomponenten

Abbildung 129: Kopieren namensgleicher Tabellenkomponenten

Für diese Variante der Anweisung MOVE-CORRESPONDING ist die Angabe interner Tabellen
für beide Seiten erforderlich. Sie sucht in den Zeilentypen der beiden internen Tabellen nach
allen Komponenten mit ähnlichem Namen und ordnet diese aus der Quelltabelle zur
Zieltabelle zu. Wenn es Komponenten mit demselben Namen gibt, wird die Zieltabelle
gelöscht (ohne den Zusatz KEEPING TARGET LINES, andernfalls nicht) und die gleiche Anzahl
von Anfangszeilen eingefügt wie in der Quelltabelle vorhanden. Anschließend werden
nacheinander die Zeilen der Quelltabelle extrahiert, und der Inhalt jeder Zeile wird der
entsprechenden Zeile in der Zieltabelle zugeordnet. Die einzelnen Zuweisungen werden wie in
der MOVE-Anweisung durchgeführt.
Wenn es keine Komponenten mit demselben Namen gibt, erfolgt keine Zuordnung und die
Zieltabelle bleibt unverändert.

© Copyright. Alle Rechte vorbehalten. 197


Kapitel 5 : Komplexe Datenobjekte

Syntaxbeispiel – Sortieren und Löschen von Inhalt

Abbildung 130: Syntaxbeispiel – Sortieren und Löschen von Inhalt

Standard- und Hash-Tabellen können mithilfe der SORT-Anweisung nach dem


Tabellenschlüssel oder nach beliebigen Spalten auf- oder absteigend sortiert werden. Wird für
ein Sortierfeld weder ASCENDING noch DESCENDING als Sortierreihenfolge angegeben, so
wird das Feld standardmäßig aufsteigend sortiert.
Gegebenenfalls können auch sprachenspezifische Sortierregeln berücksichtigt werden.
Mit dem optionalen Zusatz „AS TEXT“ können Sie eine lexikographische Sortierung
implementieren. Das heißt beispielsweise im deutschen Umfeld, dass das ä vor b, und nicht
etwa weit hinter z kommt, was bei einer nicht-lexikographischen Sortierung der Fall wäre.
Bei der Verwendung des optionalen STABLE-Zusatzes bleibt die relative Reihenfolge der
Datensätze, die identische Sortierschlüssel haben, beim Sortieren erhalten.
Weitere Informationen können Sie der Schlüsselwortdokumentation zur SORT-Anweisung
entnehmen.

Löschen des Tabelleninhalts

Anweisungen zum Löschen des Tabelleninhalts


Zum Löschen des Tabelleninhalts können Sie folgende Anweisungen verwenden:
● REFRESH
Mit dieser Anweisung wird der gesamte Inhalt einer internen Tabelle gelöscht. Ein Teil des
zuvor belegten Arbeitsspeichers bleibt aber noch für erneute Einfügungen reserviert.
● CLEAR

198 © Copyright. Alle Rechte vorbehalten.


Lektion: Verwenden von internen Tabellen

Diese Anweisung hat den gleichen Effekt wie „REFRESH“ bei den meisten internen
Tabellen (alle, die bisher im Kurs definiert wurden).
Für interne Tabellen mit Kopfzeile (siehe unten) initialisiert diese Anweisung nur die
Kopfzeile, löscht jedoch nicht die Tabelleninhalte.
● FREE
Mit dieser Anweisung wird der gesamte Inhalt der internen Tabelle gelöscht und der zuvor
belegte Arbeitsspeicher freigegeben. Die FREE-Anweisung verwenden Sie bei internen
Tabellen, die bereits ausgewertet wurden und im weiteren Programmverlauf nicht mehr
benötigt werden, um den nicht mehr benötigten Arbeitsspeicher wieder zur Verfügung zu
stellen.

Interne Tabellen im Debugging-Modus

Abbildung 131: Analyse von Tabellen im Debugging-Modus

Im ABAP Debugger können Sie den Inhalt einer internen Tabelle verfolgen, indem Sie den
Tabellennamen im Bereich „Variable 1“ eingeben und zur Tabellenanzeige gehen.
Doppelklicken Sie dafür auf den Tabellennamen in der Spalte Variable.
Alternativ dazu können Sie auch die Registerkarte Tabelle wählen und im Feld Interne Tabelle
den Tabellennamen angeben. Drücken Sie die Eingabetaste, um den Tabelleninhalt
anzuzeigen. Außerdem kann auf einem der Desktops ein Bereich für die Anzeige einer
internen Tabelle konfiguriert werden.
Zum Anzeigen einer internen Tabelle steht im klassischen ABAP Debugger eine Taste mit der
Bezeichnung „Tabelle“ bereit. Hier können Sie allerdings auch, wie im neuen ABAP Debugger,
zu dieser Anzeige navigieren, indem Sie auf den Tabellennamen doppelklicken.

© Copyright. Alle Rechte vorbehalten. 199


Kapitel 5 : Komplexe Datenobjekte

Interne Tabellen mit Kopfzeile

Abbildung 132: Vergleich interner Tabellen mit und ohne Kopfzeile

Der Zusatz WITH HEADER LINE in der Definition einer internen Tabelle bewirkt, dass die
Tabelle in einem veralteten Format angelegt wird. Dabei wird automatisch ein zur Tabelle
passender Arbeitsbereich (Kopfzeile) erzeugt, sodass die Kopfzeile nicht separat definiert
werden muss. Dies vereinfacht auch die Syntax der Anweisungen, da das System immer die
automatisch angelegte Kopfzeile verwendet und diese nicht mehr explizit angegeben werden
muss.

Tabellen mit Kopfzeile

Gründe für die Nichtverwendung von Tabellen mit Kopfzeile


Sie sollten Tabellen mit Kopfzeile aus folgenden Gründen nicht mehr verwenden:
● Der automatisch generierte Arbeitsbereich hat den gleichen Namen wie die interne
Tabelle, was die Programmlesbarkeit verschlechtert.
● Eine Tabelle mit Kopfzeile ist in geschachtelten Datenobjekten (Strukturen und interne
Tabellen, die interne Tabellen als Komponenten haben) und in ABAP Objects
(objektorientierte Erweiterung von ABAP) nicht zulässig.

Interne Tabellen mit Kopfzeile werden hier erwähnt, weil diese in einigen älteren Programmen
noch verwendet werden und Sie von Zeit zu Zeit mit solchen Programmen arbeiten müssen.
Zu diesem Zweck sind nachfolgend weitere Besonderheiten der Kopfzeile aufgeführt.
Wenn eine interne Tabelle mit Kopfzeile die Bezeichnung „itab“ trägt, können Sie die
Komponente „comp“ der Kopfzeile (Arbeitsbereich) mit „itab-comp“ ansprechen.

200 © Copyright. Alle Rechte vorbehalten.


Lektion: Verwenden von internen Tabellen

Beispiel für das Ansprechen des Tabellenkörpers mit „itab“


● Sie können den Tabellenkörper mit „itab“ ansprechen. Dieser Fall ist im folgenden Beispiel
zu sehen:

DATA itab1 TYPE TABLE OF scarr WITH HEADER LINE.


DATA itab2 LIKE itab1.
itab1 = itab2. "Operation only with header lines
itab1[] = itab2[]. "Operation with the table bodies

Beispiel für die Definition einer internen Tabelle mit Kopfzeile


● Die folgende Syntax definiert ebenfalls eine interne Tabelle mit Kopfzeile, obwohl dies nicht
explizit angegeben ist:

DATA: BEGIN OF itab OCCURS n,


field1 TYPE ... ,
field2 TYPE ... ,
... ,
END OF itab.

ZUSAMMENFASSUNG DER LEKTION


Nun können Sie
● Interne Tabellen definieren
● Grundlegende ABAP-Anweisungen bei internen Tabellen implementieren
● Interne Tabellen im Debugging-Modus analysieren

© Copyright. Alle Rechte vorbehalten. 201


Kapitel 5 : Komplexe Datenobjekte

202 © Copyright. Alle Rechte vorbehalten.


Kapitel 5

Überprüfung des Lernerfolgs

1. Mit welcher der folgenden Anweisungen werden die Inhalte der Quellstruktur
komponentenweise in die Zielstruktur kopiert?
Wählen Sie die richtige Antwort.

X A COPY-CORRESPONDING

X B REPLACE-CORRESPONDING

X C MOVE-CORRESPONDING

X D REMOVE-CORRESPONDING

2. Mit welcher der folgenden Anweisungen werden lokale Strukturtypen definiert?


Wählen Sie die richtige Antwort.

X A TYPES

X B BEGIN

X C END

X D START

3. Welche der folgenden Angaben sind bei der Definition einer internen Tabelle erforderlich?
Wählen Sie die richtigen Antworten.

X A Zeilentyp

X B Primärschlüssel

X C Sekundärschlüssel

X D Tabellenart

© Copyright. Alle Rechte vorbehalten. 203


Kapitel 5 : Überprüfung des Lernerfolgs

4. Mit welcher der folgenden Anweisungen fügen Sie einer internen Tabelle eine Zeile hinzu?
Wählen Sie die richtige Antwort.

X A ADD LINE

X B INSERT ROW

X C APPEND

X D UPDATE TABLE

204 © Copyright. Alle Rechte vorbehalten.


Kapitel 5

Überprüfung des Lernerfolgs - Antworten

1. Mit welcher der folgenden Anweisungen werden die Inhalte der Quellstruktur
komponentenweise in die Zielstruktur kopiert?
Wählen Sie die richtige Antwort.

X A COPY-CORRESPONDING

X B REPLACE-CORRESPONDING

X C MOVE-CORRESPONDING

X D REMOVE-CORRESPONDING

Das ist richtig. Mit der Anweisung MOVE-CORRESPONDING werden die Inhalte der
Quellstruktur komponentenweise in die Zielstruktur kopiert. Dabei werden nur die
Komponenten berücksichtigt, die sowohl in der Quellstruktur als auch in der Zielstruktur
unter dem gleichen Namen vorhanden sind. Die übrigen Komponenten der Strukturen
bleiben unverändert. Weitere Informationen erhalten Sie in der Lektion „Verwendung von
strukturierten Datenobjekten“ im Abschnitt „Verwendung von strukturierten
Datenobjekten“ im Kurs BC400 (Kapitel 5, Lektion 1) oder TAW10 Teil I (Kapitel 11, Lektion
1).

2. Mit welcher der folgenden Anweisungen werden lokale Strukturtypen definiert?


Wählen Sie die richtige Antwort.

X A TYPES

X B BEGIN

X C END

X D START

Das ist richtig. Verwenden Sie die TYPES-Anweisung, um lokale Strukturtypen zu


definieren. Weitere Informationen finden Sie in der Lektion „Verwendung von
strukturierten Datenobjekten“ im Abschnitt „Definition von Strukturen mit lokalen Typen“
im Kurs BC400 (Kapitel 5, Lektion 1) oder TAW10 Teil I (Kapitel 11, Lektion 1).

© Copyright. Alle Rechte vorbehalten. 205


Kapitel 5 : Überprüfung des Lernerfolgs - Antworten

3. Welche der folgenden Angaben sind bei der Definition einer internen Tabelle erforderlich?
Wählen Sie die richtigen Antworten.

X A Zeilentyp

X B Primärschlüssel

X C Sekundärschlüssel

X D Tabellenart

Das ist richtig. Bei der Definition einer internen Tabelle sind folgende Angaben
vorzunehmen: Zeilentyp, Primärschlüssel, Tabellenart. Weitere Informationen erhalten Sie
in der Lektion „Verwendung interner Tabellen“ im Abschnitt „Eigenschaften interner
Tabellen“ im Kurs BC400 (Kapitel 5, Lektion 2) oder TAW10 Teil I (Kapitel 11, Lektion 2).

4. Mit welcher der folgenden Anweisungen fügen Sie einer internen Tabelle eine Zeile hinzu?
Wählen Sie die richtige Antwort.

X A ADD LINE

X B INSERT ROW

X C APPEND

X D UPDATE TABLE

Das ist richtig. Mit APPEND wird der Inhalt einer Struktur an eine interne Tabelle
angehängt. Diese Operation ist nur bei Standardtabellen möglich. Weitere Informationen
erhalten Sie in der Lektion „Verwendung interner Tabellen“ im Abschnitt „Anweisungen
für den Zugriff auf Einzelsätze interner Tabellen“ im Kurs BC400 (Kapitel 5, Lektion 2)
oder TAW10 Teil I (Kapitel 11, Lektion 2).

206 © Copyright. Alle Rechte vorbehalten.


KAPITEL 6 Datenmodellierung und
Datenbeschaffung

Lektion 1
Erläutern von Datenmodellen 209

Lektion 2
Abrufen von einzelnen Datenbanksätzen 219

Lektion 3
Abrufen mehrerer Datenbanksätze 227

Lektion 4
Beschreiben von weiteren Aspekten des Datenbankzugriffs 231

Lektion 5
Implementieren von Berechtigungsprüfungen 243

LERNZIELE

● den Zweck und die Vorteile von Datenmodellen erläutern


● Das SAP-Flugdatenmodell beschreiben
● Transparente Tabellen erläutern
● Einzelne Datenbanksätze abrufen
● Eine SELECT-Schleife implementieren
● Einen Array Fetch implementieren
● Mandantenabhängige Daten abrufen
● Datenbankindizes verwenden
● Den SAP-Tabellenpuffer erläutern
● Daten aus mehreren Datenbanktabellen abrufen
● Daten in einer Datenbanktabelle ändern

© Copyright. Alle Rechte vorbehalten. 207


Kapitel 6 : Datenmodellierung und Datenbeschaffung

● Das Berechtigungskonzept erläutern


● Berechtigungsprüfungen implementieren

208 © Copyright. Alle Rechte vorbehalten.


Kapitel 6
Lektion 1
Erläutern von Datenmodellen

ÜBERBLICK ÜBER DIE LEKTION


Diese Lektion gibt einen Überblick über die Datenmodellierung. Die Datenmodellierung muss
vor der Anwendungsentwicklung durchgeführt werden. Ferner lernen Sie die Beschreibung
von Datenbanktabellen im ABAP Dictionary kennen.

Unternehmensszenario
Sie sollen ein Programm entwickeln, das auf vorhandene Datenbanktabellen zugreift. Dazu
müssen Sie das zugrunde liegende Datenmodell und den Aufbau der Datenbanktabellen
kennen. Dazu müssen Sie über folgende Kenntnisse verfügen:
● Zweck und Vorteile der Nutzung eines Datenmodells in der Anwendungsentwicklung
● SAP-Flugdatenmodell
● Bedeutung und Aufbau einer transparenten Tabelle

LERNZIELE DER LEKTION


Am Ende dieser Lektion können Sie:
● den Zweck und die Vorteile von Datenmodellen erläutern
● Das SAP-Flugdatenmodell beschreiben
● Transparente Tabellen erläutern

© Copyright. Alle Rechte vorbehalten. 209


Kapitel 6 : Datenmodellierung und Datenbeschaffung

Datenmodell: Übersicht

Abbildung 133: Datenmodellierung

Bei der Entwicklung von betriebswirtschaftlichen Anwendungen müssen die relevanten


Aspekte der realen Welt in Form von Daten abgebildet werden. Eine betriebswirtschaftliche
Einheit stellt eine Entität dar. Diese Entitäten stehen in Beziehungen zueinander, die im
zugrunde liegenden Datenmodell (auch bekannt als Structured Entity Relationship Model –
SERM) fixiert sind.
Auf Grundlage dieses Datenmodells implementiert der Entwickler im ABAP Dictionary
geeignete Tabellendefinitionen (transparente Tabellen) sowie die Beziehungen dieser
Tabellen zueinander.
Durch die Aktivierung der Tabellendefinitionen werden in der Datenbank automatisch
entsprechende Datenbanktabellen angelegt, in die später die eigentlichen Anwendungsdaten
aufgenommen werden.

210 © Copyright. Alle Rechte vorbehalten.


Lektion: Erläutern von Datenmodellen

SAP-Flugdatenmodell

Abbildung 134: SAP-Flugdatenmodell für ABAP-Schulungen

Typische Anfragen bei einem Reisebüro


● relevante Flughäfen
● relevante Flugverbindungen
● relevante Flugzeiten
● relevante Informationen über Flüge, z.B. Preis, Auslastung bzw. Verfügbarkeit usw.

In den ABAP-Schulungen, der Online-Dokumentation und der ABAP-


Schlüsselwortdokumentation wird für die gemeinsame Beispielanwendung das
Flugdatenmodell verwendet. Die Repository-Objekte zum Flugdatenmodell befinden sich im
Paket SAPBC_DATAMODEL.
Der Kunde eines Reisebüros möchte von einem Ort zu einem anderen gelangen und dabei ein
Flugzeug benutzen. Er bittet deshalb das Reisebüro, einige Informationen zu recherchieren.

Gewünschte Informationen
● Über welche Flughäfen lässt sich der Reisewunsch am geschicktesten realisieren?
● Welche Flüge werden an den gewünschten Tagen zu akzeptablen Zeiten angeboten?
● Bei welchen Verbindungen sind die Flüge am günstigsten, welche Verbindungen sind am
schnellsten und welche Verbindungen entsprechen am ehesten den gewünschten
Ankunftszeiten?

Das Reisebüro wiederum hat andere Anforderungen. In dem Datenmodell, das auf die
Verwaltung der notwendigen Daten zugeschnitten ist, sind die Daten nach technischen
Kriterien in Tabellen einer zentralen Datenbank abgelegt. Die Menge der gespeicherten Daten
ist weit größer, als dies für die Beantwortung der Fragen des Kunden erforderlich wäre.
Deshalb benötigen Sie Anwendungsprogramme, mit denen Sie die Daten zusammenstellen
können, die zur Beantwortung der Fragen des Kunden erforderlich sind.

© Copyright. Alle Rechte vorbehalten. 211


Kapitel 6 : Datenmodellierung und Datenbeschaffung

Relationales Datenmodell

Abbildung 135: Relationales Datenmodell

Entitäten des Flugdatenmodells


Das Flugdatenmodell enthält die folgenden Entitäten für alle betriebswirtschaftlich logisch
zusammenhängenden Informationen:
● Städte
● Flughäfen
● Fluggesellschaften
● Fluglinien
● Flüge

Beziehungen zwischen den Entitäten des Flugdatenmodells


Diese Entitäten sind auf die folgenden Weisen miteinander verbunden:
● Flugpläne enthalten jeweils eine Fluggesellschaft, einen Startflughafen und einen
Zielflughafen.
● Buchbare Flüge gehören zu einem bestehenden Flugplan.
● Zwischen Städten und den nahegelegenen Flughäfen können Zuordnungen definiert
werden.

Mithilfe dieser Beziehungen können alle benötigten Daten ohne Redundanzen verwaltet
werden. Gleichzeitig ist es dem Reisebüro möglich, alle aus Kundensicht gewünschten Daten
zu erhalten.

212 © Copyright. Alle Rechte vorbehalten.


Lektion: Erläutern von Datenmodellen

Umsetzung mit transparenten Tabellen

Abbildung 136: Umsetzung mit transparenten Tabellen

Zu jeder im Datenmodell fixierten Entität legt der Anwendungsentwickler im ABAP Dictionary


eine transparente Tabelle an. Dabei handelt es sich um die Plattform-unabhängige
Beschreibung der Datenbanktabelle, nicht um die Datenbanktabelle selbst. Bei der
Aktivierung der transparenten Tabelle wird jedoch automatisch eine gleichnamige Tabelle in
der Datenbank erzeugt.
Eine transparente Tabelle besitzt verschiedene Felder (Spalten), damit Datensätze
strukturiert abgelegt und verwaltet werden können. Tabellenfelder werden als Schlüsselfelder
deklariert, wenn ihr Inhalt später zur eindeutigen Identifikation der Datensätze innerhalb der
Datenbanktabelle dienen soll. Der Schlüssel einer Tabelle (Tabellenschlüssel) besteht aus den
Schlüsselfeldern. Man nennt ihn auch Primärschlüssel. Datensätze der gleichen Tabelle
müssen in Bezug auf die Primärschlüsselwerte eindeutig sein. Der Schlüsselwert eines
Datensatzes ist dessen eindeutige ID innerhalb der Tabelle.

© Copyright. Alle Rechte vorbehalten. 213


Kapitel 6 : Datenmodellierung und Datenbeschaffung

Transparente Tabellen

Abbildung 137: Technischer Aufbau von transparenten Tabellen

Eine transparente Tabelle im ABAP Dictionary ist die Beschreibung der zugehörigen
Datenbanktabelle, in der sich die eigentlichen Anwendungsdaten befinden. Die Felder der
transparenten Tabelle bilden in der zugehörigen Datenbanktabelle Spalten mit demselben
Namen. Für die Beschreibung der einzelnen Felder werden in der Regel Datenelemente
verwendet, die Sie bereits als global definierte elementare Datentypen kennen. Die
Datenelemente verweisen für die technischen Eigenschaften auf Domänen.

214 © Copyright. Alle Rechte vorbehalten.


Lektion: Erläutern von Datenmodellen

Transparente Tabellen im ABAP Dictionary

Abbildung 138: Transparente Tabellen im ABAP Dictionary

Neben der Liste der Felder enthält eine transparente Tabelle noch weitere Informationen, die
das System benötigt, um in der Datenbank eine Tabelle mit demselben Namen anzulegen und
die vollständigen Eigenschaften der Tabelle zu beschreiben.

Zusätzliche Informationen in transparenten Tabellen


Transparente Tabellen enthalten die folgenden zusätzlichen Informationen:
● Festlegung des Schlüssels der Datenbanktabelle (Schlüsselfelder)
● Technische Eigenschaften, die von der Datenbank benötigt werden, um die
Datenbanktabelle anzulegen (erwartete Größe, erwartete Zugriffshäufigkeit)
● Einstellungen zu Techniken, die für einen beschleunigten Zugriff auf die Datenbanktabelle
sorgen können (Sekundärindizes, Pufferung)

© Copyright. Alle Rechte vorbehalten. 215


Kapitel 6 : Datenmodellierung und Datenbeschaffung

Strukturen im ABAP Dictionary

Abbildung 139: Strukturen im ABAP Dictionary

Die Definition einer transparenten Tabelle scheint der Definition eines globalen Strukturtyps
sehr zu ähneln. Transparente Tabellen können bei der Programmierung wie Strukturtypen
verwendet werden. Transparente Tabellen können z.B. bei der Definition eines strukturierten
Datenobjekts (Strukturvariable), zur Typisierung eines Schnittstellenparameters oder als
Zeilentyp eines globalen oder lokalen Tabellentyps verwendet werden. Dabei spielt nur die
Liste der Felder eine Rolle. Andere Eigenschaften der transparenten Tabelle, wie etwa die
Schlüsseldefinition oder die technischen Eigenschaften, sind bei der Verwendung als
Datentyp irrelevant.

216 © Copyright. Alle Rechte vorbehalten.


Lektion: Erläutern von Datenmodellen

Transparente Tabelle als ABAP-Datentyp

Abbildung 140: Transparente Tabelle als ABAP-Datentyp

Hinweis:
In älteren Programmen wurden transparente Tabellen sehr großzügig als
Datentypen eingesetzt. Heute wird empfohlen, eine transparente Tabelle nur
unmittelbar im Zusammenhang mit dem Zugriff auf die Datenbank zu
verwenden. Insbesondere sollten transparente Tabellen nicht bei der Definition
von Benutzeroberflächen herangezogen werden, weil dabei eine unerwünschte
Abhängigkeit zwischen der Definition von Datenbankobjekten bzw. Schnittstellen
und der Benutzeroberfläche entsteht.

Zusätzlich zu den datenbankbezogenen Eigenschaften gibt es noch einen weiteren


Unterschied zwischen transparenten Tabellen und Strukturtypen.
Eine transparente Tabelle ist eine Liste von elementaren Feldern, während die Komponenten
eines Strukturtyps selbst wieder strukturiert sein können (geschachtelte Strukturen). Die
Komponenten einer Struktur können sogar mit einem Tabellentyp typisiert werden (tiefe
Strukturen).

ZUSAMMENFASSUNG DER LEKTION


Nun können Sie
● den Zweck und die Vorteile von Datenmodellen erläutern
● Das SAP-Flugdatenmodell beschreiben

© Copyright. Alle Rechte vorbehalten. 217


Kapitel 6 : Datenmodellierung und Datenbeschaffung

● Transparente Tabellen erläutern

218 © Copyright. Alle Rechte vorbehalten.


Kapitel 6
Lektion 2
Abrufen von einzelnen Datenbanksätzen

ÜBERBLICK ÜBER DIE LEKTION


Den Abschluss dieser Lektion bildet ein Hinweis auf ändernde Datenbankzugriffe.

Unternehmensszenario
Sie sollen Daten aus Datenbanktabellen auswerten. Da zu den Datenbanktabellen, die Sie
lesen wollen, noch keine geeigneten Reuse-Komponenten für den Zugriff bereitstehen,
implementieren Sie neue. Dazu müssen Sie über folgende Kenntnisse verfügen:
● Methoden für die Suche nach relevanten Datenbanktabellen
● Programmierung von lesenden Zugriffen auf bestimmte Spalten und Zeilen in einer
Datenbanktabelle

LERNZIELE DER LEKTION


Am Ende dieser Lektion können Sie:
● Einzelne Datenbanksätze abrufen

Datenbeschaffung mit SQL (Structured Query Language)

Abbildung 141: Datenbankzugriff (Architektur)

© Copyright. Alle Rechte vorbehalten. 219


Kapitel 6 : Datenmodellierung und Datenbeschaffung

SQL (Structured Query Language) ist eine Sprache, mit der Programme Datenbanktabellen
definieren, ändern und lesend darauf zugreifen können.
Jedes relationale Datenbanksystem besitzt eine Native SQL, die datenbankspezifisch ist. Da
jedoch nicht alle SAP-Systeme über dasselbe Datenbanksystem verfügen, kann ein ABAP-
Programm mit Native-SQL-Anweisungen nicht uneingeschränkt in allen SAP-Systemen
eingesetzt werden.
Open SQL hingegen ist ein von SAP definierter, datenbankunabhängiger SQL-Standard, der in
der Sprache ABAP verwendet wird. Open-SQL-Anweisungen werden dynamisch in Native-
SQL-Anweisungen des Zieldatenbanksystems umgesetzt und sind somit
datenbankunabhängig. Open SQL ermöglicht dem ABAP-Programmierer unabhängig vom
installierten Datenbanksystem den einheitlichen Zugriff auf Daten.

Suche nach Datenbanktabellen

Optionen für die Suche nach gewünschten Datenbanktabellen

● Anwendungsbezogene Suche
Suchen innerhalb einer bestimmten Anwendungskomponente, in der
Anwendungshierarchie.
● Programmbezogene Suche
Suchen innerhalb eines Programms, das auf die gesuchte Tabelle zugreift:
- Quelltextsuche: im ABAP Editor nach der Anweisung SELECT suchen.
- Funktionalitäts-Debugging: vor Ausführung einer Teilfunktionalität in den Debugging-
Modus wechseln (/h) und einen Breakpoint bei der SELECT-Anweisung setzen.
- Dynpro-Feldinformation: via F1 + Technische Informationen ein entsprechendes
Strukturfeld anzeigen, per Doppelklick ins zugehörige Datenelement navigieren und
einen „Verwendungsnachweis in Tabellenfeldern“ durchführen.

Über das Repository Informationssystem können Sie auch eine freie Suche durchführen.
Bevor Sie direkte Zugriffe auf Datenbanktabellen programmieren, sollten Sie nach
sogenannten Reuse-Komponenten suchen, die den Lesevorgang übernehmen. Die Abbildung
bietet einen Überblick über solche von SAP ausgelieferten Leseroutinen, die Sie in Ihrem
Programm einsetzen können.

220 © Copyright. Alle Rechte vorbehalten.


Lektion: Abrufen von einzelnen Datenbanksätzen

Reuse-Komponenten für die Datenbeschaffung

Abbildung 142: Reuse-Komponenten für die Datenbeschaffung

Arten von Reuse-Komponenten, die den Datenbankzugriff kapseln


● Logische Datenbanken
Logische Datenbanken sind Datenbeschaffungsprogramme, die Daten aus hierarchisch
zusammengehörenden Tabellen lesen.
● Funktionsbausteine
Funktionsbausteine sind in der Funktionsbibliothek des SAP-Systems abgelegte
Prozeduren mit gekapselter Funktionalität, z.B. Lesen aus hierarchisch
zusammengehörenden Tabellen.
● Business Application Programming Interfaces (BAPIs)
Zu den BAPIs gehören z.B. Methoden von Business-Objekten mit Lesefunktionalität.
● Methoden globaler Klassen

Tabelle 5: Transaktionen für verschiedene Arten von Reuse-Komponenten


Art der Reuse-Komponente Transaktion

Logische Datenbanken SE36


Funktionsbausteine SE37
BAPI BAPI
Globale Klasse SE24

© Copyright. Alle Rechte vorbehalten. 221


Kapitel 6 : Datenmodellierung und Datenbeschaffung

Wenn keine für Ihre Datenselektion nutzbaren Reuse-Komponenten vorhanden sind,


implementieren Sie den Lesezugriff, indem Sie ihn in eine Reuse-Komponente kapseln, d.h.
Funktionsbausteine oder Methoden globaler Klassen anlegen.

Lesender Datenbankzugriff (Überblick)

Abbildung 143: Lesender Datenbankzugriff (Überblick)

Mit der Open SQL-Anweisung SELECT programmieren Sie lesende Datenbankzugriffe.

Klauseln in SELECT-Anweisungen
● Die SELECT-Anweisung enthält eine Reihe von Klauseln, von denen jede eine andere
Aufgabe erfüllt:
- Die SELECT-Klausel benennt die Felder der Tabelle, die gelesen werden sollen.
- Die FROM-Klausel benennt die Quelle (Datenbanktabelle oder -View), aus der die Daten
selektiert werden sollen.
- Die INTO-Klausel bestimmt die Zielvariable, in die die selektierten Daten gestellt werden
sollen.
- Die WHERE-Klausel legt die zu selektierenden Zeilen der Tabelle fest.

Weitere Klauseln entnehmen Sie der Schlüsselwortdokumentation zu SELECT.

222 © Copyright. Alle Rechte vorbehalten.


Lektion: Abrufen von einzelnen Datenbanksätzen

Abrufen einer einzelnen Datenzeile

Abbildung 144: Abrufen eines Einzelsatzes

Mit der Anweisung SELECT SINGLE wird ein einzelner Satz aus der Datenbanktabelle gelesen.
Füllen Sie alle Schlüsselfelder der WHERE-Klausel aus, um einen eindeutigen Zugriff zu
gewährleisten. Eine Ausnahme bildet das Mandantenfeld. Bei fehlender Angabe wird der
aktuelle Ausführungsmandant angenommen. Eine Mandantenangabe in der SELECT-
Anweisung ist nur zusammen mit dem CLIENT SPECIFIED-Zusatz möglich.
Mit einem Sternchen (*) können Sie angeben, dass alle ausgewählten Felder der Tabellenzeile
gelesen werden sollen. Wenn Sie nur eine Auswahl davon wünschen, können Sie statt des
Sternchens die gewünschten Felder aufführen, wie in der Abbildung Zur Feldliste passende
Zielstruktur gezeigt.
Über die INTO-Klausel wird die Zielvariable angegeben, in die der Datensatz kopiert werden
soll. Die Zielstruktur muss linksbündig identisch mit der Feldliste sein.
SY-SUBRC gibt den Wert 0 zurück, falls ein passender Satz gefunden wird.

© Copyright. Alle Rechte vorbehalten. 223


Kapitel 6 : Datenmodellierung und Datenbeschaffung

Zur Feldliste passende Zielstruktur

Abbildung 145: Zur Feldliste passende Zielstruktur

Wenn nur eine bestimmte Auswahl von Feldern aus der Tabellenzeile gelesen werden soll,
geben Sie diese Auswahl als Feldliste innerhalb der SELECT-Anweisung an (siehe Abbildung).
In der INTO-Klausel muss dann eine Zielstrukturvariable benannt werden, deren Aufbau
(Namen der Felder, Reihenfolge) zumindest im Anfangsteil der Feldliste entspricht. Dabei
müssen lediglich die entsprechenden Feldtypen passen. Die Namen der Zielstrukturfelder
werden nicht berücksichtigt.
Alternativ können Sie die entsprechenden Zielfelder folgendermaßen in der INTO-Klausel
aufführen: INTO (Feld_1, ... , Feld_n).

224 © Copyright. Alle Rechte vorbehalten.


Lektion: Abrufen von einzelnen Datenbanksätzen

Zur Feldliste namensgleiche Felder in der Zielstruktur

Abbildung 146: Zur Feldliste namensgleiche Felder in der Zielstruktur

Für den Fall, dass Sie eine Strukturvariable für den Empfang des gelesenen Satzes verwenden
möchten, die zwar gleichnamige Felder wie die Feldliste enthält, jedoch im Aufbau nicht mit
der Feldliste übereinstimmt (Zusatzfelder, andere Reihenfolge der Felder), bietet sich der
Zusatz CORRESPONDING FIELDS OF an. Er bewirkt, dass nur die Felder des Zielbereichs
gefüllt werden, die denselben Namen wie die Felder der Datenbanktabelle tragen. Achten Sie
darauf, dass auch die Feldtypen für die entsprechenden Felder übereinstimmen. Sonst findet
– wie bei der MOVE-Anweisung – eine komplizierte Konvertierung statt, und aufgrund von
Abschneidungen werden möglicherweise nur unvollständige Daten in die Zielfelder
transportiert.

Vorteile der Verwendung von INTO CORRESPONDING FIELDS OF


● Die Zielstruktur braucht nicht linksbündig identisch mit der Feldliste zu sein.
● Das Konstrukt ist wartungsfreundlich, da eine Erweiterung der Feldliste bzw. der
Zielstruktur keine sonstige Änderung des Programms erfordert, sofern ein
namensgleiches (möglichst auch typgleiches) Feld in der Zielstruktur vorhanden ist.

ZUSAMMENFASSUNG DER LEKTION


Nun können Sie
● Einzelne Datenbanksätze abrufen

© Copyright. Alle Rechte vorbehalten. 225


Kapitel 6 : Datenmodellierung und Datenbeschaffung

226 © Copyright. Alle Rechte vorbehalten.


Kapitel 6
Lektion 3
Abrufen mehrerer Datenbanksätze

ÜBERBLICK ÜBER DIE LEKTION


Diese Lektion erläutert, wie Sie mehrere Datensätze aus derselben Datenbanktabelle lesen
können.

Unternehmensszenario
Sie sollen Daten aus Datenbanktabellen auswerten. Anstelle einzelner Datensätze möchten
Sie eine ganze Reihe von Datensätzen lesen und verarbeiten. Dazu müssen Sie über folgende
Kenntnisse verfügen:
● Implementierung einer SELECT-Schleife
● Implementierung eines Array Fetch

LERNZIELE DER LEKTION


Am Ende dieser Lektion können Sie:
● Eine SELECT-Schleife implementieren
● Einen Array Fetch implementieren

© Copyright. Alle Rechte vorbehalten. 227


Kapitel 6 : Datenmodellierung und Datenbeschaffung

Datenbeschaffung mit Schleifen

Abbildung 147: Lesen mehrerer Datenzeilen mit einer Schleife

Mit der SELECT-Schleife können Sie mehrere Zeilen einer Datenbanktabelle nacheinander ins
Programm einlesen.
Die WHERE-Klausel bestimmt, welche Zeilen jeweils in die Zielstruktur gelesen und über den
im Schleifenrumpf angegebenen Anweisungsblock verarbeitet werden sollen. Sie können
mehrere logische Bedingungen innerhalb der WHERE-Klausel mit AND bzw. OR logisch
verknüpfen.
Die Datenbank liefert die gewünschten Daten paketweise an die Datenbankschnittstelle des
Applikationsservers. Die Datenbankschnittstelle verarbeitet den Verarbeitungsblock
zwischen SELECT und ENDSELECT, indem sie die Sätze zeilenweise in den Zielbereich
kopiert.
Die Schleife wird automatisch verlassen, nachdem alle gewünschten Zeilen eingelesen und
ausgewertet wurden.
Nach der SELECT-Schleife (d.h. hinter der ENDSELECT-Anweisung) sollten Sie den
Rückgabewert abfragen. Die Variable sy-subrc gibt den Wert 0 zurück, falls mindestens eine
Zeile eingelesen wurde. In dem Fall enthält sy-dbcnt die Anzahl der gelesenen Zeilen.

228 © Copyright. Alle Rechte vorbehalten.


Lektion: Abrufen mehrerer Datenbanksätze

Datenbeschaffung per Array Fetch

Abbildung 148: Lesen mehrerer Datenzeilen per Array Fetch

Über den Zusatz INTO TABLE haben Sie die Möglichkeit, den gewünschten Teil einer
Datenbanktabelle nicht zeilenweise, sondern direkt als Block in eine interne Tabelle zu
kopieren. Diese Technik wird als Array Fetch bezeichnet. Es ist eine performante Technik, um
eine interne Tabelle mit Einträgen einer Datenbanktabelle zu füllen, da der Datentransport
blockweise und nicht zeilenweise ausgeführt wird.
Bei einem Array Fetch handelt es sich nicht um eine Schleifenverarbeitung. Daher ist auch
keine ENDSELECT-Anweisung erforderlich bzw. erlaubt.
Analog zu den bisherigen SELECT-Varianten muss die im Array Fetch als Ziel angegebene
interne Tabelle linksbündig wie die Feldliste aufgebaut sein. Erfüllt die interne Tabelle nicht
diese Voraussetzung, müssen Sie den Zusatz INTO CORRESPONDING FIELDS OF TABLE
statt INTO TABLE verwenden. Dabei werden die in der Feldliste angegebenen
Datenbankspalten in die gleichnamigen Spalten der internen Tabelle kopiert. Achten Sie
darauf, dass die Feldtypen der korrespondierenden Spalten möglichst übereinstimmen, damit
aufwendige Konvertierungen und eventuell unvollständige Datentransfers in die Zieltabelle
vermieden werden.
Beim Array Fetch wird der eventuell vorhandene Inhalt der internen Tabelle überschrieben.
Falls stattdessen Zeilen angehängt werden sollen, können Sie den Zusatz APPENDING TABLE
verwenden.
Sofern das System mindestens einen Satz in die interne Tabelle schreibt, gibt sy-subrc den
Wert 0 zurück. Die Anzahl der kopierten Zeilen wird im Feld sy-dbcnt zurückgegeben.

© Copyright. Alle Rechte vorbehalten. 229


Kapitel 6 : Datenmodellierung und Datenbeschaffung

ZUSAMMENFASSUNG DER LEKTION


Nun können Sie
● Eine SELECT-Schleife implementieren
● Einen Array Fetch implementieren

230 © Copyright. Alle Rechte vorbehalten.


Kapitel 6
Lektion 4
Beschreiben von weiteren Aspekten des
Datenbankzugriffs

ÜBERBLICK ÜBER DIE LEKTION


Diese Lektion enthält einen kurzen Ausblick auf weitere Aspekte des Datenbankzugriffs.

Unternehmensszenario
Sie möchten mehr über Datenbankzugriffe wissen. Sie wollen Ihre Datenbankzugriffe sicher
und effizient gestalten. Deshalb benötigen Sie folgende Kenntnisse:
● mandantenabhängige Daten
● Datenbankindizes
● SAP-Tabellenpuffer
● Abrufen von Daten aus mehreren Datenbanktabellen
● Ändern von Daten in einer Datenbanktabelle

LERNZIELE DER LEKTION


Am Ende dieser Lektion können Sie:
● Mandantenabhängige Daten abrufen
● Datenbankindizes verwenden
● Den SAP-Tabellenpuffer erläutern
● Daten aus mehreren Datenbanktabellen abrufen
● Daten in einer Datenbanktabelle ändern

© Copyright. Alle Rechte vorbehalten. 231


Kapitel 6 : Datenmodellierung und Datenbeschaffung

Datenbeschaffung aus mandantenabhängigen Tabellen

Abbildung 149: Datenbeschaffung aus mandantenabhängigen Tabellen

Eine Datenbanktabelle heißt mandantenabhängig, wenn sie MANDT (Datentyp CLNT) als
erste Schlüsselspalte besitzt und damit mandantenabhängige Einträge enthält.
Wenn Sie Daten aus mandantenabhängigen Tabellen ohne Mandantenangaben selektieren,
werden nur Datensätze zum aktuellen Ausführungsmandanten gelesen. (Der WHERE-Klausel
der SELECT-Anweisung wird automatisch eine Einschränkung auf den aktuellen Mandanten
hinzugefügt.)
Wollen Sie von einem explizit angegebenen Mandanten Daten lesen, so müssen Sie diesen in
der WHERE-Klausel spezifizieren und zusätzlich die Option CLIENT SPECIFIED (hinter der
FROM-Klausel) setzen.
Da das mandantenübergreifende Lesen in der Praxis eher selten gewünscht und im Rahmen
dieser Schulung nicht relevant ist, wird das Mandantenfeld in den Darstellungen i. d. R.
weggelassen.

Allgemeine Performance-Probleme bei der Datenbank


Datenbankzugriffe tragen meistens deutlich zum Laufzeitbedarf einer ABAP-Anwendung bei.
Um das System nicht unnötig zu belasten und die Wartezeiten für alle Anwender so gering wie
möglich zu halten, sollten Sie deshalb beim Datenbankzugriff den Laufzeitbedarf im Auge
behalten.
Open SQL verfügt über eine Reihe von Techniken, mit denen Sie den Laufzeitbedarf
optimieren können.

232 © Copyright. Alle Rechte vorbehalten.


Lektion: Beschreiben von weiteren Aspekten des Datenbankzugriffs

Datenbankindizes

Abbildung 150: Zugriff über Schlüsselfelder

Jede Datenbank verwaltet die Datensätze innerhalb der Datenbanktabelle anhand von
Schlüsselfeldern. Werden beim Zugriff auf die Tabelle alle oder doch zumindest die ersten
paar Schlüsselfelder eingegrenzt, kann die Datenbank schnell und effektiv auf die
gewünschten Datensätze zugreifen.

© Copyright. Alle Rechte vorbehalten. 233


Kapitel 6 : Datenmodellierung und Datenbeschaffung

Zugriff über Nicht-Schlüsselfelder

Abbildung 151: Zugriff über Nicht-Schlüsselfelder

Wird beim Datenbankzugriff jedoch über Felder zugegriffen, die nicht zum Schlüssel der
Tabelle gehören (Nicht-Schlüsselfelder), kann das interne Ordnungsprinzip nicht für einen
schnellen Zugriff verwendet werden. Im ungünstigsten Fall muss die gesamte Tabelle – oder
doch ein sehr großer Teil davon – nach den gewünschten Einträgen durchsucht werden. Hier
spricht man von einem sequenziellen Durchsuchen. Die Wartezeit für den Datenbankzugriff
kann dabei sehr lang sein.

Notiz:
In der Abbildung werden die Datensätze innerhalb der Datenbanktabelle nach den
Schlüsselfeldern sortiert abgelegt. Bei manchen Datenbanksystemen wird
tatsächlich so vorgegangen. Bei anderen sind die Datensätze nicht sortiert.
Stattdessen wird ein Index über die Schlüsselfelder angelegt, der als Primärindex
bezeichnet wird. Dieser Unterschied spielt hier jedoch keine Rolle.

234 © Copyright. Alle Rechte vorbehalten.


Lektion: Beschreiben von weiteren Aspekten des Datenbankzugriffs

Zugriff über einen Sekundärindex

Abbildung 152: Zugriff über einen Sekundärindex

Für den Fall, dass sehr häufig über eine bestimmte Auswahl von Suchfeldern auf eine
Datenbanktabelle zugegriffen wird, können die entsprechenden Zugriffe durch Definition
eines Sekundärindex beschleunigt werden, der die in der Auswahl verwendeten Felder
enthält.
Beim Sekundärindex handelt es sich um eine eigene kleine Tabelle, die für jeden Datensatz
der eigentlichen Datenbanktabelle die Indexfelder und einen Verweis auf den zugehörigen
Datensatz enthält. Stimmen die Felder der Abgrenzung mit den Feldern des Sekundärindex
überein (zumindest linksbündig lückenlos), sucht die Datenbank innerhalb des Sekundärindex
und liest dann über die Verweise die entsprechenden Datensätze aus.
Das Anlegen eines Sekundärindex geschieht im Anzeigemodus der betreffenden
transparenten Tabelle im ABAP Dictionary über die Drucktaste Indizes. Bei Aktivierung des
Indizes wird dann der Sekundärindex auf der Datenbank angelegt.
Ob und in welcher Form ein angelegter Sekundärindex bei einem Datenbankzugriff genutzt
wird, regelt der Datenbank-Optimizer. In Open SQL ist es weder möglich noch erforderlich, die
Verwendung eines Sekundärindex durch eine gesonderte Angabe in der SELECT-Anweisung
zu veranlassen.

© Copyright. Alle Rechte vorbehalten. 235


Kapitel 6 : Datenmodellierung und Datenbeschaffung

Hinweis:
Bei Selektionen aus mandantenabhängigen Tabellen wird stets der Mandant an
die Datenbank übermittelt (d.h. der Mandant gehört stets mit zur Selektion).
Daher ist es sinnvoll, bei der Definition eines Index zu solchen Tabellen das
Mandantenfeld aufzunehmen. Zur Laufzeit kann die Datenbank das
Mandantenfeld dann verwenden, um die datenbankseitige Suche im
Sekundärindex auf den entsprechenden Mandantenblock einzuschränken.

SAP-Tabellenpuffer

Abbildung 153: Zugriff über den SAP-Tabellenpuffer

Bei der Datenbeschaffung wird ein wesentlicher Teil der Laufzeit für die Aufgabe verwendet,
die Daten vom Datenbankserver zum Anwendungsserver zu übertragen. Werden die Daten
häufig gelesen, aber selten geändert, lässt sich die Laufzeit dadurch verringern, dass die
Daten auf dem Anwendungsserver gepuffert werden.
Ob und in welcher Form Daten gepuffert werden, muss für jede Datenbanktabelle separat
entschieden werden. Ob Daten gepuffert werden, hängt davon ab, wie häufig die Daten
gelesen bzw. geändert werden. Die Einstellungen zur Pufferung sind im ABAP Dictionary bei
der transparenten Tabelle hinterlegt (Drucktaste Technische Einstellungen).

236 © Copyright. Alle Rechte vorbehalten.


Lektion: Beschreiben von weiteren Aspekten des Datenbankzugriffs

Achtung:
Die Entscheidung über die Pufferung einer Datenbanktabelle ist nicht einfach und
muss von erfahrenen ABAP-Entwicklern in Rücksprache mit dem
Systemadministrator getroffen werden. Für jeden Anwendungsserver existiert
ein separater SAP-Tabellenpuffer. Besteht ein System aus mehreren
Applikationsservern, wird zwar durch einen speziellen
Synchronisationsmechanismus sichergestellt, dass nach Änderungen an der
Datenbank die entsprechenden Pufferinhalte invalidiert werden. Durch zeitliche
Verzögerungen bei diesem Synchronisationsprozess kann es aber kurzzeitig
dazu kommen, dass veraltete Daten aus dem Puffer gelesen werden. Dieses
Problem muss bei der Entscheidung über die Pufferung berücksichtigt werden.

Greift ein ABAP-Programm lesend auf eine gepufferte Tabelle zu, versucht die
Datenbankschnittstelle zunächst, die gewünschten Daten aus dem SAP-Tabellenpuffer zu
beschaffen. Das Lesen der Daten aus dem SAP-Tabellenpuffer beschleunigt den Zugriff im
Vergleich zum Lesen aus der Datenbank um den Faktor 10 bis 100. Die exakte Erhöhung der
Geschwindigkeit hängt von der Struktur der Tabelle und den genauen Systemkonfigurationen
ab.
Wenn die gewünschten Daten noch nicht im SAP-Tabellenpuffer vorliegen, wird auf die
Datenbank zugegriffen. Anschließend legt die Datenbankschnittstelle die gelesenen Daten
auch im SAP-Tabellenpuffer ab.

Hinweis:
Es gibt Varianten und Zusätze der SELECT-Anweisung, die bewirken, dass die
Daten unabhängig von den Pufferungseinstellungen direkt von der Datenbank
gelesen werden. Man sagt, der Zugriff liest am Puffer vorbei. Diese Art des
Zugriffs kann beim Zugriff auf gepufferte Tabellen Perfomanceprobleme
verursachen und sollte vermieden werden.

© Copyright. Alle Rechte vorbehalten. 237


Kapitel 6 : Datenmodellierung und Datenbeschaffung

Join-Mechanismus

Abbildung 154: Beispiel eines Tabellen-Joins

Häufig ergibt sich die Anforderung, Daten aus verschiedenen Tabellen zu lesen und in einer
Tabelle anzuzeigen.
Die im Allgemeinen performanteste Technik für diese Aufgabe ist ein Tabellen-Join.
Sie lesen Datensätze aus der Datenbanktabelle SPFLI und geben sie aus. Pro Satz soll auch
der volle Name der jeweiligen Fluggesellschaft, der sich in SCARR befindet, mit ausgegeben
werden. Die Abbildung zeigt die logische Entstehung des entsprechenden Tabellen-Joins, von
dem man mittels SELECT-Anweisung die gewünschten Daten vollständig selektieren kann.

238 © Copyright. Alle Rechte vorbehalten.


Lektion: Beschreiben von weiteren Aspekten des Datenbankzugriffs

Angaben bei der Definition eines Tabellen-Joins

Abbildung 155: Angaben bei der Definition eines Tabellen-Joins

Definition eines Tabellen-Joins


● Bei der Definition eines Tabellen-Joins müssen Sie Folgendes angeben:
- Join-Tabellen
Welche Datenbanktabellen sollen gelesen und verknüpft werden?
- Join-Bedingungen
Was sind die Bedingungen für das Zusammenfassen der betreffenden Sätze in den
Tabellen, die bei dem Tabellen-Join zusammengefügt werden sollen?
- Join-Spalten
Welche Spalten aus den ausgewählten Tabellen sollen im Tabellen-Join verfügbar
gemacht werden?

© Copyright. Alle Rechte vorbehalten. 239


Kapitel 6 : Datenmodellierung und Datenbeschaffung

Realisierungsmöglichkeiten für Tabellen-Joins

Abbildung 156: Realisierungsmöglichkeiten für Tabellen-Joins

Methoden für die Implementierung eines Tabellen-Joins


● Es gibt folgende Möglichkeiten, einen Tabellen-Join zu implementieren:
- Sie legen im ABAP Dictionary eine Datenbank-View an, die einem Tabellen-Join
entspricht, und selektieren in Ihrem Programm davon.
Detailinformationen entnehmen Sie bitte der Online-Dokumentation zur ABAP
Workbench, Abschnitt ABAP Dictionary.
- Sie definieren in Ihrem Programm den Join direkt in Ihrer SELECT-Anweisung (ABAP-
Join). Zur Laufzeit wird in der Datenbankschnittstelle dynamisch eine entsprechende
Datenbankanfrage generiert.
Detailinformationen entnehmen Sie bitte der Schlüsselwortdokumentation zur FROM-
Klausel der SELECT-Anweisung.

Hinweis:
Tabellen-Joins und Datenbank-Views sind nur spezifische Sichten auf den Inhalt
von Datenbanktabellen. Es erfolgt keine redundante Speicherung derselben
Daten. Bei einer Selektion werden die Daten aus den zugrunde liegenden
Datenbanktabellen gelesen.

Es ist möglich, mehr als zwei Tabellen zu einem Tabellen-Join zusammenzufügen.

240 © Copyright. Alle Rechte vorbehalten.


Lektion: Beschreiben von weiteren Aspekten des Datenbankzugriffs

Schreibzugriff auf die Datenbank

Abbildung 157: Schreibzugriff auf die Datenbank

Im Rahmen von Open-SQL stehen Ihnen neben SELECT noch die Anweisungen UPDATE,
INSERT, DELETE und MODIFY zur Verfügung. Es ist allerdings wichtig, dass Sie das zugrunde
liegende SAP-Transaktionskonzept verstehen, damit Sie mit diesen ändernden
Datenbankzugriffen keine Dateninkonsistenzen verursachen.

ZUSAMMENFASSUNG DER LEKTION


Nun können Sie
● Mandantenabhängige Daten abrufen
● Datenbankindizes verwenden
● Den SAP-Tabellenpuffer erläutern
● Daten aus mehreren Datenbanktabellen abrufen
● Daten in einer Datenbanktabelle ändern

© Copyright. Alle Rechte vorbehalten. 241


Kapitel 6 : Datenmodellierung und Datenbeschaffung

242 © Copyright. Alle Rechte vorbehalten.


Kapitel 6
Lektion 5
Implementieren von Berechtigungsprüfungen

ÜBERBLICK ÜBER DIE LEKTION


In dieser Lektion wird erläutert, warum eine Berechtigungsprüfung sinnvoll ist und wie Sie
eine solche in Ihre Programme einbinden.

Unternehmensszenario
Sie möchten Berechtigungsprüfungen in Ihre Programme integrieren, um die Daten vor
unerlaubtem Zugriff zu schützen. Dazu müssen Sie über folgende Kenntnisse verfügen:
● SAP-Berechtigungskonzept
● Implementierung von Berechtigungsprüfungen

LERNZIELE DER LEKTION


Am Ende dieser Lektion können Sie:
● Das Berechtigungskonzept erläutern
● Berechtigungsprüfungen implementieren

Berechtigungskonzept

Abbildung 158: Berechtigungskonzept

© Copyright. Alle Rechte vorbehalten. 243


Kapitel 6 : Datenmodellierung und Datenbeschaffung

Sie müssen kritische Daten und Teile des Funktionsumfangs des SAP-Systems vor
unberechtigtem Zugriff schützen. Damit jeder Anwender nur auf die Bereiche zugreifen kann,
für die er explizit eine Berechtigung besitzt, müssen Sie in Ihren Programmen
Berechtigungsprüfungen implementieren.

Berechtigungsobjekte und Berechtigungen (Beispiel)

Abbildung 159: Berechtigungsobjekte und Berechtigungen (Beispiel)

Berechtigungsobjekte werden innerhalb von Objektklassen definiert. Wenn der Entwickler ein
Berechtigungsobjekt definiert, legt er die entsprechenden Felder (ohne Werte) an. Eine
tatsächliche Berechtigung wird von einem Berechtigungsobjekt abgeleitet, indem den Feldern
konkrete Werte zugewiesen werden. Diese Berechtigung kann über ein Berechtigungsprofil in
den entsprechenden Benutzerstammsatz aufgenommen werden.
Zu einem Berechtigungsobjekt können mehrere verschiedene Berechtigungen (für die
Integration in verschiedene Benutzerstammsätze) angelegt werden.

244 © Copyright. Alle Rechte vorbehalten.


Lektion: Implementieren von Berechtigungsprüfungen

Berechtigungsprüfung (Prinizip)

Abbildung 160: Berechtigungsprüfung (Prinizip)

Fortführung des Programms je nach Ergebnis der Berechtigungsprüfung


● Über die Anweisung AUTHORITY-CHECK können Sie zur Laufzeit prüfen, ob der Benutzer
die zur Ausführung der aufgerufenen Funktion erforderliche Berechtigung in seinem
Benutzerstamm besitzt. Setzen Sie Ihr Programm je nach Ergebnis der Prüfung
(SY_SUBRC) fort:
- SY_SUBRC = 0
Der Benutzer verfügt über die erforderliche Berechtigung, um die Funktion (z.B.
SELECT) auszuführen. Das Programm kann fortgesetzt werden.
- SY_SUBRC <> 0
Der Benutzer verfügt nicht über die erforderliche Berechtigung. Es sollte ein Fehler bzw.
eine Warnmeldung angezeigt werden.

Hinweis:
Zusätzlich zur beschriebenen Technik lässt sich mit Berechtigungen auch der
Zugriff auf ganze Programme und Transaktionen steuern. Betrachten Sie
derartige Prüfungen jedoch lediglich als Ergänzung und nicht als Ersatz für die
explizite Berechtigungsprüfung durch den Entwickler.

In der Regel gehört die Definition von Berechtigungsobjekten zur Datenmodellierung und zum
Anlegen der Datenbanktabellen. In dieser Schulung greifen Sie auf ein vorhandenes
Datenmodell zu, sodass Sie das Berechtigungsobjekt S_CARRID verwenden können, das zu
diesem Datenmodell gehört.
Die Implementierung der Berechtigungsprüfung gehört zu den Aufgaben des Entwicklers, der
den Zugriff auf die Datenbanktabellen programmiert.

© Copyright. Alle Rechte vorbehalten. 245


Kapitel 6 : Datenmodellierung und Datenbeschaffung

Die nachfolgenden Schritte, wie z.B. die Definition der Berechtigungen und Profile sowie die
Gestaltung der Benutzerstammsätze, sind Aufgabe des Administrators.

Anzeige von Berechtigungsobjekten

Abbildung 161: Anzeige von Berechtigungsobjekten

Bevor Sie die gewünschte Berechtigungsprüfung in Ihr Programm einbauen können, müssen
Sie zunächst den Aufbau (also die Felder) des entsprechenden Berechtigungsobjekts
ermitteln. Meist besteht ein Objekt aus dem Feld ACTVT (Aktivität) und einem weiteren Feld,
das die zu schützende Datenart angibt (also Materialnummer, Fluggesellschaft usw.). Die
Werte dieser Felder in einer konkreten Berechtigung geben dann an, wozu der jeweilige
Benutzer berechtigt ist.
Ein Berechtigungsobjekt können Sie direkt in der ABAP Workbench anzeigen (z.B. über die
Drucktaste Anderes Objekt oder die Registerkarte Weitere). Alternativ können Sie auch die
Transaktion SU21 verwenden. Hier erhalten Sie einen Überblick über alle im System
angelegten Berechtigungsobjekte.

246 © Copyright. Alle Rechte vorbehalten.


Lektion: Implementieren von Berechtigungsprüfungen

Berechtigungsprüfungen

Abbildung 162: Berechtigungsprüfung (Syntaxbeispiel)

Die Abbildung zeigt, wie Sie eine Berechtigungsprüfung implementieren.


Bei der Berechtigungsprüfung im Programm geben Sie die Berechtigung an, deren Existenz
im Stammsatz des aktuellen Benutzers geprüft werden soll. Sie geben die Berechtigung an,
indem Sie das Berechtigungsobjekt, seine Felder und die entsprechenden Feldwerte angeben.
Die Syntax können Sie der Abbildung entnehmen.
In diesem Beispiel wird die Benutzerberechtigung für den Zugriff auf das Objekt S_CARRID
überprüft. Das Feld CARRID (Fluggesellschaft) enthält die vom Benutzer eingegebene
Fluggesellschaft, und das Feld ACTVT (Aktivität) enthält den Wert „03“ (Anzeigen).
Prüfen Sie nach der AUTHORITY-CHECK-Anweisung den Return Code SY-SUBRC, und
implementieren Sie die weitere Verarbeitung Ihres Programms entsprechend.

Hinweis:
Wenn Sie ein Feld von der Prüfung ausnehmen möchten, geben Sie es in der
AUTHORITY-CHECK-Anweisung entweder gar nicht oder mit Feldbewertung
DUMMY ein. Dabei ist DUMMY ein vordefinierter Bezeichner (also ohne
Hochkommas anzugeben).
Beispiel für eine unterdrückte Feldprüfung: Beim Aufruf einer
Änderungstransaktion sollte das System gleich prüfen, ob der Benutzer eine
Änderungsberechtigung für irgendeine Fluggesellschaft hat. Im negativen Fall
soll sofort eine entsprechende Meldung an ihn ausgegeben werden. Eine solche
Prüfung kann mit folgender Syntax realisiert werden:
AUTHORITY-CHECK OBJECT 'S_CARRID'
ID 'CARRID' DUMMY
ID 'ACTVT' FIELD '02'.

© Copyright. Alle Rechte vorbehalten. 247


Kapitel 6 : Datenmodellierung und Datenbeschaffung

Berechtigungsprüfungen in Programmen

Abbildung 163: Berechtigungsprüfungen in Programmen

Um Schreibfehler im Objekt- und Feldnamen zu vermeiden, sollten Sie die AUTHORITY-


CHECK-Anweisung in Ihrem Quelltext unbedingt über die Drucktaste Muster generieren.
Pflegen Sie danach die Feldbewertungen, und implementieren Sie die Auswertung von SY-
SUBRC.

ZUSAMMENFASSUNG DER LEKTION


Nun können Sie
● Das Berechtigungskonzept erläutern
● Berechtigungsprüfungen implementieren

248 © Copyright. Alle Rechte vorbehalten.


Kapitel 6

Überprüfung des Lernerfolgs

1. Mit welchem der folgenden Werkzeuge können Sie eine transparente Tabelle anlegen?
Wählen Sie die richtigen Antworten.

X A transparentes Feld

X B ABAP Dictionary

X C Datenfeld

X D Datenbank

2. Wenn die transparente Tabelle als Datentyp verwendet wird, sind auch andere
Eigenschaften relevant, z.B. die Schlüsseldefinition oder die technischen Eigenschaften.
Entscheiden Sie, ob diese Aussage richtig oder falsch ist.

X Richtig

X Falsch

3. Welche der folgenden Arten von Reuse-Komponenten kapseln den Datenbankzugriff?


Wählen Sie die richtigen Antworten.

X A Konzeptionelle Datenbank

X B Funktionsbausteine

X C Business Application Programming Interfaces (BAPIs)

X D Methoden lokaler Klassen

4. Die SELECT-Klausel bestimmt, welche Zeilen jeweils in die Zielstruktur gelesen und über
den im Schleifenrumpf angegebenen Anweisungsblock verarbeitet werden sollen.
Entscheiden Sie, ob diese Aussage richtig oder falsch ist.

X Richtig

X Falsch

© Copyright. Alle Rechte vorbehalten. 249


Kapitel 6 : Überprüfung des Lernerfolgs

5. Welche der folgenden Ergänzungen zu einer SELECT-Anweisung ist zu verwenden, um in


einer internen Tabelle Zeilen anzuhängen, statt die vorhandenen Zeilen zu überschreiben?
Wählen Sie die richtige Antwort.

X A INTO TABLE

X B APPENDING TABLE

X C INTO CORRESPONDING FIELD OF TABLE

X D END SELECT

6. Wenn Sie Daten aus mandantenabhängigen Tabellen ohne Mandantenangaben


selektieren, werden Datensätze zum aktuellen und zu allen anderen Mandanten gelesen.
Entscheiden Sie, ob diese Aussage richtig oder falsch ist.

X Richtig

X Falsch

7. Welche der folgenden Vorgehensweisen ermöglicht der Datenbank das Durchsuchen der
gesamten Tabelle oder zumindest eines sehr großen Teils der Tabelle nach den
erforderlichen Einträgen?
Wählen Sie die richtige Antwort.

X A direktes Durchsuchen

X B binäres Durchsuchen

X C sequenzielles Durchsuchen

X D indirektes Durchsuchen

8. Welche der folgenden Angaben gehören zur Definition eines Tabellen-Joins?


Wählen Sie die richtigen Antworten.

X A Join-Tabellen

X B Join-Bedingungen

X C Join-Zeilen

X D Join-Spalten

250 © Copyright. Alle Rechte vorbehalten.


Kapitel 6 : Überprüfung des Lernerfolgs

9. Greift ein ABAP-Programm lesend auf eine gepufferte Tabelle zu, versucht die
Datenbankschnittstelle, die gewünschten Daten aus dem SAP-Tabellenpuffer zu
beschaffen.
Entscheiden Sie, ob diese Aussage richtig oder falsch ist.

X Richtig

X Falsch

10. Welche der folgenden Anweisungen gehören zu Open SQL?


Wählen Sie die richtigen Antworten.

X A CREATE

X B UPDATE

X C INSERT

X D SELECT

11. Mit welcher Anweisung können Sie zur Laufzeit prüfen, ob der Benutzer die zur
Ausführung der aufgerufenen Funktion erforderliche Berechtigung in seinem
Benutzerstamm besitzt?
Wählen Sie die richtige Antwort.

X A AUTHORITY

X B SELECT

X C AUTHORITY-CHECK

X D VALID AUTHORITY

© Copyright. Alle Rechte vorbehalten. 251


Kapitel 6

Überprüfung des Lernerfolgs - Antworten

1. Mit welchem der folgenden Werkzeuge können Sie eine transparente Tabelle anlegen?
Wählen Sie die richtigen Antworten.

X A transparentes Feld

X B ABAP Dictionary

X C Datenfeld

X D Datenbank

Das ist richtig. Auf Grundlage eines Datenmodells implementiert der Entwickler im ABAP
Dictionary geeignete Tabellendefinitionen (transparente Tabellen) sowie die Beziehungen
dieser Tabellen zueinander. Weitere Informationen erhalten Sie in der Lektion
„Erläuterung von Datenmodellen“ im Abschnitt „Datenmodellübersicht“ im Kurs BC400
(Kapitel 6, Lektion 1) oder TAW10 Teil I (Kapitel 12, Lektion 1).

2. Wenn die transparente Tabelle als Datentyp verwendet wird, sind auch andere
Eigenschaften relevant, z.B. die Schlüsseldefinition oder die technischen Eigenschaften.
Entscheiden Sie, ob diese Aussage richtig oder falsch ist.

X Richtig

X Falsch

Das ist richtig. Transparente Tabellen können bei der Programmierung wie Strukturtypen
verwendet werden. Beispielsweise können transparente Tabellen zur Definition eines
strukturierten Datenobjekts verwendet werden. Dabei spielt nur die Liste der Felder eine
Rolle. Andere Eigenschaften der transparenten Tabelle, wie etwa die Schlüsseldefinition
oder die technischen Eigenschaften, sind bei der Verwendung als Datentyp irrelevant.
Weitere Informationen erhalten Sie in der Lektion „Erläuterung von Datenmodellen“ im
Abschnitt „Strukturen im ABAP Dictionary“ im Kurs BC400 (Kapitel 6, Lektion 1) oder
TAW10 Teil I (Kapitel 12, Lektion 1).

252 © Copyright. Alle Rechte vorbehalten.


Kapitel 6 : Überprüfung des Lernerfolgs - Antworten

3. Welche der folgenden Arten von Reuse-Komponenten kapseln den Datenbankzugriff?


Wählen Sie die richtigen Antworten.

X A Konzeptionelle Datenbank

X B Funktionsbausteine

X C Business Application Programming Interfaces (BAPIs)

X D Methoden lokaler Klassen

Das ist richtig. Bevor Sie direkte Zugriffe auf Datenbanktabellen programmieren, sollten
Sie nach Reuse-Komponenten suchen, die den Lesevorgang übernehmen, wie z.B.
logische Datenbanken, Funktionsbausteine, BAPIs, Methoden globaler Klassen. Weitere
Informationen erhalten Sie in der Lektion „Abrufen von einzelnen Datenbanksätzen“ im
Abschnitt „Arten der Reuse-Komponenten, die Datenbankzugriffe kapseln“ im Kurs
BC400 (Kapitel 6, Lektion 2) oder TAW10 Teil I (Kapitel 12, Lektion 2).

4. Die SELECT-Klausel bestimmt, welche Zeilen jeweils in die Zielstruktur gelesen und über
den im Schleifenrumpf angegebenen Anweisungsblock verarbeitet werden sollen.
Entscheiden Sie, ob diese Aussage richtig oder falsch ist.

X Richtig

X Falsch

Das ist richtig. Die SELECT-Klausel benennt die Felder der Tabelle, die gelesen werden
sollen. Weitere Informationen erhalten Sie in der Lektion „Abrufen von einzelnen
Datenbanksätzen“ im Abschnitt „SELECT-Anweisungsklauseln“ im Kurs BC400 (Kapitel
6, Lektion 2) oder TAW10 Teil I (Kapitel 12, Lektion 2).

5. Welche der folgenden Ergänzungen zu einer SELECT-Anweisung ist zu verwenden, um in


einer internen Tabelle Zeilen anzuhängen, statt die vorhandenen Zeilen zu überschreiben?
Wählen Sie die richtige Antwort.

X A INTO TABLE

X B APPENDING TABLE

X C INTO CORRESPONDING FIELD OF TABLE

X D END SELECT

Das ist richtig. Beim Array Fetch wird der eventuell vorhandene Inhalt der internen Tabelle
überschrieben. Falls stattdessen Zeilen angehängt werden sollen, können Sie den Zusatz
APPENDING TABLE verwenden. Weitere Informationen erhalten Sie in der Lektion
„Abrufen von mehreren Datenbanksätzen“ im Abschnitt „Datenabruf mit Array Fetch“ im
Kurs BC400 (Kapitel 6, Lektion 3) oder TAW10 Teil I (Kapitel 12, Lektion 3).

© Copyright. Alle Rechte vorbehalten. 253


Kapitel 6 : Überprüfung des Lernerfolgs - Antworten

6. Wenn Sie Daten aus mandantenabhängigen Tabellen ohne Mandantenangaben


selektieren, werden Datensätze zum aktuellen und zu allen anderen Mandanten gelesen.
Entscheiden Sie, ob diese Aussage richtig oder falsch ist.

X Richtig

X Falsch

Das ist richtig. Wenn Sie Daten aus mandantenabhängigen Tabellen ohne
Mandantenangaben selektieren, werden nur Datensätze zum aktuellen
Ausführungsmandanten gelesen. (Der WHERE-Klausel der SELECT-Anweisung wird
automatisch eine Einschränkung auf den aktuellen Mandanten hinzugefügt.) Weitere
Informationen erhalten Sie in der Lektion „Beschreibung von weiteren Aspekten der
Datenbank“ im Abschnitt „Datenabruf aus mandantenabhängigen Tabellen“ im Kurs
BC400 (Kapitel 6, Lektion 4) oder TAW10 Teil I (Kapitel 12, Lektion 4).

7. Welche der folgenden Vorgehensweisen ermöglicht der Datenbank das Durchsuchen der
gesamten Tabelle oder zumindest eines sehr großen Teils der Tabelle nach den
erforderlichen Einträgen?
Wählen Sie die richtige Antwort.

X A direktes Durchsuchen

X B binäres Durchsuchen

X C sequenzielles Durchsuchen

X D indirektes Durchsuchen

Das ist richtig. Im ungünstigsten Fall muss die gesamte Tabelle – oder doch ein sehr
großer Teil davon – nach den gewünschten Einträgen durchsucht werden. Hier spricht
man von einem sequenziellen Durchsuchen. Die Wartezeit für den Datenbankzugriff kann
dabei sehr lang sein. Weitere Informationen erhalten Sie in der Lektion „Beschreibung von
weiteren Aspekten des Datenbankzugriffs“ im Abschnitt „Zugriff über Nicht-
Schlüsselfelder“ im Kurs BC400 (Kapitel 6, Lektion 4) oder TAW10 Teil I (Kapitel 12,
Lektion 4).

254 © Copyright. Alle Rechte vorbehalten.


Kapitel 6 : Überprüfung des Lernerfolgs - Antworten

8. Welche der folgenden Angaben gehören zur Definition eines Tabellen-Joins?


Wählen Sie die richtigen Antworten.

X A Join-Tabellen

X B Join-Bedingungen

X C Join-Zeilen

X D Join-Spalten

Das ist richtig. Bei der Definition eines Tabellen-Joins müssen Sie Folgendes angeben:
Join-Tabellen, Join-Bedingungen und Join-Spalten. Weitere Informationen erhalten Sie in
der Lektion „Beschreibung von weiteren Aspekten des Datenbankzugriffs“ im Abschnitt
„Definition von Tabellen-Joins“ im Kurs BC400 (Kapitel 6, Lektion 4) oder TAW10 Teil I
(Kapitel 12, Lektion 4).

9. Greift ein ABAP-Programm lesend auf eine gepufferte Tabelle zu, versucht die
Datenbankschnittstelle, die gewünschten Daten aus dem SAP-Tabellenpuffer zu
beschaffen.
Entscheiden Sie, ob diese Aussage richtig oder falsch ist.

X Richtig

X Falsch

Das ist richtig. Greift ein ABAP-Programm lesend auf eine gepufferte Tabelle zu, versucht
die Datenbankschnittstelle zunächst, die gewünschten Daten aus dem SAP-
Tabellenpuffer zu beschaffen. Wenn die gewünschten Daten noch nicht im SAP-
Tabellenpuffer vorliegen, wird auf die Datenbank zugegriffen. Anschließend legt die
Datenbankschnittstelle die gelesenen Daten auch im SAP-Tabellenpuffer ab. Weitere
Informationen erhalten Sie in der Lektion „Beschreibung von weiteren Aspekten des
Datenbankzugriffs“ im Abschnitt „SAP-Tabellenpuffer“ im Kurs BC400 (Kapitel 6, Lektion
4) oder TAW10 Teil I (Kapitel 12, Lektion 4).

10. Welche der folgenden Anweisungen gehören zu Open SQL?


Wählen Sie die richtigen Antworten.

X A CREATE

X B UPDATE

X C INSERT

X D SELECT

Das ist richtig. Im Rahmen von Open-SQL stehen Ihnen neben SELECT noch die
Anweisungen UPDATE, INSERT, DELETE und MODIFY zur Verfügung. Weitere
Informationen erhalten Sie in der Lektion „Beschreibung von weiteren Aspekten des
Datenbankzugriffs“ im Abschnitt „Schreibzugriff auf die Datenbank“ im Kurs BC400
(Kapitel 6, Lektion 4) oder TAW10 Teil I (Kapitel 12, Lektion 4).

© Copyright. Alle Rechte vorbehalten. 255


Kapitel 6 : Überprüfung des Lernerfolgs - Antworten

11. Mit welcher Anweisung können Sie zur Laufzeit prüfen, ob der Benutzer die zur
Ausführung der aufgerufenen Funktion erforderliche Berechtigung in seinem
Benutzerstamm besitzt?
Wählen Sie die richtige Antwort.

X A AUTHORITY

X B SELECT

X C AUTHORITY-CHECK

X D VALID AUTHORITY

Das ist richtig. Über die Anweisung AUTHORITY-CHECK können Sie zur Laufzeit prüfen,
ob der Benutzer die zur Ausführung der aufgerufenen Funktion erforderliche Berechtigung
in seinem Benutzerstamm besitzt. Weitere Informationen erhalten Sie in der Lektion
„Implementierung von Berechtigungsprüfungen“ im Abschnitt „Berechtigungsprüfung
(Prinzip)“ im Kurs BC400 (Kapitel 6, Lektion 5) oder TAW10 Teil I (Kapitel 12, Lektion 5).

256 © Copyright. Alle Rechte vorbehalten.


KAPITEL 7 Klassische ABAP-Reports

Lektion 1
Implementieren von ABAP-Listen 259

Lektion 2
Implementieren von Selektionsbildern 265

Lektion 3
Implementieren von Ereignissen in ABAP-Reports 273

LERNZIELE

● ABAP-Listen- und Spaltenüberschriften definieren


● die Eigenschaften und Stärken von Selektionsbildern beschreiben
● Abgrenzungsmöglichkeiten über Selektionsbilder implementieren
● Ereignisse in ABAP-Reports implementieren

© Copyright. Alle Rechte vorbehalten. 257


Kapitel 7 : Klassische ABAP-Reports

258 © Copyright. Alle Rechte vorbehalten.


Kapitel 7
Lektion 1
Implementieren von ABAP-Listen

ÜBERBLICK ÜBER DIE LEKTION


In dieser Lektion werden klassische ABAP-Reports besprochen. ABAP-Programme dieses
Typs sind eng verbunden mit der Technik der klassischen Ereignissteuerung sowie den
speziellen Benutzerdialogen „Selektionsbild“ und „ABAP-Liste“.

Unternehmensszenario
Sie sollen ein Programm entwickeln, das anhand von Abgrenzungen auf einem Selektionsbild
Daten von der Datenbank liest und auflistet. Dazu müssen Sie über folgende Kenntnisse
verfügen:
● Eigenschaften und Stärken von ABAP-Listen

LERNZIELE DER LEKTION


Am Ende dieser Lektion können Sie:
● ABAP-Listen- und Spaltenüberschriften definieren

© Copyright. Alle Rechte vorbehalten. 259


Kapitel 7 : Klassische ABAP-Reports

Eigenschaften von ABAP-Listen

Abbildung 164: Eigenschaften von ABAP-Listen

Eine Liste verwenden Sie, um den Programmieraufwand für die Ausgabe von Daten zu
minimieren.

Listen und die Anforderungen betriebswirtschaftlicher Daten


● Listen tragen den besonderen Anforderungen betriebswirtschaftlicher Daten in folgender
Weise Rechnung:
- Listen können mehrsprachig gestaltet werden. Falls eine entsprechende Übersetzung
vorliegt, werden dann z.B. Texte und Überschriften in der Anmeldesprache angezeigt.
- Listen können Beträge währungsgerecht darstellen.

Möglichkeiten bei der Listenausgabe


● Bei der Listenausgabe haben Sie folgende Möglichkeiten:
- Ansicht
Dabei ist farbige Darstellung und die Verwendung von Ikonen möglich.
- Drucker
Sie können Listen drucken.
- Internet bzw. Intranet

260 © Copyright. Alle Rechte vorbehalten.


Lektion: Implementieren von ABAP-Listen

Sie haben die Möglichkeit, die Liste ins HTML-Format zu konvertieren.


- Sichern
Dies ist sowohl innerhalb des SAP-Systems als auch außerhalb (z.B. zur
Weiterverarbeitung durch Tabellenkalkulationsprogramme) möglich.

Standard-Listenfunktionen

Abbildung 165: Standard-Listenfunktionen

Über die Standardoberfläche einer Liste stehen dem Benutzer eine Reihe von Funktionen zur
Verfügung.
Die Standard-Listenoberfläche kann mithilfe des Menu Painter an Ihre Bedürfnisse angepasst
werden. Näheres erfahren Sie in der Dokumentation zu diesem Werkzeug und im
entsprechenden Spezialkurs.

© Copyright. Alle Rechte vorbehalten. 261


Kapitel 7 : Klassische ABAP-Reports

Listen- und Spaltenüberschriften

Abbildung 166: Listen- und Spaltenüberschriften

Sie wissen, wie Sie übersetzbare Textsymbole einsetzen können, damit die Oberfläche Ihres
Programms von der Anmeldesprache des Benutzers abhängig wird. Textsymbole stehen
Ihnen in allen Programmtypen zur Verfügung, z.B. für Modulpools, Funktionsgruppen und
globale Klassen.
Speziell für ausführbare Programme (Reports) haben Sie die Möglichkeit, zusätzlich zu den
Textsymbolen eine einzeilige Listenüberschrift und bis zu vier Zeilen Spaltenüberschriften für
die klassische ABAP-Liste zu pflegen.
Listen- und Spaltenüberschriften gehören zusammen mit Textsymbolen und
Selektionstexten zu den Textelementen eines Programms.
Für die Erstpflege der Überschriften müssen Sie Ihr Programm zunächst aktivieren. Dann
erzeugen Sie die Liste, indem Sie das Programm ausführen. Über den Menüpfad
System → Liste → Listenüberschrift können Sie direkt über Ihrer Liste die Überschriften
pflegen. Sie erscheinen automatisch beim nächsten Starten des Programms in der Liste.
Um die gepflegten Überschriften zu ändern (Nachpflege), müssen Sie nicht erneut das
Programm starten und die Liste erzeugen. Stattdessen können Sie vom Editor aus, in dem Sie
das Programm laden, über den Menüpfad Springen → Textelemente und die Registerkarte
Listenüberschriften in die Pflegeumgebung zur Abänderung der Überschriften gelangen.
Um Listen- und Spaltenüberschriften zu übersetzen, verwenden Sie vom ABAP Editor aus den
Menüpfad Springen → Übersetzung.

262 © Copyright. Alle Rechte vorbehalten.


Lektion: Implementieren von ABAP-Listen

ZUSAMMENFASSUNG DER LEKTION


Nun können Sie
● ABAP-Listen- und Spaltenüberschriften definieren

© Copyright. Alle Rechte vorbehalten. 263


Kapitel 7 : Klassische ABAP-Reports

264 © Copyright. Alle Rechte vorbehalten.


Kapitel 7
Lektion 2
Implementieren von Selektionsbildern

ÜBERBLICK ÜBER DIE LEKTION


In dieser Lektion werden klassische ABAP-Reports besprochen. Dieser Typ von ABAP-
Programmen ist eng verbunden mit der Technik der klassischen Ereignissteuerung und dem
speziellen Selektionsbild.

Unternehmensszenario
Sie sollen ein Programm entwickeln, das anhand von Abgrenzungen auf einem Selektionsbild
Daten liest. Dazu müssen Sie über folgende Kenntnisse verfügen:
● Eigenschaften von ABAP-Listen und Stärken von Selektionsbildern
● Implementieren von Abgrenzungsmöglichkeiten auf dem Selektionsbild

LERNZIELE DER LEKTION


Am Ende dieser Lektion können Sie:
● die Eigenschaften und Stärken von Selektionsbildern beschreiben
● Abgrenzungsmöglichkeiten über Selektionsbilder implementieren

Eigenschaften von Selektionsbildern

Abbildung 167: Architektur und Zweck von Selektionsbildern

Selektionsbilder dienen der Eingabe von Abgrenzungskriterien für die Datenselektion. Erstellt
das Programm beispielsweise eine Liste aus Daten einer sehr großen Datenbanktabelle, so ist

© Copyright. Alle Rechte vorbehalten. 265


Kapitel 7 : Klassische ABAP-Reports

es sinnvoll, vom Benutzer die tatsächlich gewünschten Datensätze abgrenzen zu lassen und
nur diese von der Datenbank zu lesen. Dies verringert neben dem Speicherbedarf auch die
Netzwerklast.
Technisch gesehen handelt es sich bei Selektionsbildern um Dynpros. Der Entwickler
gestaltet sie jedoch nicht direkt mit dem Screen Painter, sondern sie werden vom System
gemäß den deklarativen Anweisungen im Quelltext generiert.

Eigenschaften von Selektionsbildern

Abbildung 168: Eigenschaften von Selektionsbildern

Standardfunktionen des Selektionsbilds


● Das Selektionsbild besitzt folgende Standardfunktionen:
- Texte in mehreren Sprachen
- Automatische Typprüfung
- Komplexe Selektionen für Intervalle, Vergleichsbedingungen und Muster
- Felddokumentation für Eingabefelder
- Mit dem Dictionary-Typ verknüpfte Suchhilfe
- Sichern von Selektionsbildern als Varianten

Sie können Texte auf dem Selektionsbild in mehreren Sprachen pflegen. Zur Laufzeit werden
stets automatisch die Texte in der Anmeldesprache des Benutzers verwendet. Das System
führt automatisch eine Typprüfung aus. Benutzereingaben, die nicht dem Typ des
Eingabefelds entsprechen, werden vom SAP-GUI nicht akzeptiert und resultieren in einer
Fehlermeldung. So wird z.B. bei der Eingabe von Buchstaben in ein Eingabefeld, das als
numerisch definiert wurde, eine Fehlermeldung ausgegeben. Neben Einzelwerteingaben

266 © Copyright. Alle Rechte vorbehalten.


Lektion: Implementieren von Selektionsbildern

(PARAMETERS) können Sie auch komplexe Abgrenzungen (SELECT-OPTIONS) auf dem


Selektionsbild implementieren. Der Benutzer hat dann die Möglichkeit, Intervalle,
Vergleichsbedingungen oder gar Muster als Abgrenzung anzugeben. Wenn der Entwickler das
Eingabefeld über ein Dictionary-Element (z.B. Datenelement) definiert, kann der Benutzer mit
F1 die Felddokumentation für das Eingabefeld anzeigen. Mit F4 kann der Benutzer die zum
Dictionary-Typ gehörende Suchhilfe aufrufen, um mögliche Eingabewerte anzuzeigen. Der
Benutzer kann ausgefüllte Selektionsbilder als Varianten zur Wiederverwendung oder
Nutzung im Hintergrundbetrieb sichern.

Selektionsoptionen verwenden

Abbildung 169: Selektionsoptionen verwenden

Die Abbildung zeigt die Verwendung sogenannter Selektionsoptionen, über die komplexe
Eingaben möglich sind. Weitere Information zur betreffenden Option erhalten Sie über die
Drucktaste Hilfe zum Bild auf dem Zusatzbild für Mehrfachselektionen.

© Copyright. Alle Rechte vorbehalten. 267


Kapitel 7 : Klassische ABAP-Reports

Semantische Informationen globaler Typen auf dem Selektionsbild

Abbildung 170: Semantische Informationen globaler Typen auf dem Selektionsbild

Semantische Informationen auf dem Selektionsbild


● Ist ein Eingabefeld mit einem Datenelement typisiert, so stehen auf dem Selektionsbild
folgende semantische Informationen zur Verfügung:
- Der lange Feldbezeichner des Datenelements kann als Beschreibung des Eingabefelds
auf dem Selektionsbild (Selektionstext) übernommen werden.
- Die Dokumentation des Datenelements steht automatisch als Eingabehilfe (F1-Hilfe)
zur Verfügung.
- Falls an das Datenelement eine Suchhilfe angekoppelt ist, steht sie als Eingabehilfe (F4-
Hilfe) zur Verfügung.

Wenn Sie ein Eingabefeld mit einem Strukturfeld anstatt mit einem Datenelement typisieren,
stehen auf dem Selektionsbild auch die semantischen Informationen zur Verfügung. Die
semantischen Informationen werden dann dem Datenelement entnommen, das in der
Definition des Strukturfeldes verwendet wird.
Nähere Informationen finden Sie in der Online-Dokumentation zum ABAP Dictionary.

268 © Copyright. Alle Rechte vorbehalten.


Lektion: Implementieren von Selektionsbildern

Selektionstexte

Abbildung 171: Selektionstexte

Auf dem Selektionsbild erscheinen als Default die Namen der Eingabefelder als deren
Beschreibung. Sie haben die Möglichkeit, sie durch entsprechende Selektionstexte zu
ersetzen und diese dann in die benötigten Sprachen zu übersetzen. Zur Laufzeit werden dann
die Selektionstexte in der Anmeldesprache des Benutzers angezeigt (Sprachautomatik).
Selektionstexte eines Programms gehören wie Listüberschriften und Textsymbole zu den
Textelementen des Programms. Sie können vom ABAP Editor aus über den Menüpfad
Springen → Textelemente und die Registerkarte Selektionstexte gepflegt werden. Ihre
Übersetzung kann über den Menüpfad Springen → Übersetzung durchgeführt werden.
Wenn Sie das Eingabefeld direkt oder indirekt mit einem Datenelement typisieren, können Sie
den langen Feldbezeichner des Datenelements als Selektionstext übernehmen (Dictionary-
Bezug). Damit haben Sie die Möglichkeit, auf einfache Weise selektionsbildübergreifend eine
Einheitlichkeit der Texte zu realisieren.

© Copyright. Alle Rechte vorbehalten. 269


Kapitel 7 : Klassische ABAP-Reports

Einzelwerteingabe

Abbildung 172: Einzelwerteingabe (PARAMETERS-Anweisung)

Eine Eingabevariable wird mit einer PARAMETERS-Anweisung anstatt mit einer DATA-
Anweisung definiert. Die Abbildung veranschaulicht die Nutzung sowie das Laufzeitverhalten
einer über die PARAMETERS-Anweisung definierten Eingabevariablen. Die Definition einer
solchen Eingabevariablen legt programmintern eine Variable an und erzeugt ein
Selektionsbild mit entsprechender Eingabemöglichkeit.

Überlegungen bei der Definition von Eingabevariablen


● Folgende Aspekte gilt es zu berücksichtigen:
- Der Name einer Eingabevariablen darf maximal 8 Zeichen lang sein.
- Eine Typisierung der Eingabevariablen mit den Standardtypen F, STRING und XSTRING
ist nicht erlaubt.
- Eine Wertvorbelegung wird nicht über den VALUE-, sondern über den DEFAULT-Zusatz
realisiert.

Das System zeigt über den DEFAULT-Zusatz einen Standardwert an, der überschrieben
werden kann.
Wenn der Benutzer einen Wert eingibt und Ausführen wählt, wird der Eingabewert in die
programminterne Variable übertragen und kann beispielsweise zur Abgrenzung der
Datenbankselektion verwendet werden.

270 © Copyright. Alle Rechte vorbehalten.


Lektion: Implementieren von Selektionsbildern

Komplexe Abgrenzungen

Abbildung 173: Komplexe Abgrenzungen (SELECT-OPTIONS-Anweisung)

Mit der Anweisung SELECT-OPTIONS <Name> FOR <Datenobjekt> können Sie eine
Selektionsoption für die Eingabe komplexer Abgrenzungen definieren, wobei <Name> der
Name der Selektionsoption und <Datenobjekt> eine bereits definierte Variable ist. Eine solche
Definition legt programmintern eine interne Tabelle vom angegebenen Namen an (so_car)
und erzeugt ein Selektionsbild mit einer Eingabemöglichkeit für die Abgrenzung der
angegebenen Variablen (gs_spfli-carrid).
Wenn der Benutzer Ausführen wählt, transportiert das System die Benutzereingaben in die
automatisch erzeugte interne Tabelle. Diese interne Tabelle umfasst vier Spalten: sign,
option, low und high.

Angelegte Einträge je nach Benutzereingabe


● Die Abbildung Komplexe Abgrenzungen (SELECT-OPTIONS-Anweisung) zeigt die
folgenden Einträge je nach Benutzereingabe:
- Bei Eingabe des Einzelwertes LH wird eine Zeile mit den Werten I (inklusiv), EQ (equal),
LH und Space erzeugt.
- Bei Eingabe des Intervalls AA bis DL wird eine Zeile mit den Werten I (inklusiv), BT
(between), AA und DL erzeugt.
- Bei Eingabe des auszuschließenden Einzelwertes BA wird eine Zeile mit den Werten E
(exklusiv), EQ (equal), BA und Space erzeugt.

Die mit den eingegebenen Selektionsbedingungen gefüllte interne Tabelle kann, wie in der
Abbildung gezeigt, zur Abgrenzung der Datenbankselektion verwendet werden.

© Copyright. Alle Rechte vorbehalten. 271


Kapitel 7 : Klassische ABAP-Reports

Tabelleninhalt

Interpretation des Tabelleninhalts


● Dabei wird der Tabelleninhalt wie folgt interpretiert:
- Sind I_1, ... , I_n und E_1, ... , E_m die Inklusiv- bzw. Exklusiv-Bedingungen der internen
Tabelle, so wird folgende zusammengesetzte Bedingung als Abgrenzung bei der
Datenselektion benutzt: ( I_1 OR ... OR I_n ) AND ( NOT E_1 ) AND ... AND ( NOT E_m ).
- Bei leerer Tabelle ist aufgrund fehlender Abgrenzungen die für das betreffende Feld
angegebene WHERE-Bedingung wahr.

Hinweis:
Der IN-Operator kann auch in logischen Ausdrücken verwendet werden,
z.B. folgendermaßen: IF GS_SPFLI-CARRID IN SO_CAR.

Für die Definition von Select-Optionen gelten dieselben drei Besonderheiten wie bei der
PARAMETERS-Anweisung.
Wenn das Programm die interne Tabelle der Selektionsoption per DEFAULT-Zusatz oder
APPEND-Anweisung vor Anzeige des Selektionsbildes (INITIALIZATION) füllt, wird ihr Inhalt
als überschreibbare Vorschlagsbedingungen auf dem Selektionsbild angezeigt.
Weitere Details entnehmen Sie bitte der Schlüsselwort-Dokumentation zu SELECT-OPTIONS.

ZUSAMMENFASSUNG DER LEKTION


Nun können Sie
● die Eigenschaften und Stärken von Selektionsbildern beschreiben
● Abgrenzungsmöglichkeiten über Selektionsbilder implementieren

272 © Copyright. Alle Rechte vorbehalten.


Kapitel 7
Lektion 3
Implementieren von Ereignissen in ABAP-
Reports

ÜBERBLICK ÜBER DIE LEKTION


Diese Lektion erläutert die Implementierung von ABAP-Reports.

Unternehmensszenario
Sie möchten ein Programm entwickeln, das die Implementierung von ABAP-Reports
demonstriert. Dazu müssen Sie über folgende Kenntnisse verfügen:
● Implementieren von Ereignissen in ABAP-Reports

LERNZIELE DER LEKTION


Am Ende dieser Lektion können Sie:
● Ereignisse in ABAP-Reports implementieren

ABAP-Ereignisse

Abbildung 174: Struktur und Ereignisprozeduren eines ausführbaren ABAP-Programms

© Copyright. Alle Rechte vorbehalten. 273


Kapitel 7 : Klassische ABAP-Reports

Notiz:

Das Ereignis LOAD-OF-PROGRAM sollte aus folgenden Gründen nicht in


ausführbaren Programmen verwendet werden:
● LOAD-OF-PROGRAM, das seit Release 4.6 parallel zu INITIALIZATION existiert,
ist in erster Linie für die Verwendung in Funktionsgruppen und Modul-Pools
gedacht, die vor Release 4.6 nicht über eine Startaktion verfügten.
● INITIALIZATION wird weiterhin für ausführbare Programme verwendet, um die
dynamischen Standardeinstellungen für das Selektionsbild festzulegen.
Weitere Informationen hierzu liefert die Dokumentation zu den
entsprechenden Ereignissen.

Wenn Sie ein ABAP-Programm starten, legt das System zunächst alle globalen Datenobjekte
des Programms im Arbeitsspeicher an. Dann löst das Laufzeitsystem verschiedene
Ereignisse nacheinander aus. Existiert zu einem ausgelösten Ereignis ein Verarbeitungsblock
im Programm, so führt das System die Anweisungen dieses Blocks sequenziell aus.
Die Abbildung Struktur und Ereignisprozeduren eines ausführbaren ABAP-Programms zeigt,
welche grundlegenden Ereignisse in welcher Reihenfolge nacheinander ausgelöst werden und
wie das Programm die entsprechenden Verarbeitungsblöcke implementiert. Ein ABAP-
Programm ist also eine Sammlung von Verarbeitungsblöcken, die zu den jeweiligen
Ereignissen abgearbeitet werden.
Über WRITE-Anweisungen realisierte Ausgaben werden im sogenannten Listenpuffer
gehalten und erst nach Abarbeitung des START-OF-SELECTION-Blocks als Liste angezeigt.

Verwendung von ABAP-Ereignissen

Abbildung 175: Verwendung von ABAP-Ereignissen

274 © Copyright. Alle Rechte vorbehalten.


Lektion: Implementieren von Ereignissen in ABAP-Reports

Wenn Sie im INITIALIZATION-Block den PARAMETERS-Variablen Werte zuweisen, zeigt das


System diese Werte bei der anschließenden Selektionsbildanzeige in den entsprechenden
Eingabefeldern als änderbare Vorschlagswerte an. Zwar haben Sie die Möglichkeit, bereits in
der PARAMETERS-Definition über den DEFAULT-Zusatz einen Vorschlagswert für das
entsprechende Eingabefeld festzulegen. Mit der beschriebenen Wertzuweisung im
INITIALIZATION-Block jedoch können Sie dynamisch (d.h. situationsbezogen) jeweils einen
anderen Vorschlagswert realisieren (dynamische Vorbelegung des Selektionsbilds).
Betätigt der Benutzer auf dem Selektionsbild eine Drucktaste (und löst damit Process After
Input [PAI] aus), so transportiert das System die Eingaben des Benutzers in die
entsprechenden programminternen PARAMETERS-Variablen und löst das AT SELECTION-
SCREEN-Ereignis aus. Der zugehörige Verarbeitungsblock eignet sich deshalb für eine
Eingabe- bzw. Berechtigungsprüfung. Wird in diesem Ereignisblock z.B. eine Nachricht vom
Typ E gesendet, weil der Benutzer nicht über die erforderliche Berechtigung verfügt, dann
wird das Selektionsbild mit der Fehlermeldung erneut angezeigt, und der Benutzer kann seine
Eingaben korrigieren.
Nur wenn im AT SELECTION-SCREEN-Block keine Fehlermeldung gesendet wird, wird
anschließend der START-OF-SELECTION-Block ausgeführt.
Im zugehörigen Verarbeitungsblock sollte dann die Hauptverarbeitung des Programms
stattfinden.

Eigenschaften von Ereignisblöcken

Eigenschaften von Ereignisblöcken

● eingeleitet durch Ereignisschlüsselwort


● beendet durch Beginn des nächsten Verarbeitungsblocks
● nicht ineinander schachtelbar
● Existenz nicht zwingend erforderlich
● Reihenfolge der Ereignisblöcke unerheblich
● impliziter Standard-Ereignisblock im ausführbaren Programm: START-OF-SELECTION

Verarbeitungsblöcke sind nicht schachtelbar, da eine Schachtelung dem Konzept der ABAP-
Ereignisse widersprechen würde.
Bei fehlendem Verarbeitungsblock werden keine Anweisungen zum Ereignis ausgeführt, und
das nächste Ereignis wird ausgelöst.
Sind im Programm keine Blöcke realisiert, so ordnet das System alle Anweisungen dem
Standard-Verarbeitungsblock START-OF-SELECTION zu.

© Copyright. Alle Rechte vorbehalten. 275


Kapitel 7 : Klassische ABAP-Reports

Abbildung 176: Reihenfolge von Ereignisblöcken

Das Auslösen der Ereignisse und die Ausführung der Verarbeitungsblöcke werden vom ABAP-
Laufzeitsystem gesteuert. Die Reihenfolge, in der Sie die Ereignisblöcke im Programm
platzieren, ist unerheblich.

Das Ereignis INITIALIZATION

Abbildung 177: Beispielprogramm

Das hier gezeigte Beispiel enthält ein Selektionsbild mit einem Eingabefeld für ein Datum. Als
Vorschlagswert soll im Normalfall das aktuelle Tagesdatum erscheinen (DEFAULT sy-datum).
Unter bestimmten Voraussetzungen (IF) jedoch soll das Datum des gleichen Wochentages
der Folgewoche (pa_date = pa_date + 7.) als Vorschlagswert angezeigt werden.

276 © Copyright. Alle Rechte vorbehalten.


Lektion: Implementieren von Ereignissen in ABAP-Reports

Die Abbildung zeigt auch, wie das Laufzeitsystem bei fehlendem Verarbeitungsblock reagiert:
Zum entsprechenden Ereignis werden keine Anweisungen ausgeführt, und das nächste
Ereignis wird ausgelöst.

Ereignis AT SELECTION-SCREEN

Abbildung 178: Ereignis AT SELECTION-SCREEN

Auf dem Selektionsbild wird sowohl über die Eingabetaste als auch über die Drucktaste
Ausführen (F8) das Ereignis AT SELECTION-SCREEN ausgelöst. Nach Abarbeitung des
zugehörigen Verarbeitungsblocks werden, falls der Benutzer die Drucktaste Ausführen wählt,
das nachfolgende Ereignis START-OF-SELECTION ausgelöst und die zugehörige Verarbeitung
angestoßen.
Wenn der Benutzer jedoch Enter wählt, zeigt das System erneut das Selektionsbild an.

© Copyright. Alle Rechte vorbehalten. 277


Kapitel 7 : Klassische ABAP-Reports

Fehlermeldungen innerhalb AT SELECTION-SCREEN

Abbildung 179: Fehlermeldungen innerhalb AT SELECTION-SCREEN

Unmittelbar vor Abarbeitung des AT SELECTION-SCREEN-Blocks überträgt das System die


Benutzereingaben in die entsprechenden programminternen Variablen. Daher ist es sinnvoll,
in diesem Verarbeitungsblock gewünschte Eingabe- bzw. Berechtigungsprüfungen zu
implementieren. Bei negativem Prüfungsergebnis können Sie einfach über die Versendung
einer Fehlermeldung dem Benutzer das Selektionsbild mit dem entsprechenden
Meldungstext erneut anzeigen lassen. Der Benutzer hat dann direkt die Möglichkeit, neue
Eingaben zu tätigen.
Dahingegen führt die Ausführung einer Fehlermeldung im Ereignis START-OF-SELECTION
zum Programmabbruch.

278 © Copyright. Alle Rechte vorbehalten.


Lektion: Implementieren von Ereignissen in ABAP-Reports

Syntaxbeispiel: Berechtigungsprüfung mit Fehlerdialog

Abbildung 180: Syntaxbeispiel: Berechtigungsprüfung mit Fehlerdialog

Die Abbildung zeigt ein einfaches Beispielprogramm mit Berechtigungsprüfung und


Fehlerdialog auf dem Selektionsbild.
Weitere Informationen entnehmen Sie der Schlüsselwortdokumentation zum
Zeitpunktschlüsselwort AT SELECTION-SCREEN.

ZUSAMMENFASSUNG DER LEKTION


Nun können Sie
● Ereignisse in ABAP-Reports implementieren

© Copyright. Alle Rechte vorbehalten. 279


Kapitel 7 : Klassische ABAP-Reports

280 © Copyright. Alle Rechte vorbehalten.


Kapitel 7

Überprüfung des Lernerfolgs

1. Welche der folgenden Elemente können Sie verwenden, um die Standard-Listenoberfläche


an Ihre Anforderungen anzupassen?
Wählen Sie die richtige Antwort.

X A WRITE-Anweisung

X B Menu Painter

X C Funktion „Muster“

2. Welche der folgenden Standardfunktionen stehen auf dem Selektionsbild zur Verfügung?
Wählen Sie die richtigen Antworten.

X A Singularfähigkeit

X B Typprüfung

X C Varianten

X D Werteingabe

3. Mit welcher der folgenden Anweisungen wird eine Eingabevariable definiert?


Wählen Sie die richtige Antwort.

X A DATA

X B VALUE

X C PARAMETERS

X D DEFAULT

© Copyright. Alle Rechte vorbehalten. 281


Kapitel 7 : Überprüfung des Lernerfolgs

4. Welche der folgenden Aussagen beschreiben einen Ereignisblock?


Wählen Sie die richtigen Antworten.

X A beendet durch Beginn des nächsten Verarbeitungsblocks

X B kann geschachtelt werden

X C Existenz nicht zwingend erforderlich

X D Reihenfolge der Ereignisblöcke wichtig

282 © Copyright. Alle Rechte vorbehalten.


Kapitel 7

Überprüfung des Lernerfolgs - Antworten

1. Welche der folgenden Elemente können Sie verwenden, um die Standard-Listenoberfläche


an Ihre Anforderungen anzupassen?
Wählen Sie die richtige Antwort.

X A WRITE-Anweisung

X B Menu Painter

X C Funktion „Muster“

Das ist richtig. Die Standard-Listenoberfläche kann mithilfe des Menu Painter an Ihre
Anforderungen angepasst werden. Weitere Informationen erhalten Sie in der Lektion
„Implementierung von ABAP-Listen“ im Abschnitt „Standard-Listenfunktionen“ im Kurs
BC400 (Kapitel 7, Lektion 1) oder TAW10 Teil I (Kapitel 13, Lektion 1).

2. Welche der folgenden Standardfunktionen stehen auf dem Selektionsbild zur Verfügung?
Wählen Sie die richtigen Antworten.

X A Singularfähigkeit

X B Typprüfung

X C Varianten

X D Werteingabe

Das ist richtig. Das Selektionsbild besitzt folgende Standardfunktionen: Texte in mehreren
Sprachen; automatische Typprüfung; komplexe Auswahlmöglichkeiten für Intervalle,
Vergleichsbedingungen und Muster; Felddokumentation für Eingabefelder; Suchhilfe in
Verbindung mit der Dictionary-Art; Sichern von Selektionsbildern als Varianten. Weitere
Informationen finden Sie in der Lektion „Implementierung von Selektionsbildern“ im
Abschnitt „Standardfunktionen des Selektionsbilds“ im Kurs BC400 (Kapitel 7, Lektion 2)
oder TAW10 Teil I (Kapitel 13, Lektion 2).

© Copyright. Alle Rechte vorbehalten. 283


Kapitel 7 : Überprüfung des Lernerfolgs - Antworten

3. Mit welcher der folgenden Anweisungen wird eine Eingabevariable definiert?


Wählen Sie die richtige Antwort.

X A DATA

X B VALUE

X C PARAMETERS

X D DEFAULT

Das ist richtig. Eine Eingabevariable wird mit einer PARAMETERS-Anweisung anstatt mit
einer DATA-Anweisung definiert. Die Definition einer solchen Eingabevariablen legt
programmintern eine Variable an und erzeugt ein Selektionsbild mit entsprechender
Eingabemöglichkeit. Weitere Informationen erhalten Sie in der Lektion „Implementierung
von Selektionsbildern“ im Abschnitt „Einzelwerteingabe“ im Kurs BC400 (Kapitel 7,
Lektion 2) oder TAW10 Teil I (Kapitel 13, Lektion 2).

4. Welche der folgenden Aussagen beschreiben einen Ereignisblock?


Wählen Sie die richtigen Antworten.

X A beendet durch Beginn des nächsten Verarbeitungsblocks

X B kann geschachtelt werden

X C Existenz nicht zwingend erforderlich

X D Reihenfolge der Ereignisblöcke wichtig

Das ist richtig. Merkmale eines Ereignisblocks sind: Eingeleitet durch ein
Ereignisschlüsselwort. Er endet mit dem Beginn des nächsten Verarbeitungsblocks, kann
nicht geschachtelt werden, Vorhandensein ist nicht unbedingt erforderlich, die
Reihenfolge von Ereignisblöcken spielt keine Rolle. Weitere Informationen erhalten Sie in
der Lektion „Implementierung von Ereignissen von ABAP-Reports“ im Abschnitt
„Eigenschaften von Ereignisblöcken“ im Kurs BC400 (Kapitel 7, Lektion 3) oder TAW10
Teil I (Kapitel 13, Lektion 3).

284 © Copyright. Alle Rechte vorbehalten.


KAPITEL 8 Dynpros

Lektion 1
Anlegen von Dynpros 287

Lektion 2
Anlegen von Ein- und Ausgabefeldern 307

Lektion 3
Implementieren des Datentransports 311

LERNZIELE

● Dynpros anlegen und die Bildsteuerung verstehen


● Ein- und Ausgabefelder auf Dynpros anlegen
● Den Datentransport auf Dynpros implementieren

© Copyright. Alle Rechte vorbehalten. 285


Kapitel 8 : Dynpros

286 © Copyright. Alle Rechte vorbehalten.


Kapitel 8
Lektion 1
Anlegen von Dynpros

ÜBERBLICK ÜBER DIE LEKTION


In dieser Lektion wird die Gestaltung und Programmierung einfacher Dynpros mit Ein- und
Ausgabefeldern und Drucktasten erläutert.

Unternehmensszenario
Sie möchten ein Programm entwickeln, bei dem auf Dynpros zunächst Daten erfasst und
dann Daten ausgegeben werden. Ferner möchten Sie auf den Dynpros Drucktasten anlegen,
mit denen der Benutzer die entsprechenden Funktionen des Programms aufrufen kann. Dazu
müssen Sie über folgende Kenntnisse verfügen:
● Eigenschaften und Vorteile von Dynpros
● Implementierung einfacher Dynpros mit Ein- und Ausgabefeldern und Verknüpfung von
Dynpros mit einer Dialoganwendung
● Konzept und Implementierung der programminternen Verarbeitung bei Dynpro-Aufrufen

LERNZIELE DER LEKTION


Am Ende dieser Lektion können Sie:
● Dynpros anlegen und die Bildsteuerung verstehen

© Copyright. Alle Rechte vorbehalten. 287


Kapitel 8 : Dynpros

ABAP-Dynpros

Abbildung 181: Eigenschaften von Dynpros

Ein Dynpro umfasst nicht nur das Layout mit Ein-/Ausgabefeldern, Drucktasten und anderen
Bildschirmelementen, sondern auch eine Verarbeitungslogik (Quelltextabschnitte, die als Vor-
oder Nachbereitung der Dynpro-Anzeige abgearbeitet werden).
Durch die Integration des ABAP Dictionary in das SAP-System werden für Dynpro-
Eingabefelder automatische Konsistenzprüfungen zur Verfügung gestellt. Dazu gehören
Typprüfungen, Fremdschlüsselprüfungen und Festwertprüfungen. Für diese Prüfungen
werden automatisch Informationen aus dem ABAP Dictionary herangezogen.
Andere programmspezifische Prüfungen ergänzen die oben beschriebenen Prüfungen. Für
Dynpros sind Techniken verfügbar, mit denen Sie die Reihenfolge, in der Prüfungen
durchgeführt werden, steuern und die Felder – falls Fehler auftreten – wieder eingabebereit
machen können.
Das Layout von Dynpros kann sehr flexibel gestaltet werden. Ein Dynpro-Layout kann
Eingabefelder, Ausgabefelder, Auswahlknöpfe, Ankreuzfelder und Drucktasten enthalten.
Für das Dynpro stehen dieselben Aufbereitungsoptionen zur Verfügung wie für die Liste und
das Selektionsbild. Das System formatiert Festpunktzahlen und Datumsangaben gemäß den
im Benutzerstamm festgelegten Einstellungen. Die Zeit wird nach HH:MM:SS aufbereitet.
Beträge werden nach dem Inhalt des Währungsfelds und physikalische Größen (Längen,
Gewichte usw.) nach dem Inhalt eines Einheitenfelds formatiert.

288 © Copyright. Alle Rechte vorbehalten.


Lektion: Anlegen von Dynpros

Dynpro-Folge

Abbildung 182: Dynpro-Folge

Start einer Dynpro-Folge


● Sie haben folgende Möglichkeiten, eine Dynpro-Folge zu starten:
- Sie rufen aus einem Verarbeitungsblock Ihres Programms das erste Dynpro auf
(Anweisung CALL SCREEN).
- Sie legen eine Transaktion an, die auf das Programm und das erste Dynpro verweist
(Dialogtransaktion).

Nach Verarbeitung eines Dynpros wird die statisch oder dynamisch definierte Dynpro-Folge
verarbeitet. Das symbolische Folge-Dynpro 0 lässt die Verarbeitung zur Aufrufstelle zurück
verzweigen bzw. beendet die Dialogtransaktion.

© Copyright. Alle Rechte vorbehalten. 289


Kapitel 8 : Dynpros

Dynpros und Programmtypen

Abbildung 183: Dynpros und Programmtypen

Dynpros und Programmtypen


Die folgenden Programmtypen können Dynpros enthalten:
● Ausführbares Programm (Report)
Dynpros werden in ausführbaren Programmen eingesetzt, um entweder zusätzlich zur
Listausgabe Daten anzuzeigen oder um die Listausgabe komplett zu ersetzen. Außerdem
besteht die Möglichkeit, Dynpros für das Erfassen und Ändern von Daten auf der Liste
einzusetzen. Aus Gründen der Wiederverwendbarkeit und der Datenkapselung empfiehlt
SAP jedoch, Dynpros aus Funktionsgruppen zu verwenden und nicht direkt in den Reports
anzulegen.
● Funktionsgruppe
Dynpros in Funktionsgruppen lassen sich zum einen über Dialogtransaktionen
ansprechen. Zum anderen besteht die Möglichkeit, solche Dynpros über die Anweisung
CALL SCREEN aus dem Quelltext eines Funktionsbausteins heraus zu starten. Aus
Gründen der Wiederverwendbarkeit empfiehlt SAP, dass Sie Dynpros und Dynpro-Folgen
in Funktionsgruppen anlegen.
● Modul-Pool
Dynpros in Modulpools lassen sich nur über Dialogtransaktionen ansprechen. Anders als
Dynpros in Funktionsgruppen können Dynpros in Modulpools weder gekapselt noch mit
einer sauberen Schnittstelle nach außen versehen werden.
Aus diesem Grund empfiehlt SAP, dass Sie Funktionsgruppen verwenden, anstatt neue
Modulpools anzulegen – selbst wenn Sie momentan nicht planen, das Dynpro über
Funktionsbausteine anzusprechen.

290 © Copyright. Alle Rechte vorbehalten.


Lektion: Anlegen von Dynpros

Komponenten eines Dynpros

Abbildung 184: Komponenten eines Dynpros

Komponenten eines Dynpros


Ein Dynpro verfügt über folgende Komponenten:
● Eigenschaften (Attribute)
Zu den Eigenschaften gehören z.B. eine vierstellige Nummer als Dynpro-Bezeichnung, ein
Kurztext und Informationen über den Dynpro-Typ (z.B. Normal für Verwendung der vollen
Bildschirmgröße) sowie über das Default-Folge-Dynpro.
● Layout
Layouts können Ein- und Ausgabefelder, Texte, Drucktasten und andere Elemente
enthalten, die Sie auf dem Dynpro platzieren möchten. Solche Elemente heißen
Bildschirm- oder Dynpro-Elemente.
● Elementliste
Die Elementliste eines Dynpros enthält alle Dynpro-Elemente sowie deren Eigenschaften
wie Position, Größe, Datentyp usw.
● Ablauflogik
Die Ablauflogik eines Dynpros besteht aus PBO (Process Before Output) und PAI (Process
After Input). PBO enthält Verweise auf Verarbeitungsblöcke (PBO-Module), die als
Vorbereitung der Dynpro-Anzeige (z.B. Datenselektion) abgearbeitet werden, bevor das
Dynpro gesendet wird. PAI enthält Verweise auf Verarbeitungsblöcke (PAI-Module), die als
Reaktion auf Benutzereingaben und -aktionen (z.B. Daten sichern) abgearbeitet werden.

© Copyright. Alle Rechte vorbehalten. 291


Kapitel 8 : Dynpros

Grafischer Layout-Editor

Abbildung 185: Grafischer Layout-Editor

Mit dem grafischen Layout-Editor können Sie den Aufbau des Dynpros gestalten
(Werkzeugleiste).

Grafischer Layout-Editor
Außerdem können Sie mit den in der Abbildung dargestellten Drucktasten die folgenden
Pflegefunktionen ausführen:
● Elementeigenschaften pflegen
Mit dieser Funktion können Sie alle Eigenschaften für das ausgewählte Dynpro-Element in
einem separaten Dialogfenster anzeigen und bearbeiten.
● Dictionary- oder Programmfelder holen
Mit dieser Funktion können Sie Dynpro-Felder mit Bezug auf Dictionary-Felder oder auf
programmintern definierte Felder anlegen.
● Elementliste anzeigen
Mit dieser Funktion können Sie alle verfügbaren Dynpro-Elemente sowie deren Attribute
anzeigen und pflegen.

292 © Copyright. Alle Rechte vorbehalten.


Lektion: Anlegen von Dynpros

Anwendungsbeispiel

Abbildung 186: Anwendungsbeispiel

Sie möchten in mehreren Stufen ein Programm entwickeln, mit dem die Daten zu einer
einzelnen Flugverbindung angezeigt werden können.
Das Programm besteht aus einer Folge von zwei Dynpros. Auf dem ersten Dynpro wählt der
Benutzer eine Flugverbindung. Auf dem zweiten Dynpro werden die Details zu dieser
Verbindung angezeigt.
Eine Dialogtransaktion startet die Dynpro-Folge. Betätigt der Benutzer auf dem ersten Dynpro
die Drucktaste Weiter, werden die Eingaben verarbeitet, die Daten von der Datenbank gelesen
und auf das zweite Dynpro navigiert.
Auf dem zweiten Dynpro werden die Daten zur Flugverbindung angezeigt. Betätigt der
Benutzer die Drucktaste Zurück, so gelangt er auf das erste Dynpro zurück und kann eine
andere Flugverbindung auswählen.
Wählt der Anwender Beenden, verlässt das Programm die Dynpro-Folge. In diesem Fall bricht
das Programm die Dialogtransaktion ab.

© Copyright. Alle Rechte vorbehalten. 293


Kapitel 8 : Dynpros

Erstellen von ABAP-Dynpros und Navigation

Abbildung 187: Implementierungsstufe 1: Dynpros mit Drucktasten und Navigation erstellen

Sie starten die Entwicklung Ihres Programms, indem Sie zwei Dynpros anlegen, auf denen
sich Drucktasten befinden. Die Drucktasten sollen dem Benutzer die Möglichkeit bieten, zum
jeweils anderen Dynpro zu navigieren oder die Dynpro-Folge zu beenden. Sie legen eine
Dialogtransaktion an, um die Dynpro-Folge zu starten.

Implementierungsstufe 1: Dynpros mit Drucktasten und Navigation erstellen

● Um diese Aufgaben erfüllen zu können, müssen Sie die folgenden Konzepte verstehen:
- Anlegen von Dynpros
- Ablauflogik eines Dynpros mit den Ereignisblöcken PBO und PAI
- PBO- und PAI-Module als Verarbeitungsblöcke der entsprechenden Ereignisse
- Implementierung von Drucktasten und Auswerten von Benutzeraktionen
- Anlegen von Dialogtransaktionen

294 © Copyright. Alle Rechte vorbehalten.


Lektion: Anlegen von Dynpros

Anlegen eines Dynpros

Abbildung 188: Anlegen eines Dynpros

Anlegen von Dynpros


● Sie haben folgende Möglichkeiten, ein Dynpro anzulegen:
- Im Object Navigator
Legen Sie auf der Objektliste im Navigationsbereich über das Kontextmenü zu Ihrem
Programm ein neues Programmobjekt (Dynpro) an (siehe Abbildung).
- Per Vorwärtsnavigation vom ABAP Editor aus
Aus dem ABAP Editor heraus legen Sie ein Dynpro über Doppelklick auf die Dynpro-
Nummer an (in der Anweisung CALL SCREEN nnnn). Das System öffnet den Screen
Painter zur Pflege des neuen Dynpros.

Bei der Dynpro-Erstellung werden Sie vom System zunächst zur Pflege der Dynpro-
Eigenschaften geführt. Hier geben Sie einen Kurztext ein, wählen dann als Dynpro-Typ Normal
und geben die Nummer des Folge-Dynpros an.
Die Angabe des Folge-Dynpros 0 bewirkt, dass nach kompletter Abarbeitung des Dynpros die
Verarbeitung unmittelbar hinter der Dynpro-Aufrufstelle fortgesetzt wird.

Achtung:
Da null (0) der Initialwert des Feldes ist, wird die Anzeige dieses Werts bei
späterer Auflistung der Dynpro-Attribute unterdrückt.

© Copyright. Alle Rechte vorbehalten. 295


Kapitel 8 : Dynpros

Ablauf bei Betätigung einer Drucktaste

Abbildung 189: Ablauf bei Betätigung einer Drucktaste

Betätigt der Anwender eine Drucktaste, so überträgt das Laufzeitsystem den dieser
Drucktaste zugeordneten Funktionscode in ein spezielles Dynpro-Feld vom Typ OK.
Üblicherweise wird dieses Dynpro-Feld OK_CODE genannt.
Der Inhalt dieses speziellen Dynpro-Feldes wird dann bei Vorhandensein eines
namensgleichen programminternen Datenobjekts automatisch dorthin transportiert.
Anschließend löst das System die PAI-Abarbeitung aus. Darin wird die Benutzeraktion
verarbeitet, indem der Funktionscode an das Programm übergeben und die entsprechende
Verarbeitung durchgeführt wird.

296 © Copyright. Alle Rechte vorbehalten.


Lektion: Anlegen von Dynpros

Definition von Drucktasten und Zuordnung von Funktionscodes

Abbildung 190: Definition von Drucktasten und Zuordnung von Funktionscodes

Die Abbildung zeigt, wie Sie im grafischen Screen Painter Drucktasten definieren. Um jeder
Drucktaste einen Namen und einen Funktionscode zuzuordnen, müssen Sie die Feldattribute
pflegen.

© Copyright. Alle Rechte vorbehalten. 297


Kapitel 8 : Dynpros

Implementierung des Funktionscode-Transports

Abbildung 191: Implementierung des Funktionscode-Transports

Das Befehlsfeld ist das spezielle Dynpro-Feld, über das der jeweilige Funktionscode zum
Programm transportiert wird. Das Befehlsfeld ist standardmäßig auf dem Dynpro vorhanden.
Um das Befehlsfeld nutzen zu können, müssen Sie es mit einem Namen versehen.
Üblicherweise wird als Name OK_CODE verwendet.
Deklarieren Sie dann ein programminternes Datenobjekt mit demselben Namen wie das
Befehlsfeld. Verwenden Sie für die Typisierung das Systemfeld SY-UCOMM, wie in der
Abbildung gezeigt.

298 © Copyright. Alle Rechte vorbehalten.


Lektion: Anlegen von Dynpros

Laufzeitarchitektur der Dynpro-Ablaufsteuerung

Abbildung 192: Laufzeitarchitektur der Dynpro-Ablaufsteuerung

Starten Sie mit einer Dialogtransaktion die Dynpro-Verarbeitung.

Dynpro-Verarbeitung

● Die Dynpro-Verarbeitung umfasst folgende Schritte:

1. PBO-Abarbeitung

2. Feldtransport vom Programm zum Dynpro

3. Dynpro-Anzeige

4. Feldtransport vom Dynpro zum Programm

5. PAI-Abarbeitung

1. PBO-Abarbeitung
Als Vorbereitung für die Dynpro-Anzeige werden die im PBO-Block genannten PBO-
Module in Auflistungsreihenfolge nacheinander abgearbeitet.

2. Feldtransport vom Programm zum Dynpro


Nach PBO-Abarbeitung werden die anzuzeigenden Daten in die Dynpro-Felder
transportiert.

3. Dynpro-Anzeige
Das mit Werten belegte Dynpro wird zum Präsentationsserver (SAP GUI) gesendet und
dem Benutzer angezeigt.

© Copyright. Alle Rechte vorbehalten. 299


Kapitel 8 : Dynpros

4. Feldtransport vom Dynpro zum Programm


Jede Benutzeraktion auf dem Dynpro stößt den Transport der Dynpro-Feldinhalte zurück
ins Programm an.

5. PAI-Abarbeitung
Als Reaktion auf die Benutzeraktion werden die in PAI aufgelisteten Module nacheinander
abgearbeitet.

Module sind Quelltextblöcke ohne Schnittstelle. Ein Modul wird durch die ABAP-Anweisungen
MODULE und ENDMODULE eingefasst. Implementieren Sie für jede Teilfunktion im PBO bzw.
PAI ein entsprechendes Modul.

Achtung:
Die Ablauflogik des Dynpros (PBO oder PAI) enthält Verweise auf Module, die im
Programm implementiert sind und aus ABAP-Anweisungen bestehen. Sie dürfen
den ABAP-Quellcode nicht direkt in der Ablauflogik eingeben.

Auswertung des Funktionscodes im Rahmen des PAI

Abbildung 193: Auswertung des Funktionscodes im Rahmen des PAI

Die Abbildung zeigt die Reaktion des Programms auf die Benutzeraktion. Das System wertet
den entsprechenden, unmittelbar vor PAI-Abarbeitung ins OK_CODE-Feld übertragenen
Funktionscode aus.
Üblicherweise wird das Modul mit der Hauptverarbeitung im PAI USER_COMMAND_nnnn
genannt, wobei nnnn für die Dynpro-Nummer steht.

300 © Copyright. Alle Rechte vorbehalten.


Lektion: Anlegen von Dynpros

Hinweis:
In einem Modul können Sie auf alle globalen Datenobjekte des Programms
zugreifen. Variablen, die Sie innerhalb eines Moduls definieren, sind stets global.

Anlegen von Modulen mit Vorwärtsnavigation

Abbildung 194: Anlegen von Modulen mit Vorwärtsnavigation

Anlegen von Modulen


● Sie können Module auf folgende Weisen anlegen:
- Per Vorwärtsnavigation von der Ablauflogik aus
Wählen Sie zum Anlegen eines Moduls den entsprechenden Modulverweis per
Doppelklick aus, wie in der Abbildung gezeigt.
- Über den Navigationsbereich des Object Navigators
Zum Anlegen eines Moduls aus der Objektliste im Navigationsbereich verwenden Sie
das Kontextmenü des Programms. Nehmen Sie einen entsprechenden Verweis auf das
neu angelegte Modul in die Ablauflogik Ihres Dynpros auf.

Ein Modul kann zur Laufzeit aus der Ablauflogik verschiedener Dynpros heraus gerufen
werden (Wiederverwendbarkeit).

© Copyright. Alle Rechte vorbehalten. 301


Kapitel 8 : Dynpros

Notiz:
Bei Modulen, die mit MODULE ... OUTPUT beginnen, handelt es sich um PBO-
Module, die nur vom PBO eines Dynpros aus aufgerufen werden können. Analog
können PAI-Module, die mit MODULE ... INPUT beginnen, nur vom PAI aus
aufgerufen werden.

Folge-Dynpro selbes Dynpro (Wirkung)

Abbildung 195: Folge-Dynpro selbes Dynpro (Wirkung)

Wenn Sie einem Dynpro seine eigene Bildnummer als Folge-Dynpro zuordnen, wird es nach
seiner Beendigung erneut verarbeitet.

302 © Copyright. Alle Rechte vorbehalten.


Lektion: Anlegen von Dynpros

Folge-Dynpro 0 (Wirkung)

Abbildung 196: Folge-Dynpro 0 (Wirkung)

Das Dynpro-Attribut Folge-Dynpro = 0 bewirkt, dass nach dem kompletten Abarbeiten des
Dynpros die Verarbeitung an der Dynpro-Aufrufstelle fortgesetzt wird.

© Copyright. Alle Rechte vorbehalten. 303


Kapitel 8 : Dynpros

Dynamisches Überschreiben des Default-Folge-Dynpros

Abbildung 197: Dynamisches Überschreiben des Default-Folge-Dynpros

Mit der ABAP-Anweisung SET SCREEN können Sie aus einem PAI-Modul heraus das in den
Dynpro-Attributen festgelegte Default-Folge-Dynpro dynamisch überschreiben, wie in der
Abbildung gezeigt. Mit dieser Option können Sie den folgenden SAP-Standard
implementieren: Bei Betätigung der Enter-Taste kommt man wieder auf das gleiche Dynpro;
nur bestimmte Drucktasten verzweigen auf andere Bilder. Um diesen Standard für Ihr Dynpro
zu implementieren, geben Sie dessen eigene Bildnummer als Folge-Dynpro (Default-Folge-
Dynpro) an, und verzweigen Sie von PAI aus nur bei bestimmten Drucktasten über SET
SCREEN auf andere Dynpros.

Notiz:
Die Enter-Taste stellt standardmäßig keinen Funktionscode in das Befehlsfeld des
Dynpros. Somit wird der Initialwert des Feldes (Space) als Funktionscode zum
Programm transportiert.

Wenn das System dasselbe Dynpro erneut verarbeitet, durchläuft es alle PBO-Module erneut.
Falls Sie sich dafür entscheiden, die TABLES-Struktur in einem PBO-Modul zu füllen, so
müssen Sie sicherstellen, dass dies beim zweiten Aufruf nicht die Datenänderungen des
Benutzers auf dem Dynpro überschreibt.

304 © Copyright. Alle Rechte vorbehalten.


Lektion: Anlegen von Dynpros

Syntaxbeispiel: Auswertung der Funktionscodes

Abbildung 198: Syntaxbeispiel: Auswertung der Funktionscodes

Drucktastenverhalten
● Wählen Sie für dieses Szenario eine Drucktaste auf dem ersten Dynpro und zwei
Drucktasten auf dem zweiten Dynpro, und legen Sie folgendes Verhalten für diese
Drucktasten fest:
- Bei Weiter (Funktionscode GO) auf dem ersten Dynpro wird das Folge-Dynpro
dynamisch auf 200 gesetzt, um zum zweiten Dynpro zu gelangen.
- Bei Zurück (Funktionscode BACK) auf dem zweiten Dynpro wird das Folge-Dynpro
dynamisch auf 100 gesetzt, um zum ersten Dynpro zurückzukehren.
- Bei Beenden (Funktionscode EXIT) wird das Folge-Dynpro dynamisch auf null gesetzt,
d.h., der Benutzer gelangt zurück zur Aufrufstelle des Dynpros, und die
Dialogtransaktion bricht ab.

ZUSAMMENFASSUNG DER LEKTION


Nun können Sie
● Dynpros anlegen und die Bildsteuerung verstehen

© Copyright. Alle Rechte vorbehalten. 305


Kapitel 8 : Dynpros

306 © Copyright. Alle Rechte vorbehalten.


Kapitel 8
Lektion 2
Anlegen von Ein- und Ausgabefeldern

ÜBERBLICK ÜBER DIE LEKTION


In dieser Lektion wird die Gestaltung und Programmierung einfacher Dynpros mit Ein- und
Ausgabefeldern erläutert.

Unternehmensszenario
Sie möchten ein Programm entwickeln, bei dem auf Dynpro-Layouts zunächst Daten erfasst
und dann Daten ausgegeben werden. Dazu müssen Sie über folgende Kenntnisse verfügen:
● Anlegen von Ein-/Ausgabefeldern auf Dynpros

LERNZIELE DER LEKTION


Am Ende dieser Lektion können Sie:
● Ein- und Ausgabefelder auf Dynpros anlegen

Ein- und Ausgabefelder auf einem Dynpro

Abbildung 199: Implementierungsstufe 2: Anlegen von Ein- und Ausgabefeldern

© Copyright. Alle Rechte vorbehalten. 307


Kapitel 8 : Dynpros

An dieser Stelle der Programmentwicklung müssen Sie auf beiden Dynpros Ein- und
Ausgabefelder anlegen. Das erste Dynpro soll die eingabebereiten Felder Fluggesellschaft und
Flugnummer enthalten. Das zweite Dynpro soll ausschließlich Anzeigefelder enthalten, und
zwar zusätzlich zu Fluggesellschaft und Flugnummer noch die Felder Startflughafen,
Zielflughafen, Abflugzeit und Ankunftszeit.

Anlegen von Ein- und Ausgabefeldern (mit Bezug zu Dictionary-Feldern)

Abbildung 200: Anlegen von Ein- und Ausgabefeldern (mit Bezug zu Dictionary-Feldern)

Zuordnungsmöglichkeiten für Feldattribute


Sie haben folgende Möglichkeiten, beim Anlegen von Dynpro-Feldern die Zuordnung der
Feldattribute zu implementieren:

Übernehmen aus dem Dictionary


Mit dieser Option können Sie beim Anlegen eines Dynpro-Feldes den Typ sowie die
Feldattribute eines Dictionary-Feldes übernehmen. Ihnen stehen dann alle Dictionary-
Informationen für das Dynpro-Feld zur Verfügung, einschließlich der semantischen
Informationen über das entsprechende Datenelement und der
Fremdschlüsselbeziehungen. Als Feldname wird der Name des Dictionary-Feldes
übernommen.
Übernehmen aus dem Programm
Mit dieser Option können Sie für ein Dynpro-Feld die Feldattribute eines
programminternen Datenobjekts übernehmen. Hierzu muss eine generierte Version des
Programms vorliegen. (Die generierte Version wird beim Aktivieren automatisch
angelegt.) Als Feldname wird der Name des Datenobjekts übernommen.

Mit dem grafischen Layout-Editor können Sie weitere Dynpro-Elemente definieren, z.B. Texte,
Rahmen, Auswahlknöpfe und Ankreuzfelder. Wählen Sie per Mausklick das gewünschte
Dynpro-Element in der Werkzeugleiste aus, und positionieren Sie es dann auf dem Dynpro-
Pflegebereich.

308 © Copyright. Alle Rechte vorbehalten.


Lektion: Anlegen von Ein- und Ausgabefeldern

Um ein Dynpro-Element zu löschen, markieren Sie es mit der Maus, und wählen Sie dann
Löschen.
Sie können Dynpro-Elemente per Drag&Drop verschieben.

Pflege der Attribute eines Dynpro-Elements

Abbildung 201: Pflege der Attribute eines Dynpro-Elements

Wenn Sie die Attribute eines Dynpro-Elements pflegen möchten, müssen Sie zunächst einen
Doppelklick auf das Element ausführen. Die Attribute des Elements werden dann in einem
Zusatzfenster zur Pflege angezeigt. (Alternativ zum Doppelklick können Sie auch das Element
markieren und die Drucktaste Attribute betätigen.)
Um für ein Dynpro-Feld die Eingabe obligatorisch zu machen, müssen Sie das Feldattribut
„Eingabe“ auf obligatorisch (Mussfeld) setzen. Zur Laufzeit erscheint dann eine
entsprechende Markierung in dem Feld, falls es initial ist. Wird das Feld vom Benutzer nicht
ausgefüllt, so folgt bei beliebigen Benutzeraktionen ein Fehlerdialog. Danach stehen die
Eingabefelder wieder eingabebereit zur Verfügung.

ZUSAMMENFASSUNG DER LEKTION


Nun können Sie
● Ein- und Ausgabefelder auf Dynpros anlegen

© Copyright. Alle Rechte vorbehalten. 309


Kapitel 8 : Dynpros

310 © Copyright. Alle Rechte vorbehalten.


Kapitel 8
Lektion 3
Implementieren des Datentransports

ÜBERBLICK ÜBER DIE LEKTION


Diese Lektion beschreibt Konzept und Implementierung der programminternen Verarbeitung
bei Dynpro-Aufrufen.

Unternehmensszenario
Sie möchten ein Programm entwickeln, das zeigt, wie Daten zwischen dem Programm und
den Dynpros übergeben werden.
Dazu müssen Sie über folgende Kenntnisse verfügen:
● Implementieren des Datentransports auf Dynpros

LERNZIELE DER LEKTION


Am Ende dieser Lektion können Sie:
● Den Datentransport auf Dynpros implementieren

Datentransport zwischen den Dynpros eines Programms

Abbildung 202: Datentransport zwischen den Dynpros eines Programms

© Copyright. Alle Rechte vorbehalten. 311


Kapitel 8 : Dynpros

An dieser Stelle der Programmentwicklung kann der Benutzer auf dem ersten Dynpro eine
Flugverbindung auswählen und zum zweiten Dynpro navigieren. Doch auf dem zweiten
Dynpro enthalten nur die Felder Fluggesellschaft und Flugnummer einen Wert, denn sie haben
genau denselben Namen wie die Eingabefelder auf dem ersten Dynpro. Sie müssen jetzt den
Datentransport programmieren, sowohl vom ersten Dynpro in das Programm als auch vom
Programm auf das zweite Dynpro, damit das Programm Benutzereingaben verarbeiten und
die gewünschten Informationen auf dem zweiten Dynpro anzeigen kann.

TABLES-Struktur als Schnittstelle zum Dynpro

Abbildung 203: TABLES-Struktur als Schnittstelle zum Dynpro

Mit der TABLES-Anweisung definieren Sie mit Bezug auf die angegebene Dictionary-Struktur
(bzw. transparente Tabelle) programmintern eine gleichnamige, typgleiche Strukturvariable,
die als Schnittstelle zwischen Programm und Dynpro dient.
Beziehen sich die Dynpro-Felder und die TABLES-Anweisung auf denselben Strukturtyp,
tauscht das System die Daten ihrer Felder auf Basis der Feldgleichnamigkeit aus: nach PBO
von der TABLES-Struktur zu den Dynpro-Feldern und vor PAI von den Dynpro-Feldern zur
TABLES-Struktur.
Es ist üblich, dass im ABAP Dictionary eine spezielle Struktur angelegt wird, die die Felder
enthält, die auf den Dynpros einer Anwendung angezeigt werden sollen. Diese Struktur kann
auch Felder aus mehreren Datenbanktabellen enthalten. Definieren Sie die Felder auf dem
Dynpro mit Bezug auf diese Struktur, und implementieren Sie programmintern über die
entsprechende TABLES-Anweisung eine Schnittstellenstruktur. Auf diese Weise haben Sie
Zugriff auf eine eindeutige Schnittstellenstruktur für den Datenaustausch zwischen
Programm und Dynpro, obwohl die Struktur Felder aus verschiedenen Tabellen enthält.

312 © Copyright. Alle Rechte vorbehalten.


Lektion: Implementieren des Datentransports

Datentransport vom Programm zum Dynpro

Abbildung 204: Datentransport vom Programm zum Dynpro

Nach Abarbeitung des PBO-Ereignisses kopiert das System den Feldinhalt der
programminternen TABLES-Struktur in die gleichnamigen Dynpro-Felder. Dann sendet das
System das Dynpro zum Präsentationsserver. Der Datentransport wird in dieser Reihenfolge
vorgenommen, da im PBO die Daten für die Dynpro-Anzeige in der TABLES-Struktur
vorbereitet werden.

© Copyright. Alle Rechte vorbehalten. 313


Kapitel 8 : Dynpros

Datentransport vom Dynpro zum Programm

Abbildung 205: Datentransport vom Dynpro zum Programm

Bei Benutzeraktionen auf dem Dynpro transportiert das System noch vor Abarbeitung des
Ereignisses PAI den Inhalt aus den Dynpro-Feldern in die namensgleichen TABLES-
Strukturfelder. Der Datentransport wird in dieser Reihenfolge vorgenommen, da im PAI die
Verarbeitung der Benutzereingaben stattfinden soll. Daher müssen die Eingaben zu diesem
Zeitpunkt im Programm verfügbar sein.

314 © Copyright. Alle Rechte vorbehalten.


Lektion: Implementieren des Datentransports

Datentransport im Beispielprogramm

Abbildung 206: Datentransport im Beispielprogramm

Datentransportprozess im Beispielprogramm
Der Datentransportprozess im Beispielprogramm umfasst die folgenden Schritte:

1. Bei einer Benutzeraktion auf Dynpro 100 transportiert das System die Benutzereingaben
in die programminterne TABLES-Struktur BC400_S_DYNCONN.

2. Das System verarbeitet das PAI-Modul USER_COMMAND_0100.

3. Abhängig vom Funktionscode ruft das Programm im PAI-Modul einen Funktionsbaustein


zur Datenbeschaffung auf. Dabei übergibt das Programm dem Funktionsbaustein die
Benutzereingaben aus der TABLES-Struktur. Dann transportiert das Programm die Daten,
die auf dem Dynpro 200 angezeigt werden sollen, in dieselbe TABLES-Struktur.

4. Nach PAI des Dynpro 100 navigiert das Programm zum Dynpro 200.

5. Nach PBO für Dynpro 200 transportiert das System die Daten aus der TABLES-Struktur in
die Dynpro-Felder.

© Copyright. Alle Rechte vorbehalten. 315


Kapitel 8 : Dynpros

Syntax zum Beispielprogramm

Abbildung 207: Syntax zum Beispielprogramm

Im PAI-Modul USER_COMMAND_0100 wertet das Programm den Funktionscode aus. Falls


der Benutzer die Drucktaste Weiter (Funktionscode GO) wählt, ruft das Programm einen
Funktionsbaustein zur Datenbeschaffung auf.
Das Programm übergibt dem Funktionsbaustein die Benutzereingaben aus der TABLES-
Struktur. Um die Schnittstelle zum Dynpro und die Schnittstelle zum Funktionsbaustein klar
voneinander zu trennen, übergibt das Programm die Daten nicht direkt aus der TABLES-
Struktur an den Funktionsbaustein. Stattdessen werden die Daten aus der TABLES-Struktur
in das Datenobjekt kopiert, das als Schnittstelle zum Funktionsbaustein dient (globales
strukturiertes Datenobjekt gs_connection vom Typ BC400_S_CONNECTION).
War die Datenbeschaffung erfolgreich, kopiert das Programm das Ergebnis zurück in die
TABLES-Struktur und stößt die Navigation zum Anzeige-Dynpro an. Falls der
Funktionsbaustein mit einer Ausnahme abbricht, wird eine entsprechende Fehlermeldung
abgesetzt. Diese Fehlermeldung wird direkt auf Dynpro 100 angezeigt.

Hinweis:
Fehlermeldungen (Nachrichtentyp E) während der Verarbeitung eines PAI-
Moduls führen immer dazu, dass das System das entsprechende Dynpro sofort
wieder anzeigt – ohne PBO erneut zu verarbeiten. Durch entsprechende
Techniken lässt sich erreichen, dass die Dynpro-Felder wieder eingabebereit
sind.

316 © Copyright. Alle Rechte vorbehalten.


Lektion: Implementieren des Datentransports

Hinweis:
Im Beispiel erfolgt das Lesen der Daten zu PAI des Eingabe-Dynpros. Alternativ
kann die Datenbeschaffung auch erst in einem PBO-Modul des Anzeige-Dynpros
erfolgen, also nach der Navigation. Machen Sie von dieser zweiten Option
Gebrauch, um die Wiederverwendung des Anzeige-Dynpros zu vereinfachen.

ZUSAMMENFASSUNG DER LEKTION


Nun können Sie
● Den Datentransport auf Dynpros implementieren

© Copyright. Alle Rechte vorbehalten. 317


Kapitel 8 : Dynpros

318 © Copyright. Alle Rechte vorbehalten.


Kapitel 8

Überprüfung des Lernerfolgs

1. Womit können Sie die Dynpro-Verarbeitung starten?


Wählen Sie die richtige Antwort.

X A Dynpro-Ablaufsteuerungseinstellung

X B Dialogtransaktion

X C create-Verarbeitungsanweisung

X D Dynpro-Startverarbeitungseinstellung

2. Welche der folgenden Optionen sollten einem Dynpro-Feld zugeordnet werden, um eine
Eingabe obligatorisch zu machen?
Wählen Sie die richtige Antwort.

X A Einfügen

X B Obligatorisch

X C Grafisches Layout

X D Löschen

3. Welche der folgenden Aussagen trifft auf die Implementierung des Datentransports zu?
Wählen Sie die richtige Antwort.

X A Das Systemfeld sy-ucomm dient als Schnittstelle für den Datentransport zwischen
Programm und Dynpro.

X B Der Datentransport wird durchgeführt, wenn Sie die Werte auf dem Dynpro
eingeben.

X C Die TABLES-Anweisung dient als Schnittstelle für den Datentransport zwischen


Programm und Dynpro.

© Copyright. Alle Rechte vorbehalten. 319


Kapitel 8

Überprüfung des Lernerfolgs - Antworten

1. Womit können Sie die Dynpro-Verarbeitung starten?


Wählen Sie die richtige Antwort.

X A Dynpro-Ablaufsteuerungseinstellung

X B Dialogtransaktion

X C create-Verarbeitungsanweisung

X D Dynpro-Startverarbeitungseinstellung

Das ist richtig. Starten Sie mit einer Dialogtransaktion die Dynpro-Verarbeitung. Weitere
Informationen erhalten Sie in der Lektion „Anlegen von Dynpros“ im Abschnitt
„Laufzeitarchitektur der Dynpro-Ablaufsteuerung“ im Kurs BC400.

2. Welche der folgenden Optionen sollten einem Dynpro-Feld zugeordnet werden, um eine
Eingabe obligatorisch zu machen?
Wählen Sie die richtige Antwort.

X A Einfügen

X B Obligatorisch

X C Grafisches Layout

X D Löschen

Das ist richtig. Um für ein Dynpro-Feld die Eingabe obligatorisch zu machen, müssen Sie
ihm das Feldattribut „Obligatorisch“ zuordnen. Weitere Informationen erhalten Sie in der
Lektion „Anlegen von Eingabe- und Ausgabefeldern“ im Abschnitt „Pflege der Attribute
eines Dynpro-Elements“ im Kurs BC400.

320 © Copyright. Alle Rechte vorbehalten.


Kapitel 8 : Überprüfung des Lernerfolgs - Antworten

3. Welche der folgenden Aussagen trifft auf die Implementierung des Datentransports zu?
Wählen Sie die richtige Antwort.

X A Das Systemfeld sy-ucomm dient als Schnittstelle für den Datentransport zwischen
Programm und Dynpro.

X B Der Datentransport wird durchgeführt, wenn Sie die Werte auf dem Dynpro
eingeben.

X C Die TABLES-Anweisung dient als Schnittstelle für den Datentransport zwischen


Programm und Dynpro.

Das ist richtig. Mit der TABLES-Anweisung definieren Sie mit Bezug auf die angegebene
Dictionary-Struktur programmintern eine gleichnamige, typgleiche Strukturvariable, die
als Schnittstelle zwischen Programm und Dynpro dient. Weitere Informationen erhalten
Sie in der Lektion „Implementierung des Datentransports“ im Abschnitt „TABLES-
Struktur als Schnittstelle zum Dynpro“ im Kurs BC400.

© Copyright. Alle Rechte vorbehalten. 321


Kapitel 8 : Überprüfung des Lernerfolgs - Antworten

322 © Copyright. Alle Rechte vorbehalten.


KAPITEL 9 SAP List Viewer

Lektion 1
Verwendung des SAP List Viewer 325

LERNZIELE

● EnjoySAP-Controls beschreiben
● Einen SAP List Viewer implementieren

© Copyright. Alle Rechte vorbehalten. 323


Kapitel 9 : SAP List Viewer

324 © Copyright. Alle Rechte vorbehalten.


Kapitel 9
Lektion 1
Verwendung des SAP List Viewer

ÜBERBLICK ÜBER DIE LEKTION


Sie verwenden den SAP List Viewer, um eine interne Tabelle auf einem Dynpro anzuzeigen.
Neben der grafischen Aufbereitung der Daten bietet der SAP List Viewer eine Reihe von
Standardfunktionen, wie z.B. Sortieren und Filtern. Zur Ansteuerung des SAP List Viewer
dient eine SAP-Standardklasse.

Unternehmensszenario
Sie möchten Daten, die in einer internen Tabelle vorliegen, in ansprechender Form im
Benutzerdialog darstellen und dem Benutzer mit geringem Aufwand zusätzliche Funktionen
zur Verfügung stellen. Dazu müssen Sie über folgende Kenntnisse verfügen:
● Verwendung des ALV Grid Control (SAP List Viewer) zur Anzeige einer internen Tabelle auf
einem Dynpro

LERNZIELE DER LEKTION


Am Ende dieser Lektion können Sie:
● EnjoySAP-Controls beschreiben
● Einen SAP List Viewer implementieren

© Copyright. Alle Rechte vorbehalten. 325


Kapitel 9 : SAP List Viewer

EnjoySAP-Controls

Abbildung 208: Beispiele für EnjoySAP-Controls

Auswahl von EnjoySAP-Controls


● Mit Release 4.6 hat SAP viele sogenannte EnjoySAP-Controls ausgeliefert, mit denen Sie
Ihre Dynpros ergonomischer und interessanter gestalten können.
- Grid Control: Zur Darstellung einer internen Tabelle auf einem Dynpro mit
verschiedenen Funktionen, z.B. Sortieren, Filtern und Summenbildung
- Picture Control: Zur Darstellung eines Bildes auf dem Dynpro
- HTML Viewer Control: Zur Darstellung einer HTML-Datei bzw. Webseite auf dem
Dynpro
- Tree Control: Zur Darstellung einer hierarchischen Liste in Form einer Baumstruktur
auf dem Dynpro

Die Kommunikation zwischen diesen Controls und einem ABAP-Programm erfolgt mithilfe
von Klassen und Methoden, die im SAP-Standard ausgeliefert sind. Um die interessantesten
und beliebtesten EnjoySAP-Controls anzusteuern, verwenden Sie die Klasse
CL_GUI_ALV_GRID.

326 © Copyright. Alle Rechte vorbehalten.


Lektion: Verwendung des SAP List Viewer

Verwendung des SAP List Viewer

Abbildung 209: Anwendungsbeispiel: ALV Grid Control

Das ALV Grid Control, auch SAP List Viewer oder ABAP List Viewer (ALV) genannt, dient der
Anzeige einer internen Tabelle auf einem Dynpro. Es besitzt zahlreiche Benutzerfunktionen:
Am Bildschirm kann die Breite der Spalten vom Benutzer variiert bzw. automatisch den
aktuell ausgegebenen Daten angepasst werden. Außerdem kann der Benutzer die
Anzeigeposition der Spalten per Drag&Drop ändern.

Anwendungsbeispiel: ALV Grid Control


● Über die Standard-Drucktasten des Controls können folgende Funktionen ausgeführt
werden:
- Anzeigen der zuvor per Cursor markierten Felder in einem modalen Dialogfenster
- Festlegen komplexer Sortierkriterien für die Spalten
- Suchen nach einer Zeichenkette in Zeilen oder Spalten innerhalb eines markierten
Bereichs
- Bilden von Summen für eine oder mehrere numerische Spalten
- Drucken und Herunterladen.
- Sichern von Einstellungen als Anzeigevariante, um diese später wiederzuverwenden.

Die Detailanzeige zeigt die Felder der vorher per Cursor markierten Zeile in einem modalen
Dialogfenster an. Die Sortierfunktion bietet dem Benutzer die Möglichkeit, komplexe
Sortierkriterien für die Spalten festzulegen. Die Suchfunktion bietet dem Benutzer die
Möglichkeit, innerhalb eines markierten Bereichs in Zeilen oder Spalten nach einer
Zeichenkette zu suchen. Mit der Summierungsfunktion kann der Benutzer Summen für eine

© Copyright. Alle Rechte vorbehalten. 327


Kapitel 9 : SAP List Viewer

oder mehrere numerische Spalten bilden. Über die Funktion Zwischensummen kann der
Benutzer Gruppenstufenlisten aufbauen: Markieren Sie vor Auswahl dieser Funktion die nicht
numerischen Spalten, die berücksichtigt werden sollen. Das System zeigt dann die
entsprechenden Gruppenstufensummen an. Über entsprechende Drucktasten stehen eine
Druck- und eine Download-Funktion zur Verfügung. Das Grid Control ermöglicht den
Benutzern, ihre Einstellungen als Anzeigevariante zu sichern und später wiederzuverwenden.

Laufzeitarchitektur des ALV Grid Controls

Abbildung 210: Laufzeitarchitektur des ALV Grid Controls

Ein EnjoySAP-Control wird immer zusammen mit einem Dynpro angezeigt. Dabei gibt es für
die Anbindung des EnjoySAP-Controls an das Dynpro verschiedene Möglichkeiten. Die
einfachste besteht darin, mit dem grafischen Layout-Editor auf dem Layout des Dynpros
einen speziellen Control-Bereich anzulegen (in der Abbildung links oben).
Die Verbindung von EnjoySAP-Control und Control-Bereich auf dem Dynpro erfolgt über ein
SAP Container Control (kurz „Container“). Das EnjoySAP-Control wird in den Container
eingebettet, der seinerseits in den Control-Bereich integriert wird.
Um das Grid Control und den Container auf dem GUI zu implementieren, müssen im ABAP-
Programm korrespondierende Instanzen als Vertreter erzeugt werden. Über diese Instanzen
können Sie die GUI-seitigen Elemente ansteuern. Dazu existieren in Ihrem SAP-System
Standard-Klassen, von denen Sie die Container- bzw. Grid-Control-Instanz erzeugen können.

328 © Copyright. Alle Rechte vorbehalten.


Lektion: Verwendung des SAP List Viewer

Klassen zur Container- und Grid-Control-Ansteuerung

Abbildung 211: Klassen zur Container- und Grid-Control-Ansteuerung

Bei der Erzeugung einer Instanz wird der klassenspezifische Konstruktor (spezielle Methode
CONSTRUCTOR der Klasse) implizit aufgerufen. Diese Methode hat die Aufgabe, mit den
eigenen Import-Parametern die Attribute der neu zu erzeugenden Instanz zu pflegen. Daher
müssen Sie bei Instanzerzeugung (Anweisung CREATE OBJECT) zumindest die
obligatorischen Importparameter des Konstruktors mit Werten versorgen.

© Copyright. Alle Rechte vorbehalten. 329


Kapitel 9 : SAP List Viewer

CONSTRUCTOR-Methode der Container-Klasse

Abbildung 212: CONSTRUCTOR-Methode der Container-Klasse

Auf Informationen zu einer globalen Klasse bzw. Methode zugreifen


● Um nähere Informationen zu einer globalen Klasse bzw. Methode zu erhalten, können Sie
über die folgenden Schritte zum Class Builder navigieren:

1. Lassen Sie sich die Objektliste der Klasse im Navigationsbereich des Object Navigators
anzeigen.

2. Per Doppelklick auf die Klasse gelangen Sie in die Detailanzeige im Class Builder.
(Alternativ gelangen Sie auch per Doppelklick auf den Klassennamen in einem ABAP-
Programm in den Class Builder.)

3. Markieren Sie mit dem Cursor die gewünschte Methode, und wählen Sie die Drucktaste
Parameter, um die Schnittstellenparameter der Methode anzeigen zu lassen.

Die Methode CONSTRUCTOR der globalen Klasse CL_GUI_CUSTOM_CONTAINER (Klasse für


den Container) besitzt den obligatorischen Parameter CONTAINER_NAME. Beim Erzeugen
der Container-Instanz müssen Sie mindestens diesen Parameter mit Daten versorgen, und
zwar mit dem Namen des auf dem Dynpro vorhandenen Control-Bereichs.

330 © Copyright. Alle Rechte vorbehalten.


Lektion: Verwendung des SAP List Viewer

Wichtige Methoden der Grid-Control-Klasse

Abbildung 213: Wichtige Methoden der Grid-Control-Klasse

Die globale Klasse CL_GUI_ALV_GRID besitzt zahlreiche Methoden, die für die
entsprechenden Grid-Control-Funktionen aufgerufen werden können.

Den Inhalt einer internen Tabelle mit einem ALV Grid Control anzeigen
Um den Inhalt einer internen Tabelle mit einem ALV Grid Control anzuzeigen, sollten Sie die
folgenden Methoden kennen:
● CONSTRUCTOR
Die Grid-Klasse verfügt über einen Konstruktor. Sein einziger obligatorischer Parameter ist
I_PARENT, an den (bei Erzeugung der Grid-Control-Instanz) die bereits erzeugte
Container-Instanz (in Form eines Zeigers) übergeben werden muss.
● SET_TABLE_FOR_FIRST_DISPLAY
Diese Methode der erzeugten Grid-Control-Instanz dient der Übergabe von Daten sowie
Einstellungen an das Grid-Control. Dem Parameter IT_OUTTAB muss die anzuzeigende
interne Tabelle übergeben werden. Diese muss eine Standardtabelle sein (siehe
Typisierung des Parameters).
Des Weiteren werden technische Informationen für die Aufbereitung der Grid-Spalten
benötigt. Am einfachsten ist es, als Zeilenbeschreibung der internen Tabelle eine
Dictionary-Struktur oder eine transparente Tabelle zu verwenden. In diesem Fall brauchen
Sie nämlich nur noch dem Parameter I_STRUCTURE_NAME den Namen des Dictionary-
Objekts übergeben. (Alternativ können Sie auch einen sogenannten Feldkatalog aufbauen
und an den Parameter IT_FIELDCATALOG übergeben.)
● REFRESH_TABLE_DISPLAY
Diese Methode dient dazu, die Ausgabetabelle im Grid Control zu aktualisieren. Sie ist
nötig, wenn sich Daten geändert haben.

© Copyright. Alle Rechte vorbehalten. 331


Kapitel 9 : SAP List Viewer

Tabelleninhalte mit dem SAP List Viewer anzeigen

Abbildung 214: Anlegen des Dynpro-Elements: Custom-Control-Bereich

Im grafischen Layout-Editor können Sie auf Ihrem Dynpro einen Control-Bereich definieren.
Benutzen Sie dazu in der Werkzeugleiste die Drucktaste Custom Control. Wählen Sie die
Drucktaste aus, und legen Sie Größe und Position des Bereichs auf dem Dynpro fest.
Vergeben Sie einen Namen für das neue Dynpro-Element (z.B. CONTAINER_AREA_1).

332 © Copyright. Alle Rechte vorbehalten.


Lektion: Verwendung des SAP List Viewer

Definition von Referenzvariablen

Abbildung 215: Definition von Referenzvariablen

Im ABAP-Programm benötigte Referenzvariablen


● Im ABAP-Programm müssen bestimmte Referenzvariablen definiert werden:
- Eine Referenzvariable, die auf die noch zu erzeugende Container-Instanz zeigen soll
(Beispiel: GO_CONTAINER).

- Eine Referenzvariable, die auf die noch zu erzeugende Grid-Control-Instanz zeigen soll
(Beispiel: GO_ALV_GRID).

© Copyright. Alle Rechte vorbehalten. 333


Kapitel 9 : SAP List Viewer

Anlegen von Instanzen

Abbildung 216: Anlegen von Instanzen

Die Instanzen erzeugen Sie mit der Anweisung CREATE OBJECT. Verwenden Sie die Funktion
„Muster“, um die Anweisung zu generieren. Setzen Sie im Aufruf den Namen der
Referenzvariablen ein, und versorgen Sie die Parameter mit Werten.
Die Instanziierung der Controls auf einem Dynpro muss nur einmal vollzogen werden. D.h., bei
erneuter Verarbeitung des Dynpros entfällt dieser Schritt. Über eine entsprechende Abfrage
auf eine der beiden Referenzvariablen ist dies einfach zu realisieren: IF go_container IS
INITIAL. Die Aufrufsyntax ähnelt der des Funktionsbausteinaufrufs sehr.
Sinnvollerweise sollte die Erzeugung der Control-Instanzen vor Anzeige des Dynpros, d.h. in
einem PBO-Modul, implementiert werden.

334 © Copyright. Alle Rechte vorbehalten.


Lektion: Verwendung des SAP List Viewer

Aufrufen von Methoden

Abbildung 217: Aufrufen von Methoden

Um den Inhalt der internen Tabelle und die zugehörige Zeilenbeschreibung an das ALV Grid
Control zu übergeben, rufen Sie die Methode SET_TABLE_FOR_FIRST_DISPLAY der Grid-
Control-Instanz auf. Auch hier sollten Sie den Aufruf per Drag&Drop generieren lassen.

Parameterwerte
● Außerdem müssen Sie die Parameter mit den folgenden Werten versorgen:
- Übergeben Sie die gefüllte interne Tabelle an den Parameter IT_OUTTAB. Da die interne
Tabelle den globalen Strukturtyp BC400_S_FLIGHT als Zeilentyp besitzt, können Sie
dem Parameter I_STRUCTURE_NAME diesen Namen übergeben. Zugehörige
Dictionary-Informationen werden dann automatisch geladen und dem Control
übergeben.
- Ändert sich im Laufe des Programms der Inhalt der internen Tabelle, so müssen Sie vor
der nächsten Anzeige des Dynpros die Methode REFRESH_TABLE_DISPLAY aufrufen,
um die Grid-Anzeige zu aktualisieren.

Tabellen mit dem SAP List Viewer anzeigen

1. Im grafischen Layout-Editor können Sie auf Ihrem Dynpro einen Control-Bereich


definieren. Benutzen Sie dazu in der Werkzeugleiste die Drucktaste Custom Control.
Wählen Sie den Control-Bereich aus, und legen Sie Größe und Position des Bereichs auf
dem Dynpro fest. Bewegen Sie dazu den Mauszeiger an die Stelle des Editierbereichs, an
der die linke obere Ecke des Control-Bereichs liegen soll. Drücken Sie die Maustaste, und

© Copyright. Alle Rechte vorbehalten. 335


Kapitel 9 : SAP List Viewer

halten Sie sie gedrückt. Ziehen Sie den Mauszeiger diagonal nach rechts unten zur
gewünschten rechten unteren Ecke des anzulegenden Bereichs. Sobald Sie die Maustaste
loslassen, wird der rechte untere Eckpunkt fixiert.
Vergeben Sie einen Namen für das neue Dynpro-Element (z.B. CONTAINER_AREA_1).
Über die beiden Attribute Resizing vertikal und Resizing horizontal können Sie festlegen,
ob der Bereich bei einem Resize-Vorgang des Haupt-Dynpros durch den Benutzer
mitskaliert werden soll oder nicht. Wenn Sie die Attribute setzen, können Sie über die
beiden Zusatzattribute Zeilen min. und Spalten min. eine Mindestgröße für den Bereich
festlegen, die bei einer Skalierung nicht unterschritten werden kann.

2. Definieren Sie die Referenzvariablen, die von den Grid-Control-Klassen im ABAP-


Programm benötigt werden.

● Eine Referenzvariable, die auf die noch zu erzeugende Container-Instanz zeigen soll (in
der Abbildung: GO_CONTAINER).
DATA: go_container type ref to cl_gui_custom_container,
go_alv_grid type ref to Cl_gui_alv_grid.

● Eine Referenzvariable, die auf die noch zu erzeugende Grid-Control-Instanz zeigen soll
(in der Abbildung: GO_ALV_GRID).

3. Die Instanzen erzeugen Sie mit der Anweisung CREATE OBJECT. Indem Sie Ihre
Anweisung in Ihrem Quelltext generieren (z.B. mit Drag&Drop), können Sie Schreibfehler
und Auslassungen vermeiden.
Gehen Sie folgendermaßen vor, um Ihre Anweisungen im Quelltext zu generieren:
a) Lassen Sie sich die Objektliste der entsprechenden Klasse im Navigationsbereich des
Object Navigators anzeigen.

b) Ziehen Sie den Klassennamen per Drag&Drop in den Quelltext.

c) Ersetzen Sie im generierten Aufruf den Ausdruck xxxxxxxx durch go_alv_grid, und
versorgen Sie die Parameter mit Werten.

Die Instanziierung der Controls auf einem Dynpro muss nur einmal vollzogen werden. D.h.,
bei erneuter Verarbeitung des Dynpros entfällt dieser Schritt. Über eine entsprechende
Abfrage auf eine der beiden Referenzvariablen ist dies einfach zu realisieren: IF
go_container IS INITIAL.
Die Aufrufsyntax ähnelt der des Funktionsbausteinaufrufs sehr. Die bei CREATE OBJECT
zu versorgenden Parameter sind jedoch die Schnittstellenparameter des jeweiligen
Konstruktors.
Sinnvollerweise sollte die Erzeugung der Control-Instanzen vor Anzeige des Dynpros, d.h.
in einem PBO-Modul, implementiert werden.

4. Um den Inhalt der internen Tabelle und die zugehörige Zeilenbeschreibung an das ALV
Grid Control zu übergeben, rufen Sie die Methode SET_TABLE_FOR_FIRST_DISPLAY der
Grid-Control-Instanz auf. Auch hier sollten Sie den Aufruf per Drag&Drop generieren
lassen. Ersetzen Sie im generierten Aufruf den Ausdruck xxxxxxxx durch go_alv_grid.

Außerdem müssen Sie die Parameter mit den folgenden Werten versorgen:
a) Übergeben Sie die gefüllte interne Tabelle dem Parameter IT_OUTTAB (wie in der
Abbildung Methodenaufruf).

336 © Copyright. Alle Rechte vorbehalten.


Lektion: Verwendung des SAP List Viewer

b) Da die interne Tabelle den globalen Strukturtyp BC400_S_FLIGHT als Zeilentyp besitzt
(wie in der Abbildung Methodenaufruf), können Sie dem Parameter
I_STRUCTURE_NAME diesen Namen übergeben. Zugehörige Dictionary-
Informationen werden dann automatisch geladen und dem Control übergeben.

Ändert sich im Laufe des Programms der Inhalt der internen Tabelle, so müssen Sie vor
der nächsten Anzeige des Dynpros die Methode REFRESH_TABLE_DISPLAY aufrufen, um
die Grid-Anzeige zu aktualisieren.

ZUSAMMENFASSUNG DER LEKTION


Nun können Sie
● EnjoySAP-Controls beschreiben
● Einen SAP List Viewer implementieren

© Copyright. Alle Rechte vorbehalten. 337


Kapitel 9 : SAP List Viewer

338 © Copyright. Alle Rechte vorbehalten.


Kapitel 9

Überprüfung des Lernerfolgs

1. Über welche der folgenden Container-Klassen erfolgt die Verbindung von EnjoySAP-
Control und Control-Bereich auf dem Dynpro?
Wählen Sie die richtige Antwort.

X A CL_GUI_CUSTOM_CONTAINER

X B CL_ALV_CONTAINER

X C CL_CONTAINER

X D CL_ENJOY_CONTAINER

2. Welche der folgenden Methoden sind Methoden der globalen Klasse CL_GUI_ALV_GRID?
Wählen Sie die richtigen Antworten.

X A CONSTRUCTOR

X B SET_TABLE_FOR_FIRST_DISPLAY

X C CREATE_TABLE_FOR_DISPLAY

X D REFRESH_TABLE_DISPLAY

© Copyright. Alle Rechte vorbehalten. 339


Kapitel 9

Überprüfung des Lernerfolgs - Antworten

1. Über welche der folgenden Container-Klassen erfolgt die Verbindung von EnjoySAP-
Control und Control-Bereich auf dem Dynpro?
Wählen Sie die richtige Antwort.

X A CL_GUI_CUSTOM_CONTAINER

X B CL_ALV_CONTAINER

X C CL_CONTAINER

X D CL_ENJOY_CONTAINER

Das ist richtig. Die Verbindung von EnjoySAP-Control und Control-Bereich auf dem
Dynpro erfolgt über ein SAP Container Control (kurz „Container“), wie z.B.
CL_GUI_CUSTOM_CONTAINER. Das EnjoySAP-Control wird in den Container eingebettet,
der seinerseits in den Control-Bereich integriert wird. Weitere Informationen erhalten Sie
in der Lektion „SAP List Viewer“ im Abschnitt „Laufzeitarchitektur des ALV Grid Control“
im Kurs BC400.

2. Welche der folgenden Methoden sind Methoden der globalen Klasse CL_GUI_ALV_GRID?
Wählen Sie die richtigen Antworten.

X A CONSTRUCTOR

X B SET_TABLE_FOR_FIRST_DISPLAY

X C CREATE_TABLE_FOR_DISPLAY

X D REFRESH_TABLE_DISPLAY

Das ist richtig. Die globale Klasse CL_GUI_ALV_GRID besitzt zahlreiche Methoden, die für
die entsprechenden Grid-Control-Funktionen aufgerufen werden können. Einige davon
sind die Methoden CONSTRUCTOR, SET_TABLE_FOR_FIRST_DISPLAY und
REFRESH_TABLE_DISPLAY. Weitere Informationen erhalten Sie in der Lektion „SAP List
Viewer“ im Abschnitt „Wichtige Methoden der Grid-Control-Klasse“ im Kurs BC400.

340 © Copyright. Alle Rechte vorbehalten.


KAPITEL 10 Web Dynpro ABAP

Lektion 1
Einführung in Web Dynpro ABAP 343

Lektion 2
Implementieren einer Navigation in Web Dynpro 351

Lektion 3
Implementieren des Datentransports in Web Dynpro 363

LERNZIELE

● Web Dynpro ABAP beschreiben


● Eine Navigation in einem Web Dynpro implementieren
● Datentransport in Web Dynpro implementieren

© Copyright. Alle Rechte vorbehalten. 341


Kapitel 10 : Web Dynpro ABAP

342 © Copyright. Alle Rechte vorbehalten.


Kapitel 10
Lektion 1
Einführung in Web Dynpro ABAP

ÜBERBLICK ÜBER DIE LEKTION


Diese Lektion liefert einen Überblick über die Eigenschaften und Nutzungsszenarien sowie die
Programmier- und Laufzeitarchitektur von Web Dynpro ABAP. Außerdem lernen Sie, wie Sie
eine einfache Web-Dynpro-ABAP-Anwendung mit Ein- und Ausgabefeldern und Drucktasten
strukturieren und programmieren.

Unternehmensszenario
Sie sollen die Eigenschaften, Nutzungsszenarien, das Programmierkonzept und die
Laufzeitarchitektur von Web Dynpro ABAP erläutern. Dazu müssen Sie über folgende
Kenntnisse verfügen:
● Eigenschaften und Nutzungsszenarien von Web Dynpro ABAP
● Programmier- und Laufzeitarchitektur von Web Dynpro ABAP
● Implementierung einfacher Web-Dynpro-Anwendungen mit Ein- und Ausgabefeldern und
Drucktasten

LERNZIELE DER LEKTION


Am Ende dieser Lektion können Sie:
● Web Dynpro ABAP beschreiben

Grundlagen zu Web Dynpro


Vergleich der Web-Dynpro-Begriffe

Tabelle 6: Web-Dynpro-Begriffe
Klassisches Dynpro Web Dynpro

Programm (z.B. Modulpool) Web-Dynpro-Component


Dialogtransaktion Web-Dynpro-Anwendung
Dynpro Web-Dynpro-View
Dynpro-Folge Web-Dynpro-Window
TABLES-Struktur Web-Dynpro-Context
Funktionscode Systemantwort
PAI-Modul user_command_nnnn onactionxyz-Methoden
SET SCREEN nnnn FIRE_PLUGxyz

© Copyright. Alle Rechte vorbehalten. 343


Kapitel 10 : Web Dynpro ABAP

Eigenschaften von Web Dynpro

● client- und protokollunabhängiges Programmiermodell


● Trennung von Layout, Programmfluss und Business-Logik
● grafische Unterstützung bei der Gestaltung des Layouts und der Programmablauflogik
● Entwicklungswerkzeuge eingebettet in den Object Navigator
● wiederverwendbare Komponenten
● beliebige Backend-Systeme durch Nutzung von Web-Services
● Unterstützung des Accessibility-Standards 508

Zu SAP NetWeaver 7.0 hat SAP mit Web Dynpro ABAP ein neues Programmiermodell
eingeführt, das unabhängig von der verwendeten Client-Software (für den Betrieb von Web-
Dynpro-Anwendungen) und dem zugehörigen Protokoll ist. Dies wird durch den Einsatz von
Metadaten erreicht.
Web Dynpro ABAP wird die Standard-UI-Technologie von SAP für die Entwicklung von
Webanwendungen im ABAP-Umfeld.
Neben einer eigenen Laufzeitumgebung besitzt Web Dynpro ABAP vor allem eine grafische
Entwicklungsumgebung (Web Dynpro Explorer), deren Werkzeuge vollständig in die ABAP-
Entwicklungsumgebung (Object Navigator) integriert sind. Die Entwicklung einer Web-
Dynpro-Anwendung wird über das SAP GUI im SAP-System durchgeführt. Aufgerufen wird
eine Web-Dynpro-Anwendung über die entsprechende URL beispielsweise vom Internet-
Browser oder vom SAP-Portal aus.
Durch die Wiederverwendbarkeit von Komponenten sowie die strikte Trennung von Layout,
Programmablauf und Business-Logik werden die Wartung und Weiterentwicklung von Web-
Dynpro-ABAP-Anwendungen erleichtert.
Ferner können Web-Dynpro-Anwendungen für Sehbehinderte bedienbar gemacht werden, da
Web Dynpro durch Tastatureingabe und Sprachausgabe den Accessibility-Standard 508
(Barrierefreiheit) unterstützt.
Web Dynpro unterstützt die Verwendung von Web-Services, wodurch aus einer Anwendung
heraus in standardisierter und komfortabler Weise auf Business Functions
unterschiedlichster Systeme zugegriffen werden kann.

344 © Copyright. Alle Rechte vorbehalten.


Lektion: Einführung in Web Dynpro ABAP

Das Model-View-Controller-Programmiermodell

Abbildung 218: Das Model-View-Controller-Programmiermodell

Web-Dynpro-Anwendungen sind nach dem Model-View-Controller-Programmiermodell


(MVC) strukturiert.
Während das Model in der Business Interaction Layer für den darstellungsunabhängigen
Datenzugriff auf das Backend-System zuständig ist, übernimmt die View in der User
Interaction Layer die herkunftsunabhängige Darstellung der Daten (Layout).
Der Controller in der Binding Layer liegt zwischen View und Model. Er bereitet die Daten des
Models auf, die in der View angezeigt werden sollen, verarbeitet die Benutzereingaben und
gibt sie an das Model zurück. Außerdem steuert er den Ablauf des Programms.
In Web Dynpro kann das Modell aus Anwendungsklassen bestehen, die den Datenzugriff
kapseln. Es können aber auch vorhandene Business Application Programming Interfaces
(BAPIs), Funktionsbausteine oder Web-Services verwendet werden.
View und Controller werden mittels der grafischen Werkzeuge realisiert.

© Copyright. Alle Rechte vorbehalten. 345


Kapitel 10 : Web Dynpro ABAP

Web-Dynpro-Struktur

Abbildung 219: Web-Dynpro-Views

Das Layout einer View besteht aus einer Menge von UI-Elementen (Bildschirmelemente wie
Eingabefelder, Tabellen und Drucktasten), die über ein grafisches Werkzeug
zusammengestellt werden. Zur Laufzeit zeigt das System die Views nacheinander, nicht
parallel, auf dem Bildschirm an. Die Views entsprechen also den klassischen Dynpros ohne
Ablauflogik.
Wie beim klassischen Dynpro müssen Eingabeprüfungen und Eingabehilfen (F4) nicht
händisch implementiert werden, sondern können durch Bezug auf das ABAP Dictionary als
UI-Services genutzt werden.
Mit der Container-Technik lassen sich Web-Dynpro-Views in andere Views integrieren. Damit
wird eine Modularisierung ermöglicht.
Jede View besitzt einen ihr zugeordneten View-Controller. Technisch handelt es sich beim
View-Controller um eine ABAP-Klasse. Der Entwickler implementiert den Quelltext für den
View-Controller nur zum Teil. Ein großer Teil des Quelltextes wird gemäß den
Designspezifikationen des Entwicklers automatisch generiert. Der Context des View-
Controllers dient als Daten-Container und enthält die in der View anzuzeigenden Daten
(entspricht der TABLES-Struktur beim klassischen Dynpro).

346 © Copyright. Alle Rechte vorbehalten.


Lektion: Einführung in Web Dynpro ABAP

Web-Dynpro-Component

Abbildung 220: Web-Dynpro-Component

Windows bündeln mehrere Views und legen die Navigationsmöglichkeiten zwischen ihnen fest
(View-Abfolgen). Eine Component enthält ein oder mehrere Windows und besitzt einen
eigenen Controller mit Context, in dem Daten abgelegt werden, die auf mehreren Views der
Component angezeigt werden sollen.

© Copyright. Alle Rechte vorbehalten. 347


Kapitel 10 : Web Dynpro ABAP

Entwicklungsumgebung und Laufzeitarchitektur

Abbildung 221: Entwicklungsumgebung und Laufzeitarchitektur

Eine Web-Dynpro-Anwendung verweist auf ein Window mit Default-View (Start-View), die bei
Aufruf der Anwendung angezeigt wird.
Eine Component mit zugehörigen Windows ist als abgeschlossene Einheit verwendbar in
verschiedenen Web-Dynpro-Anwendungen. Dadurch kann der Implementierungs- und
Wartungsaufwand verringert werden.

348 © Copyright. Alle Rechte vorbehalten.


Lektion: Einführung in Web Dynpro ABAP

Web-Dynpro-Context

Abbildung 222: Web-Dynpro-Context

Der Context eines jeden View-Controllers enthält Daten, die auf der View angezeigt werden
sollen (Daten-Container). Der Datentransport zwischen View Context und den UI-Elementen
der View erfolgt durch entsprechende Zuordnung (Data Binding).
Auch eine Component hat einen Context. Darin werden Daten abgelegt, die in verschiedenen
Views der Component angezeigt werden sollen. In solchen Fällen werden meist in den
entsprechenden View-Contexts Referenzen auf die Component-Daten realisiert (Context
Mapping).

© Copyright. Alle Rechte vorbehalten. 349


Kapitel 10 : Web Dynpro ABAP

Anwendungsbeispiel

Abbildung 223: Anwendungsbeispiel

Sie möchten in mehreren Stufen eine Web-Dynpro-Anwendung entwickeln, mit der die
Benutzer die Daten zu einzelnen Flugverbindungen anzeigen können.
Das Programm besteht aus einer Web-Dynpro-Component mit zwei Views. In der ersten View
wählt der Benutzer eine Flugverbindung. In der zweiten View werden die Details zu dieser
Verbindung angezeigt.
Die beiden Views werden in ein Web-Dynpro-Window der Component eingebettet und dort so
über Navigationslinks miteinander verbunden, dass der Anwender durch Betätigen der
Drucktasten zwischen den Views hin und her navigieren kann.
Die im Window definierte View-Folge wird über eine Web-Dynpro-Anwendung gestartet.

ZUSAMMENFASSUNG DER LEKTION


Nun können Sie
● Web Dynpro ABAP beschreiben

350 © Copyright. Alle Rechte vorbehalten.


Kapitel 10
Lektion 2
Implementieren einer Navigation in Web
Dynpro

ÜBERBLICK ÜBER DIE LEKTION


Diese Lektion erläutert, wie Sie eine einfache Web-Dynpro-ABAP-Anwendung strukturieren
und programmieren.

Unternehmensszenario
Sie möchten eine Web-Dynpro-Component mit mehreren Views und mit Navigation zwischen
diesen Views anlegen. Dazu müssen Sie über folgende Kenntnisse verfügen:
● Anlegen einer Web-Dynpro-Component
● Anlegen von Web-Dynpro-Views
● Einbetten von Views in Web-Dynpro-Windows
● Einrichten der Navigation
● Anlegen von Drucktasten und Auswerten der Benutzeraktionen
● Anlegen von Web-Dynpro-Anwendungen

LERNZIELE DER LEKTION


Am Ende dieser Lektion können Sie:
● Eine Navigation in einem Web Dynpro implementieren

© Copyright. Alle Rechte vorbehalten. 351


Kapitel 10 : Web Dynpro ABAP

Web-Dynpro-Navigation

Abbildung 224: Implementierungsstufe 1: Web-Dynpro-Views mit Drucktasten und Navigation

In der ersten Stufe unseres Beispiels soll eine Web-Dynpro-Component mit zwei Views
angelegt werden. Auf den beiden Views soll sich jeweils eine Drucktaste befinden. Das
Programm soll so implementiert werden, dass bei Betätigen der Drucktasten zur jeweils
anderen View navigiert wird. Zum Start der View-Folge wird eine Web-Dynpro-Anwendung
angelegt.

352 © Copyright. Alle Rechte vorbehalten.


Lektion: Implementieren einer Navigation in Web Dynpro

Web-Dynpro-Component

Abbildung 225: Anlegen einer Web-Dynpro-Component

Das Anlegen einer Web-Dynpro-Component erfolgt ganz analog zum Anlegen eines neuen
ABAP-Programms über das Kontextmenü im Navigationsbereich des Object Navigators.
Beim Anlegen einer neuen Web-Dynpro-Component werden automatisch ein Web-Dynpro-
Window und eine Web-Dynpro-View angelegt. Später können Sie in der Component auch
noch weitere Windows und Views anlegen.

© Copyright. Alle Rechte vorbehalten. 353


Kapitel 10 : Web Dynpro ABAP

Views und Windows

Abbildung 226: Anlegen einer Web-Dynpro-View

Zum Anlegen einer Web-Dynpro-View verwenden Sie das Kontextmenü im


Navigationsbereich des Object Navigators. Ordnen Sie der View einen Namen und eine
Beschreibung zu.

354 © Copyright. Alle Rechte vorbehalten.


Lektion: Implementieren einer Navigation in Web Dynpro

Einbetten einer Web-Dynpro-View

Abbildung 227: Einbetten einer Web-Dynpro-View

Um eine Web-Dynpro-View in ein Window einzubetten, öffnen Sie im Object Navigator das
Window, und zeigen Sie die Window-Struktur an.

Methoden zum Einbetten von Views


Sie haben folgende Möglichkeiten, um die Views einzubetten:
● Kontextmenü
In der Window-Struktur finden Sie im Kontextmenü für den Namen des Windows den
Menüeintrag View einbetten (siehe Abbildung). Die einzubettende View wählen Sie auf dem
folgenden Eingabebild über die Eingabehilfe (F4-Hilfe) aus.
● Über Drag & Drop aus dem Navigationsbereich
Wenn Sie im Navigationsbereich den Knoten Views öffnen, können Sie die einzubettende
View direkt per Drag&Drop in die Window-Struktur und auf das Window ziehen.

© Copyright. Alle Rechte vorbehalten. 355


Kapitel 10 : Web Dynpro ABAP

Navigation zwischen Views

Abbildung 228: Navigation zwischen Web-Dynpro-Views

Um innerhalb eines Windows von einer View auf eine andere navigieren zu können, muss
zwischen den Views ein Navigationslink angelegt werden. Ein Navigationslink führt von einem
Outbound-Plug einer View zu einem Inbound-Plug einer anderen View.
Outbound-Plugs und Inbound-Plugs einer View legen die möglichen Eingänge und Ausgänge
fest. Eine View kann prinzipiell mehrere Inbound-Plugs und Outbound-Plugs besitzen. Mit
dem Navigationslink in der Abbildung können Sie zur OUTPUT_VIEW navigieren, wenn Sie die
INPUT_VIEW über deren Outbound-Plug OUT_GO verlassen. Die OUTPUT_VIEW wird dann
über ihren Inbound-Plug IN_DEFAULT gestartet.
Durch das Anlegen der Navigationslinks wird die Abfolge der Views innerhalb des jeweiligen
Windows festgelegt. Das geschieht rein anhand der vorhandenen Plugs und unabhängig von
der Implementierung der Views.
Einen Plug legen Sie ganz einfach an, indem Sie die entsprechende View bearbeiten und auf
dem Reiter Inbound-Plugs oder Outbound-Plugs einen Namen und einen beschreibenden Text
für den Plug eintragen. Für fortgeschrittene Anwendungen ist es außerdem möglich, die
Outbound-Plugs mit Parametern zu versehen.

Hinweis:
Ab SAP NetWeaver 7.0 EhP2 haben Sie die Möglichkeit, in der Window-Editor-
Ansicht zwischen einer hierarchischen Ansicht und einer grafischen
Modellierungs-Ansicht zu wechseln. Sie können entscheiden, welche Ansicht für
Ihre Zwecke besser geeignet ist.

356 © Copyright. Alle Rechte vorbehalten.


Lektion: Implementieren einer Navigation in Web Dynpro

Anlegen eines Navigationslinks

Abbildung 229: Anlegen eines Navigationslinks

Nach dem Anlegen der Plugs sind in der Struktur eines Windows neben den eingebetteten
Views auch deren Plugs sichtbar. Zwischen diesen Plugs können Sie per Drag&Drop
Navigationslinks anlegen.

© Copyright. Alle Rechte vorbehalten. 357


Kapitel 10 : Web Dynpro ABAP

Drucktasten und Navigation

Abbildung 230: Prozessablauf bei Betätigung einer Drucktaste

Im Beispielprogramm soll die Navigation jeweils durch das Betätigen einer Drucktaste
ausgelöst werden.

Prozessablauf bei Betätigung einer Drucktaste


Der Prozessablauf bei Betätigung einer Drucktaste ist wie folgt:
● Betätigt der Anwender eine Drucktaste, wird ein Aktionscode vom Browser an den
Applikationsserver übertragen. Dieser Aktionscode wurde vom Entwickler für die jeweilige
View definiert und der Drucktaste zugeordnet.
● Zu jedem Aktionscode gehört eine spezielle Methode (Aktionsbehandlermethode im View-
Controller), die jetzt als Reaktion auf die Aktion ausgeführt wird.
● Für die Navigation zur nächsten View verlassen Sie die aktuelle View über den
entsprechenden Outbound-Plug. Man sagt, der Outbound-Plug wird „gefeuert“.

358 © Copyright. Alle Rechte vorbehalten.


Lektion: Implementieren einer Navigation in Web Dynpro

Anlegen einer Drucktaste

Abbildung 231: Anlegen einer Drucktaste

Möglichkeiten zum Anlegen von Drucktasten in Layout-Views


Sie haben folgende Möglichkeiten, eine Drucktaste im Layout der View anzulegen:
● Über das Kontextmenü in der Elementhierarchie
Öffnen Sie in der Elementhierarchie rechts oben das Kontextmenü für den Knoten
ROOTUIELEMENTCONTAINER, und wählen Sie in der Auswahlliste die Option Element
einfügen. Geben Sie Name und Typ des UI-Elements an (wie in der Abbildung gezeigt).
● Über die Werkzeugleiste
Wählen Sie in der Werkzeugleiste am linken Rand das Werkzeug Button, und platzieren Sie
die Drucktaste in der Layout-Vorschau in der Mitte.

© Copyright. Alle Rechte vorbehalten. 359


Kapitel 10 : Web Dynpro ABAP

Pflege der Attribute von Drucktasten

Abbildung 232: Pflege der Attribute von Drucktasten

Im Attribute-Fenster am rechten unteren Rand werden jeweils für ein Element des Layouts die
Attribute angezeigt. Hier können Sie für eine Drucktaste Text eingeben oder eine Ikone
zuordnen.
Um der Drucktaste eine Aktion zuzuordnen, wählen Sie das Attribut onAction, und klicken Sie
auf das Anlegen-Symbol in der dritten Spalte (wie in der Abbildung gezeigt). Im folgenden
Dialogfenster Aktion anlegen ordnen Sie der Drucktaste eine Aktion zu. Wenn die Aktion nicht
schon vorher für die View definiert wurde (Registerkarte Aktionen), können Sie sie hier direkt
neu anlegen.
Geben Sie im Feld Outbound-Plug den Outbound-Plug an, der als Reaktion auf diese
Drucktaste gefeuert werden soll. Dann wird die Aktionsbehandlermethode nicht leer angelegt,
sondern enthält automatisch den Quelltext zum Feuern des Outbound-Plugs.

360 © Copyright. Alle Rechte vorbehalten.


Lektion: Implementieren einer Navigation in Web Dynpro

Web-Dynpro-Anwendung

Abbildung 233: Anlegen einer Web-Dynpro-Anwendung

Der Einstiegspunkt in eine Web-Dynpro-View-Folge, also ein Web-Dynpro-Window, ist immer


eine Web-Dynpro-Anwendung. Sie zeigt auf das Window bzw. die gleichnamige Interface-View
und den dafür automatisch angelegten Inbound-Plug DEFAULT.
Eine Web-Dynpro-Anwendung wird über das Kontextmenü des Object Navigators angelegt
(wie in der Abbildung gezeigt). Im nachfolgenden Dialogfenster wird sie mit der Component,
der Interface-View und dem Standard-Plug verknüpft.
Sie können eine Web-Dynpro-Anwendung über eine entsprechende Drucktaste direkt aus der
Entwicklungsumgebung testen. Alternativ können Sie die zugeordnete URL direkt in die
Adresszeile eines Browsers eingeben.

ZUSAMMENFASSUNG DER LEKTION


Nun können Sie
● Eine Navigation in einem Web Dynpro implementieren

© Copyright. Alle Rechte vorbehalten. 361


Kapitel 10 : Web Dynpro ABAP

362 © Copyright. Alle Rechte vorbehalten.


Kapitel 10
Lektion 3
Implementieren des Datentransports in Web
Dynpro

ÜBERBLICK ÜBER DIE LEKTION


Diese Lektion erläutert, wie Sie eine einfache Web-Dynpro-ABAP-Anwendung mit Ein-/
Ausgabefeldern und Datenverarbeitung programmieren.

Unternehmensszenario
Sie möchten eine Web-Dynpro-Component mit verschiedenen Views und mit
Datentransporten zwischen diesen Views anlegen. Dazu müssen Sie über folgende
Kenntnisse verfügen:
● Generieren eines Service-Aufrufs
● Definieren des Context-Mappings
● Definieren der Datenbindung
● Anlegen und Anordnen von Elementen im View-Layout

LERNZIELE DER LEKTION


Am Ende dieser Lektion können Sie:
● Datentransport in Web Dynpro implementieren

© Copyright. Alle Rechte vorbehalten. 363


Kapitel 10 : Web Dynpro ABAP

Datentransport

Abbildung 234: Implementierungsstufe 2: Ein- und Ausgabefelder anlegen und Daten anzeigen

In der zweiten Stufe des Beispiels sollen die Web-Dynpro-Views mit Ein- und Ausgabefeldern
erweitert werden und die Datenbeschaffung und der Datentransport implementiert werden.
Auf der ersten View soll der Benutzer über Fluggesellschaftskürzel und Flugnummer eine
Flugverbindung auswählen. Bei Betätigung der Drucktaste sollen diese Informationen im
Programm weiterverarbeitet und die Detailinformationen zur Fluggesellschaft aus der
Datenbank gelesen werden.
Die detaillierten Informationen sollen nach der Navigation auf der zweiten View angezeigt
werden.

364 © Copyright. Alle Rechte vorbehalten.


Lektion: Implementieren des Datentransports in Web Dynpro

Datenbeschaffung und Datentransport

Abbildung 235: Datenbeschaffung und Datentransport

Um dem MVC-Programmiermodell zu entsprechen, soll jede Datenbeschaffung einer Web-


Dynpro-Component zentral in einer Methode des Component-Controllers gekapselt werden.
In diesem Fall wird dieser Service-Aufruf den Aufruf eines Funktionsbausteins enthalten. Die
vom Funktionsbaustein benötigten Daten werden dabei dem Context des Component-
Controllers entnommen. Entsprechend wird nach dem Funktionsbausteinaufruf das Ergebnis
wieder im Context abgelegt.
Der Datentransport zwischen dem zentralen Component-Controller und den einzelnen View-
Controllern erfolgt über das Context-Mapping. Es handelt sich dabei um ein Referenzieren
von einem Context auf einen anderen, der Datentransport funktioniert also automatisch in
beide Richtungen.
Der Datentransport zwischen den Ein- und Ausgabefeldern einer View und dem Context
dieser View erfolgt durch Datenbindung.

Aufgaben zu Datenbeschaffung und Datentransport

● Sie müssen die folgenden Aufgaben ausführen:


- Web-Dynpro-Service-Aufruf anlegen
- Context-Mapping einrichten
- Ein-/Ausgabefelder anlegen
- Datenbindung einrichten
- Servicemethode zur Datenbeschaffung aufrufen

© Copyright. Alle Rechte vorbehalten. 365


Kapitel 10 : Web Dynpro ABAP

Notiz:
Den Controller-Context müssen Sie nicht anlegen. Der Service Call Wizard legt
den Controller-Context basierend auf der Schnittstelle des Funktionsbausteins für
Sie an.

Anlegen eines Service-Aufrufs

Abbildung 236: Anlegen eines Service-Aufrufs

Zum Anlegen eines Service-Aufrufs stellt die ABAP Workbench einen Web Dynpro Wizard zur
Verfügung, der im Navigationsbereich des Object Navigators über das Kontextmenü
angesprochen werden kann. Nachdem Sie den Wizard gestartet haben, müssen Sie zunächst
den Controller auswählen, in dem der Service-Aufruf angelegt werden soll. In diesem Fall ist
das der existierende Component-Controller. Sie können im Wizard auch einen zusätzlichen
Controller anlegen.
Dann fragt der Wizard ab, welcher Funktionsbaustein aufgerufen werden soll, wie die
Servicemethode heißen soll und welche Parameter des Funktionsbausteins er beim Aufruf
mit Aktualparametern versorgen soll.

Generieren von Komponenten mit dem Wizard

● Der Wizard generiert im ausgewählten Controller folgende Bestandteile:


- eine Servicemethode (Name beginnt mit EXECUTE_)
- Context-Knoten für alle Funktionsbaustein-Parameter, die beim Aufruf versorgt werden
sollen

366 © Copyright. Alle Rechte vorbehalten.


Lektion: Implementieren des Datentransports in Web Dynpro

- den Aufruf des Funktionsbausteins in der Servicemethode


- den Quelltext zum Lesen der Daten aus dem Context
- den Quelltext zum Füllen des Context mit dem Ergebnis des Funktionsbaustein-Aufrufs

Context-Mapping

Abbildung 237: Einrichten des Context-Mappings

Damit die Daten aus dem Context des Component-Controllers auch in den Views zur
Verfügung stehen, müssen Sie die entsprechenden Knoten in den Context des View-
Controllers kopieren und auf die Knoten des Component-Controllers abbilden (mappen). Das
Context-Mapping ist auch erforderlich, damit Benutzereingaben auf einer View im
Component-Controller zur Verfügung stehen.
Um die Knoten zu kopieren und gleichzeitig das Context-Mapping einzurichten, öffnen Sie die
entsprechende View im Änderungsmodus, und wählen Sie die Registerkarte Context.
Links sehen Sie den Context des View-Controllers (noch leer bis auf einen Wurzelknoten mit
dem Namen CONTEXT) und rechts den generierten Context des Component-Controllers.
Kopieren Sie einen Knoten, indem Sie ihn aus dem rechten Bereich auf den Wurzelknoten des
View-Controller-Context im linken Bereich ziehen (Drag&Drop).

© Copyright. Alle Rechte vorbehalten. 367


Kapitel 10 : Web Dynpro ABAP

Datenbindung

Abbildung 238: Anlegen eines Layout-Formulars

Auch für das Anlegen von Ein-/Ausgabefeldern und das Einrichten der Datenbindung stellt die
ABAP Workbench einen Wizard zur Verfügung. Der Wizard setzt voraus, dass der Knoten, an
den gebunden werden soll, bereits im Context des View-Controllers vorhanden ist. Ist diese
Voraussetzung erfüllt, ist das Anlegen eines Layout-Formulars für den Knoten einfach.
Öffnen Sie die View im Änderungsmodus, und wählen Sie die Registerkarte Layout. Wählen
Sie in der Elementhierarchie (rechts oben) den Eintrag ROOTUIELEMENTCONTAINER.
Starten Sie den Web Dynpro Wizard über die entsprechende Drucktaste (wie in der Abbildung
gezeigt), und wählen Sie die Vorlage Form. Nachdem Sie Form gewählt haben, gelangen Sie in
einen Dialog, in dem Sie direkt den Knoten auswählen können, für den das Formular erstellt
werden soll.

368 © Copyright. Alle Rechte vorbehalten.


Lektion: Implementieren des Datentransports in Web Dynpro

Einstellungen für das NetWeaver-Layout-Formular

Abbildung 239: Einstellungen für das NetWeaver-Layout-Formular

Zurück im Dialog, in dem Sie Context gewählt haben, können Sie nun einige Details des
Formulars anpassen. Wenn Sie sich entscheiden, für das Formular einen eigenen UI-
Container zu verwenden, können Sie auch ein Layout dafür auswählen.
Außerdem können Sie einen Text für die Formularüberschrift eingeben. Wenn der Knoten
mehrere Felder aufweist, können Sie diese Felder einzeln auswählen oder ausschließen. Sie
können außerdem aus einer Liste mit einfachen UI-Elementen auswählen, was erzeugt
werden soll.

© Copyright. Alle Rechte vorbehalten. 369


Kapitel 10 : Web Dynpro ABAP

Implementierung von Methodenaufrufen

Abbildung 240: Implementierung von Methodenaufrufen

Damit auf der zweiten View die Details zur Flugverbindung angezeigt werden können, muss
vor der Navigation die Servicemethode aufgerufen werden. In unserem Beispiel erfolgt dieser
Aufruf in der Aktionsbehandlermethode (Methode ONACTION...) der Eingabe-View.
Auch der Aufruf von Methoden kann mit dem Web Dynpro Wizard generiert werden. Öffnen
Sie dazu den Quelltext der Aktionsbehandlermethode, positionieren Sie den Cursor vor dem
Quelltext zum Feuern des Outbound-Plugs, und betätigen Sie die Drucktaste zum Starten des
Wizards (wie in der Abbildung gezeigt).
Wählen Sie auf dem nachfolgenden Bild den Auswahlknopf Methodenaufruf im verwendeten
Controller, und tragen Sie mittels Eingabehilfe den Component-Controller als verwendeten
Controller ein. Wählen Sie ebenfalls über die Eingabehilfe die Methode aus, die aufgerufen
werden soll.
Zum Abschluss des Vorgangs erzeugt der Wizard den Quelltext zum Aufruf der Methode.

ZUSAMMENFASSUNG DER LEKTION


Nun können Sie
● Datentransport in Web Dynpro implementieren

370 © Copyright. Alle Rechte vorbehalten.


Kapitel 10

Überprüfung des Lernerfolgs

1. Was startet die im Window einer Web-Dynpro-Component definierte Dynpro-Folge?


Wählen Sie die richtige Antwort.

X A Web-Dynpro-Struktur

X B Web-Dynpro-Anwendung

X C Web-Dynpro-Component

X D Web-Dynpro-Content

2. Was können Sie innerhalb einer Web-Dynpro-Component definieren?


Wählen Sie die richtigen Antworten.

X A View

X B Component-Controller

X C Anwendung

X D Window

X E Dynpro

3. Womit wird der Datentransport zwischen dem zentralen Component-Controller und den
einzelnen View-Controllern ausgeführt?
Wählen Sie die richtige Antwort.

X A Service-Aufruf

X B Context-Mapping

X C Datenbindung

X D Ein-/Ausgabefelder

© Copyright. Alle Rechte vorbehalten. 371


Kapitel 10

Überprüfung des Lernerfolgs - Antworten

1. Was startet die im Window einer Web-Dynpro-Component definierte Dynpro-Folge?


Wählen Sie die richtige Antwort.

X A Web-Dynpro-Struktur

X B Web-Dynpro-Anwendung

X C Web-Dynpro-Component

X D Web-Dynpro-Content

Das ist richtig. Die im Window definierte Dynpro-Folge wird über eine Web-Dynpro-
Anwendung gestartet. Weitere Informationen erhalten Sie in der Lektion „Beschreibung
von Web Dynpro ABAP“ im Abschnitt „Anwendungsbeispiel“ im Kurs BC400.

2. Was können Sie innerhalb einer Web-Dynpro-Component definieren?


Wählen Sie die richtigen Antworten.

X A View

X B Component-Controller

X C Anwendung

X D Window

X E Dynpro

Das ist richtig. Eine Component enthält ein oder mehrere Windows und besitzt einen
eigenen Controller, den COMPONENTCONTROLLER. Windows umfassen eine oder
mehrere Views und legen die Navigationsmöglichkeiten zwischen ihnen fest (View-
Abfolgen). Weitere Informationen erhalten Sie in der Lektion „Beschreibung von Web
Dynpro ABAP“ im Abschnitt „Web-Dynpro-Component“ im Kurs BC400.

372 © Copyright. Alle Rechte vorbehalten.


Kapitel 10 : Überprüfung des Lernerfolgs - Antworten

3. Womit wird der Datentransport zwischen dem zentralen Component-Controller und den
einzelnen View-Controllern ausgeführt?
Wählen Sie die richtige Antwort.

X A Service-Aufruf

X B Context-Mapping

X C Datenbindung

X D Ein-/Ausgabefelder

Das ist richtig. Der Datentransport zwischen dem zentralen Component-Controller und
den einzelnen View-Controllern erfolgt über das Context-Mapping. Weitere Informationen
erhalten Sie in der Lektion „Implementierung des Datentransports in Web Dynpro“ im
Abschnitt „Datentransport“ im Kurs BC400.

© Copyright. Alle Rechte vorbehalten. 373


Kapitel 10 : Überprüfung des Lernerfolgs - Antworten

374 © Copyright. Alle Rechte vorbehalten.


KAPITEL 11 Werkzeuge zur
Programmanalyse

Lektion 1
Verbessern der ABAP-Code-Qualität mit dem Code Inspector 377

LERNZIELE

● Den Code Inspector beschreiben


● Den Code Inspector nutzen

© Copyright. Alle Rechte vorbehalten. 375


Kapitel 11 : Werkzeuge zur Programmanalyse

376 © Copyright. Alle Rechte vorbehalten.


Kapitel 11
Lektion 1
Verbessern der ABAP-Code-Qualität mit dem
Code Inspector

ÜBERBLICK ÜBER DIE LEKTION


Diese Lektion erläutert den Zweck und die Grundfunktionen des Code Inspectors. Es soll
dabei nur eine kurze Einführung in dieses Werkzeug gegeben werden. Weitergehende
Informationen finden Sie in der entsprechenden Dokumentation bzw. erhalten Sie in
weiterführenden Schulungen.

Unternehmensszenario
Sie möchten Ihre Programme auf Performance, typische semantische Programmierfehler
und Sicherheitslücken prüfen. Dazu müssen Sie über folgende Kenntnisse verfügen:
● Zweck und Verwendung des Code Inspectors
● Die wichtigsten Eigenschaften des Code Inspectors
● Verwendung des Code Inspectors zur einfachen Analyse Ihrer Programme

LERNZIELE DER LEKTION


Am Ende dieser Lektion können Sie:
● Den Code Inspector beschreiben
● Den Code Inspector nutzen

Der Code Inspector


Der Code Inspector bietet Ihnen die Möglichkeit, Ihre Programme bezüglich Performance,
Sicherheit und typischen Semantikfehlern untersuchen zu lassen. Im Folgenden sind einige
der Prüfkriterien aufgelistet.

Typische Qualitätsprobleme mit ABAP-Code

● Typische Performance-Probleme
- Werden bei Datenbankzugriffen Indizes benutzt?
- Sind SELECT-Anweisungen in Schleifen eingebettet?
● Typische Sicherheitsprobleme
- Werden Daten von einem anderen Mandanten als dem Anmeldemandanten gelesen?
- Werden in der SELECT-Anweisung die Datenbanktabelle bzw. die WHERE-Klausel
dynamisch angegeben?
● Typische Semantikfehler

© Copyright. Alle Rechte vorbehalten. 377


Kapitel 11 : Werkzeuge zur Programmanalyse

- Wird nach AUTHORITY CHECK-Anweisungen jeweils der sy-subrc geprüft?


- Wird bei Angabe von CLIENT SPECIFIED auch ein Mandant angegeben?

Aufruf des Code Inspectors

Abbildung 241: Aufruf des Code Inspectors

Es gibt verschiedene Möglichkeiten, den Code Inspector aufzurufen.


Eine Möglichkeit wird in der Abbildung veranschaulicht. Dabei wählen Sie im Kontextmenü der
Objektliste den Menüpfad Prüfen → Code Inspector und führen eine Standard-Inspektion
durch. Den gleichen Aufruf erhalten Sie, wenn Sie Funktionsbaustein → Prüfen → Code
Inspector wählen.

378 © Copyright. Alle Rechte vorbehalten.


Lektion: Verbessern der ABAP-Code-Qualität mit dem Code Inspector

Verwendung des Code Inspectors

Abbildung 242: Inspektionsergebnis

Als Ergebnis einer Inspektion erhalten Sie eine Auflistung der Fehler- bzw. Warnmeldungen.
Über die Dokumentation der jeweiligen Meldung erhalten Sie sowohl eine detaillierte
Fehlerbeschreibung als auch Verbesserungsvorschläge. Per Doppelklick auf den Fehlertext
gelangen Sie zur entsprechenden Programmanweisung.
Mitunter ist es sinnvoll oder gar unumgänglich, ABAP-Coding zu schreiben, das der Code
Inspector monieren würde, etwa den Aufruf einer Transaktion. In solchen Fällen können Sie –
ähnlich wie bei der erweiterten Syntaxprüfung – den Pseudokommentar "#EC * verwenden,
um die Warnungen des Code Inspectors für die betreffende Anweisung auszublenden.
Wenn Sie aus dem ABAP Editor heraus eine Prüfung initiieren, verwendet der Code Inspector
eine Default-Prüfvariante mit einer vordefinierten Menge von Prüfungen. Sie können diese
Default-Prüfvariante überschreiben, indem Sie eine neue Prüfvariante mit dem Namen
DEFAULT anlegen.
Diese neue Prüfvariante übersteuert die Standard-Variante für Ihren Benutzer, auch
mandantenübergreifend. Wenn Sie Ihre Default-Prüfvariante löschen, werden die Prüfungen
automatisch wieder mit der Standard-Variante durchgeführt. Aus diesem Grund wird
empfohlen, eigene Prüfvarianten zu definieren, anstatt die Default-Variante zu überschreiben.

© Copyright. Alle Rechte vorbehalten. 379


Kapitel 11 : Werkzeuge zur Programmanalyse

Definition von Prüfvarianten, Objektmengen und Inspektionen

Abbildung 243: Erweiterte Code-Inspector-Prüfung

Um individuelle Prüfungen zu definieren, starten Sie den Code Inspector über


Transaktionscode SCI oder aus dem Menü SAP Easy Access über den Pfad
Werkzeuge → ABAP Workbench → Test → Code Inspector.

Bereiche des Code Inspectors


● Auf dem Einstiegsbild finden Sie die folgenden Bereiche:
- Prüfvariante
Die Prüfvariante legt fest, was überprüft werden soll, z.B. Programmierkonventionen
oder Performance.
- Objektmenge
Die Objektmenge legt fest, welche Repository-Objekte geprüft werden sollen.
- Inspektion
Inspektion ist die Bezeichnung für die eigentliche Prüfung. Wenn Sie die Inspektion
einschließlich ihrer Ergebnisse aufbewahren oder sie im Hintergrund ausführen
möchten, müssen Sie ihr einen Namen geben. Wenn Sie keinen Namen für die
Inspektion vergeben, werden die Ergebnisse nicht gespeichert.

Eine Inspektion verwendet eine vorher definierte Prüfvariante und eine ebenfalls vorher
definierte Objektmenge. Allerdings ist es auch möglich, temporäre Objektmengen und
Prüfvarianten anzulegen, die nur für eine Inspektion gelten und nicht in anderen Inspektionen
wiederverwertbar sind.

380 © Copyright. Alle Rechte vorbehalten.


Lektion: Verbessern der ABAP-Code-Qualität mit dem Code Inspector

Hinweis:
Prüfvarianten, Objektmengen und Inspektionen können Sie privat oder öffentlich
anlegen. Mit der entsprechenden Drucktaste im Eingabefeld können Sie
zwischen diesen beiden Kategorien wechseln. Beachten Sie, dass private Objekte
nur von Ihnen benutzt werden können, während öffentliche für alle Benutzer des
Systems verfügbar sind.

Eine Prüfvariante besteht aus einer oder mehreren Prüfkategorien, die wiederum aus einer
oder mehreren Einzelprüfungen (Inspektionen) bestehen. Diese Einzelprüfungen können Sie
parametrisieren, z.B. durch ein Schlüsselwort oder ein Kennzeichen für einen bestimmten
Teilaspekt der Prüfung. In der Regel wird von Einzelprüfungen ein bestimmter Objekttyp
untersucht, beispielsweise die „Prüfung der Tabelleneigenschaften“, bei der nur DDIC-
Tabellen untersucht werden.

Prüfvariante

Abbildung 244: Prüfvariante

Prüfkategorien
Die Einzelprüfungen sind unterschiedlichen Prüfkategorien zugeordnet. Die wichtigsten
Prüfkategorien sind:

Allgemeine Prüfungen
Diese Kategorie umfasst Datenaufbereitungen, wie z.B. die Auflistung der Tabellennamen
aus SELECT-Anweisungen.
Performance-Prüfungen
Diese Kategorie umfasst Prüfungen zur Performance und zum Ressourcenverbrauch,
wie z.B.: Analyse der WHERE-Bedingung für SELECT, Analyse der WHERE-Bedingung für
UPDATE und DELETE, SELECT-Anweisungen, die am Tabellenpuffer vorbei lesen und
inperformante Operationen auf internen Tabellen.
Sicherheitsprüfungen

© Copyright. Alle Rechte vorbehalten. 381


Kapitel 11 : Werkzeuge zur Programmanalyse

Diese Kategorie umfasst Prüfungen zu kritischen Anweisungen,


mandantenübergreifenden Abfragen und unzureichenden Berechtigungsprüfungen.
Syntaxprüfung und Generierung
Diese Kategorie umfasst die ABAP-Syntax-Prüfung, eine erweiterte Programmprüfung
und Generierung.
Programmierkonventionen
Diese Kategorie umfasst Prüfungen zu Namenskonventionen.
Suchfunktionen
Diese Kategorie umfasst Suchen im ABAP-Coding nach Tokens (Wörtern) und
Anweisungen.

ZUSAMMENFASSUNG DER LEKTION


Nun können Sie
● Den Code Inspector beschreiben
● Den Code Inspector nutzen

382 © Copyright. Alle Rechte vorbehalten.


Kapitel 11

Überprüfung des Lernerfolgs

1. Welche der folgenden Aussagen zum Code Inspector treffen zu?


Wählen Sie die richtigen Antworten.

X A Sie können nur die Default-Prüfvariante verwenden.

X B Sie können eine Prüfvariante anlegen, um zu definieren, was genau überprüft


werden soll.

X C Wenn der Code Inspector über das Kontextmenü im Object Navigator gestartet
wird, wird eine Standard-Inspektion durchgeführt.

X D Prüfvarianten, Objektmengen sowie Inspektionen können über die Transaktion SCI


definiert werden.

2. Welche Aspekte berücksichtigt der Code Inspector bei der Prüfung eines Programms?
Wählen Sie die richtigen Antworten.

X A Syntaxprüfung

X B Typische Semantikfehler (z. B. AUTHORITY-CHECK-Anweisung ohne


anschließende SY-SUBRC-Prüfung)

X C Performance (z.B. geschachtelte SELECT-Anweisungen)

X D Sicherheit (z.B. mandantenübergreifende Datenzugriffe)

X E Formatierung des Quelltextes (z.B. Einrücken der in Schleifen befindlichen


Programmzeilen)

© Copyright. Alle Rechte vorbehalten. 383


Kapitel 11

Überprüfung des Lernerfolgs - Antworten

1. Welche der folgenden Aussagen zum Code Inspector treffen zu?


Wählen Sie die richtigen Antworten.

X A Sie können nur die Default-Prüfvariante verwenden.

X B Sie können eine Prüfvariante anlegen, um zu definieren, was genau überprüft


werden soll.

X C Wenn der Code Inspector über das Kontextmenü im Object Navigator gestartet
wird, wird eine Standard-Inspektion durchgeführt.

X D Prüfvarianten, Objektmengen sowie Inspektionen können über die Transaktion SCI


definiert werden.

Das ist richtig. Wenn Sie aus dem ABAP Editor heraus eine Prüfung initiieren, verwendet
der Code Inspector eine Default-Prüfvariante mit einer vordefinierten Menge von
Prüfungen. Sie können diese Default-Prüfvariante überschreiben, indem Sie eine neue
Prüfvariante anlegen. Beim Aufruf des Code Inspectors aus dem Kontextmenü der
Objektliste wird die Variante DEFAULT verwendet. Um individuelle Prüfungen
(Prüfvarianten, Objektmengen und Inspektionen) zu definieren, starten Sie den Code
Inspector über den Transaktionscode SCI. Weitere Informationen erhalten Sie in der
Lektion „Verbesserung der ABAP-Code-Qualität mit dem Code Inspector“ im Abschnitt
„Definition von Prüfvarianten, Objektmengen und Inspektionen“ im Kurs BC400 (Kapitel
11, Lektion 1) oder TAW10 Teil I (Kapitel 14, Lektion 1).

384 © Copyright. Alle Rechte vorbehalten.


Kapitel 11 : Überprüfung des Lernerfolgs - Antworten

2. Welche Aspekte berücksichtigt der Code Inspector bei der Prüfung eines Programms?
Wählen Sie die richtigen Antworten.

X A Syntaxprüfung

X B Typische Semantikfehler (z. B. AUTHORITY-CHECK-Anweisung ohne


anschließende SY-SUBRC-Prüfung)

X C Performance (z.B. geschachtelte SELECT-Anweisungen)

X D Sicherheit (z.B. mandantenübergreifende Datenzugriffe)

X E Formatierung des Quelltextes (z.B. Einrücken der in Schleifen befindlichen


Programmzeilen)

Das ist richtig. Die wichtigsten Prüfkategorien sind: Allgemeine Prüfungen,


Performanceprüfungen, Sicherheitsprüfungen, Syntaxprüfung und -generierung,
Programmier-Konventionen, Suchfunktionen. Weitere Informationen erhalten Sie in der
Lektion „Verbesserung der ABAP-Code-Qualität mit dem Code Inspector“ im Abschnitt
„Prüfkategorien“ im Kurs BC400 (Kapitel 11, Lektion 1) oder TAW10 Teil I (Kapitel 14,
Lektion 1).

© Copyright. Alle Rechte vorbehalten. 385


Kapitel 11 : Überprüfung des Lernerfolgs - Antworten

386 © Copyright. Alle Rechte vorbehalten.


KAPITEL 12 ABAP Development Tools for
SAP NetWeaver

Lektion 1
Einführung in ABAP Development Tools for SAP NetWeaver 389

Lektion 2
Anlegen eines ABAP-Projekts in Eclipse 393

LERNZIELE

● Die Eclipse-basierte ABAP-Entwicklung beschreiben


● Ein ABAP-Projekt in Eclipse anlegen

© Copyright. Alle Rechte vorbehalten. 387


Kapitel 12 : ABAP Development Tools for SAP NetWeaver

388 © Copyright. Alle Rechte vorbehalten.


Kapitel 12
Lektion 1
Einführung in ABAP Development Tools for
SAP NetWeaver

ÜBERBLICK ÜBER DIE LEKTION


In dieser Lektion wird die Arbeit mit dem ABAP Debugger in Verbindung mit elementaren
Datenobjekten erklärt.

Unternehmensszenario
Als ABAP-Programmierer können Sie alternativ zur ABAP Workbench Eclipse-basierte ABAP
Development Tools nutzen, um ABAP-Programme zu entwickeln. Dazu müssen Sie über
folgende Kenntnisse verfügen:
● ABAP Development Tools for SAP NetWeaver

LERNZIELE DER LEKTION


Am Ende dieser Lektion können Sie:
● Die Eclipse-basierte ABAP-Entwicklung beschreiben

Eclipse-basierte ABAP-Entwicklung
Merkmale der ABAP Development Tools

● Die ABAP Development Tools (ADTs) können alternativ zur ABAP Workbench verwendet
werden. Die ADTs bieten Folgendes:
- Eine neue ABAP-Entwicklungserfahrung auf Basis der Eclipse-Plattform
- Eine offene Plattform für die Entwicklung neuer ABAP-bezogener Werkzeuge
- Einen Satz offener, sprach- und plattformunabhängiger Application Programming
Interfaces (APIs), mit deren Hilfe Entwickler neue benutzerdefinierte Werkzeuge für die
ABAP-Umgebung erstellen können

© Copyright. Alle Rechte vorbehalten. 389


Kapitel 12 : ABAP Development Tools for SAP NetWeaver

Abbildung 245: ABAP Development Tools – Eclipse-basierte ABAP-Entwicklung

Vorteile von Eclipse


Mit den ABAP Development Tools in Eclipse profitieren Sie von der Benutzerfreundlichkeit,
Geschwindigkeit und Flexibilität von Eclipse und zugleich von den bewährten Funktionen der
ABAP Workbench. So vereinen die ADTs das beste aus zwei Welten. Durch verbesserte
Refactoring-Funktionen, Code-Vervollständigung, automatisches Einfügen und Code-
Vorlagen wird die Entwicklungsproduktivität gesteigert. Darüber hinaus bieten die ADTs eine
äußerst hilfreiche Quickfix-Funktion sowie einfache Navigation.
Die ADTs ermöglichen Ihnen die Verbindung mit mehreren ABAP-Systemen und bieten
Sitzungs-Failover, um die Auswirkungen von Verbindungsunterbrechungen zu verringern. Des
Weiteren ermöglichen sie dank der Integration von ABAP- und Nicht-ABAP-
Entwicklungswerkzeugen in einer einzigen, leistungsstarken Entwicklungsumgebung eine
plattformübergreifende Entwicklung. Zudem sind die ADTs eng in SAP HANA Studio, SAP-
UI5-Werkzeuge und JAVA integriert.

Die ABAP-Perspektive
Eclipse ermöglicht die Entwicklung in vielen verschiedenen Programmiersprachen. Für
verschiedene Sprachen bietet Eclipse unterschiedliche Kombinationen von Werkzeugen, die
als Perspektiven bezeichnet werden. Wenn die ADTs installiert sind, können Sie zur ABAP-
Perspektive wechseln.

390 © Copyright. Alle Rechte vorbehalten.


Lektion: Einführung in ABAP Development Tools for SAP NetWeaver

Abbildung 246: Die ABAP-Perspektive

ZUSAMMENFASSUNG DER LEKTION


Nun können Sie
● Die Eclipse-basierte ABAP-Entwicklung beschreiben

© Copyright. Alle Rechte vorbehalten. 391


Kapitel 12 : ABAP Development Tools for SAP NetWeaver

392 © Copyright. Alle Rechte vorbehalten.


Kapitel 12
Lektion 2
Anlegen eines ABAP-Projekts in Eclipse

ÜBERBLICK ÜBER DIE LEKTION


In dieser Lektion wird erläutert, wie mit Eclipse-basierten Entwicklungswerkzeugen ein ABAP-
Projekt angelegt wird.

Unternehmensszenario
Als ABAP-Programmierer können Sie alternativ zur ABAP Workbench Eclipse-basierte
Entwicklungswerkzeuge nutzen, um ABAP-Projekte zu entwickeln. Dazu müssen Sie über
folgende Kenntnisse verfügen:
● Anlegen von ABAP-Projekten mit Eclipse-basierten Entwicklungswerkzeugen

LERNZIELE DER LEKTION


Am Ende dieser Lektion können Sie:
● Ein ABAP-Projekt in Eclipse anlegen

Projekt anlegen
Bevor Sie mit den ABAP Development Tools arbeiten können, müssen Sie eine Verbindung zu
einem System herstellen. Dies erfolgt durch Anlegen eines ABAP-Projekts. Anschließend
können Sie mit den verfügbaren Editoren die verschiedenen Repository-Objekte öffnen.

© Copyright. Alle Rechte vorbehalten. 393


Kapitel 12 : ABAP Development Tools for SAP NetWeaver

Abbildung 247: Anlegen des ABAP-Projekts: Start in Eclipse

Wenn Sie die ABAP Development Tools verwenden, melden Sie sich bei einem SAP-Backend-
System an und arbeiten direkt mit dessen Repository-Objekten. In dieser Hinsicht ist der
Entwicklungsprozess genau gleich wie bei Verwendung der ABAP Workbench: Die Objekte
müssen nicht aus- und eingecheckt werden.
Das ABAP-Projekt dient als Container für die Entwicklungsobjekte, die in einem bestimmten
ABAP-Backend-System abgelegt sind, und enthält die Anmeldeparameter für die
Systemanmeldung: System, Mandant, Benutzer und Sprache. Sie müssen beim System
angemeldet sein, um ein Objekt darin zu bearbeiten. Innerhalb des Projekts können Sie auf
jedes Entwicklungsobjekt im Repository zugreifen. Um das Verwalten der Objekte zu
erleichtern, können Sie jedoch Favoritenpakete für jedes Projekt einrichten.

394 © Copyright. Alle Rechte vorbehalten.


Lektion: Anlegen eines ABAP-Projekts in Eclipse

Bearbeiten von Repository-Objekten

Abbildung 248: ADT: Bearbeiten von Repository-Objekten

Der Projekt-Explorer bietet eine hierarchische Sicht auf das Repository, die dem
Navigationsbereich der ABAP Workbench sehr ähnlich ist. Unter jedem Projekt können Sie
eine Liste mit Favoritenpaketen pflegen. Indem Sie den Knoten Systembibliothek erweitern,
erhalten Sie eine Liste aller Pakete.
Um ein spezifisches Repository in dessen jeweiligem Editor zu öffnen, doppelklicken Sie auf
das Repository.
Der Editor wird auf der rechten Seite der ABAP-Perspektive angezeigt. Für jedes neue Objekt
wird eine neue Registerkarte zum Tabstrip hinzugefügt. Dies erleichtert die Navigation
zwischen Editoren und Objekten.

© Copyright. Alle Rechte vorbehalten. 395


Kapitel 12 : ABAP Development Tools for SAP NetWeaver

Editoren in den ABAP Development Tools

Abbildung 249: Native Editoren oder integrierte SAP-GUI-Editoren

Arten von Editoren


● In den ABAP Development Tools gibt es zwei Arten von Editoren:
- Editoren, die nativ in Eclipse implementiert sind
Beispiel: ABAP Editor, ein Eclipse-Editor
- Editoren, die in einer „in place“ SAP-GUI (GUI – Graphical User Interface) angezeigt
werden
Beispiel: ABAP-Transaktionseditor, der in der Eclipse-Umgebung mit der klassischen
SAP-GUI-Visualisierung dargestellt wird

Generell besteht keine Verpflichtung, für die ABAP-Entwicklung die ABAP Development Tools
zu verwenden. Allen Entwicklern steht es frei, ob sie die ABAP Development Tools oder die
klassische ABAP Workbench verwenden möchten. Die Funktionen und Merkmale von Eclipse
im Allgemeinen und die der ABAP Development Tools im Besonderen, zu denen unter
anderem verschiedene integrierte Refactoring-Funktionen sowie die Unterstützung von
Funktionstests zählen, sind für die objektorientierte Programmierung jedoch besonders
geeignet.

396 © Copyright. Alle Rechte vorbehalten.


Lektion: Anlegen eines ABAP-Projekts in Eclipse

Zusätzliche Ressourcen für ABAP Development Tools for SAP NetWeaver

Tabelle 7: Zusätzliche Ressourcen für ABAP Development Tools for SAP NetWeaver
Ressource Online-Speicherort

ABAP Development Tools ● SAP Software Download Center unter http://


support.sap.com/swdc

● SAP Development Tools for Eclipse unter http://


tools.hana.ondemand.com

● SAP Community Network unter http://scn.sap.com/


community/abap/eclipse

Dokumentation und In- SAP-Community-Network-Seiten:


stallationssupport für SAP
● http://scn.sap.com/community/abap/eclipse
Development Tools for Ec-
lipse ● http://scn.sap.com/community/abap/hana

ZUSAMMENFASSUNG DER LEKTION


Nun können Sie
● Ein ABAP-Projekt in Eclipse anlegen

© Copyright. Alle Rechte vorbehalten. 397


Kapitel 12 : ABAP Development Tools for SAP NetWeaver

398 © Copyright. Alle Rechte vorbehalten.


Kapitel 12

Überprüfung des Lernerfolgs

1. Welche der folgenden Aussagen sind richtig?


Wählen Sie die richtigen Antworten.

X A Die ABAP Development Tools (ADTs) können alternativ zur ABAP Workbench
verwendet werden.

X B Die ADTs ermöglichen Ihnen die Verbindung mit jeweils einem ABAP-System und
bieten Sitzungs-Failover, um die Auswirkungen von Verbindungsunterbrechungen zu
verringern.

X C Die ADTs ermöglichen dank der Integration von ABAP- und Nicht-ABAP-
Entwicklungswerkzeugen in einer einzigen, leistungsstarken Entwicklungsumgebung
eine plattformübergreifende Entwicklung.

X D Eclipse ermöglicht die Entwicklung in vielen verschiedenen Programmiersprachen.


Für jede Sprache bietet es dieselbe Kombination von Werkzeugen.

2. Für die ABAP-Entwicklung sollten nur die ABAP Development Tools verwendet werden.
Entscheiden Sie, ob diese Aussage richtig oder falsch ist.

X Richtig

X Falsch

© Copyright. Alle Rechte vorbehalten. 399


Kapitel 12

Überprüfung des Lernerfolgs - Antworten

1. Welche der folgenden Aussagen sind richtig?


Wählen Sie die richtigen Antworten.

X A Die ABAP Development Tools (ADTs) können alternativ zur ABAP Workbench
verwendet werden.

X B Die ADTs ermöglichen Ihnen die Verbindung mit jeweils einem ABAP-System und
bieten Sitzungs-Failover, um die Auswirkungen von Verbindungsunterbrechungen zu
verringern.

X C Die ADTs ermöglichen dank der Integration von ABAP- und Nicht-ABAP-
Entwicklungswerkzeugen in einer einzigen, leistungsstarken Entwicklungsumgebung
eine plattformübergreifende Entwicklung.

X D Eclipse ermöglicht die Entwicklung in vielen verschiedenen Programmiersprachen.


Für jede Sprache bietet es dieselbe Kombination von Werkzeugen.

Das ist richtig. Die ABAP Development Tools (ADTs) können alternativ zur ABAP
Workbench verwendet werden. Des Weiteren ermöglichen sie dank der Integration von
ABAP- und Nicht-ABAP-Entwicklungswerkzeugen in einer einzigen, leistungsstarken
Entwicklungsumgebung eine plattformübergreifende Entwicklung. Zudem sind die ADTs
eng mit SAP HANA Studio, SAP-UI5-Werkzeuge und JAVA integriert. Weitere
Informationen erhalten Sie in der Lektion „Einführung in ABAP Development Tools für SAP
NetWeaver“ im Abschnitt „Vorteile von Eclipse“ im Kurs BC400.

2. Für die ABAP-Entwicklung sollten nur die ABAP Development Tools verwendet werden.
Entscheiden Sie, ob diese Aussage richtig oder falsch ist.

X Richtig

X Falsch

Das ist richtig. Als ABAP-Programmierer können Sie alternativ zur ABAP Workbench
Eclipse-basierte ABAP Development Tools nutzen, um ABAP-Programme zu entwickeln.
Weitere Informationen erhalten Sie in der Lektion „Einführung in ABAP Development
Tools for SAP NetWeaver“ im Abschnitt „Unternehmensbeispiel“ im Kurs BC400.

400 © Copyright. Alle Rechte vorbehalten.


KAPITEL 13 Anpassen der SAP-
Standardsoftware

Lektion 1
Anpassen der SAP-Standardsoftware 403

LERNZIELE

● Begriffe im Zusammenhang mit der Anpassung von SAP-Standardsoftware erläutern


● Möglichkeiten der Anpassung von SAP-Standardsoftware beschreiben
● Erweiterungsarten beschreiben

© Copyright. Alle Rechte vorbehalten. 401


Kapitel 13 : Anpassen der SAP-Standardsoftware

402 © Copyright. Alle Rechte vorbehalten.


Kapitel 13
Lektion 1
Anpassen der SAP-Standardsoftware

ÜBERBLICK ÜBER DIE LEKTION


In dieser Lektion erfahren Sie im Überblick, welche Möglichkeiten es gibt, die
Standardsoftware von SAP an Ihre unternehmensspezifischen Anforderungen anzupassen.

Unternehmensszenario
Sie möchten Anpassungen an der SAP-Standardsoftware vornehmen, dabei aber wegen der
bekannten Nachteile möglichst auf Modifikationen verzichten. Dazu müssen Sie über
folgende Kenntnisse verfügen:
● Bedeutung der Begriffe Original, Kopie, Korrektur, Reparatur, Customizing, Modifikation
und Erweiterung
● verfügbare Optionen, um die Standardsoftware von SAP an Ihre
unternehmensspezifischen Anforderungen anzupassen
● Nachteile von Modifikationen und Vorteile von SAP-Erweiterungen
● verschiedene Erweiterungsarten

LERNZIELE DER LEKTION


Am Ende dieser Lektion können Sie:
● Begriffe im Zusammenhang mit der Anpassung von SAP-Standardsoftware erläutern
● Möglichkeiten der Anpassung von SAP-Standardsoftware beschreiben
● Erweiterungsarten beschreiben

© Copyright. Alle Rechte vorbehalten. 403


Kapitel 13 : Anpassen der SAP-Standardsoftware

Grundbegriffe im Zusammenhang mit der Anpassung von SAP-Software

Abbildung 250: Originale und Kopien

Ein Repository-Objekt wird in dem SAP-System, in dem es ursprünglich entwickelt wurde, als
Originalobjekt bezeichnet. Wenn dieses Repository-Objekt in ein anderes System
transportiert wird, existiert es dort nur als Kopie. Das Originalsystem (der Herkunftsort) eines
Repository-Objekts wird in den Attributen des Objekts vermerkt.
Nach der Best Practice für die Entwicklung sollen Änderungen nur an den Objekten des
Originalsystems vorgenommen werden. Diese Änderungen werden dann durch den Transport
in die Folgesysteme propagiert. Dadurch wird die Konsistenz der Repository-Objekte in allen
Systemen gewährleistet. Änderungen an Kopien sind zwar möglich, aber riskant, da die
Entwicklungsstände der Systeme auseinanderlaufen können, falls die Änderungen nicht an
den Originalobjekten nachgezogen werden. Originale können nie durch Transporte
überschrieben werden. Änderungen, die zuerst in einem Folgesystem vorgenommen wurden,
müssen im Originalsystem manuell nachgezogen werden.

404 © Copyright. Alle Rechte vorbehalten.


Lektion: Anpassen der SAP-Standardsoftware

Korrekturen und Reparaturen

Abbildung 251: Korrekturen und Reparaturen

Vergleich der Begriffe


● Korrektur
Das Ändern eines Original-Repository-Objekts wird als Korrektur bezeichnet. Korrekturen
können Sie in Aufgaben vom Typ „Entwicklung“ oder vom Typ „Korrektur“ durchführen.
● Reparatur
Die Änderung einer Kopie dagegen bezeichnet man als Reparatur. Reparaturen können Sie
in Aufgaben vom Typ Reparatur durchführen. Nach Reparatur eines Kundenobjektes (z.B.
zur Behebung eines Problems im Produktivsystem) muss die Änderung am Original
nachgezogen werden, um ein Auseinanderlaufen der Entwicklungsstände zu vermeiden.
● Modifikation
Die Reparatur eines SAP-Repository-Objekts in einem Kundensystem wird auch
Modifikation genannt.

© Copyright. Alle Rechte vorbehalten. 405


Kapitel 13 : Anpassen der SAP-Standardsoftware

Modifikationsabgleich nach Upgrades

Abbildung 252: Modifikationsabgleich nach Upgrades

Bei einem Upgrade werden die modifizierten SAP-Objekte in Ihrem System möglicherweise
durch von SAP ausgelieferte neue Versionen dieser Objekte überschrieben. Um Ihre
Modifikationen wieder ins System zu bringen, ist ein sogenannter Modifikationsabgleich
erforderlich. Dabei müssen Sie Ihre alte, modifizierte Version mit der neu ausgelieferten
Version vergleichen und frühere Änderungen im SAP-Standard in die neue Version
übertragen.
Ein solcher Abgleichvorgang kann einen erheblichen Zeitaufwand bedeuten und ist
fehleranfällig. Deshalb ist es vorteilhaft, statt einer Modifikation sogenannte SAP-
Erweiterungen zu nutzen. Erweiterungen bieten die Möglichkeit, SAP-Funktionalität
anzupassen, sind jedoch unabhängig von der Release-Version und erfordern dadurch weniger
Wartung.
Um eine Konsistenz zwischen dem Entwicklungssystem und den Folgesystemen
sicherzustellen, sollten Sie den Modifikationsabgleich im Entwicklungssystem vornehmen
und dann (über die Freigabe des benutzten Auftrags) die abgeglichenen Objekte in die
Folgesysteme transportieren.

406 © Copyright. Alle Rechte vorbehalten.


Lektion: Anpassen der SAP-Standardsoftware

Möglichkeiten der Anpassung von SAP-Software

Abbildung 253: Möglichkeiten der Anpassung von SAP-Software

Möglichkeiten der Anpassung von SAP-Software an die Erfordernisse des Kunden


Möglichkeiten der Anpassung von SAP-Software an die Erfordernisse des Kunden:

Eigenentwicklungen
Sie können eigene Repository-Objekte im Kundennamensraum entwickeln. Dies kann
erforderlich sein, wenn der Kunde eine Funktion benötigt, die im SAP-Standard-Release
nicht zur Verfügung steht.
Customizing
Gewisse Systemeigenschaften und -funktionen können Sie über entsprechende
Pflegetransaktionen einstellen. SAP hat derartige Anpassungen in das Softwaredesign
integriert, und das Customizing gehört obligatorisch zur Einrichtung eines neuen SAP-
Systems dazu.
Erweiterungen
SAP-Repository-Objekte können mittels Erweiterungen modifikationsfrei angepasst
werden. Erweiterungen sind Release-unabhängig und erfordern damit keinerlei
Abgleichaufwand. Allerdings existiert nicht für jede Kundenanforderung eine
Erweiterungsmöglichkeit.
Modifikationen
Modifikationen sollten nur durchgeführt werden, wenn für die vom Kunden gewünschte
Funktion bzw. Funktionsänderung keine entsprechende Erweiterungsmöglichkeit im
System existiert. Modifikationen bringen einen relativ hohen Wartungsaufwand mit sich,
weil sie bei Upgrades einen Abgleich erfordern. Um Ihnen eine Übersicht über die
vorgenommenen Modifikationen zu ermöglichen und den Aufwand bei Upgrades zu
reduzieren, ist seit SAP R/3 4.6b der Modifikationsassistent ins System integriert.
Weitere Informationen zum Modifikationsassistenten finden Sie in der Online-
Dokumentation zur ABAP Workbench (Änderungen des SAP-Standards).

© Copyright. Alle Rechte vorbehalten. 407


Kapitel 13 : Anpassen der SAP-Standardsoftware

Programm-Exit
Prinzip eines Programm-Exits

Abbildung 254: Prinzip eines Programm-Exits

In manche SAP-Programme hat SAP Programm-Exits eingebaut. Dies sind Stellen innerhalb
des Codes, an die Kunden ihren eigenen Quelltext anhängen können. Dieser Quelltext wird zur
Laufzeit verarbeitet, sodass die Möglichkeit besteht, ohne Änderung des eigentlichen SAP-
Programms Funktionen auszuführen, die der Kunde entwickelt hat. Programm-Exits stellen
eine äußerst leistungsstarke Art von Erweiterung dar.

Verfügbare Programm-Exits

● SAP stellt die folgenden Arten von Programm-Exits bereit:


- User-Exits
- Customer-Exits
- Business Transaction Events (BTEs)
- Business Add-Ins (BAdIs)

408 © Copyright. Alle Rechte vorbehalten.


Lektion: Anpassen der SAP-Standardsoftware

Sonstige Erweiterungsarten

Abbildung 255: Sonstige Erweiterungsarten

Sonstige Erweiterungsarten
● Neben den Programm-Exits gibt es noch folgende Erweiterungsarten:
- Menü-Exit
Einige SAP-Menüs enthalten Menü-Exits, die ähnlich wie Programm-Exits funktionieren,
d.h. Kunden können ihren eigenen Quelltext an diese Menüs anbinden.
- Dynpro-Exit
In einigen Dynpros sind von SAP Subscreen-Bereiche reserviert, in die kundeneigene
Subscreen-Dynpros eingebunden werden können.

Änderungen an SAP-Datenelementen im ABAP Dictionary


● Sie haben folgende Möglichkeiten, um SAP-Datenelemente im ABAP Dictionary zu ändern:
- Überschreiben der Felddokumentation
Die SAP-Felddokumentation, die dem Anwender über die F1-Hilfe zur Verfügung steht,
kann durch kundeneigene Texte überschrieben werden.
- Überschreiben der Feldbezeichner
Die Feldbezeichner eines SAP-Datenelementes können durch kundeneigene Texte
überschrieben werden.

Die bisher besprochenen Erweiterungsarten arbeiten alle mit Quelltext, der an verschiedenen
Stellen in der SAP-Anwendung ausgeführt wird.

© Copyright. Alle Rechte vorbehalten. 409


Kapitel 13 : Anpassen der SAP-Standardsoftware

Zusätzliche Erweiterungstechniken

● Append-Struktur für Datenbanktabellen


An die meisten transparenten Tabellen von SAP können Sie eine Append-Struktur mit
zusätzlichen Feldern anhängen. Mit dieser Struktur können Sie zusätzliche Spalten in den
Datenbanktabellen implementieren.
● Append-Struktur für Dictionary-Strukturtypen
An die meisten Dictionary-Strukturtypen können Sie eine Append-Struktur mit
zusätzlichen Feldern anhängen.
● Append-Struktur für Datenbank-Views
An die meisten Datenbank-Views können Sie eine Append-Struktur mit zusätzlichen
Feldern anhängen. Auf diese Weise können Sie zusätzliche Felder aus den durch die View-
Definition gegebenen Basistabellen auswählen, aber Sie können keine neuen Basistabellen
hinzufügen.

SSCR-Registrierungen

Abbildung 256: SSCR-Registrierungen

Wenn ein Entwickler das erste Mal ein Repository-Objekt anlegt oder ändert, wird er vom
System nach seinem Entwicklerschlüssel gefragt. Diesen bekommt er durch eine
entsprechende einmalige SSCR-Entwicklerregistrierung (SAP Software Change Registration).
Der Entwicklerschlüssel ist mit der Benutzer-ID des Entwicklers und der Lizenznummer des
SAP-Systems verknüpft.
Für jedes SAP-Repository-Objekt, das modifiziert werden soll, benötigt der Entwickler einen
objektbezogenen Zugriffsschlüssel (Objektschlüssel). Diesen erhält er über eine SSCR-
Objektregistrierung. Dabei müssen der Name des Repository-Objekts, der Objekttyp, die
Lizenznummer des SAP-Systems sowie dessen Release angegeben werden.

410 © Copyright. Alle Rechte vorbehalten.


Lektion: Anpassen der SAP-Standardsoftware

ZUSAMMENFASSUNG DER LEKTION


Nun können Sie
● Begriffe im Zusammenhang mit der Anpassung von SAP-Standardsoftware erläutern
● Möglichkeiten der Anpassung von SAP-Standardsoftware beschreiben
● Erweiterungsarten beschreiben

© Copyright. Alle Rechte vorbehalten. 411


Kapitel 13 : Anpassen der SAP-Standardsoftware

412 © Copyright. Alle Rechte vorbehalten.


Kapitel 13

Überprüfung des Lernerfolgs

1. Wie wird die Reparatur eines SAP-Repository-Objekts in einem Kundensystem


bezeichnet?
Wählen Sie die richtige Antwort.

X A Modifikationsabgleich

X B Customer-Exit

X C Modifikation

X D Korrektur

2. Welche Möglichkeiten gibt es, die SAP-Software an die Erfordernisse des Kunden
anzupassen?
Wählen Sie die richtigen Antworten.

X A Customizing

X B Erweiterungen

X C Entwicklung

3. Welche der folgenden Begriffe stehen für eine Erweiterungsart?


Wählen Sie die richtigen Antworten.

X A Menü-Exit

X B Business Application Programming Interface (BAPI)

X C Dynpro-Exit

X D Customer-Event-Exit

© Copyright. Alle Rechte vorbehalten. 413


Kapitel 13

Überprüfung des Lernerfolgs - Antworten

1. Wie wird die Reparatur eines SAP-Repository-Objekts in einem Kundensystem


bezeichnet?
Wählen Sie die richtige Antwort.

X A Modifikationsabgleich

X B Customer-Exit

X C Modifikation

X D Korrektur

Das ist richtig. Die Reparatur eines SAP-Repository-Objekts in einem Kundensystem wird
auch Modifikation genannt. Weitere Informationen erhalten Sie in der Lektion „Anpassung
der SAP-Standardsoftware“ im Abschnitt „Vergleich von Bedingungen“ im Kurs BC400.

2. Welche Möglichkeiten gibt es, die SAP-Software an die Erfordernisse des Kunden
anzupassen?
Wählen Sie die richtigen Antworten.

X A Customizing

X B Erweiterungen

X C Entwicklung

Das ist richtig. Customizing, Erweiterungen und Eigenentwicklungen sind Möglichkeiten


zur Anpassung der SAP-Software. Weitere Informationen erhalten Sie in der Lektion
„Anpassung der SAP-Standardsoftware“ im Abschnitt „Möglichkeiten der Anpassung von
SAP-Standardsoftware an die Erfordernisse des Kunden“ im Kurs BC400.

414 © Copyright. Alle Rechte vorbehalten.


Kapitel 13 : Überprüfung des Lernerfolgs - Antworten

3. Welche der folgenden Begriffe stehen für eine Erweiterungsart?


Wählen Sie die richtigen Antworten.

X A Menü-Exit

X B Business Application Programming Interface (BAPI)

X C Dynpro-Exit

X D Customer-Event-Exit

Das ist richtig. Neben den Programm-Exits gibt es noch folgende Erweiterungsarten:
Menü- und Dynpro-Exits Weitere Informationen erhalten Sie in der Lektion „Anpassung
der SAP-Standardsoftware“ im Abschnitt „Sonstige Erweiterungsarten“ im Kurs BC400.

© Copyright. Alle Rechte vorbehalten. 415

Das könnte Ihnen auch gefallen