Anfang des Inhaltsbereichs

Hintergrunddokumentation Aufbereitung von Listen  Dokument im Navigationsbaum lokalisieren

  1. Einführung
  2. Regeln für die WRITE-Anweisung
  3. Zusätze bei GET/SET CURSOR FIELD/LINE
  4. Klasse für die Aufbereitung von Listen
  5. Listeneinstellungen
  6. Empfehlungen

 

1. Einführung

Die Anweisung WRITE schreibt den Inhalt von Datenobjekten auf eine Liste. Beim Schreiben mit der Anweisung WRITE wird die Ausgabe im Listenpuffer gespeichert und von dort beim Aufruf der Liste zur Anzeige gebracht. Bei jeder Ausgabe eines Datenobjekts mit WRITE wird implizit oder explizit eine Ausgabelänge festgelegt, wobei die implizite Ausgabelänge vom Datentyp abhängt. Mit der Ausgabelänge werden zwei Dinge definiert:

Wenn die Ausgabelänge kleiner als die Länge des Datenobjekts ist, wird dessen Inhalt beim Schreiben in den Listenpuffer nach bestimmten Regeln verkürzt, wobei ein Wertverlust bei numerischen Feldern durch das Zeichen * angezeigt wird. Bei Anzeige oder Ausdruck einer Liste werden die im Listenpuffer abgelegten Inhalte wie folgt auf die Liste übertragen:

Aus diesen Gründen ist die horizontale Position des Listen-Cursors nur in Nicht-Unicode-Systemen gleichbedeutend zur Ausgabespalte einer dargestellten oder gedruckten Listen. In Unicode-Systemen ist dies nur für die jeweils unteren und oberen Ausgabegrenzen der einzelnen Ausgaben garantiert.

 

2. Regeln für die WRITE-Anweisung

Um ungewolltes Abschneiden so weit wie möglich zu vermeiden, wurden die Regeln für die WRITE-Anweisung in Unicode-Programmen angepasst und erweitert.

WRITE-Anweisung mit impliziter Ausgabelänge

In Unicode-Programmen verhält sich die WRITE-Anweisung ohne explizite Angabe der Ausgabelänge für alle ausgebbaren Datenobjekte mit Ausnahme von Textfeldliteralen und Datenobjekten des Typs string wie in Nicht-Unicode-Programmen. Dadurch kann es vorkommen, dass auf der Liste weniger Zeichen dargestellt werden als im Listenpuffer abgelegt sind.

Bei Textfeldliteralen und Datenobjekten des Typs string wird davon ausgegangen, dass alle Zeichen dargestellt werden sollen. Deshalb wird die implizite Ausgabelänge anhand der im Datenobjekt enthaltenen Zeichen so berechnet, dass sie der Anzahl der auf der Liste benötigten Spalten entspricht. Wenn diese Ausgabelänge größer als die Länge des Datenobjekts ist, werden überzählige Stellen beim Schreiben in den Listenpuffer mit Leerzeichen aufgefüllt. Bei der Darstellung auf der Liste werden diese Leerzeichen wieder abgeschnitten, da die Darstellung der Zeichen die Ausgabelänge genau ausfüllt.

WRITE-Anweisung mit expliziter Ausgabelänge

Wenn bei der WRITE-Anweisung ein numerisches Datenobjekt als explizite Ausgabelänge hinter dem Zusatz AT angegeben ist, wird der Wert dieser Zahl sowohl in Unicode- als auch in Nicht-Unicode-Systemen als Ausgabelänge verwendet. In Unicode-Systemen kann sich die Anzahl der auf der Liste dargestellten Zeichen von der Anzahl der im Listenpuffer gespeicherten Zeichen unterscheiden. Seit Release 6.20 kann die Ausgabelänge außer über numerische Datenobjekte wie folgt angegeben werden:

 

3. Zusätze bei GET/SET CURSOR FIELD/LINE

Die Zusätze DISPLAY OFFSET und MEMORY OFFSET berücksichtigen, dass Datenobjekte bei der Darstellung auf einer Liste (Display) und bei der Zwischenspeicherung im Listenpuffer (Memory) unterschiedliche Längen belegen können. In Unicode-Codepages gibt es nämlich Zeichen, die im Listenpuffer nur eine Speicherstelle belegen, bei der Anzeige aber zwei Ausgabespalten benötigen.

Dementsprechend wird der Cursor bei der Anweisung SET CURSOR { FIELD f | LINE l } durch den Zusatz DISPLAY OFFSET off auf die in off angegebene Spalte des Ausgabebereichs gestellt. Durch den Zusatz MEMORY OFFSET off wird der Cursor auf das Zeichen des Ausgabebereichs gestellt, das im Listenpuffer an der in off angegebenen Stelle (des Datenobjekts in f) steht.

In gleicher Weise überträgt die Anweisung GET CURSOR { FIELD f | LINE l } bei Verwendung des Zusatzes DISPLAY OFFSET off die Cursorposition im Ausgabebereich in das Datenobjekt off. Bei Verwendung des Zusatzes MEMORY OFFSET off wird die Cursorposition des Listenpuffer in das Datenobjekt off gestellt. Der Zusatz DISPLAY OFFSET ist die Standardeinstellung und kann daher weggelassen werden.

 

4. Klasse für die Aufbereitung von Listen

Für die Berechnung von Ausgabelängen, die Konvertierung von Werten aus dem Listenpuffer und die Definition von Feldgrenzen wurde die Klasse CL_ABAP_LIST_UTILITIES eingeführt. Mit den Rückgabewerten ihrer Methoden kann eine korrekte Spaltenausrichtung auf ABAP-Listen programmiert werden, auch wenn ostasiatische Schriften ausgegeben werden.

 

5. Listeneinstellungen

Die Objekte einer Liste können in unterschiedlichen Ausgabelängen angezeigt werden, indem die gewünschte Länge im Menü System Liste Unicode-Anzeige eingestellt wird. Dies ist für vor allem bei Bildschirmlisten in Unicode-Systemen vorteilhaft, deren Ausgaben abgeschnitten wurden, was durch die Zeichen > oder < angezeigt wird.

 

6. Empfehlungen

Damit Listen sowohl in Unicode-Systemen als auch in Nicht-Unicode-Systemen gleiches Aussehen und Funktionalität besitzen, wird für die Programmierung von Listen die Einhaltung folgender Regeln empfohlen:

Ende des Inhaltsbereichs