Attribute dynamisch setzen 

Jedes Bildschirmfeld besitzt bestimmte Attribute, die bei der Definition des Dynpros im Screen Painter festgelegt werden. Während der Laufzeit des ABAP-Programms steht ein Teil der Attribute jedes Bildschirmfelds immer aktuell in der Systemtabelle SCREEN zur Verfügung.

Die Tabelle SCREEN

Diese Tabelle verhält sich ähnlich wie eine interne Tabelle mit Kopfzeile. Die Tabelle muß nicht im Programm deklariert werden. Sie läßt sich aber nicht im Debugger anzeigen und kann nicht mit anderen Arbeitsbereichen außer der Kopfzeile bearbeitet werden. Die Zeilenstruktur der Systemtabelle SCREEN ist wie folgt:

Komponente

Länge

Typ

Bedeutung

Attribut

NAME

30

C

Name des Bildschirmfelds

Name

GROUP1

3

C

Modifikationsgruppe 1

Gruppe1

GROUP2

3

C

Modifikationsgruppe 2

Gruppe2

GROUP3

3

C

Modifikationsgruppe 3

Gruppe3

GROUP4

3

C

Modifikationsgruppe 4

Gruppe4

REQUIRED

1

C

Feldeingabe ist obligatorisch

Muß-Feld

INPUT

1

C

Feld ist eingabebereit

Eingabe

OUTPUT

1

C

Feld dient nur zur Anzeige

Ausgabe

INTENSIFIED

1

C

Feld ist hervorgehoben

Hell

INVISIBLE

1

C

Feld ist ausgeblendet

Unsichtbar

LENGTH

1

X

Länge des Felds

visLänge

ACTIVE

1

C

Feld ist aktiv

Eingabe/Ausgabe/Unsichtbar

DISPLAY_3D

1

C

Dreidimensionaler Rahmen

Zweidimensional

VALUE_HELP

1

C

Anzeige der Eingabehilfetaste

Eingabehilfe

REQUEST

1

C

Eingabe vorhanden

-

In der letzten Spalte sind die zugehörigen Attribute der Bildschirmfelder im Screen Painter aufgeführt.

Die Tabelle SCREEN kann zum Zeitpunkt PBO eines Dynpros im ABAP-Programm modifiziert werden. Der Inhalt von SCREEN übersteuert für genau einen Bildschirmaufruf die statischen Attribute der Bildschirmfelder. Die einzigen erlaubten Anweisungen zur Bearbeitung der Tabelle SCREEN sind:

LOOP AT SCREEN.
...
  MODIFY SCREEN.
...
ENDLOOP.

In der LOOP-Anweisung sind für die Tabelle SCREEN keine weiteren Zusätze erlaubt.

Die Komponente NAME enthält den Namen des Bildschirmfelds. Die Komponenten GROUP1 bis GROUP4 können beliebige dreistellige Kürzel enthalten, die es erlauben die Bildschirmfelder in bis zu vier Modifikationsgruppen zusammenzufassen. Ein Bildschirmfeld kann zu verschiedenen Modifikationsgruppen gehören. Modifikationsgruppen sind eine Art weitere Schlüsselfelder der Tabelle SCREEN, die es erlauben, die Attribute aller Bildschirmfelder einer Gruppe gleichartig abzuändern. Die Zuordnung zu Modifikationsgruppen erfolgt statisch im Screen Painter, kann aber auch dynamisch im Programm überschrieben werden.

Die übrigen Komponenten dienen dem Auslesen und der Aktivierung bzw. Deaktivierung der Anzeigeattribute von Bildschirmfeldern. Dabei ist für alle Komponenten bis auf LENGTH der Inhalt 1 gleichbedeutend mit aktiv und der Inhalt 0 gleichbedeutend zu inaktiv.

ACTIVE, INPUT, OUTPUT und INVISIBLE

Die Komponenten ACTIVE, INPUT, OUTPUT und INVISIBLE haben untereinander gewisse Hierarchien und wirken auch unterschiedlich bei unterschiedlichen statischen Vorbelegungen.

Die Komponente ACTIVE hat keine Entsprechung in den Attributen, sondern sie beeinflußt die Attribute Eingabe, Ausgabe und Unsichtbar und entsprechend auch die Komponenten INPUT, OUTPUT und INVISIBLE.

Zu Beginn von PBO ist immer ACTIVE = 1, unabhängig von den statischen Vorbelegungen. Das Setzen von ACTIVE = 0 setzt automatisch auch INPUT = 0, OUTPUT =0 und INVISIBLE = 1. Andere Zuweisungen an INPUT, OUTPUT und INVISIBLE der gleichen Tabellenzeile werden ignoriert. Umgekehrt führt das Setzen von INPUT = 0, OUTPUT =0 und INVISIBLE = 1 automatisch auch zu ACTIVE = 0. Eine andere Zuweisung an ACTIVE in der gleichen Tabellenzeile wird ignoriert. Der Zustand ACTIVE = 1 hat ansonsten keinen Einfluß auf die Attribute. Der einzige Zweck der Komponente ACTIVE ist es, ein Bildschirmfeld durch eine einzige Zuweisung inaktiv machen zu können. Insbesondere gilt, daß auch bei SCREEN-ACTIVE = 0 ein Modulaufruf immer abläuft, der mit einer entsprechenden FIELD-Anweisung in der Dynproablauflogik mit dem Bildschirmfeld verknüpft ist. Wenn ein Modul bei einem deaktivierten Feld nicht mehr ablaufen soll, muß man FIELD- und MODULE-Anweisungen getrennt angeben.

Daraus folgen acht verschiedene Kombinationen von ACTIVE, INPUT, OUTPUT und INVISIBLE, die sich wie folgt auf Bildschirmfelder auswirken:

ACTIVE

INPUT

OUTPUT

INVISIBLE

Effekt

1

1

1

0

Anzeige des Bildschirmfelds, auch wenn statisch Unsichtbar gesetzt ist.

Ausgabe des Inhalts.

Eingabebereit auch wenn nicht statisch Eingabe gesetzt ist, außer bei statischer Nur Ausgabe.

1

1

0

0

Anzeige des Bildschirmfelds, auch wenn statisch Unsichtbar gesetzt ist, außer bei statischer Nur Ausgabe.

Keine Ausgabe des Inhalts.

Eingabebereit auch wenn nicht statisch Eingabe gesetzt ist.

1

0

1

0

Anzeige des Bildschirmfelds, auch wenn statisch Unsichtbar gesetzt ist.

Ausgabe des Inhalts.

Nicht Eingabebereit auch wenn statisch Eingabe gesetzt ist.

1

0

0

0

Anzeige des Bildschirmfelds, auch wenn statisch Unsichtbar gesetzt ist, außer bei statischer Nur Ausgabe.

Keine Ausgabe des Inhalts.

Nicht Eingabebereit auch wenn statisch Eingabe gesetzt ist.

1

1

1

1

Anzeige des Bildschirmfelds, auch wenn statisch Unsichtbar gesetzt ist, außer bei statischer Nur Ausgabe.

Keine Ausgabe des Inhalts.

Eingabebereit auch wenn nicht statisch Eingabe gesetzt ist, wobei die Benutzereingabe durch Sterne ( * ) maskiert wird.

1

1

0

1

Anzeige des Bildschirmfelds, auch wenn statisch Unsichtbar gesetzt ist, außer bei statischer Nur Ausgabe.

Ausgabe des Inhalts durch Sterne ( * ) maskiert.

Eingabebereit auch wenn nicht statisch Eingabe gesetzt ist, wobei die Benutzereingabe durch Sterne ( * ) maskiert wird.

1

0

1

1

Bildschirmfeld inaktiv.

Keine Anzeige des Bildschirmfelds unabhängig von den statischen Attributen.

0

0

0

1

Bildschirmfeld inaktiv.

Keine Anzeige des Bildschirmfelds unabhängig von den statischen Attributen.

Das Setzen von INPUT = 1 wird für Felder, die statisch als Nur Ausgabe gekennzeichnet sind, ignoriert. Für solche Felder gilt immer INPUT = 0. Das Unsichtbarmachen von Benutzereingaben durch Sterne ( * ) kann für die Eingabe von Paßwörtern verwendet werden.

Wenn durch die Ausblendung von Bildschirmfeldern ganze Zeilen frei werden, wird die Bildschirmgröße des Dynpros automatisch verringert. Diese Komprimierung kann in den statischen Dynproattributen durch das Ankreuzen von Ausschalten Laufzeitkomprimierung abgeschaltet werden.

REQUIRED

Mit dem Setzen von REQUIRED = 1 werden eingabebereite Felder obligatorisch gemacht. Der Benutzer kann den Bildschirm nur Verlassen, wenn alle solchen Felder eine Eingabe enthalten. Ausnahme: Funktionscodes vom Typ E und Aufruf eines Moduls mit dem Zusatz AT EXIT-COMMAND.

DISPLAY_3D

Mit dem Setzen von DISPLAY_3D = 0 können für Ein-/Ausgabefelder die dreidimensionalen Rahmen entfernt werden. Für Textfelder und Bildschirmfelder mit dem Attribut Nur Ausgabe können aber keine dreidimensionalen Rahmen mit DISPLAY_3D = 1 eingeschaltet werden.

VALUE_HELP

Mit dem Setzen von VALUE_HELP = 0 bzw. 1 läßt sich die Anzeige der Eingabehilfetaste an- und abschalten.

INTENSIFIED

Mit dem Setzen von INTENSIFIED = 1 läßt sich die Farbe der Anzeige des Feldinhalten von Schwarz auf Rot für eingabebereite und Blau für nicht eingabebereite Felder umschalten und umgekehrt.

LENGTH

Die Komponente LENGTH läßt sich für Ein-/Ausgabefelder und Felder vom Attribut Nur Ausgabe auf Werte kleiner als die statisch definierte Ausgabelänge (visLänge) setzen. Damit kann deren Ausgabelänge verkürzt werden. Das Verkürzen anderer Bildschirmelemente oder Verlängerungen sind nicht möglich.

REQUEST

Das Setzen von REQUEST = 1 wirkt für eingabebereite Felder zum Zeitpunkt PAI so, als wenn der Benutzer den Feldinhalt geändert hat. Ein bedingter Modulaufruf mit dem ON REQUEST oder ON CHAIN-REQUEST wird dann unabhängig von der wirklichen Benutzeraktion ausgeführt. Dabei wird REQUEST automatisch wieder auf 0 gesetzt.

Beispiel

Das folgende Beispiel zeigt eine einfache Bildschirmmodifikation. Eine Demonstration aller möglichen Modifikationen zeigt das Programm DEMO_DYNPRO_MODIFY_SCREEN.

Dynamische Bildschirm-Modifikation.

REPORT demo_dynpro_modify_simple.

DATA: ok_code TYPE sy-ucomm,
      save_ok TYPE sy-ucomm.

DATA flag(1) TYPE c.

CALL SCREEN 100.

MODULE status_0100 OUTPUT.
  SET PF-STATUS 'SCREEN_100'.
  LOOP AT SCREEN.
    IF screen-group1 = 'MOD'.
      IF flag = ' '.
        screen-input = '0'.
      ELSEIF flag = 'X'.
        screen-input = '1'.
      ENDIF.
      MODIFY SCREEN.
    ENDIF.
  ENDLOOP.
ENDMODULE.

MODULE cancel.
  LEAVE PROGRAM.
ENDMODULE.

MODULE user_command_0100 INPUT.
  save_ok = ok_code.
  CLEAR ok_code.
  CASE save_ok.
    WHEN 'TOGGLE'.
      IF flag = ' '.
        flag = 'X'.
      ELSEIF flag = 'X'.
        flag = ' '.
      ENDIF.
  ENDCASE.
ENDMODULE.

Die statische Folgedynpronummer von Dynpro 100 ist 100 und sein statisches Layout ist:

Die Ein- und Ausgabefelder sind von der Struktur DEMO_CONN des ABAP Dictionaries übernommen worden. Die untersten vier Ein- und Ausgabefelder sind der Modifikationsgruppe MOD zugeordnet.

Die Bildschirmablauflogik ist:

PROCESS BEFORE OUTPUT.
  MODULE status_0100.

PROCESS AFTER INPUT.
  MODULE cancel AT EXIT-COMMAND.
  MODULE user_command_0100.

Im GUI Status SCREEN_100 ist der Funktionscode TOGGLE mit einer Drucktaste verknüpft.

Beim Aufruf des Programms werden die untersten vier Ein-/Ausgabefelder nicht eingabebereit angezeigt, da die Variable FLAG initial ein Leerzeichen enthält. Der Benutzer kann die Eingabebereitschaft mit TOGGLE ein- und ausschalten.