Ansicht
Dokumentation

ABENABAP_OBJECTS_DIFF_ITAB - ABAP OBJECTS DIFF ITAB

ABENABAP_OBJECTS_DIFF_ITAB - ABAP OBJECTS DIFF ITAB

PERFORM Short Reference   CL_GUI_FRONTEND_SERVICES - Frontend Services  
Diese Dokumentation steht unter dem Copyright der SAP AG.
SAP E-Book

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 )