Eingabehilfen in Dialogmodulen 

Mit Hilfe des Ereignisschlüsselworts PROCESS ON VALUE-REQUEST können Dialogmodule zum Zeitpunkt POV aufgerufen werden:

PROCESS ON VALUE-REQUEST.
...
  FIELD <f> MODULE <mod>.
...

Hinter PROCESS ON VALUE-REQUEST kann die MODULE-Anweisung nur in Verbindung mit der FIELD-Anweisung verwendet werden. Bei der Auswahl von F4 wird das Modul <mod> der FIELD-Anweisung aufgerufen, auf deren Feld <f> der Cursor steht. Falls mehrere FIELD-Anweisungen zum gleichen Feld <f> aufgeführt sind, wird nur die erste ausgeführt. Das Modul <mod> wird im ABAP-Programm wie ein normales PAI-Modul definiert. Im Modul steht aber der Inhalt des Dynprofelds <f> nicht zur Verfügung, da dieser zum Zeitpunkt PROCESS ON HELP-REQUEST nicht durch die FIELD-Anweisung transportiert wird. Im Modul könnten nun beispielsweise eigene Wertelisten programmiert werden. Diese Vorgehensweise ist aber nur dann empfohlen, wenn eine Verwendung von Suchhilfen absolut nicht möglich ist. Die Definition von Suchhilfen ist wesentlich einfacher, da Standardoperationen, wie das Beschaffen der bereits auf dem Dynpro befindlichen Eingaben nicht im Programm durchgeführt werden müssen und durch die Verwendung von Suchhilfen ein einheitliches Aussehen der F4-Hilfe gewährleistet werden kann. Auch ist es nicht notwendig, die Eingabehilfe jedem Dynpro erneut zuzuordnen.

Trotz der weitgehenden Flexibilisierung des F4-Ablaufs durch Suchhilfen (bzw. Suchhilfe-Exits) gibt es auf der anderen Seite aber immer wieder Fälle, in denen Teilfunktionen des Standard F4-Ablaufs direkt benutzt werden sollen. Hierfür kann man in den zum Zeitpunkt POV aufgerufenen Modulen Funktionsbausteine einsetzen, die sowohl Suchhilfen, als auch alle anderen Formen der Eingabehilfe unterstützen und für den Datentransport zwischen Dynpro und Eingabehilfe sorgen. Diese Funktionsbausteine haben das Präfix F4IF_. Wichtig sind:

Dynamischer Aufruf der Eingabehilfe des ABAP Dictionary. Dem Funktionsbaustein kann in den Import-Parametern TABNAME und FIELDNAME der Komponentenname einer Struktur oder Datenbanktabelle des ABAP Dictionary übergeben werden. Die für diese Komponente definierte Eingabehilfe des ABAP Dictionary wird gestartet. Dabei werden alle relevanten Felder des Dynpros ausgelesen. Die Auswahl des Benutzers wird bei Angabe der Import-Parameter DYNPPROG, DYNPNR und DYNPROFIELD entweder in die entsprechenden eingabebereiten Bildschirmfelder gestellt oder bei Angabe des Tabellen-Parameters RETURN_TAB in diesem zurückgeliefert.

Der Funktionsbaustein zeigt eine im ABAP-Programm erstellte Werteliste an. Die selbstprogrammierte Werteliste wird dem Funktionsbaustein im Tabellen-Parameter VALUE_TAB übergeben. Die Auswahl des Benutzers wird bei Angabe der Import-Parameter DYNPPROG, DYNPNR und DYNPROFIELD in die entsprechenden entweder eingabebereiten Bildschirmfelder gestellt oder bei Angabe des Tabellen-Parameters RETURN_TAB in diesem zurückgeliefert und.

Weiterhin gibt es auch noch die Funktionsbausteine DYNP_VALUES_READ und DYNP_VALUES_UPDATE, die Dynprofelder zum Zeitpunkt POV lesen und zurückstellen können. Weitergehende Informationen finden sich in den Dokumentationen der Funktionsbausteine.

Eingabehilfe in Dialogmodulen.

REPORT demo_dynpro_f4_help_module.

TYPES: BEGIN OF values,
         carrid TYPE spfli-carrid,
         connid TYPE spfli-connid,
       END OF values.

DATA: carrier(3) TYPE c,
      connection(4) TYPE c.

DATA: progname TYPE sy-repid,
      dynnum   TYPE sy-dynnr,
      dynpro_values TYPE TABLE OF dynpread,
      field_value LIKE LINE OF dynpro_values,
      values_tab TYPE TABLE OF values.

CALL SCREEN 100.

MODULE init OUTPUT.
  progname = sy-repid.
  dynnum   = sy-dynnr.
  CLEAR: field_value, dynpro_values.
  field_value-fieldname = 'CARRIER'.
  APPEND field_value TO dynpro_values.
ENDMODULE.

MODULE cancel INPUT.
  LEAVE PROGRAM.
ENDMODULE.

MODULE value_carrier INPUT.

  CALL FUNCTION 'F4IF_FIELD_VALUE_REQUEST'
       EXPORTING
            tabname     = 'DEMOF4HELP'
            fieldname   = 'CARRIER1'
            dynpprog    = progname
            dynpnr      = dynnum
            dynprofield = 'CARRIER'.

ENDMODULE.

MODULE value_connection INPUT.

  CALL FUNCTION 'DYNP_VALUES_READ'
       EXPORTING
            dyname             = progname
            dynumb             = dynnum
            translate_to_upper = 'X'
       TABLES
            dynpfields         = dynpro_values.

  READ TABLE dynpro_values INDEX 1 INTO field_value.

  SELECT  carrid connid
    FROM  spfli
    INTO  CORRESPONDING FIELDS OF TABLE values_tab
    WHERE carrid = field_value-fieldvalue.

  CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
       EXPORTING
            retfield    = 'CONNID'
            dynpprog    = progname
            dynpnr      = dynnum
            dynprofield = 'CONNECTION'
            value_org   = 'S'
       TABLES
            value_tab   = values_tab.

ENDMODULE.

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

Die Eingabefelder sind von den Programmfeldern CARRIER und CONNECTION übernommen worden. Der Funktionscode der Drucktaste ist CANCEL mit dem Funktionstyp E.

Die Bildschirmablauflogik ist:

PROCESS BEFORE OUTPUT.
  MODULE init.

PROCESS AFTER INPUT.
  MODULE cancel AT EXIT-COMMAND.

PROCESS ON VALUE-REQUEST.
  FIELD carrier MODULE value_carrier.
  FIELD connection MODULE value_connection.

Bei Auswahl der F4-Hilfe für die einzelnen Felder erhält der Benutzer folgende Eingabehilfen: