4GL Sprachen der vierten Generation



Ähnliche Dokumente
A.4 Beispiel zum -Versand über Smart Forms

Prozedurale Datenbank- Anwendungsprogrammierung

10.6 Programmier-Exits für Workitems

Dynamisches SQL. Folien zum Datenbankpraktikum Wintersemester 2009/10 LMU München

ajanzen.com Beispiele für den Umgang mit Feldsymbolen

Gesicherte Prozeduren

Datenbanken SQL Einführung Datenbank in MySQL einrichten mit PhpMyAdmin

SQL (Structured Query Language) Schemata Datentypen

Kapitel 10: Datenbankzugriff & Pufferung 2

Schmitt, Günter (1996): Fortran 90 Kurs technisch orientiert, R. Oldenbourg Verlag, München

VBA-Programmierung: Zusammenfassung

3. Stored Procedures und PL/SQL

Datenmigration. Tipps und Tricks

Java Kurs für Anfänger Einheit 4 Klassen und Objekte

Dipl. Inf. Dipl. Math. Y. Orkunoglu Datum:

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf Seite 1 von 18

Vorkurs C++ Programmierung

Fachhochschule Deggendorf Platzziffer:...

Session Beans & Servlet Integration. Ralf Gitzel ralf_gitzel@hotmail.de

Java Kurs für Anfänger Einheit 5 Methoden

Übung 9 - Lösungsvorschlag

Datenmanagement in Android-Apps. 16. Mai 2013

tentoinfinity Apps 1.0 EINFÜHRUNG

desk.modul : WaWi- Export

Mengenvergleiche: Alle Konten außer das, mit dem größten Saldo.

Erweiterung der Aufgabe. Die Notenberechnung soll nicht nur für einen Schüler, sondern für bis zu 35 Schüler gehen:

5 DATEN Variablen. Variablen können beliebige Werte zugewiesen und im Gegensatz zu

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java:

Informatik 12 Datenbanken SQL-Einführung

2. Datenbank-Programmierung

Mächtigkeit von WHILE-Programmen

Kap. 5.5: ABAP-Programmierung mit Open- und Native-SQL

Sin-Funktion vgl. Cos-Funktion

Einführung in die C++ Programmierung für Ingenieure

Allgemeines zu Datenbanken

Modul 122 VBA Scribt.docx

pro4controlling - Whitepaper [DEU] Whitepaper zur CfMD-Lösung pro4controlling Seite 1 von 9

IV. Datenbankmanagement

Arbeiten mit einem lokalen PostgreSQL-Server

Modellierung und Programmierung 1

Datenbanktechnologie mit praktischen Übungen in MySQL und PHP

7HVWHQYRQ6$3$QZHQGXQJHQPLWGHP([WHQGHG &RPSXWHU$LGHG7HVW7RROH&$77

Referenzielle Integrität SQL

Tel.: Fax: Ein Text oder Programm in einem Editor schreiben und zu ClassPad übertragen.

Database Exchange Manager. Infinqa IT Solutions GmbH, Berlin Stralauer Allee Berlin Tel.:+49(0) Fax.:+49(0)

Übersicht Programmablaufsteuerung

teischl.com Software Design & Services e.u. office@teischl.com

SQL: statische Integrität

Ein Ausflug zu ACCESS

Programmierung in C. Grundlagen. Stefan Kallerhoff

Tutorium Rechnerorganisation

Anwendungsbeispiele Sign Live! Secure Mail Gateway

Datenübernahme easyjob 3.0 zu easyjob 4.0

Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {...

OPERATIONEN AUF EINER DATENBANK

Oracle: Abstrakte Datentypen:

Kommunikationsübersicht XIMA FORMCYCLE Inhaltsverzeichnis

Java Virtual Machine (JVM) Bytecode

Anleitung Union Homepage

Programmierparadigmen. Programmierparadigmen. Imperatives vs. objektorientiertes Programmieren. Programmierparadigmen. Agenda für heute, 4.

SQL SQL. SQL = Structured Query Language (SEQUEL) IBM San Jose Research Laboratory SYSTEM R. Grundlagen der Datenbanksysteme I

Kurzanleitung für Umsteiger von DataEase.

php Hier soll ein Überblick über das Erstellen von php Programmen gegeben werden. Inhaltsverzeichnis 1.Überblick Parameterübergabe...

Kurzeinführung LABTALK

Unterprogramme. Funktionen. Bedeutung von Funktionen in C++ Definition einer Funktion. Definition einer Prozedur

Der Aufruf von DM_in_Euro 1.40 sollte die Ausgabe 1.40 DM = Euro ergeben.

Benutzerverwaltung Business- & Company-Paket

Suche schlecht beschriftete Bilder mit Eigenen Abfragen

KURZANLEITUNG CLOUD OBJECT STORAGE

Client-Server-Beziehungen

IT-Basics 2. DI Gerhard Fließ

Tevalo Handbuch v 1.1 vom

Excel Funktionen durch eigene Funktionen erweitern.

2. Programmierung in C

Apparo Fast Edit Version im Vergleich zu Was ist neu?

seit Java 1.1 Bestandteil der API: packages java.sql, javax.sql

How-to: Webserver NAT. Securepoint Security System Version 2007nx

Whitepaper. Produkt: combit Relationship Manager. Einbindung externer FiBu-/Warenwirtschaftsdaten. combit GmbH Untere Laube Konstanz

Der Kundenmanager. Der Kundenmanager der Firma AED-SICAD ist ein Bestandteil des Web Order System (WOS) und unterscheidet zwischen folgenden Kunden:

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen

Virtueller Seminarordner Anleitung für die Dozentinnen und Dozenten

HTML5 HOCKEYSTICK EXPANDABLE BANNER v1.0

Pakete dienen dazu, die Software eines Projektes in größere inhaltlich zusammengehörige Bereiche mit eigenem Namen einzuteilen (siehe Java API).

Java Einführung Packages

Einfache und effiziente Zusammenarbeit in der Cloud. EASY-PM Office Add-Ins Handbuch

Pass by Value Pass by Reference Defaults, Overloading, variable Parameteranzahl

Software Engineering. Zur Architektur der Applikation Data Repository. Franz-Josef Elmer, Universität Basel, HS 2015

Excel Pivot-Tabellen 2010 effektiv

SQL für Trolle. mag.e. Dienstag, Qt-Seminar

Institut für Programmierung und Reaktive Systeme 26. April Programmieren II. 10. Übungsblatt

XAMPP-Systeme. Teil 3: My SQL. PGP II/05 MySQL

Klausurteilnehmer. Wichtige Hinweise. Note: Klausur Informatik Programmierung, Seite 1 von 8 HS OWL, FB 7, Malte Wattenberg.

7. Datenbank-Zugriff. Vorlesung und Übung Dr. Peter Pfahler Institut für Informatik Universität Paderborn. Zum Beispiel aus PHP-Skripten: Client 7-2

Tag 4 Inhaltsverzeichnis

Nachtrag: Farben. Farbblindheit. (Light und Bartlein 2004)

Access Grundlagen für Anwender. Susanne Weber. 1. Ausgabe, 1. Aktualisierung, Juni 2013

Transkript:

Teil 8 ABAP/4 4GL Sprachen der vierten Generation Abap/4 Advanced Business Application Programming 4GL Proprietäre Programmiersprache der SAP-AG zum Einsatz im R/3 System Aber was ist SAP? R/3? 4GL? Business Programming? Literatur: Kretschmer, Weiß: Developing SAP s R/3 Applications with ABAP/4, Sybex, 1996 Matzke: ABAP/4, Addison-Wesley, 1998. Prof. Dr. Gerhard Goos Höhere ProgrammiersprachenWS 2001/2 1 Prof. Dr. Gerhard Goos Höhere ProgrammiersprachenWS 2001/2 2 SAP-AG Das SAP R/3 System Gegründet von früheren IBM-Mitarbeitern Hector, Hopp, Plattner, Tschira Unternehmensidee: Anpaßbare Standard-Software für Unternehmen Personalverwaltung Produktionsplanung und -steuerung Finanzen (z.b. Wertpapierhandel) Einkauf und Vertrieb Dritte Generation des Standard-Softwarepakets R/1 vollständig in COBOL implementiert seit R/2 in C Dreischichtige Systemarchitektur SAP-GUI zur Benutzerinteraktion Anwendungsserver zur Ausführung von Programmen Datenbankserver zur Datenhaltung Client Client R/3 App- Server Client DB-Server DB Client App- Server Prof. Dr. Gerhard Goos Höhere ProgrammiersprachenWS 2001/2 3 Prof. Dr. Gerhard Goos Höhere ProgrammiersprachenWS 2001/2 4

Was heißt 4GL Ziele und Entwurfsentscheidungen 4GL = 4th Generation Language Integration von Datenbank- und Benutzerschnittstellenanweisungen in die Programmiersprache Befehle zur Abfrage und Manipulation einer Datenbank Umfang: etwa SQL Befehle zur einfachen Erstellung von Benutzeroberflächen Im Grunde sind alle heutigen Programmiersprachen 4GL: alle Sprachen verfügen über Bibliotheksmodule für den Datenbankzugriff und (mindestens) einen Zugang zu Tcl/Tk Problem: Das Typsystem der Sprache und die (schwache) Typisierung von SQL passen oft nicht zusammen. Einfachere Programmierung betriebswirtschaftlicher Anwendungen Berichte (Aufbereiten von Informationen aus der Datenbank) Transaktionen (Kontrollierte Änderungen des Datenbestandes) Programme repräsentieren Wissen über Geschäftsprozesse Anwendungen sind langlebig (vgl. Y2K-Problem)! Vermeidung von Dokumentationsverlust Programm = Dokumentation ABAP/4-Programme sollen einfach lesbar und verständlich sein. Vermeidung von Programm(quellen)verlust Programme in der Systemdatenbank speichern Programme bleiben erhalten, solange das System arbeitet Inkonsistenzen zwischen kooperierenden Programmen (auf dem gleichen Datenbankbestand) können einfach ermittelt werden Prof. Dr. Gerhard Goos Höhere ProgrammiersprachenWS 2001/2 5 Prof. Dr. Gerhard Goos Höhere ProgrammiersprachenWS 2001/2 6 Programmarten Entwicklung, Übersetzung, Ausführung Reports = parametrisierbare (interaktive) Berichte Liste aller Kunden Telefonrechnung Lagerbestand Dialog Programs = dialoggesteuerte Transaktionen An- und Verkauf von Aktien Personaleinstellung Datenerfassung Entwicklung: Interaktive Entwicklungsumgebung (ABAP-Workbench) Programmierstil durch Umgebung erzwungen (Halb-)automatische Korrektur offensichtlicher syntaktischer Fehler (vergleichbar mit Rechtschreibprüfung) Übersetzung: Abbildung komplexer Befehle in einfache (syntaktische Transformation nach semantischer Analyse) Übersetzung einfacherer Befehle in Byte-Code Ausführung: Ausführung im Laufzeitsystem auf Anwendungsserver (Virtuelle Maschine) Kommunikation mit Datenbankserver (Anfrageoptimierung auf DB-Server) Prof. Dr. Gerhard Goos Höhere ProgrammiersprachenWS 2001/2 7 Prof. Dr. Gerhard Goos Höhere ProgrammiersprachenWS 2001/2 8

ABAP/4 am Beispiel Aufbau von Programmen report my_rep. tables rechnungen. data: plzsum(10) type n value 0, gessum(10) like plzsum, plz like rechnungen-plz move 0 to gessum. select * from rechnungen ordered by PLZ. at first. write / Offene Rechnungen nach PLZ. at new PLZ. if plzsum > 0. write: / Summe für PLZ, plz, `: `, plzsum. endif. clear plzsum. plz = rechnungen-plz. add rechnungen-offener_betrag to: plzsum, gessum. endselect. write: / Gesamtsumme offener Rechnungen:, gessum. Programm = Menge von Sätzen Satz = Menge von Worten Sätze beginnen mit einem Schlüsselwort und enden mit einem Punkt Kommentare beginnen mit * am Zeilenanfang oder an einer beliebigen Stelle und enden am Zeilenende Prof. Dr. Gerhard Goos Höhere ProgrammiersprachenWS 2001/2 9 Prof. Dr. Gerhard Goos Höhere ProgrammiersprachenWS 2001/2 10 Grobstruktur eines Reports Ein typischer Report Programmkopf Kryptischer, systemweit eindeutiger Name (z.b. RSXB01) Deklaration von Konstanten Typen Daten (Variablen) Code report rep001. tables rechnungen. data: plzsum(10) type n value 0, gessum(10) like plzsum, plz like rechnungen-plz move 0 to gessum. select * from rechnungen ordered by PLZ. at first. write / Offene Rechnungen nach PLZ. at new PLZ. if plzsum > 0. write: / Summe für PLZ, plz, `: `, plzsum. endif. clear plzsum. plz = rechnungen-plz. add rechnungen-offener_betrag to: plzsum, gessum. endselect. write: / Gesamtsumme offener Rechnungen:, gessum. inklusive privater Unterprogramme (Forms) Prof. Dr. Gerhard Goos Höhere ProgrammiersprachenWS 2001/2 11 Prof. Dr. Gerhard Goos Höhere ProgrammiersprachenWS 2001/2 12

Primitive Datentypen Datendeklaration Abkürzung Name (Grund-)Größe Vorbesetzung Beschreibung c char 1 Zwischenraum Zeichen bzw. Zeichenreihe, rechts mit Zwi aufgefüllt n number 1 '0' Ziffernfolge (einschl. führender Nullen) i integer 4 0 p packed 8 0 Festpunktzahl variabler Größe decimal (max. 16 Byte) f float 8 0 Gleitpunktzahl t time 6 '000000' 'HHMMSS' d date 8 '00000000' 'YYYYMMDD' x hexadecimal 1 '00' (Folge von) Sedezimalziffern Beispiel: data my_char. data my_string(50) value Hallo Leute. data my_num1 type num value 5. data my_num2 like my_num1. data my_packed(16) type p decimals 1 value 12345678901234567890.0. Syntax: data <Variablenbez.>[ ( <Länge> ) ] [ ( type <Typbez.> [ decimals <Dezimalst.>]) ( like <Variablenbezeichner>)] [ value <initialer Wert>] Prof. Dr. Gerhard Goos Höhere ProgrammiersprachenWS 2001/2 13 Prof. Dr. Gerhard Goos Höhere ProgrammiersprachenWS 2001/2 14 Verwendung von Variablen Initialisierung und Re-Initialisierung Beispiel: write:/ Hallo, my_char,, my_string+7(6),, my_packed. Besonderheiten: my_string+7(6) Wert der Variable my_string ab dem 7. Zeichen 6 Zeichen lang my_packed Automatische Umwandlung in passende Darstellung (Typanpassung, Koerzierung) Bei der Deklaration können Datenfeldern Standardwerte zugewiesen werden data name(50) value unbekannt. Datenfelder können auf diesen Standardwert zurückgesetzt werden clear name. müssen sie aber nicht clear name with null. clear name with nicht ganz unbekannt. Prof. Dr. Gerhard Goos Höhere ProgrammiersprachenWS 2001/2 15 Prof. Dr. Gerhard Goos Höhere ProgrammiersprachenWS 2001/2 16

Zusammengesetzte Daten (Verbunde) Bessere Schreibweise Deklaration data begin of adresse. data name(50) type n value unbekannt. data vorname(50) type n. data begin of ort. data plz(5). data name(50). data end of ort. data end of adresse. data andere_adresse like adresse. Verwendung write adresse-ort-plz. Beispiel: data: begin of adresse, name(50) type n value unbekannt, vorname(50) type n, begin of ort, plz(5), name(50), end of ort, end of adresse. data andere_adresse like adresse. Was bedeutet? add a to: b, b, b giving c. Prof. Dr. Gerhard Goos Höhere ProgrammiersprachenWS 2001/2 17 Prof. Dr. Gerhard Goos Höhere ProgrammiersprachenWS 2001/2 18 Doppelpunkt-Komma-Regel Typen und Konstanten Alle Zeichen vom Beginn einer Zeile bis zum ersten Vorkommen eines : werden kopiert und nachfolgende Kommata werden implizit durch. und das kopierte Präfix ersetzt. data: a(5), b(3). => data a(5). data b(3). move a to: b, c. => move a to b. move a to c. add a to b giving: c, d. => add a to b giving c. add a to b giving d. add a to: b, b. (!!!!!!) => add a to b. add a to b. add a to: b, b, b giving c. (!!!!!!) => add a to b. add a to b. add a to b giving c. types: begin of adresse, name(50) type n value unbekannt, vorname(50) type n, begin of ort, plz(5), name(50), end of ort, end of adresse. constants: begin of leere_adresse, name(50) value unbekannt, vorname(50) value, end of leere_adresse. data: adr1 type adresse. move-corresponding leere_adresse to adr1. Prof. Dr. Gerhard Goos Höhere ProgrammiersprachenWS 2001/2 19 Prof. Dr. Gerhard Goos Höhere ProgrammiersprachenWS 2001/2 20

Zeiger? Einfache Befehle ABAP/4 unterstützt sogenannte indirekte Werte Befehlszusätze: Bei bestimmten Befehlen werden Befehlszusätze als indirekte Werte verwendet, d.h., Variablen enthalten Namen von Variablen Field-Symbols: Zeiger auf Zeichenfolgenbereiche field-symbols <fs>. data x(100). assign x+10 to <fs>. write / <fs>. Zuweisungen move x to y. move-corresponding adresse1 to adresse2. Berechnungen compute x = y + 1. x = y + 1. add 1 to y giving x. add 1 to z. add-corresponding einzelrechnung to summen. subtract 10 from a giving b. subtract-corresponding abschlag from summen. (ähnlich für multiply, divide, ) Prof. Dr. Gerhard Goos Höhere ProgrammiersprachenWS 2001/2 21 Prof. Dr. Gerhard Goos Höhere ProgrammiersprachenWS 2001/2 22 Behandlung von Zeichenketten Sichtbarkeit von Daten, Systemfelder Offset-Längen-Schreibweise für Teilzeichenketten data plz(6) value D76128. write plz+1(5). => 76128 Verketten concatenate usr local bin into path separated by /. => /usr/local/bin Verschieben data name(10) value Edison. shift name. => dison shift name by 3 places. => son shift name right. => edison Zerteilen data names(100) value Edison,Smith,Young. split names at, into table nametab. => Tabelle enthält 3 Namen Suchen data text(100). search text for Bill. if sy-subrc ne 0. write not found. endif. Ersetzen data formel(100) value a * b + c = d replace a with 5 in text. translate formel using a5b2c3. Schemata der DB-Tabellen global sichtbar Variablen, Typen und Konstanten nur lokal sichtbar Ausnahme: Systemfelder (Verbund sy) = Global sichtbare Variablen mit genau(?) definierten Seiteneffekten sy-subrc = (meist) Ergebnis eines Unterprogrammaufrufs sy-datum = aktuelles Datum sy-tabix = aktuelle Tabellenzeile der zuletzt bearbeiteten internen Tabelle (verschiedene weitere Systemfelder) Prof. Dr. Gerhard Goos Höhere ProgrammiersprachenWS 2001/2 23 Prof. Dr. Gerhard Goos Höhere ProgrammiersprachenWS 2001/2 24

Typanpassung (I): c und n Typanpassung (II): n und p move x to: y1, y2. n nach c Zeichen werden bis zur maximalen Länge der Zeichenkette links beginnend kopiert. Bei Bedarf wird mit Leerzeichen aufgefüllt: data: x(4) type n value 1234, y1(2), y2(6). ergibt: y1 = 12, y1 = 1234 c nach n Übertragung ausschließlich der numerische Zeichen von rechts beginnend: data: x(4) value 12x4, y1(2) type n, y2(6) type n. ergibt: y1 = 24, y1 = 000124 move x to: y1, y2. n nach p Wert des Quellfelds wird im Zielfeld gespeichert, bei zu kleinem Zielfeld wird ein Laufzeitfehler ausgelöst: data: x(6) type n value 012345, y1(10) type p, y2(2) type p. ergibt: y1 = 12345, y1 = Fehler! p nach n Übertragung der Ziffern von rechts, links mit Nullen auffüllen: data: x(4) type p value 1234, y1(2) type n, y2(6) type n. ergibt: y1 = 34, y1 = 001234 Prof. Dr. Gerhard Goos Höhere ProgrammiersprachenWS 2001/2 25 Prof. Dr. Gerhard Goos Höhere ProgrammiersprachenWS 2001/2 26 Ablaufsteuerung Bedingungen und Schleifen Interne Steuerung Bedingungen Schleifen Externe Steuerung Ereignisse Bedingungen (Bsp) if betrag < 0. elseif betrag = 0. else case kundenart. when X. when Y. when others. endcase. endif. Schleifen (Bsp) do 10 times. enddo. *---------------------------- while a > b. endwhile. *---------------------------- loop at mytab. endloop. *---------------------------- select * from adressen. endselect. Prof. Dr. Gerhard Goos Höhere ProgrammiersprachenWS 2001/2 27 Prof. Dr. Gerhard Goos Höhere ProgrammiersprachenWS 2001/2 28

Tabellen Beispiel (Offene Rechnungen) Interne Tabellen (Flexible Reihungen) Direkt adressierbar (falls nicht als Hash-Tab. def.) Indizierbar optionale Kopfzeile = spezielle Zeile zur Steigerung der Zugriffseffizienz und Programmiererleichterung (Beispiel: ) Datenbanktabellen Struktur der Zeilen liegt in der Datenbank (Data Dictionary) Zusätzliche Typisierung durch Wertebereiche in der Datenbank (Domains, Data Entries) report rep002. tables rechnungen. types: begin of rechng, kunden_nr(6) type n, offener_betrag(10) type p, end of rechng. data: offene_rechnungen type rechng occurs 1000, aktuelle_rechnung type rechng, gessum(16) type p decimals 2 value 0. select kunden_nr, offener_betrag from rechnungen into offene_rechnungen where offener_betrag > 0. loop at offene_rechnungen into aktuelle_rechnung. at first. write / Es existieren offene Rechnungen!. write: / Kundennr:, aktuelle_rechnung-kunden_nr, offener Betrag:, aktuelle_rechnung-offener_betrag. add aktuelle_rechnung-offener_betrag to gessum. at last. write / Gesamtsumme der offenen Beträge:, gessum. endloop. Prof. Dr. Gerhard Goos Höhere ProgrammiersprachenWS 2001/2 29 Prof. Dr. Gerhard Goos Höhere ProgrammiersprachenWS 2001/2 30 Kombination Interner und DB-Tabellen Beispiel (Tabellenverarbeitung) Problem: Konsistenz bei Kombination interner und externer Tabellen! Lösung durch Programmierunterstützung: Entwicklungsumgebung kann Problem ist ein allgemeines Problem bei Sprachen mit Integration relationaler Daten: Statischer Typ nur schwer prüfbar! (vgl. Embedded-SQL in C++, JDBC in Java, VBA in MS-Access) report rep002. tables rechnungen. data gessum(16) type p decimals 2 value 0. select * from rechnungen where offener_betrag > 0. at first. write / Es existieren offene Rechnungen!. write: / Kundennr:, rechnungen-kunden_nr, offener Betrag:, rechnungen-offener_betrag. add rechnungen-offener_betrag to gessum. at last. write / Gesamtsumme der offenen Beträge:, gessum. endselect. Prof. Dr. Gerhard Goos Höhere ProgrammiersprachenWS 2001/2 31 Prof. Dr. Gerhard Goos Höhere ProgrammiersprachenWS 2001/2 32

Ereignisse bei Tabellenbearbeitung Tabellenverarbeitung at first at last at new X Erster Schleifendurchlauf Letzter Schleifendurchlauf (letztes Element) Wert des Attributs X hat sich geändert Fragen: Interne vs. DB Tabellen Wann werden interne Tabellen verwendet? Wann wird direkt auf DB Tabellen gerechnet? Wie werden Anfragen an externe Tabellen formuliert? Reihenfolgen, Schachtelung Welche Art interner Tabellen ist am besten geeignet? Hash-Tabelle Indizierte Tabelle Prof. Dr. Gerhard Goos Höhere ProgrammiersprachenWS 2001/2 33 Prof. Dr. Gerhard Goos Höhere ProgrammiersprachenWS 2001/2 34 Tabellenmodifikation Erstellen von Berichten Befehle (sowohl für interne, als auch für DB Tabellen vorhanden, Befehlszusätze können variieren!) insert update delete Einfügen einer neuen Zeile Rückschreiben der geänderten aktuellen Zeile Löschen von Zeilen Erstellung von Berichten im wesentlichen mit write format Das Laufzeitsystem ersetzt automatisch ASCII-Rahmen durch entsprechende Grafikzeichen write: / ---------- ---------, / a b, / ---------- ---------. ABAP/4 unterstützt zusätzlich direkte SQL-Anweisungen exec sql <SQL-Anweisung> liefert: a b Prof. Dr. Gerhard Goos Höhere ProgrammiersprachenWS 2001/2 35 Prof. Dr. Gerhard Goos Höhere ProgrammiersprachenWS 2001/2 36

Ereignisse bei Berichterstellung Parametrisierung von Berichten Berichte können interaktiv sein (Ereignisse): select * from adressen ordered by PLZ. at new PLZ. write: / 'Neuer Bereich', adressen-plz hotspot on. write: / ' Name: ', adressen-name. endselect. at line-selection. tu 'was mit der gewählten Zeile Ereignisse werde vom Benutzer ausgelöst: Doppel-klick auf einen bestimmten Bereich eines Berichts Einfach-klick auf einen Hot-Spot report rep003. parameters kunde(6) type n default 123456. tables rechnungen. data gessum(16) type p decimals 2 value 0. select * from rechnungen where ( kunden_nr = kunde ) and ( offener_betrag > 0 ). at first. write / Es existieren offene Rechnungen!. write: / offener Betrag:, rechnungen-offener_betrag, vom:, rechnungen-datum. add rechnungen-offener_betrag to gessum. at last. write / Gesamtsumme der offenen Beträge:, gessum. endselect. Parameter werde als Eingabefelder an der Benutzerschnittstelle angezeigt! Prof. Dr. Gerhard Goos Höhere ProgrammiersprachenWS 2001/2 37 Prof. Dr. Gerhard Goos Höhere ProgrammiersprachenWS 2001/2 38 Unterprogramme Private Unterprogramme (Forms) private Unterprogramme (Forms) können nur innerhalb der umgebenden Einheit verwendet werden öffentliche Unterprogramme (Functions) können systemweit verwendet werden REPORT MY_REP. DATA: A1 TYPE P VALUE 2, A2 TYPE P VALUE 4, A3 TYPE P VALUE 8. PERFORM CALC USING A1 A2 CHANGING A3. *------------------------------------ FORM CALC USING VALUE(F1) LIKE A1 F2 LIKE A2 CHANGING VALUE(F3) LIKE A3. F3 = F1 + ( F2 * F3 ). ENDFORM. *------------------------------------ Prof. Dr. Gerhard Goos Höhere ProgrammiersprachenWS 2001/2 39 Prof. Dr. Gerhard Goos Höhere ProgrammiersprachenWS 2001/2 40

Parameterübergabe bei Forms Öffentliche Unterprogramme (Functions) Unterprogrammaufruf: perform f xxx Zugriff Wert/Ergebnisaufruf Referenzaufruf nur lesen using value(p) using p lesen/schreiben changing value (p) changing p Global sichtbar Gespeichert in Function Pools Schnittstelle in der Systemdatenbank deklariert Name der Funktion muß groß geschrieben werden Optionale Parameter mit Standardwerten Typprüfung des technischen Typs, d.h. Typ/Länge/Dezimalen Generischer Typ = Typ variabler Länge = formaler Parameter ohne explizite Längenangabe Ausnahmen in Signatur Aufruf enthält Namen der formalen Parameter Funktionen können zu Funktionsgruppen (function groups) zusammengefaßt werden - werden zusammen geladen Prof. Dr. Gerhard Goos Höhere ProgrammiersprachenWS 2001/2 41 Prof. Dr. Gerhard Goos Höhere ProgrammiersprachenWS 2001/2 42 Functions Modularisierung function-pool my_functions. data usage_counter type i value 0. type-pools my_physics. function 'CONVERT_TEMPERATURE'. * importing value(temp_unit) type c * value(degrees) type p * exporting reference(conv_degrees) type p * exceptions illegal_unit endfunction. Type Pools Sammlung von Typen- und Konstantendefinitionen (vgl. Copy-Strecken in COBOL) Function Pools Sammlung von logisch zusammengehörenden Funktionen data: unit(1), old_temp type p, new_temp type p. call function 'CONVERT_TEMPERATURE' destination '129.13.171.27' exporting temp_unit = unit degrees = old_temp importing conv_degrees = new_temp exceptions illegal_unit = 1. if sy-subrc = 1. Fehlerbehandlung endif. Prof. Dr. Gerhard Goos Höhere ProgrammiersprachenWS 2001/2 43 Prof. Dr. Gerhard Goos Höhere ProgrammiersprachenWS 2001/2 44

Sonstiges RFC ermöglicht beidseitige Kommunikation mit externen Systemen (CORBA, DCOM und Java-Adapter vorhanden) OO-ABAP Erweiterung um Klassenkonzept (ohne Polymorphie) Business-Objekte Bibliothek von gebräuchlichen Objekten, z.b. Adressen, Kunden, Bestellung, Business APIs (BAPIs) gespeichert im Business Object Repository (BOR) Ende der Vorlesung Prof. Dr. Gerhard Goos Höhere ProgrammiersprachenWS 2001/2 45 Prof. Dr. Gerhard Goos Höhere ProgrammiersprachenWS 2001/2 46