Table Controls im ABAP Programm 

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.

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

Aktuelle Zeilenanzahl im Table Control. Steuert die Blätterleiste des Table Controls. Kann im ABAP-Programm gesetzt werden. Wird bei LOOP AT <itab> initial auf die Anzahl der Zeilen der internen Tabelle gesetzt. Ist LINES kleiner als die Zeilenanzahl der internen TabelIe, enthält der Table Control am Ende leere Zeilen. Bei LOOP ohne interne Tabelle ist LINES initial Null und muß im Programm gesetzt werden, damit die Blätterleiste verwendbar ist.

 

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 TOP_LINE+SY-STEPL+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. Dabei ist zu beachten, daß bei einer Schleife über die Table Control-Zeilen ohne parallele Schleife über eine interne Tabelle, die Komponente <ctrl>-LINES auf die gewünschte Zeilenzahl im Table Control gesetzt werden muß. Bei einer Schleife über die Table Control-Zeilen mit paralleler Schleife über eine interne Tabelle, wird <ctrl>-LINES automatisch auf die Zeilenanzahl in der internen Tabelle gesetzt. 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.