PDF1
PDF1
PDF1
Gliederung
1. Das SAP-System
1.1. Client-Server-Architektur von SAP
1.2. Werkzeuge der ABAP Workbench
1.3. Repository /Data Dictionary (DD)
1.4. Transaktionen
2. ABAP die Programmiersprache
2.1. Allgemeiner Überblick
2.1.1. Eigenschaften der ABAP-Programmiersprache
2.1.2. Mehrsprachigkeit von ABAP
2.1.3. Ausführung von ABAP-Anweisungen
2.1.4. Syntax von ABAP-Programmen
2.2. Programmtypen
2.3. Historie der Programmiersprachen
2.4. Sprachbestandteile
2.4.1. Datentypen
2.4.2. Datenobjekte/Feldsymbole/Datenreferenzen
2.4.3. Parameters/Selektionsbild
2.4.4. Systemvariablen
2.4.5. Listenausgabe
2.4.6. Zeichenkettenbearbeitung
2.4.7. Grundrechenarten
2.4.8. Variablenübertragung
2.4.9. Logische Steuerung
2.4.10. Interne Tabellen
2.4.11. Datenbankzugriffe
2.4.12. Message
2.4.13. Berechtigungsschutz
2.4.14. Modularisierung
2.4.15. Dynpros
2.4.16. Aufruf von Programmen
2.5. Bedienung
2.5.1. Object Navigator (SE80)
2.5.2. Data Dictionary (SE11)
2.5.3. Individuelle Statuszeile
2.5.4. Debugger
ABAP-Programmierung FH-Giessen/Friedberg
Prof. Dr. Hohmann V07 Seite 2
Datum: 10.06.2004
3. Ausgewählte Programmbeispiele
3.1 DATA und TYPES
3.2 Interne Tabellen
3.3 Event Struktur Report
3.4 Einfache Reports
3.5 Interaktive Reports
3.6 Parameters, Select-Options, Selection-Screen
3.7 Message-System
3.8 Funktionsbausteine
3.9 Select
3.10 Dialogprogrammierung
3.10.1 Einfache Dynproprogrammierung
3.10.2 Erweiterte Dynproprogrammierung
3.10.3 Dialogprogrammierung in Verbindung mit
Objekte
3.11 Logische Datenbanken
3.12 Objekte
4. Literatur
ABAP-Programmierung FH-Giessen/Friedberg
Prof. Dr. Hohmann V07 Seite 3
Datum: 10.06.2004
1. DAS SAP-System
1.4 Transaktionen
Transaktionen in der SAP-Begriffswelt sind ablauffähige Programme, die über einen
Kurzcode aufgerufen werden können. Wichtige Transaktionscodes für die ABAP-
Programmierung sind z.B.
• SE80 = Objekt Navigator (dies ist das wichtigste Programm für Sie)
• SE11 = ABAP-Dictionary
• SE37 = Function Builder
• SE24 = Class Builder
• SE38 = Editor
• SE09 = Transport Organizer (Anzeige der Transportaufträge innerhalb einer
Entwicklungsklasse Werkzeuge – ABAP-Workbench – Übersicht – Transport-Organizer)
• SE04 = User Übersicht d.h. Prozess-Liste
• SE11 = Data Modeler
• SE16 = Data Browser
Befehlseingabefeld:
• SM50 = Prozessliste
Direkteingabe
• ST05 = SQL-Trace Transaktionscode und
• SW01 = BAPIs Kurzbefehle
• CMOD = User Exits
ABAP Entwicklungsmenü
ABAP-Programmierung FH-Giessen/Friedberg
Prof. Dr. Hohmann V07 Seite 6
Datum: 10.06.2004
Kurzbefehle im Transaktionsfeld
Die Eingabe folgender Kürzel in das Befehlseingabefeld bewirkt die Auslösung der folgenden
Funktionen:
/o = Neuer Modus /o oder neuer Modus mit einem bestimmten Programm starten
z.B. /ose80
/n = Aktuelles Programm abbrechen /n
/h = Debugging starten. Alternativ aus dem Menü System-Hilfsmittel –Debugging
##(Dynpro oder ABAP)
ABAP-Programmierung FH-Giessen/Friedberg
Prof. Dr. Hohmann V07 Seite 7
Datum: 10.06.2004
START-OF-SELECTION
Verarbeitungsblock mit WRITE/ULINE/SKIP
PBO
Selektionsbild END-OF-SELECTION
PAI Listenprozessor
AT LINE-SELECTION
Dynpros
Selbstprogrammierter TOP-OF-PAGE
PBO
Bildschirm
PAI AT USER-COMMAND
MODULE
Nachrichtenklassen PBA
ENDMODULE
Objekte eines Programms Dynproereignisse
MODULE
Textelemente PAI
Selektionsfeldbezeichnung ENDMODULE
Feldtypen FUNCTION
Funktionen
Datentypen ABAP-Programm ENDFUNCTION
24.03.2004 - v13 METHODS
PUBLIC SECTION
Unterprogramme DATA
Usw.
METHODS
Deklationsteil CLASS ... DEFINITION PROTECTED SECTION
DATA
Klassen METHODS
PRIVATE SECTION
DATA
Implentierungsteil CLASS...
METHOD
IMPLEMENTATION
ENDMETHOD
FORM
Unterprogramm
ENDFORM
Logische Datenbanken
GET
Data Dictionary
Verwaltung
Repository
KATEGORIE BEISPIEL
Deklarative Anweisungen TYPES; DATA; TABLES
Allgemeine Syntax
§ ABAP/4-Anweisungen enden immer mit einem Punkt.
§ Eine Anweisung kann sich über mehrere Zeilen erstrecken.
§ Anweisungen können durch Zusätze qualifiziert werden.
§ Ein Wort wird auf beiden Seiten durch ein Leerzeichen begrenzt (auch z.B. unmittelbar
auf eine Klammer folgend).
§ Literalzeichen werden in einfache Anführungszeichen gesetzt. Enthält das Literal ein
Anführungszeichen, so ist dieses doppelt zu schreiben, z.B.
WRITE ‘Meier‘‘s Lexikon‘.
§ Kommentare werden durch * (in der ersten Spalte) oder ‘‘ (an beliebiger Stelle) begonnen.
Der Rest der Zeile wird dann als Kommentar betrachtet.
§ . = Abschluss eines Befehls. ACHTUNG: ABAP verlangt nach jedem Befehl einen
Punkt.
§ : = Der Doppelpunkt nach einem ABAP Schlüsselwort (z.B. TYPE, DATA, WRITE)
erlaubt es, mehrere Befehle mit Komma getrennt hintereinander auszuführen. WRITE: /
feld1, feld2, feld3.
§ , = Trennzeichen für Befehlsaufreihung (siehe Beispiel WRITE)
§ ’müller’ = Beginn und Ende eines konstanten Wertes.
§ - = Verwenden Sie bei der Namensvergabe keine Bindestriche sondern Unterstriche, da
ABAP die Bindestriche nutzt, um Satznamen und Feldnamen miteinander zu verbinden.
z.B.
TYPES: BEGIN OF typ_satz,
feld_1(10) TYPE C,
feld_2(10) TYPE C,
END OF typ_satz.
DATA: satz TYPE typ_satz,
satz-feld_1 = 'FELD1'.
satz-feld_2 = 'FELD2'.
WRITE: / satz.
Kommentare
2.2 Programmtypen
ABAP unterscheidet unterschiedliche Programmtypen. Diese Programmtypen sind:
Selektions-
Liste
bild
Generierung
ABAP-Programm
LOAD-OF-PROGRAM
zw_datum = sy-datum – 7.
START-OF-SELECTION.
WRITE: zw_datum.
Selektions-
bild
PBO PAI
Definition
ABAP-Programm
zu bearbeiten wie das nachfolgende Bild zeigt: Die Ereignisblöcke eines
Selektionsbildes haben folgende Bedeutung:
Eine Liste verfügt wiederum über eigene Ereignisblöcke. Die Ereignisblöcke einer
Liste sind der nachfolgenden Abbildung zu entnehmen:
Liste
Listenprozessor
Definition
ABAP-Programm
§ Modulpools/Dialogprogramm/Dynproprogramme (Typ M –
Programm): Diese Programme werden ausschließlich über die Ablauflogik von
Dynpros gesteuert. Enthalten sämtliche Dialogmodule der zugehörigen Dynpros,
werden als „Modulpool“ bezeichnet. Modulpools werden mit der Anweisung
PROGRAM eingeleitet.
ABAP-Programm
ABAP-Programmierung FH-Giessen/Friedberg
Prof. Dr. Hohmann V07 Seite 13
Datum: 10.06.2004
Dynproereignisse/Dialogmaskenereignisse
Dynproereignisblöcke werden nicht im ABAP-Programm, sondern in der
Dynproablauflogik implementiert. Die Dynproablauflogik steuert die Verarbeitung
von Bildschirmbildern. Dynpros werden mit dem Befehl CALL SCREEN ####
(4stellige Nummer des Dynpros) im ABAP-Programm aufgerufen. PBO (Process
Before Output) und PAI (Process After Input) sind spezielle Verarbeitungsblöcke, die
vor und nach einem Dynpro aufgerufen werden, aber wie bereits erwähnt nicht im
ABAP-Programm stehen sondern in Bereich Ablauflogik des Screenpainters. ABAP-
Prozeduren können in der Weise aufgerufen werden, dass innerhalb von PBO und PAI
ein MODUL aufgerufen wird. Dieses Modul enthält dann die notwendigen ABAP-
Abfragen, Kontrollen usw. und ist im ABAP Programm eingebunden.
Die Ereignisblöcke sind demzufolge:
o PROCESS BEFORE OUTPUT (PBO): PBO ist der Verarbeitungsblock vor der
Anzeige eines Dynpros. Die Prozeduren (ABAP-Befehle) z.B. zur Befüllung der
Maske werden in den Unterroutinen mit dem Namen MODUL eingebettet. Die
Syntax ist:
MODULE name OUTPUT.
Anweisungen .
ENDMODUL .
o PROCESS AFTER INPUT (PAI): PAI ist der Verarbeitungsblock nach der
Anzeige eines Dynpros. Die Prozeduren (ABAP-Befehle) z.B. zur Befüllung der
Maske werden in den Unterroutinen mit dem Namen MODUL eingebettet. Die
Syntax ist:
MODULE name INPUT.
Anweisungen .
ENDMODUL.
Auch der Feldbezug und damit die Auslösung eines PAI-Ereignisses ist möglich
mit dem Befehl.
FIELD dynprofeld MODULE name ON INPUT. “Aufruf bei
Initialwertabweichung
FIELD dynprofeld MODULE name ON REQUEST. “Bei Inhaltsveränderungen
FIELD dynprofeld MODULE name. “Beim Verlassen des Feldes
Verarbeitungs-
block
CALL FUNCTION
ABAP-Programm
Funktions- Funktions-
Deklarations- baustein baustein
teil für FUNCTION FUNCTION
globale Daten ... ...
ENDFUNCTION ENDFUNCTION
Funktionsgruppe
ABAP-Programmierung FH-Giessen/Friedberg
Prof. Dr. Hohmann V07 Seite 14
Datum: 10.06.2004
REPORT z_objekte .
*------------Globale Variable------------------------------------*
TYPES : t_zahl(12) TYPE p DECIMALS 2.
PARAMETERS : wa_kurs TYPE t_zahl,
wa_divi TYPE t_zahl.
PROTECTED SECTION.
PRIVATE SECTION.
ENDCLASS. "berechnung DEFINITION
*---------------------------------------------------------------------*
* CLASS berechnung IMPLEMENTATION
*---------------------------------------------------------------------*
CLASS berechnung IMPLEMENTATION.
METHOD kursgewinn.
COMPUTE l_kgv = l_kurs / l_divi.
ENDMETHOD. "kursgewinn
2.4. Sprachbestandteile
2.4.1 Datentypen
Mit den Typen sind Informationen verknüpft, wie die Daten abgelegt werden, welche
Wertebereiche und welche Operationen auf dem Datenobjekt erlaubt sind. Die Verwendung
des Datentyps erfolgt mit dem Befehl TYPES und DATA. Typisiert können die Datentypen
als solche mit Längenangaben und als solche ohne. Weiterhin haben die Datentypen entweder
eine statische oder eine variable Länge.
o C = Charakter
Anlage einer Instanz unter Verwendung von TYPES.
TYPES: typ_feld(10) TYPE C.
DATA: feld1 TYPE typ_feld.
DATA: feld2 TYPE typ_feld.
Anlage einer Instanz unter Bezug auf ein anderes DATA-Feld.
DATA: feld2 LIKE feld1.
Anlage einer Instanz ohne Verwendung von TYPES, sondern direkt in
DATA.
DATA: feld1(10) TYPE C.
o N = Numerisches Zeichen
DATA: num1(10) TYPE N.
o X = Hexadezimalzahl (Byte)
o P = gepackte Zahl. Hier ist zusätzlich die Anzahl der Nachkommastellen
anzugeben.
DATA: num1(10) TYPE P DECIMALS 2.
Konvertierungen zwischen den Datentypen sind teilweise möglich und im Compiler integriert.
2.4.2 Datenobjekte
Datenobjekte müssen im Programm definiert werden und sind nur während der Ausführung
des ABAP-Programms im Hauptspeicher verfügbar. Datenobjekte werden mit der Anweisung
DATA erzeugt. Die Typisierung (Zuweisung eines Datentyps) eines Datenobjektes kann
entweder mit Bezug auf eine vorgeschaltete TYPES-Anweisung, einem Bezug zum Data-
Dictionary oder direkt in der DATA-Anweisung erfolgen. Als typische Datenobjekte können
Einzelfelder, Satzstrukturen und interne Tabellen erzeugt werden.
ABAP-Programmierung FH-Giessen/Friedberg
Prof. Dr. Hohmann V07 Seite 18
Datum: 10.06.2004
Erzeugen von Datenobjekten mit DATA unter Bezug auf einen Datentyp
erstellt mit TYPES
Erstellen von Instanzen/Datenobjekt mit DATA unter bezug auf einen Datentyp erstellt mit
TYPES. ACHTUNG: Es ist empfehlenswert die Instanzenbildung immer mit Bezug auf
Typdeklarationen aus dem DD oder aus dem eigenen Programm (ABAP-Schlüsselwort =
TYPES) anzulegen. Kommt der Datenfeldtyp aus dem DD entfällt der Befehl TYPES, da die
Typdefinition durch das DD erfolgt ist. Tabellen werden unter dem Punkt „Interne Tabellen“
noch genauer betrachtet.
(Die Felder der Instanzstruktur können mit den Namen struktur-feld1 bzw. struktur-feld2
angesprochen werden)
Beispiel:
TYPES: BEGIN OF satz_struktur,
feld1(20) TYPE C,
feld2(10) TYPE C,
END OF satz_struktur.
ABAP-Programmierung FH-Giessen/Friedberg
Prof. Dr. Hohmann V07 Seite 19
Datum: 10.06.2004
TYPES: tabellen_struktur TYPE STANDARD
TABLE OF satz_struktur.
dann
DATA: int_tabelle TYPE tabelle_struktur
ACHTUNG: In R/3 sind über 20.000 verschiedene DB-Tabellen (cirka 17000) und
Strukturtabellen im Data-Dictionary (DD) gespeichert. In Anwendungsprogrammen wird
daher häufig bezug auf solche im DD angelegten Datentypen, Satzstrukturtypen oder
Tabellenstrukturtypen genommen. Standarddatentypen in R/3 sind z.B. CHAR1, CHAR2
usw. die man z.B. bei der Neuanlage einer Datenbanktabelle oder einer Struktur für ein
Dynpro verwenden kann und muss. Solche Datentypen bilden sich elementar aus den oben
genannten Datentypen und sind als Datentypen im DD abgespeichert.
2. Satzstrukturobjekte erzeugen:
Allgemeine Struktur: DATA: BEGIN OF datenobjekt,
komp {TYPE typ / LIKE objektname},
komp {TYPE typ / LIKE objektname}
END OF datenobjekt.
3. Tabellenobjekte erzeugen:
Eine Tabellendeklaration wird ausschließlich über TYPES bzw. über das DD
durchgeführt. Aus Gründen der Kompatibilität zu älteren ABAP-Versionen gibt es
noch den direkten Tabellenbefehl. Dieser sollte nicht mehr verwendet werden.
Sonderform LIKE
Bezieht man sich bei einem Datenobjekt auf keinen Datentyp sondern auf ein Datenobjekt
verwendet man die Anweisung LIKE.
Feldsymbole
Feldsymbole sind Platzhalternamen für Datenobjekte aus dem Hauptspeicher, auf die mit
Hilfe der Datenreferenz (Hauptspeicheradresse des Datenobjektes) zugegriffen werden kann.
Feldsymbole zeigen demzufolge nur auf ein Datenobjekt und reservieren selbst keinen
physischen Speicherplatz. Verweist ein Feldsymbol auf ein Datenfeld, so wird dessen Inhalt
dem Feldsymbol zugewiesen. Generische Feldsymbole(z.B. mit ANY typisiert) übernehmen
den Datentyp des Datenobjekts. Bei vollständiger Typdefinition des Feldsymbols (z.B: TYPE
i) erfolgt eine Prüfung. Feldsymbole müssen deklariert und die Datenobjektinhalte müssen
zugewiesen werden. Die Spitzen-Klammern gehören zum Namen des Feldsymbols. Die
Feldsymboldeklaration erfolgt mit:
Die Zuweisung zum Feldsymbol wird als statisch bezeichnet, wenn der Name des
Datenobjektes bereits beim Aufruf des Programms bekannt ist d.h. mit DATA definiert
wurde. Die Syntax ist:
START-OF-SELECTION.
*---- Zuweisung eines Datenobjektes zum Feldsymbol --------*
ASSIGN name TO <feldsymbol>.
*---- Zuweisung auf das Feldsymbol und damit auf das Datenobjekt----*
MOVE 'Müller' TO <feldsymbol>.
WRITE name.
ABAP-Programmierung FH-Giessen/Friedberg
Prof. Dr. Hohmann V07 Seite 21
Datum: 10.06.2004
Ist der Name des Datenobjektes, dass einem Feldsymbol zugewiesen werden soll, erst zur
Laufzeit bekannt, kann die folgende Variante des ASSIGN-Befehls angewendet werden:
Dabei ist datenfeld der Name des zuzuweisenden Feldes. In diesem Fall wird dies als eine
dynamische Zuweisung bezeichnet. Das folgende Beispiel zeigt eine Zuweisung einer
beliebigen Tabellenstruktur.
*&---------------------------------------------------------------------*
*& Report Dynamische Feldzuweisung *
*& *
*&---------------------------------------------------------------------*
REPORT z01_datenreferenz_v6 .
*----- Tabelle E070 dynamisch ansprechen
DATA: tabname TYPE tabname VALUE 'E070',
*----- Zwischenrecord
record(2048).
*---- Def. des Feldsymbols
FIELD-SYMBOLS: <rec>, <field>.
START-OF-SELECTION.
*---- Lesen der dynamischen Tabelle
SELECT * FROM (tabname) INTO record UP TO 100 ROWS.
*--- Zuweisung der Tabellenstruktur mit Casting in record
ASSIGN record TO <rec> CASTING TYPE (tabname).
*---- Feldweise Ausgabe über ASSING STRUCUTRE... (siehe spätere Erklärung).
DO.
ASSIGN COMPONENT sy-index OF STRUCTURE <rec> TO <field>.
IF sy-subrc <> 0.
EXIT.
ENDIF.
WRITE: /(3) sy-index, <field>.
ENDDO.
ENDSELECT.
Bei der sogenannten impliziten Typangabe (d.h. das Feldsymbol ist Typisiert)
wird der Inhalt des zugewiesenen Datenobjektes so interpretiert, als ob er vom Typ des
Feldsymbols wäre. Länge und Ausrichtung des Datenobjekts müssen mit dem Feldsymbol
verträglich sein. Folgendes Beispiel soll dies verdeutlichen. Die Zuweisung von sy-datum zu
dem Feldsymbol würde ohne den Zusatz CASTING nicht funktionieren.
REPORT z01_datenreferenz_v4 .
START-OF-SELECTION.
*--- Casting ist notwendig, das sy-datum nicht typkompatibel
*--- zu t_datum ist.
ASSIGN sy-datum TO <feldsymbol> CASTING .
Bei der expliziten Typangabe kann ein generisches Feldsymbol typisiert werden. Der Befehl
hierfür ist
Beim Zugriff auf das Feldsymbol wird der Inhalt des zugewiesenen Datenobjektes so
interpretiert, als ob er vom angegebenen Typ wäre. Folgendes Beispiel soll dies verdeutlichen.
REPORT z01_datenreferenz_v5 .
*--- Definition einer Struktur -------------*
TYPES: BEGIN OF t_datum,
jahr(4) TYPE n,
monat(2) TYPE n,
tag(2) TYPE n,
END OF t_datum.
*------ Feldsymbole generisch und n ----------*
FIELD-SYMBOLS: <feldsymbol> TYPE ANY,
<feld> TYPE n.
START-OF-SELECTION.
*---- Zuweisung von sy-datum zum Feldsymbol ---------*
ASSIGN sy-datum TO <feldsymbol> CASTING TYPE t_datum.
WRITE: /, sy-datum.
DO.
ASSIGN COMPONENT sy-index OF STRUCTURE <feldsymbol> TO <feld>.
IF sy-subrc <> 0.
EXIT.
ENDIF.
WRITE: /, 'Index', sy-index, 'Feldwert', <feld>.
ENDDO.
REPORT z01_datenreferenz_v2 .
ABAP-Programmierung FH-Giessen/Friedberg
Prof. Dr. Hohmann V07 Seite 23
Datum: 10.06.2004
DATA: wa_spfli TYPE spfli.
START-OF-SELECTION.
*---- Lesen eines Datensatzes --------------------------------*
SELECT SINGLE * FROM spfli INTO wa_spfli.
*---- Aufruf des Unterprogramms ------------------------------*
PERFORM zeilenausgabe USING wa_spfli.
Datenreferenzen
Da alle Datenobjekte im Hauptspeicher abgelegt sind, verfügt jedes Datenobjekt über eine
Adressierung im Hauptspeicher. Diese Adresse wird als Datenreferenz von Datenobjekten
bezeichnet. Die Adresse eines Datenobjektes wird vom ABAP-Laufzeitsystem festgelegt und
ist nicht vom Entwickler zu beeinflussen. Referenzen werden in Referenzvariablen
gespeichert. In ABAP werden Datenreferenzvariablen für Datenobjekte und
Objektreferenzvariablen zur Methodeninstanzierung unterschieden.
Nach der Definition ist die Datenreferenzvariable initial und verweist auf keine Datenobjekte.
Datenreferenzen können für jedes statische Datenelement mit dem Befehl
beschafft werden. Um allerdings auf den Inhalt eines Datenobjektes zuzugreifen, auf den eine
Referenz zeigt, muss diese zuerst mit dem Befehl
dereferenziert werden, d.h. wieder zu einem Datenobjekt gemacht werden. Hierzu verwnden
wir ein Feldsymbol. Das ->* Symbol gehört zum Datenreferenznamen. Bei erfolgreicher
Zuweisung ist sy-subrc = null. Generische Feldsymbole (ANY) übernehmen den Datentyp des
Datenobjektes. Bei vollständiger Typisierung des Feldsymbols (i, p, d usw.) wird die
Verträglichkeit der Datentypen geprüft. Das nachfolgende Beispiel verdeutlicht nochmals die
Anwendung:
ABAP-Programmierung FH-Giessen/Friedberg
Prof. Dr. Hohmann V07 Seite 24
Datum: 10.06.2004
REPORT z01_datenreferenz .
*------ Datenreferenzvariablen -----------*
DATA: datenref TYPE REF TO data,
datenref_int TYPE REF TO data.
*------ Variable int ----------------------*
DATA: int TYPE i VALUE 5.
*------ Definition von Feldsymbolen ----------------------*
FIELD-SYMBOLS <feldsymbol> TYPE ANY.
START-OF-SELECTION.
*------ Beschaffung der Referenz zu dem Datenfeld ----------------------*
GET REFERENCE OF int INTO datenref.
zu erzeugen. Ein dynamisches Datenobjekt lebt, so lange eine Referenzvariable auf sie zeigt.
Der GARBAGE COLLECTOR löscht bei fehlender Referenz automatisch. Der Datentyp wird
beim Erzeugen des dynamischen Datenfeldes mitgegeben. Folgendes Beispiel soll dies
verdeutlichen.
REPORT z01_datenreferenz_v1 .
*-------- Definition der Referenzvariablen --*
DATA: datenreferenz TYPE REF TO data.
*-------- Anlage des Feldsymbols ------------*
FIELD-SYMBOLS <feldsymbol> TYPE i.
START-OF-SELECTION.
*-------- Erzeugen einer Variablen mit dem Type i --*
CREATE DATA datenreferenz TYPE i.
*-------- Dereferenzierung der Datenreferenz -------*
ASSIGN datenreferenz->* TO <feldsymbol>.
*----- Wertzuweisung und Ausgabe -------------------*
MOVE 1000 TO <feldsymbol>.
WRITE <feldsymbol>.
ABAP-Programmierung FH-Giessen/Friedberg
Prof. Dr. Hohmann V07 Seite 25
Datum: 10.06.2004
2.4.2 PARAMETERS/SELEKTIONSBILD
Die Befehle PARAMETERS und SELECT-OPTIONS erlauben den einfachen Aufbau von
Bildschirmdialogen für das Reporting. Programme mit diesen Befehlen beginnen immer mit
dem Aufruf eines Dialogbildschirms. Die Ablauflogik der Ereignisse für den
Dialogbildschirm ist der Zeitpunkt PBO (AT SELECTION-SCREEN OUPUT) und PAI (AT
SELECTION-SCREEN und AT SELECTION SCREEN ON field). Der aufgerufene
Bildschirmdialog wird erst mit einer Verarbeitungsbestätigung verlassen.
ACHTUNG:
Textbeschreibungen zu einem Selektionsbildschirm können mit Hilfe des Sprungs “Springen-
Textelemente-Selektionstest“ sinngerecht durchgeführt werden. Übersetzungen von Texten in
Fremdsprachen werden durch den Sprung „Springen-Übersetzung“ erzielt.
Die Ausgrenzung umfasst, basierend auf einer Ausgrenzungstabelle, die uns ABAP
automatisch zur Verfügung stellt: VON – BIS oder Einzelwert Ein- und Ausgrenzung. Für die
Select-Anweisung gibt es darüber hinaus eine spezielle WHERE Klausel mit IN für den
Datenbank SELECT. Nachfolgendes Beispiel verdeutlicht die Anwendung von
Selektionsbildern.
START-OF-SELECTION.
Im Hintergrund des SELECT-OPTIONS Befehls wird eine Tabelle mit Kopfsatz geführt. Die
Struktur der Tabelle beinhaltet die Ein- und Ausgrenzungsbedingungen für das Datenfeld und
besteht aus den Feldern SIGN, OPTION, HIGH und LOW. Wenn eine Vorbelegung der
Selections-Option gewünscht wird, kann die Tabelle mit Aus- und Eingrenzungen z.B. im
Event AT SELECTION-SCREEN OUTPUT gefüllt werden.
REPORT z01_option_v1 .
START-OF-SELECTION.
ENDSELECT.
ABAP-Programmierung FH-Giessen/Friedberg
Prof. Dr. Hohmann V07 Seite 27
Datum: 10.06.2004
*----- Ereignisteile PAI----------------*
AT SELECTION-SCREEN OUTPUT.
CLEAR auswahl1.
*---- Vorbelegung
*---- I = Inclusiv, E=Exclusiv
auswahl1-sign = 'I'.
*--- BT=Werte Zwischen, EQ=Wert Gleich
auswahl1-option = 'BT'.
*---- Kleinster und Größter Wert
auswahl1-low = '0001'.
auswahl1-high = '0088'.
*---- Füllten den Tabelle über Kopfsatz
APPEND auswahl1.
*---- Alternativ: Füllen über den WA Bereich
wa-sign = 'E'.
wa-option = 'EQ'.
wa-low = '0017'.
wa-high = '0000'.
APPEND wa TO auswahl1.
*----- Ereignisteile PAO----------------*
AT SELECTION-SCREEN.
Wie das nachfolgende Beispiel zeigt können Selektionsbilder und Parameter auch zu
komplexen Bildschirmen zusammengeführt werden. Das System verwaltet
Selektionsbildschirme/Parameter unter der Dynpronummer 1000. Das nachfolgende Beispiel
zeigt einen komplexen Bildschirm.
Deklaration:
*---- Syntax zum Aufbau eines Selektionsbildschirms----------*
SELECT-OPTIONS s_carrid FOR wa-carrid.
*---- Leerzeile ----------*
SELECTION-SCREEN SKIP.
*---- Parameters und Auswahlbilder
PARAMETERS: p_carrid TYPE spfli-carrid.
*---- Leerzeile ----------*
SELECTION-SCREEN SKIP.
*---- Syntax zum Aufbau eines Selektionsbildschirms----------*
SELECTION-SCREEN BEGIN OF BLOCK sortierung1 WITH FRAME.
*---- Syntax einer CHECKBOX-Eingabe ----------*
PARAMETERS: auswahl1 AS CHECKBOX,
auswahl2 AS CHECKBOX, " DEFAULT 'X',
auswahl3 AS CHECKBOX.
SELECTION-SCREEN END OF BLOCK sortierung1.
*---- Leerzeile ----------*
SELECTION-SCREEN SKIP.
*---- Syntax für RADIOBUTTON----------*
SELECTION-SCREEN BEGIN OF BLOCK sortierung2 WITH FRAME.
PARAMETERS: radio1 RADIOBUTTON GROUP gr1,
radio2 RADIOBUTTON GROUP gr1, " DEFAULT 'X',
radio3 RADIOBUTTON GROUP gr1.
SELECTION-SCREEN END OF BLOCK sortierung2.
ABAP-Programmierung FH-Giessen/Friedberg
Prof. Dr. Hohmann V07 Seite 28
Datum: 10.06.2004
SELECT-OTPION
PARAMETERS
PARAMETERS... AS CHECKBOX
Eigenständige Selektionsbilder
Deklarationsteil:
SELECTION-SCREEN BEGIN OF SCREEN dynnr {TITLE [title]}
{AS WINDOW}
(Selektionsbild-Elemente)
SELECTION-SCREEN END OF SCREEN.
Ablaufteil:
CALL SELECTION-SCREEN dynnr (STARTING AT x1 y1)
(ENDING AT x2 y2).
2.4.4 Systemvariablen
ABAP-Programmierung FH-Giessen/Friedberg
Prof. Dr. Hohmann V07 Seite 29
Datum: 10.06.2004
Das ABAP-System stellt dem Programmierer verschiedene Systemvariablen zur Verfügung.
Systemvariablen werden automatisch mit Werten befüllt und sind im DD typisiert. Eine der
wichtigsten Systemvariablen ist SY-SUBRC. Über diese Variable können z.B. erfolgreiche
Datenbankzugriffe oder die erfolgreiche Bearbeitung einer internen Tabelle kontrolliert
werden. Die Kontrolle des erfolgreichen Zugriffs auf eine Datenbanktabelle wird z.B. wie
folgt realisiert.
o Listenvariablen
§ SY-LSIND = Drilldownvariable in einer Liste, die angibt, wie viele
Detailsprünge bereits durchgeführt wurden.
§ SY-TITLE = Reporttitel
§ SY-LINCT = Zeilenanzahl der REPORT-Anweisung
§ SY-SINSZ = Zeilenbreite der REPORT-Anweisung
§ SY-SROWS = Zeilenanzahl im Fenster (gesamter Scrollbereich)
§ SY-SCOLS = Spaltenanzahl im Fenster
§ SY-PAGNO = Seitennummer der aktuellen Seite
§ SY-LINNO = Zeilennummer der aktuellen Zeile
§ SY-COLNO = Spaltennummer der aktuellen Spalte
§ SY-UCOMM = Funktionscodefeld in einer Liste d.h. welche
Funktionstaste wurde vom Anwender gedrückt.
ABAP-Programmierung FH-Giessen/Friedberg
Prof. Dr. Hohmann V07 Seite 30
Datum: 10.06.2004
2.4.5 Listenausgaben
Grundbefehle
Für die Listenausgabe stehen verschiedene Befehle zur Verfügung.
§ / = Leerzeile
§ , = Trennung der Aufgabe von Variablen oder Textzeilen.
Um ein Komma zu verwenden, muss nach dem ABAP-
Schlüsselwort WRITE ein Doppelpunkt stehen (siehe Beispiel).
§ `textzeile`
§ Zahl = Spaltenpositionierung
WRITE: / 10 `Guten Tag´. „Druck ab Spalte 10“
ACHTUNG: Wollen Sie aus einem Dialogmodul auf eine Liste verzweigen, ist es notwendig
den Reportgenerator aufzurufen. Hierzu müssen Sie in dem Dialogmodul folgende
Anweisung einfügen:
LEAVE TO LIST-PROCESSING (AND RETURN TO SCREEN dynpronr.
Eine Rückkehr zu einem Dynpro ist möglich mit dem Befehl
LEAVE LIST-PROCESSING.
Bei der automatischen Anzeige einer Liste in ausführbaren Programmen setzt die
Laufzeitumgebung einen Standardlistenstatus, der die listenspezifischen Funktionen wie
Blättern usw. enthält.
Sie können mit dem Befehl SET PF-STATUS space die Listenoberfläche selbst
programmieren und die Listendialogstandards ausschalten. Wie bei der
Dialogprogrammierung können Sie nun einen selbstdefinierten Listenstatus vor der
Listenanzeige mit der Anweisung SET PF-STATUS statusname erzeugen.
AT USER-COMMAND
Mit dem Ereignisblock AT USER-COMMAND kann auf entsprechende Benutzeraktionen
innerhalb einer Liste reagiert werden. Der Funktionscode wird im Systemfeld sy-ucomm
zurückgegeben (Bei Dialogprogrammen im definierten OK-CODE)
Beispiel:
AT USER-COMMAND.
CASE sy-ucomm.
WHEN ‘SELE’.
………..
WHEN ‘INFO’.
………..
ENDCASE.
AT LINE-SELECTION.
ABAP-Programmierung FH-Giessen/Friedberg
Prof. Dr. Hohmann V07 Seite 32
Datum: 10.06.2004
Das Ereignis AT LINE-SELECTION wird bei einem Doppelklick auf eine Listenzeile
ausgelöst. Um einen DRILL-DOWN einfach zu realisieren, kann man mit der Anweisung
„HIDE variablen“ den Inhalt der aktuellen Listenzeile (sy-linno) und der aktuellen
Listenstufe (sy-lsind) in einer „unsichtbaren“ Tabelle speichern.
Beispiel:
DATA:
*---- Fluggesellschaften
wa_spfli TYPE spfli,
*---- Flüge der Fluggesellschaften
wa_sflight TYPE sflight.
PARAMETERS: eing(10).
START-OF-SELECTION.
SELECT * FROM spfli INTO wa_spfli.
WRITE: /,
wa_spfli-carrid,
wa_spfli-connid,
wa_spfli-countryfr,
wa_spfli-cityfrom,
wa_spfli-airpfrom,
wa_spfli-countryto,
wa_spfli-cityto.
HIDE: wa_spfli-carrid, wa_spfli-connid.
ENDSELECT.
*---- Überschrift.
TOP-OF-PAGE.
WRITE: / 'Fluggesellschaften'.
ULINE.
WRITE: /, wa_sflight-carrid,
wa_sflight-connid,
wa_sflight-fldate,
wa_sflight-price,
wa_sflight-currency,
wa_sflight-planetype,
ABAP-Programmierung FH-Giessen/Friedberg
Prof. Dr. Hohmann V07 Seite 33
Datum: 10.06.2004
wa_sflight-seatsmax,
wa_sflight-seatsocc,
wa_sflight-paymentsum,
wa_sflight-seatsmax_b,
wa_sflight-seatsocc_b,
wa_sflight-seatsmax_f,
wa_sflight-seatsocc_f.
ENDSELECT.
IF sy-subrc <> 0.
WRITE: 'keine Ergebnisse'.
ENDIF.
WHEN OTHERS.
WRITE: 'Keine Selektion', sy-lsind.
ENDCASE.
2.4.6 Zeichenkettenbearbeitung
Mit den folgenden Befehlen können Zeichenketten bearbeitet werden:
2.4.7 Grundrechenarten
Der Computebefehl kann alle notwendigen Rechenoperationen durchführen.
2.4.8 Variablenübertragung
Zur Variablenübertragung kann der MOVE-Befehl verwendet werden. Mit MOVE erfolgt die
Werteübertragung von LINKS nach RECHTS. Wird kein MOVE verwendet, ist die
Wertübertragung von RECHTS nach LINKS.
Allgemeine Struktur: MOVE source TO ziel.
ziel = source.
Allgemeine Struktur:
IF bedingung_1.
<anweisungsblock_1>
ELSEIF bedingung_2.
<anweisungsblock_2>
ELSE.
<anweisungsblock_n>
ENDIF.
IF feld1 = 10.
WRITE: / `Die Zahl 10 ist aufgetreten´´.
ELSEIF feld1 = 20.
WRITE: / ´Die Zahl 20 ist aufgetreten´.
ENDIF.
WHEN OTHERS.
<anweisungsblock_n>
ENDCASE.
CASE feld1.
WHEN 10.
WRITE: / ´Die Zahl 10 ist aufgetreten´.
WHEN 20.
WRITE: / ´Die Zahl 20 ist aufgetreten´.
WHEN OTHERS.
WRITE ´andere Zahlen´.
ENDCASE.
ABAP-Programmierung FH-Giessen/Friedberg
Prof. Dr. Hohmann V07 Seite 37
Datum: 10.06.2004
Allgemeine Struktur:
DO [ n TIMES]
<anweisungsblock>
ENDDO.
DO 4 TIMES.
WRITE: / ´Testausgabe´.
ENDDO
• WHILE = Die Anzahl der Durchgänge zwischen WHILE und ENDWHILE ist von
einer Bedingung abhängig.
Allgemeine Struktur:
WHILE bedingung.
<anweisungsblock>
ENDWHILE.
zaehler = zero.
WHILE zaehler = 5.
WRITE: / ´Testausgabe´.
COMPUTE zaehler = zaehler + 1.
ENDWHILE.
Allgemeine Struktur:
LOOP AT itab INTO wa
FROM idx1 TO idx2
WHERE log_ausdruck
<anweisungsblock>
ENDLOOP.
LOOP AT interne_tabelle.
WRITE: / tabellen_feld1, tabellen_feld2.
ENDLOOP.
• Standard-Tabelle:
TYPES: BEGIN OF struktur_satz
feld1(10) TYPE C,
feld2(10) TYPE C,
END OF struktur_satz.
TYPES : stru_ tabelle TYPE STANDARD TABLE OF struktur_satz.
oder
§ Sortierte Tabelle:
TYPES: BEGIN OF struktur_satz
feld1(10) TYPE C,
feld2(10) TYPE C,
ABAP-Programmierung FH-Giessen/Friedberg
Prof. Dr. Hohmann V07 Seite 40
Datum: 10.06.2004
END OF struktur_satz.
oder
§ Hash-Tabelle :
TYPES: stru_tabelle TYPE HASHED TABLE OF struktur_satz
WITH UNIQUE KEY feld1.
• APPEND = Append hängt den Inhalt einer Struktur an eine interne Tabelle an. Diese
Operation wird nur bei Standardtabellen unterstützt.
Allgemeine Struktur:
APPEND {zeile / LINES OF jtab} TO itab.
• INSERT = fügt den Inhalt der Struktur in eine interne Tabelle ein. Bei Standardtabellen
bewirkt dies ein Anhängen, bei sortierten Tabellen ein sortiertes Einfügen
und bei Hash-Tabellen ein Einfügen gemäß einem Hash-Algorithmus.
INSERT wirkt bei Standardtabellen wie APPEND.
Allgemeine Struktur:
INSERT {zeile / LINES OF jtab}
INTO TABLE itab.
oder
• READ TABLE = Read kopiert den Inhalt einer Zeile einer internen Tabelle in eine
Struktur.
Allgemeine Struktur:
READ TABLE itab INTO wa INDEX idx .
ABAP-Programmierung FH-Giessen/Friedberg
Prof. Dr. Hohmann V07 Seite 41
Datum: 10.06.2004
oder
• MODIFY = Modify überschreibt eine Zeile einer internen Tabelle mit dem Inhalt einer
Struktur.
Allgemeine Struktur:
MODIFY TABLE itab FROM zeile.
ABAP-Programmierung FH-Giessen/Friedberg
Prof. Dr. Hohmann V07 Seite 42
Datum: 10.06.2004
oder
MODIFY itab FROM zeile INDEX idx.
• SORT = Sortieren der Standard- und Hash-Tabellen nach beliebigen Feldern der Tabelle
Allgemeine Struktur:
SORT itab ASCENDING [AS TEXT]
DESCENDING
BY comp ASCENDING [AS TEXT]
DESCENDING
<anweisungsblock>
ENDLOOP.
2.4.11 Datenbankzugriffe
Funktion Aufruf Kommentar
Lesen von SELECT Schlüsselwort
Datenbankinhalten in einen <felder> Datenfelder/Datensatz
Datenbereich FROM <tabelle> Tabellenname
INTO <wa> Datenbereich (DATA)
WHERE <Bedingung> Ausgrenzung
GROUP BY feld
HAVING feld
ORDER BY feld
<ABAP-Anweisungen>
ENDSELECT.
Allgemeine Befehle
o SELECT = Lesen aus einer Datenbanktabelle und Abstellen der Ergebnisse in eine
interne Tabelle (Workbereich mit DATA definiert) oder in einem Satz (Workbereich mit
DATA definiert).
Erfolgreiche Select-Zugriffe werden mit dem Wert 0 in der Systemvariablen SY-
SUBRC quittiert.
Für die Änderungen von Datenbanktabelleninhalten gibt es die Open SQL-
Anweisungen. Beachten Sie allerdings, dass diese Anweisungen weder
Berechtigungen noch die Datenkonsistenz überprüfen:
• INSERT: Mit der Anweisung INSERT können Sie Zeilen in eine Datenbanktabelle
einfügen. Der Arbeitsbereich (satz_tabelle) sollte die gleiche Struktur wie die
Datenbanktabelle haben. Die Operation kann nur dann durchgeführt werden, wenn die
Datenbanktabelle noch keinen Eintrag mit dem gleichen Primärschlüssel hat. Ansonsten
wird in sy-subrc der Fehlercode 4 eingestellt.
Einfügen von einem Satz:
INSERT dbtabelle FROM satz.
oder
INSERT INTO dbtabelle VALUES satz.
Einfügen über eine interne Tabelle:
INSERT dbtabelle FROM TABLE int_tabelle.
Der Zusatz ACCEPTING DUPLICATE KEYS verhindert den Abbruch bei
doppeltem Primärschlüssel
• DELETE: Eine Zeile in einer Datenbanktabelle kann mit DELETE gelöscht werden.
Die Auswahl der Zeile kann entweder über die WHERE-Klausel erfolgen oder es kann der
Arbeitsbereich verwendet werden.
Löschen mit der WHERE-Klausel
DELETE FROM dbtabelle WHERE feld1=100.
Löschen über den Arbeitsbereich
DELETE dbtabelle FROM satz.
Löschen über eine interne Tabelle
DELETE dbtabelle FROM TABLE int_tabelle.
Kontrolle der Operation mit folgendem Befehl.
IF sy-subrc NE 0.
ROLLBACK WORK.
WRITE: / ‘Fehlermeldung’.
ENDIF.
Einzelsatzlesen d.h. es lassen sich einzelne Sätze aus der Datenbanktabelle lesen. Mit der
CORRESPONDING FIELDS OF der INTO-Klausel füllen Sie den Zielbereich Feldweise,
wobei nur die Felder berücksichtigt werden, die namensgleich sind.
o SELECT SINGLE * FROM tabelle INTO workbereich.
o SELECT SINGLE * FROM tabelle INTO CORRESPONDING FIELD OF
workbereich WHERE feld1 = 100 and feld2 = 200.
LOGISCHE Datenbanken
o Logische Datenbanken
ACHTUNG: Falls wiederverwendbare Komponenten vorhanden sind, die
kompliziertere Datenbeschaffung kapseln, sollten diese Komponenten verwendet
werden. Es stehen vier Techniken zur Verfügung
§ Methoden von globalen Klassen aufrufen
§ Methoden von Business-Objekten aufrufen,
§ Funktionsbausteine aufrufen,
§ Logische Datenbanken einbinden. Logische Datenbanken sind
Datenbeschaffungsprogramme, die logisch zusammengehörende Daten in
hierarchischer Reihenfolge liefern. Detailinformationen zur Einbindung von
logischen Datenbanken entnehmen Sie bitte der SAP-Bibliothek BASIS – ABAP
Programmierung und Laufzeitumgebung – ABAP Datenbankzugriffe – Logische
Datenbanken.
2.4.12 MESSAGE
Die Nachrichten sind notwendig, um Fehlermeldungen usw. am Bildschirm für
Dialogprogramme anzuzeigen. Zur Pflege der Nachrichten steht die Transaktion SE91 zur
Verfügung. Die Nachrichten können nach folgenden Klassen unterschieden werden.
Die Anlage einer Message erfolgt durch Vorwärtsnavigation. Für die Anlage einer eigenen
Nachrichtenklasse verwenden Sie einen Namen im Kundennamensraum Y oder Z. Um eine
Nachricht anzulegen, verwenden Sie dreistellige Nummern und die entsprechende
Nachrichtenklasse. Innerhalb des Nachrichtenkurztextes können Sie bis zu vier (4)
Übergabeparameter einsteuern. Dies erfolgt mit dem Platzhalter „&1“ , „&2“ usw.. Beispiel:
„Satz &1 konnte nicht angelegt werden“. Die Nachrichten stehen in der Systemtabelle T100.
Eine Nachrichtenklasse kann auch für ein Programm hinter dem Befehl REPORT festgelegt
werden.
2.4.13 Berechtigungsschutz
AUTHORITY-CHECK = SAP verfügt über ein komplexes Berechtigungs- und
Rollensystem zur Verhinderung von nicht zugelassenen Daten- und Programmzugriffen. Mit
dem Schlüsselwort AUTHORITY-CHECK und entsprechender Übergabeparameter werden
die Berechtigungen geprüft und in der Systemvariablen SY-SUBRC zurückgegeben.
ABAP-Programmierung FH-Giessen/Friedberg
Prof. Dr. Hohmann V07 Seite 50
Datum: 10.06.2004
Beispiel für Zugriff auf Datenbanksatz und deren Berechtigung:
ACTYT = Kennung, die Art der Aktivität auf die Datenbank. Die Arten der Aktivitäten sind
01=Anlagen, 02=Ändern, 03=Anzeigen, 04=Löschen
2.4.14 Modularisierung
Zur Modularisierung von ABAP-Programmen stehen verschiedene Konzepte zur Verfügung
• PERFORM/FORM: Unterprogramme als lokale Prozeduren, in jedem ABAP-Programm
verwendbar. Die Daten können global oder lokal vereinbart werden. Es gibt verschiedene
Arten von Parameterschnittstellen. Nachfolgendes Bild zeigt die Grundlogik:
ABAP-Programm
Unterprogramm Unterprogramm
FORM FORM
... ...
ENDFORM ENDFORM
ABAP-Programm
Verarbeitungs-
block
CALL FUNCTION
ABAP-Programm
Funktions- Funktions-
Deklarations- baustein baustein
teil für FUNCTION FUNCTION
globale Daten ... ...
ENDFUNCTION ENDFUNCTION
Funktionsgruppe
ABAP-Programmierung FH-Giessen/Friedberg
Prof. Dr. Hohmann V07 Seite 51
Datum: 10.06.2004
ENDFORM.
Die Art und Weise, wie Daten des Hauptprogramms (Aktualparameter) den Datenobjekten
des Unterprogramms (Formalparameter) übergeben werden, wird in der Schnittstelle
festgelegt. Es gibt drei Möglichkeiten
ACHTUNG:
Für die Integration eines Funktionsaufrufes in Ihr Programm
verwenden Sie immer die MUSTER Funktion. Der Erfolg eines Funktionsaufrufs
wird über die Systemvariable SY-SUBRC = 0 (0=Erfolgreich) abgefragt. Die
Erstellung einer Funktion wird mit Hilfe des Funktionsbilders SE37 Function
Builder durchgeführt.
Die Anlage und Verwaltung eines Funktionsbausteins erfolgt mit dem Funktionsbuilder.
Um Funktionsbausteine zu erfassen wird zunächst eine Funktionsgruppe im Objekt-
Navigator angelegt, anschließend wird der Funktionsbaustein angelegt. Der
Funktionsbuilder ist in der Weise ausgestaltet, dass mit Hilfe der TAB-Laschen im
Programm, die notwendigen Angaben gemacht werden können.
CLASS-Konzept:
Bildschirmstandardmasken
Ein Dynpro ist nichts anderes als eine Dialogmaske.
o CALL SCREEN ####. (4-stellige Nummer) = Aufruf von Dynpros. Voraussetzung für
das Befüllen von Dynpros aus der Anwendung ist die TABLES Anweisung. TABLES
erzeugt eine Instanz, um Daten an das Dynpro zu senden. Mit der Vorwärtsnavigation
können nicht angelegte Dynpros erzeugt werden. Dynpros werden über eine vierstellige
Nummer identifiziert.
o TABLES dbtabelle = Für Dynpros wird die Instanz vorzugsweise mit TABLES dbtabelle
erstellt. TABLES wirkt dann wie DATA und dient als Kommunikationsbereich zu den
DYNPROS. Mit der Tablesanweisung werden Kommunikationsbereiche (workbereiche)
für das Dynpro erzeugt. Dies ist in zukünftigen ABAP-Standards der einzige
Anwendungsfall für die Anweisung TABLES. Hinter dem Schlüsselwort TABLES kann
eine DB-Tabelle oder DD-Struktur stehen. Mit der Anweisung TABLES wird eine
Instanz für das Führen von Dynpro-Workbereichen geschaffen. Daten in diesem Bereich
werden durch MOVE oder MOVE-CORRESPONDING geschoben. Z.B. TABLES
sflight.
o LEAVE TO SCREEN nummer = Innerhalb der MODULE kann auf eine andere Maske
gesprungen werden.
SUBMASKEN
Innerhalb eines Dynpros können Submasken angelegt werden. Hierzu ist es notwendig auf die
Hauptmaske einen Bereich für die Submaske zu reservieren. Diese auf der Hauptmaske
angelegte Submaske erhält einen eindeutigen Namen (so wie eine Variable) , der in der
Ablauflogik des Dynpros im PBO mit folgendem Befehl für die Submaske vorbereitet wird:
nachbearbeitet wird. Die Stellung des Befehls in der Ablauflogik des Dynpros zeigt das
folgende Beispiel:
MODULE user_command_0100.
CALL SUBSCREEN SUBTEST.
Die in der Hauptmaske anzuzeigende Submaske wird wie die Hauptmaske als Dynpro
entworfen, allerdings mit der Eigenschaft „Submaske“. Submasken können keinen
OK_CODE besitzen, sondern teilen’ sich den OK_CODE mit der Hauptmaske. Eine sinnvolle
Anwendung für Submasken ist, innerhalb einer Hauptmaske je nach Anwendungsfall
unterschiedliche Submasken anzuzeigen.
Submasken-
bereich
ABAP-Programmierung FH-Giessen/Friedberg
Prof. Dr. Hohmann V07 Seite 55
Datum: 10.06.2004
GUI-STATUS-ZEILEN
Um eine Menü-, Drucktasten- und Funktionstastenzeile anzulegen verfügt das Programm über
einen eigenen Designer. Die Aktivierung der GUI-Statuszeile in einem Dynpro erfolgt mit
dem Befehl
SET PF-STATUS ‚name’
in dem „MODUL ‚name’ OUTPUT“ des Hauptprogramms. Die Anlage der anzuzeigenden
GUI-STATI erfolgt dann durch Vorwärtsnavigation. Sofern das „MODUL ‚name’ OUPUT“
mit Hilfe der Vorwärtsnavigation aus dem Screen-Painter angelegt wurde, generiert das
Programm die SET PF_STATUS Zeile bereits als Kommentar in das Modul ein. Die
Auswertung der gedrückten Tasten oder des Menüs erfolgt im PAI über den OKCODE.
Funktionstasten Menüleiste
Überschrift
Drucktastenleiste
ACHTUNG: Nicht nur bei der Dialogprogrammierung ist die Programmierung von GUI-
STATUS-Zeilen möglich sondern auch bei der Reportprogrammierung. Bei der
Reportprogrammierung können die gedrückten Tasten oder die ausgewählten Menüs im
Ereignisbereich AT USER-COMMAND ausgewertet werden. Der Rückgabewert für die
gedrückte Taste steht in der Systemvariablen sy-ucomm.
Beispiel für die Auswertung der gedrückten Tasten in einem REPORT:
AT USER-COMMAND.
CASE sy-ucomm.
WHEN ‘SELE’.
……..
WHEN ‘BACK’.
ENDCASE.
ABAP-Programmierung FH-Giessen/Friedberg
Prof. Dr. Hohmann V07 Seite 56
Datum: 10.06.2004
.
Selbstprogrammierte Eingabeüberprüfungen
Es ist häufig notwendig, auf ein Datenfeld in einem Dynpro eine Eingabeüberprüfung
vorzunehmen bzw. mit Hilfe des gerade eingegebenen Feldes z.B. einen Datensatz zu lesen.
Um eine Eingabeprüfung vorzunehmen stehen folgende Befehle zur Verfügung:
• Ausführen des PAI nachdem man auf dem Dynprofeld gestanden hat und dieses
verlässt.
FIELD dynprofeld MODULE modulname ON INPUT.
• Aufruf des Moduls, wenn sich der Inhaltswert eines Dynprofeldes verändert.
FIELD dynprofeld MODULE modulname ON REQUEST.
• Aufruf des Moduls, wenn das Feld verlassen wird
FIELD dynprofeld MODULE modulname.
Editiermodul einschalten
Automatische
Leseverbesserung
des Sourcecodes
Programm-
komponentensicht
Aktivierung eines
Programms
ABAP-Programmierung FH-Giessen/Friedberg
Prof. Dr. Hohmann V07 Seite 58
Datum: 10.06.2004
Weitere wichtige Funktionen sind mit einem rechten Mausclick zu erreichen. Hier können die
Programme ausgeführt oder im Debugging-Mode ausgeführt werden. Programme können
kopiert, gelöscht und umbenannt werden. Neue Objekte können angelegt werden.
ABAP-Programmierung FH-Giessen/Friedberg
Prof. Dr. Hohmann V07 Seite 59
Datum: 10.06.2004
2.5.2 Data Dictionary (DD) (SE11)
Im ABAP-Dictionary werden alle notwendigen Informationen über die Datenbanktabellen
datenbank- und plattformunabhängig gespeichert. Damit muss der Programmierer über keine
Kenntnisse von konkreten Aufbewahrungsorten, Laufwerken usw. der Daten verfügen. Das
ABAP-DD kann als ein Informationssammelbecken verstanden werden, deren Funktionalität
über die eines üblichen relationalen Datenbanksystems hinausgeht. Wichtige Bestandteile des
Data-Dictionary sind die Tabellen, Felder, Datenelemente und Domänen.
• Tabellen: Eine Tabelle umfasst mehrere Felder, die die Eigenschaften eines realen
Objektes beschreiben z.B. Tabelle Kunden bestehend aus den Feldern
Kundennummer, Kundenname und den Eigenschaften numerisch für Kundennummer
und alphanumerisch für Kundenname.
• Felder: Felder sind die einzelnen Spalten einer Tabelle und haben technische
Eigenschaften, die sie von den Datenelementen vererbt bekommen. ACHTUNG: Am
Anfang einer SAP-Tabelle steht immer das Feld MANDT mit dem Datenelement
MANDT
Verwendung von
eingebauten
Datentypen
ABAP-Programmierung FH-Giessen/Friedberg
Prof. Dr. Hohmann V07 Seite 60
Datum: 10.06.2004
Demzufolge verfügt das DD von ABAP über eine Vererbungshierarchie, welche bei der
Domäne beginnt, sich über das Datenelement bis zum Feld einer Tabelle fortsetzt. Bei der
Neuanlage von Tabellen sind daher die notwendigen Datenelemente und Domänen zu
definieren bzw. aus den bestehenden Datenelementen und Domänen zu entnehmen. Bei
manchen Datenfeldern lohnt sich nicht die aufwendige Anlage von Datenelement und
Domäne. Daher gibt es auch die Möglichkeit, Tabellenfelder mit direktem Bezug auf einen
Datentyp, also ohne Datenelement und Domäne, anzulegen.
• Definition der Felder über eingebaute Felder oder über ein eigens definiertes
Datenelement
• Festlegung von einem Primärkey
Grafische
Darstellung von
Fremdkeydefinition Verknüpfungen
Umschaltung Typisierung
- über Datenelemente
- über eingebaute Typen
START-OF-SELECTION.
FORMAT COLOR 4.
move 1 to zeile.
write: / 'Hauptanzeige', sy-lsind.
perform ausgabe.
*--- Anlage einer Statuszeile
SET PF-STATUS 'STAT1'.
*--- Abfangen des indivuellen Funktionscodes
AT USER-COMMAND.
CASE sy-ucomm.
WHEN 'FKT1'.
WRITE: / 'FUNKTION1', sy-lsind.
move 100 to zeile.
FORMAT COLOR 5.
PERFORM ausgabe.
WHEN 'FKT2'.
WRITE: / 'FUNKTION2', sy-lsind.
FORMAT COLOR 6.
move 200 to zeile.
PERFORM ausgabe.
ENDCASE.
*---------------------------------------------------------------------*
Mit Doppelclick auf die “STAT1” wird das Statusanlagefenster geöffnet, in dem als
Pflichteingabe ein Kurztest eingegeben werden muss und anschließend wird auf das
Hauptfenster der Statuszeilenpflege gesprungen.
ABAP-Programmierung FH-Giessen/Friedberg
Prof. Dr. Hohmann V07 Seite 65
Datum: 10.06.2004
Standardvorbelegung
Um die Standardfunktionen z.B. eines Reports zu erhalten ist es notwendig, vor Eingabe der
individuellen Funktionstasten/Menüleiste/Drucktastenleiste eine Vorlage zu generieren. Dies
erfolgt über das Menü mit (ZUSÄTZE/VORLAGE abgleichen)
ABAP-Programmierung FH-Giessen/Friedberg
Prof. Dr. Hohmann V07 Seite 66
Datum: 10.06.2004
Damit ist die notwendige Standardstatuszeile erzeugt und nun es kann eine individuelle
Erweiterung vorgenommen werden. Die Grundlogik ist hierbei wie folgt:
ABAP-Programmierung FH-Giessen/Friedberg
Prof. Dr. Hohmann V07 Seite 67
Datum: 10.06.2004
• Jedem Menüleistenpunkt, jeder Drucktaste und jeder Funktionstaste ist ein Kurzcode
zugeordnet.
• Mit der Wahl von einem Menüleistenpunkt, einer Drucktaste oder einer Funktionstaste
wird der hinterlegte Code in die Systemvariable SY-UCOMM übertragen.
• Im Programm kann die Auswertung der Drucktaste innerhalb des Events AT USER-
COMMAND ausgewertet und damit individuell reagiert werden.
Die Bedienoberfläche ist umfangreich und ermöglicht neben der Anlage auch den Test und
was nicht zu vergessen ist, die Aktivierung.
Testmöglichkeit
Details anzeigen
Für die Definition von individuellen Bedienleisten stehen folgende Elemente zur Verfügung:
• Symbolleiste: Die Symbolleiste ist fest definiert
• Funktionstasten: Funktionstasten sind teilweise fest belegt bzw. frei für die Definition
• Drucktastenzeile: Anzeige von Drucktasten in Form von Bitmaps oder Texten
• Menüzeilen
Symbolleiste
Die Symbolleiste ist „fest“ definiert und entspricht dem SAP-Standard. Sie kann nicht
geändert werden. Allerdings können alle Symbole außer der Datenfreigabetaste aktiviert oder
deaktiviert werden.
ABAP-Programmierung FH-Giessen/Friedberg
Prof. Dr. Hohmann V07 Seite 68
Datum: 10.06.2004
Funktionstasten
Es gibt festbelegte und freie Funktionstasten. Freie Funktionstasten werden im unteren Teil
der Symbolleiste angezeigt. Hier können individuelle Funktionstasten definiert werden.
Funktionstasten können im Übrigen alle Funktionscodes sein, die einen Funktionscode
auslösen können z.B. CTRL A.
Die Funktionstaste z.B. F1(Fragezeichen), F3(Grüner Pfeil), F4(Lupe) und F10(Menüleiste
aktivieren), F11(Gelber Ordner-Symbol), F12(Rotes Kreuz), F15 (Gelder Pfeil) werden durch
das System erkannt und ausgewertet. Den Funktionstasten F1, F4 und F10 sind keine
Systemcodes zugeordnet. Weitere Funktionstasten sind von SAP für bestimmte
Anwendungen reserviert, solche sind z.B. Löschen oder Selektieren und können einer Liste
von definierten Funktionscodes entnommen werden. Empfohlene Funktionstastenbelegungen
werden im oberen Teil angezeigt.
Die Anlage und Änderung der Eigenschaften einer individuellen, definierten Funktionstaste
z.B. „FUNKT1“ erfolgt durch Vorwärtsnavigation und im Fenster „ Funktionseigenschaften“
werden sie angepasst. Angelegte Funktionstasten können in der Drucktastenleiste zur Anzeige
gebracht werden.
ABAP-Programmierung FH-Giessen/Friedberg
Prof. Dr. Hohmann V07 Seite 69
Datum: 10.06.2004
Drucktastenleiste und Menüzeile
Mit der Drucktastenleiste werden die Funktionstasten zur Anzeige auf dem Bildschirm
gebracht. Anwendungsmenüs werden in der Menüleiste angezeigt.
Definition von
Menüeinträgen
Anzeige von
definierten
Funktionstasten
Syntax/Aktivierung/Test
Im Hauptmenü müssen die definierten Statuszeilen auf Syntax geprüft und aktiviert werden.
Nur aktivierte Statuszeilen werden erkannt. Mit dem Testsymbol kann das Erscheinungsbild
der Statuszeile unabhängig vom Programm gesichtet werden.
ABAP-Programmierung FH-Giessen/Friedberg
Prof. Dr. Hohmann V07 Seite 70
Datum: 10.06.2004
2.5.4 Debugger
Der Start des Debuggers erfolgt durch Aufruf des syntaxabhängigen Menüs und Wahl der
Punkte ‚Ausführen, Debugging’.
ABAP-Programmierung FH-Giessen/Friedberg
Prof. Dr. Hohmann V07 Seite 71
Datum: 10.06.2004
Die Form des Debugging-Vorgangs und dessen Umfang, d.h. ob z.B. auch die vom Runtime
automatisch dazugenerierten System-Programmteile durchlaufen werden, wird in dem
Menüpunkt ‚Einstellungen’ des Debuggers festgelegt. Mit den Push-Buttens „Felder, Tabelle,
Breakpoints usw.“ können die Sichten auf unterschiedliche Debuggingobjekte eingerichtet
werden. Im nachfolgenden Bild sind die wichtigen Funktionen angezeigt.
Sichten auf
Debuggingobjekte
Zeilensprünge durch
das Programm
Position im
Programm
(Doppelclick Schritte durch das
setzt Breakpoint) Programm
Anzeige von
Feldinhalten, Tabellen ,
Adressen usw.
ABAP-Programmierung FH-Giessen/Friedberg
Prof. Dr. Hohmann V07 Seite 72
Datum: 10.06.2004
3. Ausgewählte Programmbeispiele
3.1 DATA und TYPES
Datentypen mit Längenangaben: Im folgenden sind Beispiele für
Datentypen mit Längenangaben zu finden.
HEX x
DATA hex(3) TYPE x.
Hex = ‘F72AB3”.
*Inhalt = 247, 42,179
Numerischer Typ I
TYPES: tindex TYPE i.
DATA: index TYPE tindex.
START-OF-SELECTION.
index = 5.
DO index TIMES.
WRITE: ‚Zahl’, index.
ENDDO.
ABAP-Programmierung FH-Giessen/Friedberg
Prof. Dr. Hohmann V07 Seite 73
Datum: 10.06.2004
Datentype d (Datum)
DATA datum TYPE d.
START-OF-SELECTION.
Datum = sy-datum.
Datum = datum + 2.
WRITE datum.
Zeittyp t (HHMMSS)
DATA zeit TYPE t.
START-OF-SELECTION.
zeit = sy-uzeit.
Zeit = zeit + 3600.
WRITE zeit.
zeit+2(4) = ‚0000’.
WRITE zeit.
BESTIMMUNG von Datentypen: Welcher Datentyp ein Feld hat kann mit dem
Befehl DESCRIBE ermittelt werden. Der Datentyp ANY ist z.B. vollständig generisch und
kann jeden Datentyp automatisch annehmen. Anhand des nachfolgenden Beispiel wird
gezeigt, wie mit generischen Datentypen gearbeitet wird. Mit dem Befehl DESCRIBE können
die Feldeigenschaften ermittelt werden.
REPORT z01_data_type_v1 .
DATA: f1(20) TYPE c,
f2 TYPE p DECIMALS 2.
ABAP-Programmierung FH-Giessen/Friedberg
Prof. Dr. Hohmann V07 Seite 74
Datum: 10.06.2004
START-OF-SELECTION.
PERFORM: test USING f1,
test USING f2.
*---------------------------------------------------------------------*
* FORM test
*---------------------------------------------------------------------*
*
*---------------------------------------------------------------------*
* --> U_INPUT
*---------------------------------------------------------------------*
FORM test USING u_input TYPE any.
DATA: t(1) TYPE c,
l TYPE i,
d TYPE i.
Konstanten
CONSTANTS pi TYPE f VALUE ‘3.14159265359’.
DATA: radium TYPE p DECIMALS 2,
Area TYPE p DECIMALS 2.
START-OF-SELECTION.
Area = pi * radiums ** 2.
REPORT z01_data_type_v2 .
*----- Struktur mit zwei Feldern aus dem DD ------------*
DATA: BEGIN OF wa,
carrid TYPE spfli-carrid VALUE 'LH',
connid TYPE spfli-connid VALUE '400',
END OF wa.
*--- Workingstruktur von spfli (siehe Vorwärtnavigation DD)
data: wa_spfli type spfli.
START-OF-SELECTION.
*---- Übertragen der Feldinhalt carrid, connid
MOVE-CORRESPONDING wa TO wa_spfli.
START-OF-SELECTION.
erg = nr1 / nr2.
WRITE erg.
start-of-selection.
*------ Beachten Sie die Namenszusammensetzung ----*
adresse-name = 'Peter Maier'.
adresse-strasse-name = 'Obergasse'.
adresse-strasse-nr = '12'.
adresse-city-name = 'Wetzlar'.
START-OF-SELECTION.
ABAP-Programmierung FH-Giessen/Friedberg
Prof. Dr. Hohmann V07 Seite 76
Datum: 10.06.2004
adresse-name = 'Müller'.
adresse-name_str = 'Obergasse'.
adresse-plz_o = '35578'.
ACHTUNG: Die meisten Zugriffe sind sowohl über Index als auch über Schlüssel
möglich. Die Systemvariable SY-TABIX enthält den letzten Index.
*&---------------------------------------------------------------------
*& Report Z_INTERNE_TABELLEN_B02_01 *
*& *
*&---------------------------------------------------------------------*
REPORT z_interne_tabellen_b02_01 .
INITIALIZATION.
CLEAR itab_std.
START-OF-SELECTION.
*--- Verarbeitung von STd-Tabellen
PERFORM fuelle_std.
PERFORM verarbeite_std.
ULINE.
ULINE.
PERFORM fuelle_index.
PERFORM verarbeite_index.
ULINE.
ULINE.
PERFORM db_tabelle.
*&--------------------------------------------------------------------*
*& Form verarbeite_std
*&--------------------------------------------------------------------*
* text
*---------------------------------------------------------------------*
FORM verarbeite_std.
*--- Sortierung einer Tabelle
SORT itab_std BY vname.
*--- Ausgabe einer Tabelle
WRITE: / 'Ausgabe über eine Loop-Schleife', /.
LOOP AT itab_std INTO wa.
WRITE: wa-vname, wa-nname, /.
ENDLOOP.
ULINE.
*---- Alle Zugriff entweder über Index oder Schlüssel -------------*
*---- Direktzugriff über einen Schlüssel --------------------------*
MOVE 'rühl' TO wa-nname.
READ TABLE itab_std WITH TABLE KEY nname = wa-nname INTO wa.
PERFORM fehlermeldung.
WRITE: / 'Direktzugriff über Key', 60 wa-vname, wa-nname.
*---- Direktzugriff über eine Index
READ TABLE itab_std INDEX 1 INTO wa.
WRITE: / 'Direktzugriff über Index', 60 wa-vname, wa-nname.
*--- Index der Tabelle ----------------------------------------*
WRITE: / 'Akuteller Index letzer Zugriff', sy-tabix.
ULINE.
ULINE.
ENDFORM. "verarbeite_std
*&--------------------------------------------------------------------*
*& Form fuelle_std
*&--------------------------------------------------------------------*
* text
*---------------------------------------------------------------------*
FORM fuelle_std.
*---- Befüllen der Tabelle
wa-vname = 'peter'.
wa-nname = 'hohmann'.
APPEND wa TO itab_std.
PERFORM fehlermeldung.
wa-vname = 'peter'.
wa-nname = 'hohmann'.
APPEND wa TO itab_std.
PERFORM fehlermeldung.
wa-vname = 'erich'.
wa-nname = 'rühl'.
APPEND wa TO itab_std.
PERFORM fehlermeldung.
wa-vname = 'klaus'.
wa-nname = 'armbrüster'.
APPEND wa TO itab_std.
PERFORM fehlermeldung.
ENDFORM. "fuelle_std
*&--------------------------------------------------------------------*
*& Form fehlermeldung
*&--------------------------------------------------------------------*
* text
*---------------------------------------------------------------------*
FORM fehlermeldung.
IF sy-subrc <> 0.
WRITE: 'Fehler in der Tabelle'.
ENDIF.
ENDFORM. "fehlermeldung
*&--------------------------------------------------------------------*
*& Form db_tabelle
*&--------------------------------------------------------------------*
* text
*---------------------------------------------------------------------*
FORM db_tabelle.
ENDFORM. "db_tabelle
*&--------------------------------------------------------------------*
*& Form verarbeite_index
*&--------------------------------------------------------------------*
* text
*---------------------------------------------------------------------*
FORM verarbeite_index.
ULINE.
WRITE: / 'Ausgabe der Tabelle mit Sorted table', /.
*--- Ausgabe einer Tabelle
LOOP AT itab_index INTO wa.
WRITE: wa-vname, wa-nname, /.
ENDLOOP.
ULINE.
MOVE 'rühl' TO wa-nname.
* READ TABLE itab_index key nname INTO wa.
PERFORM fehlermeldung.
WRITE: wa-vname, wa-nname.
ENDFORM. "verarbeite_std
*&--------------------------------------------------------------------*
*& Form fuelle_index
*&--------------------------------------------------------------------*
* text
*---------------------------------------------------------------------*
FORM fuelle_index.
*---- Befüllen der Tabelle
*---- Schlüsselzugriff INSERT wa INTO table.
*---- Indexzugriff INSERt wa INTO itab INDEX idx.
wa-vname = 'peter'.
wa-nname = 'hohmann'.
INSERT wa INTO TABLE itab_index.
PERFORM fehlermeldung.
wa-vname = 'peter'.
wa-nname = 'hohmann'.
INSERT wa INTO TABLE itab_index.
PERFORM fehlermeldung.
wa-vname = 'erich'.
wa-nname = 'rühl'.
ABAP-Programmierung FH-Giessen/Friedberg
Prof. Dr. Hohmann V07 Seite 80
Datum: 10.06.2004
INSERT wa INTO TABLE itab_index.
PERFORM fehlermeldung.
wa-vname = 'klaus'.
wa-nname = 'armbrüster'.
INSERT wa INTO TABLE itab_index.
PERFORM fehlermeldung.
ENDFORM. "fuelle_index
SELECTION-SCREEN SKIP.
CASE sy-subrc .
WHEN 0.
PERFORM sortierung.
END-OF-SELECTION.
*---------------------------------------------------------------------*
* FORM sortierung
*---------------------------------------------------------------------*
*
*---------------------------------------------------------------------*
FORM sortierung.
IF sort1 = 'X'.
SORT watab BY carrid.
ENDIF.
IF sort2 = 'X'.
SORT watab BY connid.
ENDIF.
IF sort3 = 'X'.
SORT watab BY fldate.
ENDIF.
ENDFORM. "sortierung
*---Listenanfang ---*
TOP-OF-PAGE.
WRITE: 'Dies ist der Listenkopf'.
*---- Listenende ---*
END-OF-PAGE.
uline.
WRITE: ' Dies ist das Listenende'.
*----- Doppelclick auf eine Listenzeile---*
AT LINE-SELECTION.
In der Reportliste sind für das interaktive Reporting verschiedene Ereignisse von Bedeutung,
um Anwenderaktivitäten zu erkennen und zu verarbeiten. So löst der Doppelklick mit der
Maus oder die F2-Funktionstaste das Ereignis AT LINE-SELECTION. Mittels der
Anweisung HIDE können Informationen über die selektierte Zeile ermittelt werden. HIDE
muss in die jeweiligeListe programmiert werden. Innerhalb von AT LINE-SELECTION
kann z.B. mit SET PF-STATUS eine neue Statuszeile für die Unterliste (nicht für die
Grundliste) erzeugt werden. Seitenüberschriften der Grundliste ergeben sich mit TOP OF
PAGE. Für die Verzweigungsliste ist der Befehl TOP OF PAGE DURING LINE-
SELECTION. Alle Funktionscodes, die nicht automatisch vom System verarbeitet werden,
können in AT USER-COMMAND ausgewertet werden. Alle gewählten Funktionen stehen im
Feld SY-UCOMM.
*&---------------------------------------------------------------------*
*& Report Z_HITE_BEISPIEL01 *
*& *
*&---------------------------------------------------------------------*
* sy-lsind = aktueller Listenindex
DATA:
*---- Fluggesellschaften
wa_spfli TYPE spfli,
*---- Flüge der Fluggesellschaften
wa_sflight TYPE sflight.
PARAMETERS: eing(10).
START-OF-SELECTION.
WRITE: /, wa_sflight-carrid,
wa_sflight-connid,
wa_sflight-fldate,
wa_sflight-price,
wa_sflight-currency,
wa_sflight-planetype,
wa_sflight-seatsmax,
wa_sflight-seatsocc,
wa_sflight-paymentsum,
wa_sflight-seatsmax_b,
wa_sflight-seatsocc_b,
wa_sflight-seatsmax_f,
wa_sflight-seatsocc_f.
ENDSELECT.
if sy-subrc <> 0.
write: 'keine Ergebnisse'.
endif.
WHEN OTHERS.
WRITE: 'Keine Selektion', sy-lsind.
ENDCASE.
Zum Zeitpunkt AT LINE-SELECTION muss nicht immer eine weitere Liste aufgerufen
werden. Auch der Aufruf eines Dialogs ist möglich. Im folgenden Beispiel ist der Aufruf
eines Funktionsbaustein gezeigt. Die Besonderheit an diesem Programm ist, dass die
Sonderfunktion READ TEXTPOOL programmname INTO itab LANGUAGE sprache
verwendet wird. Darüber hinaus wird eine interne Tabelle mit Kopfzeile verwendet. Die
Kopfzeile hat den Sinn den Zugriff auf die Tabellenzeile zu erlauben, in dem der gewünschte
Satz aus dem Tabellenbereich in die Kopfzeile geschrieben wird. Alternativ könnte mit LOOP
zugegriffen werden bzw. mit READ in einen Arbeitsbereich gelesen werden.
*&---------------------------------------------------------------------*
*& Report Z01_HIDE_UND_FUNKTIONSBAUSTEIN *
*& *
ABAP-Programmierung FH-Giessen/Friedberg
Prof. Dr. Hohmann V07 Seite 84
Datum: 10.06.2004
*&---------------------------------------------------------------------*
*& *
*& *
*&---------------------------------------------------------------------*
START-OF-SELECTION.
*---- Lesen des Programmnames -----------*
SELECT * FROM trdir INTO wa WHERE
cnam = sy-uname
AND appl <> 'S' AND
subc IN ('1', 'M', 'F').
WRITE: /, wa-name.
*---- Sicherung des Satzes für at line-selection
HIDE wa.
ENDSELECT.
CLEAR wa.
AT LINE-SELECTION.
IF NOT wa IS INITIAL.
*---------------------------------------------------------------------*
*---------------------------------------------------------------------*
SELECTION-SCREEN SKIP.
SELECTION-SCREEN BEGIN OF BLOCK sortierung2 WITH FRAME.
PARAMETERS: radio1 RADIOBUTTON GROUP gr1,
radio2 RADIOBUTTON GROUP gr1, " DEFAULT 'X',
radio3 RADIOBUTTON GROUP gr1.
SELECTION-SCREEN END OF BLOCK sortierung2.
IF auswahl1 <> 'X' AND auswahl2 <> 'X' AND auswahl3 NE 'X'.
MESSAGE e001(zhoh).
* Keine Daten eingegeben !!!!!
ENDIF.
START-OF-SELECTION.
PERFORM db_tabelle.
*&--------------------------------------------------------------------*
*& Form db_tabelle
*&--------------------------------------------------------------------*
* text
*---------------------------------------------------------------------*
FORM db_tabelle.
*----- Ausgrenzung einer Selektion in dem Select-Anweisung
SELECT * FROM spfli INTO TABLE wadb WHERE carrid IN s_carrid.
PERFORM fehlermeldung.
*---- Sortierung der internen Tabellen
IF radio1 = 'X'.
SORT wadb BY carrid.
ENDIF.
IF radio2 = 'X'.
SORT wadb BY connid.
ENDIF.
IF radio3 = 'X'.
SORT wadb BY countryfr connid.
ENDIF.
*---- Ausgabe der internen Tabelle
LOOP AT wadb INTO wa.
WRITE:
wa-carrid,
wa-connid,
wa-countryfr,
wa-cityfrom,
wa-airpfrom,
wa-countryto,
wa-cityto,
wa-airpto,
wa-fltime,
wa-deptime,
wa-arrtime,
wa-distance,
wa-distid,
wa-fltype,
wa-period,
/ .
ENDLOOP.
ENDFORM. "db_tabelle
*&--------------------------------------------------------------------*
*& Form verarbeite_index
*&--------------------------------------------------------------------*
* text
*---------------------------------------------------------------------*
FORM fehlermeldung.
IF sy-subrc <> 0.
WRITE: 'Fehler in der Tabelle'.
ENDIF.
ENDFORM. "fehlermeldung
ABAP-Programmierung FH-Giessen/Friedberg
Prof. Dr. Hohmann V07 Seite 87
Datum: 10.06.2004
REPORT z01_selektionsbildschirm .
start-of-selection.
WRITE: 'Ausgelöst wurde die Taste'.
CASE g_ucomm.
WHEN 'FC01'.
WRITE 1.
WHEN 'FC01'.
WRITE 1.
WHEN 'FC02'.
WRITE 2.
WHEN '0001'.
WRITE 3.
WHEN '0002'.
WRITE 4.
WHEN '0003'.
WRITE 5.
ENDCASE.
REPORT z01_selektionsbs_v2 .
*---- Bildschirminterface
TABLES sscrfields.
*--- Steuerungsparameter
DATA: g_ucomm TYPE sscrfields-ucomm,
sich_ucomm type sscrfields-ucomm.
*--- Bildschirmmaske für separater Aufruf
SELECTION-SCREEN BEGIN OF SCREEN 10 TITLE win01 AS WINDOW.
PARAMETERS: a(20) TYPE c.
SELECTION-SCREEN END OF SCREEN 10.
START-OF-SELECTION.
* CASE sich_ucomm.
* WHEN '0001'.
* PERFORM lesen_sflight.
* WHEN '0002'.
* PERFORM lesen_spfli.
* ENDCASE.
*---------------------------------------------------------------------*
* FORM lesen_sflight
*---------------------------------------------------------------------*
*
*---------------------------------------------------------------------*
FORM lesen_sflight.
DATA: wa TYPE sflight.
ULINE.
SELECT * FROM sflight INTO wa.
WRITE: / wa-connid, wa-carrid.
ENDSELECT.
ABAP-Programmierung FH-Giessen/Friedberg
Prof. Dr. Hohmann V07 Seite 89
Datum: 10.06.2004
ENDFORM. "lesen_sflight
*&---------------------------------------------------------------------*
*& Form lesen_spfli
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM lesen_spfli .
DATA: wa TYPE spfli.
ULINE.
SELECT * FROM spfli INTO wa.
WRITE: / wa-connid, wa-carrid.
ENDSELECT.
3.7 Message-System
Um das Message-System zu verwenden müssen folgende Schritte durchlaufen werden:
• Anlage einer Gruppe
• Anlage von Meldungen
• Zeigen von Übergabevariablen
Beispielprogramm:
*&---------------------------------------------------------------------*
*& Report ZBEISPIEL_MESSAGE_SYSTEM *
REPORT zbeispiel_message_system .
START-OF-SELECTION.
ENDIF.
3.8 Funktionsbausteine
o Hauptprogramm
*&---------------------------------------------------------------------*
*& Report Z01_FUNKTIONSBAUSTEIN_V2 *
*& *
*&---------------------------------------------------------------------*
*& *
*& *
ABAP-Programmierung FH-Giessen/Friedberg
Prof. Dr. Hohmann V07 Seite 91
Datum: 10.06.2004
*&---------------------------------------------------------------------*
REPORT z01_funktionsbaustein_v2 .
data: erg type zdec12.
SELECTION-SCREEN SKIP 2.
PARAMETERS: plus RADIOBUTTON GROUP gr1 DEFAULT 'X',
minus RADIOBUTTON GROUP gr1,
mal RADIOBUTTON GROUP gr1,
div RADIOBUTTON GROUP gr1.
SELECTION-SCREEN ULINE.
PARAMETERS: a TYPE zdec10,
b TYPE zdec10.
SELECTION-SCREEN ULINE.
*PARAMETERS: erg TYPE zdec12.
AT SELECTION-SCREEN OUTPUT.
AT SELECTION-SCREEN.
*--- Lösung mit einem Unterprogramm
* PERFORM zrechnen USING a b erg.
*--- Lösung mit einem Funktionsbaustein
CALL FUNCTION 'ZRECHNEN'
EXPORTING
va = a
vb = b
plus = plus
minus = minus
div = div
mal = mal
IMPORTING
verg = erg
EXCEPTIONS
fehler = 1
OTHERS = 2.
start-of-selection.
write: 'Ergebnis.: ', erg.
.
*---- Alternative Lösung-------------------*
*FORM zrechnen USING va vb verg.
* IF plus = 'X'.
* COMPUTE verg = va + vb.
* ENDIF.
* IF minus = 'X'.
* COMPUTE verg = va - vb.
* ENDIF.
* IF mal = 'X'.
* COMPUTE verg = va * vb.
* ENDIF.
* IF div = 'X'.
* IF va NE 0 AND vb NE 0.
* COMPUTE verg = va / vb.
* ENDIF.
* ENDIF.
*ENDFORM. " Zrechnen
o Export (Karteikarte)
ABAP-Programmierung FH-Giessen/Friedberg
Prof. Dr. Hohmann V07 Seite 93
Datum: 10.06.2004
o Quelltext (Karteikarte)
REPORT z01_funktionsbaustein_v1 .
START-OF-SELECTION.
FUNCTION zlesen_sflight.
*"----------------------------------------------------------------------
*"*"Lokale Schnittstelle:
*" IMPORTING
*" REFERENCE(UEBERG_CARRID) TYPE SFLIGHT-CARRID
*" REFERENCE(UEBERG_CONNID) TYPE SFLIGHT-CONNID
*" EXPORTING
*" REFERENCE(RUECK_SFLIGHT_TABELLE) TYPE ZSFLIGHT_TAB
*" TABLES
*" S_TAB STRUCTURE SFLIGHT
*" EXCEPTIONS
*" FEHLER
*"----------------------------------------------------------------------
ENDFUNCTION.
ABAP-Programmierung FH-Giessen/Friedberg
Prof. Dr. Hohmann V07 Seite 95
Datum: 10.06.2004
o Funktionsbausteine1 (ZLESEN_SFLIGHT)
§ IMPORT-Parameter
(ueberg_carrid type sflihgt_carrid)
(ueberg_connid type sflihgt_connid)
§ EXPORT-Parameter
ACHTUNG: Anlage einer Internen-Tabelle im DD als Rückgabe aus
Funktionsbaustein ZLESEN_SFLIGHT mit dem Namen
ZSFLIGHT_TAB oder Alternativ Verwendung der Tabelle im
Funktionsbaustein
§ EXCEPTION-Variable
z.B. FEHLER
§ Programmcode
FUNCTION zlesen_sflight.
*"----------------------------------------------------------------------
*"*"Lokale Schnittstelle:
*" IMPORTING
*" REFERENCE(UEBERG_CARRID) TYPE SFLIGHT-CARRID OPTIONAL
*" REFERENCE(UEBERG_CONNID) TYPE SFLIGHT-CONNID OPTIONAL
*" EXPORTING
*" REFERENCE(RUECK_SFLIGHT_TABELLE) TYPE ZSFLIGHT_TAB
*" TABLES
*" S_TAB STRUCTURE SFLIGHT OPTIONAL
*" EXCEPTIONS
*" FEHLER
*"----------------------------------------------------------------------
*--- Lesen in eine eigen definierte Tabelle--------------------------*
SELECT * FROM sflight INTO TABLE rueck_sflight_tabelle
WHERE carrid = ueberg_carrid AND connid = ueberg_connid
.
*---- Lesen in die Tabelle des Funktionsbausteins -------------------*
SELECT * FROM sflight INTO TABLE s_tab
WHERE carrid = ueberg_carrid AND connid = ueberg_connid
.
IF sy-subrc = 4.
RAISE fehler.
ENDIF.
ENDFUNCTION.
o Funktionsbaustein 2 (ZSCHREIBEN_SFLIGHT)
o IMPORT-Parameter : Keine
AUSG_TABELLE Tabelle mit der Typisierung ZSFLIGHT_TAB aus dem
DD oder Definition in Tabelle
o Keinen EXPORT-Parameter
o EXCEPTIONS Fehler (falls Tabelle leer)
ABAP-Programmierung FH-Giessen/Friedberg
Prof. Dr. Hohmann V07 Seite 96
Datum: 10.06.2004
3.9 Select
Das nachfolgende Beispiel zeigt die Eingabe von Daten in einen Parameterbildschirm und
Speicherung der Daten in der Datenbank. Es wird mit einer eigenen Datenbanktabelle
gearbeitet.
*&---------------------------------------------------------------------*
*& Report Z_EIGENE_TABELLEN *
*& *
*&---------------------------------------------------------------------*
AT SELECTION-SCREEN OUTPUT.
akt = 'D'.
AT SELECTION-SCREEN.
IF ( kunr = 0 OR
kuname = ' ' OR
kuort = ' ' ) AND
( akt NE 'D' ).
MESSAGE e010(zhoh).
ENDIF.
CASE akt.
WHEN 'Ä'.
SELECT SINGLE * FROM zkunde01 INTO wa WHERE kunr = kunr.
IF sy-subrc <> 0.
WRITE: 'Update nur bei gültigen Satz möglich'.
ELSE.
PERFORM einstellen.
UPDATE zkunde01 FROM wa.
ENDIF.
WHEN 'L'.
DELETE FROM zkunde01 WHERE kunr = kunr.
IF sy-subrc <> 0.
ROLLBACK WORK.
ELSE.
WRITE: 'Erfolgreich gelöscht'.
ENDIF.
WHEN 'N'.
SELECT SINGLE * FROM zkunde01 INTO wa WHERE kunr = kunr.
IF sy-subrc <> 0.
PERFORM einstellen.
INSERT zkunde01 FROM wa.
ELSE.
WRITE: 'Neuanlage nicht möglich, da Satz bereits vorhanden '.
ENDIF.
ENDCASE.
START-OF-SELECTION.
SELECT * FROM zkunde01 INTO wa.
WRITE: /, wa-kunr, wa-kuname, wa-kustr,
wa-kuplz, wa-kuort, wa-kunotiz.
ENDSELECT.
*&--------------------------------------------------------------------*
*& Form einstellen
*&--------------------------------------------------------------------*
* text
*---------------------------------------------------------------------*
FORM einstellen.
wa-kunr = kunr.
wa-kuname = kuname.
wa-kuplz = kuplz.
wa-kuort = kuort.
wa-kunotiz = kunotiz.
ENDFORM. "einstellen
ABAP-Programmierung FH-Giessen/Friedberg
Prof. Dr. Hohmann V07 Seite 98
Datum: 10.06.2004
3.10 Dialogprogrammierung
ABAP-Programm
*&---------------------------------------------------------------------*
*& Report Z01_DYNPRO_V2 *
*& *
*&---------------------------------------------------------------------*
REPORT z01_dynpro_v2 .
*---- Typisierung einer Struktur -----------*
TYPES: BEGIN OF kuadr,
kuname(30) TYPE c,
kuort(30) TYPE c,
END OF kuadr.
*------- Instanzierung der Struktur --------*
DATA: wa TYPE kuadr.
*-------- Meldungsfeld ---------------------*
DATA: meld(80) TYPE c.
*------ Kommunikationsvariable für die Radiobuttons,OKCODE(identischer
*------ Inhalt mit sy-ucomm, Checkboxen--------------*
DATA: cb1(1) TYPE c,
cb2(1) TYPE c,
cb3(1) TYPE c,
rb1(1) TYPE c,
rb2(1) TYPE c,
rb3(1) TYPE c,
okcode LIKE sy-ucomm.
START-OF-SELECTION.
CLEAR: sy-ucomm, okcode.
*---- Dynproaufruf (laden der Maske)-----------*
CALL SCREEN '100'.
*&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
*--- Statuszeile und Titel --------------*
SET PF-STATUS 'STAT1'.
SET TITLEBAR 'TITL1'.
*--- Vorbelegung check-box---------------*
ABAP-Programmierung FH-Giessen/Friedberg
Prof. Dr. Hohmann V07 Seite 99
Datum: 10.06.2004
MOVE 'X' TO cb1.
*--- Vorbelegung Radio-Button ----------*
MOVE 'X' TO rb2.
CLEAR: rb1,rb2.
ENDFORM. "ausgabe
*&---------------------------------------------------------------------*
*& Module kuname_modul INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
module kuname_modul input.
move 'Feld Kuname wurde geändert' to meld.
MESSAGE s004(zhoh) WITH meld.
Dynpro
• Ablauflogik
PROCESS BEFORE OUTPUT.
MODULE STATUS_0100.
ABAP-Programmierung FH-Giessen/Friedberg
Prof. Dr. Hohmann V07 Seite 100
Datum: 10.06.2004
PROCESS AFTER INPUT.
MODULE USER_COMMAND_0100.
FIELD wa-kuname MODULE kuname_modul on request.
• Dynprobild
ABAP-Programmierung FH-Giessen/Friedberg
Prof. Dr. Hohmann V07 Seite 101
Datum: 10.06.2004
Statuszeilen
Für die Statuszeile der Dynpromaske(STAT1) sind in der Symbolleiste die Felder END und
SPEICH aktiviert worden.
Für die Listenausgabe ist eine eigene Statuszeilendefinition (STAT2) erforderlich. Hier wurde
mit der Vorbelegung über den Standard gearbeitet.
ABAP-Programmierung FH-Giessen/Friedberg
Prof. Dr. Hohmann V07 Seite 102
Datum: 10.06.2004
Messagesystem
MESSAGE s004(zhoh) WITH meld. “meld wird in &1 übergeben
ABAP-Programmierung FH-Giessen/Friedberg
Prof. Dr. Hohmann V07 Seite 103
Datum: 10.06.2004
Das nachfolgende Beispiel zeigt ein Dynproprogrammierung zur Pflege einer selbst
angelegten Datenbanktabellen.
ABAP-Hauptprogramm
*&---------------------------------------------------------------------*
*& Report Z01_DYNPRO_V3 *
*& *
*&---------------------------------------------------------------------*
REPORT z01_dynpro_v3 .
DATA:
*---- Workbereich für die Datenbanksätze ----*
wa TYPE zkunde,
neuanlage(1) TYPE c,
*---- Auslösemodus -------------------------*
okcode LIKE sy-ucomm.
*---- Kommunikationsbereich DB-Tabelle -- Dynpro ---*
TABLES zkunde.
START-OF-SELECTION.
*---- Aufruf der Maske---------*
CALL SCREEN '100'.
*&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
SET PF-STATUS '100'.
CLEAR: okcode, wa.
* SET TITLEBAR 'xxx'.
ENDMODULE. " STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE user_command_0100 INPUT.
CASE okcode.
WHEN 'ZURUECK'.
ROLLBACK WORK.
CLEAR: zkunde, wa, neuanlage.
WHEN 'ANZ'.
PERFORM anzeige.
WHEN 'SPEICH'.
PERFORM speichern.
WHEN 'LOE'.
PERFORM loeschen.
WHEN 'END'.
LEAVE TO SCREEN 0.
ENDCASE.
*---------------------------------------------------------------------*
* FORM loeschen
*---------------------------------------------------------------------*
FORM loeschen.
*--- Dynpro-Kommunikationsbereich nach WA ---*
MOVE zkunde TO wa.
*--- Löschen des ausgewählten Satzes ----------*
DELETE FROM zkunde WHERE kunr = wa-kunr.
*---- Fehlerkontrolle -------------------------*
IF sy-subrc <> 0.
ROLLBACK WORK.
ELSE.
CLEAR: zkunde, wa.
MESSAGE s005(zhoh).
ENDIF.
ENDFORM . "loeschen
*---------------------------------------------------------------------*
* FORM speichern
*---------------------------------------------------------------------*
FORM speichern.
*---- Kommuniktionsbereich in WA -----*
MOVE zkunde TO wa.
IF neuanlage = 'J'.
*--- Neuanlage eines Satzes ----------*
INSERT zkunde FROM wa.
ELSE.
*-- Update von Feldern ----------------*
UPDATE zkunde FROM wa.
ENDIF.
ENDFORM. "speichern
*&---------------------------------------------------------------------*
*& Module lesen INPUT
*&---------------------------------------------------------------------*
* Lesen in Abhängigkeit vom eingegebenen Feld kunr
*----------------------------------------------------------------------*
MODULE lesen INPUT.
*--- Eingabefeld für Eingrenzung schieben ---------------*
MOVE zkunde-kunr TO wa-kunr.
*---- Lesen in den WA-Satz
SELECT SINGLE * FROM zkunde INTO wa WHERE kunr = wa-kunr.
*----- Erfolgloses Lesen bedeutet Neuanlage
IF sy-subrc <> 0.
MOVE 'J' TO neuanlage.
MOVE wa TO zkunde.
ELSE.
*---- Erfolgreiches Lesen bedeutet füllen der Maske -----*
MOVE 'N' TO neuanlage.
MOVE wa TO zkunde.
ENDIF.
ENDMODULE. " lesen INPUT
Dynpro
• Ablauflogik
PROCESS BEFORE OUTPUT.
ABAP-Programmierung FH-Giessen/Friedberg
Prof. Dr. Hohmann V07 Seite 105
Datum: 10.06.2004
MODULE STATUS_0100.
*
PROCESS AFTER INPUT.
MODULE USER_COMMAND_0100.
• Dynprobild
Statuszeilen
ABAP-Programmierung FH-Giessen/Friedberg
Prof. Dr. Hohmann V07 Seite 106
Datum: 10.06.2004
REPORT ZBEISPIEL_ERW_DYNPRO .
start-of-selection.
Einträge im SCREEN-PAINTER
*
PROCESS AFTER INPUT.
MODULE user_command_0100.
FIELD satz-kunr MODULE kulesen ON REQUEST.
Assistenten
Vorgehensweise Erstellung einer Maske mit Grid.
Erweiterung der Maske um ausprogrammierte Module
*
PROCESS AFTER INPUT.
………….
MODULE user_command_0100.
FIELD satz-kunr MODULE kulesen ON REQUEST.
*&---------------------------------------------------------------------*
*& Report Z_ERW_DYNPRO_MIT_OBJEKT *
*& *
*&---------------------------------------------------------------------*
REPORT z_erw_dynpro_mit_objekt .
*---- Globale Variablen ----*
DATA: okcode TYPE sy-ucomm.
*---- Kommunikationsbreich Dynpro ----*
TABLES: spfli.
*--- Klassendefinition
*---------------------------------------------------------------------*
* CLASS anw DEFINITION
*---------------------------------------------------------------------*
*
*---------------------------------------------------------------------*
CLASS anw DEFINITION.
PUBLIC SECTION.
METHODS: constructor,
lesen_saetze IMPORTING l_carrid TYPE spfli-carrid,
fuelle_list.
PROTECTED SECTION.
PRIVATE SECTION.
*------ Tabelle mit den Ergenbissen aus der Datenbank
DATA: spfli_tab TYPE TABLE OF spfli,
*--- Referenzvariablen für zwei globale Klassen
container TYPE REF TO cl_gui_custom_container,
alv_list TYPE REF TO cl_gui_alv_grid.
ENDMETHOD. "constructor
*---- Füllen der Liste
METHOD fuelle_list.
call method alv_list->refresh_table_display.
ENDMETHOD. "fill_list
METHOD lesen_saetze.
SELECT * FROM spfli INTO TABLE spfli_tab WHERE carrid = l_carrid.
ENDMETHOD. "lesen_saetze
ENDCLASS. "anw IMPLEMENTATION
*---- Globale Referenzvariable ----*
DATA objekt_ref TYPE REF TO anw.
IF okcode = 'BACK' OR
okcode = 'EXIT' OR
okcode = 'CANCEL'.
LEAVE PROGRAM.
ELSE.
*--- Aufruf der Methode lesen_saetze und Ausgrenzung durch Maskeneingabe
CALL METHOD objekt_ref->lesen_saetze
EXPORTING
l_carrid = spfli-carrid.
ENDIF.
DYNPRO-Steuerung
ROCESS BEFORE OUTPUT.
MODULE STATUS_0100.
*
PROCESS AFTER INPUT.
MODULE USER_COMMAND_0100.
ABAP-Programmierung FH-Giessen/Friedberg
Prof. Dr. Hohmann V07 Seite 111
Datum: 10.06.2004
REPORT zblatt4_beispiel_ohne_logdb .
SELECT-OPTIONS:
flugges FOR spfli-carrid,
flugnr FOR spfli-connid,
flugdat FOR sflight-fldate,
zielort FOR spfli-cityto.
START-OF-SELECTION.
SELECT * FROM spfli WHERE carrid IN flugges
AND connid IN flugnr
AND cityto IN zielort.
endif.
Alternative kann die Tabellenanzeige für spfli und spflight mit Hilfe von Logischen
Datenbanken erfolgen, wie da nachfolgende Beispiel zeigt.
ACHTUNG: Bei der Anlage des Programms muss die logische Datenbank F1S
angegeben werden. Hier ist eine Hierarchie SPFLI, SFLIGHT und SBOOK
*&---------------------------------------------------------------------*
*& Report zblatt4_beispiel_logische_db *
*& *
*&---------------------------------------------------------------------*
REPORT zblatt4_beispiel_logische_db .
START-OF-SELECTION.
GET spfli.
WRITE: / spfli-carrid, spfli-connid, spfli-cityfrom, spfli-cityto.
GET sflight.
write: /5 sflight-fldate, sflight-seatsocc.
*&---------------------------------------------------------------------*
*& Report Z_LOGISCHE_DB01 *
*& *
*&---------------------------------------------------------------------*
*& *
*& ACHTUNG: LOGISCHE Datenbank F1S *
*&---------------------------------------------------------------------*
REPORT z_logische_db01.
DATA: anzahl TYPE i,
gewicht type i.
*-- NODES hat die gleiche Funktion wie TABLES
NODES: spfli, sflight, sbook.
* oder
* TABLES: spfli, sflight, sbook.
*---- Manuelle Ausgrenzung ------------------*
*SELECT-OPTIONS: zielort1 FOR spfli-cityto.
*PARAMETERS: zielart3 TYPE spfli-cityto.
START-OF-SELECTION.
*-- Hierarchie
*--- SPLFI ---> SPFLIGHT ---> SBOOK
*--- LATE bedeutet
*--- SPLFLI<---- SPLFIGHT <---- SBOOK
*---- Nach Ausgabe der SFLIGHT und SBOOCK --> Gruppensumme ----*
GET spfli LATE .
write: 'Gesamtanzahl Sitze: ', anzahl.
WRITE: 'Ende des Flugs'.
move 0 to anzahl.
uline.
*----- Auflistung der sfilght-Flüge-----*
GET sflight.
WRITE: /5 'Flugnr.', sflight-connid, 'Tag', sflight-fldate,
'Anzahl Sitze', sflight-seatsocc.
compute anzahl = anzahl + sflight-seatsocc.
END-OF-SELECTION.
WRITE: 'Ende der Ausgabe'.
3.12 Objekte
Das nachfolgende Beispiel zeigt die Programmstruktur für die objektorientierte
Programmierung d.h. lokale Klassendefinition, lokale Klassenimplementierung und
Instanzierung im Hauptprogramm.
*&---------------------------------------------------------------------*
*& Report Z_OBJEKTE *
*& *
*&---------------------------------------------------------------------*
REPORT z_objekte .
*----- Klassendefinition-----*
CLASS berechnung DEFINITION.
PUBLIC SECTION.
METHODS: kursgewinn IMPORTING l_kurs TYPE t_zahl
l_divi TYPE t_zahl
EXPORTING l_kgv TYPE t_zahl.
PROTECTED SECTION.
PRIVATE SECTION.
ENDCLASS. "berechnung DEFINITION
*---------------------------------------------------------------------*
* CLASS berechnung IMPLEMENTATION
*---------------------------------------------------------------------*
*
*---------------------------------------------------------------------*
CLASS berechnung IMPLEMENTATION.
METHOD kursgewinn.
COMPUTE l_kgv = l_kurs / l_divi.
ABAP-Programmierung FH-Giessen/Friedberg
Prof. Dr. Hohmann V07 Seite 114
Datum: 10.06.2004
ENDMETHOD. "kursgewinn
START-OF-SELECTION.
CREATE OBJECT ref_berechnung.
4. Literatur
• Horst Keller, Sascha Krüger, ABAP Objects, Einführung in die SAP-Programmierung,
2., korrigierte Auflage, Bonn 2001
à ACHTUNG: Das Buch enthält ein ABAP-Entwicklungssystem auf CD. Die
Installation ist auf WIN2000, XP und Linux möglich.
• Horst Keller, Joachim Jacobitz, ABAP Objects Referenz; 1.Auflage, Bonn 2002
• Bernd Matzke: ABAP/4, Programmiersprache der SAP-Systems R/3, 4., erweiterte
Auflage, München 2000