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.

An dieser Stelle kann auch der Cursor auf ein Dynprofeld gesetzt werden. Siehe SAP-Hilfe: Set Cursor.

set cursor field 'LIPS-VBELN'.

Ansonsten würde der Cursor auf das erste eingabefähige Feld gesetzt werden.

Oft wird der Curso von Bedingungen abhängig auf verschiedene Felder gesetzt, die nach dem vorherigen PAI gefüllt sind. Dies müssen dann globale Variablen sein.

PAI (Process After Input) (SY-UCOMM)

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 steht der Wert des Funktionscodes. 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 <nummer>

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

call screen 2000.

Leave to screen 0

Mit dem Befehl "leave to screen 0" wird der vorher aufgerufene Dynpro aufgerufen und der aktuelle Screen wird verlassen und im Ablaufstack gelöscht.

leave to screen 0.

Leave to screen <nummer>

Mit dem Befehl "leave to screen <nummer>" wird der aktuelle Screen verlassen und wird im Ablaufstack gelöscht, und der Screen <nummer> wird aufgerufen.

leave to screen 2000.

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.

Funktionbutton und Funktionscode

  • Jeder Button erhält einen Funktionscode, der das Systemfeld SY-UCOMM mit dem Funktionscode füllt, wenn der Button gedrückt wird.


Die Standardbuttons haben meist die Funktionscodes

Beschreibung Funktionscode
Zurück BACK
Abbrechen CANCEL
Exit EXIT
Speichern SAVE

Im Programm wird ein Status angelegt. Hier mit dem Namen STANDARD.

Dialogpro1.JPG


Die 4 Standardbutton von oben wurden hier mit den entsprechenden Funktionscodes versehen.

Dialogpro2.JPG


Die Detailsicht zum Button "Speichern", bzw. "Sichern" / Funktionscode "SAVE".

Dialogpro3.JPG

Splitting Container

Controls

ALV-Control

Textedit-Control

HTML-Control

Web-Links