Creare un progetto per l’estendibilità dell’interfaccia utente
Per creare un’estensione dell’interfaccia utente personalizzata, devi creare un progetto App Builder per essa.
Questa pagina descrive come generare un progetto App Builder generico con la riga di comando aio. “Generico” significa che il progetto non inizia da un modello specifico per il prodotto. Partendo da un’app generica, il progetto diventa semplice e consente la connessione con Workfront Fusion.
Può essere utile acquisire familiarità con i concetti e la terminologia seguenti per quanto riguarda la creazione di un progetto da utilizzare con l’estensibilità di Adobe Fusion AI.
-
Adobe Developer Console (https://developer.adobe.com/console) è il dashboard Web in cui risiede il progetto.
-
Terminologia:
table 0-row-2 1-row-2 2-row-2 3-row-2 4-row-2 Termine Che cosa significa Organizzazione Organizzazione Adobe della tua azienda. La stessa organizzazione utilizzata in Fusion. Progetto Contenitore per un’app/estensione. Creerai un progetto per l’estensione. Workspace Una copia della configurazione del progetto per una fase del lavoro. Ogni progetto ha un’area di lavoro Produzione e in genere si utilizza anche un’area di lavoro Stage per il test. Pensate alle aree di lavoro come “ambienti”. Credenziali / Servizi Autorizzazioni che l’app può utilizzare. I valori predefiniti creati sono sufficienti per iniziare. -
Esistono due modi per creare un progetto:
- Automatico (scelta consigliata): Il comando
aio app initcrea automaticamente il progetto e le aree di lavoro durante la generazione del codice. Questo articolo descrive questo processo. - Manuale: Il progetto viene creato in Developer Console, quindi viene impostato su
aio. È consigliabile eseguire questa operazione solo se l’organizzazione richiede la creazione centralizzata dei progetti.
- Automatico (scelta consigliata): Il comando
-
Quando decidi quale area di lavoro utilizzare, sviluppa e distribuisci prima in Stage. Fusion carica una build di staging solo quando l’utente attiva il test di staging nel proprio profilo di Fusion (menu dell’avatar utente > Impostazioni prodotto > Profilo di Fusion > Preferenze > Estensioni di staging); in caso contrario, vengono visualizzate solo le estensioni di produzione pubblicate. Puoi anche visualizzare l’anteprima locale con
aio app run, quindi passare successivamente a Produzione.Per ulteriori informazioni sulla promozione in produzione, consulta Pubblicare la tua estensione.
Esegui aio app init
-
Apri un terminale.
-
Nel terminale, sposta nella cartella in cui tieni i progetti.
-
Esegui:
code language-sh aio app init my-fusion-extension --standalone-appmy-fusion-extensionè il nome della cartella/app. È possibile selezionare questo nome, ma utilizzare lettere minuscole, trattini e non spazi.--standalone-appindica all’interfaccia della riga di comando di creare una ossatura semplice dell’applicazione invece di chiedere di scegliere un modello di prodotto. Questa è la chiave per evitare il modello AEM (o qualsiasi altro).
-
Quando richiesto, seleziona la tua organizzazione (se appartieni a più organizzazioni).
-
Quando richiesto, selezionare Crea nuovo progetto e accettare il nome suggerito oppure scegliere un progetto vuoto esistente.
Il comando imposta automaticamente le aree di lavoro Stage e Produzione.
Il comando genera anche file nella cartella
my-fusion-extensioned eseguenpm install. -
Continua con Conferma creazione progetto.
aio app init my-fusion-extension > (senza --standalone-app). Quando viene chiesto a "Quali modelli si desidera cercare?" o mostra un elenco di controllo di modelli, non selezionare un modello di prodotto come AEM. Scegliere l'opzione per creare una applicazione autonoma / "Tutti i punti di estensione → nessuno".Verifica creazione progetto
-
Nel terminale, spostarsi nella cartella creata:
code language-sh cd my-fusion-extensionDovresti vedere una struttura simile a questa (alcuni file omessi):
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)I due file più importanti sono:
app.config.yaml: configurazione centrale. Successivamente verrà aggiunta una sezioneextensions:che collega l’app a un punto di estensione di Fusion.package.json: elenca le librerie utilizzate dall’app. Aggiungere qui la libreria guest di estendibilità dell’interfaccia utente di Adobe.
-
Continua con Aggiungi librerie richieste.
Aggiungi librerie richieste
L’estensione richiede due librerie:
@adobe/uix-guest: consente all’app di comunicare con Fusion (host).@adobe/react-spectrum: componenti dell’interfaccia utente React di Adobe, in modo che lo schermo corrisponda all’aspetto di Adobe. (Facoltativo ma consigliato; puoi utilizzare al suo posto il HTML normale.)
Per installare queste librerie:
-
Nel terminale, eseguire:
code language-sh npm install @adobe/uix-guest @adobe/react-spectrum -
(Condizionale) Se il progetto generato non include già React, installalo anche:
code language-sh npm install react react-dom react-router-dom -
Continua con Conferma le build del progetto.
Conferma le build del progetto
Prima di modificare qualsiasi elemento, assicurati che le build del progetto vuote vengano
-
Nel terminale, eseguire:
code language-sh aio app buildSe il completamento avviene senza errori, gli strumenti e il progetto vengono configurati correttamente. È ora possibile collegare il progetto a Fusion.
note tip TIP Se la compilazione non riesce, la causa più comune è una versione di Node.js non supportata. Eseguire node --versione verificare che sia 18 o 20.- Per informazioni sull'installazione di Node.js, consulta Configurare gli strumenti.
- Per informazioni su altri possibili errori, vedere Risoluzione dei problemi.
-
Continua con Configurare il progetto per Fusion.
Configurare il progetto per Fusion
Il passaggio successivo per configurare l’estensione personalizzata consiste nel collegare il progetto generico a Workfront Fusion.
Effettua le seguenti operazioni:
- Creare una cartella per l’estensione
- Informare App Builder di un punto di estensione di Fusion (in
app.config.yaml). - Descrivi i pezzi dell’estensione (in
ext.config.yaml). - Registra il widget in modo che Fusion conosca il titolo e la posizione dell’interfaccia utente.
Utilizziamo fusion/nav-organization/1 in tutto. Per eseguire il targeting della sezione Team, sostituisci in fusion/nav-team/1 ovunque. Per supportare entrambi, ripetete il pattern per ciascuno di essi.
Creare una cartella per l’estensione
-
Crea i file in modo che il progetto sia simile al seguente:
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.jsÈ consigliabile denominare la cartella dopo il punto di estensione (
fusion-nav-organization-1). Il nome esatto dipende da te, ma deve corrispondere a quello a cui si fa riferimento inapp.config.yaml. -
Continuare a Dichiarare il punto di estensione in
app.config.yaml.
Dichiara il punto di estensione in app.config.yaml
-
Apri
app.config.yamle aggiornane il contenuto in:code language-yaml extensions: fusion/nav-organization/1: $include: src/fusion-nav-organization-1/ext.config.yamlTali contenuti descrivono quanto segue:
extensions:: questa app implementa uno o più punti di estensione.fusion/nav-organization/1: lo slot Fusion in cui ci si sta collegando. Il nome deve corrispondere esattamente, inclusa la versione1.$include:: questo fa riferimento a un secondo file di configurazione (creato nel passaggio successivo) che descrive il contenuto di questa estensione. Mantenendolo in un file separato,app.config.yamlrimane pulito e consente di aggiungere altri punti di estensione in un secondo momento.
note NOTE Se esegui il targeting di entrambe le estensioni, elenca entrambe, ciascuna con la propria cartella: 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- Continua con Descrizione dell’estensione in
ext.config.yaml
Descrizione dell’estensione in ext.config.yaml
-
Crea
src/fusion-nav-organization-1/ext.config.yamlcon: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.jsTali contenuti descrivono quanto segue:
operations.view: dichiara che l’estensione fornisce una visualizzazione (interfaccia utente visibile), fornita daindex.html. In questo modo l’estensione viene visualizzata una schermata anziché essere eseguita solo in background.web: web-src: cartella contenente i file front-end. App Builder crea tutto qui sotto e lo ospita sulla rete CDN (Content Delivery Network) di Adobe.hooks: piccoli comandi eseguiti automaticamente in fase di compilazione/esecuzione. Lo scriptgenerate-metadata.jsviene fornito con@adobe/uix-gueste genera un fileapp-metadata.jsonnecessario per il codice di registrazione (vedere il passaggio 4). Non si scrive questo script, ma si fa semplicemente riferimento ad esso.
note NOTE Se è necessaria anche una logica lato server, è possibile aggiungere anche actionssenza server (piccole funzioni di back-end). Le azioni sono facoltative e non sono necessarie per eseguire il rendering di un’interfaccia utente, pertanto non sono necessarie per mantenere attiva questa guida. Se li aggiungi in un secondo momento, dichiarali una cartellaactions:qui e unaruntimeManifest:inapp.config.yaml. Il motivo più comune per aggiungerne uno è quello di chiamare le API Workfront/Fusion senza premere CORS del browser.
Per informazioni sulla chiamata delle API, vedere Chiamata delle API Workfront e Fusion. -
Continua con Imposta un ID estensione stabile.
Imposta un ID di estensione stabile
L’estensione richiede un ID univoco condiviso da entrambi i fotogrammi.
Per informazioni sui frame in relazione alle estensioni personalizzate, vedere Frame inclusi in un’estensione dell’interfaccia utente.
-
Crea
src/fusion-nav-organization-1/web-src/src/components/Constants.js:code language-js module.exports = { extensionId: 'my-fusion-extension' };Utilizza lo stesso valore in tutti i casi in cui il codice fa riferimento all’ID estensione.
-
Continua con Registra widget.
Registra il widget
Con “Registrazione” si intende il modo in cui il frame di sfondo nascosto comunica a Fusion le offerte della tua estensione. Dichiara un metodo dashboard.getWidget() che restituisce il titolo del widget e l’URL della relativa interfaccia utente visibile.
-
Crea
src/fusion-nav-organization-1/web-src/src/components/ExtensionRegistration.js.
La parte importante è la chiamataregister(...):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);Punti chiave:
titleè l’etichetta inserita da Fusion sul pulsante di navigazione. SehideWidgetHeaderèfalse, Fusion mostrerà anche il titolo come intestazione sopra l’interfaccia utente.urlè il percorso per l’interfaccia utente di visible all’interno della stessa app. Questa è una route hash (#/my-widget) gestita dal router front-end (configurato nella pagina successiva). Deve risolversi nel componente che esegue il rendering dello schermo.metadataproviene daapp-metadata.json, che l’hookgenerate-metadatacrea automaticamente in fase di compilazione. Importa come mostrato.- Il nome del metodo
dashboard.getWidgetè il contratto concordato con le chiamate Fusion per l’individuazione del widget. Mantieni lo spazio dei nomidashboarde il nomegetWidget.
Il backend dell’estensione è ora completo. Il passaggio successivo per creare l’interfaccia utente dell’estensione.
Per istruzioni sulla creazione dell’interfaccia utente, vedere Creare l’interfaccia utente dell’estensione personalizzata.