Sie sind auf Seite 1von 133
Einführung in ABAP - ABAP Dictionary und Datenbanken - Prof. Dr. Heimo H. Adelsberger Dipl.-Wirt.-Inf.
Einführung in ABAP
- ABAP Dictionary und Datenbanken -
Prof. Dr. Heimo H. Adelsberger
Dipl.-Wirt.-Inf. Pouyan Khatami

Einführung in ABAP

Inhaltsverzeichnis

Inhaltsverzeichnis

 

2

Abbildungsverzeichnis

4

Copyright

7

8

ABAP Dictionary und Datenbanken

 

8

8.1

Exkurs: Der Data Browser

9

8.1.1 Aufgaben des Data Browsers

9

8.1.2 Praxis: Übung zur Nutzung des Data Browsers

10

8.2

Typen des ABAP Dictionary

 

12

8.2.1 Von lokalen zu globalen Typen

13

8.2.2 Domänen

 

15

8.2.3 Datenelemente

17

8.2.4 Strukturen

19

8.2.5 Tabellentypen

20

8.2.6 Typgruppen und Konstanten

23

8.2.7 Praxis: Übung zu globalen Typen

23

 

8.2.7.1 Domänen anlegen

 

24

8.2.7.2 Datenelemente Anlegen

25

8.2.7.3 Struktur anlegen

 

28

8.2.7.4 Tabellentyp anlegen

28

8.2.7.5 Verwendung der globalen Typen

30

 

8.3

Tabellen

33

8.3.1 Tabellen als Typen

 

34

8.3.2 Include-Strukturen

34

8.3.3 Praxis: Übung Tabellenstruktur

35

8.3.4 Technische Einstellungen

 

37

 

8.3.4.1 Logische Speicher-Parameter

38

8.3.4.2 Tabellenpufferung

 

39

8.3.4.3 Protokollierung

40

 

8.3.5

Praxis: Übung Technische Einstellungen

40

8.4

Tabellenzugriff aus ABAP-Programmen

42

8.4.1 Native SQL

 

42

8.4.2 Open SQL

43

8.4.3 Auslesen von Daten

 

43

 

8.4.3.1 Der Arbeitsbereich für Datenbanktabellen

44

8.4.3.2 Lesen eines einzelnen Datensatzes

45

 

8.4.4

Lesen mehrerer Datensätze

 

49

 

8.4.4.1 Lesen in eine interne Tabelle

49

8.4.4.2 Lesen in einen Arbeitsbereich SELECT als Schleifenkonstrukt

51

 

8.4.5 Praxis: Übung zur Ausgabe von Tabelleninhalten

52

8.4.6 Die SELECT-Anweisung im Detail

57

 

8.4.6.1 Der SELECT-Teil

 

58

8.4.6.2 Der FROM-Teil

60

8.4.6.3 Der INTO-Teil

64

8.4.6.4 Praxis: Übung zu SELEC T

65

8.4.6.5 Der WHERE-Teil

 

66

8.4.6.6 Der

GROUP

BY-

und HAVING-Teil

68

8.4.6.7 Der ORDER

BY- Teil

68

8.4.6.8 Auslesen von Daten über einen Cursor

69

Einführung in ABAP

8.4.7 Praxis: Übung zu Gruppierung und Aggregatfunktionen

70

8.4.8 Neuerungen in OpenSQL

72

8.4.9 Inline-Deklarationen in OpenSQL

73

8.4.9.1 Lesen eines einzelnen Wertes

73

8.4.9.2 Strukturierte Daten auslesen

73

8.4.9.3 Lesen von Tabellen

74

8.4.9.4 Vorsicht bei Zuweisungen

74

8.4.10 SQL-Ausdrücke

74

8.4.11 Einfügen von Daten

75

8.4.12 Bearbeiten von Daten

76

8.4.13 Automatisches Einfügen oder Bearbeiten

77

8.4.14 Löschen von Daten

78

8.5 Berechtigungsprüfungen

79

8.6 Praxis: Übung zur Berechtigungsprüfung

82

8.7 Indizes

85

8.8 Praxis: Übung zum Anlegen eines Sekundärindex

86

8.9 Pufferung

88

8.9.1 Vollständige Pufferung

88

8.9.2 Generische Pufferung

89

8.9.3 Pufferung von Einzelsätzen

91

8.9.4 Synchronisation von Puffern

91

8.9.5 Wirksamkeit von Puffern

97

8.10

Views

97

8.10.1 Praxis: Übung zum Anlegen eines Views

98

8.10.2 Pflegedialoge

100

8.10.2.1 Praxis: Übung zu Pflegeviews und Pflegedialogen

101

8.10.2.2 Viewcluster

105

8.11

Besondere Tabellenarten

106

8.11.1 Clustertabellen und Tabellencluster

106

8.11.2 Pooltabellen und Tabellenpools

107

8.11.3 Bewertung von Pool- und Clustertabellen

108

8.12

Änderungen an Dictionary-Objekten

110

8.12.1 Verwendungsnachweise

110

8.12.2 Aktivieren von Objekten

111

8.12.3 Praxis: Übung zum Verwendungsnachweis

112

8.12.4 Änderungen an Tabellen

114

8.12.5 Ablauf eines Umsetzprozesses

116

8.12.6 Praxis: Übung zur Umsetzung

121

8.12.7 Erweitern von SAP-Standardtabellen

124

8.12.7.1 Append-Strukturen

124

8.12.7.2 Customizing Includes

127

8.12.8

Praxis: Übung zu Erweiterungen

127

8.13

Performance von Anfragen

129

8.13.1 Lesen Sie nur die Daten, die Sie wirklich benötigen

129

8.13.2 Geben Sie vollständige Schlüssel an

130

8.13.3 Vermeiden wiederholter, einzelner Zugriffe

131

8.13.4 Verwenden Sie Joins statt geschachtelter SELECTs

131

8.13.5 Abwägungsentscheidungen

132

8.13.5.1 Beispiel: Sortierung

132

8.13.5.2 Beispiel: Berechnungen

132

8.14

Kapitelabschluss

133

Einführung in ABAP

Abbildungsverzeichnis

Abbildung 1: Funktionen des Dictionary im Überblick

8

Abbildung 2: Ein Selektionsbild des Data Browsers: SAP-System-Screenshot

10

Abbildung 3:

Ergebnisliste des Data

Browsers: SAP-System-Screenshot

11

Abbildung 4: Der Einstiegsbildschirm des ABAP Dictionary: SAP-System-Screenshot

12

Abbildung 5: Externe Typen des Dictionary: SAP-System-Screenshot

13

Abbildung 6: Die Typhierarchie von ABAP

14

Abbildung 7: Dictionary-Typen im Zusammenhang

15

Abbildung 8: Beispiel für eine Domäne im Dictionary: SAP-System-Screenshot

16

Abbildung 9: Die Wertebereichs-Angaben der Domäne: SAP-System-Screenshot

17

Abbildung 10: Pflegedialog eines Datenelements: SAP-System-Screenshot

18

Abbildung 11: Der Karteireiter zur Festlegung der Feldbezeichner: SAP-System-Screenshot

19

Abbildung 12: Der Strukturtyp str_fahrzeug

19

Abbildung 13:

Eine Struktur im ABAP Dictionary: SAP-System-Screenshot

20

Abbildung 14: Direkte Typangabe bei einer Struktur: SAP-System-Screenshot

20

Abbildung 15: Ein Tabellentyp im ABAP Dictionary: SAP-System-Screenshot

21

Abbildung 16: Einstellungen zu Initialisierung und Zugriff: SAP-System-Screenshot

22

Abbildung 17: Einstellung zum Schlüssel: SAP-System-Screenshot

22

Abbildung 18: Definition einer Typgruppe im ABAP Dictionary: SAP-System-Screenshot . 23

Abbildung 19: Anlegen einer Domäne aus dem Einstiegsbild des ABAP Dictionary: SAP - System-Screenshot Abbildung 20: Definition der Domäne im ABAP Dictionary: SAP-System-Screenshot Abbildung 21: Erster Schritt zum Anlegen eines Datenelements: SAP-System-Screenshot

ABAP Dictionary: SAP-System-Screenshot Abbildung 21: Erster Schritt zum Anlegen eines Datenelements: SAP-System-Screenshot
ABAP Dictionary: SAP-System-Screenshot Abbildung 21: Erster Schritt zum Anlegen eines Datenelements: SAP-System-Screenshot

24

25

26

Abbildung 22: Zweiter Schritt zum Anlegen eines Datenelements: SAP-System-Screenshot 26

Abbildung 23: Datentypangaben des Datenelements: SAP-System-Screenshot

27

Abbildung 24: Pflege der Feldbezeichner: SAP-System-Screenshot

27

Abbildung 25: Erster Schritt zum Anlegen einer Struktur im ABAP Dictionary: SAP - System-

Screenshot

28

Abbildung 26: Zweiter Schritt zum Anlegen einer Struktur im ABAP Dictionary: SAP - System-Screenshot

28

Abbildung 27: Beispiel für eine Struktur für Studenten: SAP-System-Screenshot

28

Abbildung 28: Erster Schritt zum Anlegen eines Tabellentypen im ABAP Dictionary: SAP - System-Screenshot

29

Abbildung 29: Zweiter Schritt zum Anlegen eines Tabellentypen im ABAP Dictionary: SAP -

System-Screenshot

29

Abbildung 30:

Zeilentypangabe des Tabellentyps: SAP-System-Screenshot

29

Abbildung 31: Konfiguration des Schlüssels eines Tabellentyps: SAP-System-Screenshot

30

Abbildung 32: Korrigierter Titel: SAP-System-Screenshot

31

Abbildung 33: Oberfläche ohne gepflegten Selektionstext: SAP-System-Screenshot

32

Abbildung 34: Aus dem ABAP Dictionary geladener Text (Beispiel Studiengang): SAP- System-Screenshot

32

Abbildung 35: Oberfläche mit Selektionstext aus dem ABAP Dictionary: SAP-System- Screenshot

32

Abbildung 36: Schlüsselfelder einer Tabelle

33

Abbildung 37: Unterschiedliche Felder, unterschiedliche Datenelemente, selbe Domäne

34

Abbildung 38: Eine Struktur als Include in unterschiedlichen Tabellen

35

Abbildung 39: Anlegen einer Datenbanktabelle: SAP-System-Screenshot

35

Abbildung 40: Felder der Tabelle: SAP-System-Screenshot

36

Seite 4

Copyright Prof. Dr. Heimo H. Adelsberger/Dipl.-Wirt.-Inf. Pouyan Khatami

Einführung in ABAP

Abbildung 41:

Expandiertes Include: SAP-System-Screenshot

36

Abbildung 42: Feldliste mit vollständigem Schlüssel

37

Abbildung 43: Technische Einstellungen einer Tabelle: SAP-System-Screenshot

37

Abbildung 44:

Beispiel für Fragmentierung

38

Abbildung 45: Größenkategorien: SAP-System-Screenshot

39

Abbildung 46: Puffer

40

Abbildung 47: Technische Einstellungen der Studenten-Tabelle: SAP-System-Screenshot

41

Abbildung 48: Aufbau einer lesenden Anfrage (Überblick)

44

Abbildung 49: Veranschaulichung der Anfrage

46

Abbildung 50: Explizite Angabe der Zielfelder

48

Abbildung 51: Beispiel für Namensbasierte Feldzuordnung

49

Abbildung 52: Der Array Fetch

50

Abbildung 53: SELECT als Schleifenkonstrukt

51

Figure 54: SELECT-Schleife: SAP-System-Screenshot

52

Abbildung 55: Programmausgabe: SAP-System-Screenshot

53

Abbildung 56: Selektionsbildschirm: SAP-System-Screenshot

54

Abbildung 57: Selektionsbildschirm: SAP-System-Screenshot

54

Abbildung 58: Anlegen eines Funktionsbausteins: SAP-System-Screenshot

54

Abbildung 59: Import-Parameter des Funktionsbausteins: SAP-System-Screenshot

55

Abbildung 60: Der Tabellentyp auf Basis von SPFLI: SAP-System-Screenshot

55

Abbildung 61: Verwendung des Tabellentypen für die Typisierung: SAP-System-Screenshot

 

55

Abbildung 62: Aufruf des Funktionsbausteins : SAP-System-Screenshot

56

Abbildung 63: Neue Ausnahme: SAP-System-Screenshot

56

Abbildung 64: Ausgabe einer einfachen Fehlermeldung: SAP-System-Screenshot

57

Abbildung 65: Beispiel für einen Tabellen-Join

62

Abbildung 66: Ausgabe des Join-Programms: SAP-System-Screenshot

63

Abbildung 67: Code für das Join-Programm: SAP-System-Screenshot

63

Abbildung 68: Ausgaben des Statistikprogramms: SAP-System-Screenshot

71

Abbildung 69: Beispiel für ein Statistik-Programm: SAP-System-Screenshot

72

Abbildung 70: Überblick über das Berechtigungskonzept

80

Abbildung 71: Das Berechtigungsobjekt S_CARRID: SAP-System-Screenshot

82

Abbildung 72: Zulässige Aktivitäten: SAP-System-Screenshot

83

Abbildung 73: AUTHORITY-CHECK als Muster einfügen: SAP-System-Screenshot

83

Abbildung 74: Code zur Prüfung der Berechtigung: SAP-System-Screenshot

84

Abbildung 75: Zugriff mit und ohne Index

85

Abbildung 76: Anlegen eines Index: SAP-System-Screenshot

86

Abbildung 77: Pflege der Eigenschaften des Index: SAP-System-Screenshot

87

Abbildung 78: Status des Index: SAP-System-Screenshot

87

Abbildung 79: Vollständige Pufferung

89

Abbildung 80: Generische Pufferung

90

Abbildung 81:

Einzelsatzpufferung

91

Abbildung 82: Pufferung in zwei Anwendungsservern

92

Abbildung 83: Synchronisationsbeispiel 1/4

93

Abbildung 84: Synchronisationsbeispiel 2/4

94

Abbildung 85: Synchronisationsbeispiel 3/4

95

Abbildung 86: Synchronisationsbeispiel 4/4

96

Abbildung 87: Pflegedialog und Pflegeview

100

Abbildung 88: Anlegen eines Pflege-Views: SAP-System-Screenshot

101

Abbildung 89: Beziehungen der Tabelle SBUSPART: SAP-System-Screenshot

102

Abbildung 90: Automatische Joinbedingungen: SAP-System-Screenshot

102

Einführung in ABAP

Abbildung 91: Auswahl der Felder für den Pflegeview: SAP-System-Screenshot

103

Abbildung 92: Tabellenpflegegenerator: SAP-System-Screenshot

104

Abbildung 93: Tabellentyp ändern: SAP-System-Screenshot

106

Abbildung 94: Aufbau eines Tabellenclusters

107

Abbildung 95: Aufbau eines Tabellenpools

108

Abbildung 96: Verwendungsnachweis

110

Abbildung 97: Aktive und inaktive Version einer Struktur

111

Abbildung 98: Auswahlfenster für den Verwendungsnachweis: SAP-System-Screenshot

112

Abbildung 99:

Ergebnisse der Suche: SAP-System-Screenshot

113

Abbildung 100: Starttermin festlegen: SAP-System-Screenshot

113

Abbildung 101: Ein Hintergrundjob wurde beendet: SAP-System-Screenshot

114

Abbildung 102: Änderung an verschiedenen Stellen

115

Abbildung 103:

Umsetzung 1/5

116

Abbildung 104:

Umsetzung 2/5

117

Abbildung 105:

Umsetzung 3/5

118

Abbildung 106:

Umsetzung 4/5

119

Abbildung 107:

Umsetzung 5/5

120

Abbildung 108:

Direkte Typeingabe: SAP-System-Screenshot

121

Abbildung 109: Felder der Tabelle ZZ####_UMSETZ: SAP-System-Screenshot

121

Abbildung 110: Daten der Tabelle: SAP-System-Screenshot

122

Abbildung 111: Fehlermeldung: SAP-System-Screenshot

122

Abbildung 112: Fehler bei der Aktivierung: SAP-System-Screenshot

122

Abbildung 113: Einstiegsmaske des Datenbank-Utility: SAP-System-Screenshot

123

Abbildung 114:

Erfolgsmeldung: SAP-System-Screenshot

123

Abbildung 115:

Geänderte Tabelle: SAP-System-Screenshot

123

Abbildung 116: Tabelleninhalt nach der Umsetzung: SAP-System-Screenshot

124

Abbildung 117:

Append-Strukturen

125

Abbildung 118: Appends und neue Felder von SAP

126

Abbildung 119: Anlegen einer Append-Struktur: SAP-System-Screenshot

127

Abbildung 120: Pflege der Append-Struktur: SAP-System-Screenshot

127

Abbildung

121:

Append-Struktur in der Feldliste : SAP-System-Screenshot

128

Einführung in ABAP

Copyright

Für alle Screenshots im Skriptum, auch wenn diese nur verkürzt oder auszugsweise gezeigt werden, gilt der Hinweis: Copyright SAP AG

Die Theorieteile basieren auf der im ersten Skript aufgelisteten Literatur.

Die Weitergabe und Vervielfältigung dieser Publikation oder von Teilen daraus sind, zu welchem Zweck und in welcher Form auch immer, ohne die schriftliche Genehmigung von Prof. Dr. Heimo H. Adelsberger und Dipl.-Wirt.-Inf. Pouyan

Khatami nicht gestattet .

Einführung in ABAP

8 ABAP Dictionary und Datenbanken

Das ABAP Dictionary (ehemals R/3 Data Dictionary) ist ein mächtiges Werkzeug des SAP- Systems. Die Aufgaben liegen in der Verwaltung von Daten und Metadaten, also Daten über Daten.

Verwaltung von Daten und Metadaten, also Daten über Daten. Abbildung 1: Funktionen des Dictionary im Überblick

Abbildung

1: Funktionen des Dictionary im Überblick

Die obige Abbildung veranschaulicht die Funktionen des ABAP Dictionary. Diese sind:

Typdefinitionen

o

Datentypen global verfügbare Datentypen (Gegensatz zu den lokal über TYPES definierten Typen)

o

Typgruppen Gruppen von Datentypen

 

o

Domänen

beschreiben

technische

Eigenschaften

wie

Wertebereiche

von

Datenelementen

 

Services

 

o

Das

Dictionary

enthält

Suchhilfen

für

die

Erstellung

von

Oberflächen

mit

bequemer Eingabemöglichkeit

 

o

Es können Bezeichnungen und Hilfen zu Datentypen in verschiedenen Sprachen hinterlegt und somit auch zentral gepflegt werden

Die Verwaltung von Datenbankobjekten

o

Datenbanktabellen

(Tabellen

des zugrunde liegenden relationalen

Datenbanksystems) werden im Dictionary verwaltet und von diesem auf der Datenbank angelegt, geändert bzw. gelöscht

o

Über das ABAP Dictionary kann der Zugriff auf Datenbanken realisiert werden, ohne dass dem Programm hierfür bekannt sein muss, um welche Datenbank es sich genau handelt (z. B. MS SQL-Server)

o

Datenbanken können als Entity-Relationship-Modell grafisch angezeigt werden

o

Das Dictionary enthält Views (Sichten auf die Tabellen, die mehrere Tabellen verknüpfen können oder nur bestimmte Teile von Tabellen enthalten). Hierbei

Einführung in ABAP

kann es sich um Views des zugrundeliegenden DB- Systems handeln, dies ist aber nicht zwingend erforderlich.

o

Das Dictionary enthält Sperrobjekte als Grundlage für Sperren auf Datenbanktabellen

o

Einstellungen

zur

Pufferung

zur

Erhöhung

der

Performance

können

vorgenommen werden

 

o

Fremdschlüsselbeziehungen zur Sicherung konsistenter Eingaben in Dynpros können definiert werden

o

Es

kann eine

Protokollierung von Änderungen an Tabelleneinträgen aktiviert

werden

Das ABAP Dictionary interagiert mit den Werkzeugen der ABAP Workbench, mit dem Dynpro-Interpreter sowie mit der Datenbankschnittstelle.

Beispiele für diese Interaktion sind:

Die Nutzung von Datentypen des ABAP Dictionary bei der Erstellung von Quellcode in der ABAP Workbench

Die

Nutzung einer

Suchhilfe

in einer

Dynpro - Oberfläche, die im ABAP Dictionary

definiert wurde

Die Definition einer Tabelle im ABAP Dictionary, die durch das Dictionary auf der Datenbank angelegt wird

8.1 Exkurs: Der Data Browser

In SAP steht zu Übungszwecken ein Flugdatenbeispiel bereit. Anhand dieses Beispiels können alle Konzepte des ABAP Dictionary geübt werden. Es enthält Daten zu Fluggesellschafte n, Flugverbindungen, Flügen, Buchungen usw.

Einige der Tabellen des Flugdatenbeispiels werden in den Erläuterungen zum Arbeiten mit dem ABAP Dictionary verwendet. Sie können die Inhalte dieser und anderer Datenbanktabellen über den Data Browser erreichen.

8.1.1 Aufgaben des Data Browsers

Den Data Browser erreichen Sie über den Menüpfad

Werkzeuge -> ABAP Workbench -> Übersicht -> Data Browser

oder den Transaktionscode

SE16.

Hierüber können die Inhalte von Tabellen betrachtet werden. Wenn in den Tabelleneigenschaften eine unbeschränkte Pflegeerlaubnis erteilt wurde, können von hier aus auch neue Inhalte angelegt werden. Natürlich gibt es auch eine Funktion zum Bearbeiten von Einträgen. Auch Einträge aus Prüftabellen können angezeigt werden.

Einführung in ABAP

8.1.2 Praxis: Übung zur Nutzung des Data Browsers

Starten Sie den Data Browser über den o. g. Menüpfad oder den Transaktionscode SE16.

Geben Sie als Tabellenname SPFLI an und bestätigen Sie. Sie gelangen nun zu einer Eingabemaske, in der die verschiedenen Spalten der Tabelle angeze igt werden. Diese Maske

von Filterkriterien. Die Tabelle SPFLI enthält Daten über

Flugverbindungen.

dient

der

Eingabe

enthält Daten über Flugverbindungen. dient der Eingabe Abbildung 2: Ein Selektionsbild des Data Browsers:

Abbildung

2: Ein Selektionsbild des Data Browsers: SAP-System-Screenshot

Als kleine Übung sollen die Flüge der Linien Delta Airlines und Lufthansa, die zwischen einer und sechs Stunden dauern, ausgewählt werden.

Geben Sie hierzu in das Eingabefeld neben CARRID (ID der Fluggesellschaft) das Kürzel für Delta Airlines ein. Verwenden Sie die Werthilfe, um das Kürzel zu erfahren. Da für die Aufgabe mehrere Fluggesellschaften relevant sind, muss eine Mehrfachauswahl stattfinden. Klicken Sie daher nun auf die Schaltfläche (Mehrfachselektion) in der gleichen Zeile, in der sich auch das Eingabefeld CARRID befindet. Im erscheinenden Fenster ist das Kürzel für Delta Airlines bereits in der ersten Zeile eingetragen. Verwenden Sie die zweite Zeile, um das Kürzel für die Lufthansa hinzuzufügen. Benutzen Sie ebenfalls die Werthilfe. Bestätigen Sie mit der Schaltfläche (Übe rnehmen) oder der Taste F8. Geben Sie nun bei FLTIME 1:00

oder der Taste F8 . Geben Sie nun bei FLTIME 1:00 Seite 10 Copyright Prof. Dr.
oder der Taste F8 . Geben Sie nun bei FLTIME 1:00 Seite 10 Copyright Prof. Dr.

Einführung in ABAP

ein und im daneben stehenden bis - Eingabefeld 6:00. Hierdurch werden die Flüge gefiltert, deren Flugdauer zwischen einer und sechs Stunden liegt. Bestätigen Sie die Kriterien mit der Schaltfläche (Ausführen) oder der Taste F8.

mit der Schaltfläche (Ausführen) oder der Taste F8 . Sie sehen nun drei Flüge, die den

Sie sehen nun drei Flüge, die den zuvor spezifizierten Kriterien genügen. Sollten Sie andere Daten vorfinden, kann dies daran liegen, dass andere Kursteilnehmer bereits schreibend auf die Datenbank zugegriffen haben.

bereits schreibend auf die Datenbank zugegriffen haben. Abbildung 3: Ergebnisliste des Data Browsers:

Abbildung

3: Ergebnisliste des Data Browsers: SAP-System-Screenshot

Verlassen Sie den Data Browser nun wieder.

Einführung in ABAP

8.2 Typen des ABAP Dictionary

Das ABAP Dictionary verfügt über einige eingebaute, elementare Typen. Diese Typen bauen

Definition von Datentypen im

Dictionary verwendet. Die so definierten Datentypen können auch in gewöhnlichen ABAP -

Programmen verwendet werden, die eingebauten Typen hingegen nicht. Sie werden jedoch verwendet, um im Screen Painter Eingabefeldern Typen zuzuweisen oder in Open SQL (hierzu später mehr).

auf

den bekannten ABAP - Datentypen auf und

werden zur

auf den bekannten ABAP - Datentypen auf und werden zur Abbildung 4: Der Einstiegsbildschirm des ABAP

Abbildung

4: Der Einstiegsbildschirm des ABAP Dictionary: SAP-System-Screenshot

Um die eingebauten Typen zu sehen, öffnen Sie das ABAP Dictionary (Transaktion SE11). Klicken Sie auf das Eingabefeld neben Datentyp und dann auf die Werthilfe des Feldes. Klicken Sie anschließend auf die Schaltfläche Suche nach Datenelementen. Es erscheint ein neues Fenster, klicken Sie dort ebenfalls auf das Eingabefeld neben Datentyp und auf dessen Werthilfe. Es erscheint folgendes Fenster:

Einführung in ABAP

Einführung in ABAP Abbildung 5: Externe Typen des Dictionary: SAP-System-Screenshot Um detaillierte Informationen zu

Abbildung

5: Externe Typen des Dictionary: SAP-System-Screenshot

Um detaillierte Informationen zu erhalten, klicken Sie mit der rechten M austaste auf einen der externen Typen und wählen Sie Hilfe . Es erscheint ein Fenster mit einer Erläuterung zum angeklickten Typ. In diesem Fenster finden Sie auch einen Link zur Übersicht der Datentypen. Dort sind alle externen Typen mit einer kurzen Erklärung aufgelistet.

Schauen Sie sich die Typen an. Einige der Typen werden Ihnen im weiteren Kursverlauf noch einmal begegnen. An diesen Stellen können Sie die Informationen aus den hier beschriebenen Hilfetexten verwenden, um die Eigenschaften der Typen nac hzuschlagen.

8.2.1 Von lokalen zu globalen Typen

Die folgende Abbildung kennen Sie bereits aus einem früheren Teil des Kurses. Sie zeigt die Hierarchie der Typen in ABAP:

Einführung in ABAP

Einführung in ABAP Abbildung 6: Die Typhierarchie von ABAP Sie haben bereits gelernt, wie Sie lokale

Abbildung

6: Die Typhierarchie von ABAP

Sie haben bereits gelernt, wie Sie lokale benutzerdefinierte Typen definieren können:

Elementare Typen über die einfache TYPES-Definition

Zeilentypen über die TYPES-Definition mit BEGIN OF / END OF

Tabellentypen über die TYPES-Definition mit dem Zusatz TABLE OF

Der Nachteil d ieser lokal definierten Typen ist, dass sie nur im jeweiligen Programm definiert sind: Definieren Sie in einem Programm einen Typ (bspw. Ihr Typ für Fahrzeuge aus der Übung), und in einem anderen Programm eine Variable dieses Typs, führt dies zu einem Fehler. Ein naheliegender Gedanke wäre, den Typ in beiden Programmen zu definieren. Hierdurch würde jedoch der Pflegeaufwand größer. Stattdessen verfügt das SAP-System über das ABAP Dictionary, mit dem globale Typen definiert und daraufhin in allen Programmen genutzt werden können. Hinzu kommen weitere, bereits zu Beginn dieses Kapitels genannte Vorteile, die Sie sich zunutze machen können.

Die folgende Abbildung zeigt einen Überblick über die Typen des Dictionary, die im Folgenden erläutert werden. Die Darstellung ist vereinfacht. So ist es etwa auch möglich, einen Tabellentypen zu definieren, der nicht auf einem Strukturtyp basiert.

Einführung in ABAP

Einführung in ABAP Abbildung 8.2.2 Domänen 7: Dictionary-Typen im Zusammenhang Domänen dienen dazu, technische

Abbildung

8.2.2 Domänen

7: Dictionary-Typen im Zusammenhang

Domänen dienen dazu, technische Eigenschaften von Datentypen zu definieren. Datentypen lassen sich auch ohne Domäne durch direkte Angabe aller benötigter Eigenschaften definieren, dies gilt jedoch nicht als guter Stil. Aus diesem Grund sollten Sie möglichst auf Domänen zurückgreifen.

Domänen können nicht dazu verwendet werden, Datenobjekte in ABAP - Programmen zu typisieren. Hierfür sind mindestens Datentypen notwendig.

Einführung in ABAP

Einführung in ABAP Abbildung 8: Beispiel für eine Domäne im Dictionary: SAP-System-Screenshot Der Screenshot zeigt die

Abbildung

8: Beispiel für eine Domäne im Dictionary: SAP-System-Screenshot

Der Screenshot zeigt die Definition einer Domäne. Hier können Einstellungen zum Format und zu den Ausgabeeigenschaften vorgenommen werden.

Zunächst ist der Datentyp festzulegen, in diesem Fall ist dies CHAR. Hier können alle eingebauten Typen des Dictionary ausgewählt werden, die Sie in Abschnitt 8.2 gesehen haben. Für entsprechende Typen kann die Anzahl der zu speichernden Stellen bzw. Dezimalstellen festgelegt werden. Im Beispiel ist das Dezimalstellen-Feld deaktiviert, da der CHAR-Typ eine solche Angabe nicht zulässt.

Beachten Sie, dass Felder des Typ CHAR in Tabellen nur die maximale Länge von 255 haben dürfen. Für längere Texte ist die Verwendung des Typ LCHR erforderlich. Diese Einschränkung gilt nicht für Strukturen.

Bei den Ausgabeeigenschaften kann die Ausgabelänge festgelegt werden, die die Feldlänge

dient der Angabe einer

Konvertierungsroutine. Diese sind dann vonnöten, wenn zwischen Eingabe und Speicherung bzw. bei der Ausgabe Umwandlungen zwischen der Darstellung und der internen Repräsentation vorgenommen werden sollen. Das Vorzeichen-Feld gibt an, ob negative Werte

zulässig sind oder nicht, während das Kleinbuchstaben-Feld die Unterscheidung zwischen

für die

Ein-

und Ausgabe bestimmt. Das Feld

Konvert.-Routine

Einführung in ABAP

Groß- und Kleinbuchstaben ein- bzw. ausschaltet. Bei Nichtunterscheidung werden Kleinbuchstaben nach der Eingabe automatisch in Großbuchstaben umgewandelt.

nach der Eingabe automatisch in Großbuchstaben umgewandelt. Abbildung 9: Die Wertebereichs-Angaben der Domäne:

Abbildung

9: Die Wertebereichs-Angaben der Domäne: SAP-System-Screenshot

Im Karteireiter Wertebereich können bei Bedarf nur bestimmte Festwerte oder Intervalle von Werten für die Domäne zugelassen werden. Eine solche Festlegung ist nur möglich, wenn die Domäne auf einem der eingebauten Typen CHAR, NUMC, DEC, INT1, INT2 oder INT4 basiert. Die Angabe einer Wertetabelle hat nur dokumentarischen Wert, eine Angabe dient hier lediglich der Generierung von Vorschlägen bei Fremdschlüsseln von Tabellen.

8.2.3 Datenelemente

Sie kennen bereits lokale Typen, die Sie mit der TYPES-Anweisung definieren. Die globalen Datentypen (Datenelemente) des ABAP Dictionary können genau wie die lokalen Typen in ABAP-Programmen verwendet werden. Zu den Vorteilen von globalen Typen zählen:

Zentrale Wartbarkeit

Einführung in ABAP

Wiederverwendbarkeit

Hinterlegen von Zusatzeigenschaften und Feldbezeichnern

 Hinterlegen von Zusatzeigenschaften und Feldbezeichnern Abbildung 10: Pflegedialog eines Datenelements:

Abbildung

10: Pflegedialog eines Datenelements: SAP-System-Screenshot

Die Abbildung zeigt,

Fahrzeugbeispiel definiert werden kann. Hier werden die Technischen Eigenschaften aus der

soeben definierten Domäne bezogen. Alternativ wäre es auch möglich, diese durch direkte Angabe des eingebauten Typs und der Länge zu d efinieren. So können jedoch technische Eigenschaften unterschiedlicher Datenelemente, die technisch gleiche Eigenschaften haben sollen, nicht mehr zentral gepflegt werden.

ein Datenelement für den Herstellernamen aus dem

wie

Einen Spezialfall stellt die Angabe eines Referenztyps dar. Hier können Referenzen auf andere Datenelemente, aber auch generische Referenzen auf ANY, OBJECT oder DATA festgelegt werden. Referenzen des Typs ANY können sowohl auf Objekte als auch auf Daten zeigen. Referenztypen werden Ihnen im Rahmen von ABAP Objects begegnen.

Datenelemente

Typs.

Felder gepflegt:

beschreiben im Gegensatz zu Domänen auch s emantische Eigenschaften des

Feldbezeichner Beschriftungen für entsprechend typisierte

So

werden auf dem Tab

Einführung in ABAP

Einführung in ABAP Abbildung 11: Der Karteireiter zur Festlegung der Feldbezeichner: SAP-System-Screenshot Die hier

Abbildung

11: Der Karteireiter zur Festlegung der Feldbezeichner: SAP-System-Screenshot

Die hier hinterlegten Bezeichner können, z. B. bei der Gestaltung von Oberflächen wiederverwendet werden: Die Selektionstexte zu einem Eingabefeld können automatisch über das dem Feld zugrundeliegenden Datenelement aus dem Dictionary bezogen werden. Hierbei wird auch Mehrsprachigkeit unterstützt, so dass dem Anwender automatisch Texte in seiner Sprache angezeigt werden. Diese Übersetzungen können im Dictionary vorgenommen werden, indem der Menüpfad Springen -> Übersetzung gewählt wird. Die angegebenen Längen sind als Maximallängen zu verstehen, die für alle Sprachen gelten. Sie sollten diese deshalb großzügig wählen.

Der

Datenelement.

Thematisiert

Nutzung

Systems durch den Anwender verwendete Felder, in die in der Regel immer der gleiche Wert eingetragen werden muss, nach der ersten Eingabe im weitere n Sitzungsverlauf automatisch

Zusatzeigenschaften ermöglicht einige weitere Einstellungen zum

Karteireiter

So

können Suchhilfen konfiguriert

werden,

die

später

im Kurs noch näher

werden.

Außerdem kann eine Parameter-ID vergeben werden. Dies dient der

Dabei

geht

es

darum,

häufig bei der Nutzung des

von

GET/SET-Parametern.

vorzubefüllen.

Beachten Sie,

dass

Datenelemente

wie auch andere Typen im Dictionary aktiviert werden

müssen!

8.2.4 Strukturen

Bislang haben wir Feldleistentypen im Code definiert wie den Typ str_fahrzeug :

TYPES: BEGIN OF str_fahrzeug, herstellername(30) TYPE c, modellname(30) TYPE c, farbe(10) TYPE c, motorleistung TYPE i, END OF str_fahrzeug.

So wurde ein Typ definiert, der den Aufbau von Datenobjekten des Typs str_fahrzeug festlegt.

Aufbau von Datenobjekten des Typs str_fahrzeug festlegt. Abbildung 12: Der Strukturtyp str_fahrzeug Seite 19

Abbildung

12: Der Strukturtyp str_fahrzeug

Einführung in ABAP

Wie bei der TYPES - Anweisung können auch im Dictionary Strukturen angelegt werden. Die folgende Abbildung zeigt eine Struktur im Dictionary, die dem lokalen Typ nachempfunden wurde:

im Dictionary, die dem lokalen Typ nachempfunden wurde: Abbildung 13: Eine Struktur im ABAP Dictionary:

Abbildung

13: Eine Struktur im ABAP Dictionary: SAP-System-Screenshot

In der Spalte Komponententyp ist für jedes Feld der Struktur ein Datenelement des ABAP Dictionary angegeben. Der Inhalt der Spalte Kurzbeschreibung wird von diesen Datenelementen bezogen. Ebenfalls werden über das Datenelement die technischen Eigenschaften bezogen: Entweder aus der im Datenelement angegebenen Domäne oder aus der etwas weniger eleganten Angabe direkt im Datenelement.

Durch Anklicken der Schaltfläche

kann die Definition der Komponenten

der Struktur auch ohne Datenelement vorgenommen werden:

der Struktur auch ohne Datenelement vorgenommen werden: Abbildung 14: Direkte Typangabe bei einer Struktur:
der Struktur auch ohne Datenelement vorgenommen werden: Abbildung 14: Direkte Typangabe bei einer Struktur:

Abbildung

14: Direkte Typangabe

bei einer Struktur: SAP-System-Screenshot

Hierdurch

werden

die

Spalten

ab

Datentyp

eingabebereit,

die

Spalte

Komponententyp

hingegen

deaktiviert.

Hier

könnten

nun

direkte

Typeinstellungen

unter

Rückgriff

auf

die

eingebauten

Typen

des

Dictionary

vorgenommen

werden.

Dieser

Weg

ist

jedoch

wenig

elegant.

Die

global definierte

Struktur

kann nach Aktivierung in beliebigen ABAP - Programmen zur

Typisierung von Datenobjekten verwendet werden. Ein einfaches Beispiel zeigt die folgende Zeile:

DATA meinfirmenwagen TYPE zz0000_fahrzeug.

Eine Struktur wird als tiefe Struktur bezeichnet, wenn sie mindestens eine Komponente besitzt, deren Typ ein Tabellentyp (oder Referenztyp oder String) ist. Globale Tabellentypen werden im folgenden Abschnitt erläutert.

8.2.5 Tabellentypen

Analog zu den lokalen Tabellentypen können im Dictionary globale Tabellentypen hinterlegt werden. Diese können in Programmen wie lok ale Tabellentypen zur Definition von internen Tabellen verwendet werden.

Einführung in ABAP

Ein Tabellentyp für Fahrzeuge könnte wie folgt aussehen:

Ein Tabellentyp für Fahrzeuge könnte wie folgt aussehen: Abbildung 15: Ein Tabellentyp im ABAP Dictionary:

Abbildung

15: Ein Tabellentyp im ABAP Dictionary: SAP-System-Screenshot

Analog zur lokalen Definition von Tabellentypen wird auch hier ein Typ für die Zeilen des

hier

ZZ#### _FAHRZEUG. Dass es sich um eine Struktur handelt, können Sie an dem Symbol

Tabellentypen festgelegt.

In

der

Regel

ist

dies

eine

Struktur,

so

wie

festgelegt. In der Regel ist dies eine Struktur, so wie neben dem Eingabefeld für den Typ

neben dem Eingabefeld für den Typ erkennen.

neben dem Eingabefeld für den Typ erkennen.
so wie neben dem Eingabefeld für den Typ erkennen. und jeder Eintrag der Tabelle bestünde nur

und jeder Eintrag der Tabelle

bestünde nur aus einem solchen einfachen Element. Würde ein Tabellentyp angegeben, wäre

Würde nur ein Datenelement angegeben, wäre das Symbol

das Symbol . In diesem Fall entspricht jeder Eintrag der Tabelle selbst einer Tabelle. Wie bei den lokalen Tabellentypen ist dies in den meisten Fällen nicht das erwünschte Ergebnis. Im Karteireiter Initialisierung und Zugriff können die Einstellungen zur initialen Zeilenanzahl gemacht werden (entspricht INITIAL SIZE bei lokalen Typen) sowie der Tabellentyp festgelegt werden.

Einführung in ABAP

Einführung in ABAP Abbildung 16: Einstellungen zu Initialisierung und Zugriff: SAP-System-Screenshot Hier stehen auch die

Abbildung

16: Einstellungen zu Initialisierung und Zugriff: SAP-System-Screenshot

Hier stehen auch die generischen Einstellungen Index-Tabelle und nicht spezifiziert zur Auswahl. Hierdurch entstünden generische Typen, die Sie zur Typisierung von Formalparametern von Modularisierungseinheiten einsetzen können.

Im

werden.

Karteireiter

Schlüssel

können

Einstellungen

zum

Schlüssel

des

Tabellentyps

gemacht

Einstellungen zum Schlüssel des Tabellentyps gemacht Abbildung 17: Einstellung zum Schlüssel:

Abbildung

17: Einstellung zum Schlüssel: SAP-System-Screenshot

Die Schlüsselart entspricht der Angabe UNIQUE / NON UNIQUE bei lokalen Tabellentypen. Im Bereich Schlüsseldefinition kann, ggf. über die darunter befindliche Liste, bestimmt werden, aus welchen Komponenten der Tabellenschlüssel bestehen soll. Die Einstellung Standardschlüssel verwendet bei einer Struktur als Zeilentyp deren zeichenartige

Seite 22

Copyright Prof. Dr. Heimo H. Adelsberger/Dipl.-Wirt.-Inf. Pouyan Khatami

Einführung in ABAP

Komponenten, bei einfachen oder Referenztypen die gesamte Zeile, bei Tabellentypen als Zeilentyp ist der Schlüssel leer. Die Einstellung Zeilentyp verwendet den Zeilentyp als Schlüssel. Diese Einstellung wird bei strukturlosen Tabellen verwendet. Es kann dann über die Pseudokomponente TABLE_KEY auf den Schlüssel zugegriffen werden.

Datenobjekte die den Tabellentyp besitzen sollen, nicht mit

Beachten Sie

TABLE OF definiert werden dürfen, da dies stattdessen eine Tabelle von Tabellen des Typs erzeugen würde (technisch ist dies möglich, aber in der Regel nicht erwünscht) .

auch hier,

dass

8.2.6 Typgruppen und Konstanten

Um im Dictionary Konstanten definieren zu können, muss eine Typgruppe (Type Pool) angelegt werden. Namen von Typgruppen dürfen höchstens 5 Zeichen enthalten. Es handelt sich dabei um ein Stück ABAP - Code, in dem Sie die Konstanten wie lokale K onstanten über den CONSTANTS-Befehl definieren können. Auch die Definition von Typen ist dort erlaubt. Das Konzept Typen in Typgruppen zu definieren ist ein Vorläufer globaler Typen 1 .

zu definieren ist ein Vorläufer globaler Typen 1 . Abbildung 18: Definition einer Typgruppe im ABAP

Abbildung

18: Definition einer Typgruppe im ABAP Dictionary: SAP-System-Screenshot

Der Bezeichner der Konstanten und Typen muss hierbei mit dem Namen der Typgruppe gefolgt von einem Unterstrich beginnen.

Um die Typgruppe in einem ABAP - Programm verwenden zu können, muss sie dort über den Befehl TYPE-POOLS eingebunden werden:

TYPE-POOLS ZZ000.

Daraufhin können die Konstanten und Typen der Typgruppe im ABAP - Programm verwendet werden.

8.2.7 Praxis: Übung zu globalen Typen

In dieser Übung soll ein Programm erstellt werden, das mit den persönlichen Daten von Studenten arbeitet. Im Gegensatz zur Fahrzeugübung im letzten Kursteil werden jedoch globale Typen des ABAP Dictionary genutzt.

1 Keller (2012, S. 87)

Seite 23

Copyright Prof. Dr. Heimo H. Adelsberger/Dipl.-Wirt.-Inf. Pouyan Khatami

Einführung in ABAP

Ein Student soll in einer Struktur über eine Matrikelnummer, seinen Namen, seinen Vornamen und drei weitere Eigenschaften Ihrer Wahl beschrieben werden.

Im Interesse eines guten Programmierstils werden Sie zunächst Domänen anlegen, diese anschließend zur Definition von Datentypen verwenden, und daraus einen Strukturtyp zusammensetzen, der schließlich Grundlage für einen Tabellentyp sein wird.

8.2.7.1 Domänen anlegen

Öffnen Sie das ABAP Dictionary über den Pfad Werkzeuge -> ABAP Workbench -> Entwicklung -> Dictionary aus dem Easy Access-Menü oder den Transaktionscode SE11. Es ist empfehlenswert, diese Transaktion auch in Ihre Favoriten aufzunehmen.

Um eine Domäne anzulegen, wählen Sie zunächst den Auswahlknopf Domäne aus und geben Sie in das Textfeld daneben ZZ_####_CHAR20 ein. Klicken Sie dann auf

Textfeld daneben ZZ_####_CHAR20 ein. Klicken Sie dann auf (siehe folgende Abbildung). Abbildung 19: Anlegen einer

(siehe folgende Abbildung).

ein. Klicken Sie dann auf (siehe folgende Abbildung). Abbildung 19: Anlegen einer Domäne aus dem Einstiegsbild

Abbildung

19: Anlegen einer Domäne aus dem Einstiegsbild des ABAP Dictionary: SAP-System- Screenshot

Pflegen

Sie

eine

passende

Kurzbeschreibung.

Die

Domäne

soll später

Grundlage

für

die

Datenelemente

für

Name,

Vorname

und

Studienfach werden.

Hierfür

wird

ein 20-stelliger

Zeichenkettentyp benötigt. Geben Sie daher als zugrundeliegenden Datentyp CHAR an, und als Zahl der Stellen genau wie für die Ausgabelänge 20 an. Lassen Sie außerdem Kleinbuchstaben zu.

Einführung in ABAP

Einführung in ABAP Abbildung 20: Definition der Domäne im ABAP Dictionary: SAP-System-Screenshot Speichern, prüfen und

Abbildung

20: Definition der Domäne im ABAP Dictionary: SAP-System-Screenshot

Speichern, prüfen und aktivieren Sie die Domäne anschließend.

Erstellen Sie als nächstes eine Domäne ZZ_####_N10. Diese soll später für die Matrikelnummern verwendet werden. Als Datentyp verwenden Sie hier den eingebauten Typ NUMC, für die Stellenzahl und Ausgabelänge den Wert 10. Speichern, prüfen und aktivieren Sie auch diese Domäne.

Legen Sie anschließend für die weiteren Komponenten, die Sie für die Abbildung eines Studenten ausgewählt haben, ebenfalls geeignete Domänen an, sofern die technischen Eigenschaften dieser Felder nicht bereits durch die soeben angelegten Domänen abgebildet werden. Achten Sie darauf, dass Ihre Domänen mit ZZ_####_ beginnen.

8.2.7.2 Datenelemente Anlegen

Nachdem durch die Domänen die technischen Eigenschaften spezifiziert wurden, sollen als nächstes Datenelemente für die semantischen Eigenschaften definiert werden.

Wählen Sie auf dem Einstiegsbildschirm des ABAP Dictionary den Eintrag Datentyp und geben Sie als Name ZZ_####_ST_NAME an. Klicken Sie anschließend auf die Schaltfläche Anlegen.

Einführung in ABAP

Einführung in ABAP Abbildung 21: Erster Schritt zum Anlegen eines Datenelements: SAP-System-Screenshot Nach dem Klick auf

Abbildung

21: Erster Schritt zum Anlegen eines Datenelements: SAP-System-Screenshot

Nach dem Klick auf Anlegen fragt das SAP-System, welche Art von Datentyp Sie anlegen möchten. Zur Auswahl stehen Datenelement, Struktur und Tabellentyp. Wählen Sie Datenelement und bestätigen Sie.

Tabellentyp. Wählen Sie Datenelement und bestätigen Sie. Abbildung 22: Zweiter Schritt zum Anlegen eines

Abbildung

22: Zweiter Schritt zum Anlegen eines Datenelements: SAP-System-Screenshot

Pflegen Sie nun eine passende Kurzbeschreibung und wählen Sie als Domäne die zuvor angelegte Domäne ZZ_####_CHAR20. Bei Bestätigung mit Enter sehen Sie die Eigenschaften der Domäne.

Einführung in ABAP

Einführung in ABAP Abbildung 23: Datentypangaben des Datenelements: SAP-System-Screenshot Wechseln entsprechenden

Abbildung

23: Datentypangaben des Datenelements: SAP-System-Screenshot

Wechseln

entsprechenden Angaben.

Sie

anschließend

zum

Karteireiter

Feldbezeichner

und

pflegen

Sie

die

zum Karteireiter Feldbezeichner und pflegen Sie die Abbildung 24: Pflege der Feldbezeichner:

Abbildung

24: Pflege der Feldbezeichner: SAP-System-Screenshot

Speichern, prüfen und aktivieren Sie das Datenelement.

Wiederholen Sie diese Schritte, indem Sie ein Datenelement ZZ_####_ST_VORNAME und ein Datenelement ZZ_####_ST_MATRIKEL für Vornamen und Matrikelnummern anlegen. Für die Matrikelnummer soll die Domäne ZZ_####_N10 verwendet werden.

Legen Sie des Weiteren passende Datenelemente für die weiteren Komponenten Ihrer Struktur an. Die Namen dieser Datenelemente sollen mit ZZ_####_ST_ beginnen.

Einführung in ABAP

8.2.7.3 Struktur anlegen

Als nächstes soll im ABAP Dictionary die Struktur für Studenten angelegt werden. Verwenden Sie zum Anlegen wie bei den Datenelementen Date nelement im Einstiegsbild des Dictionary, und geben Sie als Namen ZZ####_STUD an (Achtung: Diesmal steht kein Unterstrich zwischen ZZ und ####, da dieser hier nicht zulässig ist). Im danach erscheinen Fenster wählen Sie diesmal nicht Datenelement sondern Struktur.

wählen Sie diesmal nicht Datenelement sondern Struktur . Abbildung 25: Erster Schritt zum Anlegen einer Struktur
Abbildung 25: Erster Schritt zum Anlegen einer Struktur im ABAP Dictionary: SAP-System-Screenshot Abbildung 26: Zweiter
Abbildung
25: Erster Schritt zum Anlegen einer Struktur im ABAP Dictionary: SAP-System-Screenshot
Abbildung
26: Zweiter Schritt zum Anlegen einer Struktur im ABAP Dictionary: SAP-System-Screenshot

Komponenten der

Struktur an. Geben Sie hierfür in der Spalte Komponente den Namen (NAME, VORNAME, MATRIKEL usw.) an und in der Spalte Komponententyp das zugehörige Datenelement. Das

Pflegen

Sie

nun

eine

passende

Kurzbeschreibung

und

geben

Sie

die

Ergebnis

sollte

mit

der

folgenden

Abbildung

vergleichbar

sein,

wobei

die

über

Name,

Vorname

und

Matrikelnummer

hinausgehenden

Komponenten

natürlich

bei

Ihnen

anders

aussehen können:

natürlich bei Ihnen anders aussehen können: Abbildung 27: Beispiel für eine Struktur für Studenten:

Abbildung

27: Beispiel für eine Struktur für Studenten: SAP-System-Screenshot

Speichern, prüfen und aktivieren Sie die Struktur.

Ignorieren Sie die Warnungen zu den Erweiterungskategorien.

8.2.7.4 Tabellentyp anlegen

Als nächstes werden Sie einen Tabellentyp anlegen, mit dem eine interne Tabelle von Studenten später typisiert werden kann. Geben Sie dafür wie zuvor bei den Datenelementen

Einführung in ABAP

und bei der Struktur den Namen bei Datentyp in der Einstiegsmaske des Dictionary ein. Dieser soll ZZ_####_STUD_TAB lauten. Legen Sie den Typ über die Anlegen-Schaltfläche an und wählen Sie im erscheinenden Fenster diesmal Tabellentyp aus:

Sie im erscheinenden Fenster diesmal Tabellentyp aus: Abbildung 28: Erster Schritt zum Anlegen eines Tabellentypen

Abbildung

28: Erster Schritt zum Anlegen eines Tabellentypen Screenshot

im ABAP Dictionary: SAP-System-

Tabellentypen Screenshot im ABAP Dictionary: SAP-System- Abbildung 29: Zweiter Schritt zum Anlegen eines

Abbildung

29: Zweiter Schritt zum Anlegen eines Tabellentypen Screenshot

im ABAP Dictionary: SAP-System-

Pflegen Sie eine entsprechende Kurzbeschreibung und geben Sie als Zeilentyp die soeben angelegte Struktur ZZ####_STUD an:

als Zeilentyp die soeben angelegte Struktur ZZ####_STUD an: Abbildung 30: Zeilentypangabe des Tabellentyps:

Abbildung

30: Zeilentypangabe des Tabellentyps: SAP-System-Screenshot

Stellen

Sie

anschließend

sicher,

dass

im

Karteireiter

Initialisierung

und

Zugriff

der

Auswahlpunkt

Sortierte

Tabelle

ausgewählt

ist.

Wechseln

Sie

dann

zum

Karteireiter

Einführung in ABAP

Schlüssel und legen Sie fest, dass die Komponente MATRIKEL für den Schlüssel verwendet werden soll, und dieser Schlüssel eindeutig ist:

verwendet werden soll, und dieser Schlüssel eindeutig ist: Abbildung 31: Konfiguration des Schlüssels eines

Abbildung

31: Konfiguration des Schlüssels eines Tabellentyps: SAP-System-Screenshot

Speichern,

prüfen

und

aktivieren

Sie

den

Tabellentyp

und

verlassen

Sie

das

ABAP

Dictionary.

8.2.7.5 Verwendung der globalen Typen

Die global definierten Typen sollen nun für ein einfaches Programm zur Studentenverwaltung genutzt werden. Legen Sie hierfür ein neues Programm ZZ_####_STUDENTEN_GLOBAL an.

Ähnlich Ihrem CARS-Programm aus dem letzten Kursteil sollen auch hier Daten über eine Struktur eingegeben und in eine interne Tabelle eingefügt werden. Im Gegensatz zu diesem bisherigen Programm benötigen Sie hier aber keine TYPES -Anweisungen. Stattdessen werden Sie Ihre globalen Typen benutzen.

Erstellen Sie daher nun einen Arbeitsbereich, bei dem Sie als Typ ZZ####_STUD angeben, und eine interne Tabelle, bei der Sie als Typ ZZ_####_STUD_TAB verwenden.

Achtung:

ZZ_####_STUD_TAB ist selbst bereits ein Tabellentyp. Theoretisch wäre es möglich, statt

Z Z####_STUD zu typisieren. Hierdurch würde jedoch

der globale Tabellentyp nicht mehr benutzt. Dies hätte zur Folge, dass die zusätzlichen

Einstellungen,

werden

den

Z Z_####_STUD_TAB zu typisieren. Dies wäre aber schlechter

lesbar.

Strukturtyp über LINE OF

Sie

benötigen

für

die

Typisierung

kein

TABLE

OF.

Der

Typ

des Tabellentyps mit

wie

könnten.

TABLE OF

die

Art

wäre

etwa

der

es

Tabelle,

auch

nicht

möglich,

mehr

den

zentral

im

Dictionary gewartet

statt

über

Umgekehrt

Arbeitsbeteich

Erstellen Sie nun mithilfe des Arbeitsbereiches fünf Studenten und fügen Sie diese in die interne Tabelle ein. Beachten Sie den Unterschied zwischen INSERT und APPEND, da es sich um eine sortierte Tabelle handelt. Geben Sie anschließend in einer Schleife den Inhalt der Tabelle aus. Achten Sie bitte auf eine lesbare Ausgabe.

Einführung in ABAP

Tipp: Sollten Sie eine Fehlermeldung erhalten, dass zur Tabelle kein gültiger Cursor existiert, haben sie wahrscheinlich beim INSERT-Befehl INTO statt INTO TABLE geschrieben.

Speichern, prüfen und aktivieren Sie Ihr Programm. Wenn Sie es nun testen, sollte die Ausgabe ähnlich der folgenden Abbildung sein:

sollte die Ausgabe ähnlich der folgenden Abbildung sein: Abbildung 32: Korrigierter Titel: SAP-System-Screenshot Um

Abbildung

32: Korrigierter Titel: SAP-System-Screenshot

Um die Nutzbarkeit der semantischen Informationen des Datentyps zu demonstrieren, soll nun eine Komponente der Studenten über einen Parameter gesetzt werden, dessen Selektionstext aus dem ABAP Dictionary bezogen wird.

Wählen Sie für diese Übung eine ihrer zusätzlichen Komponenten aus. Als Beispiel wird hier die Komponente Studienfach verwendet, verwenden Sie an den entsprechenden Stellen stattdessen die von ihnen gewählte Komponente.

Fügen Sie einen Parameter am Beginn der Anwendung (d. h. nach der REPORT- Anweisung) ein. Dieser soll mit dem Datenelement typisiert werden, mit dem die von Ihnen gewählte Komponente typisiert ist. Der Name des Datenelements beginnt (wenn die Anweisungen in

dieser Übung befolgt wurden) mit ZZ_####_ST

gewählt werden. Am Beispiel Studienfach könnte die Zeile wie folgt aussehen, wenn es für

das Studienfach ein Datenelement ZZ_####_ST_FACH gibt:

Der Parametername kann von Ihnen frei

PARAMETERS pa_fach TYPE ZZ_####_ST_FACH.

Ändern Sie das Programm so, dass alle in die interne Tabelle eingefügten Studenten bei der gewählten Komponente den durch den Parameter gegebenen Wert erhalten. Beim Beispiel Studienfach würde dies bedeuten, dass alle Studenten das Studienfach erhalten, das durch den Parameter eingegeben wird. Speichern, prüfen, aktivieren und testen Sie das Programm. Bisher hat es keinen Selektionstext, so dass der Parametername angezeigt wird:

Einführung in ABAP

Einführung in ABAP Abbildung 33: Oberfläche ohne gepflegten Selektionstext: SAP-System-Screenshot Um dies zu ändern,

Abbildung

33: Oberfläche ohne gepflegten Selektionstext: SAP-System-Screenshot

Um dies zu ändern, beenden Sie das Programm und wählen Sie aus dem Menü den Pfad

Springen ->

Textelemente

->

Selektionstexte .

Geben Sie

in diesem Fall aber keinen

Selektionstext

ein,

sondern

lassen

Sie

diesen

aus

dem Dictionary laden,

indem Sie

das

Häkchen

in

der

Spalte

Dictionary

Referenz

setzen.

Wenn Sie

nun

speichern und

die

Selektionstexte aktivieren, sehen Sie den aus dem Dictionary geladenen Text:

aktivieren, sehen Sie den aus dem Dictionary geladenen Text: Abbildung 34: Aus dem ABAP Dictionary geladener

Abbildung

34: Aus dem ABAP Dictionary geladener Text (Beispiel Studiengang): SAP-System-Screenshot

Kehren Sie nun zu Ihrem Programm zurück und testen Sie das Programm erneut. Sie sehen nun den aus dem Dictionary geladenen Selektionstext:

sehen nun den aus dem Dictionary geladenen Selektionstext: Abbildung 35: Oberfläche mit Selektionstext aus dem ABAP

Abbildung

35: Oberfläche mit Selektionstext aus dem ABAP Dictionary: SAP-System-Screenshot

Einführung in ABAP

8.3 Tabellen

In

Daten des

abgebildet werden. Diese Tabellen sind nicht zu verwechseln mit internen Tabellen: Interne Tabellen sind lediglich lokale Datenstrukturen auf Anwendungsebene. Die vom Datenbanksystem unabhängige Beschreibung einer Tabelle im Dictionary wird auch als

Die

in ein relationales Datenbanksystem

einer

datenbankorientierten

Systems

Anwendung

nehmen

Tabellen

die

eine

zentrale

Rolle

ein.

werden in Tabellen abgelegt,

transparente Tabelle bezeichnet 2 .

Tabellen setzen sich aus Datensätzen (Zeilen) zusammen, die wiederum aus einzelnen Feldern bestehen. Tabellen sind durch Spalten strukturiert, die einen eindeutigen Namen haben. Ein oder mehrere Felder einer Tabelle identifizieren die Datensätze eindeutig und werden als Schlüsselfelder (Primärschlüssel) definiert. Nicht-Schlüsselfelder werden auch Funktionsfelder genannt:

Nicht-Schlüsselfelder werden auch Funktionsfelder genannt: Abbildung 36: Schlüsselfelder einer Tabelle Währungsfelder

Abbildung

36: Schlüsselfelder einer Tabelle

Währungsfelder und

durch ein sog. Referenzfeld definiert. Die Zuordnung erfolgt zur Laufzeit. Die Typisierung von Tabellenfeldern kann wie bei Strukturen über Datenelemente vorgenommen werden, die wiederum für die technischen Eigenschaften auf Domänen

Felder

mit

Mengenangaben benötigen eine Einheit. Diese Einheit wird

zurückgreifen.

Alternativ ist

eine

direkte

Typisierung über

die

eingebauten Typen möglich.

Verschiedene

Felder,

die

unterschiedliche

Datenelemente

verwenden,

können auf derselben

Domäne basieren, wie dies auch bei den Strukturen der Fall war:

2 Gupta (2011, S.77)

Seite 33

Copyright Prof. Dr. Heimo H. Adelsberger/Dipl.-Wirt.-Inf. Pouyan Khatami

Einführung in ABAP

Einführung in ABAP Abbildung 37: Unterschiedliche Felder, unterschiedliche Datenelemente, selbe Domäne Ein Beispiel für

Abbildung

37: Unterschiedliche Felder, unterschiedliche Datenelemente, selbe Domäne

Ein Beispiel für einen solchen Fall ist die Tabelle SPFLI. Diese ist Teil eines von SAP vordefinierten Übungsbeispiels mit Flugdaten und enthält Flugverbindungen. Für jede Flugverbindung sind ein Abflug- und ein Zielflughafen hinterlegt. Technisch sind diese Angaben gleich, daher verwenden Sie dieselbe Domäne. Semantisch besteht jedoch ein Unterschied, da z. B. unterschiedliche Selektionstexte benötigt werden. Daher verwenden beide Felder unterschiedliche Datenelemente.

Hinweis: Die Reihenfolge der Felder im ABAP Dictionary muss nicht immer der im Datenbanksystem entsprechen. Hierdurch werden aufwändige Umsetzungen (Neuerstellungen bei Änderungen) von Tabellen vermieden.

8.3.1 Tabellen als Typen

Tabellen des ABAP Dictionary stehen auch selbst, z. B. in ABAP - Programmen zur Typisierung von Datenobjekten zur Verfügung. Sie sind dabei als Struktur zu verstehen. Das bedeutet, dass die Deklaration

DATA meinDatenobjekt TYPE SPFLI.

nicht,

wie

man

es

erwarten

könnte,

eine

interne

Tabelle

definiert,

sondern

einen

Arbeitsbereich,

also

ein

strukturiertes

Datenobjekt,

dessen

Struktur

einer

Zeile

der

Datenbanktabelle SPFLI entspricht.

Soll hingegen eine interne Tabelle mit dem gleichen Aufbau wie die (Datenbank-) Tabelle SPFLI definiert werden, muss ein Konstrukt mit TABLE OF gewählt werden:

DATA meineInterneTabelle TYPE TABLE OF SPFLI.

8.3.2 Include-Strukturen

Es kann vorkommen, dass der Aufbau einer bestimmten Struktur in mehreren Tabellen oder auch anderen Strukturen vorkommt. Um in diesen Fällen eine zentrale Wartbarkeit zu gewährleisten, bietet SAP das Konzept der Include-Strukturen. Hierbei werden die Komponenten einer Struktur in eine andere Struktur oder in eine Tabelle übernommen.

Einführung in ABAP

Einführung in ABAP Abbildung 38: Eine Struktur als Include in unterschiedlichen Tabellen In einer Include-Kette darf

Abbildung

38: Eine Struktur als Include in unterschiedlichen Tabellen

In einer Include-Kette darf nur eine Datenbanktabelle vorkommen, das bedeutet, dass eine Tabelle keine andere Tabelle inkludieren kann. Für Strukturen gelten diese Beschränkungen nicht, jedoch darf eine Kette (Verschachtelung) von Includes maximal 9 Stufen umfassen 3 .

Es ist möglich, Includes Gruppennamen und Suffixes zuzuordnen. Durch einen

Gruppennamen ist die Gruppe als Ganzes über den Gruppennamen erreichbar. Enthält etwa ein Student eine Adress- Struktur unter der Gruppe ADR, so könnte in einem ABAP - Programm, in dem ein Student STUD definiert ist, über STUD - ADR die Adresse und über

Suffixes ermöglichen es

hingegen,

Eindeutigkeit der

STUD- ADR- STRASSE z.

B.

die

Straße

abgerufen

eines

werden.

beim

mehrfachen

Einfügen

Includes

die

Komponentennamen sicherzustellen, indem der Suffix an die Namen angehängt wird.

8.3.3 Praxis: Übung Tabellenstruktur

Als Beispiel für eine Tabelle soll nun eine Tabelle für Studenten angelegt werden. Rufen Sie hierzu die Einstiegsmaske des ABAP Dictionary auf und verwenden Sie das Feld Datenbanktabelle analog zum Vorgehen bei den anderen Dictionary-Elementen zum Anlegen einer Tabelle mit dem Namen ZZ####_STUDIS.

zum Anlegen einer Tabelle mit dem Namen ZZ####_STUDIS . Abbildung 39: Anlegen einer Datenbanktabelle:

Abbildung

39: Anlegen einer Datenbanktabelle: SAP-System-Screenshot

Pflegen Sie eine entsprechende Kurzbeschreibung und geben Sie als Auslieferungsklasse A (Anwendungstab. (Stamm- und Bewegungsdaten)) und für Data Browser/Tabellenansicht-Pflege den Wert Anzeige/Pflege Erlaubt an. Diese Einstellung ist

wichtig,

damit

über

die

entsprechenden

Hilfsmittel

der

ABAP

Workbench

Daten

in

die

Tabelle

eingefügt

werden können.

Sollten diese

Hilfsmittel im weiteren Kursverlauf einmal

3 Gupta (2011, S. 89)

Seite 35

Copyright Prof. Dr. Heimo H. Adelsberger/Dipl.-Wirt.-Inf. Pouyan Khatami

Einführung in ABAP

bei einer Tabelle ausgegraut sein, sollten Sie daher die hier vorgenommene Pflegeeinstellung überprüfen. Wechseln Sie dann zum Karteireiter Felder. Fügen Sie zunächst ein Feld mit dem Namen MANDT auf Basis des Datenelements MANDT an. Dieses Feld repräsentiert die Mandantennummer und wird vom System automatisch behandelt. Wählen Sie nun aus dem Menü den Pfad Bearbeiten -> Include -> Einfügen. Wählen Sie dort die Struktur

ZZ####_STUD

Die Feldliste sollte nun

folgendermaßen aussehen:

und

lassen Sie

die

anderen beiden Felder

leer.

aussehen: und lassen Sie die anderen beiden Felder leer. Abbildung 40: Felder der Tabelle: S AP-System-Screenshot

Abbildung

40: Felder der Tabelle: S AP-System-Screenshot

Abbildung 40: Felder der Tabelle: S AP-System-Screenshot Um den Inhalt des Includes sehen zu können, klicken

Um den Inhalt des Includes sehen zu können, klicken Sie auf (Include Expandieren). Sie sehen nun die Komponenten des Includes:

Expandieren). Sie sehen nun die Komponenten des Includes: Abbildung 41: Expandiertes Include: SAP-System-Screenshot

Abbildung

41: Expandiertes Include: SAP-System-Screenshot

Die Tabelle soll in unserem Beispiel aber kein Include sondern gewöhnliche Felder besitzen. Das Include war nur ein bequemer Weg, diese aus der Struktur zu übernehmen. Um das Include selbst loszuwerden, klicken Sie es an und wählen Sie im Menü den Pfad Bearbeiten -> Include -> Komponenten übernehmen. Daraufhin sind die Include- Komponenten direkt in der Tabelle enthalten.

Die Matrikelnummer wird für den Schlüssel benötigt, da die Mandantennummer allein den

Studenten nicht eindeutig identifizieren kann.

Markieren

Markieren Sie

Sie

die

Zeile

mit

der

Matrikelnummer,

indem

Sie

auf

die

Schaltfläche

 

links

von

der

Feldbezeichnung

MATRIKEL

klicken.

Schneiden Sie

die

Zeile

aus,

indem Sie

auf die

Schaltfläche

MATRIKEL klicken. Schneiden Sie die Zeile aus, indem Sie auf die Schaltfläche

(Ausschneiden)

klicken.

Markieren

Sie

dann

die

Zeile

Name

und

klicken

Sie

auf

die

Schaltfläche

Schaltfläche (Einsetzen).

(Einsetzen).

Nun

sollte

die

Zeile

mit

der

Matrikelnummer

zwischen der

Mandantennummer-Zeile

und

der

Namens-Zeile

stehen.

Falls

dies

nicht

funktioniert

hat,

wiederholen Sie die Schritte oder löschen Sie im Notfall die Zeilen über wieder und fügen

wiederholen Sie die Schritte oder löschen Sie im Notfall die Zeilen über wieder und fügen Sie das Include erneut ein.

Einführung in ABAP

Selektieren Sie auch in der Zeile mit der Matrikelnummer das Häkchen in der Spalte Key, um

dieses

aussehen:

Feld

dem Schlüssel hinzuzufügen.

Die

Liste

der

Felder

sollte

nun etwa

wie

folgt

Die Liste der Felder sollte nun etwa wie folgt Abbildung 42: Feldliste mit vollständigem Schlüssel

Abbildung

42: Feldliste mit vollständigem Schlüssel

Speichern und prüfen Sie die Tabelle. Eine Aktivierung ist an dieser Stelle noch nicht möglich, da die technischen Einstellungen fehlen.

8.3.4 Technische Einstellungen

Bei der Definition einer Tabelle sind einige technische Einstellungen vorzunehmen, die für

Optimierungen verwendet werden. Springen->Technische Einstellungen.

unter

Diese

Einstellungen

erreichen

Sie

Einstellungen . unter Diese Einstellungen erreichen Sie Abbildung 43: Technische Einstellungen einer Tabelle:

Abbildung

43: Technische Einstellungen einer Tabelle: SAP-System-Screenshot

Einführung in ABAP

8.3.4.1 Logische Speicher-Parameter

8.3.4.1.1 Datenart

Die Angabe der Datenart wirkt sich nur bei Oracle- und Informix-Datenbanken aus. Hier bestimmt sie, in welchem physischen Bereich der Datenbank die Tabelle abgelegt wird. Hierbei stehen einige Ausprägungen zur Auswahl, die Sie sich mithilfe der F4-Hilfe anzeigen lassen können. Die wichtigsten Datenarten sind 4 :

APPL0: Stammdaten, also selten geänderte Daten, etwa Adressen von Kunden.

APPL1: Bewegungsdaten, also Daten, die häufigen Änderungen unterliegen, etwa Lagerbestände von Produkten.

APPL2: Organisationsdaten, die im Rahmen des Customizing bei der

die

Systemeinstellung

Mandantentabelle.

angegeben werden und

sich danach selten

ändern,

z.

B.

USER: Daten für Entwicklungen des Kunden.

8.3.4.1.2 Größenkategorie

Die Größenkategorie gibt an, wie viele Datensätze für die Tabelle erwartet werden. Diese Angabe ist wichtig, um Fragmentierung zu verringern. Fragmentierung entsteht, wenn der Speicherbereich, der beim Anlegen einer Tabelle für diese reserviert wird (Initial Extent), nicht mehr ausreicht und ein zusätzlicher Speicherbereich zugeordnet werden muss, so dass verschiedene über den Speicher verteilte Fragmente entstehen:

über den Speicher verteilte Fragmente entstehen: Abbildung 44: Beispiel für Fragmentierung Fragmentierung

Abbildung

44: Beispiel für Fragmentierung

Fragmentierung entsteht besonders häufig bei Bewegungsdaten und Tabellen mit schnellem Wachstum oder häufigen Änderungen. Das Ergebnis sind Performanceprobleme.

Der beim Anlegen einer Tabelle zugewiesene Speicherbereich wird als Initial Extent bezeichnet, die folgenden Speicherbereiche a ls First Extent, Second Extent usw.

4 Gupta (2011, S. 114)

Seite 38

Copyright Prof. Dr. Heimo H. Adelsberger/Dipl.-Wirt.-Inf. Pouyan Khatami

Einführung in ABAP

Die Größe des Initial Extent ist bei allen Größenkategorien gleich. Die Größe der weiteren Extents ist hingegen für jede der Größenkategorien unterschiedlich und hängt auch vom verwendeten Datenbanksystem ab.

Fragmentierte Indizes können durch Löschen und neu Anlegen defragmentiert werden. Fragmentierte Tabellen müssen hingegen umgesetzt werden. Umsetzen bedeutet, dass die Tabelle gelöscht und neu angelegt wird (das Löschen geschieht nach dem neu Anlegen).

stellt

Sowohl das

einen hohen Aufwand dar und sollte daher nicht zu Zeiten durchgeführt werden, in denen viele Zugriffe auf das System erfolgen. Während des Umsetzvorgangs kann auf eine Tabelle

nicht zugegriffen werden.

Umsetzen von Tabellen als

auch das

Wiederanlegen gelöschter

Indizes

Zu große Extents führen zu einer Verschwendung von Speicherplatz, so dass Sie die Größenkategorie gewissenhaft wählen sollten. Es stehen neun Kategorien zur Auswahl, wie die Werthilfe zeigt:

stehen neun Kategorien zur Auswahl, wie die Werthilfe zeigt: 8.3.4.2 Abbildung Tabellenpufferung 45: Größenkategorien:

8.3.4.2

Abbildung

Tabellenpufferung

45: Größenkategorien: SAP-System-Screenshot

Die Tabellenpufferung ist eine Zwischenspeicherung im Anwendungsserver, die die Kommunikation mit der Datenbank entlasten soll. Die Pufferung kann nicht für alle Datenbankzugriffe genutzt werden, z. B. nicht für Anfragen mit Aggregatfunktionen (siehe Abschnitt 8.4.3). Der Zugriff auf den Puffer erfolgt vom Anwender unbemerkt über die Datenbankschnittstelle. Dieser Puffer des SAP - Systems im Anwendungsserver arbeitet unabhängig von etwaigen Puffern des Datenbanksystems auf DB-Ebene. Administratoren mit

entsprechender

wenn es zu Inkonsistenzen gekommen ist. Eine solche Rücksetzung kann mehrere Stunden dauern und wirkt sich während dieser Zeit sehr negativ auf die Systemperformance aus.

Berechtigung

können über

das Kommando /$TAB die Puffer zurücksetzen,

Einführung in ABAP

Einführung in ABAP Abbildung 46: Puffer Es werden drei Arten der Pufferung unterschieden. Diese werden in

Abbildung

46: Puffer

Es werden drei Arten der Pufferung unterschieden. Diese werden in Abschnitt 8.9 erläutert, da Sie für das Verständnis zunächst Zugriffe auf Datensätze erlernen müssen.

8.3.4.3

Protokollierung

Die Protokollierung wird eingesetzt, um Änderungen an Datenbanktabellen aufzuzeichnen. Voraussetzung ist außer dem Setzen der Eigenschaft in den Tabelleneigenschaften das S etzen des Profilparameters „rec/client“.

Mögliche Einstellungen sind 5 :

rec/client = ALL, um alle Mandanten zu protokollieren

rec/client = 000, [], []… um nur bestimmte Mandanten zu protokollieren

rec/client = OFF, um die Protokollierung vollständig zu deaktivieren

Die Protokollierung sollte nur eingeschaltet werden, wenn sie unbedingt benötigt wird, da sie sehr viel Last auf der Datenbank erzeugt. Zum einen muss für jede Schreiboperation ein

die

Protokolltabelle viele Nutzer zu, so dass es durch die erforderlichen Sperren zu Wartezeiten kommen kann, unabhängig davon auf welche konkreten Tabellen die Benutzer zugreifen.

Datensatz in der Protokolltabelle

angelegt

werden,

zum

anderen

gr eifen

auf

Hinweis: Das Thema Sperren wird in einem späteren Kursteil noch a usführlich behandelt.

8.3.5 Praxis: Übung Technische Einstellungen

In dieser Übung sollen die technischen Einstellungen der Tabelle ZZ####_STUDIS vorgenommen werden. Wählen Sie hierzu von der Tabelle aus den Menüpfad Springen -> Technische Einstellungen. Geben S ie dort als Datenart APPL0 (Stammdaten) aus, sowie die

5 Gupta (2011, S. 120)

Seite 40

Copyright Prof. Dr. Heimo H. Adelsberger/Dipl.-Wirt.-Inf. Pouyan Khatami

Einführung in ABAP

Größenkategorie

0.

Die

Daten

sollen

nicht

gepuffert

und

Änderungen

nicht

protokolliert

werden.

und Änderungen nicht protokolliert werden. Abbildung 47: Technische Einstellungen der

Abbildung

47: Technische Einstellungen der Studenten-Tabelle: SAP-System-Screenshot

Speichern Sie

Sie nun die Tabelle. Ignorieren Sie wie üblich die Warnung zur Erweiterungskategorie (dieses

die technischen Einstellungen und kehren Sie zur Tabelle zurück. Aktivieren

Thema wird später aufgegriffen).

Einführung in ABAP

8.4 Tabellenzugriff aus ABAP-Programmen

Der Zugriff auf die Tabellen erfolgt aber in aller Regel nicht direkt, sondern über das ABAP Dictionary als Schnittstelle. Es sind aber auch direkte Zugriffe möglich. Es wird hier zwischen Open SQL und Native SQL unterschieden.

Native SQL ermöglicht die Nutzung spezifischer Befehle des zugrundeliegenden Datenbanksystems. Der Sprachumfang ist also vom verwendeten Datenbanksystem abhängig. Ein Wechsel des Datenbanksystems zieht ggf. Anpassungen des Codes nach sich. Der Vorteil liegt darin, dass datenbankspezifische Features genutzt werden können.

Open

können damit nicht alle spezifischen Features einzelner Datenbanksysteme genutzt werden

SQL

ist

hingegen ein vom konkreten Datenbanksystem unabhängiger

Standard.

Es

möglicherweise

werden

Sie

das

ein

oder

andere

Feature

vermissen.

Die

Datenbankschnittstelle

übersetzt

die

Open

SQL- Befehle

in

das

native

SQL des jeweiligen

Datenbanksystems.

Im Folgenden wird ihnen auch Native SQL kurz vorgestellt, der Schwerpunkt liegt aber auf Open SQL, da diese Zugriffsart für den Rest des Kurses verwendet wird und auch für die Praxis wesentlich relevanter ist. Benutzen Sie in Ihren Programmen nur Open SQL.

8.4.1 Native SQL

Um auf spezifische Funktionalitäten des verwendeten Datenbankmanagementsystems zugreifen zu können, kann die Native SQL- Schnittstelle des ABAP- Systems verwendet werden. Diese stellt im Programmcode ein Gerüst bereit, innerhalb dessen die spezifischen Befehle des Datenbankmanagementsystems verwendet werden können, diese stellen aber keine Sprachelemente von ABAP dar. ABAP bietet aber einige Sprachelemente innerhalb von Native SQL, um die Verbindung zwischen SQL und dem umgebenden Code zu ermöglichen. Die verwendeten Tabellen müssen nicht im ABAP Dictionary deklariert werden. Es genügt, wenn diese im Datenbanksystem existieren.

Die Syntax zur Einbindung von Native SQL lautet:

EXEC SQL.

ENDEXEC.

Im durch die drei Punkte gekennzeichneten Bereich können nun Native SQL-Anweisungen verwendet werden. Dieser Bereich wird nicht vollständig von der Syntaxprüfung untersucht, da er der Syntax des jeweiligen Datenbankmanagementsystems unterliegt.

Die SQL-Anweisungen werden größtenteils unverändert an das Datenbanksystem übermittelt. Eine Ausnahme stellen Hostvariablen dar. Dies sind Variablen des umgebenden ABAP- Codes, die innerhalb der SQL- Anweisungen verwendet werden, um Daten an die Datenbank zu übergeben oder Ergebnisse einer Anfrage aufzunehmen. Sie werden im Native SQL- Code gekennzeichnet, indem ihnen ein Doppelpunkt vorangestellt wird.

Einführung in ABAP

Ein Beispiel ist der folgende Code:

PARAMETERS p_carrid TYPE s_carr_id. DATA carrname TYPE s_carrname.

EXEC SQL. SELECT carrname FROM scarr INTO :carrname WHERE carrid = :p_carrid ENDEXEC.

WRITE carrname.

Hier wird eine Variable (carrname) und ein Parameter (p_carrid) des umgebenden ABAP- Programms innerhalb von Native SQL verwendet. Das Programm gibt zu einem Kürzel den vollen Namen einer Fluggesellschaft aus.

8.4.2 Open SQL

Open SQL ist die Teilmenge der ABAP-Befehle, die den Zugriff auf die zentrale Datenbank

des

ABAP - Systems

ermöglicht.

Das

ABAP - System

 

wandelt

die

Befehle

in

datenbankspezifische

Befehle

um.

Der

Vorteil

ist,

dass

die

Anwendungen,

die

auf

die

Datenbank zugreifen, nicht geändert werden müssen, wenn das im System verwendete Datenbankmanagementsystem gewechselt wird. Der Nachteil ist, dass datenbankspezifische Erweiterungen nicht nutzbar sind, so dass nicht alle Anfragen, die Sie ggf. aus anderen Systemen gewohnt sind, möglich sind . Es können aber auch Views verwendet werden, die im ABAP Dictionary definiert wurden.

Zu Open SQL gehören die folgenden Operationen:

SELECT

OPEN CURSOR, FETCH, CLOSE CURSOR

INSERT

UPDATE

MODIFY

DELETE

Hinzu

werden.

kommen

Operationen

zur

Konsistenzsicherung,

die

Ihnen

später

separat

vorgestellt

Die Operationen werden im Folgenden vorgestellt. Kur steilnehmer, die bereits über Kenntnisse in herkömmlichem SQL verfügen, werden zahlreiche Konzepte wiedererkennen. Derartige Vorkenntnisse sind für diesen Kurs aber nicht zwingend erforderlich, außerdem gibt es verschiedene Unterschiede zwischen herkömmlic hem SQL und Open SQL.

8.4.3 Auslesen von Daten

Durch die SELECT-Anweisung werden Daten aus einer Tabelle bzw. mehreren Tabellen und/oder Views ausgelesen.

Die folgende Darstellung veranschaulicht, wie ein lesender Zugriff allgemein aufgebaut ist:

Einführung in ABAP

Einführung in ABAP Abbildung 48: Aufbau einer lesenden Anfrage (Überblick)  Im SELECT- Teil werden vor

Abbildung

48: Aufbau einer lesenden Anfrage (Überblick)

Im SELECT- Teil werden vor allem die Spalten angegeben, die im Ergebnis enthalten sein sollen. Weiterhin sind hier Aggregatfunktionen möglich.

Im FROM-Teil wird angegeben, woher diese Daten stammen. Hier können entweder

eine oder mehrere über Joins verbundene

Tabellen oder Views angegeben werden.

Im INTO-Teil wird angegeben, wohin die Daten transportiert werden sollen. Hier stehen also Datenobjekte des ABAP-Programms, die die Ergebnisse aufnehmen sollen.

Im

werden

Datensätze einzuschränken.

WHERE- Teil

logische

Bedingungen

angegeben,

um

die

Menge

der

Es sind weitere Bestandteile einer Anfrage möglich, diese werden Ihnen im Weiteren noch näher gebracht. Die hier dargestellte Form soll lediglich einen ersten Überblick vermitteln, insbesondere falls Sie keine SQL-Vorkenntnisse besitzen.

Die syntaktischen Varianten der SELECT-Anweisung sind vielfältig, weshalb Ihnen die Anwendung der Anweisung zunächst anhand von Beispielen vermittelt wird.

8.4.3.1 Der Arbeitsbereich für Datenbanktabellen

Dass Tabellen als Typen benutzt werden können, haben Sie bereits in Abschnitt 8.3.1 erfahren. Diese Eigenschaft ist sehr nützlich bei der Arbeit mit Open SQL, da so sehr bequem ein Arbeitsbereich definiert werden kann. Dieser kann dann einen einzelnen Eintrag der Datenbanktabelle aufnehmen, so wie Sie es bereits von der Arbeit mit internen Tabellen kennen. Es gibt hier jedoch ein paar Einschränkungen. Der Datentyp des Arbeitsbereichs darf nicht tief sein (Strings sind aber erlaubt) und muss mindestens so lang sein wie die Struktur der Datenbanktabelle. Wie zuvor erläutert wird e in Typ als tief bezeichnet, wenn der Inhalt seiner Datenobjekte Referenzen sind, die auf den tatsächlichen Inhalt verweisen. Darunter fallen Strings, Referenzvariablen und interne Tabellen sowie Strukturen, die mindestens eine tiefe Komponente enthalten.

Im einfachsten Fall hat

Durch die

explizit angegeben werden, und der Arbeitsbereich ist robust gegen Erweiterungen der Datenbankstruktur (hier zeigt sich erneut der Vorteil der zentralen Typpflege im Dictionary) .

müssen nicht alle Komponenten

der

Arbeitsbereich die

Tabelle

für

die

gleiche

Struktur

wie die Datenbanktabelle.

Verwendung der

Typdefinition

Ein Beispiel könnte wie folgt aussehen:

DATA wa TYPE spfli.

interne Tabelle

definiert, sondern ein zeilenartiges Datenobjekt. Jede Datenbanktabelle stellt also durch ihre

Hier ist spfli der Name einer Datenbanktabelle. Mit wa wird keine

Spaltendefinitionen auch einen Zeilentyp

dar,

so

dass

wie hier ein Arbeitsbereich definiert

Einführung in ABAP

werden kann, in den später eine Zeile der Datenbanktabelle, hier spfli , gelesen werden kann.

Wäre spfli hingegen ein tabellenartiger Typ (entweder lokal über TYPES … TYPE TABLE OF … oder durch Definition eines globalen Typen im Dictionary), würde es sich bei wa um eine interne Tabelle handeln. In diesem Fall wäre der Name wa allerdings sehr

OF tabellentyp-Syntax könnte aber ein Zeilentyp

unglücklich gewählt. Mit der LINE gebildet werden.

In den folgenden Beispielen wird angenommen, dass wie oben ein Arbeitsbereich mit dem Namen wa definiert wurde, der zur im FROM - Teil angegebenen Tabelle passt.

8.4.3.2 Lesen eines einzelnen Datensatzes

Durch folgenden Code wird ein einzelner Datensatz ausgelesen:

SELECT SINGLE *

FROM spfli

INTO wa

WHERE carrid = 'LH' AND connid = '0400'.

Die Angabe von SELECT

WHERE - Teil

angegeben werden. Dies ist syntaktisch allerdings nicht zwingend nötig, so würde bei einem unvollständigen Schlüssel schlicht ein beliebiger Datensatz gefunden, der zur angegebenen

Bedingung

Um

SINGLE dient dazu, nur einen Datensatz aus der Tabelle zu lesen.

identifizieren,

muss

der

Ausnahme

stellt

lediglich

vollständige

Schlüssel

im

das

Mandantenfeld

dar:

Aufgrund

der

den

Datensatz

passt.

zu

Eine

Vielzahl

von

Tabellen,

die

das

Mandantenfeld

enthalten,

muss

dieses

nicht

angegeben

werden. Es wird

stattdessen

automatisch

mit

dem

aktuellen

Mandanten

belegt

wenn es

existiert. Soll es hingegen explizit angegeben werden, muss der SELECT-Befehl den Zusatz

CLIENT SPECIFIED erhalten.

Der INTO - Teil dient der Angabe des Datenobjekts, in das das Ergebnis abgelegt werden soll. Dieser muss linksbündig so strukturiert sein wie die Tabelle oder die Feldermenge im SELECT-Teil.

Das erfolgreiche Lesen eines Datensatzes können Sie anhand des Systemfelds sy-subrc abfragen: Bei erfolgreichem Lesen hat dieses den Wert 0.

Sowohl die Spalten im SELECT - Teil als

angegeben werden, wie die folgenden Beispiele zeigen. Hier wurde hingegen darauf verzichtet und durch den Stern alle Spalten der Ergebnismenge übernommen. Da die Daten in diesem Fall nur aus einer Tabelle stammen, enthält das Ergebnis also alle Spalten dieser Tabelle. Da der Arbeitsbereich mit der Tabelle typisiert ist, ist die Bedingung der linksbündig gleichen Struktur also auf jeden Fall erfüllt.

auch die Felder im INTO - Teil können Explizit

Einführung in ABAP

8.4.3.2.1 Explizite Angabe der Spalten

DATA: BEGIN OF wa,

carrier TYPE spfli-carrid,

connection TYPE spfli-connid,

from TYPE spfli-cityfrom,

to TYPE spfli-cityto,

END OF wa.

SELECT SINGLE carrid connid cityfrom cityto

FROM spfli

INTO wa

WHERE carrid = 'LH' AND connid = '0400'.

In diesem Beispiel wird ein Arbeitsbereich aufgebaut, der nicht genau dem Aufbau der Datenbanktabelle entspricht. Seine einzelnen Felder haben andere Namen als die Felder in der Datenbank, sind aber passend typisiert. In der Anfrage werden nur vier Spalten der Datenbank angegeben und auch nur diese vier übertragen. Die Reihenfolge muss hierbei übereinstimmen.

Die folgende Abbildung veranschaulicht die obige Anfrage grafisch: