Show TOC Anfang des Inhaltsbereichs

Dropdown-Boxen  Dokument im Navigationsbaum lokalisieren

Neben der Eingabehilfe, die in separaten Dialogfenstern erscheint, können für Ein-/ Ausgabefelder auf Dynpros so genannte Dropdown-Boxen definiert werden, die dem Benutzer einen fest vordefinierten Satz von Eingabewerten zur Auswahl stellen. Der Benutzer kann in ein solches Eingabefeld keinen Wert eintippen, sondern muss einen der angebotenen Werte übernehmen. Bei Auswahl eines Werts kann gleichzeitig das Ereignis PAI ausgelöst werden. Die Verknüpfung mit einer Dropdown-Box schließt die gleichzeitige Verwendung der Eingabehilfetaste aus.

Zur Zeit sind Listboxen die einzig möglichen Dropdown-Boxen. Eine Listbox stellt eine einspaltige Werteliste von Textfeldern mit einer maximalen Länge von 80 Zeichen dar. Intern ist jedes Textfeld mit einem Schlüssel von maximal 40 Zeichen verknüpft. Bei Auswahl einer Zeile wird der Inhalt des Textfelds in das Eingabefeld auf dem Bildschirm und der Inhalt des Schlüssels in das Dynprofeld gestellt. Der Inhalt und die Länge von Bildschirmfeld und Dynprofeld sind hier also in der Regel nicht identisch.

Um ein Ein-/Ausgabefeld mit einer Listbox zu verknüpfen, muss im Screen Painter dem Attribut Dropdown des Bildschirmelements den Wert L bzw. LISTBOX zugewiesen werden. Mit dem Attribut visLänge bestimmt man die Ausgabebreite der Listbox und des Felds. Einem solchen Ein-/Ausgabefeld kann ein Funktionscode zugeordnet werden. Dann führt die Auswahl eines Werts der Listbox sofort zum Ereignis PAI und der Funktionscode wird in die Felder sy-ucomm und das OK-Feld gestellt. Ohne Zuordnung eines Funktionscodes, muss PAI wie üblich durch Drucktasten oder Elemente des GUI-Status ausgelöst werden.

Wenn einem Ein-/Ausgabefeld eine Listbox zugeordnet ist, kann mit dem Attribut Werteliste des Bildschirmelements bestimmt werden, wie die Texte in der Werteliste der Listbox erstellt werden. Es gibt zwei Möglichkeiten:

·        Werteliste aus der Eingabehilfe (empfohlen)

Wenn im Attribut Werteliste nichts angegeben wird, übernimmt das Textfeld die erste Anzeigespalte der Eingabehilfe, die dem Bildschirmfeld zugeordnet ist. Diese Eingabehilfe sollte zweispaltig sein und kann im ABAP Dictionary, im Dynpro oder in POV-Dialogmodulen definiert sein. Der Schlüssel wird automatisch entsprechend gefüllt.

·        Werteliste aus PBO-Modulen (nicht empfohlen).

Wenn im Attribut Werteliste ein A angegeben wird, muss die Werteliste vorm Senden des Bildschirms, z.B. zum Zeitpunkt PBO, mit dem Funktionsbaustein VRM_SET_VALUES gefüllt werden. Dazu wird dem Import-Parameter VALUES des Funktionsbausteins eine interne Tabelle mit Bezug auf den Typ VRM_VALUES der Typgruppe VRM übergeben. Der Zeilentyp ist eine Struktur zweier Textfelder KEY und TEXT, mit einer Länge von 40 bzw. 80 Zeichen. In den Tabellenzeilen kann man die gewünschten Benutzereingaben in der Komponente KEY beliebig mit Texten in der Komponente TEXT kombinieren. Im Import-Parameter ID wird das zugehörige ein Ein-/Ausgabefeld angegeben.

Beispiele

Beispiel

Dropdown-Listbox mit Werteliste aus Eingabehilfe (empfohlen)

*&---------------------------------------------------------------*
*& Report DEMO_DROPDOWN_LIST_BOX                                 *
*&---------------------------------------------------------------*

REPORT demo_dropdown_list_box.

*&---------------------------------------------------------------*
*& Global Declarations                                           *
*&---------------------------------------------------------------*

* Screen Interfaces

TABLES sdyn_conn.
DATA   ok_code TYPE sy-ucomm.

* Global data

TYPES: BEGIN OF type_carrid,
         carrid type spfli-carrid,
         carrname type scarr-carrname,
       END OF type_carrid.

DATA itab_carrid TYPE STANDARD TABLE
     OF type_carrid WITH HEADER LINE.

*&---------------------------------------------------------------*
*& Processing Blocks called by the Runtime Environment           *
*&---------------------------------------------------------------*

* Event Block START-OF-SELECTION

START-OF-SELECTION.
  CALL SCREEN 100.

* Dialog Module PBO

MODULE status_0100 OUTPUT.
  SET PF-STATUS 'SCREEN_100'.
ENDMODULE.

* Dialog Modules PAI

MODULE cancel INPUT.
  LEAVE PROGRAM.
ENDMODULE.

*

MODULE user_command_0100 INPUT.
  CASE ok_code.
    WHEN 'SELECTED'.
      MESSAGE i888(sabapdocu) WITH sdyn_conn-carrid.
  ENDCASE.
ENDMODULE.

* Dialog Module POV

MODULE create_dropdown_box INPUT.
  SELECT carrid carrname
                FROM scarr
                INTO CORRESPONDING FIELDS OF TABLE itab_carrid.
  CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
       EXPORTING
            retfield        = 'CARRID'
            value_org       = 'S'
       TABLES
            value_tab       = itab_carrid
       EXCEPTIONS
            parameter_error = 1
            no_values_found = 2
            OTHERS          = 3.
  
IF sy-subrc <> 0.
    ...
  ENDIF.
ENDMODULE.

Die statische Folge-Dynpro-Nummer von Dynpro 100 ist 100. Das Bildschirmbild enthält als einziges Eingabefeld die Komponente SDYN_CONN-CARRID. Sein Attribut Dropdown ist L, die Ausgabelänge ist 20, das Attribut Werteliste ist leer und ihm ist der Funktionscode SELECTED zugeordnet. Die Funktionen BACK, EXIT und CANCEL sind im GUI-Status mit dem Funktionstyp E definiert.

Die Bildschirmablauflogik ist:

PROCESS BEFORE OUTPUT.

  MODULE status_0100.

PROCESS AFTER INPUT.

  MODULE cancel AT EXIT-COMMAND.
  MODULE user_command_0100.

PROCESS ON VALUE-REQUEST.

  FIELD sdyn_conn-carrid MODULE create_dropdown_box.

Der Benutzer kann in das Bildschirmfeld keine Werte eintippen. Bei Auswahl des Eingabefelds auf Dynpro 100 wird ihm eine Listbox angezeigt. Da das Attribut Werteliste leer ist, wird der Eingabehilfe-Mechanismus gestartet. In diesem Fall ist in der Bildschirmabluflogik ein Ereignisblock PROCESS ON VALUE-REQUESTangelegt, welcher alle übrigen Mechanismen übersteuert. Im entsprechenden Dialogmodul wird eine zweispaltige interne Tabelle gefüllt und über den Funktionsbaustein F4IF_INT_TABLE_VALUE_REQUEST an die Eingabehilfe übergeben. Das System stellt die zweite Spalte dieser Tabelle in die Listbox.

Bei Auswahl einer Zeile der Listbox durch den Benutzer wird PAI mit dem Funktionscode SELECTED ausgelöst und der Wert in der ersten Spalte der internen Tabelle wird in das Eingabefeld übernommen.

 

Beispiel

Dropdown-Listbox mit Werteliste aus PBO-Modul auf Dynpro 200 (nicht empfohlen)

REPORT demo_dynpro_dropdown_listbox.

TYPE-POOLS vrm.

DATA: name  TYPE vrm_id,
      list  TYPE vrm_values,
      value LIKE LINE OF list.

DATA: wa_spfli TYPE spfli,
      ok_code TYPE sy-ucomm,
      save_ok TYPE sy-ucomm.

TABLES demof4help.

name = 'DEMOF4HELP-CONNID'.

CALL SCREEN 100.

MODULE cancel INPUT.
  LEAVE PROGRAM.
ENDMODULE.

MODULE init_listbox OUTPUT.

  CLEAR demof4help-connid.

  SELECT  connid cityfrom cityto deptime
    FROM  spfli
    INTO  CORRESPONDING FIELDS OF wa_spfli
   WHERE  carrid = demof4help-carrier2.

    value-key  = wa_spfli-connid.

    WRITE wa_spfli-deptime TO value-text USING EDIT MASK '__:__:__'.

    CONCATENATE value-text
                wa_spfli-cityfrom
                wa_spfli-cityto
                INTO value-text SEPARATED BY space.
    APPEND value TO list.

  ENDSELECT.

  CALL FUNCTION 'VRM_SET_VALUES'
       EXPORTING
            id     = name
            values = list.

ENDMODULE.

MODULE user_command_100.
  save_ok = ok_code.
  CLEAR ok_code.
  IF save_ok = 'CARRIER' AND NOT demof4help-carrier2 IS INITIAL.
    LEAVE TO SCREEN 200.
  ELSE.
    SET SCREEN 100.
  ENDIF.
ENDMODULE.

MODULE user_command_200.
  save_ok = ok_code.
  CLEAR ok_code.
  IF save_ok = 'SELECTED'.
    MESSAGE i888(sabapdocu) WITH text-001 demof4help-carrier2
                                          demof4help-connid.
  
ENDIF.
ENDMODULE.

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

Diese Grafik wird im zugehörigen Text erklärt

Dem Eingabefeld ist die Komponente CARRIER2 der Struktur DEMOF4HELP aus dem ABAP Dictionary zugeordnet. Sein Attribut Dropdown ist L, die Ausgabelänge ist 15, das Attribut Werteliste ist leer und ihm ist der Funktionscode CARRIER zugeordnet. Der Funktionscode der Drucktaste ist CANCEL mit dem Funktionstyp E.

Die Bildschirmablauflogik ist:

PROCESS BEFORE OUTPUT.

PROCESS AFTER INPUT.

  MODULE cancel AT EXIT-COMMAND.
  
MODULE user_command_100.

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

Diese Grafik wird im zugehörigen Text erklärt

Dem Eingabefeld ist die Komponente CONNID der Struktur DEMOF4HELP aus dem ABAP Dictionary zugeordnet. Sein Attribut Dropdown ist L, die Ausgabelänge ist 30, das Attribut Werteliste ist A und ihm ist der Funktionscode SELECTED zugeordnet. Der Funktionscode der Drucktaste ist CANCEL mit dem Funktionstyp E.

Die Bildschirmablauflogik ist:

PROCESS BEFORE OUTPUT.
  
MODULE init_listbox.

PROCESS AFTER INPUT.
  MODULE cancel AT EXIT-COMMAND.
  
MODULE user_command_200.

Der Benutzer kann in die Bildschirmfelder keine Werte eintippen. Bei Auswahl des Eingabefelds auf Dynpro 100 wird ihm in der Listbox eine Werteliste angezeigt, die sich aus der Eingabehilfe des Felds DEMOF4HELP-CARRIER2 ergibt. Dies ist in diesem Fall die Suchhilfe H_SCARR, die der Prüftabelle SCARR im Dictionary zugeordnet ist. Die Werteliste enthält die Namen der Fluggesellschaften. Bei Auswahl eines Eintrags wird das Dynprofeld mit dem Kürzel der Fluggesellschaft versorgt und es wird das Ereignis PAI ausgelöst. Im Modul user_command_100wird das OK-Feld überprüft und das Dynpro 200 aufgerufen.

Zum Zeitpunkt PBO von Dynpro 200 wird eine interne Tabelle list mit Werten aus der Datenbanktabelle SPFLI gefüllt. Die Komponente key wird mit den Verbindungsnummern von Flügen versorgt, während in text entsprechende Informationen abgelegt werden. Die Tabelle list wird an den Funktionsbaustein VRM_SET_VALUES übergeben. Bei Auswahl des Eingabefelds auf Dynpro 200 wird in der Listbox die Spalte text der internen Tabelle angezeigt. Bei Auswahl eines Eintrags wird das Dynprofeld mit dem zugehörigen Eintrag der Spalte key versorgt und es wird das Ereignis PAI ausgelöst. Im Modul user_command_200 wird das OK-Feld überprüft und verarbeitet.

 

 

Ende des Inhaltsbereichs