Créer un projet pour l’extensibilité de l’interface utilisateur
Pour créer une extension d’interface utilisateur personnalisée, vous devez créer un projet App Builder correspondant.
Cette page décrit comment générer un projet App Builder générique avec la ligne de commande aio. « Générique » signifie que le projet ne démarre pas à partir d’un modèle spécifique au produit. Démarrer avec une application générique simplifie le projet et lui permet de se connecter à Workfront Fusion.
Il peut être utile de vous familiariser avec les concepts et la terminologie suivants concernant la création d’un projet à utiliser avec l’extensibilité d’Adobe Fusion AI.
-
(https://developer.adobe.com/console) est le tableau de bord web où réside votre projet.
-
Terminologie :
table 0-row-2 1-row-2 2-row-2 3-row-2 4-row-2 Terme Signification Organisation L’organisation Adobe de votre entreprise. La même organisation que celle utilisée dans Fusion. Projet Conteneur pour une application/extension. Vous allez créer un projet pour votre extension. Espace de travail Une copie de la configuration du projet pour une étape de travail. Chaque projet dispose d’un espace de travail Production et vous utilisez généralement également un espace de travail Évaluation pour les tests. Pensez aux espaces de travail comme aux « environnements ». Informations d’identification/services Autorisations que votre application peut utiliser. Les valeurs par défaut créées pour vous suffisent pour démarrer. -
Il existe deux manières de créer un projet :
- Automatique (recommandé) : l’
aio app initde commande crée le projet et les espaces de travail pour vous lors de la génération du code. Cet article décrit ce processus. - Manuel : vous commencez par créer le projet vous-même dans le Developer Console, puis vous
aiopointez dessus. Nous vous recommandons de ne le faire que si votre organisation nécessite que les projets soient créés de manière centralisée.
- Automatique (recommandé) : l’
-
Lorsque vous décidez de l’espace de travail à utiliser, développez et déployez-le d’abord sur Stage. Fusion charge une version d’évaluation uniquement lorsque l’utilisateur active les tests d’évaluation dans son profil Fusion (menu d’avatar de l’utilisateur > Paramètres de produit > Profil Fusion > Préférences > Extensions d’évaluation) ; dans le cas contraire, seules les extensions de production publiées s’affichent. Vous pouvez également prévisualiser localement avec
aio app run, puis convertir en Production ultérieurement.Pour plus d’informations sur la promotion en production, voir Publication de votre extension.
Exécuter aio app init
-
Ouvrez un terminal.
-
Dans le terminal, déplacez-vous vers le dossier dans lequel vous conservez les projets.
-
Exécuter :
code language-sh aio app init my-fusion-extension --standalone-appmy-fusion-extensionest le nom du dossier/de l’application. Vous pouvez sélectionner ce nom, mais en utilisant des lettres minuscules, des tirets et sans espaces.--standalone-appindique à l’interface de ligne de commande de créer un squelette d’application simple au lieu de vous demander de choisir un modèle de produit. Il s’agit de la clé pour éviter le modèle AEM (ou tout autre modèle).
-
Lorsque vous y êtes invité, sélectionnez votre organisation (si vous en appartenez à plusieurs).
-
Lorsque vous y êtes invité, sélectionnez Créer un projet et acceptez le nom suggéré, ou sélectionnez un projet vide existant.
La commande configure automatiquement les espaces de travail Évaluation et Production.
La commande génère également des fichiers dans le dossier
my-fusion-extensionet exécutenpm install. -
Passez à Confirmer la création du projet.
aio app init my-fusion-extension > (sans --standalone-app). Lorsqu’il demande « Quels modèles voulez-vous rechercher ? » ou affiche une liste de contrôle de modèles, ne sélectionnez pas un modèle de produit comme AEM. Choisissez l’option pour créer une application autonome / « Tous les points d’extension → aucun ».Vérifier la création du projet
-
Dans le terminal, accédez au dossier créé :
code language-sh cd my-fusion-extensionVous devriez voir une structure similaire à celle-ci (certains fichiers sont omis) :
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)Les deux fichiers qui vous intéressent le plus sont les suivants :
app.config.yaml: configuration centrale. Plus loin dans le processus, vous ajouterez une sectionextensions:ici qui connecte votre application à un point d’extension Fusion.package.json: répertorie les bibliothèques utilisées par votre application. Vous ajouterez ici la bibliothèque invitée Extensibilité de l’interface utilisateur d’Adobe.
-
Passez à Ajouter les bibliothèques requises.
Ajout des bibliothèques requises
Votre extension a besoin de deux bibliothèques :
@adobe/uix-guest: permet à votre application de communiquer avec Fusion (l’hôte).@adobe/react-spectrum: composants de l’interface utilisateur React d’Adobe, afin que votre écran corresponde à l’aspect d’Adobe. (Facultatif, mais recommandé ; vous pouvez utiliser HTML brut à la place.)
Pour installer ces bibliothèques :
-
Dans le terminal, exécutez :
code language-sh npm install @adobe/uix-guest @adobe/react-spectrum -
(Conditionnel) Si le projet généré n’inclut pas déjà React, installez-le également :
code language-sh npm install react react-dom react-router-dom -
Continuez pour Confirmer les versions du projet.
Confirmer les versions de projet
Avant de modifier quoi que ce soit, assurez-vous que le projet vide est généré
-
Dans le terminal, exécutez :
code language-sh aio app buildSi cette opération s’effectue sans erreur, vos outils et votre projet sont correctement configurés. Vous êtes prêt à connecter le projet à Fusion.
note tip TIP Si la création échoue la cause la plus courante est une version de Node.js non prise en charge. Exécutez node --versionet assurez-vous qu’il s’agit de 18 ou 20.- Pour plus d’informations sur l’installation de Node.js, voir Configuration de vos outils.
- Pour plus d’informations sur les autres erreurs possibles, voir Dépannage.
-
Passez à Configurer le projet pour Fusion.
Configuration du projet pour Fusion
L’étape suivante de la configuration de votre extension personnalisée consiste à connecter votre projet générique à Workfront Fusion.
Tu pourras :
- Créer un dossier pour votre extension
- Parlez à App Builder d’un point d’extension Fusion (en
app.config.yaml). - Décrivez les éléments de votre extension (en
ext.config.yaml). - Inscrivez votre widget afin que Fusion connaisse son titre et l’emplacement de son interface utilisateur.
Nous utilisons fusion/nav-organization/1 partout. Pour cibler la section Équipe à la place, permutez en fusion/nav-team/1 partout. Pour prendre en charge les deux, répétez le motif pour chacun d’eux.
Créer un dossier pour votre extension
-
Créez vos fichiers de sorte que le projet ressemble à ceci :
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.jsNous vous recommandons de nommer le dossier après le point d’extension (
fusion-nav-organization-1). Le nom exact dépend de vous, mais il doit correspondre à ce que vous référencez dansapp.config.yaml. -
Continuez sur Déclarez le point d’extension en
app.config.yaml.
Déclarez le point d’extension en app.config.yaml
-
Ouvrez
app.config.yamlet mettez à jour son contenu vers :code language-yaml extensions: fusion/nav-organization/1: $include: src/fusion-nav-organization-1/ext.config.yamlCes contenus décrivent les éléments suivants :
extensions:: cette application implémente un ou plusieurs points d’extension.fusion/nav-organization/1: emplacement Fusion auquel vous vous connectez. Le nom doit correspondre exactement y compris la version1.$include:: pointe vers un second fichier de configuration (créé à l’étape suivante) qui décrit le contenu de cette extension. Le fait de le conserver dans un fichier distinct permet de garderapp.config.yamlpropre et vous permet d’ajouter d’autres points d’extension ultérieurement.
note NOTE Si vous ciblez les deux extensions, répertoriez les deux, chacune disposant de son propre dossier : 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
Décrire l’extension en ext.config.yaml
-
Créez des
src/fusion-nav-organization-1/ext.config.yamlavec :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.jsCes contenus décrivent les éléments suivants :
operations.view: déclare que votre extension fournit une vue (interface utilisateur visible), diffusée à partir deindex.html. C’est ce qui permet à votre extension d’afficher un écran plutôt que de s’exécuter uniquement en arrière-plan.web: web-src: le dossier qui contient vos fichiers front-end. App Builder crée tout ici et l’héberge sur le réseau de diffusion de contenu (CDN) d’Adobe.hooks: petites commandes qui s’exécutent automatiquement au moment de la création/de l’exécution. Le scriptgenerate-metadata.jsest fourni avec@adobe/uix-guestet génère un fichierapp-metadata.jsondont votre code d’enregistrement a besoin (voir Étape 4). Vous n’écrivez pas ce script ; vous le référencez simplement.
note NOTE Si vous avez également besoin d’une logique côté serveur, vous pouvez également ajouter des actionssans serveur (petites fonctions d’arrière-plan). Les actions sont facultatives et ne sont pas requises pour générer une interface utilisateur. Nous les laissons donc de côté pour que ce guide reste ciblé. Si vous les ajoutez ultérieurement, déclarez un dossieractions:ici et unruntimeManifest:dansapp.config.yaml. La raison la plus courante d’en ajouter une est d’appeler les API Workfront/Fusion sans accéder à la configuration CORS du navigateur.
Pour plus d’informations sur l’appel des API, voir Appeler des API Workfront et Fusion. -
Passez à Définir un ID d’extension stable.
Définir un ID d’extension stable
Votre extension nécessite un identifiant unique que les deux trames partagent.
Pour plus d’informations sur les cadres associés aux extensions personnalisées, voir Cadres inclus dans une extension d’interface utilisateur.
-
Créer un
src/fusion-nav-organization-1/web-src/src/components/Constants.js:code language-js module.exports = { extensionId: 'my-fusion-extension' };Utilisez la même valeur partout où votre code fait référence à l’ID d’extension.
-
Continuez sur Enregistrer votre widget.
Enregistrer votre widget
« Enregistrement » est la manière dont le cadre d’arrière-plan masqué indique à Fusion ce que votre extension offre. Vous déclarez une méthode dashboard.getWidget() qui renvoie le titre de votre widget et l’URL de son interface utilisateur visible.
-
Créez des
src/fusion-nav-organization-1/web-src/src/components/ExtensionRegistration.js.
La partie importante est l’appelregister(...):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);Points clés :
titleest le libellé que Fusion attribue au bouton de navigation. SihideWidgetHeaderestfalse, Fusion affiche également le titre sous la forme d’un en-tête au-dessus de votre interface utilisateur.urlest l’itinéraire vers votre interface utilisateur visible dans cette même application. Ici, il s’agit d’une route de hachage (#/my-widget) gérée par votre routeur front-end (configurée sur la page suivante). Elle doit être résolue sur le composant qui effectue le rendu de votre écran.metadataprovient deapp-metadata.json, que le hookgenerate-metadatacrée pour vous au moment de la création. Importez-le comme indiqué.- Le nom de la méthode
dashboard.getWidgetcorrespond au contrat convenu que Fusion appelle pour découvrir votre widget. Conservez l’espace de nomsdashboardet le nom dugetWidget.
Le serveur principal de votre extension est maintenant terminé. Étape suivante dans la création de l’interface utilisateur de l’extension.
Pour obtenir des instructions sur la création de l’interface utilisateur, voir Créer l’interface utilisateur d’extension personnalisée.