Eingabeüberprüfungen in Dialogmodulen 

Um Eingabeprüfungen in PAI-Modulen zu programmieren, müssen die Inhalt der Eingabefelder erst an das ABAP-Programm transportiert worden sein. Dort kann er mit logischen Ausdrücken überprüft werden. Dann soll es dem Benutzer ermöglicht werden eventuelle fehlerhafte Eingaben auf dem Bildschirm zu korrigieren, bevor weitere Module aufgerufen werden.

Dies wird durch das Senden von man Nachrichten des Typs W (Warnung) oder E (Fehler) in PAI-Modulen ermöglicht, die mit den Anweisungen FIELD und CHAIN kombiniert sind.

Einzelfelder überprüfen

Wenn eine Warnung oder eine Fehlernachricht in einem Modul <mod> gesendet wird, dessen Aufruf mit einer FIELD-Anweisung kombiniert ist:

FIELD <f> MODULE <mod>.

wird das betreffende Eingabefeld auf dem aktuellen Dynpro als einziges wieder eingabebereit gemacht und der Benutzer kann die Eingabe wiederholen. Falls das Feld nur einmal überprüft wird, setzt die PAI-Verarbeitung nach den automatischen Überprüfungen wieder direkt bei der FIELD-Anweisung auf und die vorhergehenden Module werden nicht noch einmal aufgerufen.

Mehrere Felder überprüfen

Wenn eine Warnung oder eine Fehlernachricht in einem Modul <modi> gesendet wird, dessen Aufruf innerhalb einer Verarbeitungskette steht:

CHAIN.
  FIELD: <f1>, <f 2>,...
  MODULE <mod1>.
  FIELD: <g1>, <g 2>,...
  MODULE <mod2>.
...
ENDCHAIN.

werden auf dem aktuellen Dynpro die Eingabefelder aller Dynprofelder der Verarbeitungskette wieder eingabebereit gemacht, also auch solcher, die in FIELD-Anweisungen hinter der MODULE-Anweisung stehen. Alle anderen Felder sind nicht eingabebereit. Auch wenn eine MODULE-Anweisung innerhalb einer Verarbeitungskette mit einer FIELD kombiniert ist, werden alle Eingabefelder der Kette eingabebereit gemacht und nicht nur das betreffende Feld. Der Benutzer kann dann die Eingabe wiederholen. Falls die Feld der Verarbeitungskette nur einmal überprüft werden, setzt die PAI-Verarbeitung nach den automatischen Überprüfungen wieder direkt bei der CHAIN-Anweisung auf und die vorhergehenden Module werden nicht noch einmal aufgerufen.

Steuerung von Eingabebereitschaft und Datentransport

Eine FIELD-Anweisung außerhalb einer Verarbeitungskette steuert bei Warnungen und Fehlernachrichten die Eingabebereitschaft eines Einzelfelds während FIELD-Anweisungen zwischen CHAIN-ENDCHAIN die Eingabebereitschaft mehrerer Felder steuern. Alle mit FIELD verknüpften Felder werden dabei zurück an das Bildschirmbild transportiert, ohne daß die PBO-Verarbeitung durchgeführt wird. Änderungen der Feldinhalte vor einer Nachricht werden somit auf dem Bildschirm angezeigt. Dies gilt auch für das Senden von Informationsnachrichten, wobei aber kein Feld eingabebereit gemacht wird.

Felder mehrmals überprüfen

Manchmal ist es notwendig dasselbe Feld in mehreren FIELD- oder CHAIN-Anweisungen anzugeben. Wenn ein zugehöriges Modul eine Warnung oder Fehlernachricht sendet, wird nach der erneuten Eingabe durch den Benutzer die PAI-Verarbeitung mit dem korrigierten Wert wiederaufgenommen. Hier kann jedoch nicht einfach auf der zugehörigen FIELD-Anweisung oder CHAIN-Anweisung wieder aufgesetzt werden, wenn das Feld, bei dem der Fehler aufgetreten ist, auch in einer früheren FIELD- oder CHAIN-Anweisung angegeben ist.

Statt dessen müssen alle FIELD- und CHAIN-Anweisungen wiederholt werden, in denen ein Feld angegeben ist, für das ein Fehler festgestellt wurde. Die PAI-Verarbeitung nimmt die Verarbeitung bei der ersten FIELD- oder CHAIN-Anweisung wieder auf, die irgendeines oder mehrere der Felder enthält, die in der FIELD- oder CHAIN-Anweisung auftreten, bei welcher der Fehler aufgetreten ist, und die vom Benutzer bei der letzten Anzeige des Bildschirmbilds geändert wurden.

Beispiel:

PROCESS AFTER INPUT.

  FIELD f1 MODULE m1.
  FIELD f2 MODULE m2.

  CHAIN.
    FIELD: f1, f2, f3.
    FIELD: f4, f5, f1.
    MODULE m3.
    MODULE m4.
  ENDCHAIN.

  CHAIN.
    FIELD: f6.
    MODULE m5.
  ENDCHAIN.

  CHAIN.
    FIELD f4.
    MODULE m6.
  ENDCHAIN.

Falls im Modul M6 eine Warnung oder eine Fehlernachricht gesendet wird, beginnt die PAI-Verarbeitung nach Wiederanzeige des Bildschirmbilds mit der Verarbeitung der ersten CHAIN-Anweisung und dem Aufruf von Modul M3, da das Feld F4 dort zum erstenmal aufgeführt wird.

Übrige Funktionen der FIELD-Anweisung

Sämtliche Funktionen der Anweisungen FIELD und CHAIN zur Steuerung des Datentransports und für bedingte Modulaufrufe sind auch in Kombination mit Warnungs- und Fehlernachrichten vorhanden. Der Datentransport eines Felds erfolgt bei der betreffenden FIELD-Anweisung. Eine Warnung oder Fehlernachricht in einem bedingten Modul einer Verarbeitungskette macht alle Felder der Kette eingabebereit, wobei noch nicht alle Felder transportiert sein müssen.

Wenn Warnungen oder Fehlernachrichten in Modulen gesendet werden, die nicht über FIELD oder CHAIN mit Feldern verknüpft sind, ist kein Feld auf dem Bildschirm eingabebereit. Der Benutzer kann dann nur noch Abbrechen, vorausgesetzt, daß ein entsprechender unbedingter Modulaufruf vorgesehen ist.

Eingabeüberprüfungen in Dialogmodulen.

PROGRAM demo_dynpro_field_chain.

DATA: ok_code TYPE sy-ucomm,
      input1 TYPE i, input2 TYPE i, input3 TYPE i,
      input4 TYPE i, input5 TYPE i, input6 TYPE i,
      sum TYPE i.

CALL SCREEN 100.

MODULE init_screen_100 OUTPUT.
  CLEAR: input1, input2, input3, input4, input5, input6.
  SET PF-STATUS 'STATUS_100'.
ENDMODULE.

MODULE cancel INPUT.
  LEAVE PROGRAM.
ENDMODULE.

MODULE module_1 INPUT.
  IF input1 < 50.
    MESSAGE e888(sabapdocu) WITH text-001 '50' text-002.
  ENDIF.
ENDMODULE.

MODULE module_2 INPUT.
  IF input2 < 100.
    MESSAGE e888(sabapdocu) WITH text-001 '100' text-002.
  ENDIF.
ENDMODULE.

MODULE module_3 INPUT.
  IF input3 < 150.
    MESSAGE e888(sabapdocu) WITH text-001 '150' text-002.
  ENDIF.
ENDMODULE.

MODULE chain_module_1 INPUT.
  IF input4 < 10.
    MESSAGE e888(sabapdocu) WITH text-003 '10' text-002.
  ENDIF.
ENDMODULE.

MODULE chain_module_2 INPUT.
  CLEAR sum.
  sum = sum + : input4, input5, input6.
  IF sum <= 100.
    MESSAGE e888(sabapdocu) WITH text-004 '100' text-002.
  ENDIF.
ENDMODULE.

MODULE execution INPUT.
  MESSAGE i888(sabapdocu) WITH text-005.
ENDMODULE.

Die statische Folgedynpronummer von Dynpro 100 ist 100 und sein Layout ist wie folgt:

Den Eingabefeldern sind die Dynprofelder INPUT1 bis INPUT6 zugeordnet. Der Funktionscode der Drucktaste ist EXECUTE.

Im GUI-Status STATUS_100 ist das Symbol (F12) durch den Funktionscode CANCEL mit dem Funktionstyp E aktiviert. Weiterhin ist 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.
  FIELD input1 MODULE module_1.
  FIELD input2 MODULE module_2.
  FIELD input3 MODULE module_3.
  CHAIN.
    FIELD input4.
    MODULE chain_module_1.
    FIELD input5.
    FIELD input6 MODULE chain_module_2.
  ENDCHAIN.
  MODULE EXECUTION.

Das Programm demonstriert, wie Eingabefelder in Dialogmodulen überprüft werden können:

Die Felder INPUT1 bis INPUT3 werden unabhängig voneinander in den Modulen MODULE_1 bis MODULE_3 überprüft. Solange der Benutzer nicht einen entsprechenden Wert eingibt, wird das Bildschirmbild immer wieder mit dem entsprechenden Feld eingabebereiten Feld angezeigt.

Die Felder INPUT4 bis INPUT6 werden gemeinsam in der Verarbeitungskette überprüft. Wenn INPUT4 nicht der Bedingung in CHAIN_MODULE_1 entspricht, werden alle drei Felder wieder eingabebereit gemacht. Das gleiche geschieht, wenn die drei Felder nicht der Bedingung in CHAIN_MODULE_2 entsprechen.

Erst wenn alle sechs Felder den Bedingungen entsprechen, wird das Modul EXECUTION ausgeführt, in dem eine Informationsnachricht ausgegeben wird.