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) OHO-Workshop: ABAP-Programmierung mit Open- und Native-SQL 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 OHO-Workshop: ABAP-Programmierung mit Open- und Native-SQL 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 ● OHO-Workshop: ABAP-Programmierung mit Open- und Native-SQL Kap. 5.5 - 3 Tools des R/3 Repository ● Data Modeler: ◆ ● Data Dictionary: ◆ ● Zugriff auf Datenbanktabellen (nur Anwendungsdaten) Object Browser: ◆ ● Metadatenverwaltung Data Browser: ◆ ● Datenmodellierung Zugriff auf sämtliche Programmobjekte Entwicklungswerkzeuge: ◆ ◆ ABAP-Editor Screen Painter, ... OHO-Workshop: ABAP-Programmierung mit Open- und Native-SQL Kap. 5.5 - 4 2 Entwicklungsumgebung … OHO-Workshop: ABAP-Programmierung mit Open- und Native-SQL Kap. 5.5 - 5 … Entwicklungsumgebung ● ABAP-Editor ◆ ◆ ◆ 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 OHO-Workshop: ABAP-Programmierung mit Open- und Native-SQL Kap. 5.5 - 6 3 Programmtypen ● Onlineprogramm (Typ 1) ◆ ◆ ● Modulpool (Typ M) ◆ ◆ ● Für Reports nur Programme von diesem Typ können direkt abgearbeitet werden 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) ● OHO-Workshop: ABAP-Programmierung mit Open- und Native-SQL 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. OHO-Workshop: ABAP-Programmierung mit Open- und Native-SQL 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. OHO-Workshop: ABAP-Programmierung mit Open- und Native-SQL Kap. 5.5 - 9 ABAP-Datentypen ● Datendefinition: DATA: feldname TYPE datentyp . DATA: feldname(länge) TYPE datentyp [ VALUE ‘value’] . ● ABAP-Datentypen: C N T D F I P X Text Numerischer Text Zeitangabe Datum Gleitpunktzahl Ganze Zahl Gepackte Zahl (für Festkomma) Hexadezimalzahl OHO-Workshop: ABAP-Programmierung mit Open- und Native-SQL 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 … OHO-Workshop: ABAP-Programmierung mit Open- und Native-SQL 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) OHO-Workshop: ABAP-Programmierung mit Open- und Native-SQL Kap. 5.5 - 12 6 Tabellendeklaration ● Tabellen, die im Data Dictionary definiert sind (und die aktiviert sind), müssen bei Verwendung in ABAPProgrammen explizit deklariert werden TABLES: ● zoho00kun, zoho00kto . Zugriff auf Tabellenelemente: WRITE: zoho00kun-name1 . mysaldo = zoho00kto-kontostand . OHO-Workshop: ABAP-Programmierung mit Open- und Native-SQL 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] OHO-Workshop: ABAP-Programmierung mit Open- und Native-SQL 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 OHO-Workshop: ABAP-Programmierung mit Open- und Native-SQL 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. OHO-Workshop: ABAP-Programmierung mit Open- und Native-SQL 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 OHO-Workshop: ABAP-Programmierung mit Open- und Native-SQL 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 . OHO-Workshop: ABAP-Programmierung mit Open- und Native-SQL 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! OHO-Workshop: ABAP-Programmierung mit Open- und Native-SQL 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. OHO-Workshop: ABAP-Programmierung mit Open- und Native-SQL 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 : / ENDFORM. name . OHO-Workshop: ABAP-Programmierung mit Open- und Native-SQL 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. OHO-Workshop: ABAP-Programmierung mit Open- und Native-SQL 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 OHO-Workshop: ABAP-Programmierung mit Open- und Native-SQL 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 OHO-Workshop: ABAP-Programmierung mit Open- und Native-SQL Kap. 5.5 - 24 12