Show TOC Anfang des Inhaltsbereichs

Subscreens  Dokument im Navigationsbaum lokalisieren

Die Subscreen-Technik erlaubt es, auf dem Bildschirmbild eines Dynpros zur Laufzeit andere Bildschirmbilder namens Subscreens einzublenden. Die hierfür vorgesehenen rechteckigen Bereiche auf dem Bildschirmbild des Haupt-Dynpros werden im Screen Painter auch mit Subscreens bezeichnet. Wir sprechen im Folgenden von Subscreen-Bereichen. Die eingeblendeten Bildschirmbilder, d.h. die eigentlichen Subscreens, gehören zu speziellen Subscreen-Dynpros. Beim Einblenden von Subscreens wird auch die Ablauflogik der Subscreen-Dynpros eingebunden. Das Einbinden von Subscreens in Dynpros ist vergleichbar mit dem Einbinden von Include-Programmen in ABAP.

Das Einblenden von Subscreens erlaubt es, Dynpros zur Laufzeit dynamisch zu ergänzen. Die im Rahmen des Erweiterungskonzepts vorgedachten Dynpro-Exits basieren beispielsweise auf Subscreens. Auch die Einbindung anderer, komplexer Bildschirmelemente wie z.B. TabStrips basieren auf Subscreens.

Zur Verwendung der Subscreen-Technik müssen:

...

       1.      Subscreen-Bereiche auf einem Bildschirmbild definiert werden.

       2.      Passende Subscreen-Dynpros definiert werden.

       3.      Die Subscreen-Dynpros dynamisch in die Subscreen-Bereiche eingebunden werden.

Diese Grafik wird im zugehörigen Text erklärt

Definition von Subscreen-Bereichen

Die Definition von Subscreen-Bereichen erfolgt mit dem Screen Painter im Layout des Bildschirmbilds, auf dem Subscreens eingebettet werden sollen. Jeder Subscreen-Bereich eines Dynpros hat einen eindeutigen Namen, eine Position, Länge und Höhe. Subscreen-Bereiche können sich nicht überlappen und keine anderen Bildschirmelemente überdecken. Für einen Subscreen-Bereich kann mit den Resizing-Attributen festgelegt werden, ob er Größenänderungen des Haupt-Bildschirms in vertikaler oder horizontaler Richtung unterstützt, wobei eine Mindestgröße festgelegt werden kann. Falls die Resizing-Attribute markiert sind, führt eine Größenänderungen des Haupt-Bildschirms zum Ereignis PAI.

Definition von Subscreen-Dynpros

Subscreen-Dynpros können im gleichen oder einem anderen ABAP-Programm angelegt werden. Zum Anlegen eines Subscreen-Dynpros gibt man den Dynpro-Typ Subscreen in den Dynpro-Attributen an. Als statisches Folge-Dynpro setzt man die Dynpro-Nummer des Subscreens selbst. Die Größe des Bildschirmbilds sollte so gewählt werden, dass sie in den gewünschten Subscreen-Bereich passt. Ansonsten wird ausgehend von der linken oberen Ecke nur ein Teil des Bildschirmbilds angezeigt.

Das Layout, die Elementliste und die Ablauflogik eines Subscreen-Dynpros werden wie bei einem normalen Dynpro erstellt. Insbesondere können Subscreen-Dynpros wiederum Subscreens einbinden. Es gelten aber folgende Einschränkungen:

·        Die Bildschirmelemente sollten so angeordnet werden, dass sie nicht abgeschnitten werden, wenn ein Subscreen-Bereich zu klein ist.

·        Wenn mehrere Subscreen-Dynpros in einem ABAP-Programm angelegt werden, sollte darauf geachtet werden, dass die einzelnen Bildschirmelemente über alle Subscreens eindeutige Namen haben. Wenn die Subscreen-Dynpros im gleichen Programm liegen, wie das Haupt-Dynpro, sollten auch andere Namen als dort verwendet werden. Ansonsten müssen die nach Benutzeraktionen transportierten Daten im ABAP-Programm auseinandergesteuert werden (siehe Beispiel).

·        Ein Subscreen-Dynpro hat kein eigenes OK-Feld. Die mit Benutzeraktionen auf Subscreens verknüpften Funktionscodes werden grundsätzlich in das OK-Feld des Haupt-Dynpros gestellt. Dies gilt insbesondere auch für Subscreen-Dynpros, die in anderen ABAP-Programmen definiert sind, als das Haupt-Dynpro.

·        Die Ablauflogik eines Subscreen-Dynpros darf keinen Modulaufruf mit AT EXIT-COMMAND enthalten. Die Behandlung von Funktionscodes vom Typ E kann nur im Haupt-Dynpro erfolgen.

·        Die Ablauflogik eines Subscreen-Dynpros darf keine Dialogmodule aufrufen, welche die ABAP-Anweisungen SET TITELBAR, SET PF-STATUS, SET SCREENoder LEAVE SCREEN bzw. LEAVE TO SCREEN enthalten. Ansonsten kommt es bei der Ausführung zu Laufzeitfehlern. Der GUI-Status des Haupt-Dynpros kann also nicht in Subscreen-Dynpros geändert werden.

Es können auch Selektionsbilder als Subscreens definiert werden.

 

Subscreens-Dynpros einbinden

Das Einbinden von Subscreen-Dynpros erfolgt mit der Anweisung CALL SUBSCREEN in der Ablauflogik des Haupt-Dynpros.

Um das Bildschirmbild eines Subscreen-Dynpros in den Subscreen-Bereich des Hauptdynpros einzubinden und um die PBO-Ablauflogik des Subscreen-Dynpros aufzurufen, schreibt man in der PBO-Ablauflogik des Haupt-Dynpros:

PROCESS BEFORE OUTPUT.
...
  CALL SUBSCREEN area INCLUDING prog dynp.
...

Diese Anweisung weist dem Subscreen-Bereich des Namens area das Subscreen-Dynpro mit der Nummer dynp zu. Mit  prog muss das ABAP-Programm angegeben werden, in dem das Subscreen-Dynpro definiert ist. Wird kein Subscreen-Dynpro mit der angegebenen Nummer gefunden, kommt es zum Laufzeitfehler. Die PBO-Ablauflogik des Subscreen-Dynpros wird ebenfalls an der angegebenen Stelle eingebunden. Diese kann PBO-Module des ABAP-Programms aufrufen, in dem das Subscreen-Dynpro definiert ist. Am Ende werden die globalen Felder aus diesem Programm an die gleichnamigen Felder des Subscreen-Dynpros transportiert. Die eingebundene PBO-Ablauflogik des Subscreen-Dynpros kann selber wieder untergeordnete Subscreen-Dynpros einbinden.

Der Namen area Subscreen-Bereich muss direkt ohne Hochkommata angegeben werden. Die Namen prog und dynp können als Literal oder als Variable angegeben werden, wobei gleichnamige Variablen im zugehörigen ABAP-Programm deklariert und vorher versorgt werden müssen. Die Dynpronummer dynp muss vierstellig angegeben werden. Wird einem Subscreen-Bereich kein Subscreen-Dynpro zugewiesen, bleibt der Bereich leer.

Um die PAI-Ablauflogik des Subscreen-Dynpros aufzurufen, schreibt man in der PAI-Ablauflogik des Haupt-Dynpros:

PROCESS AFTER INPUT.
...
  CALL SUBSCREEN area.
...

Diese Anweisung bindet die PAI-Ablauflogik des Subscreen-Dynpros, das zum Zeitpunkt PBO im Subscreen-Bereich area eingebunden wurde, an der angegebenen Stelle ein. Diese kann PAI-Module des ABAP-Programms aufrufen, in dem das Subscreen-Dynpro definiert ist. Der Datentransport zwischen gleichnamigen Feldern des Subscreen-Dynpros und diesem ABAP-Programm erfolgt im Moment des Aufrufs, bzw. verzögert durch FIELD-Anweisungen in der PAI-Ablauflogik des Subscreen-Dynpros.

Die Anweisung CALL SUBSCREEN darf nicht zwischen CHAIN und ENDCHAIN oder LOOP und ENDLOOP(siehe Table Controls) stehen. Während der Verarbeitung eines Subscreen-Dynpros enthält das Systemfeld sy-dynnr dessen Dynpronummer. Sein Inhalt wechselt also bei Ausführung der Anweisung CALL SUBSCREEN und bei der Rückkehr zur Verarbeitung des Haupt-Dynpros.

Beim Einbinden von Subscreen-Dynpros ist zu beachten, dass diese die Daten von Ein-/Ausgabefeldern prinzipiell von und zu dem ABAP-Programm transportieren, in dem sie definiert sind, während die Funktionscodes von Benutzeraktionen auf dem Dynpro immer in das OK-Feld des Haupt-Dynpros und gestellt und entsprechend in dessen ABAP-Programm transportiert werden. Die möglichen Funktionscodes verschiedener eingebundener Subscreen-Dynpros sollten deshalb unterscheidbar sein.

Wenn Subscreen-Dynpros aus Gründen der Kapselung in anderen ABAP-Programmen als das Haupt-Dynpro definiert werden, muss man vor Aufruf ihrer PBO-Ablauflogik und entsprechend nach Aufruf ihrer PAI-Ablauflogik dafür sorgen, dass die gewünschten globalen Daten ihrer ABAP-Programme in das Programm des aufrufenden Dynpros transportiert werden:

·        Beispielsweise kann man Subscreen-Dynpros in Funktionsgruppen definieren und deren globale Daten an in Funktionsbausteinen an deren Schnittstellenparameter zuweisen und umgekehrt. Die Funktionsbausteine müssen dann in geeigneten Dialogmodulen des Hauptprogramms aufgerufen werden, um die Daten zu transportieren.

·        Man kann auch die gewünschten globalen Daten des Hauptprogramms vor PBO eines Subscreen-Dynpros als Daten-Cluster ins ABAP-Memory exportieren (siehe: Speichermedien für Daten-Cluster) und in einem PBO-Modul des Subscreen-Dynpros wieder importieren und zu PAI umgekehrt.

Beispiel

Beispiel

Subscreens.

REPORT demo_dynpro_subscreens.

DATA: ok_code TYPE sy-ucomm,
      save_ok TYPE sy-ucomm.
DATA: number1(4) TYPE n VALUE '0110',
      number2(4) TYPE n VALUE '0130',
      field(10) TYPE c, field1(10) TYPE c, field2(10) TYPE c.

CALL SCREEN 100.
MODULE status_100 OUTPUT.
  SET PF-STATUS 'SCREEN_100'.
ENDMODULE.

MODULE fill_0110 OUTPUT.
  field = 'Eingabe 1'(001).
ENDMODULE.

MODULE fill_0120 OUTPUT.
  field = field1.
ENDMODULE.

MODULE fill_0130 OUTPUT.
  field = 'Eingabe 2'(002).
ENDMODULE.

MODULE fill_0140 OUTPUT.
  field = field2.
ENDMODULE.

MODULE cancel INPUT.
  LEAVE PROGRAM.
ENDMODULE.

MODULE save_ok INPUT.
  save_ok = ok_code.
  CLEAR ok_code.
ENDMODULE.

MODULE user_command_0110 INPUT.
  IF save_ok = 'OK1'.
    number1 = '0120'.
    field1 = field.
    CLEAR field.
  ENDIF.
ENDMODULE.

MODULE user_command_0130 INPUT.
  IF save_ok = 'OK2'.
    number2 = '0140'.
    field2 = field.
    CLEAR field.
  ENDIF.
ENDMODULE.

MODULE user_command_100 INPUT.
  CASE save_ok.
    WHEN 'SUB1'.
      number1 = '0110'.
    WHEN 'SUB2'.
      number1 = '0120'.
      CLEAR field1.
    WHEN 'SUB3'.
      number2 = '0130'.
    WHEN 'SUB4'.
      number2 = '0140'.
      CLEAR field2.
  ENDCASE.
ENDMODULE.

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

Diese Grafik wird im zugehörigen Text erklärt

Es sind vier Drucktasten mit den Funktionscodes SUB1 bis SUB4 und zwei gleichgroße Subscreen-Bereiche area1 und area2 angelegt.

Im gleichen ABAP-Programm sind vier Subscreen-Dynpros 110 bis 140 definiert, die von der Größe her genau in obige Bereiche passen. Ihr Layout ist:

Diese Grafik wird im zugehörigen Text erklärt

Die Ein-/Ausgabefelder aller vier Subscreen-Dynpros haben den Namen field. Die Funktionscodes der Drucktasten auf den Subscreen-Dynpros 110 und 130 sind OK1 und OK2.

Die Bildschirmablauflogik von Dynpro 100 ist:

PROCESS BEFORE OUTPUT.
  MODULE status_100.
  CALL SUBSCREEN: area1 INCLUDING sy-repid number1,
                  area2 INCLUDING sy-repid number2.

PROCESS AFTER INPUT.
  MODULE cancel AT EXIT-COMMAND.
  MODULE save_ok.
  CALL SUBSCREEN: area1,
                  area2.
  
MODULE user_command_100.

Die Bildschirmablauflogik der Subscreen-Dynpros 110 und 130 ist:

PROCESS BEFORE OUTPUT.
  MODULE fill_0110|0130.

PROCESS AFTER INPUT.
  MODULE user_command_0110|0130.

Die Bildschirmablauflogik der Subscreen-Dynpros 120 und 140 ist:

PROCESS BEFORE OUTPUT.
  MODULE fill_0120|0150.

PROCESS AFTER INPUT.

Bei Ausführung des Programms erhält der Benutzer einen Bildschirm, auf dem die Subscreens 110 und 130 eingeblendet sind. Er kann mit den Drucktasten des Haupt-Dynpros zwischen zwei Subscreen-Dynpros pro Subscreen-Bereich auswählen und durch die Drucktasten auf den Subscreen-Dynpros 110 und 130 Daten an die Subscreen-Dynpros 120 und 140 übergeben.

Da auf allen Subscreen-Dynpros der gleiche Feldname field verwendet wird, wird das gleichnamige ABAP-Feld mehrmals pro Zeitpunkt PBO und PAI des Haupt-Dynpros transportiert. Im ABAP-Programm müssen die Werte deshalb in den Hilfsfeldern field1 und field2 zwischengespeichert werden.

Der Funktionscode der Drucktasten der Subscreen-Dynpros ist unterschiedlich und es genügt die normale Behandlung in einem ABAP-Feld. Bei gleichnamigen Funktionscodes hätte auch hier eine Behandlung mit mehreren Hilfsfeldern durchgeführt werden müssen.

 

 

Ende des Inhaltsbereichs