FlowEngine
In NocoBase ist die FlowEngine (Flow-Engine) die zentrale Engine, die die visuelle Konfiguration antreibt. Blöcke, Felder und Aktionsbuttons in der NocoBase-Oberfläche werden alle über die FlowEngine verwaltet — einschließlich ihres Renderings, ihres Konfigurationspanels sowie der Persistenz der Konfiguration.

Für Plugin-Entwickler stellt die FlowEngine zwei zentrale Konzepte bereit:
- FlowModel — ein konfigurierbares Component-Modell, zuständig für UI-Rendering und Verwaltung der Props
- Flow — ein Konfigurationsablauf, definiert das Konfigurationspanel und die Datenverarbeitungslogik des Components
Wenn Ihr Component im Menü „Block / Feld / Aktion hinzufügen" erscheinen soll oder eine visuelle Konfiguration durch den Benutzer in der Oberfläche unterstützen muss, verpacken Sie es mit einem FlowModel. Wenn diese Fähigkeiten nicht benötigt werden, reicht ein gewöhnliches React Component aus — siehe Component vs FlowModel.
Was ist FlowModel
Im Gegensatz zu einem gewöhnlichen React Component verwaltet ein FlowModel neben dem UI-Rendering auch die Quelle der Props, die Definition des Konfigurationspanels und die Persistenz der Konfiguration. Kurz gesagt: Die Props eines gewöhnlichen Components sind hartcodiert, die Props eines FlowModel werden über einen Flow dynamisch erzeugt.
Wenn Sie sich tiefer mit der Gesamtarchitektur der FlowEngine auseinandersetzen möchten, lesen Sie die vollständige FlowEngine-Dokumentation. Im Folgenden wird die Verwendung aus Sicht des Plugin-Entwicklers vorgestellt.
Minimalbeispiel
Ein FlowModel von der Erstellung bis zur Registrierung in drei Schritten:
1. Basisklasse erweitern, renderComponent implementieren
renderComponent() ist die Render-Methode dieses Modells, ähnlich der render()-Methode eines React Components. tExpr() dient zur verzögerten Übersetzung — denn define() wird beim Laden des Moduls ausgeführt, zu diesem Zeitpunkt ist i18n noch nicht initialisiert. Details siehe Context Häufige Fähigkeiten → tExpr.
2. Im Plugin registrieren
3. In der Oberfläche verwenden
Nach der Registrierung und dem Aktivieren des Plugins (siehe Plugin-Entwicklungs-Übersicht zum Aktivieren) können Sie in der NocoBase-Oberfläche eine neue Seite anlegen, auf „Block hinzufügen" klicken und Ihren „Hello block" sehen.

Konfigurationselemente mit registerFlow hinzufügen
Reine Darstellung reicht nicht — der Kernwert eines FlowModel liegt in seiner Konfigurierbarkeit. Über registerFlow() können Sie dem Modell ein Konfigurationspanel hinzufügen, sodass Benutzer Eigenschaften in der Oberfläche ändern können.
Beispiel für einen Block, der die Bearbeitung von HTML-Inhalt unterstützt:
Wichtige Punkte hier:
on: 'beforeRender'— bedeutet, dass dieser Flow vor dem Rendern ausgeführt wird; der Wert aus dem Konfigurationspanel wird vor dem Rendern inthis.propsgeschriebenuiSchema— definiert die UI des Konfigurationspanels im JSON-Schema-Format, Syntax siehe UI Schemahandler(ctx, params)—paramssind die im Konfigurationspanel ausgefüllten Werte, die überctx.model.propsauf das Modell gesetzt werdendefaultParams— Standardwerte des Konfigurationspanels
Häufige Schreibweisen für uiSchema
uiSchema basiert auf JSON Schema. v2 ist syntaktisch zu uiSchema kompatibel, allerdings mit begrenzten Verwendungsszenarien — hauptsächlich zur Beschreibung der Formular-UI im Konfigurationspanel von Flows. Für das Rendern von Components zur Laufzeit wird in den meisten Fällen empfohlen, direkt mit Antd-Components zu arbeiten, ohne uiSchema zu durchlaufen.
Hier die häufigsten Components (vollständige Referenz siehe UI Schema):
Jedes Feld wird mit 'x-decorator': 'FormItem' umhüllt, wodurch automatisch Titel und Layout hinzugefügt werden.
Erläuterung der define()-Parameter
FlowModel.define() dient zum Setzen der Metadaten des Modells und steuert, wie es im Menü angezeigt wird. Bei der Plugin-Entwicklung wird label am häufigsten verwendet, es werden aber noch weitere Parameter unterstützt:
Die meisten Plugins setzen nur label:
Wenn Sortierung oder Ausblenden gesteuert werden soll, fügen Sie sort und hide hinzu:
Auswahl der FlowModel-Basisklasse
NocoBase stellt mehrere FlowModel-Basisklassen bereit, je nach erweitertem Typ:
Verwenden Sie für Tabellenblöcke in der Regel TableBlockModel (am häufigsten verwendet, sofort einsatzbereit), für vollständig benutzerdefiniertes Rendering CollectionBlockModel oder BlockModel, für Felder FieldModel, für Aktionsbuttons ActionModel.
Verwandte Links
- Block-Erweiterung — Blöcke mit den BlockModel-Basisklassen entwickeln
- Feld-Erweiterung — Benutzerdefinierte Felder mit FieldModel entwickeln
- Aktions-Erweiterung — Aktionsbuttons mit ActionModel entwickeln
- Component vs FlowModel — Unsicher, welcher Weg zu wählen ist?
- FlowDefinition — Vollständige Parameterliste und Event-Typen für registerFlow
- Vollständige FlowEngine-Dokumentation — Vollständige Referenz zu FlowModel, Flow, Context
- FlowEngine Schnellstart — Ein orchestrierbares Button-Component von Grund auf erstellen
- Plugin-Entwicklungs-Übersicht — Gesamtüberblick über die Plugin-Entwicklung
- UI Schema — uiSchema-Syntaxreferenz

