Show TOC Anfang des Inhaltsbereichs

Bedingte Modulaufrufe  Dokument im Navigationsbaum lokalisieren

Einfache Modulaufrufe werden in der Reihenfolge abgearbeitet, in der sie in der Dynproablauflogik aufgeführt sind. Die Syntax der Dynprosprache erlaubt es aber auch, PAI-Modulaufrufe von Bedingungen abhängig zu machen. Hierzu wird die Anweisung FIELD mit der Anweisung MODULE kombiniert. Es können Bedingungen auf einzelne oder mehrere Dynprofelder gesetzt werden. Mit bedingten Aufrufen kann überflüssiger Laufzeitbedarf verhindert werden. Insbesondere bei Zugriffen auf Datenbanktabellen können bedingte Aufrufe die Performance verbessern.

Bedingungen für einzelne Dynprofelder

Um ein PAI-Modul nur dann aufzurufen, wenn ein Dynprofeld eine bestimmte Bedingung erfüllt, schreibt man:

FIELD f MODULE mod ON INPUT|REQUEST|*-INPUT.

Die Zusätze haben folgende Wirkung:

·        ON INPUT

Das Modul mod wird nur dann aufgerufen, wenn das Feld nicht leer ist. Alle Felder außer solchen vom Typ STRG und SSTR sind leer, wenn sie nur Leerzeichen enthalten. Felder vom Typ STRG und SSTR sind leer, wenn sie keine Zeichen enthalten.

·        ON REQUEST

Das Modul mod wird nur dann aufgerufen, wenn der Benutzer eine Eingabe in das Feld gemacht hat. Als Eingabe gilt auch, wenn der Benutzer eine bereits vorhandene Eingabe mit dem gleichen Wert überschreibt oder explizit den Initialwert eingibt.

Die Bedingung ON REQUEST wird generell durch jegliche Form der Werteingabe ausgelöst. Neben Benutzereingaben gibt es folgende Möglichkeiten der Werteingabe, die das Modul aufrufen:

         Werteingabe durch Element-Attribut PARAMETER-ID (SPA/GPA-Parameter).

         Werteingabe durch Element-Attribut HOLD DATA.

         Werteingabe durch Aufruf über CALL TRANSACTION...USING

         Werteingabe durch automatische Voreinstellungen für bestimmte globale Felder.

·        ON *-INPUT

Das Modul mod wird aufgerufen, wenn der Benutzer einen * als erstes Zeichen des Felds eingegeben hat und wenn das Feld das Attribut *-Eingabe im Screen Painter hat. Bei der Übergabe des Eingabefelds wird der * entfernt. Auf die Bedingung ON INPUT wirkt eine *-Eingabe wie ein initiales Feld.

Die Funktionalität der FIELD-Anweisung zur Steuerung des Datentransports wirkt auch in Kombination mit der MODULE-Anweisung.

Bedingungen für mehrere Dynprofelder

Um ein oder mehrere PAI-Module nur dann aufzurufen, wenn mehrere Dynprofelder eine bestimmte Bedingung erfüllen, müssen die Aufrufe in der Dynproablauflogik zu einer Verarbeitungskette zusammengefasst werden. Eine Verarbeitungskette definiert man durch die Anweisungen:

CHAIN.
 ...
ENDCHAIN.

Alle Anweisungen der Ablauflogik, die innerhalb CHAIN - ENDCHAIN stehen gehören zu einer Verarbeitungskette. Die Felder einzelner FIELD-Anweisungen einer Verarbeitungskette werden zusammengefasst und können in gemeinsamen Bedingung abgefragt werden:

CHAIN.
  FIELD: f1, f2,...
  MODULE mod1 ON CHAIN-INPUT|CHAIN-REQUEST.
  FIELD: g1, g2,...
  
MODULE mod2 ON CHAIN-INPUT|CHAIN-REQUEST.
 ...
ENDCHAIN.

Die Zusätze ON und ON CHAIN-REQUEST wirken wie die Zusätze ON INPUT und ON REQUEST für Einzelfelder, wobei hier ein Modul dann aufgerufen wird, wenn mindestens eines der zuvor in einer FIELD-Anweisung aufgeführten Felder der Vearbeitungskette die Bedingung erfüllt. mod1 wird also aufgerufen, wenn eines der Felder f1, f2,... die Bedingung erfüllt. mod2 wird aufgerufen, wenn eines der Felder f1, f2,... oder g1, g2,... die Bedingung erfüllt.

Innerhalb einer Verarbeitungskette kann eine einzelne FIELD-Anweisung wiederum mit einer MODULE-Anweisung kombiniert werden, um eine Bedingung auf ein einzelnes Feld der Kette zu setzen:

CHAIN.
  FIELD: f1, f2,...
  FIELD  f MODULE mod1 ON  INPUT|REQUEST|*-INPUT
                                |CHAIN-INPUT|CHAIN-REQUEST.
  
MODULE mod2 ON CHAIN-INPUT|CHAIN-REQUEST.
ENDCHAIN.

Modul mod1wird aufgerufen, wenn Dynprofeld f die angegebene Bedingung für Einzelfelder erfüllt. Modul mod2 wird aufgerufen, wenn eines der Dynprofelder f1, f2,... oder f die Bedingung erfüllt. Falls der Zusatz ON CHAIN-INPUT oder ON CHAIN-REQUEST zusammen mit FIELD f verwendet wird, bezieht sich die Bedingung ebenfalls auf die gesamte Kette und Modul mod1 wird wie Modul mod2 aufgerufen.

In Fällen, in denen Bedingungen auf verschiedene Kombinationen von Dynprofeldern gesetzt werden sollen, empfiehlt es sich, separate Verarbeitungsketten für separate Feldkombinationen zu programmieren und darin verschiedene Module aufzurufen.

Die Funktionalität der FIELD-Anweisung zur Steuerung des Datentransports wirkt auch in Verarbeitungsketten. Ein Dynprofeld wird auch innerhalb einer Verarbeitungskette erst bei Bearbeitung der FIELD-Anweisung transportiert. Die mit CHAIN - ENDCHAIN definierten Verarbeitungsketten haben für die enthaltenen FIELDS-Anweisungen noch eine weitere Bedeutung, die im Zusammenhang mit Gültigkeitsüberprüfungen beschrieben wird.

Modulaufruf nach Cursorselektion

Es ist möglich, ein Modul nur dann aufzurufen, wenn der Cursor auf einem Bildschirmelement steht. Hierzu schreibt man:

MODULE mod AT CURSOR-SELECTION.

Das Modul mod wird genau dann aufgerufen, wenn der Funktionscode der Benutzeraktion CS mit Funktionstyp S ist. Falls diese Anweisung verwendet wird, empfiehlt es sich den Funktionscode CS der Funktionstaste F2 und dadurch der Doppelklick-Funktionalität der Maus zuzuordnen.

Der Aufruf erfolgt an dem durch die Ablauflogik definierten Zeitpunkt. Die automatischen Eingabeprüfungen werden nicht übergangen. Der Datentransport der Dynprofelder erfolgt so, wie er durch die FIELD-Anweisungen festgelegt ist. Der Funktionscode ist leer und sy-ucomm und das OK-Feld werden nicht beeinflußt. Diese MODULE-Anweisung läßt sich auch mit der FIELD-Anweisung kombinieren:

FIELD f MODULE mod AT CURSOR-SELECTION.

oder für mehrere Felder:

CHAIN.
  
FIELD: f1, f2,...
  MODULE mod AT CURSOR-SELECTION.
ENDCHAIN.

Das Modul mod wird nur aufgerufen, wenn der Cursor auf einem Ein-/Ausgabefeld f bzw. einem Ein-/Ausgabefeld f1, f2,... der Verarbeitungskette positioniert ist. Andere Bildschirmelemente außer Ein-/Ausgabefelder sind hier nicht möglich.

Die Ausführungshierarchie verschiedener Kombinationen ist:

·        Falls eine mit FIELD kombinierte Anweisung MODULEAT CURSOR-SELECTION ausgeführt wird, wird eine nicht mit FIELD kombinierte Anweisung nicht ausgeführt.

·        Kommt eine mit FIELD kombinierte Anweisung mehrmals für das gleiche Dynprofeld f vor, wird nur die erste Anweisung ausgeführt.

·        Kommt eine nicht mit FIELD kombinierte Anweisung mehrmals vor, wird nur die letzte Anweisung ausgeführt.

Dabei ist es unerheblich, ob die Anweisungen innerhalb von CHAIN - ENDCHAIN stehen oder nicht.

Beispiel

Bedingte Modulaufrufe.

PROGRAM demo_dynpro_on_condition.

DATA: ok_code TYPE sy-ucomm,
      input1(20) TYPE c, input2(20) TYPE c, input3(20) TYPE c,
      fld(20) TYPE c.

CALL SCREEN 100.

MODULE init_screen_100 OUTPUT.
  SET PF-STATUS 'STATUS_100'.
ENDMODULE.

MODULE cancel INPUT.
  LEAVE PROGRAM.
ENDMODULE.

MODULE cursor INPUT.
  GET CURSOR FIELD fld.
  MESSAGE i888(sabapdocu) WITH text-001 fld.
ENDMODULE.

MODULE module_1 INPUT.
  MESSAGE i888(sabapdocu) WITH text-002.
ENDMODULE.

MODULE module_2 INPUT.
  MESSAGE i888(sabapdocu) WITH text-003.
ENDMODULE.

MODULE module_* INPUT.
  MESSAGE i888(sabapdocu) WITH text-004 input3.
ENDMODULE.

MODULE c1 INPUT.
  MESSAGE i888(sabapdocu) WITH text-005 '1'.
ENDMODULE.

MODULE c2 INPUT.
  MESSAGE i888(sabapdocu) WITH text-005 '2' text-006 '3'.
ENDMODULE.

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

Diese Grafik wird im zugehörigen Text erklärt

Den Eingabefeldern sind die Dynprofelder input1, input2 und input3 zugeordnet. Der Funktionscode der Drucktaste ist EXECUTE.

Im GUI-Status STATUS_100 ist das Symbol Diese Grafik wird im zugehörigen Text erklärt (F12) durch den Funktionscode CANCEL mit dem Funktionstyp E aktiviert. Weiterhin ist der Funktionstaste F2 der Funktionscode CS mit dem Funktionstyp S und der Funktionstaste F8 der Funktionscode EXECUTE ohne besonderen Funktionstyp zugeordnet.

Die Bildschirmablauflogik ist:

PROCESS BEFORE OUTPUT.
  
MODULE init_screen_100.

PROCESS AFTER INPUT.
  MODULE cancel AT EXIT-COMMAND.
  CHAIN.
    FIELD: input1, input2.
    MODULE module_1 ON CHAIN-INPUT.
    FIELD  input3 MODULE module_* ON *-INPUT.
    MODULE module_2 ON CHAIN-REQUEST.
  ENDCHAIN.
  FIELD input1 MODULE c1 AT CURSOR-SELECTION.
  CHAIN.
    FIELD: input2, input3.
    MODULE c2 AT CURSOR-SELECTION.
  ENDCHAIN.
  MODULE cursor AT CURSOR-SELECTION.

Das Programm demonstriert durch Informationsnachrichten, welche Module nach welchen Benutzeraktionen aufgerufen und welche Daten transportiert werden:

·         Wenn eines der Eingabefelder 1 oder 2 nicht initial ist, führt jede Benutzeraktion zum Aufruf von Modul module_1

·         Wenn eines der drei Eingabefelder geändert wurde, führt jede Benutzeraktion zum Aufruf von Modul module_2.

·         Wenn in Eingabefeld 3 eine *-Eingabe gemacht wird, führt jede Benutzeraktion zum Aufruf von Modul module_*.

·         Bei Auswahl der Funktion F2 oder Doppelklick auf ein Textfeld des Dynpros, wird Modul cursor aufgerufen.

·         Bei Auswahl der Funktion F2 oder Doppelklick auf Eingabefeld 1, wird Modul c1 aufgerufen.

·         Bei Auswahl der Funktion F2 oder Doppelklick auf Eingabefeld 2 oder 3 wird ebenfalls Modul cursor aufgerufen. Modul c2 wird nie aufgerufen, da die Anweisung MODULEAT CURSOR SELECTION zweimal auftaucht und nur die letzte prozessiert wird.

 

 

Ende des Inhaltsbereichs