Kap. 5.5: ABAP-Programmierung mit Open- und Native-SQL ABAP - Übersicht Datenbankzugriff aus ABAP-Programmen Open-SQL Native-SQL Vorbereitung der praktischen Übung mit SAP R/3 (Teil II) Kap. 5.5-1 ABAP/4 - Die Programmiersprache von SAP Ursprung im R/2-System: Allgemeiner Berichts-Aufbereitungs-Prozessor Für Reporting-Zwecke Ständige Erweiterung der Sprache im R/3-System Advanced Business Application Programming Language Alle betriebswirtschaftlichen Anwendungen in ABAP implementiert Nur kleiner Systemkern in C /4 symbolisiert, dass es sich um eine 4GL-Sprache handelt neuerdings: nur noch ABAP, um Entwicklung in Richtung Objektorientierung zu betonen Kap. 5.5-2 1
Charakteristik von ABAP Abarbeitung von ABAP-Programmen: ABAP-Sourcen werden kompiliert in Bytecode ( Generieren ) Programmsourcen und Bytecode werden in der Datenbank verwaltet Dies beinhaltet auch Abhängigkeiten zu anderen Schemaobjekten Bytecode wird interpretiert Bei Bedarf erfolgt Neugenerierung vor Interpretation des Bytecodes Release 4.5x: über 250 Schlüsselwörter, Tendenz steigend! Sehr schwach ausgeprägte Orthogonalität Kap. 5.5-3 Tools des R/3 Repository Data Modeler: Datenmodellierung Data Dictionary: Metadatenverwaltung Data Browser: Zugriff auf Datenbanktabellen (nur Anwendungsdaten) Object Browser: Zugriff auf sämtliche Programmobjekte Entwicklungswerkzeuge: ABAP-Editor Screen Painter,... Kap. 5.5-4 2
Entwicklungsumgebung Kap. 5.5-5 ABAP-Editor Entwicklungsumgebung ist selbst ein ABAP-Programm, die Oberfläche des Editors ist also ein Dynpro zeilenorientierte (gewöhnungsbedürftige) Oberfläche sehr gute Integration in die komplette Entwicklungsumgebung (SAP Repository, andere Tools) Doppelklick auf Name eines Schemaobjektes öffnet das entsprechende Tool Kontextsensitive Hilfe zu ABAP-Befehlen (Schlüsselworte) mittels F1 Syntaxüberprüfungen (Programm -> Prüfen) Generieren: Erzeugen von Bytecode Kap. 5.5-6 3
Programmtypen Onlineprogramm (Typ 1) Für Reports nur Programme von diesem Typ können direkt abgearbeitet werden Modulpool (Typ M) Für Dialoganwendungen (Verarbeitungsschritte von DynPros) Nur über Transaktionsnummer aufrufbar Funktionsgruppe(Typ F) Sammlung von Funktionen Include-Programm (Typ I) Subroutinepool (Typ S) Klassen und Interfacedefinition (Typ K,J) Kap. 5.5-7 Aufbau von ABAP-Anweisungen Wie so viele Sprachen besitzt ABAP den, Anspruch der natürlichen Sprache zu ähneln. In ABAP bedeutet dies konkret dass jede, Anweisung mit einem Punkt beendet werden, muss (eine Anweisung heisst daher Satz). Wenn ein Satz, aus mehreren Teilen besteht dann muss jeder, dieser Teile mit einem Komma abgetrennt, werden. Ein: Doppelpunkt besagt dass, Schlüsselwort für mehrere Parameter gilt. Kap. 5.5-8 4
Grobstruktur von Reports REPORT Zreportname. * Ein Stern als erstes Zeichen markiert * eine Kommentarzeile TYPES:. alles folgende gilt auch DATA:. als Kommentar TABLES:. PARAMETERS:. Anweisungen. Perform Unterprog USING Parameterliste. Anweisungen. FORM Unterprog USING Parameterliste. Anweisungen. ENDFORM. Kap. 5.5-9 ABAP-Datentypen Datendefinition: DATA: feldname TYPE datentyp. DATA: feldname(länge) TYPE datentyp [ VALUE value ]. ABAP-Datentypen: C Text N Numerischer Text T Zeitangabe D Datum F Gleitpunktzahl I Ganze Zahl P Gepackte Zahl (für Festkomma) X Hexadezimalzahl Kap. 5.5-10 5
Datendefinition Like-Operator: Typ von Objekten wird aus dem Data Dictionary übernommen z.b. Variable saldo soll den Typ des Attributs kontostand der Tabelle Zooho00kon besitzen DATA: saldo LIKE zoho00kon-kontostand. Ohne Like-Operator darf nur ABAP-Datentyp gewählt werden, der externen Datentyp aufnimmt z.b. C(n) für CHAR n P((n+2)/2) DECIMALS m für CURR n, m Kap. 5.5-11 (einige) ABAP-Sprachelemente Bildschirmausgabe WRITE Hello world. WRITE: / Hello, world. Zuweisungen field = expression.(mit impliziter Typumwandlung) MOVE A TO B. MOVE-CORRESPONDING A TO B. (unter Berücksichtigung der Feldnamen) Kap. 5.5-12 6
Tabellendeklaration Tabellen, die im Data Dictionary definiert sind (und die aktiviert sind), müssen bei Verwendung in ABAP- Programmen explizit deklariert werden TABLES: zoho00kun, zoho00kto. Zugriff auf Tabellenelemente: WRITE: zoho00kun-name1. mysaldo = zoho00kto-kontostand. Kap. 5.5-13 Open-SQL (Syntax von Select) SELECT [SINGLE [FOR UPDATE]] [DISTINCT] feldliste, aggregatfunktion [INTO [feld (feldliste)] [[CORRESPONDING FIELDS OF] work_area] [[CORRESPONDING FIELDS OF] TABLE itab]] [APPENDING [CORRESPONDING FIELDS OF] TABLE itab] FROM table (table_name) tab AS t1 JOIN tab2 AS t2 ON t1~id = t2~id [BYPASSING BUFFER, UP TO n ROWS, CLIENT SPECIFIED] [WHERE condition] [GROUP BY fieldlist] [ORDER BY fieldlist] Kap. 5.5-14 7
Open-SQL-Befehlssatz INSERT MODIFY UPDATE DELETE Einfügen Ändern oder einfügen Ändern Löschen Indikatorvariable SY-SUBRC Status der Open-SQL-Anweisung z.b. SY-SUBRC = 0 Select erfolgreich SY-SUBRC = 4 Kein Tupel gefunden Kap. 5.5-15 Open-SQL: Eigenschaften Anfrageergebnise werden tupelweise zurückgegeben Select-Statement muss mit ENDSELECT. abgeschlossen werden Zwischen SELECT ENDSELECT wird über alle Ergebnistupel iteriert (besitzt Cursor-ähnliche Semantik) TABLES: zautor. SELECT * FROM zautor. WRITE: / zautor-nachname, zautor-vorname. ENDSELECT. Kap. 5.5-16 8
Open-SQL: Eigenschaften In der FROM-Klausel ist pro Open-SQL-Select-Statement NUR maximal zwei Tabellen erlaubt. Explizite Joins sind in Open-SQL nur zwischen zwei transparenten Tabellen möglich. (Nicht Pool-, Clustertabelle oder View) Join wird an Datenbank weitergeschickt. Abhilfe: View definieren oder Joins in ABAP-Programmen selbst berechnen: TABLES: zautor, zwerk. (Sei Zautor als View definiert) SELECT * FROM zautor. SELECT * FROM zwerk WHERE autorid = zautor-autorid. WRITE: / zautor-nachname, zwerk-titel. ENDSELECT. zwerk ENDSELECT. zautor Kap. 5.5-17 Open-SQL: JOIN Mit Hilfe des Join-Konstukt in Open-SQL Syntax und Möglichkeiten gehen in Richtung Nativ-SQL TABLES: zautor, zwerk. (Sei Zautor als Transparente Tabelle definiert) data: nachname like zautor-nachname, titel like zwerk-titel. SELECT A~nachname, W~titel INTO (nachname, titel) FROM zautor as A JOIN zwaer as W. ON A~autorid = W~autorid. WRITE: / nachname, titel. ENDSELECT. Kap. 5.5-18 9
Open-SQL: Aggregatfunktionen Folgende Aggregatfunktionen sind in Open-SQL erlaubt (mit der bekannten Semantik) AVG ( feldname ) COUNT ( DISTINCT feld ) COUNT ( * ) MAX ( feld ) MIN ( feld ) SUM ( feld ) Blanks sind wichtig! Kap. 5.5-19 Native SQL... Statement im Dialekt der unterliegenden Datenbank Geklammert in EXEC SQL. ENDEXEC. Hostvariablen für Rückgabewerte müssen explizit angegeben werden, z.b. DATA: name like zautor-nachname. EXEC SQL. SELECT nachname INTO :name FROM zautor WHERE ID=5 ENDEXEC. Kap. 5.5-20 10
Native SQL Mandant muss immer explizit angegeben werden and mandt = 800 Kein Cursor möglich Abhilfe: Bei EXEC SQL kann Unterprogramm angegeben werden, das für jedes Ergebnistupel aufgerufen wird. EXEC SQL PERFORMING ausgabe. ENDEXEC. FORM ausgabe. WRITE : / name. ENDFORM. Kap. 5.5-21 Interaktive Berichte : Eingabeparameter Schlüsselwort Parameters deklariert Eingabeparameter eines Berichts PARAMETERS: name LIKE zautor-nachname. SELECT * FROM zautor WHERE nachname = name. ENDSELECT. Kap. 5.5-22 11
Literatur (Lehrbuchsammlung) B. Matzke. ABAP/4 - Die Programmiersprache des SAP-Systems R/3. 2. Auflage, Addison-Wesley, 1999. R. Kretschmer, W. Weiss. SAP-R/3-Entwicklung mit ABAP/4. 2. Auflage, Sybex Verlag, 1997. Online: www.dbs.ethz.ch/sapr3 Kap. 5.5-23 Praktische Übung Implementierung von Reports in ABAP Aufgabe 1: Open SQL: ZOHOxxRO Skelett vorgegeben (ZOHO00RO) Kopie in eigenen Namensraum Aufgabe 2: Native SQL: ZOHOxxRN Skelett vorgegeben (ZOHO00RN) Aufgabe 3: Neuen Bericht erstellen Wahlweise Open SQL oder Native SQL Kap. 5.5-24 12