Creación de un proyecto para la extensibilidad de IU
Para crear una extensión de IU personalizada, debe crear un proyecto de App Builder para ella.
En esta página se describe cómo generar un proyecto de App Builder genérico con la línea de comandos aio. “Genérico” significa que el proyecto no se inicia a partir de una plantilla específica de producto. Comenzar con una aplicación genérica mantiene el proyecto sencillo y le permite conectarse con Workfront Fusion.
Puede resultar útil familiarizarse con los siguientes conceptos y terminología relativos a la creación de un proyecto para utilizarlo con la extensibilidad de Adobe Fusion AI.
-
Adobe Developer Console (https://developer.adobe.com/console) es el tablero web donde se encuentra el proyecto.
-
Terminología:
table 0-row-2 1-row-2 2-row-2 3-row-2 4-row-2 Término Lo que significa Organización La organización de Adobe de su empresa. La misma organización que utiliza en Fusion. Proyecto Un contenedor para una aplicación o extensión. Creará un proyecto para la extensión. Workspace Una copia de la configuración del proyecto para una fase de trabajo. Cada proyecto tiene un área de trabajo de Producción, y normalmente también se usa un área de trabajo de Ensayo para realizar pruebas. Piense en espacios de trabajo como “entornos”. Credenciales / Servicios Permisos que la aplicación puede utilizar. Los valores predeterminados creados para usted son suficientes para comenzar. -
Existen dos formas de crear un proyecto:
- Automático (recomendado): El comando
aio app initcrea el proyecto y los espacios de trabajo al generar el código. Este artículo describe este proceso. - Manual: Primero cree usted mismo el proyecto en Developer Console y después apunte
aiohacia él. Recomendamos hacerlo solo si su organización requiere que los proyectos se creen de forma centralizada.
- Automático (recomendado): El comando
-
Al decidir qué área de trabajo usar, desarrolle e implemente primero en Stage. Fusion carga una compilación de fase solo cuando el usuario activa la prueba de fase en su perfil de Fusion (menú de avatar del usuario > Configuración del producto > Perfil de Fusion > Preferencias > Extensiones de fase); de lo contrario, solo aparecen las extensiones de producción publicadas. También puede obtener una vista previa local con
aio app runy luego promocionarla a Producción más adelante.Para obtener más información sobre cómo promocionar a producción, consulte Publicar su extensión.
Ejecutar aio app init
-
Abra un terminal.
-
En el terminal, desplácese a la carpeta donde guarda los proyectos.
-
Ejecutar:
code language-sh aio app init my-fusion-extension --standalone-appmy-fusion-extensiones el nombre de la carpeta/aplicación. Puede seleccionar este nombre, pero puede usar letras minúsculas, guiones y sin espacios.--standalone-appindica a la CLI que cree un esqueleto de aplicación sin formato en lugar de pedirle que elija una plantilla de producto. Esta es la clave para evitar la plantilla de AEM (o cualquier otra).
-
Cuando se le solicite, seleccione su organización (si pertenece a más de una).
-
Cuando se le solicite, seleccione Crear nuevo proyecto y acepte el nombre sugerido, o elija un proyecto vacío existente.
El comando configura los espacios de trabajo Stage y Production automáticamente.
El comando también genera archivos en la carpeta
my-fusion-extensiony ejecutanpm install. -
Continuar a Confirmar creación de proyecto.
aio app init my-fusion-extension > (sin --standalone-app). Cuando se pregunta a "¿Qué plantillas desea buscar?" o muestra una lista de comprobación de plantillas, no seleccione una plantilla de producto como AEM. Elija la opción para crear una aplicación independiente / "Todos los puntos de extensión → ninguno".Compruebe la creación del proyecto
-
En el terminal, desplácese a la carpeta creada:
code language-sh cd my-fusion-extensionDebería ver una estructura similar a esta (se omiten algunos archivos):
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)Los dos archivos que más le importan son:
app.config.yaml: la configuración central. Más adelante en el proceso agregará aquí una secciónextensions:que conecta su aplicación a un punto de extensión de Fusion.package.json: enumera las bibliotecas que usa su aplicación. Aquí agregará la biblioteca de invitados de extensibilidad de la IU de Adobe.
-
Continuar a Agregar bibliotecas requeridas.
Añadir bibliotecas requeridas
La extensión necesita dos bibliotecas:
@adobe/uix-guest: permite que la aplicación hable con Fusion (el host).@adobe/react-spectrum: los componentes de la interfaz de usuario de React de Adobe, por lo que la pantalla coincide con la apariencia de Adobe. (Opcional, pero recomendada; puede utilizar HTML sin formato en su lugar).
Para instalar estas bibliotecas:
-
En el terminal, ejecute:
code language-sh npm install @adobe/uix-guest @adobe/react-spectrum -
(Condicional) Si el proyecto generado no incluye ya React, instálelo también:
code language-sh npm install react react-dom react-router-dom -
Continuar a Confirmar las compilaciones del proyecto.
Confirmar las versiones del proyecto
Antes de cambiar nada, asegúrese de que el proyecto vacío se compila
-
En el terminal, ejecute:
code language-sh aio app buildSi esto termina sin errores, las herramientas y el proyecto se configuran correctamente. Está listo para conectar el proyecto a Fusion.
note tip TIP Si la compilación falla, la causa más común es una versión no compatible de Node.js. Ejecute node --versiony asegúrese de que sea 18 o 20.- Para obtener información sobre la instalación de Node.js, consulte Configurar las herramientas.
- Para obtener información sobre otros posibles errores, consulte Solución de problemas.
-
Continúe con Configurar el proyecto para Fusion.
Configuración del proyecto para Fusion
El siguiente paso para configurar la extensión personalizada es conectar el proyecto genérico a Workfront Fusion.
Lo hará:
- Cree una carpeta para la extensión
- Informe a App Builder sobre un punto de extensión de Fusion (en
app.config.yaml). - Describa los fragmentos de su extensión (en
ext.config.yaml). - Registre su widget para que Fusion sepa su título y dónde reside su interfaz de usuario.
Utilizamos fusion/nav-organization/1 en todo. Para dirigirse a la sección Equipo, cambie fusion/nav-team/1 en todas partes. Para admitir ambos, repita el patrón para cada uno.
Cree una carpeta para la extensión
-
Cree los archivos para que el proyecto tenga este aspecto:
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.jsSe recomienda nombrar la carpeta después del punto de extensión (
fusion-nav-organization-1). El nombre exacto depende de usted, pero debe coincidir con lo que hace referencia enapp.config.yaml. -
Continuar a Declarar el punto de extensión en
app.config.yaml.
Declarar el punto de extensión en app.config.yaml
-
Abra
app.config.yamly actualice su contenido a:code language-yaml extensions: fusion/nav-organization/1: $include: src/fusion-nav-organization-1/ext.config.yamlEstos contenidos describen lo siguiente:
extensions:: esta aplicación implementa uno o más puntos de extensión.fusion/nav-organization/1: la ranura Fusion en la que se está conectando. El nombre debe coincidir exactamente con, incluida la versión1.$include:: esto apunta a un segundo archivo de configuración (creado en el siguiente paso) que describe el contenido de esta extensión. Si lo mantiene en un archivo independiente,app.config.yamlse mantendrá limpio y le permitirá agregar más puntos de extensión más adelante.
note NOTE Si va a segmentar ambas extensiones, enumere ambas, cada una con su propia carpeta: 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- Continuar a Describir la extensión en
ext.config.yaml
Describir la extensión en ext.config.yaml
-
Crear
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.jsEstos contenidos describen lo siguiente:
operations.view: declara que su extensión proporciona una vista (una interfaz de usuario visible), ofrecida desdeindex.html. Esto es lo que hace que la extensión muestre una pantalla en lugar de ejecutarse solo en segundo plano.web: web-src: la carpeta que contiene los archivos front-end. App Builder crea todo lo que hay debajo de aquí y lo aloja en la red de distribución de contenido (CDN) de Adobe.hooks: comandos pequeños que se ejecutan automáticamente en tiempo de compilación/ejecución. El scriptgenerate-metadata.jsse enviará con@adobe/uix-guesty producirá un archivo deapp-metadata.jsonque su código de registro necesita (consulte el paso 4). No se escribe esta secuencia de comandos; simplemente se hace referencia a ella.
note NOTE Si también necesita lógica del lado del servidor, también puede agregar actionssin servidor (funciones backend pequeñas). Las acciones son opcionales y no son necesarias para procesar una interfaz de usuario, por lo que no se incluyen en esta guía. Si los agrega más adelante, declare una carpetaactions:aquí y unruntimeManifest:enapp.config.yaml. El motivo más común para agregar uno es llamar a las API de Workfront/Fusion sin visitar el navegador CORS.
Para obtener información sobre cómo llamar a las API, consulte Llamar a las API de Workfront y Fusion. -
Continuar a Establecer un Id. de extensión estable.
Establecimiento de un ID de extensión estable
La extensión requiere un ID único que compartan ambos marcos.
Para obtener información sobre los marcos en relación con las extensiones personalizadas, consulte Marcos incluidos en una extensión de interfaz de usuario.
-
Crear
src/fusion-nav-organization-1/web-src/src/components/Constants.js:code language-js module.exports = { extensionId: 'my-fusion-extension' };Utilice el mismo valor en cualquier lugar donde el código haga referencia al ID de extensión.
-
Continuar a Registrar tu widget.
Registre el widget
“Registro” es la forma en que el marco de fondo oculto le dice a Fusion lo que ofrece su extensión. Usted declara un método dashboard.getWidget() que devuelve el título del widget y la dirección URL de su interfaz de usuario visible.
-
Crear
src/fusion-nav-organization-1/web-src/src/components/ExtensionRegistration.js.
La parte importante es la llamada aregister(...):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);Puntos clave:
titlees la etiqueta que Fusion pone en el botón de navegación. SihideWidgetHeaderesfalse, Fusion también muestra el título como un encabezado sobre la interfaz de usuario.urles la ruta a la interfaz de usuario visible dentro de esta misma aplicación. Aquí hay una ruta hash (#/my-widget) que administra su enrutador front-end (configurada en la página siguiente). Debe resolverse en el componente que procesa la pantalla.metadataproviene deapp-metadata.json, que el vínculogenerate-metadatacrea para usted en el momento de la compilación. Importe como se muestra.- El nombre de método
dashboard.getWidgetson las llamadas de Fusion de contrato acordadas para descubrir su widget. Conservar el espacio de nombresdashboardy el nombregetWidget.
El back-end de la extensión ya está completo. El siguiente paso es crear la interfaz de usuario de la extensión.
Para obtener instrucciones sobre cómo crear la interfaz de usuario, consulte Crear la interfaz de usuario de la extensión personalizada.