Individualmenüs per Codeblock einbinden / registrieren
Überblick
Mit der neuen Klasse TbeCbCustomMenuManager lassen sich Individualmenüs via Codeblock einbinden/registrieren.
Für die einfache Anwendung stehen ab dem basic-package 3.6.3 neue GMU-Funktionen zur Verfügung.
Folgende Objekte können als Container für das Individualmenüobjekt angesprochen werden:
BE-Haupttoolbar und deren Untermenüs
Untermenüs in Standardmasken
Toolbars in Standardmasken
Browser
Vorteile dieser Vorgehensweise:
eine zentrale Stelle zum Einbinden der Menüs
automatische Einbindung & Update von Menüs für Standard-Packages (im _PackageLoader)
zielgenaue Platzierung von Menüs - jetzt z.B. auch in Untermenüs wie z.B. Bearbeiten im Artikelstamm
Masken: bei der Einbindung in z.B. den Artikelstamm ist die Menü-Registrierung gleichzeitig für alle Masken-Kopien des Artikelstamms wirksam
Browser:
bei der Einbindung in z.B. den Lagerkartei Browser ist die Menü-Registrierung ohne "Browser kopieren" für alle User wirksam
es können mehrere Menüs eingebunden werden, bei Bedarf auch in Untermenüs von Standard-Menüstrukturen
Alle Beispiele und Veranschaulichungen in dieser Anleitung basieren auf der DMS-Toolbox (Dokumentenmanagementsystem)
Vorgehensweise
Ermitteln der benötigten Funktion
Haupttoolbar | Standardmasken-Untermenüs | Standardmasken-Toolbar | Browser | Registrierung aufheben / entfernen |
---|---|---|---|---|
|
|
|
|
|
Ermitteln der benötigten Parameter
Der erste Parameter gibt an, in welchem Bereich das Individualmenü eingebunden werden soll - bei einem Bereich ist der Parameter numerisch, bei mehreren übergibt man ein Array.
Zum Beispiel könnte ein Individualmenü in den Admin-Tools eingebunden werden, somit will man das evtl. im Hauptprogramm sowie in der Programmierung.
GMU_RegisterMenuInMenu(belmMain, ...) // Nur im Hauptprogramm einbinden
GMU_RegisterMenuInMenu({belmMain, belmProg}, ...) // Im Hauptprogramm sowie in der Programmierung einbinden
Für die meisten Parameter, wie Namen von Actions, Referenzobjekten oder Toolbars, braucht man den Codeschnipsel https://dontenwill.atlassian.net/l/cp/S3XDbiJS
Funktionsbeispiele
Funktion 1: GMU_RegisterMenuInMainToolbar() – Haupttoolbar
Hier befinden sich die Namen der Buttons sowie deren Untermenüpunkte der Haupttoolbar, z.B. im Artikelstamm (Achtung, lieber auch über's Event, ggfs. Bezeichner nicht aktuell im Confluence):
Beispiel 1: Einbindung in der Haupttoolbar nach dem Menüpunkt "Auswertung":
GMU_RegisterMenuInMainToolbar(belmMain, '-21', 'barib_Analysis'), // In Haupttoolbar zwischen Auswertung und Administration
Beispiel 2: Einbindung im Untermenü des Artikelstamms in der Haupttoolbar:
GMU_RegisterMenuInMainToolbar(belmMain, '-20', 'bari_Inventory', , false, true), // In Haupttoolbar-Untermenü des Artikelstamms
Funktion 2: GMU_RegisterMenuInMenu() – Menüs in Standardmasken
Hierfür benötigt man die ID der Maske (2) bzw. der Übergruppe einer Maske (1). Diese sieht man in der Maskenverwaltung mit aktivem Developer-Modus.
Beispiel: Einbindung in das "Bearbeiten" Menü VOR dem Menüpunkt "Serien-Nummern" (2) für alle Artikelstamm-Masken
GMU_RegisterMenuInMenu(belmMain, '-20', 'SerienNummern1', '1000', true), // "Bearbeiten" im Artikelstamm
Funktion 3: GMU_RegisterMenuInMaskToolbar() – Standardmasken-Toolbar
Hier benötigen wir wie für Funktion 2 (siehe oben) die ID der Maske(n).
Zusätzlich, falls eine Positionierung vor oder nach bestimmtem Button erwünscht, benötigt man als Referenzobjekt nun den Namen des Buttons zur Laufzeit, und nicht den Namen der Action – Hier gilt das selbe Vorgehen via Event "Vor Menüausführung" (siehe auch oben am Beispiel beim Ermitteln der Parameter).
Das Referenzobjekt wäre in unserem Fall der Button "bbtn_LockOrder". Die Toolbar, die wir zum Einbinden benötigen wäre "bb_Order".
Beispiel 1: Einbindung in der Toolbar der Kundenauftragsverwaltung zwischen der Auftragsnummer und dem (Ent-)Sperr-Button:
GMU_RegisterMenuInMaskToolbar(belmMain, '-20', 'bbtn_LockOrder', '10000', 'bb_Order', cmscYes, true, true), // Toolbar Kd. Aufträge Kopf
Beispiel 2: Einbindung in der Toolbar der Stücklistenverwaltung:
GMU_RegisteRMenuInMaskToolBar(belmMain, '-20', '', '46000', 'bb_Main', cmscYes, false, true), // Toolbar Stücklisten
Funktion 4: GMU_RegisterMenuInBrowser() – Browser
Für diese Funktion benötigt man die ID des Browsers sowie, falls gewünscht, der Name der Action, nach welcher das Menü eingefügt werden soll.
Beispiel 1: Einbindung im Kontextmenü der Lagerkartei:
GMU_RegisterMenuInBrowser(belmMain, '-20', 'Kommissionen1', 'StoreFi', true), // Im Browser "Lagerkartei" im Artikelstamm, vor Chargen/Serien-Nr
Beispiel 2: Einbindung des Individualmenüs "TEST" im Untermenü "Beleg-Archiv" im Kontextmenü der Lagerkartei, vor dem Menüpunkt "Eing.Lieferschein"
GMU_RegisterMenuInBrowser(belmMain, '2336', 'EingLieferschein1', 'StoreFi', true), // Im Browser "Lagerkartei" im Artikelstamm
Beispiel 3: Einbindung wie in Beispiel 2 & vor dem Menüpunkt "AKA-Quittung" (Werkzeugnis)
Die Menüs werden auch eingebunden, wenn das entsprechende Referenzobjekt nicht angezeigt wird (siehe folgender Screenshot, hier fehlt der "Eingangslieferschein", trotzdem sieht man den oberen Menüpunkt).
GMU_RegisterMenuInBrowser(belmMain, '2336', 'EingLieferschein1', 'StoreFi', true), // Im Browser "Lagerkartei" im Artikelstamm => Belegarchiv, vor Eingangslieferschein
GMU_RegisterMenuInBrowser(belmMain, '2336', 'Werkzeugnisse1', 'StoreFi', true), // Im Browser "Lagerkartei" im Artikelstamm => Belegarchiv, vor AKA-Quittung
Funktion 5: GMU_UnregisterIndiMenu() – Einbinden eines Individualmenüs rückgängig machen (Unregister)
Mit dieser Funktion kann man auf Wunsch des Kunden ein durch die Toolbox erstelltes Menü wieder entfernen.
Um dies auch zentral zu halten, sollten diese Funktionsaufrufe im "_CustomInit" der Toolbox hinterlegt werden.
Hierfür benötigt man lediglich die Masken- oder Browser-ID sowie die, des Individualmenüs.
Als ersten Parameter übergibt man den Bereich, aus dem das Menü entfernt wird:
"MENU" / "MAINTOOLBAR" / "MASKTOOLBAR" / "BROWSER"
Beispiele:
GMU_UnregisterIndiMenu(belmMain, 'MENU', '-20', '1000'), // Entfernt das Individualmenü DMS aus den Menüs im Artikelstamm-Masken
GMU_UnregisterIndiMenu(belmMain, 'MAINTOOLBAR', '-21'), // Entfernt das Individualmenü des globalen DMS aus der Haupttoolbar
GMU_UnregisterIndiMenu(belmMain, 'MASKTOOLBAR', '-20', '11000'), // Entfernt das Individualmenü DMS aus der Toolbar der Kundenaufträge
GMU_UnregisterIndiMenu(belmMain, 'BROWSER', '-20', 'StoreFi'), // Entfernt das Individualmenü DMS aus dem Browser der Lagerkartei
Beispiel für die Anwendung im _PackageLoader
Für Standard-Toolboxen
In der Toolbox-Entwicklung sollten die neuen GMU-Funktionen im Package-Loader gepflegt werden, damit Menüs mit der Installation automatisch registriert werden und updatefähig sind.
Beispiel für einen _PackageLoader
Call('...'),
// Menü-Registrierungen - NACH den Standard-Globals, VOR den Custom-Globals
GMU_RegisterMenuInMenu(...),
GMU_RegisterMenuInMainToolbar(...),
... etc.
CallIfExists('...\InitVars'), // im Customizing können Menüs kunden-individuell de-registriert werden
Kunden-Individuelle Menüs
Individualmenüs von Customizings sollten im Event Global\Kunden\_PackageLoader
zentral eingepflegt werden.
Beispiel für Global\Kunden\PackageLoader
Call('...'),
...
// Menü Registrierungen
GMU_RegisterMenuInMenu(...),
GMU_RegisterMenuInMainToolbar(...),
... etc.