ABAP Tipp - Klassen und Dynpros
Wie verwendest du am Besten lokale Klassen und Dynpros miteinander? Und funktioniert das Ganze eigentlich sinnvoll?
Inhaltsverzeichnis
Wie funktionieren eigentlich Klassen und Dynpros genau miteinander? Und kann man diese eigentlich sinnvoll miteinander Verknüpfen? Wir zeigen dir heute eine Lösung wie es funktionieren kann.
Lokale Klasse
Die lokale Klasse prägen wir entsprechend unserer Anforderungen aus. Dabei berücksichtigen wir das PBO und PAI des Dynpros 2000 und legen noch ein öffentliches Attribut für die Dynprodaten an. In diesem Fall ist es wichtig, dass die Sichtbarkeit der Attribute auf dem Dynpro öffentlich ist, da sonst nicht darauf zugegriffen werden kann.
Hier die Beispielklasse, wie die Implementierung für unser Beispiel aussieht:
CLASS lcl_prog DEFINITION FINAL.
PUBLIC SECTION.
TYPES:
BEGIN OF ts_screen,
bukrs TYPE t001-bukrs,
text TYPE text50,
END OF ts_screen.
DATA:
ms_screen TYPE ts_screen.
METHODS:
start,
pbo_2000,
pai_2000.
PRIVATE SECTION.
ENDCLASS.
CLASS lcl_prog IMPLEMENTATION.
METHOD start.
ms_screen-bukrs = '0815'.
ms_screen-text = 'A random text'.
CALL SCREEN 2000.
ENDMETHOD.
METHOD pbo_2000.
SET PF-STATUS '2000'.
SET TITLEBAR '2000'.
ENDMETHOD.
METHOD pai_2000.
CASE sy-ucomm.
WHEN 'BACK' OR 'LEAVE' OR 'EXIT'.
LEAVE PROGRAM.
ENDCASE.
ENDMETHOD.
ENDCLASS.
Dynpro
Bei der Definition des Dynpros können wir dann direkt über die globale Instanz auf die Attribute zugreifen und darin Daten lesen und ablegen. Bei der Hinterlegung der Felder ist nur darauf zu achten, dass man nur öffentliche Attribute der Instanz verwenden kann.
Der Nachteil bei dieser Methode ist, dass die Feldeigenschaften nicht aus dem Kontext der Variable gezogen werden kann, so wie bei einer globalen Variable die über TABLES definiert wurde. Vorteil ist wiederrum die Entkopplung vom Hauptprogramm und den globalen Daten. Final wird man wahrscheinlich eher einen hybriden Ansatz wählen.
Anbindung
Die Anbindung der Klasse erfolgt über die klassischen Module für PBO und PAI, hier benötigst du aber nur den Aufruf der Methoden und kannst die restliche Logik in der Klasse implementieren, wie oben in der Beispielklasse.
MODULE pbo_2000 OUTPUT.
go_app->pbo_2000( ).
ENDMODULE.
MODULE pai_2000 INPUT.
go_app->pai_2000( ).
ENDMODULE.
Ergebnis
Nach dem Starten des Reports erhältst du das folgende Ergebnis. Die Felder wurden vor Aufruf des Dynpros befüllt und werden korrekt angezeigt bzw. können auch verändert werden. Die Anzeige des Menüs und die Verarbeitung des UCOMM funktionieren ebenfalls wie gewünscht.
Fazit
Das Arbeiten mit Dynpros ist auch in der Welt der Klassen kein Problem für dich. Du musst dir nur klar machen, zu welchem Zeitpunkt welche Methoden gerufen werden und wo deine Daten genutzt werden. Für eine Implementierung von komplexen Anwendungen empfiehlt sich ein hybrider Ansatz mit der Definition von globalen Strukturen über TABLES und der Übergabe der Daten an die Klasse.