Creare un progetto per l’estendibilità dell’interfaccia utente

NOTE
Questo articolo presuppone una certa familiarità con gli strumenti di sviluppo software.

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 init crea 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.
  • 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

  1. Apri un terminale.

  2. Nel terminale, sposta nella cartella in cui tieni i progetti.

  3. Esegui:

    code language-sh
    aio app init my-fusion-extension --standalone-app
    
    • my-fusion-extension è il nome della cartella/app. È possibile selezionare questo nome, ma utilizzare lettere minuscole, trattini e non spazi.
    • --standalone-app indica 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).
  4. Quando richiesto, seleziona la tua organizzazione (se appartieni a più organizzazioni).

  5. 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-extension ed esegue npm install.

  6. Continua con Conferma creazione progetto.

NOTE
Se si preferisce il menu interattivo: eseguire 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

  1. Nel terminale, spostarsi nella cartella creata:

    code language-sh
    cd my-fusion-extension
    

    Dovresti 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 sezione extensions: 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.
  2. Continua con Aggiungi librerie richieste.

TIP
Non preoccuparti se il layout generato è leggermente diverso tra le versioni CLI. Questa procedura indica esattamente quali file creare e cosa inserirvi, in modo da poter corrispondere alla struttura prevista indipendentemente dal punto di partenza.

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:

  1. Nel terminale, eseguire:

    code language-sh
    npm install @adobe/uix-guest @adobe/react-spectrum
    
  2. (Condizionale) Se il progetto generato non include già React, installalo anche:

    code language-sh
    npm install react react-dom react-router-dom
    
  3. 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

  1. Nel terminale, eseguire:

    code language-sh
    aio app build
    

    Se 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 --version e verificare che sia 18 o 20.
  2. 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:

  1. Creare una cartella per l’estensione
  2. Informare App Builder di un punto di estensione di Fusion (in app.config.yaml).
  3. Descrivi i pezzi dell’estensione (in ext.config.yaml).
  4. 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

  1. 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 in app.config.yaml.

  2. Continuare a Dichiarare il punto di estensione in app.config.yaml.

Dichiara il punto di estensione in app.config.yaml

  1. Apri app.config.yaml e aggiornane il contenuto in:

    code language-yaml
    extensions:
      fusion/nav-organization/1:
        $include: src/fusion-nav-organization-1/ext.config.yaml
    

    Tali 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 versione 1.
    • $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.yaml rimane 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
    
    1. Continua con Descrizione dell’estensione in ext.config.yaml

Descrizione dell’estensione in ext.config.yaml

  1. Crea src/fusion-nav-organization-1/ext.config.yaml con:

    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.js
    

    Tali contenuti descrivono quanto segue:

    • operations.view: dichiara che l’estensione fornisce una visualizzazione (interfaccia utente visibile), fornita da index.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 script generate-metadata.js viene fornito con @adobe/uix-guest e genera un file app-metadata.json necessario 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 actions senza 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 cartella actions: qui e una runtimeManifest: in app.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.
  2. 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.

  1. 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.

  2. 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.

  1. Crea src/fusion-nav-organization-1/web-src/src/components/ExtensionRegistration.js.
    La parte importante è la chiamata register(...):

    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. Se hideWidgetHeader è 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.
    • metadata proviene da app-metadata.json, che l’hook generate-metadata crea 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 nomi dashboard e il nome getWidget.

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.

recommendation-more-help
workfront-fusion-help-workfront-fusion