Dialogprogrammierung

Aus SAP-Wiki
Wechseln zu: Navigation, Suche

Während beim Reporting eine klare Ereignisabfolge vom Selektionsbildschirm bis zur Ausgabe einer Liste erfolgt, ist die Dialogprogrammierung wesentlich flexibler in der Abfolge der Abfolge von Dynpros. Zu einer Dialoganwendung gehören oft eine Reihe von Dynpros, die sich gegenseitig aufrufen und die weitere Verarbeitungen anstossen.

Zentral bei der Dialogprogrammierung ist die Programmierung eines Dynpros. Zum Dynpro gehört die Definition der Felder auf dem Dynpro und die zugehörige Ablauflogik.

Ein Dialogprogramm wird in der Regel mit der Transaktion SE80 erstellt.

Ablauflogik

Es gibt in der Ablauflogik zu einem Dynpro 3 Ereignisse

  • PAI
  • PBO
  • process on value request

In der Ablauflogik gibt es zunächst lediglich einen sehr begrenzten Befehlsumfang. Es ist z. B. nicht möglich direkt unter dem Befehl "process before output" einen PERFORM einer Form-Routine zu schreiben.

Um in der Ablauflogik das Coding zu modularisieren wird mit dem Befehl MODULE ein Modul angelegt. Wobei dann innerhalb des Moduls der komplette ABAP-Befehlsumfang zur Verfügung steht.

Im Modul "modulename" könnte nun z. B. ein Performaufruf "formname" erfolgen. Der Modulname wird durch "module" begonnen. Es folgt der Modulname und es schließt mit "output" beim PBO, bzw. "input" beim PAI. Das Coding des Modules schließt mit "module."

process before output.
  module modulname.
module modulname output.
  ...  "vollständiger ABAP-Befehlsumfang, z. B. Perform
endmodule.

bzw.

process after input.
  module modulname.
module modulname input.
  ...
module.


PBO (Process Before Output)

Das Ereignis "Process Before Output" (PBO) wird ausgelöst, bevor der Dynpro aufgerufen wird, bzw. auf dem Bildschirm erscheint. Hier finden normalerweise mehrere Dinge statt

  • Zuweisung eines Status zum Dynpro
  • Zuweisung eines Titels zum Dynpro
  • Datenbefüllung der Felder vom Dynpro
process before output.
  module set_title.
  module set_status.
  module fill_data.

PAI (Process After Input)

Das Ereignis "Process After Input" (PAI genannt) wird ausgelöst bei Aktion vom Benutzer auf dem Bildschirm

  • Drücken einer Schaltfläche auf dem Dynpro
  • Drücken eines Symbolleisteneintrags
  • Auslösen einer Tastenkombination, die dem Dynpro bekannt ist (z. B. ENTER oder strg+s)
  • Auswählen eines Menüeintrages, der im Dynpro angelegt wurde

Damit in der Anwendungslogik bekannt ist welche Aktion den PAI ausgelöst hat, wird der sogenannte Funktionscode dem Code im PAI übergeben in der Systemvariablen SY-UCOMM. Jede entsprechende Aktion auf dem Dynpro muss in seinen Attributen einen eindeutigen Funktionscode haben.

Meist gibt es im PAI ein Coding

case sy-ucomm.
  when ...
  when ...
endcase.

POV (Process on value request)

Das Ereignis "Process on value request" wird an ein Feld vom Dynpro gebunden. Wenn die Wertehilfe (F4) bei einem Feld vom Dynpro aufgerufen wird, wird dieses Ereignis ausgelöst.

Datenübergabe an Dynpro

Die Übergabe der Daten an ein Dynpro erfolgt über namensgleiche Felder. Die Variablen müssen in der Ablauflogik dabei global definiert sein. Sie werden in der Ablauflogik mit dem Befehl TABLES definiert. Wenn man z. B. alle Felder der Tabelle VBAK im Dynpro im Zugriff haben möchte, wird im Programm mit dem Dynpro geschrieben

Tables: vbak.

Dynpronummern

  • Der Dynpro 1000 wird automatisch bei einem Report für den Selektionsbildschirm erzeugt. Selbst bei einem Dialogprogramm, wo es keinen Report gibt, der einen Dynpro 1000 anlegt, sollte die Dynpronummer 1000 nicht verwendet werden
  • Man kann für die Hauptdynpros eines Programs z. B. die Nummer 2000, 3000, etc. anlegen. Wenn ein Dialogprogramm Subscreens hat, die eindeutig einem Hauptdynpro zuzuordnen sind, dann könnte man 2100, 2200, etc. verwenden (wenn es Subscreens zum Dynpro 2000 sind).

Dynpro-/Screensteuerung

Innerhalb eines Programmes kann es eine Reihe von Dynpros geben. Zwischen den Dynpros lässt sich komfortabel navigieren.

Call screen XXXX

Mit dem Befehl "call screen 2000" wird ein Dynpro mit dem Namen 2000 aufgerufen. Der vorherige Screen bleibt im Ablaufstack erhalten. Zu diesem Screen kann nach Aufruf des Screens 2000 zurückgekehrt werden.

call screen 2000.

Leave to screen XXXX

Mit dem Befehl "leave to screen 2000" wird ein Dynpro mit dem Namen 2000 aufgerufen und der aktuelle Screen wird verlassen und wird im Ablaufstack gelöscht. Zu diesem Screen kann nach Aufruf des Screens 2000 nicht zurückgekehrt werden.

leave to screen 2000.

Leave to screen 0

Mit dem Befehl "leave to screen 0" wird der vorherige Dynpro des Ablaufstacks aufgerufen und der aktuelle Screen wird verlassen und wird im Ablaufstack gelöscht. Zu diesem Screen kann nach Aufruf des vorherigen Screens nicht zurückgekehrt werden.

leave to screen 0.

Leave screen

Mit dem Befehl "leave screen" wird der Dynpro aufgerufen, der im aktuellen Dynpro statisch eingetragen wurde. Das kann der vorherige Dynpro sein (Screen = 0), der gleiche Dynpro sein, z. B. (Screen = 2000) oder ein beliebiger anderer Dynpro des Programms, z. B. (Screen = 3000).

leave screen.

Loop at screen

  • Möchte man die Darstellung von Feldern auf einem Dynpro ändern, dann kann man beim Event PBO die Screenfelder ändern mit LOOP AT SCREEN.
  • Hier kann z. B. ein Feld ausgeblendet werden mit der SCREEN-INVISIBLE = '1'. Das gleiche Ergebnis würde man erreichen mit SCREEN-ACTIVE = '0'.
  • Die Screen-Möglichkeiten lassen über die Struktur SCREEN ersehen.
loop at screen.
 if screen-name = p_test.
   screen-invisible = '1'.  "Gibt das Feld auf dem Dynpro nicht aus
   modify screen.
 endif.
endloop.

Splitting Container

Controls

ALV-Control

Textedit-Control

HTML-Control

Web-Links