Criar um projeto para Extensibilidade da interface
Para criar uma extensão personalizada de interface do usuário, você deve criar um projeto do App Builder para ela.
Esta página descreve como gerar um projeto App Builder genérico com a linha de comando aio. “Genérico” significa que o projeto não inicia a partir de um modelo específico do produto. Começar com um aplicativo genérico mantém o projeto simples e permite que ele se conecte com o Workfront Fusion.
Pode ser útil se familiarizar com os seguintes conceitos e terminologia relacionados à criação de um projeto para uso com a Extensibilidade de IA do Adobe Fusion.
-
O Adobe Developer Console (https://developer.adobe.com/console) é o painel da Web onde o projeto está.
-
Terminologia:
table 0-row-2 1-row-2 2-row-2 3-row-2 4-row-2 Termo O que significa Organização A organização da Adobe da sua empresa. A mesma organização usada no Fusion. Projeto Um container para um aplicativo/extensão. Você criará um projeto para sua extensão. Workspace Uma cópia da configuração do projeto para uma fase de trabalho. Todos os projetos têm um espaço de trabalho de Produção, e você normalmente também usa um espaço de trabalho de Preparo para testes. Pense em espaços de trabalho como “ambientes”. Credenciais/Serviços Permissões que seu aplicativo tem permissão para usar. Os padrões criados para você são suficientes para começar. -
Há duas maneiras de criar um projeto:
- Automático (recomendado): O comando
aio app initcria o projeto e os espaços de trabalho para você ao gerar o código. Este artigo descreve esse processo. - Manual: Crie primeiro o projeto por conta própria na Developer Console e depois aponte
aiopara ele. Recomendamos fazer isso somente se sua organização exigir que os projetos sejam criados centralmente.
- Automático (recomendado): O comando
-
Ao decidir qual espaço de trabalho usar, desenvolva e implante primeiro em Preparar. O Fusion carrega uma criação de Palco somente quando o usuário ativa o teste de Preparo em seu perfil do Fusion (menu de avatar do usuário > Configurações do produto > Perfil do Fusion > Preferências > Extensões de preparo); caso contrário, somente as extensões de Produção publicadas serão exibidas. Você também pode visualizar localmente com
aio app rune, em seguida, promover para Produção mais tarde.Para obter mais informações sobre a promoção para produção, consulte Publicar sua extensão.
Executar aio app init
-
Abra um terminal.
-
No terminal, mova para a pasta onde você mantém os projetos.
-
Executar:
code language-sh aio app init my-fusion-extension --standalone-appmy-fusion-extensioné o nome da pasta/aplicativo. Você pode selecionar esse nome, mas usar letras minúsculas, hifens e sem espaços.- O
--standalone-appinstrui a CLI a criar um esqueleto de aplicativo simples, em vez de pedir que você escolha um modelo de produto. Essa é a chave para evitar o modelo AEM (ou qualquer outro).
-
Quando solicitado, selecione sua Organização (se você pertencer a mais de uma).
-
Quando solicitado, selecione Criar novo projeto e aceite o nome sugerido, ou escolha um projeto vazio existente.
O comando configura os espaços de trabalho Preparo e Produção automaticamente.
O comando também gera arquivos na pasta
my-fusion-extensione executanpm install. -
Prossiga para Confirmar criação do projeto.
aio app init my-fusion-extension > (sem --standalone-app). Quando ele pergunta "Quais modelos você deseja pesquisar?" ou mostra uma lista de verificação de modelos, não selecione um modelo de produto como o AEM. Escolha a opção para criar um aplicativo independente / "Todos os pontos de extensão → nenhum".Verificar criação de projeto
-
No terminal, mova para a pasta criada:
code language-sh cd my-fusion-extensionVocê deve ver uma estrutura semelhante a esta (alguns arquivos omitidos):
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)Os dois arquivos mais importantes para você são:
app.config.yaml: A configuração central. Em uma parte posterior do processo, você adicionará uma seçãoextensions:aqui que conecta seu aplicativo a um ponto de extensão do Fusion.package.json: lista as bibliotecas que seu aplicativo usa. Você adicionará a biblioteca de convidados Extensibilidade da interface do usuário do Adobe aqui.
-
Continue em Adicionar bibliotecas necessárias.
Adicionar bibliotecas necessárias
Sua extensão precisa de duas bibliotecas:
@adobe/uix-guest: Permite que seu aplicativo se comunique com o Fusion (o host).@adobe/react-spectrum: componentes da interface do usuário React do Adobe, de modo que sua tela corresponda à aparência do Adobe. (Opcional, mas recomendado; você pode usar HTML simples.)
Para instalar essas bibliotecas:
-
No terminal, execute:
code language-sh npm install @adobe/uix-guest @adobe/react-spectrum -
(Condicional) Se o projeto gerado ainda não incluir o React, instale-o também:
code language-sh npm install react react-dom react-router-dom -
Continue para Confirmar as compilações do projeto.
Confirmar as compilações do projeto
Antes de alterar qualquer coisa, verifique se o projeto vazio é compilado
-
No terminal, execute:
code language-sh aio app buildSe isso for concluído sem erros, as ferramentas e o projeto serão configurados corretamente. Você está pronto para conectar o projeto ao Fusion.
note tip TIP Se a compilação falhar, a causa mais comum é uma versão Node.js não suportada. Execute node --versione verifique se ele é 18 ou 20.- Para obter informações sobre como instalar o Node.js, consulte Configurar as ferramentas.
- Para obter informações sobre outros possíveis erros, consulte Solução de problemas.
-
Continue em Configurar o projeto para Fusion.
Configurar o projeto para Fusion
A próxima etapa na configuração da extensão personalizada é conectar o projeto genérico ao Workfront Fusion.
Você vai:
- Criar uma pasta para sua extensão
- Conte à App Builder sobre um ponto de extensão do Fusion (em
app.config.yaml). - Descreva as partes da sua extensão (em
ext.config.yaml). - Registre seu widget para que o Fusion saiba seu título e onde está sua interface do usuário.
Usamos fusion/nav-organization/1 em todo o. Para direcionar a seção Equipe, troque fusion/nav-team/1 em todos os lugares. Para suportar ambos, repita o padrão para cada um.
Criar uma pasta para sua extensão
-
Crie os arquivos para que o projeto tenha esta aparência:
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.jsRecomendamos nomear a pasta após o ponto de extensão (
fusion-nav-organization-1). O nome exato depende de você, mas deve corresponder ao que você menciona emapp.config.yaml. -
Continuar para Declarar o ponto de extensão em
app.config.yaml.
Declarar o ponto de extensão em app.config.yaml
-
Abrir
app.config.yamle atualizar seu conteúdo para:code language-yaml extensions: fusion/nav-organization/1: $include: src/fusion-nav-organization-1/ext.config.yamlEsse conteúdo descreve o seguinte:
extensions:: este aplicativo implementa um ou mais pontos de extensão.fusion/nav-organization/1: o slot Fusion ao qual você está se conectando. O nome deve corresponder exatamente, incluindo a versão1.$include:: aponta para um segundo arquivo de configuração (criado na próxima etapa) que descreve o conteúdo dessa extensão. Manter em um arquivo separado mantémapp.config.yamllimpo e permite que você adicione mais pontos de extensão posteriormente.
note NOTE Se você estiver direcionando ambas as extensões, liste ambas, cada uma com sua própria pasta: 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 para Descrever a extensão em
ext.config.yaml
Descrever a extensão em ext.config.yaml
-
Criar
src/fusion-nav-organization-1/ext.config.yamlcom: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.jsEsse conteúdo descreve o seguinte:
operations.view: Declara que sua extensão fornece uma visualização (uma interface visível), veiculada a partir deindex.html. É isso que faz com que sua extensão mostre uma tela em vez de ser executada somente em segundo plano.web: web-src: a pasta que armazena seus arquivos front-end. O App Builder cria tudo aqui e o hospeda na Rede de entrega de conteúdo (CDN) da Adobe.hooks: pequenos comandos que são executados automaticamente em tempo de compilação/execução. O scriptgenerate-metadata.jsvem com@adobe/uix-gueste produz um arquivoapp-metadata.jsonde que seu código de registro precisa (consulte a Etapa 4). Você não escreve esse script; você só faz referência a ele.
note NOTE Se também precisar de lógica do lado do servidor, você também pode adicionar actionssem servidor (pequenas funções de back-end). As ações são opcionais e não são necessárias para renderizar uma interface do usuário, portanto, as deixamos de fora para manter este guia focalizado. Se você os adicionar posteriormente, declare uma pastaactions:aqui e umruntimeManifest:emapp.config.yaml. O motivo mais comum para adicionar um é chamar APIs do Workfront/Fusion sem acessar o CORS do navegador.
Para obter informações sobre como chamar APIs, consulte Chamada de APIs do Workfront e Fusion. -
Continue para Definir uma ID de extensão estável.
Definir uma ID de extensão estável
Sua extensão requer uma ID exclusiva que ambos os quadros compartilham.
Para obter informações sobre quadros em relação a extensões personalizadas, consulte Quadros incluídos em uma Extensão de Interface do Usuário.
-
Criar
src/fusion-nav-organization-1/web-src/src/components/Constants.js:code language-js module.exports = { extensionId: 'my-fusion-extension' };Use o mesmo valor em todos os locais em que o código se refere à id da extensão.
-
Continue em Registrar seu widget.
Registrar seu widget
“Registro” é como o quadro de fundo oculto informa ao Fusion o que sua extensão oferece. Você declara um método dashboard.getWidget() que retorna o título do widget e a URL da interface visível.
-
Criar
src/fusion-nav-organization-1/web-src/src/components/ExtensionRegistration.js.
A parte importante é a chamadaregister(...):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);Pontos principais:
titleé o rótulo que o Fusion coloca no botão de navegação. SehideWidgetHeaderforfalse, o Fusion também mostrará o título como um cabeçalho acima da interface do usuário.urlé a rota para sua interface do usuário visível dentro deste mesmo aplicativo. Aqui está uma rota de hash (#/my-widget) manipulada pelo seu roteador front-end (configurado na próxima página). Ele deve resolver para o componente que renderiza sua tela.metadatavem deapp-metadata.json, que o ganchogenerate-metadatacria para você no momento da compilação. Importe-o como mostrado.- O nome do método
dashboard.getWidgeté o contrato acordado que o Fusion chama para descobrir seu widget. Mantenha o namespacedashboarde o nomegetWidget.
O back-end da sua extensão agora está concluído. A próxima etapa para criar a interface do usuário da extensão.
Para obter instruções sobre como criar a interface, consulte Criar a interface de extensão personalizada.