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:
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.
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.
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:
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.
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:
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.