Ansicht
Dokumentation
ABENABAP_OBJECTS_DIFF_ITAB - ABAP OBJECTS DIFF ITAB
PERFORM Short Reference CL_GUI_FRONTEND_SERVICES - Frontend ServicesDiese Dokumentation steht unter dem Copyright der SAP AG.
Syntaxverschärfungen bei internen Tabellen
Verbot der Deklaration mit OCCURS
-
Interne Tabellen dürfen in ABAP Objects nicht durch den Zusatz OCCURS in den Anweisungen TYPES und DATA (und den übrigen deklarativen Anweisungen) definiert werden.
In ABAP Objects Fehlermeldung bei:
DATA: BEGIN OF itab OCCURS n,
...
fi ...,
...
END OF itab.
und
TYPES|DATA itab TYPE|LIKE line_type OCCURS n.
Korrekte Syntax:
TYPES|DATA: BEGIN OF line_type,
...
fi ...,
...
END OF line_type.
TYPES itab TYPE|LIKE STANDARD TABLE OF line_type
WITH NON-UNIQUE DEFAULT KEY
[INITIAL SIZE n].
DATA itab TYPE|LIKE [STANDARD] TABLE OF line_type
[INITIAL SIZE n].
Grund:
Der neue Zusatz TYPE|LIKE TABLE OF der Anweisungen DATA und TYPES
macht den Zusatz OCCURS für die Tabellendeklaration überflüssig. Falls notwendig kann der anfängliche Hauptspeicherbedarf mit dem Zusatz INITIAL SIZE angegeben werden.
Anmerkung:
Die Kurzform
DATA itab TYPE|LIKE TABLE of line_type.
wird vom System zu
DATA itab TYPE|LIKE STANDARD TABLE OF line_type
WITH NON-UNIQUE DEFAULT KEY
INITIAL SIZE 0.
vervollständigt und kann statt dieser verwendet werden.
Die Kurzform
TYPES itab TYPE|LIKE STANDARD TABLE of line_type.
wird vom System zu
TYPES itab TYPE|LIKE STANDARD TABLE of line_type
INITIAL SIZE 0.
vervollständigt und definiert einen Standard-Tabellentyp mit generischem Schlüssel, der zur
Typisierung von Schnittstellenparametern und Feldsymbolen verwendet werden kann.
Verbot von Tabellen mit Kopfzeilen
-
In ABAP Objects dürfen nur Tabellen ohne Kopfzeilen deklariert werden.
In ABAP Objects Fehlermeldung bei:
DATA itab TYPE|LIKE TABLE OF ... WITH HEADER LINE.
Korrekte Syntax:
DATA: itab TYPE|LIKE TABLE OF ... ,
wa LIKE LINE OF itab.
Grund:
Es hängt von der Anweisung ab, ob bei Tabellen mit Kopfzeile auf
Tabellenkörper
oder Kopfzeile zugegriffen wird. Der Tabellenname soll eindeutig die Tabelle bezeichnen. Programme werden leichter lesbar. Tabellen mit Kopfzeilen bieten keinerlei Performance-Vorteile.
Anmerkung:
Beim Aufruf externer
Prozeduren (Unterprogramme und Funktionsbausteine), die in der Parameterschnittstelle TABLES-Parameter
enthalten, ist zu beachten, dass zu einem TABLES-Parameter außer dem Tabellenkörper
auch immer eine Kopfzeile gehört. Bei der Übergabe einer Tabelle ohne Kopfzeile bleibt
die Kopfzeile des TABLES-Parameters initial. Beim Aufruf solcher Prozeduren in Methoden, muss
überprüft werden, ob die Übergabe der Kopfzeile in der Prozedur erwartet und dort
ausgewertet wird. Gegebenenfalls muss die Prozedur angepasst oder neu geschrieben werden. Schnittstellen von Methoden haben keine TABLES-Parameter.
Verbot der Kurzformen bei Zeilen-Operationen
-
Bei jeder Operation mit Tabellenzeilen dürfen in ABAP Objects keine Kurzformen verwendet werden, sondern es muss immer mit einem expliziten Arbeitsbereich oder einem Feldsymbol gearbeitet werden.
In ABAP Objects Fehlermeldung bei:
Operationen für alle Tabellenarten
INSERT TABLE itab.
COLLECT itab.
READ TABLE itab ...
MODIFY TABLE itab ...
MODIFY itab ... WHERE ...
DELETE TABLE itab.
LOOP AT itab ...
Operationen für Index-Tabellen
APPEND itab.
INSERT itab ...
MODIFY itab ...
Korrekte Syntax:
Operationen für alle Tabellenarten
INSERT wa INTO TABLE itab.
COLLECT wa INTO itab.
READ TABLE itab ... INTO wa | ASSIGNING <fs>.
MODIFY TABLE itab FROM wa ...
MODIFY itab FROM wa ... WHERE ...
DELETE TABLE itab FROM wa.
LOOP AT itab INTO wa ... | ASSIGNING <fs> ...
Operationen für Index-Tabellen
APPEND wa TO itab.
INSERT wa INTO itab ...
MODIFY itab FROM wa ...
Grund:
Eindeutige Trennung von Tabelle und Arbeitsbereich. Programme werden leichter lesbar. Da in Klassen ohnehin nur Tabellen ohne
Kopfzeile deklariert werden können, ist dies nur in lokalen Klassen beim Zugriff auf globale Tabellen des
Rahmenprogramms eine Einschränkung.
Kein Ändern einer internen Tabelle in einer Schleife
-
Das Ändern der kompletten internen Tabelle innerhalb einer Schleife über dieselbe Tabelle
ist in ABAP Objects nicht erlaubt. Das Ändern einer Tabelle als ganzes wird z.B. durch die Anweisungen
REFRESH, CLEAR, FREE, MOVE, SORT oder SELECT INTO TABLE verursacht. Dies gilt ebenso für die Übernahme einer internen Tabelle aus
Prozeduren oder dem Import einer internen Tabelle aus einem Datencluster.
In ABAP Objects Fehlermeldung bei:
LOOP AT itab INTO wa.
CLEAR itab.
ENDLOOP.
Korrekte Syntax:
LOOP AT itab INTO wa.
...
ENDLOOP.
CLEAR itab.
Grund:
Das Verhalten ist bei erneuten Tabellenzugriffen undefiniert und kann zu Laufzeitfehlern führen.
Kompatible Zeilentypen bei INSERT INTO TABLE
-
Beim Einfügen von Zeilen einer internen Tabelle in eine andere interne Tabelle müssen in ABAP Objects die Zeilentypen
kompatibel sein.
In ABAP Objects Fehlermeldung bei:
DATA: itab TYPE SORTED TABLE OF f
WITH UNIQUE KEY table_line,
jtab TYPE HASHED TABLE OF i
WITH UNIQUE KEY table_line.
INSERT LINES OF itab INTO TABLE jtab.
Korrekte Syntax:
DATA: itab TYPE SORTED TABLE OF f
WITH UNIQUE KEY table_line,
jtab TYPE HASHED TABLE OF f
WITH UNIQUE KEY table_line.
INSERT LINES OF itab INTO TABLE jtab.
Grund:
Bei allen generischen Einfügeoperationen, d.h. Einfügen von Zeilen in
alle Tabellenarten, müssen die einzufügenden Zeilen zum Zeilentyp der Tabelle kompatibel sein. Obige Anweisung wird dieser Semantik angepasst.
Kompatibler Arbeitsbereich bei Gruppenstufenverarbeitung
-
Bei Gruppenstufenverarbeitung auf einer internen Tabelle muss der Arbeitsbereich kompatibel zum Zeilentyp der Tabelle sein.
In ABAP Objects und seit Release 7.0 auch außerhalb von Klassen Fehlermeldung bei:
DATA: itab LIKE TABLE OF line,
wa(255) TYPE x.
SORT itab by col1.
LOOP AT itab INTO wa.
AT NEW col1.
ENDAT.
ENDLOOP.
Korrekte Syntax:
DATA: itab LIKE TABLE OF line,
wa LIKE LINE OF itab.
SORT itab by col1.
LOOP AT itab INTO wa.
AT NEW col1.
ENDAT.
ENDLOOP.
Grund:
Die Gruppenstufenverarbeitung basiert auf der Zeilenstruktur der internen Tabelle. Zur
Feststellung des Gruppenwechsels wird der Arbeitsbereich ausgewertet, der daher die gleiche Struktur wie eine Tabellenzeile haben muss.
Kein überflüssiger Arbeitsbereich
-
Bei READ TABLE darf in ABAP Objects kein Arbeitsbereich angegeben werden, wenn der Zusatz TRANSPORTING NO FIELDS verwendet wird.
In ABAP Objects Fehlermeldung bei:
READ TABLE itab INDEX i INTO wa TRANSPORTING NO FIELDS.
Korrekte Syntax:
READ TABLE itab INDEX i TRANSPORTING NO FIELDS.
Grund:
Die Angabe von INTO wa ist überflüssig. Der Arbeitsbereich wird in der Anweisung nicht beeinflusst.
Verbot obsoleter Schlüsselangabe mit TABLE LINE
-
Falls die ganze Zeile einer internen Tabelle als Schlüssel spezifiziert werden soll, darf in ABAP Objects nicht TABLE LINE angegeben werden.
In ABAP Objects Fehlermeldung bei:
... TABLE LINE ...
Korrekte Syntax:
... table_line ...
Grund:
Die Pseudokomponente table_line ersetzt das Konstrukt TABLE LINE.
Verbot obsoleter READ-Varianten
-
Die READ-Variante, bei welcher die Schlüsselwerte aus der Kopfzeile gelesen werden, ist in ABAP Objects verboten.
In ABAP Objects Fehlermeldung bei:
READ TABLE itab.
Korrekte Syntax:
READ TABLE itab FROM key INTO wa.
oder
READ TABLE itab WITH KEY ... INTO wa.
Grund:
Diese Variante verwendet einen impliziten Schlüssel, der aus allen Feldern der
Kopfzeile der Tabelle besteht, die weder von numerischen Typ (I, DECFLOAT16, DECFLOAT34, F, P) noch
selbst Tabellen sind und deren Inhalt ungleich space ist. Der Schlüssel soll stattdessen explizit angegeben werden. Die Variante war ohnehin nur bei Tabellen mit Kopfzeile möglich.
-
Die READ-Variante, bei welcher der Tabelle die Struktur eines Schlüssels aufgeprägt wird, ist in ABAP Objects verboten.
In ABAP Objects Fehlermeldung bei:
READ TABLE itab WITH KEY key INTO wa.
Grund:
Die Schlüsselfelder einer Tabelle sollen immer Komponenten der Zeilenstruktur sein.
-
Die READ-Variante, bei welcher die gesamte Tabellenzeile als Komponente aufgefasst und der angegebene Schlüsselwert mit der gesamten Tabellenzeile verglichen wird, ist in ABAP Objects verboten.
In ABAP Objects Fehlermeldung bei:
READ TABLE itab WITH KEY = key INTO wa.
Korrekte Syntax:
READ TABLE itab WITH KEY table_line = key INTO wa.
Grund:
Diese Variante ist eine Speziallösung, um Schlüsselzugriffe auf Tabellen mit unstrukturierten Zeilentypen zu ermöglichen. Die Einführung der
Pseudokomponente
table_line, welche immer anstelle eines Schlüsselfelds verwendet werden kann, macht diese READ-Variante überflüssig.
-
Bei Verwendung eines expliziten Suchschlüssels darf in ABAP Objects bei der Anweisung READ TABLE eine Spalte nur einmal angegeben werden.
In ABAP Objects Fehlermeldung bei:
READ TABLE itab INTO line WITH KEY col1 = ... col1 = ...
Korrekte Syntax:
READ TABLE itab INTO line WITH KEY col1 = ...
Grund:
Es wird nur die letzte Angabe ausgewertet. Mehrfache Angaben sind überflüssig.
Kein WRITE TO für interne Tabellen
-
Die Anweisung WRITE TO ist in ABAP Objects für interne Tabellen verboten.
In ABAP Objects Fehlermeldung bei:
WRITE ... TO itab INDEX idx.
Korrekte Syntax:
FIELD-SYMBOLS <fs> TYPE ...
READ TABLE itab INDEX idx ASSIGNING <fs>.
WRITE ... TO <fs>.
Grund:
Für den direkten Zugriff auf Tabellenzeilen können Feldsymbole verwendet werden. Die Anweisung WRITE TO für Tabellenzeilen ist überflüssig.
Keine Feldsymbole als Sortierkriterium
-
Beim Sortieren von internen Tabellen dürfen in ABAP Objects keine Feldsymbole als Sortierkriterium verwendet werden
In ABAP Objects Fehlermeldung bei:
name = 'ITAB-COL1'.
ASSIGN (name) TO <fs>.
SORT itab BY <fs>.
Korrekte Syntax:
name = 'COL1'.
SORT itab BY (name).
Grund:
Sortierkriterien müssen mit Bezug auf die Zeilenstruktur (Spalten) der internen
Tabelle angegeben werden. Feldsymbole zeigen auf Datenobjekte und dürfen nicht zur Benennung
von Strukturkomponenten dienen. Da die dynamische Namensangabe möglich ist, ist eine Spaltenangabe
über Feldsymbole, die auf den verwendeten Arbeitsbereich zeigen, unnötig. Diese Variante war ohnehin nur bei Tabellen mit
Kopfzeile möglich.
Keine Feldsymbole als Gruppenwechselkriterium
-
Bei der Gruppenstufenverarbeitung dürfen in ABAP Objects keine Feldsymbole als Gruppenwechselkriterium angegeben werden.
In ABAP Objects Fehlermeldung bei:
name = 'WA-COL1'.
ASSIGN (name) TO <fs>.
LOOP AT itab INTO wa.
AT NEW <fs>.
...
ENDAT.
ENDLOOP.
Korrekte Syntax:
name = 'COL1'.
LOOP AT itab INTO wa.
AT NEW (name).
...
ENDAT.
ENDLOOP.
Grund:
Gruppenwechselkriterien müssen mit Bezug auf die Zeilenstruktur (Spalten) der
internen Tabelle angegeben werden. Feldsymbole zeigen auf Datenobjekte und dürfen nicht zur Benennung
von Strukturkomponenten dienen. Da die dynamische Namensangabe möglich ist, ist eine Spaltenangabe über Feldsymbole, verwendeten Arbeitsbereich zeigen, unnötig.
Verbot von INFOTYPES
-
Diese Anweisung legt eine spezielle Tabelle mit Kopfzeile an und ist daher in ABAP Objects verboten.
In ABAP Objects Fehlermeldung bei:
INFOTYPES nnn.
Grund:
Da Tabellen mit Kopfzeilen in ABAP Objects generell verboten sind, muss die gewünschte Tabelle mit erlaubten Anweisungen deklariert werden.
Verbot von RANGES
-
Diese Anweisung legt eine spezielle Tabelle mit Kopfzeile an und ist daher in ABAP Objects verboten.
In ABAP Objects Fehlermeldung bei:
RANGES rangetab FOR f.
Korrekte Syntax:
DATA rangetab TYPE|LIKE RANGE OF ...
Grund:
Da Tabellen mit Kopfzeilen in ABAP Objects generell verboten sind, muss die gewünschte Tabelle mit erlaubten Anweisungen deklariert werden.
Verbot der Kurzform von PROVIDE
-
Diese Variante kann nur auf Tabellen mit Kopfzeilen arbeiten und ist daher in ABAP Objects verboten.
In ABAP Objects Fehlermeldung bei:
PROVIDE f1 f2 ... FROM itab1
g1 g2 ... FROM itab2
...
FROM itabn
...
BETWEEN f AND g.
...
ENDPROVIDE.
Grund:
Tabellen mit Kopfzeilen sind obsolet.
Addresses (Business Address Services) CL_GUI_FRONTEND_SERVICES - Frontend Services
Diese Dokumentation steht unter dem Copyright der SAP AG.
Length: 20855 Date: 20240523 Time: 173224 sap01-206 ( 239 ms )