Show TOC Anfang des Inhaltsbereichs

Ein- und Ausgabefelder verarbeiten  Dokument im Navigationsbaum lokalisieren

Ein- und Ausgabefelder sind entweder gewöhnliche Schablonen, in die der Benutzer Werte über die Tastatur oder eine Werteliste eingeben kann, oder Ankreuzfelder bzw. Auswahlknöpfe, die der Benutzer mit der Maus beeinflußt. Alle Ein- und Ausgabefelder haben einen Namen, der sie mit einem Dynprofeld verknüpft. Der Datentyp des Dynprofelds bestimmt das Eingabeformat. In ein Eingabefeld von numerischen Typ können beispielsweise keine Buchstaben eingegeben werden. Eine Fehleingabe wird vom Dynpro automatisch erkannt. Ankreuzfelder und Auswahlknöpfe haben immer den Datentyp char der Länge 1. Ein markiertes Ankreuzfeld oder ein markierter Auswahlknopf füllen das zugehörige Dynprofeld mit dem Wert X, ansonsten mit space.

Im zugehörigen ABAP-Programm müssen gleichnamige Datenobjekte existieren, die genau zu den Dynprofeldern passen sollten, um Datenverluste zu vermeiden (siehe auch Anbindung von ABAP-Strings an Dynprofelder). Die zu den Dynpro-Datentypen passenden ABAP-Datentypen können der Tabelle unter Datentypen im ABAP Dictionary entnommen werden. Die ABAP-Felder für Ankreuzfelder und Auswahlknöpfe müssen vom Typ c der Länge eins sein.

Nach Verarbeitung des Zeitpunkts PBO werden die Dynprofelder mit den Werten der ABAP-Felder versorgt und vor oder auch während dem Zeitpunkt PAI werden die Werte der Dynprofelder in die ABAP-Felder geschrieben. Bei Auswahlknöpfen ist hierbei zu beachten, dass nur ein Auswahlknopf einer Gruppe markiert sein kann. Falls mehr als ein zugehöriges Feld mit X gefüllt ist, wird die Programmausführung abgebrochen.

Damit Dynprofelder und ABAP-Felder immer zueinander passen wird folgende Vorgehensweise empfohlen:

Programmlokale Felder

Für Ein- und Ausgabefelder, die nur in einem einzigen Programm benötigt werden, empfiehlt es sich die entsprechenden Felder außer bei Ankreuzfeldern und Radioknöpfen erst im ABAP-Programm zu deklarieren, dann das ABAP-Programm zu aktivieren und dann die Felder im Screen Painter aus dem ABAP-Programm in das Dynpro zu übernehmen. Danach sollten die Felder im ABAP-Programm aber nicht mehr geändert werden.

Dynprofelder mit Dictionary-Bezug

Für Ein- und Ausgabeschablonen, die programmübergreifend benötigt werden und bei denen man sämtliche zentral im ABAP Dictionary abgelegten Informationen, wie beschreibende Texte, Feldhilfe und Eingabehilfe nutzen möchte, empfiehlt es sich die entsprechenden Felder aus dem ABAP Dictionary zu übernehmen. Hierbei kann man sich auf flache Strukturen und Datenbanktabellen beziehen.

Im ABAP-Programm müssen die gleichnamigen Felder mit der TABLES-Anweisung als Schnittstellen-Arbeitsbereich deklariert werden. Die Deklaration eines gleichnamigen Felds mit einem TYPES-Bezug auf den Datentyp im Dictionary genügt hier nicht für die Datenübergabe zwischen Dynpro und ABAP-Programm.

Um Namenskonflikte zwischen Dynprofeldern, programminternen Arbeitsbereichen und Datenbanktabellen zu vermeiden, empfiehlt es sich eigene Strukturen für Dynpros im ABAP Dictionary anzulegen, die alle gewünschten Ein- und Ausgabefelder eines oder mehrerer Dynpros eines Programms oder eines Pakets enthalten. Die gleichnamigen mit TABLES deklarierten Arbeitsbereiche im ABAP-Programm spielen dann tatsächlich nur als Schnittstelle zu Dynpros eine Rolle. Die Werte sollen bei Bedarf den eigentlichen ABAP-Verarbeitungsfeldern zugewiesen werden und umgekehrt.

Der Bezug auf Datentypen aus dem Dictionary hat den Vorteil, dass bei nachträglichen Änderungen des Datentyps sowohl die Dynprofelder als auch auf die Felder im ABAP-Programm automatisch aktualisiert werden.

Beispiel

Programmlokale Felder.

PROGRAM demo_dynpro_input_output.

DATA: input  TYPE i,
      output TYPE i,
      radio1(1) TYPE c, radio2(1) TYPE c, radio3(1) TYPE c,
      box1(1) TYPE c, box2(1) TYPE c, box3(1) TYPE c, exit(1) TYPE c.

CALL SCREEN 100.

MODULE init_screen_100 output.
  CLEAR input.
  radio1 = 'X'.
  CLEAR: radio2, radio3.
ENDMODULE.

MODULE user_command_0100 input.
  output = input.
  box1 = radio1.
  box2 = radio2.
  box3 = radio3.
  IF exit NE space.
    LEAVE PROGRAM.
  ENDIF.
ENDMODULE.

Die statische Folge-Dynpro-Nummer von Dynpro 100 ist 100 und sein Layout ist:

Diese Grafik wird im zugehörigen Text erklärt

Der für die Dynprofelder relevante Teil der Elementliste ist wie folgt:

Name

Typ

defLg

Format

input

I/O

9

INT4

output

I/O

11

INT4

radio1

Radio

1

CHAR

box1

Check

1

CHAR

radio2

Radio

1

CHAR

box2

Check

1

CHAR

radio3

Radio

1

CHAR

box3

Check

1

CHAR

exit

Check

1

CHAR

 

OK

20

OK

Für die Bildschirmfelder von output, box1, box2 und box3 ist die Eingabemöglichkeit im Screen Painter ausgeschaltet.

Die Länge von input wurde so angepasst, dass der Benutzer eine neunstellige Integer-Zahl ohne Tausendertrennzeichen eingeben kann, während die Anzeige im Feld output standardmäßig mit maximal zwei Tausendertrennzeichen erfolgt. Wäre die Länge von input auf 11 belassen worden, können Laufzeitfehler auftreten, wenn der Benutzer keine Tausendertrennzeichen verwendet.

Die Bildschirmablauflogik ist:

PROCESS BEFORE output.
  
MODULE init_screen_100.

PROCESS AFTER input.
  
MODULE user_command_0100.

Die Benutzereingaben in den Eingabefeldern werden zum Zeitpunkt PAI, der hier durch ENTER ausgelöst werden kann, an das ABAP-Programm übergeben und im Dialogmodul USER_COMMAND_100 den Ausgabefeldern zugewiesen. Beim nächsten Erscheinen des Dynpros sind die Ausgabefelder entsprechend gefüllt. Die Eingabefelder werden im zum Zeitpunkt PBO im Dialogmodul init_screen_100 gesetzt. Falls der Benutzer das Dynprofeld exit mit X füllt, wird das Programm beendet.

Beispiel

Dynprofelder mit Dictionary-Bezug.

PROGRAM demo_dynpro_dictionary.

TABLES demo_conn.

DATA wa_spfli TYPE spfli.

CALL SCREEN 100.

MODULE init_screen_100 output.
  CLEAR demo_conn-mark.
  MOVE-CORRESPONDING wa_spfli TO demo_conn.
  CLEAR wa_spfli.
ENDMODULE.

MODULE user_command_0100 input.

  IF demo_conn-mark = 'X'.
    LEAVE PROGRAM.
  ENDIF.

  MOVE-CORRESPONDING demo_conn TO wa_spfli.

  SELECT  SINGLE
          cityfrom airpfrom cityto airpto fltime deptime arrtime
    INTO  CORRESPONDING FIELDS OF wa_spfli
    FROM  spfli
    WHERE carrid = wa_spfli-carrid AND connid = wa_spfli-connid.

ENDMODULE.

Die statische Folgedynpronummer von Dynpro 100 ist 100 und sein Layout ist nach Übernahme von Komponenten der Struktur DEMO_CONN aus dem ABAP Dictionary wie folgt:

Diese Grafik wird im zugehörigen Text erklärt

Die Struktur DEMO_CONN ist im ABAP Dictionary speziell für Dynpros des Flugdatenmodells angelegt worden. Neben den Komponenten der Datenbanktabelle SPFLI ist auch eine Komponente MARK vorhanden, in deren Domäne S_FLAG nur die Festwerte spaceund X festgelegt sind. Auf obigem Dynpro wurde der Text aus dem Dictionary für MARK durch 'Abbrechen' überschrieben, für alle anderen Felder wurden die Texte aus dem Dictionary übernommen. Bei einigen Feldern wurde im Screen Painter die Eingabebereitschaft ausgeschaltet.

Der Benutzer kann Werte für die Fluggesellschaft und die Flugnummer eingeben. Dabei stehen im automatisch die Feld- und Eingabehilfe sowie die Überprüfung gültiger Werte gegen Prüftabellen des Dictionaries zur Verfügung. Diese Prüfungen werden automatisch durchgeführt, bevor ein Dialogmodul im ABAP-Programm aufgerufen wird. Es können keine nicht in der Prüftabelle SCARR existierenden Fluggesellschaften, keine nicht in SPFLI zur Fluggesellschaft passenden Flugnummern und keine Werte für MARK außer space und X eingegeben werden. Diese Prüfungen müssen alle nicht im ABAP-Programm programmiert werden.

Die Bildschirmablauflogik ist:

PROCESS BEFORE output.
  
MODULE init_screen_100.

PROCESS AFTER input.
  
MODULE user_command_0100.

Im ABAP-Programm werden im Modul user_command_0100 weitere Werte zum bereits überprüften Schlüssel aus der Datenbanktabelle SPFLI eingelesen und zum Zeitpunkt init_screen_100 an das Dynpro geschickt. Als Schnittstelle dient der mit der TABLES-Anweisung deklarierte Arbeitsbereich demo_conn, während die eigentlichen Daten im Datenbereich wa_spfli bearbeitet werden. Falls der Benutzer das Feld 'Abbrechen' mit X füllt, wird das Programm beendet.

 

 

 

Ende des Inhaltsbereichs