workshopp, abap, märz 08 - tu- · pdf fileworkshopp, abap, märz 08 wi-praktikum iii...
TRANSCRIPT
Workshop ABAP, März 08 p ,
WI-Praktikum IIITU Chemnitz / Professur WI1TU Chemnitz / Professur WI1Tutor: Sven MöhlerE-Mail: [email protected] Mail: [email protected] chemnitz.de
Sven Möhler, TU-Chemnitz 2
Timeline
Workshop Teil1,Mo, 10.03.2008,
9 16 Uhr9-16 Uhr
Workshop Teil2,
Komplexaufgaben
• Organisatorisches• Grundlagen
Do, 13.03.2008,9-16 Uhr Komplexaufgaben
• ModularisierungWorkshop Teil3,Di, 18.03.2008,
9-16 UhrKomplexaufgaben
Modularisierung• ABAP Objects
Konsultation ?• Tabellen (Intern & Extern)
• Dynpro
Klausur,Fr 28 03 2008Fr, 28.03.2008,
9-10.30 Uhr
Sven Möhler, TU-Chemnitz 3
Kursaufbau• Kursmaterial:
▫ Materialien die ihr per E-Mail erhalten habt
• Workshops:▫ jeweils mehreren Lerneinheitenj▫ Übungsaufgaben nach jeder Lerneinheit▫ Anwesenheitspflicht
• Komplexaufgaben:▫ Umfang: 4-7 Aufgaben▫ Umfang: 4-7 Aufgaben▫ erhaltet ihr per E-Mail nach dem Workshop▫ sind zwischen den Workshops zu lösen (Abgabe Komplexaufgabe 3 Fr,
21.03.2008)
Sven Möhler, TU-Chemnitz 4
Kursabschluss• Klausur:
▫ Fr, 28.03.2008 ▫ 9-10 30 Uhr Raum: D314A/D316A▫ 9-10.30 Uhr, Raum: D314A/D316A▫ PC-gestützt
▫ Voraussetzung: Anwesenheit Workshopgelöste Komplexaufgaben (80 % richtig)gelöste Komplexaufgaben (80 % richtig)
▫ Hilfsmittel: Aufzeichnungen aus der Praktikumsveranstaltungg gSAP-Online-Dokumentation
Sven Möhler, TU-Chemnitz 5
Gliederung :: Lerninhalte• 1 Einführung
▫ 1.1 Erste Schritte im SAP System▫ 1.2 ABAP Dictionary
• 3 ABAP Objects▫ 3.1 Klassen▫ 3 2 Instanz und Statische▫ 1.3 Programmaufbau
▫ 1.4 Programmtypen ▫ 1.5 Werkzeuge
l
▫ 3.2 Instanz- und Statische Komponenten
▫ 3.3 Methoden▫ 1.6 Programm anlegen▫ 1.7 Syntax▫ 1.8 Ausgabe von Texten
D t t
▫ 3.4 Objekte anlegen▫ 3.5 Methodenaufrufe▫ 3.6 Öffentliche Attribute▫ 1.9 Datentypen
▫ 1.10 Wertzuweisung▫ 1.11 Feldsymb. & Referenzen
1 12 Kontrollstrukturen
3.6 Öffentliche Attribute▫ 3.7 Konstruktor▫ 3.8 Objekte löschen
h f hi ii▫ 1.12 Kontrollstrukturen▫ 1.13 Komplexe Strukturen
• 2 Modularisierung2 1 Unterprogramme
▫ 3.9 Mehrfachinstanziierung▫ 4 Interne Tabellen
▫ 4.1 Tabellenarten▫ 2.1 Unterprogramme▫ 2.2 Funktionsbausteine▫ 2.3 Includes▫ 2 4 Makros
4.1 Tabellenarten▫ 4.2 Tabelle anlegen▫ 4.3 Zeilenoperationen
G f b i▫ 2.4 Makros▫ 2.5 Datenbehandlung
▫ 4.4 Gruppenstufenverarbeitung▫ 4.5 Tabellenoperationen
Sven Möhler, TU-Chemnitz 6
Gliederung :: Lerninhalte• 5 Externe Tabellen
▫ 5.1 SELECT-Klausel▫ 5 2 INTO Klausel▫ 5.2 INTO-Klausel▫ 5.3 INTO CORR. FIELDS OF-Klausel▫ 5.4 FROM-Klausel▫ 5.5 WHERE-Klausel▫ 5.6 GROUP BY-Klausel▫ 5 7 HAVING-Klausel5.7 HAVING Klausel▫ 5.8 ORDER BY-Klausel
• 6 Dynamische Programmierung▫ 6.1 Dynpro▫ 6.2 Selektionsbilder
Sven Möhler, TU-Chemnitz 7
Gliederung :: Lerninhalte• 1 Einführung
▫ 1.1 Erste Schritte im SAP System▫ 1.2 ABAP Dictionary
• 3 ABAP Objects▫ 3.1 Klassen▫ 3 2 Instanz und Statische▫ 1.3 Programmaufbau
▫ 1.4 Programmtypen ▫ 1.5 Werkzeuge
l
▫ 3.2 Instanz- und Statische Komponenten
▫ 3.3 Methoden▫ 1.6 Programm anlegen▫ 1.7 Syntax▫ 1.8 Ausgabe von Texten
D t t
▫ 3.4 Objekte anlegen▫ 3.5 Methodenaufrufe▫ 3.6 Öffentliche Attribute▫ 1.9 Datentypen
▫ 1.10 Wertzuweisung▫ 1.11 Feldsymb. & Referenzen
1 12 Kontrollstrukturen
3.6 Öffentliche Attribute▫ 3.7 Konstruktor▫ 3.8 Objekte löschen
h f hi ii▫ 1.12 Kontrollstrukturen▫ 1.13 Komplexe Strukturen
• 2 Modularisierung2 1 Unterprogramme
▫ 3.9 Mehrfachinstanziierung▫ 4 Interne Tabellen
▫ 4.1 Tabellenarten▫ 2.1 Unterprogramme▫ 2.2 Funktionsbausteine▫ 2.3 Includes▫ 2 4 Makros
4.1 Tabellenarten▫ 4.2 Tabelle anlegen▫ 4.3 Zeilenoperationen
G f b i▫ 2.4 Makros▫ 2.5 Datenbehandlung
▫ 4.4 Gruppenstufenverarbeitung▫ 4.5 Tabellenoperationen
Sven Möhler, TU-Chemnitz 8
1 Einführung :: SAP - Unternehmen
• SAP (Systeme, Anwendungen, Produkte in der Datenverarbeitung)
• führender Anbieter von Unternehmenssoftwareführender Anbieter von Unternehmenssoftware
• drittgrößter unabhängiger Softwarelieferant der Welt
• Gründungsjahr: 1972
• Hauptsitz: Walldorfp
• Vorläufiger Jahresumsatz 2007: 10,3 Mrd. Euro
• Mitarbeiterzahl: 43.800
• Vorstandssprecher: Henning Kagermann – Vorstandp g g
http://www tu-chemnitz de/wirtschaft/sapr3/sap phphttp://www.tu chemnitz.de/wirtschaft/sapr3/sap.php
Sven Möhler, TU-Chemnitz 9
1 Einführung :: SAP - Produkte• SAP R/3 und Business Suite▫ SAP R/3:
Module: FI (Finance) CO (Controlling) MM (MaterialsModule: FI (Finance), CO (Controlling), MM (Materials Management), SD (Sales and Distribution), PP (Production Planning) und HR (Human Resources)funktionell, aber nicht architektonisch getrenntzuletzt in Version 4.7 eigenständig
▫ Business Suite (R/3 erweitert um zusätzliche Produkte):▫ Business Suite (R/3 erweitert um zusätzliche Produkte):SAP CRM, SAP SCM, SAP SRM, SAP PLMBranchenlösungen (sog. IS – Industry Solutions) g g y
• NetWeaver-Plattform▫ Grundlage für die Applikationen der SAP Business Suite
A d i i i bi▫ Anwendungsintegration von Drittanbietern• Mittelstandslösungen
▫ Business One Business All-in-One Business By Design▫ Business One, Business All-in-One, Business By Design
Sven Möhler, TU-Chemnitz 10
1 Einführung :: ABAP • ABAP = Advanced Business Application Programming (früher: Allg.
Berichts-AufarbeitungsProzessor)• Programmiersprache der SAP (akt Version 7 0)• Programmiersprache der SAP (akt. Version 7.0)• Wurzeln in COBOL und Pascal• Existiert seit 1982Existiert seit 1982 • ABAP-Programme werden bei der ersten Ausführung kompiliert,
d.h. alle Programme liegen auch als Quelltext vor• Entwicklungsumgebung ABAP Workbench• seit 1990 basieren alle SAP R/3-Module auf ABAP
Pl f bhä i ( h l J ) &• Plattformunabhängig (schon lange vor Java) & Datenbankunabhängig
• seit der Einführung von SAP NetWeaver auch Ablauf- und• seit der Einführung von SAP NetWeaver auch Ablauf und Programmierumgebung für Java ABAP-basierter und Java-basierter Applikationsserver
Sven Möhler, TU-Chemnitz 11
Gliederung :: Lerninhalte• 1 Einführung
▫ 1.1 Erste Schritte im SAP System▫ 1.2 ABAP Dictionary
• 3 ABAP Objects▫ 3.1 Klassen▫ 3 2 Instanz und Statische▫ 1.3 Programmaufbau
▫ 1.4 Programmtypen ▫ 1.5 Werkzeuge
l
▫ 3.2 Instanz- und Statische Komponenten
▫ 3.3 Methoden▫ 1.6 Programm anlegen▫ 1.7 Syntax▫ 1.8 Ausgabe von Texten
D t t
▫ 3.4 Objekte anlegen▫ 3.5 Methodenaufrufe▫ 3.6 Öffentliche Attribute▫ 1.9 Datentypen
▫ 1.10 Wertzuweisung▫ 1.11 Feldsymb. & Referenzen
1 12 Kontrollstrukturen
3.6 Öffentliche Attribute▫ 3.7 Konstruktor▫ 3.8 Objekte löschen
h f hi ii▫ 1.12 Kontrollstrukturen▫ 1.13 Komplexe Strukturen
• 2 Modularisierung2 1 Unterprogramme
▫ 3.9 Mehrfachinstanziierung▫ 4 Interne Tabellen
▫ 4.1 Tabellenarten▫ 2.1 Unterprogramme▫ 2.2 Funktionsbausteine▫ 2.3 Includes▫ 2 4 Makros
4.1 Tabellenarten▫ 4.2 Tabelle anlegen▫ 4.3 Zeilenoperationen
G f b i▫ 2.4 Makros▫ 2.5 Datenbehandlung
▫ 4.4 Gruppenstufenverarbeitung▫ 4.5 Tabellenoperationen
Sven Möhler, TU-Chemnitz 12
1.1 Erste Schritte im SAP System :: Anmeldung
• „SAP Logon“ aufrufen• System auswählen und• System auswählen und
„anmelden“ klicken
• Mandant: 903• Benutzer: logXX• Kennwort:• Kennwort:
▫ Initial: „start01“▫ nach erster Anmeldung muss
Kennwort geändert werdenKennwort geändert werden
• Sprache (optional):▫ „DE“ für Deutsch
B täti it E t• Bestätigen mit <Enter> oder
Sven Möhler, TU-Chemnitz 13
1.1 Erste Schritte im SAP System :: Anmeldung
• Hinweise zum Passwort:▫ besteht aus 3 bis 8 Zeichen▫ besteht aus 3 bis 8 Zeichen▫ keine Unterscheidung zwischen Groß- und Kleinschreibung▫ <?>, <!> dürfen nicht am Anfang stehen, g▫ <Leerzeichen> dürfen nicht in den ersten drei Zeichen enthalten sein▫ reservierte Worte sind <PASS> und <SAP*>
d i id ti h B h t b A f d i ht k ti t▫ drei identische Buchstaben am Anfang werden nicht akzeptiert▫ Buchstabenfolgen, die drei oder mehr Buchstaben aus dem
Benutzernamen enthalten werden nicht akzeptierte ut e a e e t a te we de c t a ept e t▫ keines der fünf zuletzt verwendeten Kennwörter ist zulässig▫ Kennwortänderung nur einmal am Tag zulässig
Sven Möhler, TU-Chemnitz 14
1.1 Erste Schritte im SAP System :: Benutzermenü
• Menüleiste• Symbolleiste• Symbolleiste• Transaktionscodes• Drucktastenleiste• Menübaum
• Statusleiste
Sven Möhler, TU-Chemnitz 15
1.1 Erste Schritte im SAP System :: Benutzermenü
Funktionen der Symbolleiste:
Enter: Bestätigen von Eingaben <Enter>
Buchen: Sichern der getätigten Eingaben <F11>Buchen: Sichern der getätigten Eingaben <F11>
Zurück: Zurück zum vorhergehenden Fenster <F3>
Beenden: Beenden einer Anwendung <Shift+F3>
Abbrechen: Abbruch einer Transaktion ohne Speichern <F12>
Suchen: Suchen nach bestimmten Inhalten <Strg+F>
Drucken: Ausdrucken des aktuellen Bildschirminhaltes <Strg+P>
Optionen: Layout anpassen, Einstellungen <Alt+F12>
Sven Möhler, TU-Chemnitz 16
1.1 Erste Schritte im SAP System :: Modusverwaltung
• In SAP kann mit mehreren Fenstern gleichzeitig gearbeitet werden (Modi)gearbeitet werden (Modi)
• es sind bis zu 6 Modi gleichzeitig möglichgleichzeitig möglich
• Vorteil: äh d lä T k i▫ während längere Transaktionen
arbeiten kann in einem anderen Modus weitergearbeitet werden.
• Neuer Modus:▫ Transaktionscode /o000/
▫ Menü: System – Erzeugen Modus
▫ Symbol:
Sven Möhler, TU-Chemnitz 17
1.1 Erste Schritte im SAP System :: Transaktionscodes
• Man kann durch die Eingabe eines alphanumerischen Codes in das Eingabefeld der Symbolleiste direkt in bestimmte Transaktionen verzweigenverzweigen.
▫ eine Transaktion aufrufen:im selben Modus: xxxx (xxxx = Transaktionscode)in einem zusätzlichen Modus: /oxxxx (xxxx = Transaktionscode)
di kt ll T kti b d /▫ die aktuelle Transaktion beenden: /n▫ den aktuellen Modus löschen: /i ▫ eine Modusliste erzeugen: /og /▫ den Debugmodus einschalten: /h
• Über den Menüpfad SYSTEM STATUS kann man sich unter anderem den Transaktionscode der laufenden Anwendung anzeigen lassenlassen.
Sven Möhler, TU-Chemnitz 18
1.1 Erste Schritte im SAP System :: Felder und Eingabehilfen
• Es gibt 3 verschiedene Arten von Feldern:
▫ Muss – Felder: ... sind meist mit einem versehen. Ist eines der Felder leer, so kann die Transaktion nicht fortgesetzt werden.
▫ Kann Felder: Felder dieser Art können leer gelassen▫ Kann – Felder: … Felder dieser Art können leer gelassen werden.
▫ Anzeigefelder: … die Werte in diesen Feldern können nicht geändert werden.
• Für Felder, die mit einem versehen sind, kann eine Eingabehilfe aktiviert werden. Durch Klick auf das Symbol oder <F4> werden die Eingabemöglichkeiten für das Feld angezeigt.
Sven Möhler, TU-Chemnitz 19
1.1 Erste Schritte im SAP System :: Matchcodesuche
• Um schnell und zuverlässig bestimmte Daten im SAP System finden zu können benötigt man eine Suchfunktionfinden zu können, benötigt man eine Suchfunktion.
• Beispiel:Beispiel: ▫ 1. Öffnen des Dictionary (TC: SE11)▫ 2. Taste <F4> für Eingabehilfe:
Suchfenster erscheint. ▫ 3. Eingabe MA* - <Enter>
▫ 4. Neue Suche: Button für detaillierte Selektion
▫ 5. Karteikarte Intervall: von: MAB* bis: MAO*
Sven Möhler, TU-Chemnitz 20
1.1 Erste Schritte im SAP System :: ABAP® StartA f f d ABAP Edi• Aufruf des ABAP-Editors
▫ Transaktionscode: SE38 oder▫ Easy Access Menü: Werkzeuge ABAP-Workbench Entwicklung ABAP
dEditor
• Anlegen eines Programmesg g▫ Namenskonventionen: YTU_XX_Bezeichnung▫ Button: Anlegen▫ Titel eintragen; Typ: ausführbares Programm; Button: Sicherng ; yp f g ;▫ Button: lokales Objekt
• hello world“ @ Editor• „hello world @ Editor ▫ Nach dem Programmkopf folgenden Text eingeben:
write ‘ Hallo‘ ▫ Programm prüfen mit▫ Programm prüfen mit ▫ es erscheint eine Fehlermeldung. „... (Punkt fehlt)“▫ Zeile ändern: write ‘ Hallo‘ . ▫ Prüfen▫ Prüfen.▫ Ausführen mit
Sven Möhler, TU-Chemnitz 21
1.1 Erste Schritte im SAP System :: Online - Hilfe
• Es gibt verschiedene Hilfen:
▫ Schlüsselwortdokumentation: Taste <F1> wenn der Cursor auf einem Schlüsselwort
steht
Gl Hilf Gl▫ Glossar: Hilfe – Glossar
▫ SAP Bibliothek: Hilfe – SAP Bibliothek, oder im Internet: ,http://help.sap.com
Sven Möhler, TU-Chemnitz 22
1.1 Erste Schritte im SAP System :: DEMO
Sven Möhler, TU-Chemnitz 23
1.1 Erste Schritte am SAP System :: Remote ZugriffK b h ib d V h• Kurzbeschreibung des Vorgehens▫ E-Mail-Anmeldung für Remotezugang beim Tutor
Erhalt von HCC Zugangsdaten ▫ GUI-Download
https://www.tu-chemnitz.de/wirtschaft/sapr3/gui/50083078_4.ZIPentpacken & installieren p
(NW_2004s_Presentation\PRES1\GUI\WINDOWS\WIN32\SapGuiSetup.exe)
▫ Systemeintrag anlegen
neuer Eintrag weiter siehe Einstellungen Fertig stellen
▫ vor SAP Logon IP-Adresse (mit HCC Zugangsdaten) freischalten: http://remote.hcc.uni-magdeburg.de
Sven Möhler, TU-Chemnitz 24
Gliederung :: Lerninhalte• 1 Einführung
▫ 1.1 Erste Schritte im SAP System▫ 1.2 ABAP Dictionary
• 3 ABAP Objects▫ 3.1 Klassen▫ 3 2 Instanz und Statische▫ 1.3 Programmaufbau
▫ 1.4 Programmtypen ▫ 1.5 Werkzeuge
l
▫ 3.2 Instanz- und Statische Komponenten
▫ 3.3 Methoden▫ 1.6 Programm anlegen▫ 1.7 Syntax▫ 1.8 Ausgabe von Texten
D t t
▫ 3.4 Objekte anlegen▫ 3.5 Methodenaufrufe▫ 3.6 Öffentliche Attribute▫ 1.9 Datentypen
▫ 1.10 Wertzuweisung▫ 1.11 Feldsymb. & Referenzen
1 12 Kontrollstrukturen
3.6 Öffentliche Attribute▫ 3.7 Konstruktor▫ 3.8 Objekte löschen
h f hi ii▫ 1.12 Kontrollstrukturen▫ 1.13 Komplexe Strukturen
• 2 Modularisierung2 1 Unterprogramme
▫ 3.9 Mehrfachinstanziierung▫ 4 Interne Tabellen
▫ 4.1 Tabellenarten▫ 2.1 Unterprogramme▫ 2.2 Funktionsbausteine▫ 2.3 Includes▫ 2 4 Makros
4.1 Tabellenarten▫ 4.2 Tabelle anlegen▫ 4.3 Zeilenoperationen
G f b i▫ 2.4 Makros▫ 2.5 Datenbehandlung
▫ 4.4 Gruppenstufenverarbeitung▫ 4.5 Tabellenoperationen
Sven Möhler, TU-Chemnitz 25
1.2 ABAP Dictionary• Teil der Entwicklungsumgebung• Anlegen und Verwalten der globalen Datendefinitionen
das ABAP Dictionary kennt• das ABAP Dictionary kennt ▫ die logische Struktur der Objekte und▫ deren Abbildung auf der Datenbank.g
Datendefinition im ABAP-Dicionarylogisch Tabelendef. ylogisch Tabelendef.
im ABAP Dictionary
physische Tabelendef
• ABAP Dictionary ist allgemeine und systemunabhängige
Datenobjektephysische Tabelendef. auf der Datenbank
• ABAP Dictionary ist allgemeine und systemunabhängige Schnittstelle zum Datenbankbestand
• „OpenSql“ zur Bearbeitung der Dictionary Tabellen„ p q g y
Sven Möhler, TU-Chemnitz 26
1.2 ABAP Dictionary :: Dictionary Datenobjekte• Datenbanktabelle
▫ besteht aus zusammengehörigen Datensätzen (beschreiben ein reales Objekt)Objekt)
▫ Struktur wird in Repository abgelegt und für Daten Speicherplatz auf DB reserviert
• Domäne▫ Abbildung der physikalischen Eigenschaften der Tabellenfelder (z.B.
Datumsfeld) und ggf. ein Wertebereich (z.B. 01.01.2003–31.12.2003)Datumsfeld) und ggf. ein Wertebereich (z.B. 01.01.2003 31.12.2003) hinterlegt.
▫ kann mehreren Datenelementen zugeordnet werdenl• Datenelement
▫ ist direkt ein oder mehreren Datenbankfeldern zugeordnet▫ enthält eine Domäne den Feldbezeichner und ggf eine Suchhilfe zum▫ enthält eine Domäne, den Feldbezeichner und ggf. eine Suchhilfe zum
Tabellenfeld• Views
▫ um Daten verschiedener Tabellen zusammenzufassen
Sven Möhler, TU-Chemnitz 27
1.2 ABAP Dictionary :: Dictionary Datenobjekte• Struktur
▫ besteht aus inhaltlich zusammengehörigen Feldern▫ es wird kein Speicherplatz auf der Datenbank reserviert▫ es wird kein Speicherplatz auf der Datenbank reserviert▫ keine dauerhafte Speicherung von Daten nur temporär
• Tabellentypyp▫ dient dem Anlegen Interner Tabellen versch. Typs▫ wie Struktur, kein Speicherbereich in der DatenbankS hhilf• Suchhilfe▫ In diesem Datenobjekt wird festgelegt, welche Felder, beim Aufrufen der
F4 Hilfe, einer Tabelle oder View angezeigt werden.4 , g g• Speerobjekte
▫ um gleichzeitigen schreibenden Zugriff auf Datenobjekte zu vermeiden▫ sperren Datensätze durch Aufruf einiger Funktionen gegen
Fremdzugriffe
Sven Möhler, TU-Chemnitz 28
1.2 ABAP Dictionary :: Dictionary Datenobjekte• Beispiel zu Domäne, Datenelement, Datenbankfeld
Feldbez.: PLZ
Suchhilfe(F4):
dPLZ
dNUM
KPLZ
SPLZSuchhilfe(F4):SPLZ_Bereich
Feldhilfe(F1):PLZ eingeben
phys. Eigenschaften:
dNUM4 SPLZ
KPLZ
Typ: NUMCLänge: 4 Stellen
dPNR
Feldbez.: PNR
Suchhilfe(F4):SPersonal
KPNR
SPNR
vor Umstellung der PLZ auf 5 Stellen
Feldhilfe(F1):Personalnummer eingeben
SPNR
Domäne Datenelement Tabellenfeld
Sven Möhler, TU-Chemnitz 29
1.2 ABAP Dictionary :: Dictionary Datenobjekte• weiter zu: Beispiel zu Domäne, Datenelement, Datenbankfeld
Feldbez.: PLZ
Suchhilfe(F4):
dPLZKPLZ
SPLZ
phys. Eigenschaften:
dNUM5
Suchhilfe(F4):SPLZ_Bereich
Feldhilfe(F1):PLZ eingeben
SPLZ
KPLZ
Typ: NUMCLänge: 5 Stellen
nach Umstellung der
dNUM4 dPNR
PLZ auf 5 Stellen
Vorteil: Es muss nicht jedes Tabellenfeld auf 5 Stellen umgestellt werden,
phys. Eigenschaften:
Typ: NUMC
Feldbez.: PNR
Suchhilfe(F4):SPersonal
sondern nur eine neue Domäne mit 5 Stellen angelegt werden.
KPNR
SPNRyp
Länge: 4 StellenFeldhilfe(F1):Personalnummer eingeben
SPNR
Domäne Datenfelement Tabellenfeld
Sven Möhler, TU-Chemnitz 30
1.2 ABAP Dictionary :: Demo
Sven Möhler, TU-Chemnitz 31
Gliederung :: Lerninhalte• 1 Einführung
▫ 1.1 Erste Schritte im SAP System▫ 1.2 ABAP Dictionary
• 3 ABAP Objects▫ 3.1 Klassen▫ 3 2 Instanz und Statische▫ 1.3 Programmaufbau
▫ 1.4 Programmtypen ▫ 1.5 Werkzeuge
l
▫ 3.2 Instanz- und Statische Komponenten
▫ 3.3 Methoden▫ 1.6 Programm anlegen▫ 1.7 Syntax▫ 1.8 Ausgabe von Texten
D t t
▫ 3.4 Objekte anlegen▫ 3.5 Methodenaufrufe▫ 3.6 Öffentliche Attribute▫ 1.9 Datentypen
▫ 1.10 Wertzuweisung▫ 1.11 Feldsymb. & Referenzen
1 12 Kontrollstrukturen
3.6 Öffentliche Attribute▫ 3.7 Konstruktor▫ 3.8 Objekte löschen
h f hi ii▫ 1.12 Kontrollstrukturen▫ 1.13 Komplexe Strukturen
• 2 Modularisierung2 1 Unterprogramme
▫ 3.9 Mehrfachinstanziierung▫ 4 Interne Tabellen
▫ 4.1 Tabellenarten▫ 2.1 Unterprogramme▫ 2.2 Funktionsbausteine▫ 2.3 Includes▫ 2 4 Makros
4.1 Tabellenarten▫ 4.2 Tabelle anlegen▫ 4.3 Zeilenoperationen
G f b i▫ 2.4 Makros▫ 2.5 Datenbehandlung
▫ 4.4 Gruppenstufenverarbeitung▫ 4.5 Tabellenoperationen
Sven Möhler, TU-Chemnitz 32
1.3 Programmaufbau• ABAP Programm besteht aus Abfolge von Anweisungen
▫ Anweisungen werden in den Quelltext eines Programmes geschrieben▫ Syntax: <Schlüsselwort> [<Parameter>]▫ Syntax: ▫ Beispiele:
WRITE 'Hello World'. Datenausgabe
<Schlüsselwort> [<Parameter>].
SKIP 2. LeerzeilenULINE 2(30). Position und Länge der Unterstreichung
• ABAP Programme werden durch … eingeleitet:Report <name>. oder Program <name>.p g
• Jedes ABAP-Programm besteht aus den zwei Teilen:▫ globaler Deklarationsteil▫ prozeduraler Teil
Ereignisblöcke (Aufruf durch Ereignis: z B Nutzer klickt Zeile an)Ereignisblöcke (Aufruf durch Ereignis: z.B. Nutzer klickt Zeile an)Unterprogramme (Aufruf durch „Perform“)
Sven Möhler, TU-Chemnitz 33
1.3 ProgrammaufbauÜ• einige Ereignisblöcke in der Übersicht:
▫ Load-of-ProgramAufruf bevor Selektionsbild angezeigt wirdu u bevo Se e t o sb d a ge e gt d
▫ At Selection-ScreenAufruf, wenn der Anwender das Selektionsbild über die Schaltfläche „Ausführen“ verlassen willverlassen will.
▫ Start-of-SelectionAufruf, wenn Selektionsbild verlassen wird. Meistens wird hier Listenpuffer gefüllt.
E d f S l ti▫ End-of-SelectionAufruf, wenn Start-of-Sel.. beendet wurde. Listenpuffer mit Listenfußtext füllen.
▫ At User-CommandAufruf, wenn bei Benutzeraktion, z.B. Drücken einer Schaltfläche.
▫ At Line-SelectionAufruf, bei Doppelklick auf eine Zeile des Ausgabeliste.Aufruf, bei Doppelklick auf eine Zeile des Ausgabeliste.
▫ Top-of-PageAufruf, wenn neue Seite begonnen werden muss. Seitenüberschriften ausgeben.
▫ End of Page▫ End-of-PageAufruf, wenn Seitenende erreicht.
Sven Möhler, TU-Chemnitz 34
Gliederung :: Lerninhalte• 1 Einführung
▫ 1.1 Erste Schritte im SAP System▫ 1.2 ABAP Dictionary
• 3 ABAP Objects▫ 3.1 Klassen▫ 3 2 Instanz und Statische▫ 1.3 Programmaufbau
▫ 1.4 Programmtypen ▫ 1.5 Werkzeuge
l
▫ 3.2 Instanz- und Statische Komponenten
▫ 3.3 Methoden▫ 1.6 Programm anlegen▫ 1.7 Syntax▫ 1.8 Ausgabe von Texten
D t t
▫ 3.4 Objekte anlegen▫ 3.5 Methodenaufrufe▫ 3.6 Öffentliche Attribute▫ 1.9 Datentypen
▫ 1.10 Wertzuweisung▫ 1.11 Feldsymb. & Referenzen
1 12 Kontrollstrukturen
3.6 Öffentliche Attribute▫ 3.7 Konstruktor▫ 3.8 Objekte löschen
h f hi ii▫ 1.12 Kontrollstrukturen▫ 1.13 Komplexe Strukturen
• 2 Modularisierung2 1 Unterprogramme
▫ 3.9 Mehrfachinstanziierung▫ 4 Interne Tabellen
▫ 4.1 Tabellenarten▫ 2.1 Unterprogramme▫ 2.2 Funktionsbausteine▫ 2.3 Includes▫ 2 4 Makros
4.1 Tabellenarten▫ 4.2 Tabelle anlegen▫ 4.3 Zeilenoperationen
G f b i▫ 2.4 Makros▫ 2.5 Datenbehandlung
▫ 4.4 Gruppenstufenverarbeitung▫ 4.5 Tabellenoperationen
Sven Möhler, TU-Chemnitz 35
1.4 Programmtypen• Typ 1:
▫ ermöglichen einen Start unter der Angabe des Programmnamens und heißen deshalb ausführbare Programme
▫ Ereignisse▫ Standardverarbeitungsblock START-OF-SELECTION▫ Nichtdeklarative ABAP-Anweisungen werden START-OF-SELECTIONNichtdeklarative ABAP Anweisungen werden START OF SELECTION
zugeordnet▫ Programme vom Typ 1 werden auch Reports genannt
• Typ F:▫ können nicht gestartet werden Rahmenprogramme für Funktionsbausteine▫ Durch den Aufruf aus einem laufenden ABAP-Programm wird das komplette
Rahmenprogramm in den internen Modus des laufenden Programms dazu geladen.
▫ Typ F-Programme werden auch als Funktionsgruppen bez.▫ Funktionsbausteine dürfen nur in Funktionsgruppen programmiert werden ▫ Außer Funktionsbausteinen können Funktionsgruppen globale u e u t o sbauste e ö e u t o sg uppe g oba e
Datendeklarationen und Unterprogramme enthalten, die für alle Funktionsbausteine sichtbar sind.
Sven Möhler, TU-Chemnitz 36
1.4 Programmtypen• Typ M:
▫ Programme vom Typ M können nur über Transaktionscodes gestartet werden. ▫ werden nur über Ablauflogik von DynPros gesteuertg y g
• Typ K:P T K kö i ht t t t d▫ Programme vom Typ K können nicht gestartet werden
▫ dienen als Rahmenprogramm für globale Klassen▫ ABAP Workbench hat ein spezielles Werkzeug: Class Builder
• Typ J:▫ Programme vom Typ J können nicht gestartet werden Sie dienen als▫ Programme vom Typ J können nicht gestartet werden. Sie dienen als
Rahmenprogramm für globale Interfaces.▫ bez. als Interface-Definitionen und werden erstellt im Class-Builder
Sven Möhler, TU-Chemnitz 37
1.4 Programmtypen• Typ S:
▫ Programme vom Typ S können nicht gestartet werden. ▫ Sie dienen als Rahmenprogramm für Unterprogramme, die nur extern aufgerufen p g p g , g
werden sollen. ▫ werden auch als SUBROUTINENPOOL bez.
• Typ I: ▫ Programme vom Typ I können nicht gestartet werden und enthalten keine
f fb V b it blö kaufrufbaren Verarbeitungsblöcke. ▫ Sie dienen ausschließlich der Modularisierung von ABAP-Quelltext und werden in
andere ABAP-Programme eingebunden. d l l d d▫ werden als Include-Programme verwendet
▫ Einbindung über die „INCLUDE“ Anweisung
Sven Möhler, TU-Chemnitz 38
Gliederung :: Lerninhalte• 1 Einführung
▫ 1.1 Erste Schritte im SAP System▫ 1.2 ABAP Dictionary
• 3 ABAP Objects▫ 3.1 Klassen▫ 3 2 Instanz und Statische▫ 1.3 Programmaufbau
▫ 1.4 Programmtypen ▫ 1.5 Werkzeuge
l
▫ 3.2 Instanz- und Statische Komponenten
▫ 3.3 Methoden▫ 1.6 Programm anlegen▫ 1.7 Syntax▫ 1.8 Ausgabe von Texten
D t t
▫ 3.4 Objekte anlegen▫ 3.5 Methodenaufrufe▫ 3.6 Öffentliche Attribute▫ 1.9 Datentypen
▫ 1.10 Wertzuweisung▫ 1.11 Feldsymb. & Referenzen
1 12 Kontrollstrukturen
3.6 Öffentliche Attribute▫ 3.7 Konstruktor▫ 3.8 Objekte löschen
h f hi ii▫ 1.12 Kontrollstrukturen▫ 1.13 Komplexe Strukturen
• 2 Modularisierung2 1 Unterprogramme
▫ 3.9 Mehrfachinstanziierung▫ 4 Interne Tabellen
▫ 4.1 Tabellenarten▫ 2.1 Unterprogramme▫ 2.2 Funktionsbausteine▫ 2.3 Includes▫ 2 4 Makros
4.1 Tabellenarten▫ 4.2 Tabelle anlegen▫ 4.3 Zeilenoperationen
G f b i▫ 2.4 Makros▫ 2.5 Datenbehandlung
▫ 4.4 Gruppenstufenverarbeitung▫ 4.5 Tabellenoperationen
Sven Möhler, TU-Chemnitz 39
1.5 Werkzeuge
• zentrales Werkzeug des ABAP Workbench istder ABAP Editorder ABAP-Editor
• mehrere Möglichkeiten ihn zu Starten:• mehrere Möglichkeiten ihn zu Starten:▫ Werkzeuge ABAP Workbench Entwicklung ABAP Editor
(Transaktion SE38)▫ Object Navigator
PFAD: Werkzeuge ABAP Workbench Übersicht ObjectNavigator (Transaktion SE80)Navigator (Transaktion SE80)
erlaubt Auswahl von Programmen und Direktzugriff auf die Einzelbestandteile (Glob. Datendek., Unterprogramme, Includes, …)
Sven Möhler, TU-Chemnitz 40
1.5 Werkzeuge• wichtige Funktionen des ABAP Editors:
▫ Anzeigen<->Ändern: wechseln zw. Anzeigen und Ändern
▫ Anderes Objekt: startet andere Obj. der ABAP Workbench
▫ Hilfe zu: Schlüsselwortdoku.; oder Cursor im Befehl + F1;
▫ Prüfen: auf Syntaxfehler prüfen
T t k i /i k i V i d P▫ Testen: aktive/inaktive Version des Progr. starten
▫ Aktivieren: Änderungen an aktiven Programmen erzeugen
inaktive Versionen; nur aktive Versionen sind
systemweit sichtbar
Akti I kti h l k k▫ Aktiv <-> Inaktiv: wechseln zw. inaktiver & aktiver Version
▫ Objektliste anzeigen: Navigationsbereich einschalten
▫ Breakpoint setzen/löschen: … Debugging muss eingeschaltet werden (/h)
Sven Möhler, TU-Chemnitz 41
Gliederung :: Lerninhalte• 1 Einführung
▫ 1.1 Erste Schritte im SAP System▫ 1.2 ABAP Dictionary
• 3 ABAP Objects▫ 3.1 Klassen▫ 3 2 Instanz und Statische▫ 1.3 Programmaufbau
▫ 1.4 Programmtypen ▫ 1.5 Werkzeuge
l
▫ 3.2 Instanz- und Statische Komponenten
▫ 3.3 Methoden▫ 1.6 Programm anlegen▫ 1.7 Syntax▫ 1.8 Ausgabe von Texten
D t t
▫ 3.4 Objekte anlegen▫ 3.5 Methodenaufrufe▫ 3.6 Öffentliche Attribute▫ 1.9 Datentypen
▫ 1.10 Wertzuweisung▫ 1.11 Feldsymb. & Referenzen
1 12 Kontrollstrukturen
3.6 Öffentliche Attribute▫ 3.7 Konstruktor▫ 3.8 Objekte löschen
h f hi ii▫ 1.12 Kontrollstrukturen▫ 1.13 Komplexe Strukturen
• 2 Modularisierung2 1 Unterprogramme
▫ 3.9 Mehrfachinstanziierung▫ 4 Interne Tabellen
▫ 4.1 Tabellenarten▫ 2.1 Unterprogramme▫ 2.2 Funktionsbausteine▫ 2.3 Includes▫ 2 4 Makros
4.1 Tabellenarten▫ 4.2 Tabelle anlegen▫ 4.3 Zeilenoperationen
G f b i▫ 2.4 Makros▫ 2.5 Datenbehandlung
▫ 4.4 Gruppenstufenverarbeitung▫ 4.5 Tabellenoperationen
Sven Möhler, TU-Chemnitz 42
1.6 Programm anlegen• Das Anlegen eines ABAP-Programms erfolgt zunächst in 7 einfachen
Schritten:
▫ 1. Öffnen Sie das SAP-Logon. ▫ 2. Wählen Sie den entsprechenden Systemeintarg aus und klicken Sie auf p y g
„anmelden“
Sven Möhler, TU-Chemnitz 43
1.6 Programm anlegen
▫ 3. Melden Sie sich mit Ihrem Logon und Passwort an. Achten Sie darauf, dass bei Mandant 903 eingetragen ist. dass be a da t 903 e get age st.
▫ 4. Nun befinden Sie sich im Benutzermenü von SAP Easy Access.
Sven Möhler, TU-Chemnitz 44
1.6 Programm anlegen
▫ 5. Wählen Sie nun im Menü Werkzeuge ABAP-WorkbenchEntwicklung ABAP Editor ausEntwicklung ABAP Editor aus.
Sven Möhler, TU-Chemnitz 45
1.6 Programm anlegen
▫ 6. Geben Sie nun den Namen Ihres Programms an. a) Schreibweise: YTU <log> <name>a) Schreibweise: YTU_<log>_<name>. b) Klicken Sie nun auf Anlegen.
Sven Möhler, TU-Chemnitz 46
1.6 Programm anlegen
▫ 7. Nun erscheinen die Programmeigenschaften. Stellen Sie folgende Eigenschaften ein: ge sc a te e :
a) Titel eingebena) Typ: ausführbares Programm b) Objektlistentyp: lokales Objekt
Lokale Objekte sind der Entwicklungsklasse $TMP zugeordnet und sind private Objekte, die nicht in andere Systeme transportiert werden können. p j , y p
Sven Möhler, TU-Chemnitz 47
1.6 Programm anlegen
• Namenskonvention: ▫ Alle Objekte die Sie erstellen sollten mit Y beginnen da Y ein reservierter▫ Alle Objekte die Sie erstellen sollten mit Y beginnen, da Y ein reservierter
Bereich für Kunden ist. Danach schließt sich der Name der Einrichtung an (in unserem Falle TU für TU-Chemnitz).
▫ Nun folgt nach einem Unterstrich Ihr Kürzel und nach einem weiteren Unterstrich der eigentlich Name des Programms.
▫ Bsp.: YTU 13 HELLOWORLDBsp.: YTU_13_HELLOWORLD
• Übersichtlichkeit/Layout: ▫ Besonders bei größeren Programmen, die Sie im späteren Verlauf dieses
Kurses schreiben werden, empfiehlt es sich, dass Sie Ihr Programm ausreichend mit Kommentaren versehen um spätere Korrekturen oderausreichend mit Kommentaren versehen um spätere Korrekturen oder Anpassungen zu erleichtern und die Übersichtlichkeit zu erhöhen.
Sven Möhler, TU-Chemnitz 48
Gliederung :: Lerninhalte• 1 Einführung
▫ 1.1 Erste Schritte im SAP System▫ 1.2 ABAP Dictionary
• 3 ABAP Objects▫ 3.1 Klassen▫ 3 2 Instanz und Statische▫ 1.3 Programmaufbau
▫ 1.4 Programmtypen ▫ 1.5 Werkzeuge
l
▫ 3.2 Instanz- und Statische Komponenten
▫ 3.3 Methoden▫ 1.6 Programm anlegen▫ 1.7 Syntax▫ 1.8 Ausgabe von Texten
D t t
▫ 3.4 Objekte anlegen▫ 3.5 Methodenaufrufe▫ 3.6 Öffentliche Attribute▫ 1.9 Datentypen
▫ 1.10 Wertzuweisung▫ 1.11 Feldsymb. & Referenzen
1 12 Kontrollstrukturen
3.6 Öffentliche Attribute▫ 3.7 Konstruktor▫ 3.8 Objekte löschen
h f hi ii▫ 1.12 Kontrollstrukturen▫ 1.13 Komplexe Strukturen
• 2 Modularisierung2 1 Unterprogramme
▫ 3.9 Mehrfachinstanziierung▫ 4 Interne Tabellen
▫ 4.1 Tabellenarten▫ 2.1 Unterprogramme▫ 2.2 Funktionsbausteine▫ 2.3 Includes▫ 2 4 Makros
4.1 Tabellenarten▫ 4.2 Tabelle anlegen▫ 4.3 Zeilenoperationen
G f b i▫ 2.4 Makros▫ 2.5 Datenbehandlung
▫ 4.4 Gruppenstufenverarbeitung▫ 4.5 Tabellenoperationen
Sven Möhler, TU-Chemnitz 49
1.7 Syntax• Syntax: Schlüsselwort [Parameter].
Schlüsselworte sollten in GROßBUCHSTABEN geschrieben sein• Schlüsselworte sollten in GROßBUCHSTABEN geschrieben sein
• ABAP besitzt keine Formateinschränkungen• ABAP besitzt keine Formateinschränkungen ▫ Anweisungen durch mind. 1 Leerzeichen getrennt▫ Zeilenende entspricht einem Leerzeichen
daraus resultierende folgende Eingabemöglichkeiten:
▫ 1. Einrücken von Anweisungen
▫ 2 Mehrere Anweisungen auf einer Zeile
WRITE 'Hallo World'.
WRITE 'Hallo'. WRITE 'World'.▫ 2. Mehrere Anweisungen auf einer Zeile
▫ 3. Anweisung über mehrere Zeilen WRITE
'Hallo World'.3 g a o Wo d .
Sven Möhler, TU-Chemnitz 50
1.7 Syntax• Kettensätze:
▫ aufeinanderfolgende Anweisung mit gleichem Anfang können verkettet werden▫ identische Anweisung nur 1x schreiben mit Doppelpunktg pp p▫ danach identische Teile mit Doppelpunkt trennen▫ Beispiel: WRITE 'Das ist ein'.
WRITE 'K tt t 'WRITE 'Kettensatz'.*als Kettensatz: WRITE: 'Das ist ein',
'Kettensatz'.
• Kommentare:▫ Kommentare kommen zum Einsatz, wenn Sie Ihren Quelltext kommentieren um , Q
somit die Lesbarkeit bei späteren Änderungen zu erhöhen. ▫ In ABAP gibt es zwei verschiedene Arten von Kommentaren.
* gesamte Zeile wird ignoriertgesamte Zeile wird ignoriert
“ alle Eingaben nach “ werden ignoriert
i*mein ersten Programm WRITE 'Dies ist eine Ausgabe' . “ Kommentar
Sven Möhler, TU-Chemnitz 51
Gliederung :: Lerninhalte• 1 Einführung
▫ 1.1 Erste Schritte im SAP System▫ 1.2 ABAP Dictionary
• 3 ABAP Objects▫ 3.1 Klassen▫ 3 2 Instanz und Statische▫ 1.3 Programmaufbau
▫ 1.4 Programmtypen ▫ 1.5 Werkzeuge
l
▫ 3.2 Instanz- und Statische Komponenten
▫ 3.3 Methoden▫ 1.6 Programm anlegen▫ 1.7 Syntax▫ 1.8 Ausgabe von Texten
D t t
▫ 3.4 Objekte anlegen▫ 3.5 Methodenaufrufe▫ 3.6 Öffentliche Attribute▫ 1.9 Datentypen
▫ 1.10 Wertzuweisung▫ 1.11 Feldsymb. & Referenzen
1 12 Kontrollstrukturen
3.6 Öffentliche Attribute▫ 3.7 Konstruktor▫ 3.8 Objekte löschen
h f hi ii▫ 1.12 Kontrollstrukturen▫ 1.13 Komplexe Strukturen
• 2 Modularisierung2 1 Unterprogramme
▫ 3.9 Mehrfachinstanziierung▫ 4 Interne Tabellen
▫ 4.1 Tabellenarten▫ 2.1 Unterprogramme▫ 2.2 Funktionsbausteine▫ 2.3 Includes▫ 2 4 Makros
4.1 Tabellenarten▫ 4.2 Tabelle anlegen▫ 4.3 Zeilenoperationen
G f b i▫ 2.4 Makros▫ 2.5 Datenbehandlung
▫ 4.4 Gruppenstufenverarbeitung▫ 4.5 Tabellenoperationen
Sven Möhler, TU-Chemnitz 52
1.8 Ausgabe von Texten• In der Listenprogrammierung erfolgen alle Ausgaben über die
WRITE-Anweisung.
▫ allgemeine Syntax:
WRITE [/][<Position>][(<Länge>)] <Ausgabedaten> [<Optionen>].
▫ Parameter in [ ] sind optional[/] Z il
WRITE [/][<Position>][(<Länge>)] <Ausgabedaten> [<Optionen>].
[/] neue Zeile[<Position>] Einrückung[(<Länge>)] Länge der Ausgabe, unabh. von Länge des Param.[( g )] g g , gAusgabedaten sind in Hochkommata einzuschließen[Optionen] Datumsaufbereitung; Links-, Rechtsbündige, Zentrierte
A b F b i h D k t tiAusgabe; Farbe; … siehe Dokumentation
▫ Beispiel: WRITE /2(30) 'Ausgabeliste' COLORp WRITE /2(30) Ausgabeliste COLORCOL_HEADING.
Sven Möhler, TU-Chemnitz 53
1.8 Ausgabe von Texten :: Textsymbole• Soll das Programm in anderen Sprachen abgearbeitet werden (z.B.
in Englisch) können Übersetzungen angelegt werden.▫ Textsymbole sind Texte die außerhalb des Programms in sprachabhängigenTextsymbole, sind Texte die außerhalb des Programms in sprachabhängigen
Textpools abgespeichert werden▫ je nach Anmeldesprache des Benutzers wird die richtige Übersetzung angezeigt
• Textsymbole können wie folgt angesprochen werden:▫ Text-<id>
<id>, ist eine 3-stellige Zeichenkette die zur Identifizierung des Textsymbols dient <id> muss innerhalb eines Programms eindeutig sein<id> muss innerhalb eines Programms eindeutig sein
Beispiel: Text-001 oder Text-A02▫ '<Literal>'(<id>)
id i b<id> wie obenim <Literal> kann ein beliebiger text stehen
Beispiel: 'Ausgabe1' (001) oder 'Ausgabe‘(A02)
Sven Möhler, TU-Chemnitz 54
1.8 Ausgabe von Texten :: Textsymbole• Vorgehensweis - anlegen eines Textsymbols:
▫ Doppelklick auf die Kennung des Textsymbols:REPORT YTU 01 PROGTEXTSYM
b täti it j “
REPORT YTU_01_PROGTEXTSYM .write: / 'vorteil'(001), 'nachteil'(002).
▫ bestätigen mit „ja“
▫ „dlen“ steht für die Länge des deutschen Textes und „mlen“ für die i l lä i Lä d T tmaximale zulässige Länge des Textes
Sven Möhler, TU-Chemnitz 55
1.8 Ausgabe von Texten :: Textsymbole• Vorgehensweise -Textsymbole übersetzen:
▫ ABAP-Editor das Menü „Springen Übersetzung“▫ Zielsprache bestätigen▫ Zielsprache bestätigen
▫ sequentielle Bearbeitung wählen und Übersetzung eingeben
i h & k i i▫ speichern & aktivieren
Sven Möhler, TU-Chemnitz 56
1.8 Ausgabe von Texten :: Formatierungb k d h d f b l d• Die Ausgabe kann durch die FORMAT-Anweisung farbig gestalten werden
(Zeilenhintergrund wird eingefärbt)▫ Syntax: FORMAT [<Zusatz>]Sy ta :
• Die FORMAT-Anweisung wirkt ab der nächsten Ausgabeanweisung.
FORMAT [<Zusatz>].
Sven Möhler, TU-Chemnitz 57
1.8 Ausgabe von Texten :: Formatierungd Üb h• einige Zusätze in der Übersicht:
Zusatz Wirkung
COLOR n ON/OFF FORMAT COLOR n ON.Die Ausgabe erfolgt mit der Hintergrundfarbe nFORMAT COLOR n OFF.Die Ausgabe erfolgt mit Standardhintergrundfarbe.
INTENSIFIEDON/OFF
FORMAT INTENSIFIED ON.Die Ausgabe erfolgt mit der intensiven Version der HintergrundfarbeFORMAT INTENSIFIED OFF.Die Ausgabe erfolgt mit der normalen Hintergrundfarbe
INVERSE ON/OFF FORMAT INVERSE ON.Di A b f l i d h d A b i d i d Hi dDie Ausgabe erfolgt invers, d.h. der Ausgabetext wird mit der Hintergrund-farbe ausgegeben. Die Hintergrundfarbe ist grau.FORMAT INVERSE OFF.Die inverse Darstellung wird wieder ausgeschaltet.Die inverse Darstellung wird wieder ausgeschaltet.
RESET Zurücksetzen aller Formate (Farbe, Intensiv, Invers, Hotspot und Input).Die Wirkung entspricht dem Befehl:FORMAT COLOR OFF INTENSIFIED OFF INVERSE OFF.
Sven Möhler, TU-Chemnitz 58
1.8 Ausgabe von Texten :: Formatierung
• Beispiel (2 Möglichkeiten):
FORMAT COLOR COL_HEADING INTENSIFIED ON.WRITE: 'Liste:'.FORMAT COLOR COL HEADING
FORMAT COLOR COL_HEADING INTENSIFIED ON.WRITE: 'Liste:'(001).FORMAT COLOR COL KEYFORMAT COLOR COL_HEADING
INTENSIFIED OFF.WRITE: /1 'Name' COLOR COL_KEY
INTENSIFIED ON,
FORMAT COLOR COL_KEY INTENSIFIED ON.WRITE: /1 'Name'.FORMAT COLOR COL_HEADING
12 'Strasse',79 'HNr',101 'Ort',111 'Alter'
INTENSIFIED OFF.WRITE: 12 'Strasse',
79 'HNr',101 'Ort'
• Ausgabe:
111 Alter . 101 Ort ,111 'Alter'.
Sven Möhler, TU-Chemnitz 59
AufgabenL Si i ABAP P• 1. Legen Sie ein ABAP- Programm an.
• 2. Schreiben Sie ein kleines Programm, das den Text 'Meine ersten2. Schreiben Sie ein kleines Programm, das den Text Meine ersten Schritte in ABAP' ausgibt.
Ä d Si d P b i d Si d T i T il• 3. Ändern Sie das Programm ab, in dem Sie den Text in 5 Teiltexte zerlegen und geben Sie diese als Kettensatz aus.
• 4. Fügen Sie dem obigen Programm zusätzlich zwei Kommentare an. Verwenden Sie dazu die kennengelernten „Schreibweisen“.
• 5. Formatieren Sie die Teiltexte aus 2. jeweils in unterschiedlichen Farben, verwenden Sie dazu die vier kennengelernten Zusätze.g
• 6. Legen Sie für die Teiltexte aus 2. Übersetzungen an und testen Sie diese indem Sie sich in der Übersetzungssprache am Systemdiese, indem Sie sich in der Übersetzungssprache am System anmelden.
Sven Möhler, TU-Chemnitz 60
Gliederung :: Lerninhalte• 1 Einführung
▫ 1.1 Erste Schritte im SAP System▫ 1.2 ABAP Dictionary
• 3 ABAP Objects▫ 3.1 Klassen▫ 3 2 Instanz und Statische▫ 1.3 Programmaufbau
▫ 1.4 Programmtypen ▫ 1.5 Werkzeuge
l
▫ 3.2 Instanz- und Statische Komponenten
▫ 3.3 Methoden▫ 1.6 Programm anlegen▫ 1.7 Syntax▫ 1.8 Ausgabe von Texten
D t t
▫ 3.4 Objekte anlegen▫ 3.5 Methodenaufrufe▫ 3.6 Öffentliche Attribute▫ 1.9 Datentypen
▫ 1.10 Wertzuweisung▫ 1.11 Feldsymb. & Referenzen
1 12 Kontrollstrukturen
3.6 Öffentliche Attribute▫ 3.7 Konstruktor▫ 3.8 Objekte löschen
h f hi ii▫ 1.12 Kontrollstrukturen▫ 1.13 Komplexe Strukturen
• 2 Modularisierung2 1 Unterprogramme
▫ 3.9 Mehrfachinstanziierung▫ 4 Interne Tabellen
▫ 4.1 Tabellenarten▫ 2.1 Unterprogramme▫ 2.2 Funktionsbausteine▫ 2.3 Includes▫ 2 4 Makros
4.1 Tabellenarten▫ 4.2 Tabelle anlegen▫ 4.3 Zeilenoperationen
G f b i▫ 2.4 Makros▫ 2.5 Datenbehandlung
▫ 4.4 Gruppenstufenverarbeitung▫ 4.5 Tabellenoperationen
Sven Möhler, TU-Chemnitz 61
1.9 Datentypen :: Eingebaute Datentypen• Vollständige Datentypen
Datentyp Beschreibung Länge des D t bj
Initialwert Ausgabelänge in Z i hDatenobj.
in ByteZeichen
d Datum (Date) FormatYYYYMMDD
8 '00000000' 10
t Zeitpunkt (Time)Format HHMMSS
6 '0000000' 6
i ganze Zahl (integer) 4 0 11Wertebereich:-2 *109 ... 2 *109
rechtsbündig
f Gleitpunktzahl(Floating Point)
8 '0.0' 24rechtsbündig(Floating Point)
Wertebereich:2,2* 10-308...1,8*10308
(positv und negativ)
rechtsbündig
string Zeichenfolge Länge variabel beliebige String mit Länge derstring Zeichenfolge, Länge variabel beliebigeLänge
String mitder Länge 0
Länge derZeichenkette,linksbündig
xstring Bytefolge (Hexadedimal), beliebige String mit Länge derLänge variabel Länge der Länge Zeichenkette,
linksbündig
Sven Möhler, TU-Chemnitz 62
1.9 Datentypen :: Eingebaute Datentypen• Unvollständige Datentypen
Datentyp Beschreibung Länge des Datenobjektes Initialwert Ausgabelänge i Z i hin Zeichen
Standard Max. Länge
c Zeichenkette (Charakter), die Länge 1 65.530 Leerzeichen Länge der( ), gder Zeichenkette ist zu ergänzen
5 53 gZeichenkette,linksbündig
n Numerisches Zeichen (numericalCharakter) die Länge der Zeichen-
1 65.533 Leerzeichen Länge derZeichenketteCharakter), die Länge der Zeichen-
kette ist zu ergänzenZeichenkette,rechtsbündig
p gepackte Zahl (Packed Number) zurDarstellung von Festkommazahlen.Di A hl d D i l ll
8 16 0 2*Länge+1rechtsbündig
Die Anzahl der Dezimalstellen(max. 14) und die Länge ist zusätzlich anzugeben
x Byte (Hexadezimal), 1 65.533 X'0...0' Länge dery ( ),die Länge derHexadezimalzahlist zu ergänzen
5 533 gZeichenkette,linksbündig
Sven Möhler, TU-Chemnitz 63
1.9 Datentypen :: Dictionary Datentypen• komplexer als eigebaute Datentypen• direkte Verwendung nicht möglich
Dictionary-Typ Bedeutung ABAP-Typ
CHAR Ch ( )CHAR Character c(m)
CLNT Mandant c(3)
CURR Wäh f ld (( 1)/2)CURR Währungsfeld p((m+1)/2)
LANG Sprache c(3)
QUAN Menge p((m+1)/2)
UNIT Einheit c(m)
Sven Möhler, TU-Chemnitz 64
1.9 Datentypen :: Deklaration von Datenobjekten
• auf folgende Datentypen kann bei der Deklaration zurückgegriffen werden:▫ elementare eingebaute Datentypen▫ elementare, eingebaute Datentypen,▫ programmlokale, mit der TYPES-Anweisung definierte Datentypen▫ globale, im ABAP-Dictionary definierte Datentypen
Syntax der DATA-Anweisung:Für vollständige DatentypenFür vollständige Datentypen
DATA <Datenobjektname> TYPE <Datentyp>[VALUE <Wert>].
Beispiel: DATA datum TYPE d VALUE '20071105' .
[ ]
Sven Möhler, TU-Chemnitz 65
1.9 Datentypen :: Deklaration von Datenobjektenh l bFür Datentypen ohne implizite Längenangabe
DATA <Datenobjektname>(<Länge>) TYPE <Datentyp>[VALUE <Wert>]
Beispiel: DATA name(5) TYPE c VALUE 'Klaus‚
[VALUE <Wert>].
Datendeklaration mit LIKE:
TYPES <Datenobjektname1> LIKE <Datenobjektname2>
Syntax der TYPES-Anweisung:
TYPES <Datenobjektname1> LIKE <Datenobjektname2>.
definiert Datentyp mit benötigter Länge:
TYPES <Name des Datentyps>(<Länge>) TYPE <Datentyp>.DATA <Datenobjekt> TYPE <Name des Datentyps>
Beispiel: TYPES Tname(5) TYPE c.
DATA <Datenobjekt> TYPE <Name des Datentyps>.
DATA name TYPE Tname VALUE 'Klaus'.
Sven Möhler, TU-Chemnitz 66
1.9 Datentypen :: Deklaration von Datenobjektenk bBemerkung zum eingebauten Datentyp „p“:
DATA <Datenobjektname>(<Länge>) TYPE pDECIMALS <A hl N hk t ll > [VALUE <W t>]
ACHTUNG: Dezimaltrenner ist immer PUNKT
DECIMALS <Anzahl Nachkommastellen> [VALUE <Wert>].
Beispiel: TYPES geld(3) TYPE p DECIMALS 2DATA preis TYPE geld VALUE '23.99'.
2 3 , 9 9 + • Länge 3 Byte• 2 Ziffern je Byte• VZ im letzten Byte
0 2 3 9 9 C
VZ im letzten Byte (C für“+“ ,D für „-“)
mit x Byte lassen sich[(x*2)-1] Ziffern d t lldarstellen
Sven Möhler, TU-Chemnitz 67
1.9 Datentypen :: Deklaration von Datenobjekten
• weitere Bemerkungen:
▫ Typ i: die Initialwerte können als Zahlen oder Zeichenliteral▫ Typ i: die Initialwerte können als Zahlen- oder Zeichenliteralangegeben werdenBeispiel: DATA num TYPE i VALUE 123.
DATA TYPE i VALUE ' 'DATA num TYPE i VALUE '123'.
▫ Typ f: die Initialwerte können in verschiedener Form als Zeichenliteralangegeben werdenBeispiel: DATA z1 TYPE f VALUE '-765E10-4'.
DATA z2 TYPE f VALUE '12.34567'.345 7
▫ Typ string: darf nicht über VALUE initialisiert werdenwird über Zuweisung belegtwird über Zuweisung belegt
Beispiel: DATA str TYPE string.str = 'Baum'.
Sven Möhler, TU-Chemnitz 68
1.9 Datentypen :: Deklaration von Datenobjekten
• weitere Bemerkungen:
▫ Typ xstring: darf nicht über VALUE initialisiert werden▫ Typ xstring: darf nicht über VALUE initialisiert werdenwird über Zuweisung belegt
Beispiel: DATA Xstr TYPE xstring.Xstr = 'A1B'.
▫ Typ x: im Gegensatz zum Typ xstring muss bei x die Länge des yp g yp g ganzulegenden Datenobjektes angegeben werdenBeispiel: DATA hex(2) TYPE x VALUE 'A1FC'.
Länge = 2 * ByteanzahlLänge 2 Byteanzahl
▫ Typ c,n,x: werden einer Variable diesen Typs mehr Zeichen als vereinbart zugewiesen gehen die überstehenden“ Zeichen entsprechend derzugewiesen, gehen die „überstehenden Zeichen entsprechend der Ausgaberichtung (linksbündig, …) verloren
Sven Möhler, TU-Chemnitz 69
1.9 Datentypen :: Deklaration von Konstanten• Datenobjekte, deren Wert über die gesamte Laufzeit fest/konstant
ist▫ Syntax:▫ Syntax:
allgemein:
CONSTANTS <Name Konstante> TYPE <Datentyp>
Beispiel: CONSTANTS name(5) TYPE c VALUE 'Klaus'
CONSTANTS <Name_Konstante> TYPE <Datentyp> [DECIMALS <Dezimalstellen>] VALUE <Feldwert>.
Beispiel: CONSTANTS name(5) TYPE c VALUE Klaus .
für eine Konstante die auf ihren Initalwert gesetzt wird:
CONSTANTS <Name_Konstante> TYPE <Datentyp> VALUE IS INITIAL.
Beispiel: CONSTANTS name(5) TYPE c VALUE IS INITIAL.
Sven Möhler, TU-Chemnitz 70
1.9 Datentypen :: Systemfelder• existieren kontextunabhängig• sollte nur gelesen und nicht verändert werden
▫ Syntax: SY <Feld> Beispiel: write SY DATUM▫ Syntax: SY-<Feld> Beispiel: write SY-DATUM.
Systemfeld Bedeutung
SY-MANDANT aktuelle Mandantennummer
SY-UNAME aktueller Nutzer
SY-DATUM Datum des Applikationsservers
SY-UZEIT Zeit des Applikationsservers
i dSY-ZONLO Zeitzone des Benutzers
SY-INDEX Anzahl der bisherigen Schleifendurchläufe (DO, WHILE)
SY TABIX l t t h Z il i i t T b llSY-TABIX zuletzt angesprochene Zeile einer internen Tabelle
SY-REPID Name des aktuellen ABAP- Programms
SY ULINE h i t l St i h d Lä 255SY-ULINE horizontaler Strich der Länge 255
SY-VLINE vertikaler Strich für Listenausgaben
Sven Möhler, TU-Chemnitz 71
Aufgaben• 1. Schreiben Sie ein Programm, mit dessen Hilfe der Satz: "Es gibt 8
elementare Datentypen fixer Länge in ABAP." ausgegeben wird. Verwenden Sie zur Umsetzung mindestens drei verschiedeneVerwenden Sie zur Umsetzung mindestens drei verschiedene Datentypen.
• 2. Schreiben Sie ein Programm, das die Aussage "acht durch drei = 8 / 3" ausgibt. Verwenden Sie dabei eigene Typdefinitionen und LIKELIKE.
• 3 Geben Sie das aktuelle Datum und die aktuelle Uhrzeit aus• 3. Geben Sie das aktuelle Datum und die aktuelle Uhrzeit aus.
• 4. Geben Sie die Zahl Pi mit zwei Nachkommastellen aus. 4Deklarieren Sie diese Zahl als Konstante.
Sven Möhler, TU-Chemnitz 72
Gliederung :: Lerninhalte• 1 Einführung
▫ 1.1 Erste Schritte im SAP System▫ 1.2 ABAP Dictionary
• 3 ABAP Objects▫ 3.1 Klassen▫ 3 2 Instanz und Statische▫ 1.3 Programmaufbau
▫ 1.4 Programmtypen ▫ 1.5 Werkzeuge
l
▫ 3.2 Instanz- und Statische Komponenten
▫ 3.3 Methoden▫ 1.6 Programm anlegen▫ 1.7 Syntax▫ 1.8 Ausgabe von Texten
D t t
▫ 3.4 Objekte anlegen▫ 3.5 Methodenaufrufe▫ 3.6 Öffentliche Attribute▫ 1.9 Datentypen
▫ 1.10 Wertzuweisung▫ 1.11 Feldsymb. & Referenzen
1 12 Kontrollstrukturen
3.6 Öffentliche Attribute▫ 3.7 Konstruktor▫ 3.8 Objekte löschen
h f hi ii▫ 1.12 Kontrollstrukturen▫ 1.13 Komplexe Strukturen
• 2 Modularisierung2 1 Unterprogramme
▫ 3.9 Mehrfachinstanziierung▫ 4 Interne Tabellen
▫ 4.1 Tabellenarten▫ 2.1 Unterprogramme▫ 2.2 Funktionsbausteine▫ 2.3 Includes▫ 2 4 Makros
4.1 Tabellenarten▫ 4.2 Tabelle anlegen▫ 4.3 Zeilenoperationen
G f b i▫ 2.4 Makros▫ 2.5 Datenbehandlung
▫ 4.4 Gruppenstufenverarbeitung▫ 4.5 Tabellenoperationen
Sven Möhler, TU-Chemnitz 73
1.10 Wertzuweisung• Syntax:
MOVE <Quelldatenobjekt> TO <Zieldatenobjekt>.* d*oder <Zieldatenobjekt> = <Quelldatenobjekt>.
• Auch Mehrfachzuweisungen sind möglich, die von rechts nach links verarbeitet werden:
B i i lBeispiel: v4 = v3 = v2 = v1.MOVE v1 TO v2. MOVE v2 TO v3. MOVE v3 TO v4.
• Folgende Fälle können bei Wertzuweisung auftreten:▫ 1.) kompatibel – Inhalt wird Byte für Byte übernommen
2 ) nicht kompatibel der Inhalt wird konvertiert▫ 2.) nicht kompatibel – der Inhalt wird konvertiert2.1) Konvertierung möglich Inhalt Byte für Byte übernehmen2.2) Konvertierung nicht möglich Abbruch
Sven Möhler, TU-Chemnitz 74
1.10 Wertzuweisung :: mit WRITE TO • WRITE TO konvertiert den Inhalt des Quellfeldes in ein Feld vom
Typ c▫ Syntax:▫ Syntax:
WRITE <Datenobjekt1> TO <Datenobjekt2> [<Operation>].
zahlreiche Aufbereitungsoptionen siehe Dokumentation
▫ keine typgerechte Umsetzung▫ keine typgerechte Umsetzung▫ !!Warnung vor Syntaxprüfung!!
Sven Möhler, TU-Chemnitz 75
1.10 Wertzuweisung :: InitialwertU V i bl f ih h I i i l i d di• Um Variablen auf ihren typgerechten Initialwert zu setzen, wird die folgende Syntax verwendet:▫ Syntax: CLEAR <Variable>.
Beispiel:
DATA var(3) TYPE c VALUE 'hey'. CLEAR var. WRITE var.*Ausgabe: 3 Leerzeichen
▫ Wirkung auf Datenobjekte unterschiedlicher Datentypen: 1. elementare ABAP-Typen:
g 3
1. elementare ABAP Typen: Es werden die Werte der Variablen auf die Initialwerte, die in der Tabelle unter elementare Datentypen aufgeführt sind, gesetzt. 2. Referenzen:2. Referenzen: Es wird der Inhalt einer Referenzvariablen auf ihren Initialwert, bei dem die Referenz auf kein Objekt zeigt (NULL-Zeiger) gesetzt. 3 Strukturen:3. Strukturen: Es werden die elementaren Komponenten einer Struktur auf ihre typgerechten Initialwerte zurückgesetzt. 4 Interne Tabellen:4. Interne Tabellen: Es werden sämtliche Zeilen einer internen Tabelle gelöscht.
Sven Möhler, TU-Chemnitz 76
Gliederung :: Lerninhalte• 1 Einführung
▫ 1.1 Erste Schritte im SAP System▫ 1.2 ABAP Dictionary
• 3 ABAP Objects▫ 3.1 Klassen▫ 3 2 Instanz und Statische▫ 1.3 Programmaufbau
▫ 1.4 Programmtypen ▫ 1.5 Werkzeuge
l
▫ 3.2 Instanz- und Statische Komponenten
▫ 3.3 Methoden▫ 1.6 Programm anlegen▫ 1.7 Syntax▫ 1.8 Ausgabe von Texten
D t t
▫ 3.4 Objekte anlegen▫ 3.5 Methodenaufrufe▫ 3.6 Öffentliche Attribute▫ 1.9 Datentypen
▫ 1.10 Wertzuweisung▫ 1.11 Feldsymb. & Referenzen
1 12 Kontrollstrukturen
3.6 Öffentliche Attribute▫ 3.7 Konstruktor▫ 3.8 Objekte löschen
h f hi ii▫ 1.12 Kontrollstrukturen▫ 1.13 Komplexe Strukturen
• 2 Modularisierung2 1 Unterprogramme
▫ 3.9 Mehrfachinstanziierung▫ 4 Interne Tabellen
▫ 4.1 Tabellenarten▫ 2.1 Unterprogramme▫ 2.2 Funktionsbausteine▫ 2.3 Includes▫ 2 4 Makros
4.1 Tabellenarten▫ 4.2 Tabelle anlegen▫ 4.3 Zeilenoperationen
G f b i▫ 2.4 Makros▫ 2.5 Datenbehandlung
▫ 4.4 Gruppenstufenverarbeitung▫ 4.5 Tabellenoperationen
Sven Möhler, TU-Chemnitz 77
1.11 Feldsymbole & Referenzen• Feldsymbole:
▫ sind Zeiger die auf Datenobjekte gerichtet werden können▫ besonders hilfreich in Zusammenhang mit Strukturen und Internen▫ besonders hilfreich in Zusammenhang mit Strukturen und Internen
Tabellen (siehe entsprechende Kapitel)Definition eines Feldsymbols:
Hinweis: Feldsymbolname beginnt und endet mit einer spitzen Klammer
FIELD-SYMBOLS <Feldsymbolname> TYPE <Datenobjekt>.
y g p
Verbinden des Feldsymbols mit einem Datenobjekt:
Beispiel:
ASSIGN <Feldsymbols> TO <Name des Datenobjektes>.
DATA: var TYPE ip DATA: var TYPE i.FIELD-SYMBOLS: <sym> TYPE i.
ASSIGN var TO <sym>.<sym> = 5.WRITE:/ <sym>.
Sven Möhler, TU-Chemnitz 78
1.11 Feldsymbole & Referenzen• Referenzen:
▫ eine Referenz ist ein Verweis auf ein Objekt entfernt vergleichbar mit einem Feldsymboleinem Feldsymbol
▫ Unterscheidung zwischen Daten- und ObjektreferenzSyntax:
DATA / TYPES <Datenobjekt> TYPE REF TO <Datum>.*Datenreferenzen DATA / TYPES <Datenobjekt> TYPE REF TO <Klasse>DATA / TYPES <Datenobjekt> TYPE REF TO <Klasse>. *Objektreferenzen
▫ zeigt auf Adresse Zuweisung ändert nur die Adresse auf die die Referenzvariable zeigt
▫ vor echter“ Zuweisung muss Referenzvariable Dereferenziert werden▫ vor „echter Zuweisung muss Referenzvariable Dereferenziert werdenSyntax:
ASSIGN <Datenreferenz> ->* TO <Feldsymbol>ASSIGN <Datenreferenz> > TO <Feldsymbol>.
Sven Möhler, TU-Chemnitz 79
1.11 Feldsymbole & Referenzen• weiter zu Referenzen:
▫ Erzeugung einer Referenz auf Datenobjekte:Syntax:Syntax:
GET REFERENCE OF <Variable> INTO <Datenreferenzvariable>.
Beispiel:DATA: dataref TYPE REF TO DATA,
var TYPE ivar TYPE i.
FIELD-SYMBOLS: <sym> TYPE any.
GET REFERENCE OF var INTO dataref.ASSIGN dataref->* TO <sym>.<sym> = 5.WRITE <sym>WRITE <sym>.
Sven Möhler, TU-Chemnitz 80
1.11 Feldsymbole & Referenzen• weiter zu Referenzen:
▫ Erzeugung dynamischer Datenobjekte:Syntax:Syntax:
CREATE DATA <Datenreferenz> [TYPE / LIKE <Datenobjekt>].*Datenreferenzen CREATE OBJECT <Datenreferenz> [TYPE / LIKE <Datenobjekt>].*Objektreferenzen, siehe Kapitel „Klassen“
Beispiel:DATA: dataref TYPE REF TO DATA.DATA: dataref TYPE REF TO DATA. FIELD-SYMBOLS: <sym> TYPE any.
CREATE DATA dataref TYPE i.
ASSIGN dataref->* TO <sym>.<sym> = 5.WRITE <sym>.y
Sven Möhler, TU-Chemnitz 81
Gliederung :: Lerninhalte• 1 Einführung
▫ 1.1 Erste Schritte im SAP System▫ 1.2 ABAP Dictionary
• 3 ABAP Objects▫ 3.1 Klassen▫ 3 2 Instanz und Statische▫ 1.3 Programmaufbau
▫ 1.4 Programmtypen ▫ 1.5 Werkzeuge
l
▫ 3.2 Instanz- und Statische Komponenten
▫ 3.3 Methoden▫ 1.6 Programm anlegen▫ 1.7 Syntax▫ 1.8 Ausgabe von Texten
D t t
▫ 3.4 Objekte anlegen▫ 3.5 Methodenaufrufe▫ 3.6 Öffentliche Attribute▫ 1.9 Datentypen
▫ 1.10 Wertzuweisung▫ 1.11 Feldsymb. & Referenzen
1 12 Kontrollstrukturen
3.6 Öffentliche Attribute▫ 3.7 Konstruktor▫ 3.8 Objekte löschen
h f hi ii▫ 1.12 Kontrollstrukturen▫ 1.13 Komplexe Strukturen
• 2 Modularisierung2 1 Unterprogramme
▫ 3.9 Mehrfachinstanziierung▫ 4 Interne Tabellen
▫ 4.1 Tabellenarten▫ 2.1 Unterprogramme▫ 2.2 Funktionsbausteine▫ 2.3 Includes▫ 2 4 Makros
4.1 Tabellenarten▫ 4.2 Tabelle anlegen▫ 4.3 Zeilenoperationen
G f b i▫ 2.4 Makros▫ 2.5 Datenbehandlung
▫ 4.4 Gruppenstufenverarbeitung▫ 4.5 Tabellenoperationen
Sven Möhler, TU-Chemnitz 82
1.12 Kontrollstrukturen• Die Strukturierung in ABAP ist im Wesentlichen wie in allen
anderen Programmiersprachen aufgebaut.
▫ 1. Sequenzen ▫ 2. Verzweigungen g g▫ 3. Schleifen
ABAP fü t i ht üb i BOOLSCHEN D t t• ABAP verfügt nicht über einen BOOLSCHEN Datentyp ▫ logische Ausdrücke zur Formulierung von Bedingungen▫ der logische Ausdruck liefert über Vergleichsoperatoren als Ergebnisder logische Ausdruck liefert über Vergleichsoperatoren als Ergebnis
[wahr] oder [falsch]
Sven Möhler, TU-Chemnitz 83
1.12 Kontrollstrukturen :: log. Ausdrücke• Arithmetische Vergleichsoperatoren:
▫ Zum Vergleich zwischen zwei Datenobjekten werden arithmetische Vergleichsoperatoren verwendetVergleichsoperatoren verwendet.
Symboloperator alternativ Bedeutung
= EQ gleich (identisch)
< > NE ungleich (nicht gleich)
< LT kleiner
<= LE kleiner gleich
> GT größer
> = GE größer gleich
Sven Möhler, TU-Chemnitz 84
1.12 Kontrollstrukturen :: log. bool. Operatoren
• Um mehrere logische Ausdrücke zu einem logischen Ausdruck zu verknüpfen werden logische Operatoren verwendet:
Operator Bedeutung
AND logisches UND
OR logisches ODER
NOT logisches NICHT
Sven Möhler, TU-Chemnitz 85
1.12 Kontrollstrukturen :: Vergleich• Vergleich kompatibler elementarer Datenobjekte:
▫ keine Typkonvertierung notwendig▫ Typ i f p n werden anhand des Zahlenwertes verglichen▫ Typ i,f,p,n werden anhand des Zahlenwertes verglichen▫ Zeichenartige Felder werden von links nach rechts verglichen das
erste verschiedene Zeichen entscheidet
Typ Beispiel Bedeutung
c 'a' < 'b' Vergleich gemäß des zugrundeliegenden Z i h dZeichencodes
d '20000101' > '19991231' die jüngere Datumsangabe ist größer als die ältere
t '200000' > '140000' spätere Zeitangaben sind größer als die früheren
x '11000000' > '00000001' Vergleich bezüglich der Bytewerte
▫ Warnung vor Vergleichsausdrücken vom Typ f Genauigkeitsbereich liegt bei 15 Stellen
Sven Möhler, TU-Chemnitz 86
1.12 Kontrollstrukturen :: Vergleich• Vergleich inkompatibler elementarer Datenobjekte:
▫ Datenobjekte müssen vor Vergleich konvertiert werden
▫ Bei Datenobjekten mit gleichen Datentypen aber unterschiedlicher Länge wird der kürzere Operand vor dem Vergleich auf die Länge des lä d k ilängsten Operanden konvertiert.
Beispiel: Typ c kürzere Zeichenkette wird von rechts mit Leerzeichen aufgefülltTyp n kürzere Zeichenkette wird von links mit Nullen aufgefüllt
▫ Bei Operanden mit unterschiedlichen Datentypen werden▫ Bei Operanden mit unterschiedlichen Datentypen werden Typkonvertierungen nach der Hierarchie durchgeführt.
Beispiel: Typ i,p,f f steht dabei höher als p und p höher als i
Sven Möhler, TU-Chemnitz 87
1.12 Kontrollstrukturen :: weitere Operatoren
Operator Bedeutung
IS INITIAL ob ein Datenobjekt seinen typgerechtenIS INITIAL ob ein Datenobjekt seinen typgerechten Initialwert enthält
IS ASSIGNED ob einem Feldsymbol ein Datenobjekt i i tzugewiesen ist
IS [SUPPLIED/ REQUESTED] ob ein Formalparameter versorgt/abgefragt wird
BETWEEN [Wert1] AND [Wert2] ob ein Datenobjekt im gewünschten Intervall liegt
IN ob der Inhalt eines Datenobjektes die
B i i l BERWEEN d
IN ob der Inhalt eines Datenobjektes die Bedingungen der Selektionstabelle enthält
• Beispiel: a = 10. a BERWEEN 4 and 5.Ergebnis ist [falsch]
Sven Möhler, TU-Chemnitz 88
1.12 Kontrollstrukturen :: Verzweigung• Um Anweisungen nur unter bestimmten Bedingungen ausführen zu
können, existieren in ABAP die Kontrollstrukturen IF und CASE:
IF logischer Ausdruck.A i
CASE Datenobjekt.[WHEN A ä<Anweisungen.>
[ELSEIF logischer Ausdruck.<Anweisungen.>]
[WHEN Ausprägung1 <or ...>. <Anweisungen.>]
[WHEN Ausprägung2 <or ...>. [ELSEIF logischer Ausdruck.
<Anweisungen.>] [ELSE.
<Anweisungen.>] [WHEN OTHERS.
<Anweisungen.>] [<Anweisungen.>]
ENDIF.
g ]ENDCASE.
Sven Möhler, TU-Chemnitz 89
1.12 Kontrollstrukturen :: Verzweigung• Beispiel:
DATA zahl TYPE i value 5. "Zahl zwischen 1 und 5
IF zahl < 3.WRITE / 'Zahl kleiner 3'.IF zahl < 2.
CASE zahl.WHEN 1.
WRITE / 'Zahl gleich 1'.WRITE / 'Zahl gleich 1'.
ELSE.WRITE / 'Zahl gleich 2'.
ENDIF
WHEN '2'.WRITE / 'Zahl gleich 2'.
WHEN '3'.WRITE / 'Zahl gleich 3'ENDIF.
ELSEIF zahl > 3.WRITE / ‚Zahl größer 3'.IF zahl > 4.
WRITE / Zahl gleich 3 .WHEN 4.
WRITE 'Zahl gleich 4'.WHEN OTHERS.
WRITE / 'Zahl gleich 5'.ELSE.
WRITE / 'Zahl gleich 4'.ENDIF.
WRITE 'Zahl gleich 5'.ENDCASE.
A bENDIF.ELSE.
WRITE / 'Zahl gleich 3'.ENDIF.
Ausgabe:
Ausgabe:Zahl gleich 5
Ausgabe:Zahl größer 3Zahl gleich 5
Sven Möhler, TU-Chemnitz 90
1.12 Kontrollstrukturen :: Schleifen• Die Systemvariable SY-INDEX enthält die Anzahl der
Schleifendurchläufe inklusive des aktuellen Durchlaufs.
WHILE Abbruchbedingung.
► Bedingte Schleife: ► Nicht bedingte Schleife :
DO <n TIMES>.WHILE Abbruchbedingung.<Anweisungen.>
ENDWHILE.
DO <n TIMES>. <Anweisungen.>
ENDDO.
ist n NULL oder negativ wird Schleife nicht durchlaufen
Sven Möhler, TU-Chemnitz 91
1.12 Kontrollstrukturen :: SchleifenAbb hb di• Abbruchbedingungen:▫ regulärer Schleifenabbruch:
Abbruchbedingung erfüllt oder SY-INDEX = ng g
▫ totaler Blockabbruch:Syntax: EXITSyntax: EXIT.
sofortiger Sprung zum Schlüsselwort ENDWHILE, ENDDO
i h b di bb h i hl if d hl f▫ Nicht bedingter Abbruch eines Schleifendurchlaufs:Syntax: CONTINUE.
der nächste Schleifendurchlauf wird erzwungengAnweisungen nach CONTINUE werden nicht mehr ausgeführt
▫ Bedingter Abbruch eines Schleifendurchlaufs:▫ Bedingter Abbruch eines Schleifendurchlaufs: Syntax: CHECK <Bedingung>.
Wenn Bedingung [wahr] weiter, wenn Bedingung [falsch] nächster S hl if d hl fSchleifendurchlauf
Sven Möhler, TU-Chemnitz 92
1.12 Kontrollstrukturen :: Schleifen• Beispiel:
DATA count TYPE i VALUE 5.
WHILE count >= sy-index.WRITE : ' ', sy-index.
ENDWHILE
Ausgabe:1 2 3 4 5ENDWHILE.
WHILE count >= sy-index.CONTINUE.
' ' i dAusgabe:
WRITE: ' ', sy-index.ENDWHILE.
WHILE count >= sy-index.WHILE count > sy index.WRITE: ' ', sy-index.EXIT.
ENDWHILE.
Ausgabe:1
WHILE count >= sy-index.CHECK sy-index > 2.WRITE : ' ', sy-index.
Ausgabe:3 4 5, y
ENDWHILE.3 4 5
Sven Möhler, TU-Chemnitz 93
Aufgaben1 S h ib Si i P d kt ll D t di J h it• 1. Schreiben Sie ein Programm, das zum aktuellem Datum die Jahreszeit ermittelt. ▫ Hinweis: Gehen Sie vereinfachend davon aus, dass Dezember, Januar und Februar zum
Winter, März, April und Mai zum Frühling, Juni, Juli und August zum Sommer und S b Ok b d N b H b höSeptember, Oktober und November zum Herbst gehören.
▫ a) Realisieren Sie die Aufgabe unter zu Hilfenahme einer CASE-Verzweigung. ▫ b) Realisieren Sie die Aufgabe unter zu Hilfenahme einer IF-Verzweigung.
• 2. Schreiben Sie ein Programm, das bei Eingabe der Wochentagsnummer die Ausgabe des dazugehörigen Tages als Text realisiert. Fassen Sie Samstag und Sonntag zu Wochenende zusammen.
a) Realisieren Sie die Aufgabe unter u Hilfenahme einer CASE Ver eigung▫ a) Realisieren Sie die Aufgabe unter zu Hilfenahme einer CASE-Verzweigung. ▫ b) Realisieren Sie die Aufgabe unter zu Hilfenahme einer IF-Verzweigung.
• 3. Schreiben Sie ein Programm, das die Entwicklung einer festverzinslichen 3 g , gGeldanlage bis zur Verdopplung des Guthabens ausgibt. Es soll die Eingabe des Guthabens und eines festen Zinssatzes interaktiv erfolgen. ▫ a) Realisieren Sie die Aufgabe unter zu Hilfenahme einer WHILE-Schleife. ▫ b) Realisieren Sie die Aufgabe unter zu Hilfenahme einer DO Schleife▫ b) Realisieren Sie die Aufgabe unter zu Hilfenahme einer DO-Schleife
• 4. Ermitteln Sie die Primzahlen von 1 bis 1000 durch Divisionsrest. Verwenden Sie sowohl WHILE- als auch DO-Schleifen.
Sven Möhler, TU-Chemnitz 94
Gliederung :: Lerninhalte• 1 Einführung
▫ 1.1 Erste Schritte im SAP System▫ 1.2 ABAP Dictionary
• 3 ABAP Objects▫ 3.1 Klassen▫ 3 2 Instanz und Statische▫ 1.3 Programmaufbau
▫ 1.4 Programmtypen ▫ 1.5 Werkzeuge
l
▫ 3.2 Instanz- und Statische Komponenten
▫ 3.3 Methoden▫ 1.6 Programm anlegen▫ 1.7 Syntax▫ 1.8 Ausgabe von Texten
D t t
▫ 3.4 Objekte anlegen▫ 3.5 Methodenaufrufe▫ 3.6 Öffentliche Attribute▫ 1.9 Datentypen
▫ 1.10 Wertzuweisung▫ 1.11 Feldsymb. & Referenzen
1 12 Kontrollstrukturen
3.6 Öffentliche Attribute▫ 3.7 Konstruktor▫ 3.8 Objekte löschen
h f hi ii▫ 1.12 Kontrollstrukturen▫ 1.13 Komplexe Strukturen
• 2 Modularisierung2 1 Unterprogramme
▫ 3.9 Mehrfachinstanziierung▫ 4 Interne Tabellen
▫ 4.1 Tabellenarten▫ 2.1 Unterprogramme▫ 2.2 Funktionsbausteine▫ 2.3 Includes▫ 2 4 Makros
4.1 Tabellenarten▫ 4.2 Tabelle anlegen▫ 4.3 Zeilenoperationen
G f b i▫ 2.4 Makros▫ 2.5 Datenbehandlung
▫ 4.4 Gruppenstufenverarbeitung▫ 4.5 Tabellenoperationen
Sven Möhler, TU-Chemnitz 95
1.13 Komplexe Strukturen
• zusammengehöriger einzeiliger Speicherbereich, der mehrere, einzeln adressierbare Komponenten besitzteinzeln adressierbare Komponenten besitzt
▫ Beispiel:p
Struktur: Kunde
KNameKNr KAdr KOrt Komponenten
Sven Möhler, TU-Chemnitz 96
1.13 Komplexe Strukturen• Anlegen von Komplexen Strukturen:
▫ Syntax:
TYPES/DATA: BEGIN OF <Strukturname>,<Komponentenname1> Type <Datentyp>,<Komponentenname2> Type <Datentyp>,p yp yp ,…<Komponentennamen> Type <Datentyp>,
END OF <Strukturname>
▫ Beispiel:
END OF <Strukturname>.
p
TYPES: BEGIN OF Kunde,KNr(5) TYPE n,KName(15) TYPE c
DATA: BEGIN OF Kunde,KNr(5) TYPE n,KName(15) TYPE cKName(15) TYPE c,
KAdr(20) TYPE c,KOrt(15) TYPE c,
END OF Kunde.
KName(15) TYPE c,KAdr(20) TYPE c,KOrt(15) TYPE c,
END OF Kunde.
DATA: Kunde1 TYPE Kunde.
Sven Möhler, TU-Chemnitz 97
1.13 Komplexe Strukturen• Arbeiten mit Komplexen Strukturen:
▫ Syntax:
St kt K t
▫ Beispiel:
<Strukturname>-<Komponentenname>.
TYPES: BEGIN OF Kunde,KNr(5) TYPE n,KName(15) TYPE c,
Kunde1-KNr = '12345'.Kunde1-KName = 'Klaus Meier'.Kunde1-KAdr = 'Am Wald 5'.( 5) ,
KAdr(20) TYPE c,KOrt(15) TYPE c,
END OF Kunde.
5Kunde1-KOrt = 'Chemnitz'.
WRITE: / Kunde1-KNr,/ Kunde1 Kname
DATA: Kunde1 TYPE Kunde./ Kunde1-Kname,/ Kunde1-Kadr,/ Kunde1-Kort.
Sven Möhler, TU-Chemnitz 98
1.13 Komplexe Strukturen• Strukturkomponenten-Selektor:
▫ DB-Tabelle im ABAP-Dictionary stellt einen strukturierten Typ dar▫ Komponenten entsprechen den Spalten der Datenbanktabelle▫ Komponenten entsprechen den Spalten der Datenbanktabelle
▫ Syntax:
Beispiel:
DATA <Strukturname> TYPE <Datenbanktabelle>.
▫ Beispiel:
DATA Kunde TYPE KNA1.
Kunde-Name1 = 'JOCHEN MEIER'.WRITE Kunde-Name1.
Bi d t i h i d St kt K t l kt tBindestrich wird Struktur-Komponentenselektor genannt
Sven Möhler, TU-Chemnitz 99
1.13 Komplexe Strukturen• Beispiel Verschachtelung:
TYPES: BEGIN OF Adresse,Adr(15) TYPE c,
WRITE:/5 'Kundennummer:', 20 'Name:',Adr(15) TYPE c,
HNr(5) TYPE c,PLZ(5) TYPE n,Ort(15) TYPE c,
END OF Ad
20 Name: , 40 'Adresse:', 57 'HausNr.:', 68 'PLZ:',
'O t 'END OF Adresse.
DATA: BEGIN OF Kunde,KNr(5) TYPE n,
75 'Ort:'.
ULINE.(5) ,
Name(20) TYPE c,Anschrift TYPE Adresse,
END OF Kunde.
WRITE:/ Kunde-KNr UNDER 'Kundennummer:',Kunde-Name UNDER 'Name:',Kunde-Anschrift-Adr UNDER 'Adresse:',Kunde Anschrift HNr UNDER 'HausNr :'
Kunde-KNr = '12345'.Kunde-Name = 'Klaus Heinrich'.Kunde-Anschrift-Adr = 'Am Wald'.
Kunde-Anschrift-HNr UNDER HausNr.: ,Kunde-Anschrift-PLZ UNDER 'PLZ:',Kunde-Anschrift-Ort UNDER 'Ort:'.
Kunde-Anschrift-HNr = '5'.Kunde-Anschrift-PLZ = '09266'.Kunde-Anschrift-Ort = 'Claußnitz'.
Sven Möhler, TU-Chemnitz 100
1.13 Komplexe Strukturen• Geschachtelte Strukturen mit INCLUDE:
▫ Komponenten einer Struktur liegen alle auf der gleichen Ebene▫ Syntax:▫ Syntax:
DATA: BEGIN OF <Struktur1>,<Felder>.INCUDE STRUCTURE <Struktur2> AS <Strukturname> [RENAMING WITH SUFFIX <Suffix>].
DATA: <Felder>DATA: <Felder>, END OF <Struktur1>.
▫ Zusatz RENAMING wichtig: Falls eine Komponente der Struktur2 den gleichen Namen hat wie eine Komponente der Struktur1 dann fügt RENAMING an deneine Komponente der Struktur1, dann fügt RENAMING an den Komponentennamen der Struktur2 einen Suffix an somit sind die Komponenten der Struktur2 eindeutig ansprechbar.
Sven Möhler, TU-Chemnitz 101
1.13 Komplexe Strukturen• Beispiel:
TYPES: BEGIN OF Adresse,Adr(15) TYPE c,
Kunde-KNr = '12345'.Kunde-Name = 'Klaus Heinrich'.Adr(15) TYPE c,
HNr(5) TYPE c,PLZ(5) TYPE n,Ort(15) TYPE c,
END OF ADRESSE
Kunde Name Klaus Heinrich .Kunde-Adr1 = 'Am Wald'.Kunde-HNr1 = '5'.Kunde-Anschr1-PLZ = '09266'.K d O t 'Cl ß it 'END OF ADRESSE.
DATA: A1 TYPE Adresse,A2 TYPE Adresse,
Kunde-Ort1 = 'Claußnitz'.Kunde-Adr2 = 'Am Zaun'.Kunde-Anschr2-HNr = '22'.Kunde-PLZ2 = '18272'.,
BEGIN OF Kunde,KNr(5) TYPE n,Name(20) TYPE c
7Kunde-Ort2 = 'Gießen'.
WRITE:/ Kunde-KNr,Kunde NameName(20) TYPE c.
INCLUDE STRUCTURE A1 AS Anschr1RENAMING WITH SUFFIX 1.INCLUDE STRUCTURE A2 AS Anschr2
Kunde-Name,Kunde-Anschr1-Adr,Kunde-HNr1,Kunde-PLZ1,
RENAMING WITH SUFFIX 2.DATA END OF Kunde.
Kunde-Ort1,Kunde-Adr2,Kunde-HNr2,Kunde-PLZ2Kunde PLZ2,Kunde-Ort2.
Sven Möhler, TU-Chemnitz 102
1.13 Komplexe Strukturen• Zuweisungen zwischen Strukturen
▫ Zuweisung mit MOVE oder dem ZuweisungsoperatorZeichen werden linksbündig von Quell- nach Zielstruktur kopiertZeichen werden linksbündig von Quell- nach Zielstruktur kopiertkeine TypkonvertierungSyntax:
k K d
MOVE <Struktur1> TO<Struktur2>. TYPES: BEGIN OF Kunde1,Knr(3) TYPE c, Name(5) TYPE c,Vorname(4) TYPE c,
M E I E R H A N S0 1 5
Struktur Kunde1 Vorname(4) TYPE c,END OF Kunde1,BEGIN OF Kunde2,
Knr2(2) TYPE c, Name2(5) TYPE c,
MOVE
(5) ,Adresse(5) TYPE c, Umsatz(3) TYPE p Decimals 2,
END OF Kunde2.
M E I E R H A N0 1 5 S
Struktur Kunde2
Sven Möhler, TU-Chemnitz 103
1.13 Komplexe Strukturen• Zuweisungen zwischen Strukturen
▫ Zuweisung mit MOVE-CORRESPONDINGAnweisung kopiert nur die Inhalte namensgleiche FelderAnweisung kopiert nur die Inhalte namensgleiche Felder!!!KOMPONETENNAMEN ANPASSEN!!!Syntax:
MOVE-CORRESPONDING <Struktur1> TO<Struktur2>.
TYPES: BEGIN OF Kunde1,K ( ) TYPE
M E I E R H A N S0 1 5
Struktur Kunde1 Knr(3) TYPE c, Name(5) TYPE c,Vorname(4) TYPE c,
END OF Kunde1,BEGIN OF Kunde25
MOVE-CORRESPONDING
BEGIN OF Kunde2,Knr(2) TYPE c, Adresse(5) TYPE c, Name(5) TYPE c,Umsatz(3) TYPE p Decimals 2
0 1 E I E RM
Umsatz(3) TYPE p Decimals 2,END OF Kunde2.
Struktur Kunde2
Sven Möhler, TU-Chemnitz 104
1.13 Komplexe Strukturen :: Feldsymbole• Zeiger kann auf die Komponenten einer Struktur gerichtet werden
▫ kompakter und laufzeitgünstiger Quellcode
▫ Beispiel: TYPES: BEGIN OF Adresse,Adr(15) TYPE c,HN ( ) TYPEHNr(5) TYPE c,PLZ(5) TYPE n,Ort(15) TYPE c,
END OF Adresse.
DATA: BEGIN OF Kunde,KNr(5) TYPE n,Name(20) TYPE cName(20) TYPE c,Anschrift TYPE Adresse,
END OF Kunde.
FIELD-SYMBOLS: <sym> TYPE Adresse.
Kunde-Anschrift-Adr = 'Waldweg'.ASSIGN Kunde-Anschrift TO <sym>ASSIGN Kunde Anschrift TO <sym>.<sym>-HNr = '5'.WRITE <sym>-HNr.
Sven Möhler, TU-Chemnitz 105
Aufgaben1 S h ib Si i P i d i i P l t t• 1. Schreiben Sie ein Programm, in dem sie einen Personalstammsatz (Nummer, Name, Straße, Ort, Postleitzahl, Geburtsdatum) vereinbaren. Lesen Sie passende Daten dazu ein und geben Sie diese auch korrekt wieder auswieder aus.
• 2. Ändern Sie das obige Beispiel so ab, dass eine Unterstruktur im Programm vorliegt Fügen Sie eine zusätzliche Struktur Kind (mitProgramm vorliegt. Fügen Sie eine zusätzliche Struktur Kind (mit Name, Geschlecht und Alter) ein.
• 3 Gehen Sie von den Aufgaben 1 und 2 aus und bringen Sie die• 3. Gehen Sie von den Aufgaben 1 und 2 aus und bringen Sie die geschachtelte Struktur Schüler auf die gleiche Ebene wie Personalstammsatz. Integrieren Sie die Struktur Schüler als eine Komponente, bestehend aus Komponenten gleichen Namens, nochKomponente, bestehend aus Komponenten gleichen Namens, noch einmal. Geben Sie ABAP und Objekts als zwei Zeichenketten aus, in dem Sie diese zuvor mit Referenzvariablen vereinbaren und dereferenzieren.
• 4. Erweitern Sie Aufgabe 2 um ein Feldsymbol, was es Ihnen erlaubt, die Komponente Kind-Alter in der Struktur Personalstammsatz panzusprechen.
Sven Möhler, TU-Chemnitz 106
Gliederung :: Lerninhalte• 1 Einführung
▫ 1.1 Erste Schritte im SAP System▫ 1.2 ABAP Dictionary
• 3 ABAP Objects▫ 3.1 Klassen▫ 3 2 Instanz und Statische▫ 1.3 Programmaufbau
▫ 1.4 Programmtypen ▫ 1.5 Werkzeuge
l
▫ 3.2 Instanz- und Statische Komponenten
▫ 3.3 Methoden▫ 1.6 Programm anlegen▫ 1.7 Syntax▫ 1.8 Ausgabe von Texten
D t t
▫ 3.4 Objekte anlegen▫ 3.5 Methodenaufrufe▫ 3.6 Öffentliche Attribute▫ 1.9 Datentypen
▫ 1.10 Wertzuweisung▫ 1.11 Feldsymb. & Referenzen
1 12 Kontrollstrukturen
3.6 Öffentliche Attribute▫ 3.7 Konstruktor▫ 3.8 Objekte löschen
h f hi ii▫ 1.12 Kontrollstrukturen▫ 1.13 Komplexe Strukturen
• 2 Modularisierung2 1 Unterprogramme
▫ 3.9 Mehrfachinstanziierung▫ 4 Interne Tabellen
▫ 4.1 Tabellenarten▫ 2.1 Unterprogramme▫ 2.2 Funktionsbausteine▫ 2.3 Includes▫ 2 4 Makros
4.1 Tabellenarten▫ 4.2 Tabelle anlegen▫ 4.3 Zeilenoperationen
G f b i▫ 2.4 Makros▫ 2.5 Datenbehandlung
▫ 4.4 Gruppenstufenverarbeitung▫ 4.5 Tabellenoperationen
Sven Möhler, TU-Chemnitz 107
2 ModularisierungQ ll i d i hi d Ab h i il• Quelltext wird in verschiedene Abschnitte geteilt
▫ neben Ereignisblöcken, kann Programmierer auch selber Abschnitte definieren
diese Abschnitte sind in der prozeduralen Programmierung UNTERPRORAMME und FUNKTIONSBAUSTEINE
Vorteile von Prozeduren:Lesbarkeit des Programms: ▫ Strukturierung fördern Gesamtverständnis▫ Strukturierung, fördern GesamtverständnisWartbarkeit des Programms: ▫ Wiederverwendbarkeit, Änderungen nur einmal, …D t bj kt kö l d d i L f it dDatenobjekte können so angelegt werden, dass sie nur zur Laufzeit desUnterprogrammes vorhanden sind.
spart Speicherplatz
Im wesentlichen wird zwischen interner Modularisierung mittels Unterprogrammen oder externer mittels Funktionsbausteinen
hi dunterschieden.
Sven Möhler, TU-Chemnitz 108
Gliederung :: Lerninhalte• 1 Einführung
▫ 1.1 Erste Schritte im SAP System▫ 1.2 ABAP Dictionary
• 3 ABAP Objects▫ 3.1 Klassen▫ 3 2 Instanz und Statische▫ 1.3 Programmaufbau
▫ 1.4 Programmtypen ▫ 1.5 Werkzeuge
l
▫ 3.2 Instanz- und Statische Komponenten
▫ 3.3 Methoden▫ 1.6 Programm anlegen▫ 1.7 Syntax▫ 1.8 Ausgabe von Texten
D t t
▫ 3.4 Objekte anlegen▫ 3.5 Methodenaufrufe▫ 3.6 Öffentliche Attribute▫ 1.9 Datentypen
▫ 1.10 Wertzuweisung▫ 1.11 Feldsymb. & Referenzen
1 12 Kontrollstrukturen
3.6 Öffentliche Attribute▫ 3.7 Konstruktor▫ 3.8 Objekte löschen
h f hi ii▫ 1.12 Kontrollstrukturen▫ 1.13 Komplexe Strukturen
• 2 Modularisierung2 1 Unterprogramme
▫ 3.9 Mehrfachinstanziierung▫ 4 Interne Tabellen
▫ 4.1 Tabellenarten▫ 2.1 Unterprogramme▫ 2.2 Funktionsbausteine▫ 2.3 Includes▫ 2 4 Makros
4.1 Tabellenarten▫ 4.2 Tabelle anlegen▫ 4.3 Zeilenoperationen
G f b i▫ 2.4 Makros▫ 2.5 Datenbehandlung
▫ 4.4 Gruppenstufenverarbeitung▫ 4.5 Tabellenoperationen
Sven Möhler, TU-Chemnitz 109
2.1 Unterprogramme• Unterprogramme sollten am Ende des Quelltextes angelegt sein
Definition von Unterprogrammen:• Definition von Unterprogrammen:▫ Syntax:
FORM <Name desUnterprogrammes> [Parameterschnittstelle]FORM <Name desUnterprogrammes> [Parameterschnittstelle].<Anweisungen.>
ENDFORM.
• Aufruf von Unterprogrammen:▫ Syntax:▫ Syntax:
PERFORM <Name des Unterprogrammes> [Parameterschnittstelle].
• Beispiel:start-of-selection.
PERFORM p1
….FORM up1.
WRITE / 'mein erstes Unterprogramm'PERFORM up1.….
WRITE / 'mein erstes Unterprogramm'.ENDFORM.
Sven Möhler, TU-Chemnitz 110
2.1 Unterprogramme• Parameterschnittstelle:
▫ Aktualparameter der vom rufenden Programm übergebene Parameter▫ Formalparameter der im Unterprogramm verwendete Parameter▫ Formalparameter der im Unterprogramm verwendete Parameter
▫ Arten der Paramterübergabe:(1) Wertübergabe (call-by-value)(2) Adressübergabe (Call-by-reference)(3) Wertübergabe mit Rückgabe (call by value and result)(3) Wertübergabe mit Rückgabe (call-by-value-and-result)
Sven Möhler, TU-Chemnitz 111
2.1 Unterprogramme• zu (1) Wertübergabe:
▫ Syntax:▫ Syntax:
*Definition des UPFORM <Name> USING VALUE(p1) VALUE(p2)...VALUE(pn).FORM <Name> USING VALUE(p1) VALUE(p2)...VALUE(pn).*Aufruf des UPPERFORM <Name> USING a1 a2 … an.
im Unterprogramm wird eine Kopie des Aktualparameters angelegtÄnderungen des Formalparameters haben keine Auswirkungen auf de u ge des o a pa a ete s abe e e usw u ge auden AktualparameterLebensdauer der Formalparameter = Laufzeit des UP
Sven Möhler, TU-Chemnitz 112
2.1 Unterprogramme• zu (2) Adressübergabe (Call-by-reference):
▫ Syntax 1:▫ Syntax 1:*Definition des UnterprogrammesFORM <Name> USING p1 p2 ... pn.
f f d
Unterprogramm erhält die Speicheradressen des Aktualparameters
*Aufruf des Unterprogrammes:PERFORM <Name> USING a1 a2 … an.
Unterprogramm erhält die Speicheradressen des AktualparametersÄnderungen des Formalparamters wirken sich sofort auf den
Aktualparameter aus (auch nach Beendigung)
▫ Hinweis:Diese Syntax sollte aus Übersichtlichkeitsgründen nur verwendetDiese Syntax sollte aus Übersichtlichkeitsgründen nur verwendet werden, wenn sich der Formalparameter im Unterprogramm nicht ändert.
Sven Möhler, TU-Chemnitz 113
2.1 Unterprogramme• zu (2) Adressübergabe (Call-by-reference):
▫ Syntax 2:▫ Syntax 2:*Definition des UnterprogrammesFORM <Name> CHANGING p1 p2 ... pn.* f f d
wie Syntax 1 mit USING:
*Aufruf des Unterprogrammes:PERFORM <Name> CHANGING a1 a2 … an.
wie Syntax 1 mit USING:Unterprogramm erhält die Speicheradressen des Aktualparameters
Änderungen des Formalparamters wirken sich sofort auf den g pAktualparameter aus (auch nach Beendigung)
Hinweis:▫ Hinweis:Diese Syntax sollte aus Übersichtlichkeitsgründen nur verwendet werden, wenn sich der Formalparameter im Unterprogramm ändert.
Sven Möhler, TU-Chemnitz 114
2.1 Unterprogramme• zu (3) Wertübergabe mit Rückgabe (call-by-value-and-result):
▫ Besonderheit: Wertrückgabe erst, wenn Unterprogramm ordnungsgemäß beendet wurdeordnungsgemäß beendet wurde
▫ Syntax:
*Definition des UPFORM <Name> CHANGING VALUE(p1) VALUE(p2) VALUE(pn).*Aufruf des UPAufruf des UPPERFORM <Name> USING/CHANGING a1 a2 … an.
im Unterprogramm wird eine Kopie des Aktualparameters angelegtdas UP arbeitet mit der Kopie und überschreibt, nach erfolgreicher Beendigung des UP den Aktualparameter mit dem FormalparameterBeendigung des UP, den Aktualparameter mit dem Formalparameter Lebensdauer der Formalparameter = Laufzeit des UP
Sven Möhler, TU-Chemnitz 115
2.1 Unterprogramme• Beispiel:
▫ verschiedene Arten der Parameterübergabe in einem Unterprogramm:start of selectionstart-of-selection.
PERFORM up1USING var1 var2 CHANGING var3 var4.
FORM up1 USING VALUE(p1) CAHNGING VALUE(p2) VALUE(p3) p4.…ENDFORM.
Arten der Wertübergabe:Parameter Art der Übergabe
Wertübergabe
üb b i ü k b
Parameter Art der Übergabe
var1 p1
Wertübergabe mit Rückgabe
Wertübergabe mit Rückgabe
var2 p2
var3 p3
Adressübergabevar4 p4
Sven Möhler, TU-Chemnitz 116
2.1 Unterprogramme• Typisierung von Formalparametern:
▫ Vorteil:Technische Eigenschaften des Parameters sind dem UP zur KompilierungszeitTechnische Eigenschaften des Parameters sind dem UP zur Kompilierungszeit bekannt, dadurch werden falsche Parameterübergaben bereits durch einen Syntaxcheck herausgefunden.
▫ Syntax:▫ Syntax:
FORM up1 USING/CHANGINGVALUE(p1)/p1 TYPE/LIKE <Datentyp/Datenobjekt>.
Um den Verallgemeinerungsgrad eines UP zu erhöhen, können die Typen unvollständig (generisch) angegeben werden
VALUE(p1)/p1 TYPE/LIKE <Datentyp/Datenobjekt>.
Typen unvollständig (generisch) angegeben werdenBeispiel: c,n,x,p ohne Längenangabe oder eine Tabelle mittels „ANY TABLE“
DATA: k TYPE string.…FORM up1 USING VALUE(p1) TYPE c CAHNGING VALUE(p2) TYPE ANY TABLE VALUE(p3) LIKE k p4 TYPE iCAHNGING VALUE(p2) TYPE ANY TABLE VALUE(p3) LIKE k p4 TYPE i.…ENDFORM.
Sven Möhler, TU-Chemnitz 117
Gliederung :: Lerninhalte• 1 Einführung
▫ 1.1 Erste Schritte im SAP System▫ 1.2 ABAP Dictionary
• 3 ABAP Objects▫ 3.1 Klassen▫ 3 2 Instanz und Statische▫ 1.3 Programmaufbau
▫ 1.4 Programmtypen ▫ 1.5 Werkzeuge
l
▫ 3.2 Instanz- und Statische Komponenten
▫ 3.3 Methoden▫ 1.6 Programm anlegen▫ 1.7 Syntax▫ 1.8 Ausgabe von Texten
D t t
▫ 3.4 Objekte anlegen▫ 3.5 Methodenaufrufe▫ 3.6 Öffentliche Attribute▫ 1.9 Datentypen
▫ 1.10 Wertzuweisung▫ 1.11 Feldsymb. & Referenzen
1 12 Kontrollstrukturen
3.6 Öffentliche Attribute▫ 3.7 Konstruktor▫ 3.8 Objekte löschen
h f hi ii▫ 1.12 Kontrollstrukturen▫ 1.13 Komplexe Strukturen
• 2 Modularisierung2 1 Unterprogramme
▫ 3.9 Mehrfachinstanziierung▫ 4 Interne Tabellen
▫ 4.1 Tabellenarten▫ 2.1 Unterprogramme▫ 2.2 Funktionsbausteine▫ 2.3 Includes▫ 2 4 Makros
4.1 Tabellenarten▫ 4.2 Tabelle anlegen▫ 4.3 Zeilenoperationen
G f b i▫ 2.4 Makros▫ 2.5 Datenbehandlung
▫ 4.4 Gruppenstufenverarbeitung▫ 4.5 Tabellenoperationen
Sven Möhler, TU-Chemnitz 118
2.2 Funktionsbausteine• Unterprogramme sind wiederverwendbare Softwarekomponenten
innerhalb einer Anwendung• für anwendungsübergreifende wiederverwendbare• für anwendungsübergreifende wiederverwendbare
Softwarekomponenten werden keine Unterprogramme sondern Funktionsbausteine genutzt
• Funkt.-Bausteine werden im FUNCTION BUILDER angelegt
Ei h ft FB‘▫ Eigenschaften von FB‘s:systemweit eindeutiger Nameeigenständiges Repository-Objekteigenständiges Repository Objektläuft innerhalb und ist Teil einer Funktionsgruppebesitzt Schnittstelle die für alle Programme zugänglich istin FB deklarierte Datenobjekte nur im FB sichtbarkann per RFC aus anderen Systemen (R/2) und sogar Fremdsystemen gerufen werdengerufen werden
Hinweis: Funktionsbausteine sind im praktischen Bereich nicht Inhalt dieses Kurses.
Sven Möhler, TU-Chemnitz 119
2.2 Funktionsbausteine• Funktionsvereinbarung:
▫ Syntax:
FUNCTION F ktiFUNCTION <Funktionsname>.(Programmbausteine)
ENDFUNCTION.
• Funktionsgruppen:k i i d i h f h b h f▫ Funktionsgruppen sind nicht ausführbare Rahmenprogramme für
Funktionsbausteine.▫ Funktionsbausteine sind Funktionsgruppen zugeordnet g pp g▫ Beim Aufruf eines Funktionsbausteins wird die gesamte Gruppe in den
Internen Modus geladen. Di B t i i G h b i Z iff f di l b l▫ Die Bausteine einer Gruppe haben gemeinsamen Zugriff auf die globalen Daten der Gruppe.
Sven Möhler, TU-Chemnitz 120
2.2 Funktionsbausteine• Schnittstellenparameter:
▫ Definition über Registerkarten im Function Builder
Name Bedeutung (aus Function BuilderSicht)
I P di f f d PImport Parameter die vom aufrufenden Programm an die Funktion übergeben werden.
Export Parameter die vom Funktionsbaustein andas aufrufende Programm übergeben werden.
Changing Gleichzeitig Import- und Exportparameter.Changing Gleichzeitig Import und Exportparameter.Funktionsbaustein kann Wert verändern und ihn dann an das zurückgeben.
Tabellen Wie Changing in Bezug auf TabellenTabellen Wie Changing in Bezug auf Tabellen. Übergabe erfolgt mittels Adressübergabe.
Ausnahmen Das aufrufende Programm fragt F k i b i üb fFunktionsbaustein über aufgetretene Fehler ab.
Sven Möhler, TU-Chemnitz 121
2.2 Funktionsbausteine• Funktionsaufruf:
▫ Syntax:
CALL FUNCTION F kti
Aufruf im Editor über Schaltfläche „MUSTER“ Call
F i NCALL FUNCTION <Funktionsname>[Parameter].
Function <Name eingeben>
▫ Beispiel:DATA: chr TYPE c value ':',
str(5) TYPE c 'AA:iBB', Alle nicht optionalen Parameter(5) ,result TEYPE i.
CALL FUNCTION 'YTU_01_BAUSTEIN1'EXPORTING
Üb b k E i
Alle nicht-optionalen Parameter müssen typgerecht versorgt werden.
var1 = chrvar2 = str
IMPORTINGx = result
* CHANGING
Über sy-subrc kann Exception-Wert abgefragt werden. Ist Exception-Part dekommentiert, wird das Programm abgebrochen und die im Function Builder* CHANGING
* TABLES* EXCEPTIONS* NOT_INCL = 1* OTHERS 2
und die im Function Builderhinterlegte Error Message ausgegeben. Im UP wird Exception über „raise <e_name>“ ausgelöst* OTHERS = 2
.WRITE:/ result.
ausgelöst.
Sven Möhler, TU-Chemnitz 122
2.2 Funktionsbausteine
Sven Möhler, TU-Chemnitz 123
Gliederung :: Lerninhalte• 1 Einführung
▫ 1.1 Erste Schritte im SAP System▫ 1.2 ABAP Dictionary
• 3 ABAP Objects▫ 3.1 Klassen▫ 3 2 Instanz und Statische▫ 1.3 Programmaufbau
▫ 1.4 Programmtypen ▫ 1.5 Werkzeuge
l
▫ 3.2 Instanz- und Statische Komponenten
▫ 3.3 Methoden▫ 1.6 Programm anlegen▫ 1.7 Syntax▫ 1.8 Ausgabe von Texten
D t t
▫ 3.4 Objekte anlegen▫ 3.5 Methodenaufrufe▫ 3.6 Öffentliche Attribute▫ 1.9 Datentypen
▫ 1.10 Wertzuweisung▫ 1.11 Feldsymb. & Referenzen
1 12 Kontrollstrukturen
3.6 Öffentliche Attribute▫ 3.7 Konstruktor▫ 3.8 Objekte löschen
h f hi ii▫ 1.12 Kontrollstrukturen▫ 1.13 Komplexe Strukturen
• 2 Modularisierung2 1 Unterprogramme
▫ 3.9 Mehrfachinstanziierung▫ 4 Interne Tabellen
▫ 4.1 Tabellenarten▫ 2.1 Unterprogramme▫ 2.2 Funktionsbausteine▫ 2.3 Includes▫ 2 4 Makros
4.1 Tabellenarten▫ 4.2 Tabelle anlegen▫ 4.3 Zeilenoperationen
G f b i▫ 2.4 Makros▫ 2.5 Datenbehandlung
▫ 4.4 Gruppenstufenverarbeitung▫ 4.5 Tabellenoperationen
Sven Möhler, TU-Chemnitz 124
2.3 Includes• Includes dienen ausschließlich der Modularisierung von Quelltext
▫ erhöhen die Lesbarkeit▫ vereinfachen Wiederverwendung von Programmkomponenten▫ vereinfachen Wiederverwendung von Programmkomponenten
• INCLUDE‘s sollten in umfangreicheren Programmen jeweils g g jangelegt werden für (Namenskonventionen in [] Klammern):▫ globale Datendeklarationen – [<prog_name>TOP]
E i i [ F ]▫ Ereignisse – [<prog_name>F01]▫ Unterprogramme – [<prog_name>E01]
• Include einbinden:▫ Syntax:
INCLUDE <Name des Includes>.
Sven Möhler, TU-Chemnitz 125
Gliederung :: Lerninhalte• 1 Einführung
▫ 1.1 Erste Schritte im SAP System▫ 1.2 ABAP Dictionary
• 3 ABAP Objects▫ 3.1 Klassen▫ 3 2 Instanz und Statische▫ 1.3 Programmaufbau
▫ 1.4 Programmtypen ▫ 1.5 Werkzeuge
l
▫ 3.2 Instanz- und Statische Komponenten
▫ 3.3 Methoden▫ 1.6 Programm anlegen▫ 1.7 Syntax▫ 1.8 Ausgabe von Texten
D t t
▫ 3.4 Objekte anlegen▫ 3.5 Methodenaufrufe▫ 3.6 Öffentliche Attribute▫ 1.9 Datentypen
▫ 1.10 Wertzuweisung▫ 1.11 Feldsymb. & Referenzen
1 12 Kontrollstrukturen
3.6 Öffentliche Attribute▫ 3.7 Konstruktor▫ 3.8 Objekte löschen
h f hi ii▫ 1.12 Kontrollstrukturen▫ 1.13 Komplexe Strukturen
• 2 Modularisierung2 1 Unterprogramme
▫ 3.9 Mehrfachinstanziierung▫ 4 Interne Tabellen
▫ 4.1 Tabellenarten▫ 2.1 Unterprogramme▫ 2.2 Funktionsbausteine▫ 2.3 Includes▫ 2 4 Makros
4.1 Tabellenarten▫ 4.2 Tabelle anlegen▫ 4.3 Zeilenoperationen
G f b i▫ 2.4 Makros▫ 2.5 Datenbehandlung
▫ 4.4 Gruppenstufenverarbeitung▫ 4.5 Tabellenoperationen
Sven Möhler, TU-Chemnitz 126
2.4 Makros• Bei längeren Berechnungen oder komplexen WRITE-Ausgaben
kann es sinnvoll sein, die gleiche Anweisungsfolge mehrmals wiederzuverwendenwiederzuverwenden.
• Die Codierung dazu kann einmalig in einem Makro erfolgen, wobei g g g ,diese nur lokal im Programmtext und dort nur für nachfolgende Zeilen zur Verfügung.
• Makro definieren:▫ Syntax:
• Bemerkungen:• vollständige Anweisungen zwischen DEFINE
und END-OF-DEFINE▫ Syntax:
DEFINE <makroname>.<anweisungen>
und END OF DEFINE• Anweisungen können bis zu 9 Platzhalter
(&1,…,&9) enthalten• Marko Def. gehören nicht zum Deklarationsteil<anweisungen>
END-OF-DEFINITION. • Def. eines Makros vor Verwendung
Sven Möhler, TU-Chemnitz 127
2.4 Makros• Makro verwenden:
▫ Syntax:
k [ ]
• Beispiel:
<makroname> [<p1> <p2>... <p9>].
DATA: x1 TYPE i VALUE 2p DATA: x1 TYPE i VALUE 2,x2 TYPE i VALUE 5,x3 TYPE i VALUE 3,erg TYPE i.
&2 kann nicht außerhalb der
DEFINE ausgabe.WRITE:/ 'Das Ergebnis von &1 &2 &3 ist ', &4.
END-OF-DEFINITION.
&2 kann nicht außerhalb der Hochkommas geschrieben werden, da „+“ hier ein Operator und kein Zeichen
ist.
N O N ON.
DEFINE rechne.erg = &1 &2 &3.
b &1 &2 &3
Ausgabe:Das Ergebnis von x1 + x2 ist 7D E b i i tausgabe &1 &2 &3 erg.
END-OF-DEFINITION.
rechne x1 + x2.
Das Ergebnis von x2 – x3 ist 2Das Ergebnis von x1 ** x3 ist 8
rechne x2 - x3.rechne x1 ** x3.
Sven Möhler, TU-Chemnitz 128
Aufgaben• 1. Schreiben Sie ein einfaches Programm zur Referenzübergabe von
Parametern an Unterprogramme (UP). Das UP soll eine Addition zweier Zahlen vornehmen und das Ergebnis nach erfolgreicherzweier Zahlen vornehmen und das Ergebnis nach erfolgreicher Addition in der UP-Variable „erg“ zurückgeben.
• 2. Erweitern Sie ihr UP aus 1. und rufen Sie daraus ein weiteres UP auf, welches für die Ausgabe des Ergebnisses zuständig ist. Übergeben Sie dabei nur eine Kopie des WertesÜbergeben Sie dabei nur eine Kopie des Wertes.
• 3 Lösen sie 1 unter Zuhilfenahme eines Makros• 3. Lösen sie 1. unter Zuhilfenahme eines Makros.
• 4. Realisieren Sie den nachfolgenden Ausdruck durch 3 4 g 3verschachtelte Makros:▫ [ x3 + ( x1 * x2 ) ]
i M k fü () i M k fü [] d i M k fü di A b▫ ein Makro für (), ein Makro für [] und ein Makro für die Ausgabe
Sven Möhler, TU-Chemnitz 129
Gliederung :: Lerninhalte• 1 Einführung
▫ 1.1 Erste Schritte im SAP System▫ 1.2 ABAP Dictionary
• 3 ABAP Objects▫ 3.1 Klassen▫ 3 2 Instanz und Statische▫ 1.3 Programmaufbau
▫ 1.4 Programmtypen ▫ 1.5 Werkzeuge
l
▫ 3.2 Instanz- und Statische Komponenten
▫ 3.3 Methoden▫ 1.6 Programm anlegen▫ 1.7 Syntax▫ 1.8 Ausgabe von Texten
D t t
▫ 3.4 Objekte anlegen▫ 3.5 Methodenaufrufe▫ 3.6 Öffentliche Attribute▫ 1.9 Datentypen
▫ 1.10 Wertzuweisung▫ 1.11 Feldsymb. & Referenzen
1 12 Kontrollstrukturen
3.6 Öffentliche Attribute▫ 3.7 Konstruktor▫ 3.8 Objekte löschen
h f hi ii▫ 1.12 Kontrollstrukturen▫ 1.13 Komplexe Strukturen
• 2 Modularisierung2 1 Unterprogramme
▫ 3.9 Mehrfachinstanziierung▫ 4 Interne Tabellen
▫ 4.1 Tabellenarten▫ 2.1 Unterprogramme▫ 2.2 Funktionsbausteine▫ 2.3 Includes▫ 2 4 Makros
4.1 Tabellenarten▫ 4.2 Tabelle anlegen▫ 4.3 Zeilenoperationen
G f b i▫ 2.4 Makros▫ 2.5 Datenbehandlung
▫ 4.4 Gruppenstufenverarbeitung▫ 4.5 Tabellenoperationen
Sven Möhler, TU-Chemnitz 130
2.5 Datenbehandlung• Datenbehandlung des prozeduralen Programmiermodells
▫ als Übergang zur Objektorientierung
▫ Deklaration von Variablen erfolgt in ABAP in 2 versch. Kontexten:(1) Dekl. innerhalb von Prozeduren (Bez. lokal)(2) Dekl. außerhalb von Prozeduren (Bez. global)[ in der objektorientierten Welt von ABAP käme jetzt noch ein dritter Kontext hinzu: die Klasse]hinzu: die Klasse]
▫ Sichtbarkeit:Si h b k i i ß h i d fi iSichtbarkeit ist von außen nach innen definiert
Anweisungen der Proz. haben Zugriff auf lokale Datenobjekte und globale Datenobjekteg jgleicher Name: globales wird durch lokales Datenobjekt überdecktDatenobjekte der Proz. sind nach außen nicht sichtbar
Sven Möhler, TU-Chemnitz 131
2.5 Datenbehandlungb d▫ Lebensdauer:Lebensdauer der lokalen Datenobjekte entspricht der Laufzeit des Programmsog a sglobale Datenobjekte des ABAP Programms sind während der gesamten Laufzeit des ABAP Programms vorhanden
L b d D t bj kt i t i li it d h di L b dLebensdauer von Datenobjekten ist implizit durch die Lebensdauer der zugehörigen Kontexte definiert
▫ Bemerkung zu ABAP-Objects:Objekte sind für die Lebensdauer der Datenobjekte zuständigd h S l d Obj kt d Kl i ti t i ti h did.h. Solange das Objekt der Klasse existiert, existieren auch die Datenobjekte.
Sven Möhler, TU-Chemnitz 132
Gliederung :: Lerninhalte• 1 Einführung
▫ 1.1 Erste Schritte im SAP System▫ 1.2 ABAP Dictionary
• 3 ABAP Objects▫ 3.1 Klassen▫ 3 2 Instanz und Statische▫ 1.3 Programmaufbau
▫ 1.4 Programmtypen ▫ 1.5 Werkzeuge
l
▫ 3.2 Instanz- und Statische Komponenten
▫ 3.3 Methoden▫ 1.6 Programm anlegen▫ 1.7 Syntax▫ 1.8 Ausgabe von Texten
D t t
▫ 3.4 Objekte anlegen▫ 3.5 Methodenaufrufe▫ 3.6 Öffentliche Attribute▫ 1.9 Datentypen
▫ 1.10 Wertzuweisung▫ 1.11 Feldsymb. & Referenzen
1 12 Kontrollstrukturen
3.6 Öffentliche Attribute▫ 3.7 Konstruktor▫ 3.8 Objekte löschen
h f hi ii▫ 1.12 Kontrollstrukturen▫ 1.13 Komplexe Strukturen
• 2 Modularisierung2 1 Unterprogramme
▫ 3.9 Mehrfachinstanziierung▫ 4 Interne Tabellen
▫ 4.1 Tabellenarten▫ 2.1 Unterprogramme▫ 2.2 Funktionsbausteine▫ 2.3 Includes▫ 2 4 Makros
4.1 Tabellenarten▫ 4.2 Tabelle anlegen▫ 4.3 Zeilenoperationen
G f b i▫ 2.4 Makros▫ 2.5 Datenbehandlung
▫ 4.4 Gruppenstufenverarbeitung▫ 4.5 Tabellenoperationen
Sven Möhler, TU-Chemnitz 133
3 ABAP Objectsbj k i i K ABAP• objektorientierte Komponente von ABAP▫ im Mittelpunkt der objektorientierten Denkweise stehen Objekte
▫ Objektorientierung in der realen Welt:Wir identifizieren Dinge der realen Welt als Objekte und weißen ihnen bestimmte Eigenschaften und Funktionen zubestimmte Eigenschaften und Funktionen zu.
Beispiel Monitor: Eigenschaften: AN/AUS F kti i h lt / h ltFunktionen: einschalten/ausschalten
in der Objektorientierten Welt sind:Eigenschaften = AttributeFunktionen = Methoden
▫ Ziel der Objektorientierung:Realweltobjekte so naturgetreu wie möglich abbilden und Programmabläufe so gestalten wie sie in der realen Welt stattfindenProgrammabläufe so gestalten, wie sie in der realen Welt stattfinden würden
Sven Möhler, TU-Chemnitz 134
3 ABAP Objects• Eine Programmiersprache nennen wir nun objektorientiert, wenn
sie folgende vier Merkmale aufweist: ▫ 1 Abstraktion▫ 1. Abstraktion
Fähigkeit Realweltobjekt naturgetreu abbilden zu könnenModellierung in Klassen und Abbildung durch Instanziierung von
Objekten▫ 2. Kapselung
Implementierungsdetails vor externen Zugriff abschotten“Implementierungsdetails vor externen Zugriff „abschottenZugriff nur über explizit definierte Schnittstelle
▫ 3. Vererbung Klassen können von Klassen abgeleitet werden
erben Attribute und Methoden und können diese erweitern▫ 4 Polymorphie▫ 4. Polymorphie
unterschiedliche Objekte werden nach außen hin durch gleiche Schnittstellen präsentiert
Hinweis: Ereignisbehandlung ist nicht Bestandteil dieses Kurses.
Sven Möhler, TU-Chemnitz 135
Gliederung :: Lerninhalte• 1 Einführung
▫ 1.1 Erste Schritte im SAP System▫ 1.2 ABAP Dictionary
• 3 ABAP Objects▫ 3.1 Klassen▫ 3 2 Instanz und Statische▫ 1.3 Programmaufbau
▫ 1.4 Programmtypen ▫ 1.5 Werkzeuge
l
▫ 3.2 Instanz- und Statische Komponenten
▫ 3.3 Methoden▫ 1.6 Programm anlegen▫ 1.7 Syntax▫ 1.8 Ausgabe von Texten
D t t
▫ 3.4 Objekte anlegen▫ 3.5 Methodenaufrufe▫ 3.6 Öffentliche Attribute▫ 1.9 Datentypen
▫ 1.10 Wertzuweisung▫ 1.11 Feldsymb. & Referenzen
1 12 Kontrollstrukturen
3.6 Öffentliche Attribute▫ 3.7 Konstruktor▫ 3.8 Objekte löschen
h f hi ii▫ 1.12 Kontrollstrukturen▫ 1.13 Komplexe Strukturen
• 2 Modularisierung2 1 Unterprogramme
▫ 3.9 Mehrfachinstanziierung▫ 4 Interne Tabellen
▫ 4.1 Tabellenarten▫ 2.1 Unterprogramme▫ 2.2 Funktionsbausteine▫ 2.3 Includes▫ 2 4 Makros
4.1 Tabellenarten▫ 4.2 Tabelle anlegen▫ 4.3 Zeilenoperationen
G f b i▫ 2.4 Makros▫ 2.5 Datenbehandlung
▫ 4.4 Gruppenstufenverarbeitung▫ 4.5 Tabellenoperationen
Sven Möhler, TU-Chemnitz 136
3.1 Klassen• Klassen dienen als Vorlage eines Objektes wie ein Datentyp
▫ auf deren Grundlage von Klassen Erzeugung verschiedene Objekte mit verschiedenen Attributausprägungen Instanziierungverschiedenen Attributausprägungen Instanziierung
• Unterscheidung zwischen lokalen und globalen Klassen▫ lokale Klassen Definition in beliebigen ABAP Programms▫ globale Klassen Definition in Class Builder (sind in jedem ABAP Programm
sichtbar)sichtbar)
Hinweis: globale Klassen sind im praktischen Bereich nicht Inhalt dieses Kurses.
Sven Möhler, TU-Chemnitz 137
3.1 Klassen• Klasse besteht aus Definitions- und Implementationsteil
▫ Definitionsteil: enthält die Definition der Attribute und Methoden und ihre Einordnung in die Bereiche:ihre Einordnung in die Bereiche:
PUBLIC SECTION ▫ öffentlicher Bereich, bildet Schnittstelle nach außenPROTECTED SECTION▫ Bereich auf den Unterklassen (und Methoden der Klasse selbst)
zugreifen könnenzugreifen könnenPRIVATE SECTION▫ privater Bereich, kann nur von Methoden der Klasse selbst
d dverwendet werdenfür Methoden werden im Definitionsteil nur die Namen und die Schnittstellenparameter festgelegtp g g
▫ Implementationsteil: enthält Quellcode (Funktionalität) der im D fi iti t il b t M th dDefinitionsteil benannten Methoden
Sven Möhler, TU-Chemnitz 138
3.1 Klassen :: Übersicht DefinitionsteilCLASS <Klassenname> DEFINITION.
PUBLIC SECTION.METHODS:
h d [ O G ]<Methodenname1> [IMPORTING <Importparameter>][EXPORTING <Exportparameter>][CHANGING <Changingparameter>][RETURNING VALUE(<Ret.parameter>)][EXCEPTIONS <E ti >][EXCEPTIONS <Exceptions>],
<Methodenname2> … .
PROTECTED SECTION.METHODS:
Syntax:Import-/Changing-Parameter:{VALUE(<p>)|<p>} {TYPE <TYPE>| LIKE <dObj>}METHODS:
<Methodenname5> … .DATA: <Name3> TYPE <TYPE>.
PRIVATE SECTION
{VALUE(<p>)|<p>} {TYPE <TYPE>| LIKE <dObj>} [OPTIONAL | DEFAULT <val>]Export-Parameter:{VALUE(<p>)|<p>} {TYPE <TYPE>| LIKE <dObj>}
PRIVATE SECTION.METHODS:
<Methodenname3> [IMPORTING <Importparameter>][EXPORTING <Exportparameter>][CHANGING <Changingparameter>][C G G C a g gpa a ete ][RETURNING VALUE(<Ret.parameter>)][EXCEPTIONS <Exceptions>],
<Methodenname4> … .DATA: <Name1> TYPE <TYPE>,
ENDCLASS.
<Name2> TYPE <TYPE>.
Sven Möhler, TU-Chemnitz 139
3.1 Klassen :: Übersicht Implementationsteil
CLASS <Klassenname> IMPLEMENTATION.
METHOD <Methodenname1>.<Anweisungen.>
ENDMETHOD.
METHOD M th dMETHOD <Methodenname2>.<Anweisungen.>
ENDMETHOD.
METHOD <Methodenname3>METHOD <Methodenname3>.<Anweisungen.>
ENDMETHOD.
METHOD <Methodenname4>.O et ode a e4 .<Anweisungen.>
ENDMETHOD.
METHOD <Methodenname5>.
ENDCLASS.
<Anweisungen.>ENDMETHOD.
Sven Möhler, TU-Chemnitz 140
3.1 Klassen :: Beispiel
CLASS Kunde DEFINITION.PUBLIC SECTION.
METHODS:METHODS:set_Kunde IMPORTING Nr TYPE n
Name TYPE cAdresse TYPE cHN TYPE
CLASS Kunde IMPLEMENTATION.METHOD set_Kunde.
KNr = Nr. KName = NameHNr TYPE n
PLZ TYPE nOrt TYPE c,
write_Kunde.
KName Name.KAdresse = Adresse.KHNr = HNr.KPLZ = PLZ.KO OPRIVATE SECTION.
DATA: KNr(5) TYPE n, KName(15) TYPE c, KAdresse(20) TYPE c
KOrt = Ort.ENDMETHOD.METHOD write_Kunde.
WRITE:/ KNr,' ',KName,' ',KAdresse,' ',KAdresse(20) TYPE c,KHNr(3) TYPE n,KPLZ(5) TYPE n,KOrt(15) TYPE c.
/ , , , , , ,KHNr,' ',KPLZ,' ',KOrt.
ENDMETHOD.ENDCLASS.
ENDCLASS.!!Klassendeklaration gehört in den globalen Deklarationsbereich!!
Sven Möhler, TU-Chemnitz 141
Gliederung :: Lerninhalte• 1 Einführung
▫ 1.1 Erste Schritte im SAP System▫ 1.2 ABAP Dictionary
• 3 ABAP Objects▫ 3.1 Klassen▫ 3 2 Instanz und Statische▫ 1.3 Programmaufbau
▫ 1.4 Programmtypen ▫ 1.5 Werkzeuge
l
▫ 3.2 Instanz- und Statische Komponenten
▫ 3.3 Methoden▫ 1.6 Programm anlegen▫ 1.7 Syntax▫ 1.8 Ausgabe von Texten
D t t
▫ 3.4 Objekte anlegen▫ 3.5 Methodenaufrufe▫ 3.6 Öffentliche Attribute▫ 1.9 Datentypen
▫ 1.10 Wertzuweisung▫ 1.11 Feldsymb. & Referenzen
1 12 Kontrollstrukturen
3.6 Öffentliche Attribute▫ 3.7 Konstruktor▫ 3.8 Objekte löschen
h f hi ii▫ 1.12 Kontrollstrukturen▫ 1.13 Komplexe Strukturen
• 2 Modularisierung2 1 Unterprogramme
▫ 3.9 Mehrfachinstanziierung▫ 4 Interne Tabellen
▫ 4.1 Tabellenarten▫ 2.1 Unterprogramme▫ 2.2 Funktionsbausteine▫ 2.3 Includes▫ 2 4 Makros
4.1 Tabellenarten▫ 4.2 Tabelle anlegen▫ 4.3 Zeilenoperationen
G f b i▫ 2.4 Makros▫ 2.5 Datenbehandlung
▫ 4.4 Gruppenstufenverarbeitung▫ 4.5 Tabellenoperationen
Sven Möhler, TU-Chemnitz 142
3.2 Instanz- und Statische Komponenten• Instanzkomponenten:
▫ Instanziieren heißt, ein Objekt einer Klasse zu erzeugen▫ Objekt enthält die Methoden und Attribute der Klasse▫ Objekt enthält die Methoden und Attribute der Klasse▫ Methoden und Attribute die beim Instanziieren den Objekten
übergeben werden, heißen Instanzattribute/-methoden
• Statische Komponenten:▫ statische Methoden und Attribute werden nicht an Objekte übergeben▫ statische Methoden und Attribute werden nicht an Objekte übergeben▫ verbleiben in der Klasse▫ werden als Klassenmethoden/-attribute bezeichnet/
Beispiel: zählen, wie oft eine Klasse angelegt wurde
Sven Möhler, TU-Chemnitz 143
3.2 Instanz- und Statische KomponentenCLASS <Klassenname> DEFINITION.
PUBLIC SECTION.METHODS:
h d [ O G ]<Methodenname1> [IMPORTING <Importparameter>][EXPORTING <Exportparameter>][CHANGING <Changingparameter>][RETURNING VALUE(<Ret.parameter>)][EXCEPTIONS <E ti >][EXCEPTIONS <Exceptions>].
CLASS-METHODS:<Methodenname5> [IMPORTING <Importparameter>]
[EXPORTING <Exportparameter>][CHANGING <Changingparameter>][CHANGING <Changingparameter>][RETURNING VALUE(<Ret.parameter>)][EXCEPTIONS <Exceptions>].
PRIVATE SECTIONPRIVATE SECTION.METHODS:
<Methodenname3> [IMPORTING <Importparameter>][EXPORTING <Exportparameter>][CHANGING <Changingparameter>][CHANGING <Changingparameter>][RETURNING VALUE(<Ret.parameter>)][EXCEPTIONS <Exceptions>].
DATA: <Name1> TYPE <TYPE>,<Name2> TYPE <TYPE>.
ENDCLASS.
CLASS-DATA: <Name3> TYPE <TYPE>.
Sven Möhler, TU-Chemnitz 144
Gliederung :: Lerninhalte• 1 Einführung
▫ 1.1 Erste Schritte im SAP System▫ 1.2 ABAP Dictionary
• 3 ABAP Objects▫ 3.1 Klassen▫ 3 2 Instanz und Statische▫ 1.3 Programmaufbau
▫ 1.4 Programmtypen ▫ 1.5 Werkzeuge
l
▫ 3.2 Instanz- und Statische Komponenten
▫ 3.3 Methoden▫ 1.6 Programm anlegen▫ 1.7 Syntax▫ 1.8 Ausgabe von Texten
D t t
▫ 3.4 Objekte anlegen▫ 3.5 Methodenaufrufe▫ 3.6 Öffentliche Attribute▫ 1.9 Datentypen
▫ 1.10 Wertzuweisung▫ 1.11 Feldsymb. & Referenzen
1 12 Kontrollstrukturen
3.6 Öffentliche Attribute▫ 3.7 Konstruktor▫ 3.8 Objekte löschen
h f hi ii▫ 1.12 Kontrollstrukturen▫ 1.13 Komplexe Strukturen
• 2 Modularisierung2 1 Unterprogramme
▫ 3.9 Mehrfachinstanziierung▫ 4 Interne Tabellen
▫ 4.1 Tabellenarten▫ 2.1 Unterprogramme▫ 2.2 Funktionsbausteine▫ 2.3 Includes▫ 2 4 Makros
4.1 Tabellenarten▫ 4.2 Tabelle anlegen▫ 4.3 Zeilenoperationen
G f b i▫ 2.4 Makros▫ 2.5 Datenbehandlung
▫ 4.4 Gruppenstufenverarbeitung▫ 4.5 Tabellenoperationen
Sven Möhler, TU-Chemnitz 145
3.3 MethodenDi f l d P kö i d S h i ll d M h d• Die folgenden Parameter können in der Schnittstelle der Methoden verwendet werden:▫ Importing-Parameter:p g
festlegen ein oder mehrerer Eingabeparameter (werden von der Methode importiert, z.B. von einem ABAP Programm)
▫ Exporting-Parameter:Exporting Parameter:festlegen ein oder mehrerer Ausgabeparameter (werden von der Methode exportiert, z.B. in ein ABAP Programm)
▫ Changing Parameter:▫ Changing-Parameter:festlegen ein oder mehrerer Ein-/Ausgabeparameter
▫ Returning-Parameter (Funktionale Methoden):pro Methode maximal ein Returning-Parameterübergibt Werte, wie Exporting-Parameter, an z.B. das ABAP ProgrammMethoden mit Returning Parameter dürfen keinen Exporting- oderChanging-Parameter habenmuss als VALUE Übergabe definiert seinmuss als VALUE Übergabe definiert sein
Sven Möhler, TU-Chemnitz 146
Gliederung :: Lerninhalte• 1 Einführung
▫ 1.1 Erste Schritte im SAP System▫ 1.2 ABAP Dictionary
• 3 ABAP Objects▫ 3.1 Klassen▫ 3 2 Instanz und Statische▫ 1.3 Programmaufbau
▫ 1.4 Programmtypen ▫ 1.5 Werkzeuge
l
▫ 3.2 Instanz- und Statische Komponenten
▫ 3.3 Methoden▫ 1.6 Programm anlegen▫ 1.7 Syntax▫ 1.8 Ausgabe von Texten
D t t
▫ 3.4 Objekte anlegen▫ 3.5 Methodenaufrufe▫ 3.6 Öffentliche Attribute▫ 1.9 Datentypen
▫ 1.10 Wertzuweisung▫ 1.11 Feldsymb. & Referenzen
1 12 Kontrollstrukturen
3.6 Öffentliche Attribute▫ 3.7 Konstruktor▫ 3.8 Objekte löschen
h f hi ii▫ 1.12 Kontrollstrukturen▫ 1.13 Komplexe Strukturen
• 2 Modularisierung2 1 Unterprogramme
▫ 3.9 Mehrfachinstanziierung▫ 4 Interne Tabellen
▫ 4.1 Tabellenarten▫ 2.1 Unterprogramme▫ 2.2 Funktionsbausteine▫ 2.3 Includes▫ 2 4 Makros
4.1 Tabellenarten▫ 4.2 Tabelle anlegen▫ 4.3 Zeilenoperationen
G f b i▫ 2.4 Makros▫ 2.5 Datenbehandlung
▫ 4.4 Gruppenstufenverarbeitung▫ 4.5 Tabellenoperationen
Sven Möhler, TU-Chemnitz 147
3.4 Objekte anlegen• Zum Anlegen eines Objektes wird eine Variable benötigt – die
sogenannte Referenzvariable• Referenzvariable zeigt auf Speicherbereich des Objektes• Referenzvariable zeigt auf Speicherbereich des Objektes• Referenzvariable wird auch als Zeiger bezeichnet
▫ Anlegen einer Referenzvariable:gSyntax:
DATA <Referenzvariable> TYPE REF TO <Klasse>.
Beispiel: CLASS Kunde DEFINITION...ENDCLASS.CLASS Kunde IMPLEMENTATION...ENDCLASSENDCLASS.
*Anlegen eines Objektes der Klasse KundeDATA: r_Kunde TYPE REF TO Kunde.
bj k*Objekt erzeugenCREATE OBJECT r_Kunde.
Sven Möhler, TU-Chemnitz 148
Gliederung :: Lerninhalte• 1 Einführung
▫ 1.1 Erste Schritte im SAP System▫ 1.2 ABAP Dictionary
• 3 ABAP Objects▫ 3.1 Klassen▫ 3 2 Instanz und Statische▫ 1.3 Programmaufbau
▫ 1.4 Programmtypen ▫ 1.5 Werkzeuge
l
▫ 3.2 Instanz- und Statische Komponenten
▫ 3.3 Methoden▫ 1.6 Programm anlegen▫ 1.7 Syntax▫ 1.8 Ausgabe von Texten
D t t
▫ 3.4 Objekte anlegen▫ 3.5 Methodenaufrufe▫ 3.6 Öffentliche Attribute▫ 1.9 Datentypen
▫ 1.10 Wertzuweisung▫ 1.11 Feldsymb. & Referenzen
1 12 Kontrollstrukturen
3.6 Öffentliche Attribute▫ 3.7 Konstruktor▫ 3.8 Objekte löschen
h f hi ii▫ 1.12 Kontrollstrukturen▫ 1.13 Komplexe Strukturen
• 2 Modularisierung2 1 Unterprogramme
▫ 3.9 Mehrfachinstanziierung▫ 4 Interne Tabellen
▫ 4.1 Tabellenarten▫ 2.1 Unterprogramme▫ 2.2 Funktionsbausteine▫ 2.3 Includes▫ 2 4 Makros
4.1 Tabellenarten▫ 4.2 Tabelle anlegen▫ 4.3 Zeilenoperationen
G f b i▫ 2.4 Makros▫ 2.5 Datenbehandlung
▫ 4.4 Gruppenstufenverarbeitung▫ 4.5 Tabellenoperationen
Sven Möhler, TU-Chemnitz 149
3.5 Methodenaufrufe• Aufruf Instanzmethode:
▫ Aufruf mittels Referenzvariable und dem Operator „->“▫ Syntax (ohne Returning):▫ Syntax (ohne Returning):
CALL METHOD <Referenzvariable>-><Methode>[EXPORTING <Importparameter 1> = <Wert 1>[ O G p p
<Importparameter 2> = <Wert 2><Importparameter n> = <Wert n>]
[IMPORTING <Exportparameter 1> = <Wert 1>[IMPORTING <Exportparameter 1> = <Wert 1><Exportparameter 2> = <Wert 2><Exportparameter n> = <Wert n>]
[CHANGING <Ch i t 1> <W t 1>[CHANGING <Changingparameter 1> = <Wert 1><Changingparameter 2> = <Wert 2><Changingparameter n> = <Wert n>]
[EXCEPTIONS <Exception1> = <Wert 1><Exception 2> = <Wert 2><Exception n> = <Wert n>pOTHERS = <Wert y>].
Sven Möhler, TU-Chemnitz 150
3.5 Methodenaufrufe• Beispiel Aufruf Instanzmethode:
CLASS Kunde DEFINITION.…ENDCLASS.
CLASS Kunde IMPLEMENTATION.…ENDCLASS.
DATA: r Kunde TYPE REF TO KundeDATA: r_Kunde TYPE REF TO Kunde.
start-of-selection.
CREATE OBJECT r_Kunde.
CALL METHOD r_Kunde->set_Kunde EXPORTING Nr = '015'Name = 'Heinz'Name = HeinzAdresse = 'Am Wald'HNr = '5'PLZ = '29811'Ort = 'Nürnberg'.
Sven Möhler, TU-Chemnitz 151
3.5 Methodenaufrufe• Aufruf Instanzmethode (Funktionale Methode):
▫ Exporting- und Changing-Parameter sind nicht erlaubt▫ Abruf“ des Returning-Parameter mit dem Schlüsselwort Receiving“▫ „Abruf des Returning-Parameter mit dem Schlüsselwort „Receiving▫ Syntax:
CALL METHOD <Referenzvariable>-><Methode>CALL METHOD <Referenzvariable> ><Methode>[EXPORTING <Importparameter 1> = <Wert 1>
<Importparameter 2> = <Wert 2><Importparameter n> = <Wert n>]<Importparameter n> = <Wert n>]
[RECEIVING <Returningparameter> = <Wert 1>][EXCEPTIONS <Exception1> = <Wert 1>
E ti W t<Exception 2> = <Wert 2><Exception n> = <Wert n>OTHERS = <Wert y>].
Sven Möhler, TU-Chemnitz 152
3.5 Methodenaufrufe• Beispiel Aufruf Funktionale Methode:
CLASS Kunde DEFINITION.PUBLIC SECTION.
METHODS:set_Kunde IMPORTING
...RETURNING VALUE(Ausgabe) TYPE string.
PRIVATE SECTION
DATA: r_Kunde TYPE REF TO Kunde,ausgabe TYPE string.
t t f l tiPRIVATE SECTION.…
ENDCLASS.
CLASS Kunde IMPLEMENTATION
start-of-selection.
CREATE OBJECT r_Kunde.
CALL METHOD r Kunde >set KundeCLASS Kunde IMPLEMENTATION.METHOD set_Kunde.
KNr = Nr.KName = Name.KAdresse = Adresse
CALL METHOD r_Kunde->set_KundeEXPORTING Nr = '015'
Name = 'Heinz‚Adresse = 'Am Wald‚HNr = '5'KAdresse = Adresse.
KHNr = HNr.KPLZ = PLZ.KOrt = Ort.CONCATENATE KNr KName KAdresse KHNr KPLZ KOrt
HNr = 5PLZ = '29811'Ort = 'Nürnberg'
RECEIVING Ausgabe = ausgabe.WRITE:/ ausgabe.CONCATENATE KNr KName KAdresse KHNr KPLZ KOrt
INTO ausgabe SEPARATED BY ' '.ENDMETHOD.
ENDCLASS.
WRITE:/ ausgabe.
Sven Möhler, TU-Chemnitz 153
3.5 Methodenaufrufe• Aufruf Klassenmethode:
▫ Aufruf der Klassenmethode über den Klassennamen und den Operator =>“Operator „ >
▫ Syntax:CALL METHOD <Referenzvariable>=><Methode>
[EXPORTING <Importparameter 1> = <Wert 1><Importparameter 2> = <Wert 2><Importparameter n> = <Wert n>]po pa a e e e ]
[IMPORTING <Exportparameter 1> = <Wert 1><Exportparameter 2> = <Wert 2><Exportparameter n> = <Wert n>]<Exportparameter n> = <Wert n>]
[CHANGING <Changingparameter 1> = <Wert 1><Changingparameter 2> = <Wert 2><Ch i t > <W t >]<Changingparameter n> = <Wert n>]
[EXCEPTIONS <Exception1> = <Wert 1><Exception 2> = <Wert 2><Exception n> = <Wert n>OTHERS = <Wert y>].
Sven Möhler, TU-Chemnitz 154
3.5 Methodenaufrufe• Beispiel Aufruf Klassenmethode:
CLASS Kunde DEFINITION.PUBLIC SECTION
DATA: r_Kunde TYPE REF TO Kunde,r Kunde2 LIKE r KundePUBLIC SECTION.
METHODS:…CLASS-METHODS:
CountCallOf set kunde
r_Kunde2 LIKE r_Kunde, anzahl TYPE i.
start-of-selection._ _
RETURNING VALUE(anzahl) TYPE i.PRIVATE SECTION.
…CLASS-DATA:
CALL METHOD Kunde=>CountCallOf_set_kundeRECEIVING anzahl = anzahl.
WRITE / anzahl. "Ausgabe 0
count TYPE i VALUE 0.ENDCLASS.
CLASS Kunde IMPLEMENTATION.d
CREATE OBJECT: r_Kunde, r_Kunde2.
CALL METHOD r_Kunde->set_KundeEXPORTING … .
d dMETHOD set_Kunde.…count = count + 1.
ENDMETHOD.
CALL METHOD r_Kunde2->set_KundeEXPORTING … .
CALL METHOD Kunde=>CountCallOf_set_kundeRECEIVING hl hl…
METHOD CountCallOf_set_kunde.anzahl = count.
ENDMETHOD.ENDCLASS
RECEIVING anzahl = anzahl.
WRITE / anzahl. "Ausgabe 2
ENDCLASS.
Sven Möhler, TU-Chemnitz 155
Gliederung :: Lerninhalte• 1 Einführung
▫ 1.1 Erste Schritte im SAP System▫ 1.2 ABAP Dictionary
• 3 ABAP Objects▫ 3.1 Klassen▫ 3 2 Instanz und Statische▫ 1.3 Programmaufbau
▫ 1.4 Programmtypen ▫ 1.5 Werkzeuge
l
▫ 3.2 Instanz- und Statische Komponenten
▫ 3.3 Methoden▫ 1.6 Programm anlegen▫ 1.7 Syntax▫ 1.8 Ausgabe von Texten
D t t
▫ 3.4 Objekte anlegen▫ 3.5 Methodenaufrufe▫ 3.6 Öffentliche Attribute▫ 1.9 Datentypen
▫ 1.10 Wertzuweisung▫ 1.11 Feldsymb. & Referenzen
1 12 Kontrollstrukturen
3.6 Öffentliche Attribute▫ 3.7 Konstruktor▫ 3.8 Objekte löschen
h f hi ii▫ 1.12 Kontrollstrukturen▫ 1.13 Komplexe Strukturen
• 2 Modularisierung2 1 Unterprogramme
▫ 3.9 Mehrfachinstanziierung▫ 4 Interne Tabellen
▫ 4.1 Tabellenarten▫ 2.1 Unterprogramme▫ 2.2 Funktionsbausteine▫ 2.3 Includes▫ 2 4 Makros
4.1 Tabellenarten▫ 4.2 Tabelle anlegen▫ 4.3 Zeilenoperationen
G f b i▫ 2.4 Makros▫ 2.5 Datenbehandlung
▫ 4.4 Gruppenstufenverarbeitung▫ 4.5 Tabellenoperationen
Sven Möhler, TU-Chemnitz 156
3.6 Öffentliche Attribute• Zugriff aus dem ABAP Programm oder anderen Klassen erfolgt
mittels der folgenden Syntax:
▫ Zugriff auf Instanzattribut:
<Refernzvariable>-> <Instanzattribut>.
▫ Zugriff auf Klassenattribut:
<Refernzvariable> > <Instanzattribut>.
<Klassenname>=><Klassenattribut>.
Sven Möhler, TU-Chemnitz 157
Gliederung :: Lerninhalte• 1 Einführung
▫ 1.1 Erste Schritte im SAP System▫ 1.2 ABAP Dictionary
• 3 ABAP Objects▫ 3.1 Klassen▫ 3 2 Instanz und Statische▫ 1.3 Programmaufbau
▫ 1.4 Programmtypen ▫ 1.5 Werkzeuge
l
▫ 3.2 Instanz- und Statische Komponenten
▫ 3.3 Methoden▫ 1.6 Programm anlegen▫ 1.7 Syntax▫ 1.8 Ausgabe von Texten
D t t
▫ 3.4 Objekte anlegen▫ 3.5 Methodenaufrufe▫ 3.6 Öffentliche Attribute▫ 1.9 Datentypen
▫ 1.10 Wertzuweisung▫ 1.11 Feldsymb. & Referenzen
1 12 Kontrollstrukturen
3.6 Öffentliche Attribute▫ 3.7 Konstruktor▫ 3.8 Objekte löschen
h f hi ii▫ 1.12 Kontrollstrukturen▫ 1.13 Komplexe Strukturen
• 2 Modularisierung2 1 Unterprogramme
▫ 3.9 Mehrfachinstanziierung▫ 4 Interne Tabellen
▫ 4.1 Tabellenarten▫ 2.1 Unterprogramme▫ 2.2 Funktionsbausteine▫ 2.3 Includes▫ 2 4 Makros
4.1 Tabellenarten▫ 4.2 Tabelle anlegen▫ 4.3 Zeilenoperationen
G f b i▫ 2.4 Makros▫ 2.5 Datenbehandlung
▫ 4.4 Gruppenstufenverarbeitung▫ 4.5 Tabellenoperationen
Sven Möhler, TU-Chemnitz 158
3.7 Konstruktor• spezielle Methode, die automatisch von der Laufzeitumgebung
ausgeführt wird• wird eingesetzt um ein Objekt dynamisch in einen definierten• wird eingesetzt, um ein Objekt dynamisch in einen definierten
Anfangszustand zu versetzen• kann nicht mittels CALL METHOD aufgerufen werdeng• Unterscheidung von Instanz- und Statischen Konstruktoren:
▫ Instanzkonstruktor:wird für jede Instanz einer Klasse genau einmal nach der vollständigen Erzeugung mittels CREATE OBJECT aufgerufenvollständigen Erzeugung mittels CREATE OBJECT aufgerufenDefinition in PUBLIC SECTIONvordefinierter Name: „CONSTRUCTOR“kann nur Import-Parameter und/oder Exceptions enthaltenImplementation wie gewohnt
Sven Möhler, TU-Chemnitz 159
3.7 Konstruktor• Beispiel Instanzkonstruktor:
CLASS Kunde DEFINITION.PUBLIC SECTION.
DATA: r_Kunde TYPE REF TO Kunde,r Kunde2 LIKE r Kunde,PUBLIC SECTION.
METHODS:constructor,…
CLASS-METHODS:
_ _ ,anzahl TYPE i.
start-of-selection.
count_creation RETURNING VALUE(anzahl) TYPE i.PRIVATE SECTION.
…CLASS-DATA:
CALL METHOD Kunde=>count_creationRECEIVING anzahl = anzahl.
WRITE / anzahl. "Ausgabe 0
d dcount TYPE i VALUE 0.ENDCLASS.
CLASS Kunde IMPLEMENTATION.METHOD
CREATE OBJECT: r_Kunde, r_Kunde2.
CALL METHOD Kunde=>count_creationRECEIVING anzahl = anzahl.
WRITE / hl "A bMETHOD constructor.count = count + 1.
ENDMETHOD.…METHOD count creation
WRITE / anzahl. "Ausgabe 2
METHOD count_creation.anzahl = count.
ENDMETHOD.ENDCLASS.
Sven Möhler, TU-Chemnitz 160
3.7 KonstruktorStatischer Konstruktor:
wird in einem Programm für jede Klasse genau einmal vor dem ersten Zugriff auf die Klasse aufgerufenersten Zugriff auf die Klasse aufgerufenDefinition in PUBLIC SECTIONvordefinierter Name: „CLASS-CONSTRUCTOR“Implementation wie gewohntHinweis: Statische Konstruktoren sind im praktischen Bereich nicht Inhalt dieses Kurses
Dekonstruktor:
nicht Inhalt dieses Kurses.
ABAP Objects stellt keine derartige Methode aus Performancegründen bereit.
Sven Möhler, TU-Chemnitz 161
Gliederung :: Lerninhalte• 1 Einführung
▫ 1.1 Erste Schritte im SAP System▫ 1.2 ABAP Dictionary
• 3 ABAP Objects▫ 3.1 Klassen▫ 3 2 Instanz und Statische▫ 1.3 Programmaufbau
▫ 1.4 Programmtypen ▫ 1.5 Werkzeuge
l
▫ 3.2 Instanz- und Statische Komponenten
▫ 3.3 Methoden▫ 1.6 Programm anlegen▫ 1.7 Syntax▫ 1.8 Ausgabe von Texten
D t t
▫ 3.4 Objekte anlegen▫ 3.5 Methodenaufrufe▫ 3.6 Öffentliche Attribute▫ 1.9 Datentypen
▫ 1.10 Wertzuweisung▫ 1.11 Feldsymb. & Referenzen
1 12 Kontrollstrukturen
3.6 Öffentliche Attribute▫ 3.7 Konstruktor▫ 3.8 Objekte löschen
h f hi ii▫ 1.12 Kontrollstrukturen▫ 1.13 Komplexe Strukturen
• 2 Modularisierung2 1 Unterprogramme
▫ 3.9 Mehrfachinstanziierung▫ 4 Interne Tabellen
▫ 4.1 Tabellenarten▫ 2.1 Unterprogramme▫ 2.2 Funktionsbausteine▫ 2.3 Includes▫ 2 4 Makros
4.1 Tabellenarten▫ 4.2 Tabelle anlegen▫ 4.3 Zeilenoperationen
G f b i▫ 2.4 Makros▫ 2.5 Datenbehandlung
▫ 4.4 Gruppenstufenverarbeitung▫ 4.5 Tabellenoperationen
Sven Möhler, TU-Chemnitz 162
3.8 Objekte löschen• Objekte belegen Platz im Hauptspeicher• sie sind zu löschen, wenn sie nicht mehr benötigt werden
Garbage Collector löscht das Objekt wenn keine Referenz mehr auf• Garbage Collector löscht das Objekt wenn keine Referenz mehr auf das Objekt zeigt
• manuell können Objekte mittels der CLEAR Anweisung gelöschtmanuell können Objekte mittels der CLEAR Anweisung gelöscht werden▫ Beispiel:
…DATA: obj1 TYP REF TO Kunde,
obj2 LIKE obj1.
Zuweisungen bewirkt, dass obj1 ebenfalls auf obj2 zeigt. Obj1
wird automatisch durch Garbage
START-OF-SELECTION.
CEATE OBJECT: obj1,
Collector gelöscht.
obj2. obj1 = obj2. CLEAR obj2.
Sven Möhler, TU-Chemnitz 163
Gliederung :: Lerninhalte• 1 Einführung
▫ 1.1 Erste Schritte im SAP System▫ 1.2 ABAP Dictionary
• 3 ABAP Objects▫ 3.1 Klassen▫ 3 2 Instanz und Statische▫ 1.3 Programmaufbau
▫ 1.4 Programmtypen ▫ 1.5 Werkzeuge
l
▫ 3.2 Instanz- und Statische Komponenten
▫ 3.3 Methoden▫ 1.6 Programm anlegen▫ 1.7 Syntax▫ 1.8 Ausgabe von Texten
D t t
▫ 3.4 Objekte anlegen▫ 3.5 Methodenaufrufe▫ 3.6 Öffentliche Attribute▫ 1.9 Datentypen
▫ 1.10 Wertzuweisung▫ 1.11 Feldsymb. & Referenzen
1 12 Kontrollstrukturen
3.6 Öffentliche Attribute▫ 3.7 Konstruktor▫ 3.8 Objekte löschen
h f hi ii▫ 1.12 Kontrollstrukturen▫ 1.13 Komplexe Strukturen
• 2 Modularisierung2 1 Unterprogramme
▫ 3.9 Mehrfachinstanziierung▫ 4 Interne Tabellen
▫ 4.1 Tabellenarten▫ 2.1 Unterprogramme▫ 2.2 Funktionsbausteine▫ 2.3 Includes▫ 2 4 Makros
4.1 Tabellenarten▫ 4.2 Tabelle anlegen▫ 4.3 Zeilenoperationen
G f b i▫ 2.4 Makros▫ 2.5 Datenbehandlung
▫ 4.4 Gruppenstufenverarbeitung▫ 4.5 Tabellenoperationen
Sven Möhler, TU-Chemnitz 164
3.9 Mehrfachinstanziierung• Referenzen können auch in Internen Tabellen abgelegt werden• Methoden und Attribute der Objekte können mittels LOOP Schleife
angesprochen werdenangesprochen werden▫ sinnvoll für Listenausgabe
▫ Syntax :: zum Anlegen einer Internen Tabelle:
DATA <Name_Int.Tabelle> TYPE TABLE REF TO <Klasse>.
▫ Syntax :: Interne Tabelle füllen (Objekt anhängen):
APPEND <Referenzvariable> TO <Name Int Tabelle>
▫ Syntax :: LOOP Schleife:
APPEND <Referenzvariable> TO <Name_Int.Tabelle> .
LOOP AT <Name_Int.Tabelle> INTO <Referenzvariable>.<Anweisungen.>
ENDLOOP.ENDLOOP.
Sven Möhler, TU-Chemnitz 165
3.9 Mehrfachinstanziierung• Beispiel:
CLASS Kunde DEFINITION.PUBLIC SECTION.
DATA: r_Kunde TYPE REF TO Kunde,r_TKunde TYPE
METHODS:set_Kunde IMPORTING Nr TYPE i
…,write_Kunde.
PRIVATE SECTION
TABLE OF REF TO Kunde.
start-of-selection.
DO TIMESPRIVATE SECTION.…
ENDCLASS.
CLASS Kunde IMPLEMENTATION
DO 10 TIMES.CREATE OBJECT r_Kunde.CALL METHOD r_Kunde->set_Kunde
EXPORTING Nr = sy-indexName 'Heinz'CLASS Kunde IMPLEMENTATION.
METHOD set_Kunde.…ENDMETHOD.METHOD write Kunde
Name = 'Heinz'Adresse = 'Am Wald'HNr = '5'PLZ = '29811'Ort = 'Nürnberg'METHOD write_Kunde.
…ENDMETHOD.
ENDCLASS.
Ort = Nürnberg .APPEND r_Kunde TO r_TKunde.
ENDDO.
LOOP AT r TKunde INTO r Kunde.LOOP AT r_TKunde INTO r_Kunde.CALL METHOD r_Kunde->write_Kunde.
ENDLOOP.
Sven Möhler, TU-Chemnitz 166
3 ABAP Objects :: ein weiteres BeispielCLASS Kunde DEFINITION.PUBLIC SECTION.METHODS:constructor IMPORTING
CLASS Kunde IMPLEMENTATION.METHOD constructor. DATA: r_Kunde TYPE REF TO
KundeName TYPE c OPTIONALAdresse TYPE c OPTIONALHNr TYPE n OPTIONALPLZ TYPE n OPTIONALOrt TYPE c OPTIONAL
count = count + 1.KNr = count.KName = Name.KAdresse = Adresse.KHNr = HNr.
Kunde,r_TKunde TYPE TABLE
OF REF TO Kunde.
start-of-selection.Ort TYPE c OPTIONAL, set_Kunde IMPORTING
Name TYPE cAdresse TYPE cHNr TYPE n
KPLZ = PLZ.KOrt = Ort.
ENDMETHOD.METHOD set_Kunde.KN N
DO 5 TIMES.CREATE OBJECT r_Kunde.APPEND r_Kunde TO r_TKunde. CREATE OBJECT r KundePLZ TYPE n
Ort TYPE c, write_Kunde.
CLASS-METHODS:count creation RETURNING
KName = Name.KAdresse = Adresse.KHNr = HNr.KPLZ = PLZ.KOrt = Ort.
CREATE OBJECT r_KundeEXPORTING
Name = 'Heinz'Adresse = 'Am Wald'HNr = '5'count_creation RETURNING
VALUE(anzahl) TYPE i. PRIVATE SECTION.DATA: KNr(5) TYPE n,
KName(15) TYPE c,
ENDMETHOD.METHOD write_Kunde.WRITE:/ KNr,' ',KName,' ',
KAdresse,' ',KHNr,' ' KPLZ ' ' KOrt
PLZ = '29811'Ort = 'Nürnberg'.
APPEND r_Kunde TO r_TKunde.ENDDO.
KAdresse(20) TYPE c,KHNr(3) TYPE n,KPLZ(5) TYPE n,KOrt(15) TYPE c.
CLASS-DATA:
,KPLZ, ,KOrt.ENDMETHOD.METHOD count_creation.anzahl = count.
ENDMETHOD.
LOOP AT r_TKunde INTO r_Kunde.CALL METHOD
r_Kunde->write_Kunde.ENDLOOP.CLASS DATA:
count TYPE i VALUE 0.ENDCLASS.
ENDCLASS.
Sven Möhler, TU-Chemnitz 167
Aufgaben:1 E t ll Si i i P i Kl T t“ it d M th d• 1. Erstellen Sie in einem Programm eine Klasse „Text“ mit der Methode „Ausgabe“. Und geben Sie einen beliebigen Text aus. Danach legen Sie 5 Objekte dieser Klasse an, lassen den Text der Methode „Ausgabe“ ausgeben und löschen die Objekte wieder!ausgeben und löschen die Objekte wieder!
• 2. Es soll ein Programm zur Addition zweier Zahlen erstellt werden. Legen Sie dazu eine Klasse mit den Attributen a b summe und derLegen Sie dazu eine Klasse mit den Attributen a, b, summe und der Methode Addition an. Lassen Sie danach das Programm mit verschiedenen Werten für a und b ablaufen.
• 3. Erweitern Sie das letzte Programm so, dass aus der Methode zur Addition eine Funktionale Methode wird! Ändern Sie den Funktionsaufruf entsprechend!Funktionsaufruf entsprechend!
• 4. Ergänzen Sie das letzte Programm um einen Konstruktor, der die Werte a und b auf 13 setzt und summe nullt!Werte a und b auf 13 setzt und summe nullt!
• 5. Erweitern Sie ihr Programm, sodass sie über eine Methode die Summe aller Additionen über alle Objekte abfragen könnenSumme aller Additionen über alle Objekte abfragen können.
Sven Möhler, TU-Chemnitz 168
Gliederung :: Lerninhalte• 1 Einführung
▫ 1.1 Erste Schritte im SAP System▫ 1.2 ABAP Dictionary
• 3 ABAP Objects▫ 3.1 Klassen▫ 3 2 Instanz und Statische▫ 1.3 Programmaufbau
▫ 1.4 Programmtypen ▫ 1.5 Werkzeuge
l
▫ 3.2 Instanz- und Statische Komponenten
▫ 3.3 Methoden▫ 1.6 Programm anlegen▫ 1.7 Syntax▫ 1.8 Ausgabe von Texten
D t t
▫ 3.4 Objekte anlegen▫ 3.5 Methodenaufrufe▫ 3.6 Öffentliche Attribute▫ 1.9 Datentypen
▫ 1.10 Wertzuweisung▫ 1.11 Feldsymb. & Referenzen
1 12 Kontrollstrukturen
3.6 Öffentliche Attribute▫ 3.7 Konstruktor▫ 3.8 Objekte löschen
h f hi ii▫ 1.12 Kontrollstrukturen▫ 1.13 Komplexe Strukturen
• 2 Modularisierung2 1 Unterprogramme
▫ 3.9 Mehrfachinstanziierung▫ 4 Interne Tabellen
▫ 4.1 Tabellenarten▫ 2.1 Unterprogramme▫ 2.2 Funktionsbausteine▫ 2.3 Includes▫ 2 4 Makros
4.1 Tabellenarten▫ 4.2 Tabelle anlegen▫ 4.3 Zeilenoperationen
G f b i▫ 2.4 Makros▫ 2.5 Datenbehandlung
▫ 4.4 Gruppenstufenverarbeitung▫ 4.5 Tabellenoperationen
Sven Möhler, TU-Chemnitz 169
4 Interne Tabellen • Datenobjekte, die Datenmenge fester Struktur im Arbeitsspeicher
halten• besteht aus Zeilen und Spalten• besteht aus Zeilen und Spalten
▫ Spalten besitzen Spaltennamen und Datentyp▫ Spalten werden als Zeilentyp bezeichnetp yp
• dynamische Datenobjekte• keine Beschränkung von ABAP bezgl. Anzahl Zeilen und Spalten• Spalten können elementaren oder strukturierten Datentyp haben• Möglichkeit der Schlüsseldefinition
Nr Name Adresse HNr PLZ Ort
ZeilenZeilen
Type n (5) Type c (20) Type c (15) Type i Type n (5) Type c (15)yp yp yp yp yp yp
Zeilentyp
Sven Möhler, TU-Chemnitz 170
Gliederung :: Lerninhalte• 1 Einführung
▫ 1.1 Erste Schritte im SAP System▫ 1.2 ABAP Dictionary
• 3 ABAP Objects▫ 3.1 Klassen▫ 3 2 Instanz und Statische▫ 1.3 Programmaufbau
▫ 1.4 Programmtypen ▫ 1.5 Werkzeuge
l
▫ 3.2 Instanz- und Statische Komponenten
▫ 3.3 Methoden▫ 1.6 Programm anlegen▫ 1.7 Syntax▫ 1.8 Ausgabe von Texten
D t t
▫ 3.4 Objekte anlegen▫ 3.5 Methodenaufrufe▫ 3.6 Öffentliche Attribute▫ 1.9 Datentypen
▫ 1.10 Wertzuweisung▫ 1.11 Feldsymb. & Referenzen
1 12 Kontrollstrukturen
3.6 Öffentliche Attribute▫ 3.7 Konstruktor▫ 3.8 Objekte löschen
h f hi ii▫ 1.12 Kontrollstrukturen▫ 1.13 Komplexe Strukturen
• 2 Modularisierung2 1 Unterprogramme
▫ 3.9 Mehrfachinstanziierung▫ 4 Interne Tabellen
▫ 4.1 Tabellenarten▫ 2.1 Unterprogramme▫ 2.2 Funktionsbausteine▫ 2.3 Includes▫ 2 4 Makros
4.1 Tabellenarten▫ 4.2 Tabelle anlegen▫ 4.3 Zeilenoperationen
G f b i▫ 2.4 Makros▫ 2.5 Datenbehandlung
▫ 4.4 Gruppenstufenverarbeitung▫ 4.5 Tabellenoperationen
Sven Möhler, TU-Chemnitz 171
4.1 Tabellenarten• drei Tabellenarten:
▫ Standard Table▫ Sorted Table▫ Sorted Table▫ Hashed Table
Standard Table:Zeilen unsortiertTabelle kann mit SORT“ sortiert werdenTabelle kann mit „SORT sortiert werden Zeilennummer und Verweis auf Zeile im IndexZugriff auf Zeile über IndexgStandard Table hat immer NON-UNIQUE Schlüssel
mehrere Zeilen können gleichen Schlüssel habenZ il iff b f ll üb T b ll hlü lZeilenzugriff ebenfalls über TabellenschlüsselStandardschlüssel = alle FelderEinsatz:Einsatz:▫ wenn Zugriff hauptsächlich über Index erfolgt
Sven Möhler, TU-Chemnitz 172
4.1 Tabellenartend blSorted Table:
Zeilen immer nach Schlüssel sortiertZeilennummer und Verweis auf Zeile im IndexZeilennummer und Verweis auf Zeile im IndexZugriff auf Zeile über IndexSorted Table hat entweder NON-UNIQUE oder UNIQUE Schlüsselbei UNIQUE Schlüssel keine Schlüssel doppelt Zeile eindeutigEinsatz:▫ wenn Zugriff hauptsächlich über Schlüssel erfolgt▫ wenn Zugriff hauptsächlich über Schlüssel erfolgt
Hashed Table:besitzt keinen Indeximmer UNIQUE Schlüssel
i ht i i l Z iff it ll S hlü lf lderreicht minimale Zugriffszeit, wenn alle Schlüsselfelder einbezogen werdenZeilenzugriff nur über SchlüsselEinsatz: wenn beim Zugriff alle Schlüsselfelder einbezogen werden
Sven Möhler, TU-Chemnitz 173
Gliederung :: Lerninhalte• 1 Einführung
▫ 1.1 Erste Schritte im SAP System▫ 1.2 ABAP Dictionary
• 3 ABAP Objects▫ 3.1 Klassen▫ 3 2 Instanz und Statische▫ 1.3 Programmaufbau
▫ 1.4 Programmtypen ▫ 1.5 Werkzeuge
l
▫ 3.2 Instanz- und Statische Komponenten
▫ 3.3 Methoden▫ 1.6 Programm anlegen▫ 1.7 Syntax▫ 1.8 Ausgabe von Texten
D t t
▫ 3.4 Objekte anlegen▫ 3.5 Methodenaufrufe▫ 3.6 Öffentliche Attribute▫ 1.9 Datentypen
▫ 1.10 Wertzuweisung▫ 1.11 Feldsymb. & Referenzen
1 12 Kontrollstrukturen
3.6 Öffentliche Attribute▫ 3.7 Konstruktor▫ 3.8 Objekte löschen
h f hi ii▫ 1.12 Kontrollstrukturen▫ 1.13 Komplexe Strukturen
• 2 Modularisierung2 1 Unterprogramme
▫ 3.9 Mehrfachinstanziierung▫ 4 Interne Tabellen
▫ 4.1 Tabellenarten▫ 2.1 Unterprogramme▫ 2.2 Funktionsbausteine▫ 2.3 Includes▫ 2 4 Makros
4.1 Tabellenarten▫ 4.2 Tabelle anlegen▫ 4.3 Zeilenoperationen
G f b i▫ 2.4 Makros▫ 2.5 Datenbehandlung
▫ 4.4 Gruppenstufenverarbeitung▫ 4.5 Tabellenoperationen
Sven Möhler, TU-Chemnitz 174
4.2 Tabelle anlegen• über folgende Wege können Interne Tabellen angelegt werden:
▫ mit lokalem Tabellentyp▫ mit impliziten Tabellentyp▫ mit impliziten Tabellentyp▫ mit Bezug zum ABAP Dictionary
mit lokalem Typ:Syntax:
TYPES <Name des Tabellentyps> TYPE <Tabellenart> TABLEOF <Zeilentyp>[WITH <Schlüsselart> KEY <Schlüsselfelder>][INITIAL SIZE <Anzahl Zeilen>].
<Tabellenart> {STANDARD, SORTED, HASHED}<Zeilentyp > Struktur<Schlüsselart> {UNIQUE NON-UNIQUE}<Schlüsselart> {UNIQUE, NON-UNIQUE}<Schlüsselfelder> Strukturkomponente(n)/Tabellenfelder<Anzahl Zeilen> initiale Anzahl an Zeilen
Sven Möhler, TU-Chemnitz 175
4.2 Tabelle anlegenlBeispiel:
TYPES: BEGIN OF struc,Nr(5) Type n,Name(15) Type c,Adresse(20) TYPE c,HNr(3) TYPE n,PLZ(5) TYPE nPLZ(5) TYPE n,ORT(15) TYPE c,
END OF struc,Tab TYPE SORTED TABLE OF struc WITH UNIQUE KEY Nr.
DATA i T b TYPE T b
mit implizitem Tabellentyp:
DATA i_Tab TYPE Tab.
Syntax:
DATA <Name des Tabellentyps> TYPE/LIKE <Tabellenart> TABLE OF Z ilTABLE OF <Zeilentyp>[WITH <Schlüsselart> KEY <Schlüsselfelder>][INITIAL SIZE <Anzahl Zeilen>].
Sven Möhler, TU-Chemnitz 176
4.2 Tabelle anlegenlBeispiel:
TYPES: BEGIN OF struc,…END OF struc,
DATA: i_struc TYPE struc, i_Tab1 LIKE SORTED TABLE OF i_struc WITH UNIQUE KEY Nr,i Tab2 TYPE SORTED TABLE OF struc WITH UNIQUE KEY Nr
mit Bezug zum ABAP Dictionary:Syntax:
i_Tab2 TYPE SORTED TABLE OF struc WITH UNIQUE KEY Nr.
Syntax:
DATA <Name des Tabellentyps> TYPE <Tabellenart> TABLE OF <Datenbanktabelle>[WITH <Schlüsselart> KEY <Schlüsselfelder>][INITIAL SIZE <Anzahl Zeilen>].
Beispiel:DATA i Tab TYPE STANDARD TABLE OF KNA1 WITHDATA i_Tab TYPE STANDARD TABLE OF KNA1 WITH
NON-UNIQUE KEY Name1. *KNA1 (Kundenstamm (allgemeiner Teil))
Sven Möhler, TU-Chemnitz 177
Gliederung :: Lerninhalte• 1 Einführung
▫ 1.1 Erste Schritte im SAP System▫ 1.2 ABAP Dictionary
• 3 ABAP Objects▫ 3.1 Klassen▫ 3 2 Instanz und Statische▫ 1.3 Programmaufbau
▫ 1.4 Programmtypen ▫ 1.5 Werkzeuge
l
▫ 3.2 Instanz- und Statische Komponenten
▫ 3.3 Methoden▫ 1.6 Programm anlegen▫ 1.7 Syntax▫ 1.8 Ausgabe von Texten
D t t
▫ 3.4 Objekte anlegen▫ 3.5 Methodenaufrufe▫ 3.6 Öffentliche Attribute▫ 1.9 Datentypen
▫ 1.10 Wertzuweisung▫ 1.11 Feldsymb. & Referenzen
1 12 Kontrollstrukturen
3.6 Öffentliche Attribute▫ 3.7 Konstruktor▫ 3.8 Objekte löschen
h f hi ii▫ 1.12 Kontrollstrukturen▫ 1.13 Komplexe Strukturen
• 2 Modularisierung2 1 Unterprogramme
▫ 3.9 Mehrfachinstanziierung▫ 4 Interne Tabellen
▫ 4.1 Tabellenarten▫ 2.1 Unterprogramme▫ 2.2 Funktionsbausteine▫ 2.3 Includes▫ 2 4 Makros
4.1 Tabellenarten▫ 4.2 Tabelle anlegen▫ 4.3 Zeilenoperationen
G f b i▫ 2.4 Makros▫ 2.5 Datenbehandlung
▫ 4.4 Gruppenstufenverarbeitung▫ 4.5 Tabellenoperationen
Sven Möhler, TU-Chemnitz 178
4.3 Zeilenoperationen
APPEND • Zeile am Ende einer
Tabelle anfügeng
INSERTLOOP...ENDLOOP• Zeile einfügen• Tabelle Zeile für Zeile
bearbeiten
READ• Zeile aus Tabelle lesen
DELETE• Zeile der Tabelle
löschen
MODIFY• Zeile der Tabelle• Zeile der Tabelle
modifizieren
Sven Möhler, TU-Chemnitz 179
4.3 Zeilenoperationen• APPEND:
▫ fügt eine Zeile am Ende der Internen Tabelle an▫ nur bei Standard Table anwenden▫ nur bei Standard Table anwenden▫ Syntax:
APPEND <zeile> TO <int. Tabelle>.
▫ Beispiel:
APPEND <zeile> TO <int. Tabelle>.
…DATA zeile TYPE struc,
i_Tab TYPE STANDARD TABLE OF struc WITH DEFAULT KEY.…… APPEND zeile TO i_Tab.
Sven Möhler, TU-Chemnitz 180
4.3 Zeilenoperationen• INSERT:
▫ fügt eine Zeile in die Internen Tabelle ein▫ bei Standard Table wie APPEND▫ bei Standard Table wie APPEND▫ bei Sorted Table wird Zeile entsrechend der Sortierung eingefügt▫ Syntax:
INSERT <zeile> INTO TABLE <Int. Tabelle>.
SystemvariablenSystemvariablensy-subrc = 0 Zeile wurde an Position n eingefügtsy-subrc = 4 bei Tabellen mit eindeutigen Schlüssel;
Zeile mit Schlüssel existiert bereits;
▫ Beispiel:
Zeile nicht eingefügt
…DATA zeile TYPE struc,
i_Tab TYPE SORTED TABLE OF struc WITH UNIQUE-KEY Nr.… INSERT zeile INTO TABLE i_Tab.
Sven Möhler, TU-Chemnitz 181
4.3 Zeilenoperationen• READ:
▫ lesen einer Tabellenzeile über:IndexIndexFeldinhalt der TabellenschlüsselspaltenFeldinhalte beliebiger Spalten
Systemvariablensy-subrc = 0 Zeile gefunden, die den Bedingungen
der Read-Anweisung entsprichtbi b i h l Z il dsy-tabix beinhaltet Zeilennummer der
gefundenen Zeile
Sven Möhler, TU-Chemnitz 182
4.3 Zeilenoperationen• READ-Indexzugriff:
▫ Index wird bei Standard/Sorted Table automatisch angelegt und verwaltetverwaltet
▫ Hashed Table hat keinen Index▫ Syntax:
Zeile an Stelle (Index) <pos> wird aus Tabelle <Int Tabelle> gelesen und in
READ TABLE <Int. Tabelle> INTO <zeile> INDEX <pos>.
Zeile an Stelle (Index) <pos> wird aus Tabelle <Int. Tabelle> gelesen und in die Zeilenvariable <zeile> geschrieben
B i i l▫ Beispiel:…DATA zeile TYPE struc,
i_Tab TYPE SORTED TABLE OF struc WITH UNIQUE-KEY Nr.… READ TABLE i_Tab INTO zeile INDEX 5.
Sven Möhler, TU-Chemnitz 183
4.3 Zeilenoperationen• READ-Indexzugriff (über Feldsymbole):
▫ Feldsymbole sind Zeiger die auf Zeilen einer Tabelle gerichtet werden könnenkönnen
▫ Änderungen von „Komponenten“ der Zeile wirken sich direkt auf die Interne Tabelle aus
▫ Syntax:
READ TABLE <Int. Tabelle> INDEX <n> ASSIGNING <fs>.
<fs> steht für Feldsymbol
Sven Möhler, TU-Chemnitz 184
4.3 Zeilenoperationen• READ- Tabellenschlüsselzugriff :
▫ bei Hashed/Sorted Table laufzeitgünstig▫ Standard Table immer Full Table Scan (hoher Aufwand)▫ Standard Table immer Full Table Scan (hoher Aufwand)▫ Syntax 1:
READ TABLE <Int. Tabelle> INTO <zeile>READ TABLE <Int. Tabelle> INTO <zeile> WITH TABLE KEY <f1> = <i1>
<f2> = <i2><fn> = <in>
<f1>…<fn> Namen des Schlüsselfelder<i1>…<in> Inhalt der Schlüsselfelder des gesuchten „Satzes“
<fn> = <in>.
<i1>…<in> Inhalt der Schlüsselfelder des gesuchten „Satzes
▫ Beispiel:…DATA zeile TYPE struc,
i_Tab TYPE SORTED TABLE OF struc WITH UNIQUE-KEY Nr.… READ TABLE i_Tab INTO zeile WITH TABLE KEY Nr = '3'.
Sven Möhler, TU-Chemnitz 185
4.3 Zeilenoperationen▫ Syntax 2:
READ TABLE <Int. Tabelle> INTO <zeile> FROM <key_zeile>.
Aus Tabelle <Int. Tabelle> wird eine Zeile gelesen dessen Schlüssel dem Schlüssel der Zeile <key_zeile> entspricht.<zeile> und <key zeile> sind beide vom gleichen Strukturtyp genau wie die<zeile> und <key_zeile> sind beide vom gleichen Strukturtyp, genau wie die Tabelle
B i i l▫ Beispiel:…DATA zeile TYPE struc,
key_zeile TYPE struc,i_Tab TYPE SORTED TABLE OF struc WITH UNIQUE-KEY Nr.
…key zeile-Nr = '3'key_zeile Nr 3 .
… READ TABLE i_Tab INTO zeile FROM key_zeile.
Sven Möhler, TU-Chemnitz 186
4.3 Zeilenoperationen• READ- Tabellenschlüsselzugriff (über Feldsymbole):
▫ Syntax:
READ TABLE I t T b ll WITH TABLE KEYREAD TABLE <Int. Tabelle> WITH TABLE KEY <f1> = <i1><f2> = <i2><fn> = <in>ASSIGNING <fs>.
<f1>…<fn> Namen des Schlüsselfelder<i1>…<in> Inhalt der Schlüsselfelder des gesuchten „Satzes“<fs> steht für Feldsymboly
Sven Möhler, TU-Chemnitz 187
4.3 Zeilenoperationen• READ- über beliebige Feldinhalte :
▫ sehr aufwendig immer Full Table Scan▫ Syntax 1:▫ Syntax 1:
READ TABLE <Int. Tabelle> INTO <zeile> WITH KEY <f1> = <i1>
<f2> = <i2><fn> = <in>.
Unterschied zum Lesen über Schlüssel: WITH TABLE KEY<f1>…<fn> Namen beliebiger Felder<i1>…<in> Inhalt der beliebigen Felder des gesuchten „Satzes“g g „umfasst das „Ergebnis“ mehrere Zeilen wird die erste Zeile genommen
▫ Beispiel:
…DATA zeile TYPE struc,
i_Tab TYPE SORTED TABLE OF struc WITH UNIQUE-KEY Nr.… READ TABLE i_Tab INTO zeile WITH KEY Ort = 'Chemnitz'.
Sven Möhler, TU-Chemnitz 188
4.3 Zeilenoperationen• READ- über beliebige Feldinhalte (über Feldsymbol) :
▫ Syntax 1:
READ TABLE I t T b ll WITH KEY f iREAD TABLE <Int. Tabelle> WITH KEY <f1> = <i1><f2> = <i2><fn> = <in>
Unterschied zum Lesen über Schlüssel: WITH TABLE KEYf f b li bi ld
ASSIGNING <fs>.
<f1>…<fn> Namen beliebiger Felder<i1>…<in> Inhalt der beliebigen Felder des gesuchten „Satzes“umfasst das „Ergebnis“ mehrere Zeilen wird die erste Zeile genommen<fs> steht für Feldsymbol
Sven Möhler, TU-Chemnitz 189
4.3 Zeilenoperationen• MODIFY:
▫ ändern der Feldinhalte ein oder mehrerer Zeilen einer Internen Tabelle▫ Änderungen entweder über Struktur oder Feldsymbol▫ Änderungen entweder über Struktur oder Feldsymbol
• MODIFY- über Struktur:▫ Struktur muss gleiche „Struktur“ wie Tabelle haben▫ Vorgehen: READ ändern zurückschreiben (MODIFY)
Syntax 1:MODIFY TABLE <Int. Tabelle> FROM <zeile>.
Beispiel:…DATA zeile TYPE strucDATA zeile TYPE struc,
i_Tab TYPE SORTED TABLE OF struc WITH UNIQUE-KEY Nr.… READ TABLE i_Tab INTO zeile INDEX 5. Schlüsselwert kann mit
dieser Methode nichtzeile-Ort = 'Gera'.MODIFY TABLE i_Tab FROM zeile.
dieser Methode nicht geändert werden
Sven Möhler, TU-Chemnitz 190
4.3 ZeilenoperationenSyntax 2:
MODIFY <Int. Tabelle> FROM <zeile> INDEX <pos>.
Die Feldinhalte der Struktur <zeile> überschreiben die Feldinhalte der Tabelle <Int. Tabelle> an Position (Index) <pos>.
Beispiel:…DATA zeile TYPE struc,
i_Tab TYPE SORTED TABLE OF struc WITH UNIQUE-KEY Nr.… READ TABLE i Tab INTO zeile INDEX 5READ TABLE i_Tab INTO zeile INDEX 5.zeile-Nr = '99'.zeile-Ort = 'Gera'.MODIFY i_Tab FROM zeile INDEX 5.
Sven Möhler, TU-Chemnitz 191
4.3 Zeilenoperationen• MODIFY- über Feldsymbol:
▫ über ein Feldsymbol können Änderungen direkt an der Internen tabellevorgenommen werdenvorgenommen werden
▫ Änderungen der Feldinhalte des Feldsymbols = Änderung an der Internen Tabelle
Syntax:
READ TABLE <Int. Tabelle> WITH TABLE KEY <f1> = <i1>* k h d l d <f2> <i2>*es kann auch anders gelesen werden <f2> = <i2>
<fn> = <in>ASSIGNING <fs>.
f K I h l
Da <fs> auf eine Zeile der Internen Tabelle zeigt, kann die entsprechende
<fs>-<Komponente> = <neuer Inhalt>.
Zeile direkt über <fs>-<Komponente> angesprochen und geändert werden.
Sven Möhler, TU-Chemnitz 192
4.3 Zeilenoperationen• MODIFY- über Bedingung:
▫ ein oder mehrere Zeilen einer Internen Tabelle können auch über eine logische Bedingung geändert werdenlogische Bedingung geändert werden
Syntax:
MODIFY <Int. Tabelle> FROM <zeile> TRANSPORTING f1 … fn
Die Felder f1 fn einer Zeile der Tabelle <Int Tabelle> werden mit den
MODIFY <Int. Tabelle> FROM <zeile> TRANSPORTING f1 … fnWHERE <log_Bed>.
Die Felder f1 … fn einer Zeile der Tabelle <Int. Tabelle> werden mit den Inhalten der Zeile <zeile> überschieben, falls die Bedingung für die entsprechende Zeile der Tabelle erfüllt ist.
Beispiel:…DATA zeile TYPE struc,
i_Tab TYPE SORTED TABLE OF struc WITH UNIQUE-KEY Nr.… MODIFY i Tab FROM zeile TRANSPORTING PLZMODIFY i_Tab FROM zeile TRANSPORTING PLZWHERE Ort = 'München'.
Sven Möhler, TU-Chemnitz 193
4.3 Zeilenoperationen• DELETE:
▫ über DELETE können ein oder mehrere Zeilen einer Internen Tabelle gelöscht werdengelöscht werden
▫ gelöscht wird entweder über:Zeilennummer (Index)Feldinhalte der Tabellenschlüsselspaltenlogischer Ausdruck
Systemvariablensy-subrc = 0 mindestens eine Zeile wurde gelöschtsy-subrc = 4 keine Zeile wurde gelöscht
Sven Möhler, TU-Chemnitz 194
4.3 Zeilenoperationen• DELETE- über Zeilennummer (Index):
Syntax:
DELETE I t T b ll INDEX
Beispiel:
DELETE <Int. Tabelle> INDEX <pos>.
…DATA zeile TYPE struc,
i_Tab TYPE SORTED TABLE OF struc WITH UNIQUE-KEY Nr._ Q… DELETE i_Tab INDEX '3'.
Sven Möhler, TU-Chemnitz 195
4.3 Zeilenoperationen• DELETE- über Tabellenschlüssel:
Syntax 1:
DELETE TABLE I t T b ll WITH TABLE KEYDELETE TABLE <Int. Tabelle> WITH TABLE KEY <f1> = <i1><f2> = <i2>
<f1> <fn> Schlüsselfelder der Tabelle
<fn> = <in>.
<f1> … <fn> Schlüsselfelder der Tabelle<i1> … <in> Inhalte der Schlüsselfelder der Tabelle
kommt es zu Übereinstimmungen wird die jeweilige Zeile gelöscht
Beispiel:
…DATA zeile TYPE struc,
i_Tab TYPE SORTED TABLE OF struc WITH UNIQUE-KEY Nr.… DELETE TABLE i_Tab WITH TABLE KEY Nr = '3'.
Sven Möhler, TU-Chemnitz 196
4.3 ZeilenoperationenSyntax 2:
DELETE TABLE <Int. Tabelle> FROM <zeile>.
Stimmt der Schlüssel der Zeile <zeile> mit dem Schlüssel ein oder mehrerer Zeilen überein, so wird die entsprechende Zeile der Tabelle <Int. Tabelle> gelöschtgelöscht.
Beispiel:…DATA zeile TYPE struc,
i_Tab TYPE SORTED TABLE OF struc WITH UNIQUE-KEY Nr.…zeile-Nr = '3'. DELETE TABLE i_Tab FROM zeile.
Sven Möhler, TU-Chemnitz 197
4.3 Zeilenoperationen• DELETE- über logischen Ausdruck:
▫ ein oder mehrere Zeilen können über einen log. Ausdruck gelöscht werdenwerden
Syntax:DELETE <Int. Tabelle> WHERE <logischer Ausdruck>.
Alle Zeilen der Tabelle <Int. Tabelle> für die der logische Ausdruck gilt, werden gelöscht.g
Beispiel:…DATA zeile TYPE struc,
i_Tab TYPE SORTED TABLE OF struc WITH UNIQUE-KEY Nr.… DELETE i_Tab WHERE Ort = 'Chemnitz'.
Sven Möhler, TU-Chemnitz 198
4.3 Zeilenoperationen• LOOP…ENDLOOP:
▫ ermöglicht es die Zeilen einer Internen Tabelle sequentiell durchzugehen/zu bearbeitendurchzugehen/zu bearbeiten
Syntax:LOOP AT <Int. Tabelle> INTO <wa> [FROM n1 TO n2][WHERE <logischer Ausdruck].
<Anweisungen.>ENDLOOP.
Die Zeilen [Zeile n1 bis n2] der Internen Tabelle <Int. Tabelle>, für die der logische Ausdruck <log. Ausdruck> gilt, werden sequentiell durchlaufen.
OO
Beispiel:……DATA zeile TYPE struc,
i_Tab TYPE SORTED TABLE OF struc WITH UNIQUE-KEY Nr.… LOOP AT i T b INTO il WHERE O t 'Ch it 'LOOP AT i_Tab INTO zeile WHERE Ort = 'Chemnitz'.
WRITE / zeile-Name.ENDLOOP.
Sven Möhler, TU-Chemnitz 199
Gliederung :: Lerninhalte• 1 Einführung
▫ 1.1 Erste Schritte im SAP System▫ 1.2 ABAP Dictionary
• 3 ABAP Objects▫ 3.1 Klassen▫ 3 2 Instanz und Statische▫ 1.3 Programmaufbau
▫ 1.4 Programmtypen ▫ 1.5 Werkzeuge
l
▫ 3.2 Instanz- und Statische Komponenten
▫ 3.3 Methoden▫ 1.6 Programm anlegen▫ 1.7 Syntax▫ 1.8 Ausgabe von Texten
D t t
▫ 3.4 Objekte anlegen▫ 3.5 Methodenaufrufe▫ 3.6 Öffentliche Attribute▫ 1.9 Datentypen
▫ 1.10 Wertzuweisung▫ 1.11 Feldsymb. & Referenzen
1 12 Kontrollstrukturen
3.6 Öffentliche Attribute▫ 3.7 Konstruktor▫ 3.8 Objekte löschen
h f hi ii▫ 1.12 Kontrollstrukturen▫ 1.13 Komplexe Strukturen
• 2 Modularisierung2 1 Unterprogramme
▫ 3.9 Mehrfachinstanziierung▫ 4 Interne Tabellen
▫ 4.1 Tabellenarten▫ 2.1 Unterprogramme▫ 2.2 Funktionsbausteine▫ 2.3 Includes▫ 2 4 Makros
4.1 Tabellenarten▫ 4.2 Tabelle anlegen▫ 4.3 Zeilenoperationen
G f b i▫ 2.4 Makros▫ 2.5 Datenbehandlung
▫ 4.4 Gruppenstufenverarbeitung▫ 4.5 Tabellenoperationen
Sven Möhler, TU-Chemnitz 200
4.4 Gruppenstufenverarbeitung• innerhalb einer LOOP Schleife über Interne Tabelle möglich• hintereinanderfolgende Zeilen werden anhand des Inhalts
bestimmter Felder in Gruppen eingeteiltbestimmter Felder in Gruppen eingeteilt• Gruppeneinteilung richtet statisch nach der Reihenfolge der Felder
in der Zeilenstruktur• Gruppenstufen ergeben sich aus der Reihenfolge der Felder
• unterschiedliche Farben repräsentieren unterschiedliche Inhalte Wechsel der Gruppenstufe
• mit AT kann auf Gruppenstufenwechsel reagiert werden• Gruppenstufen-Anweisung AT innerhalb einer LOOP-
Schleife▫ Syntax:Sy ta :
AT <level>.<anweisungsblock>
ENDATENDAT.
Sven Möhler, TU-Chemnitz 201
4.4 Gruppenstufenverarbeitungf f l d f h l k d• auf folgende Gruppenstufenwechsel kann reagiert werden:
<level> Bedeutung
FIRST erste Zeile der internen Tabelle
LAST letzte Zeile der internen Tabelle
NEW <f> Anfang einer Gruppe von Zeilen mit dem gleichen Inhalt im Feld <f> und in den Feldern links von <f>
END Of <f> Ende einer Gruppe von Zeilen mit dem gleichen Inhalt im Feld <f>
• möglicher Aufbau in einer Schleife:
END Of <f> Ende einer Gruppe von Zeilen mit dem gleichen Inhalt im Feld <f> und in den Feldern links von <f>
LOOP AT <Int. Tabelle>.AT FIRST. ... ENDAT.
AT NEW <f1>. ... ENDAT........ <Einzelsatzverarbeitung>.......
AT END OF <f1> ENDATAT END OF <f1>. ... ENDAT.AT LAST. … ENDAT.
ENDLOOP.
Sven Möhler, TU-Chemnitz 202
4.4 Gruppenstufenverarbeitung :: BeispielTYPES: BEGIN OF Vertrieb,
Name(15) TYPE c,Jahr(4) TYPE n,Umsatz(4) TYPE p Decimals 2
SORT i_Tab BY Name ASCENDING Jahr ASCENDING.
LOOP AT i Tab INTO zeileUmsatz(4) TYPE p Decimals 2,END OF Vertrieb,Tab TYPE STANDARD TABLE OF VertriebWITH NON-UNIQUE KEY Name.
DATA: i Tab TYPE Tab,
LOOP AT i_Tab INTO zeile.AT FIRST.
WRITE: /5 'Name: ', 16 'Jahr: ', 25 'Umsatz: '.ULINE.
ENDAT._ ,zeile TYPE Vertrieb.
zeile-Name = 'Max'.zeile-Jahr = '2006'.
AT NEW Name.SKIP 1.
ENDAT.zeile-Umsatz = '922.22'.APPEND zeile TO i_Tab.zeile-Name = 'Peter'.zeile-Jahr = '2007'.
WRITE: / zeile-Name UNDER 'Name: ',zeile-Jahr UNDER 'Jahr: ',zeile-Umsatz UNDER 'Umsatz: '.
zeile-Umsatz = '1002.79'.APPEND zeile TO i_Tab.zeile-Name = 'Peter'.zeile-Jahr = '2006'.
il U t ' 86 66'
AT END OF Name.SUM.WRITE: /5 'SUMME: ', 25 zeile-Umsatz
COLOR l h dizeile-Umsatz = '286.66'.APPEND zeile TO i_Tab.zeile-Name = 'Max'.zeile-Jahr = '2007'.zeile Umsatz = '697 99'
COLOR col_heading.ENDAT.
AT LAST.ULINE
SUM bildet die Summe von Untermengen
k di k b kzeile-Umsatz = 697.99 .APPEND zeile TO i_Tab.
ULINE.ENDAT.
ENDLOOP.
Wert kann direkt über Struktur-komponenten abgefragt werden
Sven Möhler, TU-Chemnitz 203
4.4 Gruppenstufenverarbeitung :: Beispiel• Ausgabe:
Sven Möhler, TU-Chemnitz 204
Gliederung :: Lerninhalte• 1 Einführung
▫ 1.1 Erste Schritte im SAP System▫ 1.2 ABAP Dictionary
• 3 ABAP Objects▫ 3.1 Klassen▫ 3 2 Instanz und Statische▫ 1.3 Programmaufbau
▫ 1.4 Programmtypen ▫ 1.5 Werkzeuge
l
▫ 3.2 Instanz- und Statische Komponenten
▫ 3.3 Methoden▫ 1.6 Programm anlegen▫ 1.7 Syntax▫ 1.8 Ausgabe von Texten
D t t
▫ 3.4 Objekte anlegen▫ 3.5 Methodenaufrufe▫ 3.6 Öffentliche Attribute▫ 1.9 Datentypen
▫ 1.10 Wertzuweisung▫ 1.11 Feldsymb. & Referenzen
1 12 Kontrollstrukturen
3.6 Öffentliche Attribute▫ 3.7 Konstruktor▫ 3.8 Objekte löschen
h f hi ii▫ 1.12 Kontrollstrukturen▫ 1.13 Komplexe Strukturen
• 2 Modularisierung2 1 Unterprogramme
▫ 3.9 Mehrfachinstanziierung▫ 4 Interne Tabellen
▫ 4.1 Tabellenarten▫ 2.1 Unterprogramme▫ 2.2 Funktionsbausteine▫ 2.3 Includes▫ 2 4 Makros
4.1 Tabellenarten▫ 4.2 Tabelle anlegen▫ 4.3 Zeilenoperationen
G f b i▫ 2.4 Makros▫ 2.5 Datenbehandlung
▫ 4.4 Gruppenstufenverarbeitung▫ 4.5 Tabellenoperationen
Sven Möhler, TU-Chemnitz 205
4.5 Tabellenoperationen
MOVE• Interne Tabelle
zeilenweise kopierenzeilenweise kopieren
REFRESH• Inhalt der Internen
Tabelle löschen ohne
DESCRIBE TABLE• Eigenschaften der
Internen Tabelle Speicherbereich freizugeben
Internen Tabelle ermitteln
FREE• Interne Tabelle
löschen (auch aus
SORT• Interne Tabelle
i löschen (auch aus Speicher)sortieren
Sven Möhler, TU-Chemnitz 206
4.5 Tabellenoperationen• MOVE:
▫ kopiert eine Interne Tabelle zeilenweise▫ Struktur von Quelltabelle und Zieltabelle muss gleich sein▫ Struktur von Quelltabelle und Zieltabelle muss gleich sein▫ Tabellenfelder werden entsprechend ihrer physikalischen Anordnung
kopiert nicht nach Namensgleichheit▫ Typkonvertierung findet automatisch statt
Syntax 1:MOVE <Int Tabelle Quelle> TO <Int Tabelle Ziel>
Syntax 2:
MOVE <Int. Tabelle-Quelle> TO <Int. Tabelle-Ziel>.
<Int. Tabelle-Quelle> = <Int. Tabelle-Ziel>.
Sven Möhler, TU-Chemnitz 207
4.5 Tabellenoperationen• REFRESH:
▫ Löscht den Inhalt einer Internen Tabelle … ohne dabei den von der Tabelle allokierten Speicherplatz wieder freizugebenTabelle allokierten Speicherplatz wieder freizugeben.
Syntax:REFRESH <Int. Tabelle>.
• FREE:Lö ht di I t T b ll d ibt d ll ki t S i h b i h▫ Löscht die Interne Tabelle und gibt den allokierten Speicherbereich wieder frei.
Syntax:y
FREE <Int. Tabelle>.
Sven Möhler, TU-Chemnitz 208
4.5 Tabellenoperationen• SORT:
▫ sortiert die Interne Tabelle beliebig …Syntax:Syntax:
SORT <Int. Tabelle> BY<feld1> [ascending/descending]
DESCRIBE
[ g/ g]<feldn>[ascending/descending].
• DESCRIBE:▫ Beschreibt die Eigenschaften einer Internen Tabelle:
Anzahl Zeilena e eAnzahl InitialzeilenTabellentyp
LINES, OCCORS TYPE iKIND TYPE c = {T , S, H}
T=Standard TableS=Sorted TableSyntax: DESCRIBE TABLE <it>
LINES <Anzahl Zeilen>OCCURS <Anzahl Initialzeilen>
S=Sorted TableH=Hashed Table
OCCURS <Anzahl Initialzeilen>KIND <Tabellenart>.
Sven Möhler, TU-Chemnitz 209
AufgabenE t ll Si i I t T b ll di di S lt N V d• 1. Erstellen Sie eine Interne Tabelle, die die Spalten Name, Vorname und
Telefonnummer enthält. Tragen Sie einige Werte ein und geben Sie die Tabelle anschließend aus. Ordnen Sie diese nach Namen und erzeugen Sie wiederum eine Ausgabeeine Ausgabe.
• 2. Erzeugen Sie zu 1. ein Feldsymbol, welches es Ihnen erlaubt, eine beliebige Zeile direkt zu verändernZeile direkt zu verändern.
• 3. Experimentieren Sie mit den kennengelernten Tabellenoperationen.
• 4. Definieren Sie eine Tabelle, die einem Notenspiegel entspricht. Tragen Sie einige Daten ein. Lassen Sie sich den Durchschnitt errechnen. Ändern Sie einige D t ät b ( it M dif ) d h Si d D h h ittDatensätze ab (mit Modify) und errechnen Sie den Durchschnitt neu.
• 5. Definieren Sie eine Tabelle, die einem Notenspiegel entspricht und auch das J h i d Si di N t h lt h b i h k T i i iJahr, in dem Sie die Note erhalten haben speichern kann. Tragen sie einige Datensätze ein und lassen Sie sich die Tabelle geordnet nach Jahren ausgeben. Verwenden Sie hierzu die Gruppenstufenverarbeitung. Lassen Sie sich den Durchschnitt pro Jahr errechnenDurchschnitt pro Jahr errechnen.
Sven Möhler, TU-Chemnitz 210
Gliederung :: Lerninhalte• 5 Externe Tabellen
▫ 5.1 SELECT-Klausel▫ 5 2 INTO Klausel▫ 5.2 INTO-Klausel▫ 5.3 INTO CORR. FIELDS OF-Klausel▫ 5.4 FROM-Klausel▫ 5.5 WHERE-Klausel▫ 5.6 GROUP BY-Klausel▫ 5 7 HAVING-Klausel5.7 HAVING Klausel▫ 5.8 ORDER BY-Klausel
• 6 Dynamische Programmierung▫ 6.1 Dynpro▫ 6.2 Selektionsbilder
Sven Möhler, TU-Chemnitz 211
5 Externe Tabellen• Großteil der Daten liegt im Relationalen Datenbanksystem• Zugriff durch Abfragesprache SQL
▫ allerdings herstellerspezifische Besonderheiten▫ allerdings herstellerspezifische Besonderheiten▫ SAP entwickelte eigene Abfragesprache OPEN SQL und
Datenbankschnittstelle (für Datenbankunabhängigkeit)▫ Datenbankschnittstelle setzt OPEN SQL Anweisungen in SQL
Anweisungen um
• Open SQL-Anweisung zum Lesen von Daten aus Datenbanktabellen:SELECT <result>
INTO <target>FROM <source>FROM <source> [WHERE <condition>][GROUP BY <fields>] [ A G d ][HAVING <cond>][ORDER BY <fields>].
Sven Möhler, TU-Chemnitz 212
5 Externe Tabellen :: SELECT-Anweisung• SELECT Anweisung:
▫ liest Datensätze aus der Datenbanktabelle▫ arbeitet dabei als Schleife▫ arbeitet dabei als Schleife▫ Syntax:
SELECT <Feldliste>SELECT <Feldliste>FROM <Datenbanktabelle>WHERE <Selektionsbedingung>
<Bearbeiten der Ergebnisstruktur>
Systemvariablen
<Bearbeiten der Ergebnisstruktur>ENDSELECT.
Systemvariablensy-subrc = 0, Datensätze wurden gefunden
=4, keine Datensätze wurden gefundensy-dbcnt Nummer des aktuelle in Bearbeitung befindlichen
Datensatzes;existiert auch nach dem Verlassen der SELECT-Anweisung enthält Anzahl der gefundenen DatensätzeDatensätze
Sven Möhler, TU-Chemnitz 213
Gliederung :: Lerninhalte• 5 Externe Tabellen
▫ 5.1 SELECT-Klausel▫ 5 2 INTO Klausel▫ 5.2 INTO-Klausel▫ 5.3 INTO CORR. FIELDS OF-Klausel▫ 5.4 FROM-Klausel▫ 5.5 WHERE-Klausel▫ 5.6 GROUP BY-Klausel▫ 5 7 HAVING-Klausel5.7 HAVING Klausel▫ 5.8 ORDER BY-Klausel
• 6 Dynamische Programmierung▫ 6.1 Dynpro▫ 6.2 Selektionsbilder
Sven Möhler, TU-Chemnitz 214
5.1 SELECT-Klausel• mit SELECT gibt man an, welche Tabellenfelder (Spalten) aus der
Tabelle gelesen werden sollen▫ Syntax:▫ Syntax:
SELECT <Feldliste> … FROM <Datenbanktabelle>.[ENDSELECT.]
[ENDSELECT] nur wenn es sich um eine flache Struktur handelt und nicht um eine Interne Tabelle siehe dazu INTO-KlauselFeldliste: Leerzeichen als Feldtrenner
▫ Beispiel: Datenbanktabelle Kunde (nicht existent)▫ Beispiel: Datenbanktabelle Kunde (nicht existent)
Nr Name Adresse HNr PLZ Ort
12 Klaus Am Wald 5 11111 Barth12 Klaus Am Wald 5 11111 Barth
13 Dieter Am Stein 3 11111 Barth
SELECT Nr Name Adresse … FROM Kunde …
Sven Möhler, TU-Chemnitz 215
5.1 SELECT-Klausell▫ Beispiel:
Datenbanktabelle „KNA1“ (siehe ABAP Dictionary) hat mehrere Tabellenfelder …, KUNNR, LAND1, NAME1, NAME2, … abe e e de …, UNN , N , N , N , …
sollen alle Felder gelesen werden:SELECT * FROM KNA
ll di ld
SELECT * FROM KNA1.*Bearbeiten des DatensatzesENDSELCT.
sollen nur die Felder: KUNNR, NAME1, ORT01, STRAS gelesen werden:
SELECT KUNNR NAME1 ORT01 STRASFROM KNA1.*Bearbeiten des DatensatzesENDSELECT
doppelte Zeile ausschließen:
ENDSELECT.
SELECT DISTINCT NAME1 FROM KNA1.*Bearbeiten des DatensatzesENDSELCT.
Sven Möhler, TU-Chemnitz 216
Gliederung :: Lerninhalte• 5 Externe Tabellen
▫ 5.1 SELECT-Klausel▫ 5 2 INTO Klausel▫ 5.2 INTO-Klausel▫ 5.3 INTO CORR. FIELDS OF-Klausel▫ 5.4 FROM-Klausel▫ 5.5 WHERE-Klausel▫ 5.6 GROUP BY-Klausel▫ 5 7 HAVING-Klausel5.7 HAVING Klausel▫ 5.8 ORDER BY-Klausel
• 6 Dynamische Programmierung▫ 6.1 Dynpro▫ 6.2 Selektionsbilder
Sven Möhler, TU-Chemnitz 217
5.2 INTO-Klausel :: Struktur• gibt an, wohin die mit der SELECT-Klausel gelesenen Daten,
geschrieben werden • Angabe einer Struktur Komponenten müssen die selbe• Angabe einer Struktur Komponenten müssen die selbe
Reihenfolge haben wie die Feldliste der Selectbedingung▫ Syntax:
SELECT <Feldliste> FROM <Datenbanktabelle>INTO <Struktur>.
* Bearbeiten des Datensatzes
▫ Beispiel: Datenbanktabelle KNA1“
Bearbeiten des DatensatzesENDSELECT.
▫ Beispiel: Datenbanktabelle „KNA1
DATA: START-OF-SELECTION.BEGIN OF Kunde,
KNr TYPE KNA1-KUNNR,Name TYPE KNA1-NAME1,
END OF Kunde
SELECT KUNNR NAME1INTO KundeFROM KNA1END OF Kunde. FROM KNA1.
WRITE: / Kunde-Knr, Kunde-Name.ENDSELECT.
Sven Möhler, TU-Chemnitz 218
5.2 INTO-Klausel :: Int. Tabelle• Besonderheit: ENDSELECT entfällt.
▫ Syntax:
SELECT F ldli t FROM D t b kt b ll
B i i l D t b kt b ll KNA “
SELECT <Feldliste> FROM <Datenbanktabelle>INTO TABLE <Int. Tabelle>.
▫ Beispiel: Datenbanktabelle „KNA1“
TYPES: BEGIN OF Kunde,
KNr TYPE KNA1-KUNNR,Name TYPE KNA1-NAME1,
END OF Kunde.
DATA i_Tab TYPE SORTED TABLE OF Kunde WITH UNIQUE KEY Knr.
START-OF-SELECTION.
SELECT KUNNR NAME1INTO TABLE i TabINTO TABLE i_TabFROM KNA1.
Sven Möhler, TU-Chemnitz 219
Gliederung :: Lerninhalte• 5 Externe Tabellen
▫ 5.1 SELECT-Klausel▫ 5 2 INTO Klausel▫ 5.2 INTO-Klausel▫ 5.3 INTO CORR. FIELDS OF-Klausel▫ 5.4 FROM-Klausel▫ 5.5 WHERE-Klausel▫ 5.6 GROUP BY-Klausel▫ 5 7 HAVING-Klausel5.7 HAVING Klausel▫ 5.8 ORDER BY-Klausel
• 6 Dynamische Programmierung▫ 6.1 Dynpro▫ 6.2 Selektionsbilder
Sven Möhler, TU-Chemnitz 220
5.3 INTO CORRESPONDING FIELDS OF-Klausel• wie INTO, bloß:
▫ Zuordnung der Felder der Zielstruktur geschieht über Namensgleichheit▫ somit müssen die Zielstrukturkomponenten die gleichen Namen▫ somit müssen die Zielstrukturkomponenten die gleichen Namen
haben wie Feldlistenfelder▫ Feldanzahl der Struktur kann zur Feldliste variieren▫ Syntax-Struktur:
SELECT <Feldliste> FROM <Datenbanktabelle>INTO CORRESPONDING FIELDS OF <Struktur>INTO CORRESPONDING FIELDS OF <Struktur>.* Bearbeiten des DatensatzesENDSELECT.
▫ Syntax-Int. Tabelle: SELECT F ldli FROM D b k b llSELECT <Feldliste> FROM <Datenbanktabelle>INTO CORRESPONDING FIELDS OF TABLE <Struktur>.
Sven Möhler, TU-Chemnitz 221
5.3 INTO CORRESPONDING FIELDS OF-Klausell▫ Beispiel: Datenbanktabelle „KNA1“
TYPES: BEGIN OF Kunde,KUNNR TYPE KNA1-KUNNR,ORT01 TYPE KNA1-ORT01,
END OF Kunde.
DATA: i Tab TYPE SORTED TABLE OF Kunde WITH UNIQUE KEY KUNNRDATA: i_Tab TYPE SORTED TABLE OF Kunde WITH UNIQUE KEY KUNNR,zeile TYPE Kunde.
START-OF-SELECTION.
SELECT KUNNR NAME1 Ort01INTO CORRESPONDING FIELDS OF TABLE i_TabFROM KNA1FROM KNA1.
LOOP AT i_Tab INTO zeile.WRITE: / zeile-KUNNR, zeile-ORT01.
ENDLOOPENDLOOP.
Sven Möhler, TU-Chemnitz 222
Gliederung :: Lerninhalte• 5 Externe Tabellen
▫ 5.1 SELECT-Klausel▫ 5 2 INTO Klausel▫ 5.2 INTO-Klausel▫ 5.3 INTO CORR. FIELDS OF-Klausel▫ 5.4 FROM-Klausel▫ 5.5 WHERE-Klausel▫ 5.6 GROUP BY-Klausel▫ 5 7 HAVING-Klausel5.7 HAVING Klausel▫ 5.8 ORDER BY-Klausel
• 6 Dynamische Programmierung▫ 6.1 Dynpro▫ 6.2 Selektionsbilder
Sven Möhler, TU-Chemnitz 223
5.4 FROM-Klausel• bestimmt die Datenbanktabellen, von denen die Daten in die
Selektion der SELECT-Klausel gelesen werden• Angabe: einzelne Tabelle oder mehrere Tabellen über innere und• Angabe: einzelne Tabelle oder mehrere Tabellen über innere und
äußere Joins verknüpft
▫ Syntax einzelne Tabelle:SELECT ... FROM <Datenbanktabelle> [AS <alias>] …
durch AS kann eine Datenbanktabelle für den Gebrauch umbenannt <alias> werden
S t h T b ll (INNER JOIN)▫ Syntax mehrere Tabellen (INNER JOIN):
SELECT ... FROM <Datenbanktabelle1> [AS <alias>] [INNER] JOIN
Join verknüpft die selektierten Zeilen von Datenbanktabelle1 mit den Zeilen b k b ll f d d d f ll
FROM <Datenbanktabelle1> [AS <alias>] [INNER] JOIN <Datenbanktabelle2> [AS <alias>] ON <Bedingung> …
von Datenbanktabelle2, für die die Bedingung erfüllt ist.
Sven Möhler, TU-Chemnitz 224
5.4 FROM-Klausell• Beispiel (INNER JOIN):
VN VN KN VNR KN
Tabelle Vater: Tabelle Kind:
VNr VName
1 Klaus
2 Jochen
KNr VNR KName
1 1 Paul
2 1 Jan2 Jochen
3 Dieter
2 1 Jan
3 2 Peter
SELECT V~Vname K~Kname …FROM Vater AS V INNER JOIN Kind AS K
ON V~VNr = K~VNr.
VName KNameErgebnisstabelle:bei Tabellenverknüpfungen
muss auf zweideutige Felder mit
Klaus Paul
Klaus Jan
zweideutige Felder mit <Tabelle>~<Feldname>
zugegriffen werden
Jochen Peter
Sven Möhler, TU-Chemnitz 225
5.4 FROM-Klauselh b ll▫ Syntax mehrere Tabellen (LEFT/RIGHT OUTER JOIN):
SELECT ... FROM <D t b kt b ll 1> [AS < li >]FROM <Datenbanktabelle1> [AS <alias>]LEFT/RIGHT [OUTER] JOIN <Datenbanktabelle2> [AS <alias>] ON <Bedingung> …
LEFT OUTER JOIN: Liest die selektierten Zeilen von Datenbanktabelle1 unabhängig davon, ob Zeilen von Datenbanktabelle2 existieren, für die die Bedingung erfüllt ist RIGHT OUTER JOIN umgekehrtBedingung erfüllt ist. RIGHT OUTER JOIN umgekehrt
Beispiel Tabelle „Vater“ & „Kind“ mit LEFT OUTER JOIN:p
VName KName
Klaus Paulaus au
Klaus Jan
Jochen Peter
Dieter
Sven Möhler, TU-Chemnitz 226
Gliederung :: Lerninhalte• 5 Externe Tabellen
▫ 5.1 SELECT-Klausel▫ 5 2 INTO Klausel▫ 5.2 INTO-Klausel▫ 5.3 INTO CORR. FIELDS OF-Klausel▫ 5.4 FROM-Klausel▫ 5.5 WHERE-Klausel▫ 5.6 GROUP BY-Klausel▫ 5 7 HAVING-Klausel5.7 HAVING Klausel▫ 5.8 ORDER BY-Klausel
• 6 Dynamische Programmierung▫ 6.1 Dynpro▫ 6.2 Selektionsbilder
Sven Möhler, TU-Chemnitz 227
5.5 WHERE-Klausel• Auswahl der Datensätze, die bearbeitet werden sollen
▫ Syntax:
SELECT F ldli t FROM D t b kt b llSELECT <Feldliste> FROM <Datenbanktabelle>INTO …WHERE <Feld1> <Operator> <Vergleichswert1>[<log. Operator> <Feld2> <Operator> <Vergleichswert2>[<log. Operator> <Feldn> <Operator> <Vergleichswertn>].* Bearbeiten des Datensatzes
▫ Beispiel: Datenbanktabelle „KNA1“
[ENDSELECT.]
p
*Deklaration siehe Folie 192 SELECT KUNNR NAME1INTO KundeINTO KundeFROM KNA1WHERE ( KUNNR BETWEEN 'T-S11B29' AND 'T-S50A02' ) AND ORT01 LIKE 'Stuttgart'.
WRITE: / Kunde-Knr, Kunde-Name.ENDSELECTENDSELECT.
Sven Möhler, TU-Chemnitz 228
5.5 WHERE-Klausel• Hinter der WHERE-Anweisung können noch folgende Arten von
Bedingungen stehen:
Bedingung Erklärung
<Spalte> <operator> <Wert>
Vergleich Operatoren: =, <>,<,>, <=, =>. bei Zeichenketten (Strings) nicht empfohlen LIKE ( g ) p
<Spalte> [NOT] BETWEEN <WertA> AND <WertB>
Intervalls: Bedingung Wahr, wenn der Wert der Spalte [nicht] zwischen den angegebenen Werten liegt.
<Spalte> IN (<Wert1> Wertevergleich: Angabe der Werte die in der entsprechenden Spalte<Spalte> IN (<Wert1>, <Wert2>, <Wert3>, ..., <Wertn>)
Wertevergleich: Angabe der Werte, die in der entsprechenden Spalte vorhanden sein sollen. auch für Zeichenketten geeignet
<Spalte> IS [NOT] NULL Es wird überprüft, ob die Spalte einen Null-Wert enthält.<Spalte> IS [NOT] NULL Es wird überprüft, ob die Spalte einen Null Wert enthält.
<Spalte> LIKE <Zeichenkette>
Wie im Beispiel, Zeichenkette als Bedingung. Dabei sind die Platzhalter '_' und '%' erlaubt. Das Prozentzeichen hält Platz für beliebig viele Zeichen und der Unterstrich hält Platz für genau einbeliebig viele Zeichen und der Unterstrich hält Platz für genau ein Zeichen.
<Spalte> <BedingungA> AND|OR <BedingungB>
Beide Bedingungen müssen Wahr sein damit die Spalte selektiert wird. Wenn nur eine Bedingung benötigt wird, kann die OR-AND|OR <BedingungB> wird. Wenn nur eine Bedingung benötigt wird, kann die ORVerknüpfung genutzt werden.
Sven Möhler, TU-Chemnitz 229
Gliederung :: Lerninhalte• 5 Externe Tabellen
▫ 5.1 SELECT-Klausel▫ 5 2 INTO Klausel▫ 5.2 INTO-Klausel▫ 5.3 INTO CORR. FIELDS OF-Klausel▫ 5.4 FROM-Klausel▫ 5.5 WHERE-Klausel▫ 5.6 GROUP BY-Klausel▫ 5 7 HAVING-Klausel5.7 HAVING Klausel▫ 5.8 ORDER BY-Klausel
• 6 Dynamische Programmierung▫ 6.1 Dynpro▫ 6.2 Selektionsbilder
Sven Möhler, TU-Chemnitz 230
5.6 GROUP BY-Klausel• mehrere Zeilen der Datenbanktabelle können zu einer Zeile der
Selektion zusammengefasst werden▫ gruppiert Spalten mit gleichen Inhalt▫ gruppiert Spalten mit gleichen Inhalt▫ Aggregatfunktionen über Zeilen der verbleibenden Spalten▫ Syntax:
SELECT <Feld1> <Feld2> <Agg-Fkt.(<Feld3>)>FROM <Datenbanktabelle>INTOINTO …WHERE …GROUP BY <Feld1> <Feld2> .
S lt h A tf kti ü b i GROUP BY ft h “
* Bearbeiten des Datensatzes[ENDSELECT.]
Spalten ohne Aggregatfunktion müssen bei GROUP BY „auftauchen“
Sven Möhler, TU-Chemnitz 231
5.6 GROUP BY-Klausel• folgende Aggregatfunktionen können angewendet werden:
▫ MIN Minimum der Spalte (pro Gruppe)▫ MAX Maximum der Spalte (pro Gruppe)▫ MAX Maximum der Spalte (pro Gruppe)▫ AVG Durchschnitt der Spalte (pro Gruppe)▫ SUM Summe der Spalte (pro Gruppe)▫ COUNT Anzahl Zeilen/Werte der Spalte (pro Gruppe)▫ Syntax:
<Agg-Fkt.( Distinct <Feld> )>*oder<Agg-Fkt.( <Feld> )>gg*oder<Agg-Fkt.( * )>
Leerzeichen in der Klammer beachtenzwischen Aggregatfkt.-namen und Klammer kein Leerzeichen
Sven Möhler, TU-Chemnitz 232
Gliederung :: Lerninhalte• 5 Externe Tabellen
▫ 5.1 SELECT-Klausel▫ 5 2 INTO Klausel▫ 5.2 INTO-Klausel▫ 5.3 INTO CORR. FIELDS OF-Klausel▫ 5.4 FROM-Klausel▫ 5.5 WHERE-Klausel▫ 5.6 GROUP BY-Klausel▫ 5 7 HAVING-Klausel5.7 HAVING Klausel▫ 5.8 ORDER BY-Klausel
• 6 Dynamische Programmierung▫ 6.1 Dynpro▫ 6.2 Selektionsbilder
Sven Möhler, TU-Chemnitz 233
5.7 HAVING-Klausel• Anzahl der selektierten Zeilengruppen kann durch eine
Bedingungen eingeschränkt werden▫ Syntax:▫ Syntax:
SELECT <Feld1> <Feld2> <Agg-Fkt.(<Feld3>)>FROM <Datenbanktabelle>O b bINTO …WHERE …GROUP BY <Feld1> <Feld2>GROUP BY <Feld1> <Feld2> HAVING <Bedingung>.* Bearbeiten des Datensatzes[ENDSELECT ]
<Bedingung> bezieht sich auf die AggregatfunktionBeispiel:
[ENDSELECT.]
▫ Beispiel:SELECT Firma Name SUM( Stunde )….G O iGROUP BY Firma NameHAVING COUNT( Stunde ) > 100.
Sven Möhler, TU-Chemnitz 234
Gliederung :: Lerninhalte• 5 Externe Tabellen
▫ 5.1 SELECT-Klausel▫ 5 2 INTO Klausel▫ 5.2 INTO-Klausel▫ 5.3 INTO CORR. FIELDS OF-Klausel▫ 5.4 FROM-Klausel▫ 5.5 WHERE-Klausel▫ 5.6 GROUP BY-Klausel▫ 5 7 HAVING-Klausel5.7 HAVING Klausel▫ 5.8 ORDER BY-Klausel
• 6 Dynamische Programmierung▫ 6.1 Dynpro▫ 6.2 Selektionsbilder
Sven Möhler, TU-Chemnitz 235
5.8 ORDER BY-Klausel• Ergebnismenge kann durch ORDER BY sortiert werden
▫ Syntax:
SELECT F ldli t FROM D t b kt b llSELECT <Feldliste> FROM <Datenbanktabelle>INTO ...WHERE ...ORDER BY <Feld1> [ASCENDING/DESCENDING]
<Feld2> [ASCENDING/DESCENDING]<Feldn> [ASCENDING/DESCENDING].[ / ]
* Bearbeiten des Datensatzes[ENDSELECT.]
<ASCENDING> steht für aufsteigend<DESCENDING> steht für absteigend
▫ Beispiel:▫ Beispiel:SELECT Firma Name SUM( Stunde )….GROUP BY Firma NameGROUP BY Firma NameHAVING COUNT( Stunde ) > 100ORDER BY Firma DESCENDING Name ASCENDING.
Sven Möhler, TU-Chemnitz 236
5 Externe Tabellen :: Beispielbf l ll d d h l b k h b• Abfrage ermittelt alle Kunden die mehr als 1 Konto bei einer Bank haben:
TYPES: BEGIN OF struc,KN TYPE k k
SELECT kna1~kunnr kna1~name1 knbk~banklCOUNT( DISTINCT k bk b k )KNr TYPE kna1-kunnr,
Name TYPE kna1-name1,BLZ TYPE knbk-bankl,ANZ TYPE i,
COUNT( DISTINCT knbk~bankn )INTO TABLE i_TabFROM kna1 INNER JOIN knbk
ON kna1~kunnr = knbk~kunnr,END OF struc.
DATA: i_Tab TYPE STANDARD TABLE OF struc
GROUP BY kna1~kunnr kna1~name1 knbk~banklHAVING COUNT( DISTINCT knbk~bankn ) > 1ORDER BY kna1~name1.
TABLE OF struc,zeile TYPE struc.
start-of-selection.
LOOP AT i_Tab INTO zeile.WRITE: / zeile-name,zeile-knr,
zeile-blz,zeile-anz.
• Ausgabe:
ENDLOOP.
Sven Möhler, TU-Chemnitz 237
Aufgaben:• 1. Selektieren Sie alle Werte der Tabelle 'marm' und geben Sie die
Spalten 'matnr' und 'meinh' aus!
• 2. Ändern Sie oben gestellte Aufgabe so ab, das nur Datensätze ausgegeben werden, deren Spalten 'matnr' mit 'TU' beginnen. g g , p g
• 3. Erweitern Sie das Programm so, dass zu jedem selektierten Datensatz aus der Tabelle 'makt' die Spalte 'maktx' ausgegeben wird. Verwenden Sie einen Join.
• 4. Modifizieren Sie ihr Programm ein weiteres mal. Lesen Sie das Ergebnis ihrer Selektion in eine interne Tabelle, sortieren Sie sie g ,nach der Materialbezeichnung und geben Sie sie aus.
Sven Möhler, TU-Chemnitz 238
Gliederung :: Lerninhalte• 5 Externe Tabellen
▫ 5.1 SELECT-Klausel▫ 5 2 INTO Klausel▫ 5.2 INTO-Klausel▫ 5.3 INTO CORR. FIELDS OF-Klausel▫ 5.4 FROM-Klausel▫ 5.5 WHERE-Klausel▫ 5.6 GROUP BY-Klausel▫ 5 7 HAVING-Klausel5.7 HAVING Klausel▫ 5.8 ORDER BY-Klausel
• 6 Dynamische Programmierung▫ 6.1 Dynpro▫ 6.2 Selektionsbilder
Sven Möhler, TU-Chemnitz 239
6 Dynamische Programmierung• Bisher: keine Interaktion zwischen Programm und Benutzer• Dyn. Programmierung soll es ermöglichen interaktiv in den
Programmablauf einzugreifenProgrammablauf einzugreifen
Sven Möhler, TU-Chemnitz 240
Gliederung :: Lerninhalte• 5 Externe Tabellen
▫ 5.1 SELECT-Klausel▫ 5 2 INTO Klausel▫ 5.2 INTO-Klausel▫ 5.3 INTO CORR. FIELDS OF-Klausel▫ 5.4 FROM-Klausel▫ 5.5 WHERE-Klausel▫ 5.6 GROUP BY-Klausel▫ 5 7 HAVING-Klausel5.7 HAVING Klausel▫ 5.8 ORDER BY-Klausel
• 6 Dynamische Programmierung▫ 6.1 Dynpro▫ 6.2 Selektionsbilder
Sven Möhler, TU-Chemnitz 241
6.1 Dynpro• abgeleitet von Dynamisch und Programm• alles was in irgendeiner Weise in ABAP „dynamisch“ ist, wird als
Dynpro bezeichnetDynpro bezeichnet• besteht aus Bildschirm (auch mehrere) und Ablauflogik
▫ Bildschirm (Editierfelder, Drucktasten, Symbole, Menüs,…) wird entweder mit ( , , y , , )Werkzeug ScreenPainter erstellt oder durch ABAP Quellcode beschrieben
▫ Ablauflogik besteht aus VerarbeitungsblöckenVerarbeitungsblöcken…
▫ PROCESS AFTER INPUT (nach Benutzerdateneingabe), ▫ PROCESS BEFORE OUTPUT (vor Bildschirmausgabe), ▫ PROCESS ON HELP REQUEST (Benutzer ruft Hilfe auf) und ▫ PROCESS ON VALUE REQUEST (Benutzer drückt F4 Taste),
die auf die Dynpro-Ereignisse PAI, PBO, POH und POVdie auf die Dynpro Ereignisse PAI, PBO, POH und POVreagieren und Dialogmodule des zugehörigen ABAP-Programmsaufrufen.
Sven Möhler, TU-Chemnitz 242
6.1 Dynpro• Stellung von Dynpros zwischen GUI-Status und ABAP-Programm:
Fasst die Menü-, Symbol- und Drucktastenleisteeines Fensters sowie die Funktionstastenbelegungeines Fensters sowie die Funktionstastenbelegungzusammen. Wird mit Screen Pinter erstellt.
Dynpros haben eigene DatenobjekteDatenobjekte namens Dynprofelder, die mit den Ein- und Ausgabefeldern der Bildschirmbilder
Datenübergabe erfolgt beim Senden und Verlassen von Bildschirmen zwischen Dynpro-Bildschirmbilder
verknüpft sindBildschirmen zwischen Dynprofeldern und Datenobjekten im ABAP-Programm
Sven Möhler, TU-Chemnitz 243
Gliederung :: Lerninhalte• 5 Externe Tabellen
▫ 5.1 SELECT-Klausel▫ 5 2 INTO Klausel▫ 5.2 INTO-Klausel▫ 5.3 INTO CORR. FIELDS OF-Klausel▫ 5.4 FROM-Klausel▫ 5.5 WHERE-Klausel▫ 5.6 GROUP BY-Klausel▫ 5 7 HAVING-Klausel5.7 HAVING Klausel▫ 5.8 ORDER BY-Klausel
• 6 Dynamische Programmierung▫ 6.1 Dynpro▫ 6.2 Selektionsbilder
Sven Möhler, TU-Chemnitz 244
6.2 Selektionsbilder• Selektionsbilder sind eine spezielle Art von Dynpros, deren Aufgabe
darin besteht, Eingaben des Nutzers aufzunehmen• dienen meist dazu die Selektionskriterien beim Datenbankzugriff• dienen meist dazu, die Selektionskriterien beim Datenbankzugriff
näher zu beschreiben bzw. einzugrenzen• bisher mussten die Selektionsparameter im Quellcode modifiziert p Q
werden• die nachfolgenden Anweisungen dienen dazu, diesen Zustand zu
b i ibeseitigen:▫ PARAMETERS▫ SELECT-OPTIONSSELECT OPTIONS
Sven Möhler, TU-Chemnitz 245
6.2 Selektionsbilder• PARAMETERS-Anweisung:
▫ erzeugt einen Eingabefeld auf einem Selektionsbildschirm▫ Selektionsbildschirm wird durch PARAMETERS-Anweisung▫ Selektionsbildschirm wird durch PARAMETERS-Anweisung
automatisch erzeugt▫ PARAMETRS Parameter sind ganz normale Variablen die im Laufe des
dProgramms ausgewertet werden Syntax Eingabefelder:
PARAMETERS <p>[(<length>)] [TYPE <type>|LIKE <obj>]PARAMETERS <p>[(<length>)] [TYPE <type>|LIKE <obj>] [DECIMALS <d>].
Parametername max. 8 Zeichen langParametertext hinterlegen über Menü: Springen Textelemente Selektionstextep gmögliche Zusätze z.B. OBLIGATORY, DEFAULT
Syntax Ankreuzfeld:
PARAMETERS <p> ...... AS CHECKBOX ......
Sven Möhler, TU-Chemnitz 246
6.2 Selektionsbilderhlk fSyntax Auswahlknöpfe:
PARAMETERS <p> ...... RADIOBUTTON GROUP <radi>......
<radi> steht für den Gruppenname (nicht optional)Beispiel:
PARAMETERS: name(15) TYPE c OBLIGATORY, vorname(15) TYPE c OBLIGATORY, gebjahr TYPE i DEFAULT 1970gebjahr TYPE i DEFAULT 1970 , herr RADIOBUTTON GROUP r1 DEFAULT 'X', frau RADIOBUTTON GROUP r1, katalog AS CHECKBOX DEFAULT 'X',
l ' 'newslett AS CHECKBOX DEFAULT 'X', gratisge AS CHECKBOX DEFAULT 'X'.
Data: …
Sven Möhler, TU-Chemnitz 247
6.2 Selektionsbilder• SELECT-OPTIONS-Anweisung:
▫ erzeugt, wie auch die PARAMETERS-Anweisung, Eingabefelder auf einem Selektionsbildschirmeinem Selektionsbildschirm
▫ Selektionsbildschirm wird von SELECT-OPTIONS Anweisung automatisch erzeugt
Syntax:
SELECT-OPTIONS <Name> FOR <Bezugsfeld> [Zusätze].
Beispiel:DATA:Nr_bezug TYPE KNA1-KUNNR,Name_bezug(20) TYPE c,Ort_bezug(20) TYPE c.
SELECT-OPTIONS:KNr FOR Nr_bezug NO INTERVALS,KName FOR Name_bezug LOWER CASE,O t FOR O t bOrt FOR Ort_bezug.
Sven Möhler, TU-Chemnitz 248
6.2 Selektionsbilder• Eigenschaften SELECT-OPTIONS-Anweisung:
▫ für SELECT-OPTIONS Anweisung werden auf dem Selektionsbild 2 Eingabefelder (ohne Zusatz NO INTERVALS) angelegt (von bis)Eingabefelder (ohne Zusatz NO INTERVALS) angelegt (von, bis)
▫ Durch Mehrfachauswahl besteht die Möglichkeit mehrere Einzelwerte/Intervalle einzubeziehen/auszuschließen
i b ll i f il d▫ SELECT-OPTIONS Anweisung erzeugt Interne Tabelle mit Kopfzeile und folgendem Inhalt:
Komponente „SIGN“p „„I“ (Included) Intervall/Einzelwert in Ergebnismenge enthalten„E“ (Excluded) Intervall/Einzelwert in Ergebnismenge nicht enthalten
Komponente OPTION“Komponente „OPTION Selektionsoption {= ; > ; >= ; < ; <=}
Komponente „LOW“ Eingabewert „von“
Komponente „HIGH“Eingabewert bis“Eingabewert „bis
Sven Möhler, TU-Chemnitz 249
6.2 Selektionsbilderb ll d▫ SELECT-OPTIONS Anweisung eine Interne Tabelle erzeugt wird, muss
in der WHERE Klausel der SELECT Anweisung der „IN“ Operator genutzt werdeng
▫ Beispiel:
DATA: KNr_bezug TYPE KNA1-KUNNR,i T b TYPE STANDARD TABLE OF KNAi_Tab TYPE STANDARD TABLE OF KNA1,zeile TYPE KNA1.
SELECT-OPTIONS:KundenNr FOR KNr_bezug._ g
START-OF-SELECTION.
SELECT KUNNR NAME1 ORT01SELECT KUNNR NAME1 ORT01 INTO CORRESPONDING FIELDS OF TABLE i_TabFROM KNA1WHERE KUNNR IN KundenNr.
LOOP AT i_Tab INTO zeile.WRITE:/ zeile-KUNNR, zeile-NAME1, zeile-ORT01.
ENDLOOPENDLOOP.
Sven Möhler, TU-Chemnitz 250
6.2 Selektionsbilder• Selektionsbilder gezielt aufrufen:
▫ Sollen die Selektionsbilder nicht direkt nach dem Programmaufruf erscheinen sondern gezielt aufgerufen werden kann ein Selektionsbilderscheinen, sondern gezielt aufgerufen werden, kann ein Selektionsbild wie folgt definiert werden:
Syntax:
SELECTION-SCREEN BEGIN OF SCREEN <nr> [TITLE <Titel>] [AS WINDOW]. *Definition des Selektionsbildes
<Titel> ist eine Variable, der nach INITIALIZATION ein Wert zugewiesen
Definition des SelektionsbildesSELECTION-SCREEN END OF SCREEN <nr>.
gwird. INITIALIZATION ist ein Ereignisschlüsselwort. Dieses Ereignis wird aktiviert, kurz bevor ein Selektionsbild auf dem Bildschirm erscheinen soll.<nr> = Identifikator sollte größer 1000 sein g
▫ Selektionsbild aufrufen:Syntax:
CALL SCREEN <nr>.
Sven Möhler, TU-Chemnitz 251
6.2 Selektionsbilderl k i bild f i▫ Selektionsbilder formatieren:Um Selektionsbilder etwas ansprechender zu gestalten, können folgende Befehle verwendet werden:o ge de e e e e e det e de :
fügt <n> Leerzeilen ein – Syntax:
SELECTION-SCREEN SKIP [<n>].
fügt eine waagerechte Linie ein mit <p> kann die Startposition angegeben werden, <l> steht für die Länge – Syntax:
fügt Kommentar zu einem Feld ein. Die Zuweisung eines Wertes zu
SELECTION-SCREEN ULINE [/<p>[(<l>)]].
fügt Kommentar zu einem Feld ein. Die Zuweisung eines Wertes zu <Kommentar> erfolgt erst nach dem Schlüsselwort INITIALIZATION - Syntax:
SELECTION-SCREEN COMMENT [/]<p>(<l>) <Kommentar> [FOR FIELD <feld>].
Sven Möhler, TU-Chemnitz 252
6.2 Selektionsbilderf d l h l d ldsetzt Kommentare auf die gleiche Zeile wie das Feld;
jede Anweisungen im Block, kommt auf eine Zeile auch mehrere Felder pro Zeile – Syntax:e de p o e e Sy ta :SELECTION-SCREEN BEGIN OF LINE.
<Anweisungen.> SELECTION SCREEN END OF LINE
Felder in einem Block zusammenfassen – Syntax:
SELECTION-SCREEN END OF LINE.
Felder in einem Block zusammenfassen Syntax:SELECTION-SCREEN BEGIN OF BLOCK <name> WITH FRAME TITLE <titel>.
<Anweisungen> SELECTION-SCREEN END OF BLOCK <name>.
Sven Möhler, TU-Chemnitz 253
6.2 Selektionsbilder :: BeispielSELECTION-SCREEN BEGIN OF SCREEN 1050 TITLE t_text1.
SELECTION-SCREEN BEGIN OF BLOCK rad1 WITH FRAME TITLE t_text2.
PARAMETERS: Name(20) TYPE c,Vorname(20) TYPE c.SELECTION-SCREEN SKIP 1.
SELECTION-SCREEN BEGIN OF LINE.SELECTION-SCREEN COMMENT 1(31) t_text3.
( ) ( )
INITIALIZATION.t_text1 = 'Eingabemaske:'.t_text2 = 'Benutzerdaten erfassen:'.t_text3 = 'Adresse erfassen:'.t t t 'PLZ & O t f 'PARAMETERS: Strasse(20) TYPE c, Hnr(3) TYPE n.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN SKIP 1.
t_text4 = 'PLZ & Ort erfassen:'.
CALL SCREEN 1050.
WRITE:/ Name Vorname Strasse HNr PLZ OrtSELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(31) t_text4.PARAMETERS: PLZ(5) TYPE n, Ort(20) TYPE c.
SELECTION SCREEN END OF LINE
WRITE:/ Name, Vorname, Strasse, HNr, PLZ, Ort.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN ULINE.
SELECTION-SCREEN END OF BLOCK rad1SELECTION SCREEN END OF BLOCK rad1.SELECTION-SCREEN END OF SCREEN 1050.
Sven Möhler, TU-Chemnitz 254
AufgabenS h ib Si i P d Ih N V d• 1. Schreiben Sie ein Programm, dass Ihren Namen, Vornamen und
ihr Alter entgegennehmen kann. Lassen Sie sich die Daten anschließend wieder ausgeben. g
• 2. Schreiben Sie ein Programm, dass sie mittels Ankreuzfeldern und Checkboxen fragt ob sie ein kleines mittleres oder großes EisCheckboxen fragt, ob sie ein kleines, mittleres oder großes Eis wollen, und welche Geschmacksrichtungen enthalten sein sollen.
• 3. Erweitern Sie Ihr "Eisprogramm" so, dass der Selektionsbildschirm schöner aussieht. Nutzen Sie Rahmen und Kommentare.Kommentare.
• 4. Erstellen Sie einen Selektionsbildschirm, der ihre S l kti k it i S lt ' t ' d T b ll ' 'Selektionskriterien zur Spalte 'matnr' der Tabelle 'marm' entgegennimmt, diese Daten in eine interne Tabelle schreibt, die Selektion ausführt und das Ergebnis ausgibt (Spalte 'matnr' und Spalte 'meinh').
Sven Möhler, TU-Chemnitz 255
…