Undlagen ABAP
Undlagen ABAP
3 Anlegen eines Programms.............................................................................................. 3 Schreiben eines Progamms............................................................................................. 4 Prfen und Ausfhren des Programms........................................................................... 5 Definition von Variablen (einfache Datentypen) ................................................................... 5 Verwendung von Variablen ................................................................................................... 5 Zuweisung .......................................................................................................................... 5 Ausfhren von Berechnungen ........................................................................................ 5 Berechnungsoperatoren .................................................................................................. 5 Schleifen .................................................................................................................................... 6 DO-Schleife............................................................................................................................ 6 Zhlschleifen mit vordefinierter Anzahl von Durchlufen ................................................ 6 Zhlschleife mit unbestimmter Anzahl von Durchlufen .................................................. 6 WHILE-Schleife..................................................................................................................... 6 Verwendung spezieller Zhlvariablen................................................................................ 6 Spezielle Schlsselwrter in Schleifen .............................................................................. 7 Bedingte Anweisungen............................................................................................................. 7 CASE Anweisung .................................................................................................................. 7 Angaben und Verknpfung von Bedingungen ...................................................................... 8 Verknpfung von Bedingungen ............................................................................................. 8 Verwenden von Klammern ..................................................................................................... 8 Zugriff auf Tabellen aus der DB ............................................................................................. 8 Funktionsweise der Verknpfung mit Join .......................................................................... 12 Realisierung der LEFT OUTER JOIN mit geschachtelten SELECT-Anweisung............... 13 Zugriff auf Tabellen ber Views .......................................................................................... 14 Prfen, ob eine SELECT-Anweisung Datenstze geliefert hat............................................ 17 Verwendung von Bedingungen ............................................................................................. 17 Aufbau der Select-Anweisung ................................................................................. 17 Erfassen von Bedingungen/Werten ber Eingabefelder ...................................................... 18 Definition von Eigabefeldern ................................................................................... 18 Programme mit Varianten ........................................................................................ 19 Anlegen einer Variante............................................................................................. 19 Zuordnen von Transaktionscodes............................................................................. 19 Strukturierte Datentypen ...................................................................................................... 21 Zuweisungen zwischen strukturierten Typen................................................................... 21 Voraussetzung fr eine direkte Zuweisung ...................................................................... 22 Zuweisung von Strukturen mit move-corresponding....................................................... 23 Interne Tabellen ..................................................................................................................... 24 Definition einer internen Tabelle ............................................................................. 25 Fllen einer internen Tabelle mit Werten aus der DB ............................................. 25 Verwenden einer internen Tabelle ........................................................................... 25 Erfolgsprfung fr das Ausfhren einer Anweisung ............................................... 26 Zugriff auf interne Tabellen ber Schlsselfelder.................................................... 26 Zugriff ber eine Schleife ........................................................................................ 27 Wahlfreier Zugriff auf einen einzelnen DS.............................................................. 27 Operationen fr interne Tabellen ............................................................................. 27 Unterprogramm ..................................................................................................................... 29
Definition und Verwendung................................................................................................. 29 Unterprogramm mit Parametern........................................................................................... 29 Mechanismen zur Parameterbergabe ............................................................................ 29 Abarbeitung des Aufrufs .......................................................................................... 30 Parameter ohne Typisierung..................................................................................... 31 Einschrnkungen fr die Typisierung mit ANY ...................................................... 31 Positionierung der Ausgabe in der Liste .............................................................................. 36 Modularisierung von Programmen mit Includes ................................................................ 36 Regeln/Eigenschaften von Includes ..................................................................................... 37 Verwaltung der Tabelle in einer internen Tabelle .............................................................. 37 Definition der internen Tabelle ............................................................................................ 37 Durchlaufen der internen Tabelle und Zugriff auf die einzelnen Objkekte ......................... 38
Anmeldedaten
Bezeichnung Anwendungsserver Router-String SAP- System Systemnummer Nutzername Initialkennwort Mandant Schulungssystem SAP-B07 192.168.52.52 /H/10.200.130.143/H/ 192.168.52.200/H/ R/3 00 CDI_802-xx Mandt802 802 Mini SAP MSAP_ABAP 10.60.217.50 R/3 00 Minisap-xx 123 802
Write: Das ist ein Test, Hallo Welt, Beispiel. Ein Kettensatz sind voneinander vollstndig unabhngige Befehle, die nur im Quelltext durch eine krzere Schreibweise dargestellt werden.
Erstes einfaches Beispiel (se38 & se80) ABAP-Workbench (se80) aufrufen (Zusammenfassung aller zur Programmierung bentigten Werkzeuge unter einer einheitlichen Oberflche) Anlegen eines Programms SE80 aufrufen Objekttyp und Objektname
klicken o Falls das Objekt noch nicht existiert, erscheint eine Abfrage zum Erzeugung des Objektes.
o o
klicken
o o nicht anhaken, Projekt steht aus mehreren Skripten/Teilen, die zusammengefhrt werden knnen
klicken
Titel: frei whlbar Typ: Ausfhrbares Programm (alle anderen Option knnen nur zu einem Programm hinzugefgt werden und nicht gestartet werden.) Status: Testprogramm (einschrnkt auf diese Option im Schulungssys.) Anwendung: Anwendungsbergreifend (FI, CO, BW,...) klicken
o o klicken (kein Transport mglich, weil kein Paket) Programm wurde angelegt und erscheint links in der Objektliste
Schreiben eines Programms Doppelklick auf Programmnamen (Programm wird in Anzeigemodus geffnet (grau hinterlegt)) klicken und in Bearbeitungsmodus wechseln (Programm wei hinterlegt) Quelltext: REPORT Z80205_Hallo_Welt. (Reportprogramm zur Ausgabe Liste, Programmname, Abschluss der Anweisung) WRITE Hallo Welt.
(Befehl zur Ausgabe, Zeichenkette, Abschluss der Anweisung) Prfen und Ausfhren des Programms Klicken zur Syntaxprfung Klicken zur Aktivierung des Programms Klicken zum Ausfhren des Programms
Definition von Variablen (einfache Datentypen) DATA Variablenname TYPE Datentyp VALUE Anfangswert. z.B. DATA var1 TYPE i VALUE 3. Integervariable mit Name Var1 und Anfangswert 3. Einfache Datentypen i Integer ganze Zahlen f Gleitkommazahlen d Datum t Zeit string Zeichenfolge xstring Bytefolge (Hexadezimal)
Verwendung von Variablen Ausgabe von Variableninhalten: DATA: z1 TYPE ;, Z2 TYPE ; VALUE 5. WRITE: Z1=, z1. NEW-LINE WRITE: Z2=, z2.
Zuweisung
DATA z1 TYPE i. z1 = 3. Operatoren werden identisch wie Befehle behandelt, d.h. vor und nach einem Operator MUSS sich ein Leerzeichen befinden. Ausfhren von Berechnungen COMPUTE z1 = z1 + 5. vollstndige Schreibweise oder z1 = z1 + 5. verkrzte Schreibweise Berechnungsoperatoren +,-,*,/
Schleifen
DO-Schleife
Zhlschleifen mit vordefinierter Anzahl von Durchlufen
DATA a TYPE i. i = 0. DO 5 TIMES. Wiederhole das folgende 5 Mal i = i + 1. WRITE i. NEW-LINE. ENDDO. Ende der Schleife Zugriff auf den Schleifenindex (Durchlauf) DO 5 TIMES. WRITE SY-INDEX. ENDDO. Durchlauf beginnt bei 1 und nicht wie bei anderen Sprachen bei 0
Zhlschleife mit unbestimmter Anzahl von Durchlufen
DATA a TYPE i VALUE 2. DO. a = a * 7. WRITE a. NEW-LINE. IF a > 100. EXIT. beendet die Schleife an exakt dieser Stelle ENDIF ENDDO. WHILE-Schleife DATA a TYPE i VALUE 2. WHILE a < 10. WRITE a. Schleife wird so lange durchlaufen, wie die Bedingung wahr ist. a = a ** 2. ENDWHILE.
Verwendung spezieller Zhlvariablen
DATA: a TYPE I VALUE 2, b TYPE i. WHILE a < 10 VARY b from 2 NEXT 5. a = a + 1. WRITE: a, b. ENDWHILE.
b= Zhlvariable 2 ist Standardwert fr einen ersten Durchlauf 5 ist Wert fr zweiten Durchlauf Schrittweite 5-2=3
Spezielle Schlsselwrter in Schleifen
EXIT.
beendet die Schleife am angegebenen Punkt (es wird immer die innerste Schleife beendet, in der man sich befindet)
CONTINUE. beendet den aktuellen Schleifenlauf und beginnt mit dem nchsten Durchlauf (falls einer existiert) DATA a TYPE i VALIE 1. DO. IF a mod 2 = 0. CONTINUE. ENDIF. WRITE a. a = a + 1. ENDDO. CHECK Bedingung Falls die Bedingung wahr ist, wird die Abarbeitung normal fortgesetzt, ansonsten wird zum nchsten Schleifendurchlauf gesprungen. DATA: g TYPE i VALUE 1, h TYPE i. DO 10 TIMES. h = g mod 2. g = g + 1. CHECK h = 0. WRITE g. NEW-LINE ENDDO.
Bedingte Anweisungen
IF Bed. Anweisungen werden nur abgearbeitet, wenn die Bedingung wahr ist. ENDIF. IF Bed. Anweisungen werden nur abgearbeitet, wenn die Bedingung wahr ist. ELSE. Anweisungen werden nur abgebildet, wenn die Bed. Falsch ist. ENDIF.
CASE Anweisung
CASE Variable. Beliebiger einfacher Datentyp WHEN Wert1. Es werden von oben nach unten alle Bedingungen geprft (Variable=Wert1,...). Falls eine Bed. Wahr ist, werden alle WHEN Wert2. Anweisungen von exakt diesem Block ausgefhrt und die CASE-Anweisung beendet, ansonsten wird zur nchsten WHEN Wert3 OR Wert4. Bed. Gesprungen. WHEN OTHERS. muss der letzte When-Block sein ENDCASE.
Beispiel: Tabelle SCARR Liste der Fluggesellschaften, aus der Beispiel-DB Vorbereitung: SE80 aufrufen und neues Programm anlegen Z80204_LISTE_FG
DATA variable TYPE tabelle. Erzeugt eine Variable, welche die gleiche Struktur hat wie eine Zeile der angegebenen Tabelle. Die Namen und Datentypen der Elemente werden der Tabellendefinition bernommen. z.B. ID 1 2 Name Mller Meier Ort EF WE Tabelle Mitarbeiter
DATA mit TYPE Mitarbeiter mit-ID mit-Name zum Zugriff auf die einzelnen Feldelemente mit-Ort - wird als Trennzeichen zwischen Variablenname und Feldelement verwendet 1. Zeilenweises auslesen mit SELECT DATA zeile TYPE scarr. definiert Struktur einer Tabellenzeile SELECT * INTO zeile FROM scarr. WRITE: /zeile-carrid, zeile-carrname. ENDSELECT
2. Alle selektierten Datenstze in eine interne Tabelle schreiben DATA itab TYPE STANDARD TABLE OF scarr. definiert interne Tabelle mit der SELECT * INTO TABLE itab FROM scarr. Struktur von der DB-Tabelle Datenstze werden in interne Tabelle bertragen. Durch eine Schleife (Loop) ber itab knnen die Datenstze ausgelesen werden. DATA zeile LIKE LINE OF itab. LOOP AT itab INTO zeile. WRITE: /zeile-carrid, zeile-carrname. ENDLOOP. 3. Auslesen einzelner Felder einer Tabelle a) mit Zeilenstruktur DATA zeile TYPE scarr. SELECT carrid carrname INTO CORRESPONDING FIELDS OF zeile FROM scarr. Es werden alle die Felder bertragen, fr die ein Element in der Struktur zeile existiert WRITE: /zeile-carrid, zeile-carrname, zeile-url. ENDSELECT. Wurde nicht selektiert Feld ist leer keine Ausgabe Mit Leerzeichen getrennte Liste aller auszulesender Felder
b) mit interner Tabelle mit der gleichen Struktur wie DB-Tabelle DATA itab TYPE STANDARD TABLE OF scarr. SELECT carrid carrname INTO CORRESPONDING FIELDS OF TABLE itab FROM scarr. DATA zeile LIKE LINE OF itab. LOOP AT itab INTO zeile. WRITE: /zeile-carrid, zeile-carrname. Es sind nur die Felder gefllt die in WRITE zeile-url. Der SELECT-Anweisung ENDLOOP. selektiert sind. c) mit einzelnen Variablen DATA feld1 TYPE scarr-carrid. DATA feld2 TYPE scarr-carrname. Variablen vom gleichen typ wie die Felder der DB-Tabelle
SELECT carrid carrname INTO (feld1, feld2) FROM scarr. WRITE: /feld1, feld2 Die Inhalte der DB-Felder werden den Variablen ENDSELECT von links nach rechts zugeordnet (Anzahl der Felder muss mit der Anzahl der selektierten Spalten bereinstimmen) d) mit angepasster Zeilenstruktur TYPES: BEGIN OF z_typ, Alle Elemente in der Reihenfolge feld1 TYPE scarr-carrid, definieren, in der spter die selectfeld2 TYPE scarr-carrname, Anweisung die Spalten auslesen soll. END OF z_typ. DATA zeile TYPE z_typ. Ziele die nur die auszulesenden Elemente enthlt SELECT carrid carrname INTO zeile FROM scarr. WRITE: /zeile-feld1, zeile-feld2. Zugriff ber die Feldnamen des vorher ENDSELECT. definierten strukturierten Datentyps e) mit angepasster interner Tabelle TYPES: BEGIN OF z_typ, Definition einer Zeile der internen Feld1 TYPE scarr-carrid, (Zeilenstruktur) Feld2 TYPE scarr-carrname, Tabelle END OF z_typ DATA itab TYPE STANDARD TABLE OF z_typ. Definiert interne Tabelle mit angegebener Zeilenstruktur SELECT carrid carrname INTO TABLE itab FROM scarr. DATA zeile TYPE z_typ. Zeile der internen Tabelle *oder *DATA zeile LIKE LINE OF itab. LOOP AT itab INTO zeile. WRITE: /zeile-feld1, zeile-feld2. ENDLOOP. 4. Ergebnisse mehrerer Anfragen in eine internen Tabelle speichern DATA itab TYPE STANDARD TABLE OF scarr.
SELECT * INTO TABLE itab FROM scarr WHERE carrid LIKE A%. DATA zeile LIKE LINE OF itab. LOOP AT itab INTO zeile. WRITE: /zeile-carrid, zeile-carrname. ENDLOOP. SELECT * APPENDING TABLE itab FROM scarr WHERE carrid LIKE L%. LOOP AT itab INTO zeile. WRITE: /zeile-carrid, zeile-carrname. ENDLOOP. Zusatz zu APPENDING: SELECT * APPENDING CORRESPONDING FIELDS OF TABLE itab FROM scarr... Es werden nur die selektierten DB-Spalten in die interne Tabelle geschrieben, fr die dort korrespondierende Felder existieren 5. Lesen einzelner Datenstze einer DB-Tabelle DATA zeile TYPE scarr. DATA: f1 TYPE scarr-carrid, f2 TYPE scarr-carrname. SELECT SINGLE * INTO zeile FROM scarr WHERE carrid = LH. Keine Schleifenstriktur KEIN Gibt an, dass die Abfrage nur einen ENDSELECT Datensatz liefert WRITE: /zeile-carrid, zeile-carrname. SELECT SINGLE carrid carrname INTO (f1, f2) FROM scarr WHERE carrid = BA. WRITE: /f1, f2. SELECT SINGLE * INTO zeile FROM scarr WHERE carrid LIKE A%. Der erste in der DB-Tabelle gefundene DS Bedingung selektiert mehr als einen der den Selektionsbedingungen entspricht Datensatz!!! wird bertragen 6. Zugriff auf mehrer DB-Tabellen Tabelle: spfli enthlt Liste aller verfgbaren Flugstrecken Datenfelder: cityfrom Abflugstadt cityto Zielstadt carrid Schlssel der Fluggesellschaft, d.h. Verweis auf Tabelle scarr
Tabelle: scarr enthlt Liste aller Fluggesellschaften Datenfelder: carrid Schlssel der Fluggesellschaft carrname Name der Fluggesellschaft
Ziel:
1. Variante: geschachtelte SELECT-Anweisung TYPES: BEGIN OF z_typ, id_fg TYPE spfli-carrid, von TYPE spfli-cityfrom, nach TYPE spfli-cityto, END OF z_typ. DATA: zeile TYPE z_typ, name_fg TYPE scarr-carrname. SELECT carrid cityfrom cityto INTO zeile FROM spfli. SELECT SINGLE carrname INTO (name_fg) scarr WHERE carrid = zeile-id_fg. WRITE: /zeile-von, zeile-nach, name_fg. ENDSELECT. Innerhalb der ueren SELECT-Anweisung wird mit Hilfe der Daten des aktuellen Datensatzes mit einer weiteren SELECT-Anweisung auf eine verknpfte Tabelle zugegriffen 2. Variante: Verknpfung von Tabellen ber Joins TYPES: BEGIN OF z_typ, Von TYPE spfli-cityfrom, Nach TYPE spfli-cityto, name_fg TYPE scarr-carrname, END OF z_typ. DATA zeile TYPE z_typ. SELECT spfli~cityfrom spfli~cityto scarr~~carrname INTO zeile FROM spfli INNER JOIN Tabellenname muss angegeben werden, wenn die Spalte in mehreren beteiligten Tabellen vorkommt scarr ON spfli~carrid = scarr~carrid. Nach ON wird die Verknpfungsbedingung angegeben WRITE: /zeile-von, zeile-nach, zeile-name_fg. ENDSELECT. Funktionsweise der Verknpfung mit Join Tabelle Mitarbeiter ID Name Abteilung 1 Mller 1 2 Meier 3 Schulze 2 4 Feuerstein 1 5 Maler a) INNER JOIN Tabelle Abteilung ID Name 1 Produktion 2 Verwaltung 1. Tabelle Nur verknpfte DS werden ausgegeben
SELECT Mitarbeiter~Name Abteilung~Name INTO X FROM Mitarbeiter JOIN Abteilung ON Mitarbeiter~Abteilung = Abteilung~ID. es werden alle DS der linken Tabelle angezeigt, die mit der rechten Tabelle verknpft sind. (Alle NICHT verknpften DS werden NICHT angezeigt) Fr jeden DS der linken Tabelle werden die ber die Verknpfungsbelegung spezifizierten DS der rechten Tabelle ausgegeben
Das tauschen der Tabellen in der FROM-Klausel fhrt zum gleichen Ergebnis! b) OUTER JOIN In Open-SQL existiert nur LEFT OUTER JOIN. SELECT Mitarbeiter~Name Abteilung~Name INTO Mitarbeiter LEFT OUTER JOIN Abteilung ON Mitarbeiter~Abteilung = Abteilung~ID. Alle DS der linken Tabelle werden ausgegeben, unabhngig ob Verknpfungen zur rechten Tabelle existieren oder nicht Falls eine Verknpfung zur rechten Tabelle existiert werden die zugehrigen (durch die Verknpfungsbedingungen spezifizierten) Daten der rechten Tabelle ausgegeben und falls KEINE Verknpfung existiert bleiben die Felder leer
Das vertauschen der Tabellen in der FROM-Klausel bewirkt i.d.R. ein anderes Ergebnis!! Regeln zur Verwendung von Joins Rechts vom JOIN-Operator muss eine Tabelle (oder View) stehen Nach ON drfen mehrere Verknpfungsbedingungen stehen, diese mssen mit AND verknpft sein Eine Bedingung nach ON MUSS eine echte Verknpfungsbedingung sein, d. h. sie muss sich auf beide Tabellen beziehen, alle anderen Bedingungen mssen mindestens ein Feld der rechten Tabelle enthalten Falls nach der ON-Klausel ein WHERE folgt, darf dort KEINE Bedingung enthalten sein, die sich auf die rechte Tabelle bezieht
Realisierung der LEFT OUTER JOIN mit geschachtelten SELECT-Anweisung TYPES: BEGIN OF z_typ. von TYPE spfli-cityfrom, nach TYPE spfli-cityto, id_fg TYPE scarr-carrid, END OF z_typ. DATA: zeile TYPE z_typ, name_fg TYPE scarr-carrname. SELECT cityfrom cityto carrid INTO zeile FROM spfli. SELECT SINGLE carrname INTO (name_fg) FROM scarr WHERE carrid = zeileid_fg. IF sy-subrc = 0. *es existiert eine Verknpfung
WRITE: /zeile-cityfrom, zeile-cityto, name_fg. ELSE. *es existiert KEINE Verknpfung (Falls ein INNER JOIN realisiert werden soll, bleibt der ELSE-Zweig leer, fr einen LEFT OUTER JOIN werden nur die Daten der ueren Tabelle ausgegeben) WRITE: /zeile-von, zeile-nach. LEFT OUTER JOIN ENDIF. ENDSELECT. Zugriff auf Tabellen ber Views Eine View ist ein Element der Datenbank, das selbst KEINE Daten enthlt, sondern nur eine Sicht auf eine oder mehrere verknpfte Datenbanktabellen darstellt. Vorteil: Im ABAP-Programm kann auf ein einziges Datenobjekt zugegriffen werden. (KEINE verschachtelten SELECT-Anweisungen und KEINE JOINS erforderlich) View muss manuell im Data-Dictionary angelegt werden Nur INNER JOIN mglich
Nachteil:
Verknpfungen von Views knnen nur als INNER JOIN realisiert werden.
2.
anlegen klicken
3.
bernehmen klicken
4. Alle Tabellen angeben aus denen Daten selektiert werden sollen Verknpfungsbedingungen erfassen
5. Spaltenname des Feld aus der DBFeldes in der View Tabelle Die Spalten aller Tabellen eintragen, die ber die View abgefragt werden sollen
Es kann ber die View nur auf die Felder zugegriffen werden, die erfasst sind!
6.
ber die View kann nur auf die Datenstze zugegriffen werden, bei denen im Feld cityfrom Frankfurt steht.
7. Register: Pflegestatus Es kann angegeben werden, ob lesend und/oder schreibend auf die View zugegriffen werden kann 8.
View wird in Data Dictionary gespeichert aber NICHT in der Datenbank 9. aktivieren Durch das aktivieren wird die View in der Datenbank angelegt
Verwendung der View Ein View kann in einem ABAP-Programm zum Lesen von Datenstzen analog zu einer Tabelle verwendet werden.
REPORT Z80304_VIEW .
*definiert eine Struktur der Zeile der View SELECT * INTO zeile FROM Z80304TEST. WRITE: / zeile-von, zeile-nach, zeile-fg. ENDSELECT. *es werden alle DS ausgegeben, die ber die View selektiert werden
Problem: Es werden sehr viele Datenstze angezeigt Tabellen spfli & scarr sind Mandantenabhngig, d.h. fr jeden Mandanten existieren unterschiedliche Eintrge in den Tabellen. Da die View auf der DB-Ebene erstellt wird, enthlt sie die Datenstze aller angelegten Mandanten Lsung1: DB-seitig nicht lsbar, da in den Bedingungen kein Bezug auf Mandanten genommen werden darf.
View ist mandantenunabhngig, d.h. im ABAP-Programm kann auf die Daten aller Mandanten zugegriffen werden Lsung2: (ab Release 4.6) Definition einer Mandantenabhngigen View Es kann nur auf die Daten des Mandanten zugegriffen werden, mit der Nutzer angemeldet sind Erstes eingetragenes Feld muss das Mandantenfeld einer beteiligten Tabelle sein
Die Mandantenfelder aller beteiligten Tabellen mssen ber Join-Bed. Verknpft werden
im ABAP-Programm ist keine Bedingung erforderlich (Das ABAP-Laufzeitsystem stellt sicher, dass nur die Daten des aktuellen Mandanten selektiert werden) Prfen, ob eine SELECT-Anweisung Datenstze geliefert hat Prfung kann durch Auswertung des Returncodes geprft werden: Sy-subrc = 0 SELECT hat Datenstze geliefert Sy-subrc = 4 SELECT hat keine Datenstze geliefert SELECT SINGLE * INTO zeile FROM scarr WHERE carrid = LH. IF sy-subrc = 0. WRITE Es wurden Datenstze zurckgeliefert. ELSE. WRITE Keine Datenstze. ENDIF.
Abarbeitung von Open-SQL: 1. Open-SQL Anweisung wird an DB-Schnittstelle gesendet 2. DB-Schnittstelle bersetzt Open-SQL in Native-SQL der verwendeten DB 3. Nativ-SQL-Anweisung wird zur DB gesendet und dort verarbeitet 4. DB sendet Abfrageergebnis an DB-Schnittstelle 5. DB-Schnittstelle sendet Abfrageergebnis an ABAP-Prozessor, der das ABAPProgramm verarbeitet. Vorteile von Open-SQL:
ABAP-Programme sind unabhngig von einer speziellen DB!!! Es besteht die Mglichkeit unter Verwendung von Native-SQL die DB-Schnittstelle zu umgehen und direkt auf die DB zuzugreifen. Erfassen von Bedingungen/Werten ber Eingabefelder Definition von Eingabefeldern PARAMETERS Variablenname TYPE datentyp. Wird zustzlich als Beschriftung fr das Eingabefeld verwendet Vor der Ausfhrung des Programms werden alle Eingabefelder angezeigt Der eingegebene Wert wirt in der zugehrigen Variable gespeichert
Programme mit Varianten Ein Programm mit Varianten ist ein Programm, dessen Eingabefelder mit Werten vorbelegt sind. Zu einem Programm knnen beliebig viele Varianten gespeichert werden. Vorbereitung: Bei der Erstellung des Programms muss die Verwendung von Varianten aktiviert werden. Anlegen einer Variante 1. Programm muss gespeichert sein. 2. rechte Maustaste auf Programmname (linkes Fenster) Anlegen Variante unter SE38 kann man das Programm mit der Variante starten! Im SE80 unter springen lassen sich auch weitere Varianten anlegen Zuordnen von Transaktionscodes Transaktionscode: Kurzbezeichnung fr ein Programm, ber die es gestartet werden kann Einem Programm knnen beliebig viele Transaktionscodes zugeordnet werden (Jeder TC kann nur einem Programm zugeordnet werden)
3. 4.
klicken
5.
6. 7. 8.
speichern
Strukturierte Datentypen
1. Variante DATA var TYPE tabelle. Strukturvariable var Anzahl der Strukturelemente = Anzahl Tabellenspalten Name der Strukturelement = Bezeichnung der Tabellenspalten Datentypen der Strukturelement = Kompatibilitt zu Datentypen der Tabellenspalten 2. Variante Manuelle Definition eines Datentyps TYPES: BEGINN OF datentyp, element1 TYPE datentyp1, element2 TYPE datentyp2, END OF datentyp. DATA var TYPE datentyp. (Deklaration einer Variable von selbst def. Datentyp) Datentyp mit dem Namen datentyp, der die Element element1 & element2 besitzt.
Beispiel (Report
Z80203_UEBUNG2)
TYPES: Begin of dt1, z1 TYPE i, z2 TYPE I, End of dt1. DATA: var TYPE dt1, erg TYPE i. var-z1 = 3. z1 = Name des Strukturelements var-z2 = 4. erg = var-z1 + var-z2. write erg.
1. Variablen gleichen Datentyps Data: var1 TYPE dt1, var2 TYPE dt1. var1-z1 = 3. var1-z2 = 4. var1 = var1.
Writer: var2-z1, var2-z2. Der Inhalt der Strukturvariable var1 wird Elementweise in die Strukturvariable var2 kopiert. (entspricht: var2-z1 = var1-z1. var2-z2 = var1-z2.)
Voraussetzung fr eine direkte Zuweisung
1. Fall: - beide Variablen sind vom gleichen strukturierten Typ Zuweisung jederzeit mglich 2. Fall: - beide Variablen sind von unterschiedlichen strukturierten Typen Zuweisung nur mglich wenn: - gleiche Anzahl von Elementen - Datentypen der Strukturelemente mssen identisch und in der gleichen Reihenfolge definiert sein Zuweisung erfolgt in der Reihenfolge, in der die Strukturelemente definiert sind
REPORT Z80203_UEBUNG2 .
TYPES: Begin of dt1, z1 TYPE i, z2 TYPE i, End of dt1, *DATA: var TYPE dt1, erg TYPE i. *var-z1 = 3. "z1 = Name des Strukturelements *var-z2 = 4. *erg = var-z1 + var-z2. *write erg.
*Data: var1 TYPE dt1, * var2 TYPE dt1. *var1-z1 = 3. *var1-z2 = 4. *var2 = var1. *write : var2-z1, var2-z2. Begin of dt2, a TYPE i, b TYPE i, END of dt2, Begin of dt3, z1 TYPE string, z2 TYPE string, END of dt3, Begin of dt4, a TYPE i, b TYPE i,
c TYPE i, END of dt4. DATA: var1 var2 var3 var4 TYPE TYPE TYPE TYPE dt1, dt2, dt3, dt4.
var1-z1 = 3. var1-z2 = 4. var2 = var1. write: var2-a, var2-b. *var3 = var1. var4 = var1. uline. "Fehler: Datentypen nicht kompatibel "elementweise Zuweisung aller vorhandenen Elemente "--> 3 (var1-z1) 4(var-z2) "0 (Standardinitialisierung fr integer)
write: var4-a, var4-b, var4-c. var4-a var4-b var4-c var1 = uline. write: = 6. = 7. = 8. var4. var1-z1, var1-z2.
*Die Zuweisung erfolgt immer in der Reihenfolge, in der die *Strukturelemente definiert *werden * *Die Namen der Elemente spielen keine Rolle
Es knnen beliebige Strukturen zugewiesen werden. Es werden dabei elementweise alle namensgleichen Strukturelemente zugewiesen. Alle Strukturelemente, die nur in einer Struktur vorhanden sind werden NICHT in die Operation einbezogen. Falls die Zuweisung eines Strukturelementes z.B. aus Konvertierungsgrnden, nicht ausgefhrt werden kann, tritt ein Laufzeitfehler auf und das Programm bricht an dieser Stelle ab. Syntax: move-corresponding var1 to var2. var1 und var2 mssen von einem strukturierten Typ sein
REPORT Z80204_MOVE_CORRESPONDING .
TYPES: BEGIN OF dt1, a TYPE i, b TYPE i, c TYPE i, END OF dt1, BEGIN OF dt2, c TYPE i, d TYPE i, a TYPE i, END OF dt2, BEGIN OF dt3, z1 TYPE i, z2 TYPE i, END OF dt3, BEGIN OF dt4, b TYPE i, END OF dt4,
BEGIN OF dt5, a TYPE i, b TYPE string, END OF dt5. DATA: var1 var2 var3 var4 var5 TYPE TYPE TYPE TYPE TYPE dt1, dt2, dt3, dt4, dt5.
var1-a = 1. var1-b = 2. var1-c = 3. move-corresponding var1 to var2. write: var2-a, var2-c, var2-d. *Ausgabe:1(var2-c),3(var2-c),0(Initialwert var2-d,Standardwert integer) uline. move-corresponding var1 to var3. *keine bereinstimmenden Felder -> keine Zuweisung write: var3-z1, var3-z2. *Ausgabe:0,0(Initialwerte) uline. var4-b = 7. move-corresponding var4 to var1. *von der Zuweisung ist nur Element b betroffen write: var1-a, var1-b,var1-c. *Ausgabe: 1,7,3 uline. move-corresponding var1 to var5. *a wird normal zugewiesen & b automatisch in einen String konvertiert write: var5-a, var5-b. *Ausgabe: 1,7 uline. var5-b = '42'. move-corresponding var5 to var1. *a wird normal zugewiesen & b automatisch in einen Integer konvertiert *c ist nicht betroffen da keine korrespondierenden Elemente write: var1-a, var1-b, var1-c. *Ausgabe: 1,42,3 var5-b = 'abc'. move-corresponding var5 to var1. *a wird normal zugewiesen & b verursacht Laufzeitfehler da String nicht *konvertiert werden kann
Interne Tabellen
Bisheriger Zugriff auf eine DB-Tabelle: DATA z TYPE scarr. SELECT * FROM scarr INTO CORRESPONDING FIELDS OF z. WRITE: z-carrid, z-carrname. Bearbeitung von jeweils einer Zeile der Tabelle NEW-LINE. ENDSELECT. Nachteil: kein wahlfreier Zugriff auf einzelne Datenstze mglich (Abarbeitung nur von oben nach unten) jeder DS kann nur einmal bearbeitet werden (erneuter Zugriff wrde auch neuen DB Zugriff bedeuten) es knnen keine temporren nderungen an einzelnen DS vorgenommen werden Vorteil:
sparsamer Umgang mit Speicherressourcen, d.h. es wird immer nur Speicherplatz fr einen DS bentigt
Definition einer internen Tabelle DATA itab TYPE STANDARD TABLE OF dbtabelle. Name der internen Tabelle Art der Tabelle Datenbanktabelle deren (es existieren zwei weitere Struktur bernommen werden Arten: sorted table soll. hashed table Es wird eine interne Tabelle mit gleicher Struktur wie die DB-Tabelle erzeugt. Eine interne Tabelle kann hnlich einer DB-Tabelle beliebig viele DS speichern, aber die DS befinden sich im Speicher und nicht in der DB. Eine interne Tabelle wird Whrend der Programmabarbeitung benutzt, im den Inhalt von DB-Tabellen zwischenzuspeichern.
Fllen einer internen Tabelle mit Werten aus der DB SELECT * FROM dbtabelle INTO TABLE itab WHERE Bedingung. Alle DS der dbtabelle, welche der Bedingung entsprechen, werden in die Tabelle bertragen Verwenden einer internen Tabelle
REPORT Z80204_INTERNE_TABELLEN DATA: itab TYPE STANDARD TABLE OF scarr, zeile1 TYPE scarr, "Variante 1 zeile2 LIKE Line of itab. "Variante 2 *beide Varianten knnen alternativ verwendet werden SELECT * FROM scarr INTO TABLE itab. *speichert selektierte DS in der internen Tabelle LOOP AT itab INTO zeile1. *durchluft die interne Tabelle und speichert den aktuell betrachteten *DS in der Struktur zeile1 WRITE: zeile1-carrid, zeile1-carrname. NEW-LINE. *Bearbeitung der aktuellen Zeile ENDLOOP. .
Indexzugriff auf die interne Tabelle - beim Ausfhren der select-Anweisung, d.h. beim bertragen der Daten aus der DB-Tabelle in die interne Tabelle werden alle Datenstze in der Reihenfolge indiziert, in der sie von der select- Anweisung geliefert werden 1. Datensatz Index 1 Schleife ber einen Indexbereich: LOOP at itab into zeile1 from 3 to 5.3 als erster Index der betrachtet werden soll
write: zeile1-carrid, zeile1-carrname. new-line. ENDLOOP. in der Schleife werden nur die Datenstze 3,4, und 5 betrachtet - falls der letzte Index > der Anzahl der Datenstze ist, wird die Schleife bis zum letzten Datensatz abgearbeitet - falls beide Indizes gleich sind wird nur ein Datensatz bearbeitet und falls der erste Index > als der letzte ist, wird kein Datensatz bearbeitet wahlfreier Zugriff auf einzelne Datenstze READ TABLE itab into zeile1 INDEX 3. --> 3. Zeile der internen Tabelle wird in Struktur zeile1 gespeichert write: zeile1-carrid, zeile1-carrname. Falls der Index nicht existiert, erscheint keine Ausgabe in Zeile1 Beispiel: READ TABLE itab INTO zeile1 INDEX 3. WRITE: zeile1-carrid, zeile1-carrname. READ TABLE itab INTO zeile1 INDEX 100. Es existiert kein DS mit index 100!!! WRITE: zeile1-carrid, zeile1-carrname. Die Anweisungen werden ausgefhrt, aber fr den DS der nicht existiert werden ohne nderung die Daten aus DS mit dem Index 3 ausgegeben. Prfung erforderlich, ob die Anweisung erfolgreich ausgefhrt wurde Erfolgsprfung fr das Ausfhren einer Anweisung Jede Anweisung, die eine solche Prfung untersttzt fllt nach der Ausfhrung automatisch das Systemfeld sy-subrc. Ein Wert 0 bedeutet, dass die Anweisung erfolgreich ausgefhrt wurde. Jeder andere Wert bedeutet, dass whrend der Ausfhrung ein Fehler aufgetreten ist.
READ TABLE itab INTO zeile1 INDEX 100. IF sy-subrc = 0. WRITE: zeile1-carrid, zeile1-carrname. ELSE. write 'Datensatz existiert nicht!' ENDIF.
Schlsselzugriff bedeutet, dass die DS ber Bedingungen selektiert werden, die sich auf einzelne Felder der Tabelle beziehen. Zugriff ber eine Schleife
LOOP AT itab INTO zeile1 WHERE carrid = 'AA' or carrid = 'AB'. WRITE: zeile1-carrid, zeile1-carrname. NEW-LINE. ENDLOOP.
Jokerzeichen (LIKE) sind in bei internen Tabellen nicht zulssig, Abfragen knnen aber mit OR/AND verknpft werden. Wahlfreier Zugriff auf einen einzelnen DS
READ TABLE itab into zeile1 with key carrid = 'AA'. if sy-subrc = 0. WRITE: zeile1-carrid, zeile1-carrname. NEW-LINE. Bedingung ENDIF.
Erfolg der Anweisung muss vor der Verarbeitung des Ergebnisses geprft werden Operationen fr interne Tabellen Einfgen von Datenstzen 1. Definition des DA der angelegt werden soll. zeile1-carrid = CA. zeile1-carrname = CDI Airline. zeile1-currcode =Eur. zeile1-mandt = 802. Zeile1-url = http://www.cdi.de. 2. Operationen zum Einfgen aufrufen a) Einfgen mit append (nur fr Standardtabellen)
APPEND zeile1 TO itab. *Datensatz wird am ende der Tabelle angefgt
ndern von Datenstzen 1. Alle Werte definieren, die fr einen DS gendert werden sollen. zeile1-carrname = CDI Airline GmbH. Alle Felder die Nicht von der nderung betroffen sind, brauchen Nicht definiert werden. 2. Operation zum ndern aufrufen MODIFY itab FROM zeile1 TRANSPORTING carrname WHERE carrid = CA. Fr alle DS fr welche die Bedingung erfllt ist, werden die angegebenen Felder durch die Where in der angegebenen Struktur ersetzt. Sortieren einer internen Tabelle
SORT itab BY carrname ASCENDING. SORT itab BY carrname DESCENDING. *Interne Tabelle wird umsortiert und in der neuen sortierten Reihenfolge *gespeichert *Wenn die Tabelle nach dem sort-Befehl in einer Schleife durchlaufen wird, *erscheinen die DS in sortierter Reihenfolge *Die Sortierreichenfolge richtet sich nach der Position der Zeichen im ASCIICODE!
Sortieren nach mehreren Feldern SORT itab BY carrname ASCENDING carrid DESCENDING as text Zurcksetzen einer internen Tabelle 1. Lschen des Tabelleninhaltes REFRESH itab. Tabelle wird auf Ursprungszustand zurckgesetzt, d.h. alle DS werden gelscht 2. Zurcksetzen des Inhaltes mit einer DB-Tabelle SELECT * FROM dbtabelle INTO TABLE itab. Tabelle wird gelscht und dann mit den Daten der Abfrage neu gefllt
Unterprogramm
Definition und Verwendung
REPORT Z80205_UNTERPROG.
*Aufruf eines definierten Unterprogramms *----------------------------------------PERFORM unterprog1. ULINE. PERFORM unterprog1. *Definition des Unterprogramms *-----------------------------* unterprog1 ist der Name des Unterprogramms. FORM unterprog1. * Anweisungen, die ausgefhrt werden sollen, * wenn das Unterprogramm aufgerufen wird. WRITE 'Ich bin das Unterprogramm.'. ENDFORM.
Unterprogramm mit Parametern Mechanismen zur Parameterbergabe call by value nderungen an den formalen Parametern haben keine Auswirkungen auf die aktuellen Parameter an der Aufrufstelle. call by reference nderungen an den formalen Parametern im Unterprogramm wirken sich auf die aktuellen Parameter an der Aufrufstelle aus. call by value and result Whrend der Abarbeitung des Unterprogramms haben nderungen an den formalen Parametern keine Auswirkungen auf die aktuellen Parameter an der Aufrufstelle. Nach korrekter Beendigung des Unterprogramms wird der Wert des formalen Parameters in den aktuellen Parameter bertragen. Falls das Unterprogramm korrekt beendet wird, ergibt sich das gleiche Ergebnis wie bei call by reference. Falls das Unterprogramm vorzeitig abgebrochen wird, ergeben sich keine Auswirkungen auf die Aufrufstelle (call by value). Definition und Verwendung Einem call by value Parameter knnen konkrete Werte oder der Wert einer Variablen bergeben werden. Einem call by reference oder call by value and result Parameter knnen nur Werte einer Variablen bergeben werden.
DATA: a b c d TYPE TYPE TYPE TYPE i i i i VALUE VALUE VALUE VALUE 1, 2, 3, 4.
*Die Parameter werden in der Reihenfolge zugewiesen, in der sie im *Unterprogramm definiert sind
Bsp.:
DATA: a TYPE i, b TYPE i, c TYPE i. a = 1. b = 2. c = 3. PERFORM up USING a CHANGING b c. WRITE: a, b, c. FORM up USING VALUE(p1) TYPE i CHANGING p2 TYPE i VALUE(p3) TYPE i. WRITE: p1,p2,p3,b,c. uline. p1 = 4. p2 = 5. p3 = 6. WRITE: p1,p2,p3,b,c. uline. ENDFORM.
- Das verndern von p3 hat keine direkte Auswirkung auf c - Der Wert von p3 wird erst nach Beendigung des Unterprogramms bertragen
Wert wird durch die Referenz direkt beim setzen von p2 verndert
Abarbeitung des Aufrufs 1. Fr alle call by value bzw. call by value and result Parameter wird der Wert der aktuellen Parameter in die formalen Parameter kopiert. Fr alle call by reference Parameter wird ein Verweis(Zeiger) vom formalen Parameter auf den aktuellen Parameter angelegt. 2. Unterprogramm wird unter Verwendung der formalen Parameter abgearbeitet. NUR nderungen an call by reference Parametern haben direkte Auswirkungen auf die aktuellen Parameter an der Aufrufstelle. 3. Nach korrekter Beendigung des Unterprogramms wird fr alle call by value and result Parameter der Wert des formalen Parameters in den aktuellen Parameter an der Aufrufstelle kopiert.
PERFORM up. WRITE a. FORM up. WRITE a. Zugriff auf globale Variable, da die locale noch nicht existiert. Ausgabe: 5 DATA a TYPE i. WRITE a. ULINE. a = 10. WRITE a. ULINE. ENDFORM.
Falls eine lokale Variable mit gleichem Namen wie eine globale deklariert wird, dann berdeckt die lokale Variable die globale und es ist innerhalb des Unterprogramms nur die lokale sichtbar. bergabe von internen Tabellen an Unterprogramme Bsp.:
TYPES itab_typ TYPE standard table of scarr. *Definiert den Datentyp einer internen Tabelle mit der gleichen Struktur *wie die DB-Tabelle scarr. DATA itab TYPE itab_typ. *Deklariert eine interne Tabelle SELECT * FROM scarr INTO TABLE itab. PERFORM ausgabe CHANGING itab. ULINE. SELECT * FROM scarr INTO TABLE itab WHERE carrid LIKE 'a%'. PERFORM ausgabe CHANGING itab. FORM ausgabe CHANGING pitab TYPE itab_typ. DATA zeile LIKE LINE OF pitab. *oder DATA zeile TYPE scarr. LOOP AT pitab INTO zeile. WRITE: zeile-carrid, zeile-carrname. NEW-LINE. *zeilenweise Ausgabe der bergebenen Tabelle ENDLOOP. ENDFORM.
Variantenbersicht:
TYPES itab_typ TYPE standard table of scarr. *Definiert den Datentyp einer internen Tabelle mit der gleichen Struktur *wie die DB-Tabelle scarr. DATA itab TYPE itab_typ. *Deklariert eine interne Tabelle SELECT * FROM scarr INTO TABLE itab. PERFORM ausgabe CHANGING itab. ULINE. SELECT * FROM scarr INTO TABLE itab WHERE carrid LIKE 'A%'. PERFORM ausgabe CHANGING itab. ULINE. SELECT * FROM scarr INTO TABLE itab. PERFORM up1 USING itab. PERFORM ausgabe CHANGING itab. *call by value -> Aufruf von up1 dauert lange, da die komplette interne *Tabelle kopiert wird. Lschen innerhalb von up1 hat KEINE Auswirkung *auf itab. ULINE. SELECT * FROM scarr INTO TABLE itab. PERFORM up2 CHANGING itab. PERFORM ausgabe CHANGING itab.
*call by reference -> schnelle Ausfhrung, da nur eine Referenz auf itab *erzeugt wird. Lschvorgang innerhalb von up2 hat Auswirkungen auf *itab, d.h. der DS wird aus itab gelscht ULINE. SELECT * FROM scarr INTO TABLE itab. PERFORM up3 CHANGING itab. PERFORM ausgabe CHANGING itab. *call by value and result -> sehr schlechte Performance, da beim Aufruf *und beim Rcksprung jeweils die komplette Tabelle kopiert wird. *Lschvorgang innerhalb von up3 wirkt sich nach korrekter Beendigung auf *itab aus, d.h. der DS wird aus itab gelscht. FORM ausgabe CHANGING pitab TYPE itab_typ. DATA zeile LIKE LINE OF pitab. *oder DATA zeile TYPE scarr. LOOP AT pitab INTO zeile. WRITE: zeile-carrid, zeile-carrname. NEW-LINE. *zeilenweise Ausgabe der bergebenen Tabelle ENDLOOP. ENDFORM. FORM up1 DELETE ENDFORM. FORM up2 DELETE ENDFORM. FORM up3 DELETE ENDFORM. USING VALUE(pitab) TYPE itab_typ. pitab WHERE carrid = 'AA'. CHANGING pitab TYPE itab_typ. pitab WHERE carrid = 'AA'. CHANGING VALUE(pitab) TYPE itab_typ. pitab WHERE carrid = 'AA'.
Ereignisbearbeitung fr Listenausgaben Falls in einem ABAP-Programm KEINE Ereignisse explizit bearbeitet werden, wird das Programm sequenziell von oben nach unten abgearbeitet. Falls Ereignisse bearbeitet werden, wird nur der Code bearbeitet, der zum entsprechenden Ereignis gehrt. Ereignisse: START-OF-SELECTION tritt beim Programmstart ein, d.h. alle Anweisungen zum Aufbau einer Liste mssen enthalten sein tritt ein wenn ein Nutzer auf eine Listenzeile doppelklickt
AT LINE-SELECTION
Aufbau eines Programms mit Ereignisbearbeitung Ereignis1. Anweisung1. Anweisung2. Ereignis2. Anw1. Anw2. Anw3. ...
START-OF-SELECTION.
WRITE 'Zeile 1'. NEW-LINE. WRITE 'Zeile 2'. NEW-LINE. WRITE 'Zeile 3'. AT LINE-SELECTION. WRITE 'Es wurde geklickt'. *nach einem Doppelklick auf eine Zeile der Startliste wird eine neue *Liste aufgebaut und "Es wurde geklickt" ausgegeben
Informationen ber den gewhlten Eintrag ermitteln Die Struktur sy enthlt Informationen ber die gewhlte Listenzeile. Alle verfgbaren Felder von sy ermitteln: 1. SE11 aufrufen 2. Datentyp auswhlen syst eingeben: Datentyp aus dem die Variable sy entstanden ist 3. anzeigen klicken Liste aller Felder die vorhanden sind SY-LILLI SY-LSIND gibt die Position des gewhlten Listenelementes an (1. Zeile sy-LILLI = 1) Index der Liste die aktuell angezeigt wird. Startliste: Index = 0 Doppelklick: Index = 1 Doppelklick: Index = 2 Inhalt des Listenelementes auf das doppelt geklickt wurde
SY-LISEL
DATA: itab TYPE STANDARD TABLE OF spfli, zeile TYPE spfli. *inner Tabelle itab mit Struktur von spfli PARAMETERS stadt TYPE c length 20. *Eingabefeld STADT mit lnge 20 SELECT * FROM spfli INTO TABLE itab WHERE cityfrom LIKE stadt. *Liste der Bedingung entsprechende Eintrge IF sy-subrc = 0. *Prfen ob Werte gefunden WRITE:'Startflughafen','Ziel','Abflugzeit','Ankunftzeit'. ULINE. *berschrift fr Liste LOOP AT itab INTO zeile. WRITE: zeile-cityfrom, zeile-cityto, zeile-deptime, zeile-arrtime, zeile-connid. NEW-LINE. ENDLOOP. *Ausgabe der Liste ELSE. WRITE 'keine Flge vorhanden!'. ENDIF. *Ausgabe das nscht gefunden AT LINE-SELECTION. *Wenn auf einer Zeile Doppelgeklickt wird IF sy-lilli > 4 and sy-lsind <= 1. *Wenn Zeilenwahl grsser als 4 und index <= 1 DATA: ind TYPE i,
zeile_scarr TYPE scarr. ind = sy-lilli - 4. *Index ist der angeklickte - 4 READ TABLE itab INTO zeile INDEX ind. *Einlesen der Zeile mit dem Index ind aus der internen Tabelle WRITE 'Detailinformationen zum Flug'. NEW-LINE. WRITE: 'Von: ',zeile-cityfrom,'Nach: ',zeile-cityto. NEW-LINE. WRITE: 'Von Airport: ',zeile-airpfrom,'Nach Airport: ',zeile-airpto. NEW-LINE. WRITE: 'Abflug: ',zeile-deptime,'Ankunft: ',zeile-arrtime. NEW-LINE. *Ausgabe der Inhalte SELECT * FROM scarr INTO zeile_scarr WHERE carrid = zeile-carrid. *carrid mit carrid aus scarr vergleichen und carrname auslesen WRITE: 'Fluggesellschaft: ',zeile_scarr-carrname. *carrname schreiben ENDSELECT. ENDIF.
Ausgabe:
WRITE AT 4 Hallo. *Spalte 4 ist die Spalte ab der die Ausgabe erscheinen soll. NEW-LINE. WRITE AT 5 Welt. WRITE: 4 Hallo, 20 Welt alles in einer Zeile jeweils ab Pos. 4 und 20
WRITE Anfang. NEW-LINE. INCLUDE Z80304_I1. NEW-LINE. WRITE Dazwischen. NEW-LINE. INCLUDE Z80304_I2. NEW-LINE. WRITE ENDE. INCLUDE Z80304_I2.
Beim Ausfhren des Programms wird immer die aktive Fassung der Includes Verwendet, d.h. INCLUDES mssen nach jeder nderung aktiviert werden.
Regeln/Eigenschaften von Includes Vollst. Abgeschlossene Schachtelungsstruktur Zugriff nur auf Datenobjekte, die innerhalb des Include definiert sind Kann in beliebig vielen Quelltexten beliebig oft eingebunden werden Es wird beim Ausfhren immer die aktive Fassung des Include eingebunden Beim Aufruf des Programms wird der Include-Befehl textuell durch den Inhalt des Include ersetzt
Jede Wiederholung der Schritte 2 und 3 erzeugt ein neues Objekt und hngt es an die Tabelle an Durchlaufen der internen Tabelle und Zugriff auf die einzelnen Objekte LOOP AT itab INTO obj. *interne Tabelle durchlaufen (Die aktuell betrachtete zeile wird in der Variablen obj gespeichert) WRITE: obj->hersteller, obj->typ, obj->farbe NEW-LINE. ENDLOOP. gespeicherte Objekte werden der Reihe nach durchlaufen und fr jedes Objekt werden die Eigenschaften zeilenweise in einer Liste ausgegeben.