Command Palette in JMatrixPlatform: Navigation in Multi-Modul-Systemen optimieren
Multi-Modul-Systeme wie JMatrixPlatform leiden oft unter UI-Überladung: Hunderte von Befehlen, Buttons und Tabs machen die Navigation selbst für Admins zum Albtraum. Inspiriert von der Command Palette in VSCode haben wir eine universelle Lösung umgesetzt – eine einzige Suchleiste für alle benutzerzugänglichen Befehle. Das reduziert die Abhängigkeit von verschachtelten Menüs und beschleunigt den Zugriff auf Funktionen.
Das klassische Navigationsproblem
In Systemen mit Dutzenden Modulen wird das Dashboard mit Abkürzungen, Kategorien und Untermenüs überladen. Nutzer mit Zugriff auf 10+ Workflows verschwenden Zeit mit Suchen: Startseite -> Meine Aktionen -> Anforderungsmanagement -> Zuweisung. Schritt-für-Schritt-Anleitungen sind Pflicht: „Kategorie A ausklappen, zu B gehen, C anklicken“.
Admin-Aufgaben (Cache leeren, Synchronisation, Berichte) sind besonders knifflig – sie sind schwer einzuordnen und zu merken. Alle Lösungen münden in Gruppierungen, die Funktionen nur verstecken.
Inspiration von VSCode
Die Command Palette in VSCode ermöglicht tastaturbasierten Zugriff auf jede IDE-Funktion per Namenssuche. Sie eliminiert Diskussionen über UI-Platzierungen und erlaubt sofortige Ausführung.
In JMatrixPlatform ist die Architektur bereits vorbereitet: Jede UI-Aktion ist ein JCommand mit href, Label, Beschreibung und Zugriffsrechten. Befehle treiben Dashboard, Toolbars und Panels an.
Beispiel für Projects-Befehl:
@JModelPart
public final class ACDProjectsDesk extends JCommand {
public static ACDProjectsDesk COMMAND = new ACDProjectsDesk();
@Override
public JHref getHref(JContext ctx, JRequestParams requestParams) {
return new JHrefTable(
ATBProjectsDesk.TABLE,
JTarget.CONTENT,
Actions.TOOLBAR,
null,
AIQProjectsAll.INQUIRY,
JHrefTable.RowSelection.MULTI);
}
}
Lokalisierung in messages_en.properties:
en.demo.matrix.schema.ui.command.ACDProjectsDesk=Projects
Umsetzung mit Hashtags
Die Palette nutzt Hashtags für Zugriffsfilterung und semantische Suche nach Synonymen (z. B. „Unternehmen“ -> „Organisationen“).
@Override
public Set<String> getHashTags() {
return Set.of(
"document-management",
"demo",
"projects",
"kits");
}
Controller liefert verfügbare Befehle:
@GetMapping("/navigator/paletteCommands")
public ResponseEntity<List<JDTOCommand>> getCommands(
@JPathContextVariable JContext ctx,
@RequestParam Map<String, String> requestParamsMap) {
JRequestParams requestParams = new JRequestParams(requestParamsMap);
Set<JCommand> commands = JModel.getAdminListByClass(JCommand.class);
List<JDTOCommand> results = commands
.stream()
.filter(cmd -> cmd.getHashTags() != null && !cmd.getHashTags().isEmpty() && cmd.show(ctx, requestParams))
.map(cmd -> new JDTOCommand(ctx, requestParams, cmd))
.toList();
return ResponseEntity.ok(results);
}
Clientseitige Filterung für Geschwindigkeit (bis 1000 Befehle). JSON-Beispiel:
[
{
"name":"ACPersonDesk",
"description":"Platform user registry",
"label":"Users",
"icon":null,
"settings":{},
"href":{
"url":"../table/ATBPersonDesk",
"requestParams":{
"toolbar":"AMPersonDeskTableActions",
"rowSelection":"MULTI",
"inquiry":"AIQPersonsDesk",
"target":"CONTENT"
}
},
"hashTags":["users", "org-structure"]
}
]
Suche nach „projects“ öffnet sofort den passenden href, egal wie tief im Menü.
Wichtige Vorteile
- Sofortiger Zugriff: Suche per Label, Beschreibung, Hashtags.
- Kontextbezogen: Hashtags erweitern um Synonyme und filtern relevante Befehle.
- Vielseitig: Funktioniert für Komponenten-Anzeige und direkte Aktionen.
- Skalierbar: Unabhängig von UI-Struktur, ideal für 100+ Module.
- Hochperformant: Server sendet Liste, Client filtert in Echtzeit.
Die Palette ergänzt Menüs, ersetzt sie nicht. Admins erreichen seltene Funktionen blitzschnell – ohne Handbücher.
Kernbotschaften
- JCommand-Architektur macht Palette-Umsetzung trivial – kein Refactoring nötig.
- Hashtags meistern Filterung und semantische Suche auf einen Streich.
- Clientseitige Filterung hält es responsiv bei 1000+ Befehlen.
- Palette entlastet kognitiv in Multi-Modul-Ökosystemen.
- Ideal für Engineering-Systeme mit konservativen Nutzern.
— Editorial Team
Noch keine Kommentare.