Anfang des Inhaltsbereichs

Table Controls im ABAP-Programm Dokument im Navigationsbaum lokalisieren

Um Table Controls im ABAP-Programm zu behandeln, muß für jedes Table Control mit folgender Anweisung ein Control im Deklarationsteil des Programms deklariert werden:

CONTROLS <ctrl> TYPE TABLEVIEW USING SCREEN <scr>.

Dabei ist <ctrl> der Name des Table Controls auf einem Dynpro des ABAP-Programms. Das Control ermöglicht es dem ABAP-Programm, die Eigenschaften des Table Controls auszulesen und das Table Control zu beeinflussen. Dazu deklariert die Anweisung gleichzeitig eine tiefe Struktur mit dem Namen <ctrl>. Der Datentyp der Struktur entspricht dem im ABAP Dictionary in der Typgruppe CXTAB definierten Typ CXTAB_CONTROL.

Die Komponenten der Struktur enthalten zur Laufzeit die Attribute des Table Controls. Einige der Initialwerte werden im Screen Painter festgelegt. Mit dem Zusatz USING wird das Dynpro bestimmt, von dem die Initialwerte für das Control <ctrl> entnommen werden.

Mit der Anweisung

REFRESH CONTROL <ctrl> FROM SCREEN <scr>.

kann ein Table Control jederzeit mit den Initialwerten eines Dynpros <scr> initialisiert werden. Werte, die nicht den Einstellungen im Screen Painter entnommen werden, werden zu PAI gemäß dem aktuellen Zustand des Table Controls gesetzt.

Die Struktur CXTAB_CONTROL

Die tiefe Struktur CXTAB_CONTROL enthält auf oberster Ebene die generellen Attribute des Table Controls. Die Komponente CXTAB_CONTROL-COLS ist eine Tabelle der Struktur CXTAB_COLUMN und enthält die Attribute einer Spalte. Die Komponente CXTAB_CONTROL-COLS-SCREEN ist eine flache Struktur vom gleichen Typ wie die Systemtabelle SCREEN und enthält die Attribute der einzelnen Bildschirmelemente.

Diese Grafik wird im zugehörigen Text erklärt

Bis auf die Komponente CURRENT_LINE können alle Attribute der Struktur CXTAB_CONTROL im ABAP-Programm gesetzt und damit die Darstellung des Table Controls auf dem Bildschirm beeinflußt werden.

Komponenten von CXTAB_CONTROL

Die Struktur CXTAB_CONTROL hat folgende Komponenten:

Komponente

Typ(Länge)

Bedeutung

Im Screen Painter

FIXED_COLS

I

Anzahl der Führungsspalten. Wird aus Screen Painter übernommen. Kann im ABAP-Programm geändert werden.

Fixe Spalten

LINES

I

Steuert die Blätterleiste des Table Controls. Bei LOOP ohne interne Tabelle ist LINES initial Null und muß auf alle Fälle im Programm gesetzt werden, damit die Blätterleiste verwendbar ist. Bei LOOP AT <itab> setzt das System diese Komponente in dem Moment auf die Anzahl der Zeilen der internen Tabelle, wenn das Table Control zum ersten Mal prozessiert wird. Der Zeitpunkt der Initialisierung eines Table Controls ist aber nicht eindeutig festgelegt. Wenn zu diesem Zeitpunkt die entsprechende interne Tabelle, noch nicht vollständig aufgebaut ist, erhält die LINES-Variable einen falschen Wert. Ist LINES in der LOOP-Schleife kleiner als die Zeilenanzahl der internen TabelIe, enthält das Table Control am Ende leere Zeilen.

Deshalb sollte die LINES-Komponente immer, also auch bei LOOP AT <itab>, explizit im ABAP-Programm gesetzt werden, um dort die volle Kontrolle über die Dimensionierung der vertikalen Blätterleiste zu haben und damit z.B. die Anzahl der eingabebereiten Zeilen zu steuern. Die Initialisierung sollte in der Regel zu PBO direkt vor der LOOP-Anweisung für das Table Control erfolgen.

 

TOP_LINE

I

Oberste Zeile bei nächstem PBO. Wird zu PAI durch Position der vertikalen Blättermarke gesetzt. Kann im ABAP-Programm geändert werden.

 

CURRENT_LINE

I

Aktuelle Zeile in der Schleife. Wird innerhalb der LOOP-Schleifen automatisch auf den Wert SY-STEPL +(TOP_LINE-1) gesetzt. Keine Änderung im ABAP-Programm erlaubt.

 

LEFT_COL

I

Erste angezeigte horizontal blätterbare Spalte nach den Führungsspalten. Wird zu PAI durch Position der horizontale Blättermarke gesetzt. LEFT_COL enthält die absolute Nummer der Spalte unabhängig von einer eventuellen Spaltenverschiebung durch den Benutzer. Kann im ABAP-Programm geändert werden.

 

LINE_SEL_MODE

I

Modus der Zeilenmarkierung: 0, 1, 2 für keine, eine oder mehrere Zeilen markierbar. Wird aus Screen Painter übernommen. Kann im ABAP-Programm geändert werden.

Zeilenmarkierung

COL_SEL_MODE

I

Modus der Spaltenmarkierung: 0, 1, 2 für keine, eine oder mehrere Zeilen markierbar. Wird aus Screen Painter übernommen. Kann im ABAP-Programm geändert werden.

Spaltenmarkierung

LINE_SELECTOR

C(1)

Flag (X oder leer) für Markierspalte. Wird aus Screen Painter übernommen. Kann im ABAP-Programm geändert werden.

Markierspalte

H_GRID

C(1)

Flag (X oder leer) für horizontale Trennlinien. Wird aus Screen Painter übernommen. Kann im ABAP-Programm geändert werden.

Trennlinien

V_GRID

C(1)

Flag (X oder leer) für vertikale Trennlinien. Wird aus Screen Painter übernommen. Kann im ABAP-Programm geändert werden.

Trennlinien

COLS

CXTAB_COLUMN

Steuertabelle für einzelne Spalten (s.u.).

 

INVISIBLE

C(1)

Flag (X oder leer) für Sichtbarkeit des gesamten Table Controls.

 

Eine Komponente der Struktur CXTAB_CONTROL ist die interne Tabelle CXTAB_COLUMN.

Komponenten von CXTAB_COLUMN

Jede Spalte des Table Controls entspricht einer Zeile der Tabelle CXTAB_COLUMN. Die interne Tabelle CXTAB_COLUMN hat keine Kopfzeile und folgende Spalten:

Komponente

Typ(Länge)

Bedeutung

SCREEN

SCREEN

Struktur für die Attribute des Bildschirmelements der Spalte (s.u).

INDEX

I

Aktuelle Position der Spalte im Table Control. Wird initial aus Screen Painter übernommen. Wird zu PAI der aktuellen Spaltenkonfiguration des Table Controls entnommen. Kann im ABAP-Programm geändert werden.

SELECTED

C(1)

Flag (X oder leer) ob Spalte markiert ist oder nicht. Wird zu PAI dem aktuellen Zustand des Table Controls entnommen. Kann im ABAP-Programm geändert werden.

VISLENGTH

I

Sichtbare Länge der Spalte. Wird aus Screen Painter übernommen. Kann im ABAP-Programm geändert werden.

INVISIBLE

C(1)

Flag (X oder leer) ob Spalte unsichtbar ist oder nicht. Wird aus Screen Painter übernommen. Kann im ABAP-Programm geändert werden.

Eine Spalte der Tabelle CXTAB_COLUMN ist die Struktur SCREEN.

Komponenten von SCREEN

Die Struktur SCREEN enthält die gleichen Komponenten wie die Systemtabelle SCREEN. Die Komponente SCREEN-NAME ist der Name des Bildschirmelements, das die Spalte aufbaut. Die Initialwerte der übrigen Komponenten entsprechen den Attributen des Bildschirmelements im Screen Painter und werden initial von dort übernommen. Sie können im ABAP-Programm direkt geändert werden. Dabei ist zu beachten, daß die direkt gesetzten Werte durch eine Modifikation dieser Attribute mit MODIFY SCREEN innerhalb der Schleife LOOP AT SCREEN überschrieben werden kann.

Außerdem ist zu beachten, daß die Attribute der Struktur SCREEN nicht mit Leerzeichen und X, sondern wie in der Systemtabelle SCREEN mit 0 und 1 gesetzt werden.

Blättern in Table Controls

Das Blättern mit Blätterleisten ist bei Table Controls automatisch eingerichtet und wird vom System verwaltet. Voraussetzung ist aber, daß die Komponente <ctrl>-LINES vor der der Bearbeitung des Table-Controls auf die gewünschte Zeilenzahl gesetzt wurde. Dies gilt für Table Controls mit und ohne paralleler Schleife über eine interne Tabelle. Bei Table Controls mit paralleler Schleife über eine interne Tabelle wird die Komponente LINES zwar implizit gesetzt, der richtige Wert ist aber nicht garantiert (siehe obige Tabelle). Deshalb empfiehlt es sich in beiden Fällen, die Komponente LINES explizit auf die Anzahl der Zeilen in der internen Tabelle des ABAP-Programms zu setzen, zu deren Feststellung die Anweisung DESCRIBE TABLE verwendet werden kann (siehe auch die folgenden Beispiele).

Beim Blättern mit Blätterleisten wird das Ereignis PAI mit einem leeren Funktionscode ausgelöst. Die Schleifen zu PAI und PBO werden ausgeführt, wobei das System die Komponente TOP_LINE der Struktur CXTAB_CONTROL vor PBO so setzt, daß bei dessen Schleifendurchlauf die richtigen Zeilen bearbeitet werden.

Ein programmgesteuertes vertikales Blättern (zeilen- bzw. seitenweises Blättern oder Springen zu bestimmten Zeilen) kann mit Hilfe der Komponenten der Struktur CXTAB_CONTROL leicht implementiert werden. Im wesentlichen muß dabei der Komponente TOP_LINE ein Wert zugewiesen werden. Für das seitenweise Blättern kann die Anzahl der zu blätternden Zeilen während der Schleifenausführung dem Systemfeld SY-LOOPC entnommen werden. SY-LOOPC enthält die Anzahl der aktuell dargestellten Zeilen, während die Komponente LINES der Struktur CXTAB_CONTROL die gesamte Anzahl von Zeilen im Table Control enthält.

Cursorposition auf Table Controls

Zum Zeitpunkt PBO kann der Cursor auf ein bestimmtes Feld einer bestimmten Table Control-Zeile gesetzt werden:

SET CURSOR FIELD <f> LINE <lin> [OFFSET <off>].

Mit dem optionalen Zusatz OFFSET kann wie unter Cursorposition festlegen beschrieben der Offset des Cursors im Feld angegeben werden.

Umgekehrt kann zum Zeitpunkt PAI die aktuelle Cursorposition ausgelesen werden:

GET CURSOR FIELD <f> LINE <lin> ...

Zusätzlich zu den unter Cursorposition bestimmen angegebenen Informationen wird die Table Control-Zeile, in der sich der Cursor befindet in das Feld <lin> gestellt. Um nur die Table Control-Zeile zu bestimmen, kann man auch

GET CURSOR LINE <lin>.

verwenden. Hier kann durch SY-SUBRC überprüft werden, ob der Cursor überhaupt in einer Table Control-Zeile steht oder nicht.

Ende des Inhaltsbereichs