Eingabeüberprüfungen in der Ablauflogik 

Um bei der PAI-Verarbeitung, die Werte von Dynprofeldern in der Dynproablauflogik zu überprüfen kann man zwei spezielle Varianten der FIELD-Anweisung verwenden. Diese Art der Eingabeüberprüfung wird noch aus Kompatibilitätsgründen unterstützt und sollte nicht mehr verwendet werden.

Überprüfung gegen Werteliste

Ein Dynprofeld läßt sich wie folgt mit einer Werteliste vergleichen:

FIELD <f> VALUES (<v1>, <v 2>,...).

Die einzelnen Einträge <vi> der Liste können folgendes Format haben:

Es kann gegen einzelne Vergleichsfelder <val> oder Intervalle zwischen <val1> und <val2> geprüft werden. Die Vergleichsfelder müssen den Datentyp CHAR oder NUMC haben, müssen in Hochkommata eingeschlossen werden und müssen in Großschreibung angegeben werden. Falls die Überprüfung einen ungültigen Wert ergibt, wird eine Fehlernachricht gesendet und das entsprechende Eingabefeld wieder eingabebereit gemacht.

Die Eingabehilfe für <f> kann ebenfalls die Werteliste hinter FIELD verwenden und unterstützt den Benutzer dadurch bei der richtigen Eingabe.

Die Funktionalität der FIELD-Anweisung zur Steuerung des Datentransports gilt auch mit dem Zusatz VALUES.

Überprüfung gegen Datenbanktabellen

Ein Dynprofeld läßt sich wie folgt mit einer Datenbanktabelle vergleichen:

FIELD <f> SELECT   *
            FROM  <dbtab>
            WHERE <k1> = <f 1> AND <k 2> = <f 2> AND...
            [INTO  <g>]
            WHENEVER [NOT] FOUND SEND ERRORMESSAGE|WARNING
                                      [<num> [WITH <h1>... <h 4>]].

Die FIELD-Anweisung wird mit einer SELECT-Anweisung kombiniert. Die Syntax dieser SELECT-Anweisung muß genauso eingegeben werden, wie hier gezeigt. Insbesondere sind in der WHERE-Bedingung nicht die Vergleichsoperatoren EQ erlaubt. In der WHERE-Bedingung werden die Felder des Primärschlüssels <ki> der Einträge in der Datenbanktabelle <dbtab> mit Dynprofeldern <f i> verglichen. Falls ein Eintrag gefunden wird, kann er in ein Dynprofeld <g> geschrieben werden, muß aber nicht. Je nach Ergebnis der Abfrage kann eine Fehlernachricht oder eine Warnung gesendet werden, die das Eingabefeld zu <f> wieder eingabebereit macht.

Mit <num> kann eine Nachrichtennummer angegeben werden, deren hier nur zweistellige Nachrichtenklasse im Zusatz MESSAGE-ID der programmeinleitenden Anweisung des ABAP-Programms angegeben sein muß. Ohne Angabe einer Nachrichtenklasse wird eine Standardnachricht gesendet. Mit WITH kann der Inhalt von Literalen oder Dynprofeldern an eventuelle Platzhalter (&) der Nachricht übergeben werden.

Die Eingabehilfe für <f> kann ebenfalls die SELECT-Anweisung hinter FIELD verwenden und unterstützt den Benutzer dadurch bei der richtigen Eingabe.

Die Anweisung SELECT kann auch in der Dynproablauflogik stehen ohne mit FIELD kombiniert zu sein. Dies erlaubt es, Dynprofelder ohne den Aufruf von ABAP-Modulen mit Inhalten aus Datenbanktabellen zu füllen. Die Funktionalität der FIELD-Anweisung zur Steuerung des Datentransports gilt auch in Kombination mit SELECT.

Eingabeüberprüfungen in der Ablauflogik.

PROGRAM demo_dynpro_value_select MESSAGE-ID dw.

DATA: ok_code TYPE sy-ucomm,
      carrier TYPE spfli-carrid,
      connect TYPE spfli-connid.

CALL SCREEN 100.

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

MODULE cancel INPUT.
  LEAVE PROGRAM.
ENDMODULE.

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

MODULE module_2 INPUT.
  MESSAGE i888(sabapdocu) WITH text-001 carrier
                        text-002 connect.
ENDMODULE.

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

Den Eingabefeldern sind die aus dem Programm übernommenen Felder CARRIER und CONNECT 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 zugeordnet.

Die Bildschirmablauflogik ist:

PROCESS BEFORE OUTPUT.
  MODULE init_screen_0100.

PROCESS AFTER INPUT.
  MODULE cancel AT EXIT-COMMAND.
  FIELD carrier VALUES (NOT 'AA', 'LH', BETWEEN 'QF' AND 'UA').
  MODULE module_1.
  FIELD connect SELECT  *
                  FROM  spfli
                  WHERE carrid = carrier AND connid = connect
                  WHENEVER NOT FOUND SEND ERRORMESSAGE 107
                                          WITH carrier connect.
  MODULE module_2.

Der Benutzer muß erst einen zur Werteliste hinter VALUES passenden Wert für CARRIER eingeben, bevor das Modul MODULE_1 aufgerufen wird. Beim Aufruf von MODULE_1 ist CONNECT noch nicht transportiert.

Dann kann der Benutzer nur einen Wert für CONNECT eingeben, der zusammen mit CARRIER als Primärschlüssel in der Datenbanktabelle SPFLI vorhanden ist. Falls nicht erscheint Nachricht 107 aus der Nachrichtenklasse AT als Fehlermeldung in der Statusleiste:

E: Keine Einträge zum Schlüssel & & gefunden.

Erst bei Eingabe eines richtigen Wertes wird CONNECT transportiert und Modul MODULE_2 aufgerufen.