Show TOC

Dynamisches Arbeiten mit Parameter-MappingsLocate this document in the navigation structure

Unter dem Begriff Parameter-Mapping versteht man die Bindung eines Ereignis-Parameters an einen Parameter einer Aktionsbehandler-Methode.

Eine Reihe von UI-Elementen ist in der Lage, Ereignisse auszulösen. Jedes dieser Ereignisse verfügt über vorgegebene Parameter, beispielsweise besitzt jedes Ereignis den Parameter ID. Abhängig vom Typ des zugehörigen UI-Elements können jedoch auch andere Parameter zusätzlich vorhanden sein. Diese Ereignis-Parameter sind in der Entwicklungsumgebung jedoch nicht einzeln dargestellt, Sie finden eine vollständige Liste aller Ereignisse sowie die zugehörigen Parameter für jedes UI-Element unter Referenz: UI-Elemente.

In der Behandlermethode der zum Ereignis zugehörigen Aktion können Sie nun diesen Ereignis-Parameter verwenden in dem Sie für die Methode einen Parameter gleichen Namens anlegen. Das Mapping zwischen diesen beiden Parametern geschieht immer über Namensgleichheit (siehe Parameter-Mapping).

Tipp Jedes Ereignis verfügt über den Parameter ID, dem als Wert der Name des jeweiligen UI-Elementes zugewiesen wird. Wenn Sie in der Behandlermethode der zugehörigen Aktion einen Parameter mit Namen ID anlegen, so wird diesem automatisch der Wert der gleichnamigen Ereignis-Parameters übergeben.

Zu den durch das Metamodell vorgegebenen Parametern eines Ereignisses können weitere Parameter angelegt und genutzt werden. Dieser Vorgang lässt sich ausschließlich im Rahmen der dynamischen Programmierung realisieren.

Achtung Das Hinzufügen von zusätzlichen Ereignis-Parametern muss immer in der Methode WDOMODIFYVIEW implementiert werden.

Beispiel

In einer View befinden sich mehrere UI-Elemente vom Typ LinkToAction. Je nach dem, welchen Link der Benutzer anklickt, soll die nachfolgende Anzeige innerhalb der View gesteuert werden. Dafür soll,  je nach ausgewähltem Link, ein Attribut (z.B. mit Namen CLICKED_AT) des View-Contexts mit einem spezifischen Wert belegt werden. Diesen Wert soll die Behandlermethode der einzigen Aktion (z.B. mit Namen ON_CLICK) dieser View von dem jeweiligen Ereignis-Parameter übernehmen, welcher für jedes der UI-Elemente angelegt und dynamisch dem jeweiligen Ereignis hinzugefügt wurde.

Folgende Schritte sind für dieses Vorhaben nötig:

  • Das Anlegen des zusätzlichen Parameters,
  • das Setzen seines, vom UI-Element abhängigen, Wertes sowie
  • die Zuordnung des Parameters an das jeweilige Ereignis.

Im Folgenden ist die Realisierung dieser Schritte für das obige Beispiel dargestellt:

METHOD wddomodifyview.
DATA:
lt_parameters LIKE if_wd_event=>parameters,
parameter     LIKE LINE OF lt_parameters,
lr_link1      TYPE REF TO cl_wd_link_to_action,
lr_link2      TYPE REF TO cl_wd_link_to_action.

Zunächst werden für die Methode WDOMODIFYVIEW zwei Variablen deklariert: eine für die neu anzulegenden Ereignis-Parameter selbst sowie eine zweite für die lokale Tabelle zu deren Verwaltung. Außerdem wird für jedes betreffende UI-Element eine Variable von entsprechenden Typ benötigt.

CHECK first_time = abap_true.
lr_link1 ?= view->get_element( 'LINK1' ).
lr_link2 ?= view->get_element( 'LINK2' ).

Der Parameter view ist jeder Methode WDOMODIFYVIEW automatisch bekannt. Über das zugehörigen Interface IF_WD_VIEW und der ID (Link1/2) des jeweiligen UI-Elements werden die beiden lokalen Variablen zugeordnet.

parameter-name  = 'MYID'.
parameter-value = 1.
parameter-type  = 'g'.
INSERT parameter INTO TABLE lt_parameters.
lr_link2->map_on_action( lt_parameters ).

Anschließend wird der neue Parameter mit einem Namen, Wert und Typ versehen und der lokalen Tabelle hinzugefügt. Wenn Sie dem Ereignis dieses UI-Elements mehrere Parameter hinzufügen möchten, können Sie die letzten drei Schritte entsprechend wiederholen und die weiteren Parameter ebenfalls in die lokale Tabelle einfügen.

Mit dem Befehl lr_link1->map_on_action( lt_parameters ) wird die lokale Tabelle an das Ereignis geknüpft.

CLEAR lt_parameters[].
parameter-name  = 'MYID'.
parameter-value = 2.
parameter-type  = 'g'.
INSERT parameter INTO TABLE lt_parameters.
lr_link2->map_on_action( lt_parameters ).
ENDMETHOD.

Nach dem Zurücksetzen der lokalen Tabelle werden die Schritte für das zweite, bzw. alle weiteren Ereignisse wiederholt.

Als Ergebnis dieser Schrittfolge besitzen nun die Ereignisse der beiden UI-Elemente Link1 und Link2 jeweils einen Parameter mit Namen MYID, jedoch jeweils mit unterschiedlichem Wert. Der neue Parameter wird beim Auslösen des jeweiligen Ereignisses von der Laufzeit automatisch an die Aktionsbehandler-Methode übergeben und kann von dieser entsprechend ausgewertet werden.

Eine einfache Variante der Aktionsbehandler-Methode ONACTIONON_CLICK könnte folgendermaßen aussehen:

WDEVENT Importing CL_WD_CUSTOM_EVENT
MYID Importing STRING
METHOD onactionon_click.
wd_context->set_attribute( name = 'CLICKED_AT' value = myid ).
ENDMETHOD.

Der Wert des Ereignis-Parameters MYID wird dem Context-Attribut CLICKED_AT übergeben und kann nun zur weiteren Steuerung verwendet werden.