defineApplication haben. Dieser deklariert:
- Identität — universeller Bezeichner, Anzeigename, Beschreibung.
- Berechtigungen — unter welcher Rolle ihre Logikfunktionen und Frontend-Komponenten ausgeführt werden.
- Variablen (optional) — Schlüssel–Wert-Paare, die Ihrem Code als Umgebungsvariablen zur Verfügung gestellt werden.
- Pre-install-/Post-install-/Uninstall-Hooks (optional) — siehe Logikfunktionen.
src/application-config.ts
universalIdentifier-Felder sind deterministische IDs, die Ihnen gehören. Erzeugen Sie sie einmal und halten Sie sie über Synchronisierungen hinweg stabil.applicationVariableswerden zu Umgebungsvariablen für Ihre Funktionen und Frontend-Komponenten. In Logikfunktionen (serverseitig) sind sie alsprocess.env.VARIABLE_NAMEverfügbar. In Frontend-Komponenten verwenden SiegetApplicationVariable('VARIABLE_NAME')austwenty-sdk/front-component. Variablen, die mitisSecret: truegekennzeichnet sind, werden nur in Logikfunktionen injiziert. Frontend-Komponenten erhalten nur nicht-geheime Variablen.- Die Standardrolle wird automatisch aus der Rollen-Datei erkannt, die mit
defineApplicationRole()markiert ist – Sie müssen sie nicht ausdefineApplication()referenzieren. - Pre-Installations-, Post-Installations- und Deinstallationsfunktionen werden während des Manifest-Builds automatisch erkannt — Sie müssen sie in
defineApplication()nicht referenzieren. - Die explizite Übergabe von
defaultRoleUniversalIdentifierwird für die Abwärtskompatibilität weiterhin unterstützt, ist jedoch zugunsten vondefineApplicationRole()veraltet. serverVariablessind instanzbezogene Konfigurationen und Geheimnisse (z. B. API-Schlüssel). Im Gegensatz zuapplicationVariableshaben sie im Manifest keinen Wert definiert – die Workspace-Operatorin bzw. der Workspace-Operator trägt sie in den App-Einstellungen ein, und sie werden erst dann in Logikfunktionen eingespeist, wenn sie gesetzt sind.- Um eine benutzerdefinierte Konfigurationsoberfläche im Tab Settings der App anzuzeigen (anstelle des standardmäßigen Variablenkonfigurationsbereichs), deklarieren Sie eine Front-Komponente mit
defineSettingsFrontComponent()in einer eigenen Datei. Pro App ist nur eine zulässig. Systemverwaltete Bereiche (Auto-Upgrade, App-URL, Verbindungen) bleiben immer sichtbar.
Variablentypen
SowohlapplicationVariables als auch serverVariables akzeptieren einen optionalen type (und für SELECT / MULTI_SELECT eine options-Liste). Unterstützte Typen: TEXT (Standard), BOOLEAN, NUMBER, NUMERIC, DATE, DATE_TIME, SELECT, MULTI_SELECT, ARRAY, RAW_JSON, RICH_TEXT.
src/application-config.ts
type beeinflusst nur die Darstellung und Validierung – er wählt das passende Eingabefeld in der UI der Arbeitsbereichseinstellungen aus (Schalter, Zahlenfeld, Dropdown, Datumsauswahl, JSON-Editor, …) und ermöglicht es dem Build, deine Konfiguration zu validieren (zum Beispiel müssen SELECT / MULTI_SELECT nicht-leere options deklarieren). Er ändert nicht, wie der Wert deinen Code erreicht.
Werte werden immer als Strings bereitgestellt – das ist inhärent bei Umgebungsvariablen (process.env.* enthält ausschließlich Strings). Wenn deine Logikfunktion ausgeführt wird, serialisiert der Executor jeden Wert anhand seines deklarierten type beim Aufbau von process.env, sodass das Stringformat konsistent ist, unabhängig davon, wie der Wert gesetzt wurde (Manifest-Standardwert, Einstellungs-UI oder eine vorherige Version):
Wandle den String zurück in den erwarteten Typ um:
getApplicationVariable('VARIABLE_NAME') lesen – der zurückgegebene Wert ist ein String; wandle ihn bei Bedarf um.
Standard-Funktionsrolle
Die mitdefineApplicationRole() deklarierte Rolle steuert, worauf die Logikfunktionen und Frontend-Komponenten der App zugreifen können:
- Das zur Laufzeit als
TWENTY_APP_ACCESS_TOKENinjizierte Token wird aus dieser Rolle abgeleitet. - Der typisierte API-Client ist auf die dieser Rolle gewährten Berechtigungen beschränkt.
- Befolgen Sie das Least-Privilege-Prinzip: Deklarieren Sie nur die Berechtigungen, die Ihre Funktionen benötigen.
src/roles/default-role.ts. Die vollständige Referenz finden Sie unter Rollen & Berechtigungen.
Marktplatz-Metadaten
Wenn Sie planen, Ihre App zu veröffentlichen, steuern diese optionalen Felder, wie Ihre App im Marktplatz erscheint:logoUrl und screenshots sind veraltete Aliase von logo und galleryImages. Externe absolute URLs (http:// oder https://) werden für diese Felder nicht unterstützt: Sie werden beim Build mit einer Warnung gelöscht. Bundle stattdessen die Bilder im public/ Ordner deiner App.