Plugin-Entwicklungs-Cheatsheet

Beim Schreiben von Plugins fragt man sich oft: „In welcher Datei und mit welcher API soll ich das tun?" Dieses Cheatsheet hilft Ihnen, schnell die richtige Stelle zu finden.

Plugin-Verzeichnisstruktur

Mit yarn pm create @my-project/plugin-name erstellen Sie ein Plugin, dabei wird automatisch die folgende Verzeichnisstruktur erzeugt. Erstellen Sie Verzeichnisse nicht manuell, da sonst Registrierungsschritte vergessen werden können und das Plugin nicht funktioniert. Details siehe Erstes Plugin schreiben.

plugin-name/
├── src/
   ├── client-v2/              # Client-Code (v2)
   ├── plugin.tsx          # Client-Plugin-Einstiegspunkt
   ├── locale.ts           # useT / tExpr Übersetzungs-Hooks
   ├── models/             # FlowModel (Block, Feld, Aktion)
   └── pages/              # Seiten-Components
   ├── client/                 # Client-Code (v1, kompatibel)
   ├── plugin.tsx
   ├── locale.ts
   ├── models/
   └── pages/
   ├── server/                 # Server-Code
   ├── plugin.ts           # Server-Plugin-Einstiegspunkt
   └── collections/        # Datentabellen-Definitionen
   └── locale/                 # Mehrsprachen-Übersetzungsdateien
       ├── zh-CN.json
       └── en-US.json
├── client-v2.js                # Stamm-Einstiegspunkt (verweist auf das Build-Ergebnis)
├── client-v2.d.ts
├── client.js
├── client.d.ts
├── server.js
├── server.d.ts
└── package.json

Client: Was tun → Wie schreiben

Was tunIn welcher DateiWelche APIDokumentation
Eine Seitenroute registrierenplugin.tsx load()this.router.add()Router
Eine Plugin-Einstellungsseite registrierenplugin.tsx load()pluginSettingsManager.addMenuItem() + addPageTabItem()Router
Einen benutzerdefinierten Block registrierenplugin.tsx load()this.flowEngine.registerModelLoaders()FlowEngine → Block-Erweiterung
Ein benutzerdefiniertes Feld registrierenplugin.tsx load()this.flowEngine.registerModelLoaders()FlowEngine → Feld-Erweiterung
Eine benutzerdefinierte Aktion registrierenplugin.tsx load()this.flowEngine.registerModelLoaders()FlowEngine → Aktions-Erweiterung
Eine interne Tabelle in der Datentabellen-Auswahl eines Blocks anzeigenplugin.tsx load()mainDS.addCollection()Collections
Plugin-Texte übersetzenlocale/zh-CN.json + locale/en-US.jsoni18n Internationalisierung

Server: Was tun → Wie schreiben

Was tunIn welcher DateiWelche APIDokumentation
Eine Datentabelle definierenserver/collections/xxx.tsdefineCollection()Collections
Eine vorhandene Datentabelle erweiternserver/collections/xxx.tsextendCollection()Collections
Eine benutzerdefinierte Schnittstelle registrierenserver/plugin.ts load()this.app.resourceManager.define()ResourceManager
Schnittstellen-Berechtigungen konfigurierenserver/plugin.ts load()this.app.acl.allow()ACL
Beim Plugin-Installieren Initialdaten einfügenserver/plugin.ts install()this.db.getRepository().create()Plugin

FlowModel-Schnellübersicht

Was tunWelche Basisklasse erweiternWichtige API
Reinen Anzeige-BlockBlockModelrenderComponent() + define()
Datentabellen-gebundenen Block (benutzerdefiniertes Rendering)CollectionBlockModelcreateResource() + renderComponent()
Vollständigen Tabellenblock (auf Basis der eingebauten Tabelle anpassen)TableBlockModelfilterCollection() + customModelClasses
Feld-Anzeige-ComponentClickableFieldModelrenderComponent(value) + bindModelToInterface()
AktionsbuttonActionModelstatic scene + registerFlow({ on: 'click' })

Übersetzungsmethoden-Schnellübersicht

SzenarioWas verwendenWoher importieren
In Plugin load()this.t('key')In der Plugin-Basisklasse enthalten
In React-Componentsconst t = useT(); t('key')locale.ts
Statische FlowModel-Definition (define(), registerFlow())tExpr('key')locale.ts

Schnellübersicht häufiger API-Aufrufe

Was tunIm PluginIm Component
API-Anfrage sendenthis.context.api.request()ctx.api.request()
Übersetzung abrufenthis.t()useT()
Logger abrufenthis.context.loggerctx.logger
Route registrierenthis.router.add()
Zur Seite navigierenctx.router.navigate()
Modal öffnenctx.viewer.dialog()