Dynamische Generierung von Kontextmenüs
Der Conigma Repository Browser erlaubt die dynamische Generierung von Teilen des Kontextmenüs mit Hilfe von ABAP Coding. Dies ist in folgenden Szenarien sinnvoll:
Die Erzeugung aller Kontextmenüeinträge über Customizing ist aufgrund der Anzahl nicht sinnvoll oder nicht möglich
Die Prüfung der Vorbedingung in Form von Expressions würde zu Performanceproblemen führen
Die Beschreibungen der Kontextmenüpunkte soll dynamisch generiert werden
Relevante Klassen und Interfaces
Die folgende Tabelle zeigt die in diesem Kontext relevanten Klassen und Interfaces:
Name | Typ | Beschreibung |
---|---|---|
/GAL/CCM_IF_GUI_ACTION_TRIGGER | Interface | Interface für ein GUI-Element, welches das Auslösen einer Aktion unterstützt. Dieses Interface muss nicht direkt implementiert werden, da es im Interface für Menüpunkte enthalten ist. |
/GAL/CCM_IF_GUI_MENU_ITEM | Interface | Alle von einem Menüpunkt-Provider als Menüpunkte zurück gelieferten Instanzen müssen dieses Interface implementieren. Es ermöglicht die Definition der Anzeigefunktionen für einen Kontextmenüpunkte sowie die Implementierung der durch den Menüpunkt auszulösenden Aktion. |
/GAL/CCM_IF_GUI_MENU_ITEM_PROV | Interface | Klassen, welche dieses Interface implementieren, können als Provider für Menüpunkte (oder Unterpunkte) genutzt werden. Handelt es sich um einen Provider auf oberster Ebene, so kann das Interface /GAL/CCM_IF_GUI_MENU_ITEM zusätzlich implementiert werden, andernfalls werden die Informationen aus der Definition der Objektaktion übernommen. Menüpunkte welche zugleich als Provider für Untermenüpunkte fungieren, müssen sowohl das Interface /GAL/CCM_IF_GUI_MENU_ITEM als auch das Interface /GAL/CCM_IF_GUI_MENU_ITEM_PROV implementieren. |
/GAL/CCM_GUI_MENU_ADAPTER | Klasse | Diese Klasse fungiert als Schnittstelle zwischen den klassischen Objektaktionen und den neuen dynamisch generierbaren Kontextmenüs. Sie übernimmt die Instanzerzeugung der Kontextmenü-Provider und die Abfrage der zu generierenden Kontextmenüpunkte. Aus diesen Informationen wird dann zu Laufzeit eine Tabelle mit temporären Objektaktionen erzeugt und in die Tabelle der klassischen Objektaktionen eingefügt. Wird eine dieser temporären Objektaktionen ausgewählt, so wird das Objekt ermittelt, welches den zugehörigen Menüpunkt repräsentiert und die dort implementierte Aktionsverarbeitung angestoßen. |
/GAL/CCM_GUI_MENU_BUILDER_IMP | Klasse | Menüpunkt-Provider für die schrittweise Ausführung eines Imports mit Systemfiltern. Diese Klasse kann als Beispiel für eigene Implementierungen von dynamischen Kontextmenüs verwendet werden. |
/GAL/CCM_GUI_MENU_ITEM_IMP | Klasse | Menüpunkt für die schrittweise Ausführung eines Imports mit Systemfiltern. Diese Klasse kann als Beispiel für eigene Implementierungen von dynamischen Kontextmenüs verwendet werden. |
/GAL/CCM_GUI_MENU_SEPARATOR | Klasse | Spezielle Implementierung des Interfaces /GAL/CCM_IF_GUI_MENU_ITEM, welche eine Trennlinie im Kontextmenü erzeugt. Diese Klasse kann bei Bedarf auch in eigenen Implementierungen von dynamischen Kontextmenüs verwendet werden. |
Implementierung eines Providers für ein dynamisches Kontextmenü
Im ersten Schritt muss eine neue Klasse angelegt werden, welche als Menüpunkt-Provider für das dynamische Kontextmenü dient. Diese Klasse muss das Interface /GAL/CCM_IF_GUI_MENU_ITEM_PROV sowie optional auch das Interface /GAL/CCM_IF_GUI_MENU_ITEM implementieren.
Das Interface /GAL/CCM_IF_GUI_MENU_ITEM_PROV enthält lediglich eine Methode mit dem Namen GET_MENU_ITEMS. Diese muss eine Liste von Objektinstanzen zurück liefern, welche das Interface /GAL/CCM_IF_GUI_MENU_ITEM implementieren und die einzelnen Menüpunkte repräsentieren. Untermenüs können realisiert werden, indem einzelne Menüpunkte wiederum das Interface /GAL/CCM_IF_GUI_MENU_ITEM_PROV implementieren.
Das Interface /GAL/CCM_IF_GUI_MENU_ITEM enthält folgende Methoden:
Name | Beschreibung |
---|---|
GET_ICON | Liefert ein Icon zurück, welches den Menüpunkt repräsentiert. Ist dies nicht gewünscht, so kann die Konstante ICON_SPACE aus der Typgruppe ICON zurück geliefert werden. Die SAP GUI unterstützt im Moment keine Anzeige von Icons in Kontextmenüs, werden die Aktionen jedoch in Form eines Buttons in einer Toolbar angezeigt (im Split-Screen Modus), so finden die Icons dort Verwendung. |
GET_STATUS | Diese Methode liefert Statusinformationen zu dem Menüpunkt: IS_ENABLED: Menüpunkt ist aktiv |
GET_TEXT | Diese Methode liefert den Text für den Menüpunkt zurück. |
TRIGGER_ACTION | Diese Methode enthält die Implementierung der eigentlichen Aktion, welche nach Auswahl des Menüpunkts ausgeführt werden soll. Auf Menüpunkten mit Untermenüs und Trennlinien können keine Aktionen ausgeführt werden. Das Coding zur Ausführung der Aktion muss unter Umständen prüfen, ob deren Ausführung noch sinnvoll/relevant ist, da zwischen dem Abruf der möglichen Aktionen und der eigentlichen Ausführung einer Aktion ein größerer Zeitraum liegen kann. Wie bei den klassischen Aktionen, können auch dynamische Aktionen eine Impact-Wert zurück liefern, welches den Umfang der in der Baumansicht zu aktualisierenden Repositoryobjekte angibt. Die entsprechende Definition geschieht durch Aufruf der statischen Methode SET_IMPACT in der Klasse /GAL/CCM_GUI_MENU_ADAPTER. Unterbleibt dieser Aufruf, so erfolgen keine expliziten Aktualisierungen in der Baumansicht der Repository Browsers. |
Anpassung des Customizings für die Verwendung von dynamischen Kontextmenüs
Als Platzhalter für ein dynamisches Kontextmenü muss im entsprechenden Objekttyp eine Objektaktion vom Typ "Provider für dynamischen Menüaufbau" gecustomized werden. Hierbei kann wie gewohnt eine Beschreibung und eine Vorbedingung hinterlegt werden. Der eigentliche Ausdruck enthält in diesem Fall jedoch nicht die im Falle der Auswahl auszuführende Aktion, sondern eine Expression, welche den gewünschten Menüpunkt-Provider zurück liefert. Diese könnte zum Beispiel folgendermaßen aussehen:
Alles Weitere wird automatisch beim Kontextmenüaufbau durch den Adapter für dynamische Kontextmenüs erledigt.