© 2000 sören berger22.03.2000abap/4. © 2000 sören berger abap/422.03.2000abap/4seite: 2...
TRANSCRIPT
22.03.2000ABAP/4© 2000 Sören Berger
ABAP/4
© 2000 Sören Berger ABAP/4 22.03.2000ABAP/4 Seite: 2
Gliederung
Einleitung
ABAP Syntax & Programmstruktur
Interne Tabellen
DB-Zugriff mit ABAP & Open-SQL
ABAP-Dictionary
© 2000 Sören Berger ABAP/4 22.03.2000ABAP/4 Seite: 3
Einleitung
A
B
A
P
dvanced
usiness
pplication
rogramming Language 4
Was heißt ABAP/4?
© 2000 Sören Berger ABAP/4 22.03.2000ABAP/4 Seite: 4
Einleitung
Logischer Aufbau von SAP/R3 und ABAP/4:
© 2000 Sören Berger ABAP/4 22.03.2000ABAP/4 Seite: 5
Einleitung
Dialogschritte
© 2000 Sören Berger ABAP/4 22.03.2000ABAP/4 Seite: 6
Einleitung
Struktur eines Workprozesses (WP):
Kontrolliert „Flow Logic“
über Dispatcher Kommunikation zw. GUI und WP
Kommunikation mit DB und
ABAP Dictionary
Kontrolliert „Processing Logic“
Kommuniziert mit SP, welches Modul der Flow Logic als nächstes ausgeführt wird
Kommuniziert mit DBI
© 2000 Sören Berger ABAP/4 22.03.2000ABAP/4 Seite: 7
Einleitung
Das Datenbank-Interface
© 2000 Sören Berger ABAP/4 22.03.2000ABAP/4 Seite: 8
Einleitung
Screens: Jeder Screen besitzt Eingabemaske mit Input/Output Zwei Events getriggert:
– „Process Before Output“ (PBO), der vor der Maske dargestellt wird– „Process After Input“ (PAI), nach User-Interaktion
Jeder Screen ist gelinkt zu einem PBO bzw PAI PAI und nachfolgender PBO bilden Dialogschritt Screens werden über „Screen-Painter“ erzeugt, oder alternativ als
„Selection-Screen“ oder als Liste mit Hilfe von ABAP-Statements (wichtige Keywords: MODULE, FIELD, CHAIN und LOOP)
© 2000 Sören Berger ABAP/4 22.03.2000ABAP/4 Seite: 9
Einleitung
ABAP-Programme sind verantwortlich für das Bearbeiten von Daten innerhalb der Dialogschritte. ABAP-Programme sind modular
Aufbau eines ABAP-Programms
© 2000 Sören Berger ABAP/4 22.03.2000ABAP/4 Seite: 10
Einleitung
Verschiedene ABAP-Programmodi
Typ 1 (Report) werden nicht durch Screens kontrolliert werden durch SUBMIT-Statement von anderen ABAP-Programmen,
oder durch Eintippen des Programmnamens bzw. Transaktionscodes gestartet
starten ihrerseits unsichtbares Systemprogramm, das einem festen Programmfluß folgt, der aber verlassen werden kann
der feste Programmfluß dient zum Auslesen der DB und zum Darstellen der Informationen (daher „Report“)
brauchen keinen User-Input können logische DB verwenden
© 2000 Sören Berger ABAP/4 22.03.2000ABAP/4 Seite: 11
Einleitung
Typ M können nur durch „Screen Flow Logic“ kontrolliert werden Start durch Transaktionscode (mit Anfangsmaske „Initial Screen“) man muß seine eigenen Screens mit dem Screen-Painter erstellen Initial Screen aktiviert Dialogmodul des ABAP-Prog.
Dialogmodul kann versch, Aufgaben übernehmen, z.B. andere Screens aktivieren, andere Ausführungsblöcke im ABAP-Prog., oder andere Programme (mit CALL TRANSACTION (für Typ M), oder mit SUBMIT (für Typ 1))
werden als Modul-Pool bezeichnet und für dialogorientierte Programme mit einer großen Anzahl von Screens verwendet
gibt noch Typ F (Funktionen-Gruppen, für globale Fkt.) und Typ I (Includes)
© 2000 Sören Berger ABAP/4 22.03.2000ABAP/4 Seite: 12
Einleitung
Logische Datenbank:
Liest Daten aus DB vergleichbar mit VIEW-Befehl wird über Workbenchbefehle bearbeitet und mit dem ABAP-
Programm gelinkt kann von mehreren Programmen genutzt werden können nur von Typ 1 benutzt werden hat folgende Struktur:
© 2000 Sören Berger ABAP/4 22.03.2000ABAP/4 Seite: 13
Einleitung
Logische Datenbank
© 2000 Sören Berger ABAP/4 22.03.2000ABAP/4 Seite: 14
Einleitung
Logische Datenbank
Structure: welche Tabellen gelesen werden, die Hierarchie (über Foreign Keys) wird beibehalten
Selection Part: welche Felder dargestellt werden, können durch das ABAP-Programm auch geändert werden
Database Program: Container für Subroutinen, die die Daten lesen
© 2000 Sören Berger ABAP/4 22.03.2000ABAP/4 Seite: 15
Einleitung
Namenskonventionen in ABAP:
Kundenprogramme(Reports) sollten folgender Konvention folgen:
Yaxxxxxx oder Zaxxxxxx
wobei a durch den ID-Code der Applikation und xxxxxx durch einen bel. Bezeichner ersetzt wird.
SAP-Programme werden mit Raxxxxxx bezeichnet.
© 2000 Sören Berger ABAP/4 22.03.2000ABAP/4 Seite: 16
Gliederung
Einleitung
ABAP Syntax & Programmstruktur
Interne Tabellen
DB-Zugriff mit ABAP & Open-SQL
ABAP-Dictionary
© 2000 Sören Berger ABAP/4 22.03.2000ABAP/4 Seite: 17
ABAP Syntax und Programm-Struktur
Kommentare werden durch * (für ganze Zeile) und “ (für Teil der Zeile) eingeleitet
ABAP-Ausdrücke beginnen mit einem Keyword und enden mit einem Punkt (.)
Deklarative Ausdrücke sind z.B.: DATA, TYPES, TABLES Modulare Ausdrücke sind unterteilt in:
Event Keywords wie AT SELECTION SCREEN, START-OF-SELECTION, AT-USER-COMMAND
Definitions-Ausdrücke werden zur Definition von Subroutinen, Funktionsmodulen, Methoden u.ä. verwendet, z.B.: FORM...ENDFORM, FUNCTION...ENDFUNCTION, MODUL...ENDMODUL
© 2000 Sören Berger ABAP/4 22.03.2000ABAP/4 Seite: 18
ABAP Syntax und Programm-Struktur
Call-Ausdrücke werden zum Aufrufen von Programmblöcken im selben oder einem anderen Programm verwendet.
Bsp: PERFORM, CALL, SUBMIT, SET USER-COMMAND Operations-Ausdrücke bearbeiten Daten, die über die
deklarativen Ausdrücke definiert werden.
Bsp.: WRITE, MOVE, ADD Open-SQL: nur Ausdrücke wie INSERT, SELECT, DELETE
kein: CREATE TABLE, CREATE INDEX
© 2000 Sören Berger ABAP/4 22.03.2000ABAP/4 Seite: 19
ABAP Syntax und Programm-Struktur
Vordefinierte Datentypen: Charakter String (C) Länge: 1 - 65535 Numeric Charakter String (N) Länge: 1 - 65535 Date (D) Format: YYYYMMDD Time (T) Format: HHMMSS Hexadecimel (X) Integer (I) von -2^31 - 2^31-1 Floating-Point Number (F) 1x10^-307 bis 1x10^308 Packed Number (P) max. 16byte mit bis zu 14 Stellen
Für Berechnungen sollte man nur Typ I und F verwenden.
© 2000 Sören Berger ABAP/4 22.03.2000ABAP/4 Seite: 20
ABAP Syntax und Programm-Struktur
User-Definierte Datentypen
TYPES: NUMBER TYPE I,
LENGTH TYPE P DECIMALS 2,
CODE(3) TYPE C.
.......
DATA: NO_FLIGHTS TYPE NUMBER,
NO_PASSENGERS TYPE NUMBER,
DISTANCE TYPE LENGTH,
HEIGHT TYPE LENGTH,
....
CITY_CODE TYPE CODE,
COUNTRY_CODE TYPE CODE,
......
© 2000 Sören Berger ABAP/4 22.03.2000ABAP/4 Seite: 21
ABAP Syntax und Programm-Struktur
DATA für Strukturen
DATA: BEGIN OF ADDRESS,
NAME(20) TYPE C,
STREET(20) TYPE C,
NUMBER TYPE P,
POSTCODE(5) TYPE N,
CITY(20) TYPE C,
END OF ADDRESS.
CONSTANTS: BEGIN OF MYADDRESS,
NAME(20) TYPE C VALUE 'Fred Flintstone',
STREET(20) TYPE C VALUE 'Cave Avenue',
NUMBER TYPE P VALUE 11,
POSTCODE(5) TYPE N VALUE 98765,
CITY(20) TYPE C VALUE 'Bedrock',
END OF MYADDRESS.
Als konst. Ausdruck:
z.B.:Zugriff über ADDRESS-NAME
© 2000 Sören Berger ABAP/4 22.03.2000ABAP/4 Seite: 22
ABAP Syntax und Programm-Struktur
TABLES-Befehl
Syntax: TABLES <dbtab>
<dbtab> ist ein ABAP-Dictionary-Objekt, diese werden im Workbench definiert
Bsp:TABLES: SPFLI.
SELECT * FROM SPFLI.
WRITE: SPFLI-MANDT, SPFLI-CARRID, SPFLI-CONNID,......
ENDSELECT.
© 2000 Sören Berger ABAP/4 22.03.2000ABAP/4 Seite: 23
ABAP Syntax und Programm-Struktur
Bsp. für interne Tabellen
PROGRAM SAPMZTST.
TYPES: BEGIN OF MYSTRING,
NUMBER TYPE I,
NAME(10) TYPE C,
END OF MYSTRING.
TYPES MYTAB TYPE MYSTRING OCCURS 5.
DATA STRING TYPE MYSTRING.
DATA ITAB TYPE MYTAB.
STRING-NUMBER = 1. STRING-NAME = 'John'.
APPEND STRING TO ITAB.
STRING-NUMBER = 2. STRING-NAME = ‘Paul’.
APPEND STRING TO ITAB.
STRING-NUMBER = 3. STRING-NAME = 'Ringo'.
APPEND STRING TO ITAB.
STRING-NUMBER = 4. STRING-NAME = 'George'.APPEND STRING TO ITAB.LOOP AT ITAB INTO STRING.WRITE: / STRING-NUMBER,STRING-NAME.ENDLOOP.
Ausgabe:1 John2 Paul3 Ringo4 George
© 2000 Sören Berger ABAP/4 22.03.2000ABAP/4 Seite: 24
ABAP Syntax und Programm-Struktur
MOVE-CORRESPONDING
Syntax: MOVE-CORRESPONDING <string1> TO <string2>
Beispiel:
DATA: BEGIN OF ADDRESS,
FIRSTNAME(20) VALUE 'Fred',
SURNAME(20) VALUE 'Flintstone',
INITIALS(4) VALUE 'FF',
STREET(20) VALUE 'Cave Avenue,
NUMBER TYPE I VALUE '11'.
POSTCODE TYPE N VALUE '98765'.
CITY(20) VALUE 'Bedrock',
END OF ADDRESS.
DATA: BEGIN OF NAME, SURNAME(20), FIRSTNAME(20), INITIALS(4), TITLE(10) VALUE 'Mister',END OF NAME.
MOVE-CORRESPONDING ADDRESS TO NAME.
© 2000 Sören Berger ABAP/4 22.03.2000ABAP/4 Seite: 25
ABAP Syntax und Programm-Struktur
Schleifen und IF - Anweisung
While-Schleifen werden mit WHILE .... ENDWHILE eingegrenzt
DO-Schleifen mit DO ... ENDDO (Bsp: Do 4 TIMES. .... ENDDO.)
ebenso wird IF-Anweisung mit IF ... ENDIF eingegrenzt
© 2000 Sören Berger ABAP/4 22.03.2000ABAP/4 Seite: 26
Gliederung
Einleitung
ABAP Syntax & Programmstruktur
Interne Tabellen
DB-Zugriff mit ABAP & Open-SQL
ABAP-Dictionary
© 2000 Sören Berger ABAP/4 22.03.2000ABAP/4 Seite: 27
Interne Tabellen
... lesen (Teile von) festen Strukturen aus und speichern sie im Arbeitsspeicher von ABAP.
... besitzen eine zweigeteilte Datenstruktur, bestehend aus Line Type (kann jeder Datentyp sein) und Key (der die Tabellenzeilen identifiziert).
... der Key ist wiederum aufgeteilt in Standard Key und User-defined Key.
© 2000 Sören Berger ABAP/4 22.03.2000ABAP/4 Seite: 28
Interne Tabellen
Drei Arten von Tabellen:
Standard Table: Daten werden über Table-Index oder Key angesprochen (Key muß nicht definiert werden)
Sorted Table: Daten nach Key sortiert, Zugriff wie Standard Table
Hash Table: kein linearer Index, Zugriff nur über Key, Key muß UNIQUE sein
© 2000 Sören Berger ABAP/4 22.03.2000ABAP/4 Seite: 29
Interne Tabellen
Zugriffsmethoden:
Es gibt zwei Arten, wie mit Internen Tabellen gearbeitet werden kann:
Die ganze Tabelle, z.B. mit MOVE <tabname>
oder über Workarea, wenn nur bestimmte Zeilen bearbeitet werden sollen
Befehlsübersicht:
INSERT; APPEND; COLLECT
READ
MODIFY, DELETE
© 2000 Sören Berger ABAP/4 22.03.2000ABAP/4 Seite: 30
Interne Tabellen
Erstellen von internen Tabellen
1. Möglichkeit: Neue Tabelle
Syntax: TYPES <t> <type> OCCURS <n>
Bsp.: TYPES itab TYPE I OCCURS 10.
2. Möglichkeit: Neue Tabelle aus einer alten
Syntax: DATA <f> <type> [WITH HEADER LINE]
Bsp.:TYPES: BEGIN OF LINE,
COLUMN1 TYPE I,
COLUMN2 TYPE I,
COLUMN3 TYPE I,
END OF LINE.
TYPES ITAB TYPE LINE OCCURS 10.
DATA TAB1 TYPE ITAB.DATA TAB2 LIKE TAB1 WITH HEADER LINE.
© 2000 Sören Berger ABAP/4 22.03.2000ABAP/4 Seite: 31
Interne Tabellen
Füllbefehle im Überblick
APPEND:
Syntax: APPEND [<wa> TO | INITIAL LINE TO] <itab>
COLLECT: sammelt Daten mit denselben Keys und addiert restlichen Werte
Syntax: COLLECT [<wa> INTO] <itab>
INSERT: fügt an beliebigen Stelle eine Zeile ein
Syntax: INSERT [<wa> INTO|INITIAL LINE INTO] <itab>
[INDEX<idx>].
© 2000 Sören Berger ABAP/4 22.03.2000ABAP/4 Seite: 32
Interne Tabellen
Beispiel zu INSERT
DATA: BEGIN OF LINE,
COL1 TYPE I,
COL2 TYPE I,
END OF LINE.
DATA ITAB LIKE LINE OCCURS 10.
DO 2 TIMES.
LINE-COL1 = SY-INDEX.
LINE-COL2 = SY-INDEX ** 2.
APPEND LINE TO ITAB.
ENDDO.
LINE-COL1 = 11. LINE-COL2 =22.INSERT LINE INTO ITAB INDEX 2.INSERT INITIAL LINE INTO ITAB INDEX 1.LOOP AT ITAB INTO LINE.WRITE: / SY-TABIX, LINE-COL1, LINE-COL2.ENDLOOP.
Ausgabe:
1 0 02 1 13 11 224 2 4
© 2000 Sören Berger ABAP/4 22.03.2000ABAP/4 Seite: 33
Interne Tabellen
Auslesen einer Tabelle
LOOP: zeilenweise
Syntax: LOOP AT <itab> [INTO <wa>] [FROM <n1>] [TO <n2>]
[WHERE <condition>].
.....
ENDLOOP.
READ: eine einzelne Zeile
Syntax: READ TABLE <itab> [INTO <wa>] INDEX <idx>.
© 2000 Sören Berger ABAP/4 22.03.2000ABAP/4 Seite: 34
Interne Tabellen
MODIFY: (Teile) einer Zeile ändern
Syntax: MODIFY <itab> [FROM <wa>] [INDEX <idx>]
[TRANSPORTING <f1>... <f2> [WHERE <condition>]].
Bsp:DATA NAME(4) VALUE 'COL2'.
DATA: BEGIN OF LINE,
COL1 TYPE I,
COL2 TYPE I,
END OF LINE.
DATA ITAB LIKE LINE OCCURS 10.
DO 5 TIMES.
LINE-COL1 = SY-INDEX.
LINE-COL2 = SY-INDEX ** 2.
APPEND LINE TO ITAB.
ENDDO.
....
© 2000 Sören Berger ABAP/4 22.03.2000ABAP/4 Seite: 35
Interne Tabellen
(MODIFY 2)
...
LINE-COL2 = 111.
MODIFY ITAB FROM LINE INDEX 2 TRANSPORTING (NAME).
LINE-COL1 = 11.
MODIFY ITAB FROM LINE TRANSPORTING COL1 WHERE COL2 = 25.
LOOP AT ITAB INTO LINE.
WRITE: / SY-TABIX, LINE-COL1, LINE-COL2.
ENDLOOP.
Ausgabe:
1 1 1
2 2 111
3 3 9
4 4 16
5 11 25
© 2000 Sören Berger ABAP/4 22.03.2000ABAP/4 Seite: 36
Gliederung
Einleitung
ABAP Syntax & Programmstruktur
Interne Tabellen
DB-Zugriff mit ABAP & Open-SQL
ABAP-Dictionary
© 2000 Sören Berger ABAP/4 22.03.2000ABAP/4 Seite: 37
DB-Zugriff mit ABAP und Open-SQL
Sollen Open-SQL Ausdrücke verwendet werden, müssen
folgende Bedingungen erfüllt sein: Die DB muß von SAP unterstützt werden. Die DB-Tabellen müssen im ABAP-Dictionary definiert sein.
Wichtige Systemfelder:
SY-SUBRC: =0, wenn Operation erfolgreich, sonst <>0
SY-DBCNT: zeigt an, wie viele Felder bearbeitet, geändert wurden
© 2000 Sören Berger ABAP/4 22.03.2000ABAP/4 Seite: 38
DB-Zugriff mit ABAP und Open-SQL
Allg.: Zugriff aller Operationen erfolgt wie bei einer normalen DB, müssen jedoch in einer Schleifenstruktur eingeschlossen werden.
SELECT
Syntax von SELECT:SELECT <result> FROM <source> [INTO <target>] [WHERE
<condition>] [GROUP BY <fields>] [ORDER BY <sort_order>].
© 2000 Sören Berger ABAP/4 22.03.2000ABAP/4 Seite: 39
DB-Zugriff mit ABAP und Open-SQL
Bsp zu SELECT:
TABLES SPFLI.
SELECT * FROM SPFLI WHERE CITYFROM EQ 'FRANKFURT'.
...
WRITE: / SPFLI-CARRID, SPFLI-CONNID,
SPFLI-CITYFROM, SPFLI-CITYTO.
...
ENDSELECT.
© 2000 Sören Berger ABAP/4 22.03.2000ABAP/4 Seite: 40
DB-Zugriff mit ABAP und Open-SQL
FROM - Ergänzung:
Syntax:...... FROM <dbtab> [CLIENT SPECIFIED] [BYPASSING BUFFER]
[UP TO <n> ROWS].........
BYPASSING BUFFER liest direkt aus DB und nicht aus SAP-Buffer!
CLIENT SPECIFIED liest aus Tabelle, egal auf welchem Client der User eingeloggt ist.
© 2000 Sören Berger ABAP/4 22.03.2000ABAP/4 Seite: 41
Gliederung
Einleitung
ABAP Syntax & Programmstruktur
Interne Tabellen
DB-Zugriff mit ABAP & Open-SQL
ABAP-Dictionary
© 2000 Sören Berger ABAP/4 22.03.2000ABAP/4 Seite: 42
ABAP-Dictionary
Tabellen und Felder im Dictionary erstellen:
Im ersten Fenster des Dic. wird der Tabellenname eingeben, anschließend auf „Create“ klicken.
1. Im Feld „Short Text“ einen erklärenden Text eingeben.
2. Definiere eine „delivery class“ für die Tabelle
3. Für jedes Tabellenfeld einen Namen vergeben
4. Bestimme einen Key. Alle Keys müssen am Anfang der Tabelle liegen. Bis zu 16 Keys sind pro Tabelle gestattet.
5. Benenne das Daten-Element auf das sich das Feld bezieht.
6. Für Felder der Typen Quantity (QUAN) und Currency amount (CURR) müssen Bezugsfelder und -tabellen angeben werden.
7. Speichern