Erstellen eines Projekts für die Erweiterbarkeit der Benutzeroberfläche
Um eine benutzerdefinierte Benutzeroberflächenerweiterung zu erstellen, müssen Sie dafür ein App Builder-Projekt erstellen.
Auf dieser Seite wird beschrieben, wie Sie mit der aio Befehlszeile ein generisches App Builder-Projekt generieren. „Generisch“ bedeutet, dass das Projekt nicht von einer produktspezifischen Vorlage beginnt. Wenn Sie mit einer generischen App beginnen, wird das Projekt vereinfacht und es wird ermöglicht, eine Verbindung mit Workfront Fusion herzustellen.
Es kann nützlich sein, sich mit den folgenden Konzepten und der folgenden Terminologie bezüglich der Erstellung eines Projekts zur Verwendung mit der Adobe Fusion-KI-Erweiterbarkeit vertraut zu machen.
-
Adobe Developer Console (https://developer.adobe.com/console) ist das Web-Dashboard, in dem sich Ihr Projekt befindet.
-
Terminologie:
table 0-row-2 1-row-2 2-row-2 3-row-2 4-row-2 Begriff Bedeutung Organisation Die Adobe-Organisation Ihres Unternehmens. Die gleiche Organisation, die Sie in Fusion verwenden. Projekt Ein Container für eine Anwendung/Erweiterung. Sie erstellen ein Projekt für Ihre Erweiterung. Arbeitsbereich Eine Kopie der Projektkonfiguration für einen Arbeitsschritt. Jedes Projekt hat einen Produktions Arbeitsbereich, und Sie verwenden normalerweise auch einen Staging-Arbeitsbereich zum Testen. Stellen Sie sich Arbeitsbereiche wie Umgebungen vor. Anmeldedaten/Services Berechtigungen, die Ihre App verwenden darf. Die für Sie erstellten Standardeinstellungen reichen aus, um zu starten. -
Es gibt zwei Möglichkeiten, ein Projekt zu erstellen:
- Automatisch (empfohlen): Der Befehl
aio app initerstellt das Projekt und die Arbeitsbereiche für Sie, während Sie den Code generieren. Dieser Artikel beschreibt diesen Prozess. - Manuell Sie erstellen das Projekt zuerst selbst in der Developer Console und zeigen dann
aiodarauf. Wir empfehlen, dies nur zu tun, wenn Ihre Organisation erfordert, dass Projekte zentral erstellt werden.
- Automatisch (empfohlen): Der Befehl
-
Bei der Entscheidung, welcher Arbeitsbereich verwendet werden soll, muss zuerst entwickelt und „Staging bereitgestellt werden. Fusion lädt einen Staging-Build nur, wenn der Benutzer Staging-Tests in seinem Fusion-Profil aktiviert (Menü Benutzeravatar > Produkteinstellungen > Fusion-Profil > Voreinstellungen > Staging-Erweiterungen). Andernfalls werden nur veröffentlichte Produktions-Erweiterungen angezeigt. Sie können auch eine lokale Vorschau mit
aio app runanzeigen und später zur Produktion weiterleiten.Weitere Informationen zum Hochstufen zur Produktion finden Sie unter Erweiterung veröffentlichen.
aio app init ausführen
-
Öffnen Sie ein Terminal.
-
Verschieben Sie im Terminal in den Ordner, in dem Sie die Projekte ablegen.
-
Durchgang:
code language-sh aio app init my-fusion-extension --standalone-appmy-fusion-extensionist der Ordner-/App-Name. Sie können diesen Namen auswählen, jedoch Kleinbuchstaben, Bindestriche und keine Leerzeichen verwenden.--standalone-appweist die CLI an, ein -Anwendungsskelett zu erstellen anstatt Sie zu bitten, eine Produktvorlage auszuwählen. Dies ist der Schlüssel, um die AEM-Vorlage (oder eine andere) zu vermeiden.
-
Wenn Sie dazu aufgefordert werden wählen Sie Ihre Organisation (wenn Sie zu mehreren gehören).
-
Wenn Sie dazu aufgefordert werden, wählen Neues Projekt erstellen und akzeptieren Sie den vorgeschlagenen Namen oder wählen Sie ein vorhandenes leeres Projekt aus.
Der Befehl richtet die Arbeitsbereiche Staging und Produktion automatisch ein.
Der Befehl generiert auch Dateien im
my-fusion-extensionOrdner und führtnpm installaus. -
Fahren Sie Projekterstellung bestätigen fort.
aio app init my-fusion-extension > (ohne --standalone-app) aus. Wenn gefragt wird: „Nach welchen Vorlagen möchten Sie suchen?“ oder eine Checkliste mit Vorlagen anzeigt. Wählen Sie dazu keine Produktvorlage wie AEM aus. Wählen Sie die Option zum Erstellen einer eigenständigen Anwendung / „Alle Erweiterungspunkte → keine“.Projekterstellung überprüfen
-
Wechseln Sie im Terminal in den erstellten Ordner:
code language-sh cd my-fusion-extensionEs sollte eine ähnliche Struktur angezeigt werden (einige Dateien ausgelassen):
code language-none my-fusion-extension/ |--- app.config.yaml // main configuration (you will edit this) |--- package.json //dependencies and scripts |--- src/ // your source code |--- web-src/ or src/.../web-src/ // front-end files (HTML/JS)Die beiden Dateien, die Sie am meisten interessieren, sind:
app.config.yaml: Die zentrale Konfiguration. Später werden Sie hier einenextensions:Abschnitt hinzufügen, der Ihre App mit einem Fusion-Erweiterungspunkt verbindet.package.json: Listet die Bibliotheken auf, die Ihre App verwendet. Sie fügen hier die Gastbibliothek der Erweiterbarkeit der Adobe-Benutzeroberfläche hinzu.
-
Fahren Sie mit Hinzufügen erforderlicher Bibliotheken fort.
Erforderliche Bibliotheken hinzufügen
Ihre Erweiterung benötigt zwei Bibliotheken:
@adobe/uix-guest: Ermöglicht es Ihrer App, mit Fusion (dem Host) zu sprechen.@adobe/react-spectrum: Adobes React-UI-Komponenten, sodass Ihr Bildschirm dem Erscheinungsbild von Adobe entspricht. (Optional, aber empfohlen. Stattdessen können Sie auch Nur-HTML verwenden.)
Installieren dieser Bibliotheken:
-
Führen Sie im Terminal Folgendes aus:
code language-sh npm install @adobe/uix-guest @adobe/react-spectrum -
(Bedingt) Wenn das generierte Projekt React nicht bereits enthält, installieren Sie es auch:
code language-sh npm install react react-dom react-router-dom -
Fahren Sie mit Bestätigen der Projekt-Builds fort.
Bestätigen der Projekt-Builds
Bevor Sie Änderungen vornehmen, stellen Sie sicher, dass das leere Projekt Builds erstellt
-
Führen Sie im Terminal Folgendes aus:
code language-sh aio app buildWenn dies fehlerfrei abgeschlossen wird, sind Ihre Tools und Ihr Projekt korrekt konfiguriert. Sie sind bereit, das Projekt mit Fusion zu verbinden.
note tip TIP Wenn der Build fehlschlägt, die häufigste Ursache eine nicht unterstützte Node.js-Version. Führen Sie node --versionaus und stellen Sie sicher, dass es 18 oder 20 ist.- Informationen zur Installation von Node.js finden Sie unter Einrichten der Tools.
- Weitere Informationen zu möglichen Fehlern finden Sie unter Fehlerbehebung.
-
Fahren Sie fort Konfigurieren des Projekts für Fusion.
Konfigurieren des Projekts für Fusion
Der nächste Schritt beim Einrichten Ihrer benutzerdefinierten Erweiterung besteht darin, Ihr generisches Projekt mit Workfront Fusion zu verbinden.
Sie werden:
- Erstellen eines Ordners für Ihre Erweiterung
- App Builder über einen Fusion Erweiterungspunkt (in
app.config.yaml) informieren. - Beschreiben Sie die Teile Ihrer Erweiterung (in
ext.config.yaml). - Registrieren Ihr Widget, damit Fusion den Titel und den Lebensraum der Benutzeroberfläche kennt.
Wir verwenden überall fusion/nav-organization/1. Um stattdessen den Abschnitt Team auszuwählen, tauschen Sie überall fusion/nav-team/1 aus. Um beide zu unterstützen, wiederholen Sie das Muster für jedes.
Erstellen eines Ordners für Ihre Erweiterung
-
Erstellen Sie Ihre Dateien, sodass das Projekt wie folgt aussieht:
code language-none my-fusion-extension/ |-- app.config.yaml |-- src/ |-- fusion-nav-organization-1/ // one folder per extension point |-- ext.config.yaml |-- web-src/ |-- src/ |-- components/ |-- App.js |-- ExtensionRegistration.js |-- DashboardWidget.js |-- Constants.jsEs wird empfohlen, den Ordner nach dem Erweiterungspunkt (
fusion-nav-organization-1) zu benennen. Der genaue Name liegt bei Ihnen, er muss jedoch mit dem übereinstimmen, auf den Sie inapp.config.yamlverweisen. -
Fahren Sie fort den Erweiterungspunkt in
app.config.yamlzu deklarieren.
Deklarieren des Erweiterungspunkts in app.config.yaml
-
Öffnen Sie
app.config.yamlund aktualisieren Sie seinen Inhalt wie folgt:code language-yaml extensions: fusion/nav-organization/1: $include: src/fusion-nav-organization-1/ext.config.yamlDieser Inhalt beschreibt Folgendes:
extensions:: Diese App implementiert einen oder mehrere Erweiterungspunkte.fusion/nav-organization/1: Der Fusion-Steckplatz, an den Sie sich anschließen. Der Name muss genau übereinstimmen einschließlich Version1.$include:: Dies verweist auf eine zweite Konfigurationsdatei (die im nächsten Schritt erstellt wurde), die den Inhalt dieser Erweiterung beschreibt. Wenn Sie sie in einer separaten Datei speichern, bleibtapp.config.yamlsauber und Sie können später weitere Erweiterungspunkte hinzufügen.
note NOTE Wenn Sie beide Erweiterungen als Ziel auswählen, listen Sie beide mit jeweils einem eigenen Ordner auf: code language-yaml extensions: fusion/nav-organization/1: $include: src/fusion-nav-organization-1/ext.config.yaml fusion/nav-team/1: $include: src/fusion-nav-team-1/ext.config.yaml- Fahren Sie fortBeschreiben Sie die Erweiterung in
ext.config.yaml
Beschreiben Sie die Erweiterung in ext.config.yaml
-
src/fusion-nav-organization-1/ext.config.yamlerstellen mit:code language-yaml operations: view: - type: web impl: index.html web: web-src hooks: pre-app-build: node node_modules/@adobe/uix-guest/scripts/generate-metadata.js pre-app-run: node node_modules/@adobe/uix-guest/scripts/generate-metadata.jsDieser Inhalt beschreibt Folgendes:
operations.view: Deklariert, dass Ihre Erweiterung eine Ansicht (eine sichtbare Benutzeroberfläche) bereitstellt, die vonindex.htmlbereitgestellt wird. Dadurch wird Ihre Erweiterung zu einem Bildschirm, anstatt nur im Hintergrund ausgeführt zu werden.web: web-src: Der Ordner, der Ihre Frontend-Dateien enthält. App Builder erstellt alles hier unter und hostet es im Content Delivery Network (CDN) von Adobe.hooks: Kleine Befehle, die automatisch zur Build-/Laufzeit ausgeführt werden. Dasgenerate-metadata.js-Skript wird mit@adobe/uix-guestausgeliefert und erzeugt eineapp-metadata.json-Datei, die Ihr Registrierungs-Code benötigt (siehe Schritt 4). Sie schreiben dieses Skript nicht, Sie verweisen nur darauf.
note NOTE Wenn Sie auch Server-seitige Logik benötigen, können Sie auch Server-lose actions(kleine Backend-Funktionen) hinzufügen. Aktionen sind optional und nicht erforderlich, um eine Benutzeroberfläche zu rendern. Daher lassen wir sie aus, um diesen Leitfaden fokussiert zu halten. Wenn Sie sie später hinzufügen, deklarieren Sie hier einenactions:Ordner und inapp.config.yamleinenruntimeManifest:. Der häufigste Grund für das Hinzufügen einer solchen API ist der Aufruf von Workfront/Fusion-APIs, ohne dass dabei Browser-CORS aufgerufen wird.
Informationen zum Aufrufen von APIs finden Sie unter Aufrufen von Workfront- und Fusion-APIs. -
Fahren Sie fort Festlegen einer stabilen Erweiterungs-ID.
Festlegen einer stabilen Erweiterungs-ID
Ihre Erweiterung erfordert eine eindeutige ID, die beide Frames gemeinsam haben.
Informationen zu Frames in Bezug auf benutzerdefinierte Erweiterungen finden Sie unter Frames in einer Benutzeroberflächenerweiterung.
-
src/fusion-nav-organization-1/web-src/src/components/Constants.jserstellen:code language-js module.exports = { extensionId: 'my-fusion-extension' };Verwenden Sie denselben Wert überall dort, wo Ihr Code auf die Erweiterungs-ID verweist.
-
Fahren Sie fort Widget registrieren.
Widget registrieren
„Registrierung“ ist, wie der versteckte Hintergrund Rahmen teilt Fusion, was Ihre Erweiterung bietet. Sie deklarieren eine dashboard.getWidget() Methode, die den Titel Ihres Widgets und die URL seiner sichtbaren Benutzeroberfläche zurückgibt.
-
src/fusion-nav-organization-1/web-src/src/components/ExtensionRegistration.jserstellen.
Der wichtige Teil ist derregister(...):code language-js import { register } from "@adobe/uix-guest"; import metadata from "../../../../app-metadata.json"; import { extensionId } from "./Constants"; async function init() { await register({ id: extensionId, metadata, methods: { dashboard: { getWidget() { return { id: extensionId, title: "My Fusion tool", // shown on the Fusion nav button description: "What this tool does", url: "/index.html#/my-widget", // route to your visible UI hideWidgetHeader: false // false = Fusion shows the title }; } } } }); } init().catch(console.error);Wichtigste Punkte:
titleist die Bezeichnung, die Fusion auf die Navigationsschaltfläche setzt. WennhideWidgetHeaderfalseist, zeigt Fusion den Titel auch als Kopfzeile über der Benutzeroberfläche an.urlist der Weg zu Ihrer sichtbaren Benutzeroberfläche innerhalb derselben App. Hier finden Sie eine Hash-Route (#/my-widget), die von Ihrem Frontend-Router (auf der nächsten Seite eingerichtet) verarbeitet wird. Sie muss auf die Komponente aufgelöst werden, die den Bildschirm rendert.metadatastammt ausapp-metadata.json, das dergenerate-metadata-Hook zum Zeitpunkt der Erstellung für Sie erstellt. Importieren Sie sie wie gezeigt.- Der
dashboard.getWidgetMethodenname ist der vereinbarte Vertrag mit Fusion-Aufrufen zur Ermittlung Ihres Widgets. Behalten Sie dendashboardNamespace und dengetWidgetbei.
Das Backend Ihrer Erweiterung ist jetzt abgeschlossen. Der nächste Schritt zum Erstellen der Benutzeroberfläche der Erweiterung.
Anweisungen zum Erstellen der Benutzeroberfläche finden Sie unter Erstellen der benutzerdefinierten Erweiterungs-Benutzeroberfläche.