Beruflich Dokumente
Kultur Dokumente
.
.
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
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
Demonstration
Vorgehensweise
Hinweis
Moderierte Diskussion
Fenstertitel Beispieltext
ZIELGRUPPE
Diese Schulung richtet sich an die folgenden Zielgruppen:
● Entwickler
● Entwicklungsberater
● IT-Support
● Projektmanager
Lektion 1
Beschreibung der Verarbeitung von ABAP-Programmen 3
LERNZIELE
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
ABAP-Systemarchitektur
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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
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).
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
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
ABAP Repository
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.
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.
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.
Object Navigator
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.
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
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.
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.
Funktionen im Werkzeugbereich
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.
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
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).
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.
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.
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.
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.
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
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.
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.
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
Allgemeine ABAP-Syntax I
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.
Allgemeine ABAP-Syntax II
Hinweis:
Diese Kurzform stellt eine vereinfachte Form der Syntax dar und führt zu keiner
Performanceverbesserung. Das ABAP-Laufzeitsystem verarbeitet jede einzelne
Anweisung.
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).
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.
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
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.
1. Lassen Sie sich die Objektliste des Programms im Object Navigator anzeigen.
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.
6. Ordnen Sie die Transaktion auf den folgenden Bildern einem Paket und einem
Änderungsauftrag zu.
Notiz:
Jede Transaktion ist ein Repository-Objekt.
Abbildung 39: Abschluss des Projekts durch Freigabe des Auftrags (Projektleiter)
X A Programme
X B Funktionsbausteine
X C Object Navigator
X A ABAP Editor
X B ABAP Dictionary
X C Repository-Infosystem
X D Menu Painter
X A Anwendungskomponente
X B Entwicklungspaket
X C Hauptpaket
X D Softwarekomponente
4. Bei welcher Aktion wird der Transport von Entwicklungsobjekten für einen
Entwicklungsauftrag ausgelöst?
Wählen Sie die richtige Antwort.
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 Richtig
X Falsch
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.
X A Programme
X B Funktionsbausteine
X C Object Navigator
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).
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).
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.
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).
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.
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).
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).
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).
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).
Lektion 1
Definition elementarer Datenobjekte 65
Lektion 2
Verwenden grundlegender ABAP-Anweisungen 77
Lektion 3
Analysieren von Programmen mit dem ABAP Debugger 87
LERNZIELE
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
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.
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.
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.
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.
Lokale Datentypen
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.
Globale Datentypen
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.
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
* 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.
Mit dem Zusatz VALUE können Sie den Wert eines elementaren Datenobjekts vorbelegen.
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.
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.
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.
Hinweis:
Beachten Sie, dass auch Textelemente aktiviert werden müssen.
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.
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.
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
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.
- 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.
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.
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.
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
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.
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.
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.
Systemfelder (Auszug)
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.
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.
Dialognachrichten
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
ABAP Debugger
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.
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.
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.
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.
- Erweitertes Tabellenwerkzeug
- Erweitertes Web-Dynpro-Werkzeug
X A T (Time)
X B C (Character)
X C N (Numerical character)
X E D (Date)
X A AND
X B OR
X C END
X D NOT
X A Nachrichtennummer
X B Nachrichtentyp
X C Nachrichtenklasse
X D Nachrichtenrolle
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
X A T (Time)
X B C (Character)
X C N (Numerical character)
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).
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).
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).
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).
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).
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
● 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
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
Modularisierungstechniken
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
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,
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
Datenkapselung
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.
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.
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.
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
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.
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.
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.
2. Geben Sie hinter FORM den Namen und die Schnittstelle des Unterprogramms an.
Anschließend folgen die Anweisungen des Unterprogramms.
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.
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
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.
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.
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.
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.
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.
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
Funktionsbausteine
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.
In der Regel werden die Schnittstellenparameter mit Typen aus dem ABAP Dictionary
definiert.
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.
- 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.
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
● Kurztext
● Funktionale Beschreibung
● Anwendungsbeispiel
● Hinweise
● Parameterbeschreibung
● Ausnahmebeschreibung
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.
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.
Klassische Ausnahmebehandlung
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.
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
Notiz:
Der empfohlene Kundennamensraum für Funktionsbausteine ist
Z_<FUNCTION_MODULE> bzw. Y_<FUNCTION_MODULE>.
Hinweis:
Der Kommentarblock direkt unter dem Schlüsselwort FUNCTION wird vom
Function Builder angelegt und bei Änderung der Parameter mitgeändert.
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
Standard-BAPIs
● GetList
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
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.
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.
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
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.
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.
können statische Methoden auch ohne vorherige Instanziierung der Klasse aufgerufen
werden.
Notiz:
In dieser Schulung konzentrieren wir uns hauptsächlich auf statische Methoden.
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.
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.
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.
Methodenausnahmen
Hinweis:
Das klassenbasierte Ausnahmekonzept steht auch für Funktionsbausteine zur
Verfügung.
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.
Statische Methoden
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.
Klassische Ausnahmebehandlung
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.
Klassenbasierte 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.
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.
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
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.
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.“.
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.
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
Lokale 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
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).
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.
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.
X C Kapselung einer Funktion, die in einem Programm mehrmals benötigt wird, für die
Mehrfachnutzung
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
X A Globale Datenobjekte
X B Lokale Datentypen
X A Exportparameter
X B Unterprogramme
X C Changing-Parameter
X D Dynpro
X A Standard
X B Ausnahmen
X C Quelltext
X D Attribute
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
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
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
X C Kapselung einer Funktion, die in einem Programm mehrmals benötigt wird, für die
Mehrfachnutzung
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).
X A Globale Datenobjekte
X B Lokale 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).
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).
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).
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).
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).
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).
Lektion 1
Verwenden von strukturierten Datenobjekten 177
Lektion 2
Verwenden von internen Tabellen 183
LERNZIELE
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
Für die Namen von Strukturtypen und Strukturvariablen werden die folgenden Definitionen
zur Namenskonvention hinzugefügt:
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.
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.
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.
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.
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.
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
Tabellentypen
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.
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.
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.
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.
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.
Zweck Präfix
* 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“.
Die Abbildung zeigt einen Überblick über die möglichen Definitionen interner Tabellen.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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
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
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
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).
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
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).
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
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
Datenmodell: Übersicht
SAP-Flugdatenmodell
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.
Relationales Datenmodell
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.
Transparente 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.
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.
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.
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.
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
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.
● 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.
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.
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.
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).
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.
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
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.
Ü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.
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
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.
Datenbankindizes
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.
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.
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.
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
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).
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.
Join-Mechanismus
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.
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.
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.
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
Berechtigungskonzept
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 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.
Berechtigungsprüfung (Prinizip)
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.
Die nachfolgenden Schritte, wie z.B. die Definition der Berechtigungen und Profile sowie die
Gestaltung der Benutzerstammsätze, sind Aufgabe des Administrators.
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.
Berechtigungsprüfungen
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'.
Berechtigungsprüfungen in Programmen
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
X A Konzeptionelle Datenbank
X B Funktionsbausteine
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
X A INTO TABLE
X B APPENDING TABLE
X D END SELECT
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
X A Join-Tabellen
X B Join-Bedingungen
X C Join-Zeilen
X D Join-Spalten
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
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
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).
X A Konzeptionelle Datenbank
X B Funktionsbausteine
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).
X A INTO TABLE
X B APPENDING 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).
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).
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).
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).
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).
Lektion 1
Implementieren von ABAP-Listen 259
Lektion 2
Implementieren von Selektionsbildern 265
Lektion 3
Implementieren von Ereignissen in ABAP-Reports 273
LERNZIELE
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
Eine Liste verwenden Sie, um den Programmieraufwand für die Ausgabe von Daten zu
minimieren.
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.
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.
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
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
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.
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
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.
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.
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.
Einzelwerteingabe
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.
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.
Komplexe Abgrenzungen
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.
Die mit den eingegebenen Selektionsbedingungen gefüllte interne Tabelle kann, wie in der
Abbildung gezeigt, zur Abgrenzung der Datenbankselektion verwendet werden.
Tabelleninhalt
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.
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
ABAP-Ereignisse
Notiz:
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.
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.
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 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.
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
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.
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
X A DATA
X B VALUE
X C PARAMETERS
X D DEFAULT
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).
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).
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).
Lektion 1
Anlegen von Dynpros 287
Lektion 2
Anlegen von Ein- und Ausgabefeldern 307
Lektion 3
Implementieren des Datentransports 311
LERNZIELE
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
ABAP-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.
Dynpro-Folge
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.
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.
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.
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.
● 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
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.
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.
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.
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.
Dynpro-Verarbeitung
1. PBO-Abarbeitung
3. Dynpro-Anzeige
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.
3. Dynpro-Anzeige
Das mit Werten belegte Dynpro wird zum Präsentationsserver (SAP GUI) gesendet und
dem Benutzer angezeigt.
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.
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.
Hinweis:
In einem Modul können Sie auf alle globalen Datenobjekte des Programms
zugreifen. Variablen, die Sie innerhalb eines Moduls definieren, sind stets global.
Ein Modul kann zur Laufzeit aus der Ablauflogik verschiedener Dynpros heraus gerufen
werden (Wiederverwendbarkeit).
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.
Wenn Sie einem Dynpro seine eigene Bildnummer als Folge-Dynpro zuordnen, wird es nach
seiner Beendigung erneut verarbeitet.
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.
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.
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.
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
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.
Abbildung 200: Anlegen von Ein- und Ausgabefeldern (mit Bezug zu Dictionary-Feldern)
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.
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.
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.
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
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.
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.
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.
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.
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.
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.
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.
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.
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 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.
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.
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.
Lektion 1
Verwendung des SAP List Viewer 325
LERNZIELE
● EnjoySAP-Controls beschreiben
● Einen SAP List Viewer implementieren
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
EnjoySAP-Controls
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.
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.
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
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.
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.
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.
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 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.
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).
- Eine Referenzvariable, die auf die noch zu erzeugende Grid-Control-Instanz zeigen soll
(Beispiel: GO_ALV_GRID).
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.
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.
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.
● 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.
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).
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.
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
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.
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
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
Tabelle 6: Web-Dynpro-Begriffe
Klassisches Dynpro Web Dynpro
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.
Das Model-View-Controller-Programmiermodell
Web-Dynpro-Struktur
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).
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.
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.
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).
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.
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
Web-Dynpro-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.
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.
Um eine Web-Dynpro-View in ein Window einzubetten, öffnen Sie im Object Navigator das
Window, und zeigen Sie die Window-Struktur an.
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.
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.
Im Beispielprogramm soll die Navigation jeweils durch das Betätigen einer Drucktaste
ausgelöst werden.
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.
Web-Dynpro-Anwendung
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
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.
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.
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.
Context-Mapping
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).
Datenbindung
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.
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.
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.
X A Web-Dynpro-Struktur
X B Web-Dynpro-Anwendung
X C Web-Dynpro-Component
X D Web-Dynpro-Content
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
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.
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.
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.
Lektion 1
Verbessern der ABAP-Code-Qualität mit dem Code Inspector 377
LERNZIELE
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
● 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
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.
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.
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
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
X C Wenn der Code Inspector über das Kontextmenü im Object Navigator gestartet
wird, wird eine Standard-Inspektion durchgeführt.
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 C Wenn der Code Inspector über das Kontextmenü im Object Navigator gestartet
wird, wird eine Standard-Inspektion durchgeführt.
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).
2. Welche Aspekte berücksichtigt der Code Inspector bei der Prüfung eines Programms?
Wählen Sie die richtigen Antworten.
X A Syntaxprüfung
Lektion 1
Einführung in ABAP Development Tools for SAP NetWeaver 389
Lektion 2
Anlegen eines ABAP-Projekts in Eclipse 393
LERNZIELE
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
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
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.
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
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.
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.
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.
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.
Tabelle 7: Zusätzliche Ressourcen für ABAP Development Tools for SAP NetWeaver
Ressource Online-Speicherort
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.
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
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.
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.
Lektion 1
Anpassen der SAP-Standardsoftware 403
LERNZIELE
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
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.
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.
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).
Programm-Exit
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
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.
Die bisher besprochenen Erweiterungsarten arbeiten alle mit Quelltext, der an verschiedenen
Stellen in der SAP-Anwendung ausgeführt wird.
Zusätzliche Erweiterungstechniken
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.
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
X A Menü-Exit
X C Dynpro-Exit
X D Customer-Event-Exit
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
X A Menü-Exit
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.