Navegação baseada em intent
A navegação baseada em intent é o modelo de navegação do SAP Fiori em que um tile, link ou app solicita um intent, um semantic object mais uma ação escritos como #SemanticObject-action, em vez de um aplicativo concreto. O launchpad resolve o intent em tempo de execução pelos target mappings das roles do usuário, de modo que um link pode abrir apps diferentes por role ou dispositivo.
Resumo
- Tipo
- Conceito de navegação (resolução de intents em tempo de execução)
- Camada
- Conteúdo, navegação e acesso
- Sintaxe do intent
- #SemanticObject-action?parameter=value
- Resolvido por
- Target mappings nos catálogos (launchpad ABAP); inbounds do app descriptor (SAP BTP)
- API para desenvolvedores
- sap.ushell.services.Navigation (substitui CrossApplicationNavigation, descontinuado desde o SAPUI5 1.120)
- Diagnóstico com
- /UI2/FLIA (análise de intents)
- Aplica-se a
- SAP S/4HANA (todas as opções de implantação), SAP BTP e SAP Build Work Zone
Camada: Conteúdo, navegação e acessoOnde se encaixa ▾
Camada: Conteúdo, navegação e acesso
Abrir o mapa de arquitetura →O usuário abre o SAP Fiori Launchpad. O launchpad carrega os spaces, pages e tiles concedidos pelos business roles do usuário. Nenhum código de aplicação é executado ainda.
Relacionados:SAP Fiori Launchpad · Business Role · Spaces e Pages
O tile não contém um app. Ele dispara um intent — um semantic object mais uma ação, como PurchaseOrder-display — com parâmetros opcionais.
Relacionados:Tile · Semantic Object · Navegação baseada em intent
O launchpad procura os target mappings nos catálogos dos roles do usuário e os filtra por tipo de dispositivo e por parâmetros. Se nada corresponder, o usuário vê um erro de navegação.
Relacionados:Target Mapping · Catálogos (technical e business) · /UI2/FLIA
O target mapping correspondente inicia o destino: um app SAPUI5 ou SAP Fiori elements, uma transação SAP GUI for HTML, uma aplicação Web Dynpro ABAP ou uma URL.
Relacionados:Target Mapping · SAP Fiori Elements · SAP GUI for HTML (Web GUI)
Como funciona a navegação baseada em intent?
No SAP Fiori Launchpad, a parte da URL depois de # é um intent, não um endereço de aplicativo. Um intent típico tem esta forma: #PurchaseOrder-display?PurchaseOrder=4500000123.
- O usuário clica em um tile ou link, ou um app dispara a navegação em código. Cada um deles nomeia apenas o semantic object, a ação e parâmetros opcionais.
- O launchpad verifica quais intents o usuário pode usar. No launchpad ABAP, eles vêm dos catálogos das roles PFCG do usuário.
- A resolução de destino do launchpad compara o intent com os target mappings disponíveis, incluindo tipo de dispositivo e regras de parâmetros.
- O target mapping vencedor fornece o aplicativo: um componente SAPUI5, uma transação SAP GUI for HTML, um aplicativo Web Dynpro ABAP ou uma URL, além do sistema em que ele é executado.
- O launchpad inicia o destino e repassa os parâmetros.
O lado chamador nunca sabe qual app respondeu. A navegação baseada em intent é um contrato de vinculação tardia entre o que o usuário quer fazer e o app que o faz.
Por que o SAP Fiori usa intents em vez de URLs diretas?
A indireção resolve problemas reais de ciclo de vida:
- Destinos específicos por role. O mesmo intent pode abrir uma visão de gestor para uma role e uma visão de operador para outra, apenas por configuração.
- Destinos específicos por dispositivo. Um usuário de desktop e um usuário de smartphone podem chegar a apps diferentes pelo mesmo link.
- Apps substituíveis. Um intent pode apontar hoje para um aplicativo Web Dynpro ABAP e mais tarde para um novo app SAPUI5, sem alterar os apps que apontam para ele.
- Implantação independente. Os apps têm ciclos de vida diferentes; um app de origem não pode presumir que um app de destino esteja instalado. Os intents deixam o launchpad decidir o que existe para este usuário, neste sistema.
- Extensão sem modificação. Os clientes podem redirecionar um intent standard para um app customizado sem tocar no código SAP.
Essas propriedades explicam por que os apps SAP Fiori se vinculam uns aos outros por intents, e não por endereços fixos no código. A navegação baseada em intent troca um pouco de esforço de configuração por apps que podem evoluir de forma independente.
Como os desenvolvedores disparam a navegação baseada em intent?
- SAP Fiori elements: campos anotados com um semantic object se tornam smart links, e a navegação de saída é declarada por anotações e pelo app descriptor. O framework chama o launchpad em nome do desenvolvedor.
- App descriptor:
sap.app→crossNavigationdeclara inbounds (os intents que um app aceita, com regras de parâmetros, como o tratamento de parâmetros adicionais: permitidos, ignorados ou não permitidos) e outbounds (os intents que um app pode disparar). - SAPUI5 freestyle: o serviço de shell
sap.ushell.services.Navigationoferece métodos assíncronos para navegar, montar um link, verificar se um intent é suportado para o usuário e listar os links de um semantic object. O serviço mais antigoCrossApplicationNavigationestá descontinuado desde o SAPUI5 1.120.
Os desenvolvedores devem verificar se um intent é suportado antes de renderizar um link, porque o suporte varia por usuário. A navegação baseada em intent em código é uma solicitação ao launchpad, nunca uma chamada direta a outro app.
Onde termina a navegação baseada em intent?
- Ela precisa de um runtime de launchpad ou de site. Os intents são resolvidos pelo shell. A SAP descreve o serviço Navigation como atuando no escopo do launchpad atual, de modo que um app aberto isoladamente, fora do launchpad ou de um site do SAP Build Work Zone, não tem serviço para resolvê-los.
- Os erros aparecem em tempo de execução. Um target mapping ausente ou uma role errada se manifestam quando o usuário clica, não quando o conteúdo é transportado; por isso, testar por role é importante.
- Os parâmetros viajam na URL. Seleções grandes precisam de um app state em vez de parâmetros de URL, e valores sensíveis não devem ser colocados em um intent.
- Destinos entre sistemas dependem de configuração. Um destino em outro sistema depende de um system alias ou destination correto.
- Navegação não é estado de processo. Um intent abre um app com contexto; ele não registra o que o usuário faz em seguida, se uma tarefa está concluída ou o que vem depois.
Esses limites decorrem do desenho: a navegação baseada em intent resolve para onde ir e deixa o que acontece lá para o app de destino.
Como diagnosticar um intent que falhou?
No launchpad ABAP, siga as evidências em vez de editar o conteúdo primeiro:
- Leia o intent na barra de endereços do navegador ou na mensagem do console.
- Se o console mostrar um ID de log de aplicação, abra o log de aplicação UI2 na SLG1; a partir da mensagem, é possível saltar para a análise de intents.
- Execute a /UI2/FLIA com o intent, o tipo de dispositivo e o usuário afetado. Ela mostra quais roles e catálogos carregam o intent e qual target mapping pertence a ele.
- Se o target mapping estiver correto, mas o app carregar no sistema errado, verifique os system aliases com a /UI2/FSAC.
- Se um componente SAPUI5 não puder ser carregado, verifique o log do índice de aplicações SAPUI5 com a /UI5/APP_INDEX_CALCULATE.
No SAP BTP, compare o intent do tile com os inbounds do app descriptor implantado. Um intent que falhou costuma ser um problema de conteúdo ou de role, e as ferramentas da navegação baseada em intent mostram qual deles antes que algo seja alterado.
Como funciona a navegação baseada em intent no SAP BTP e no SAP Build Work Zone?
A sintaxe e a ideia são as mesmas; muda apenas a origem dos target mappings. Os apps implantados no SAP BTP declaram seus inbounds no app descriptor, e o SAP Build Work Zone trata esses inbounds como os destinos do site. Os apps do SAP S/4HANA chegam a um site do Work Zone pela Federation of Remote Content Providers, que expõe o conteúdo do launchpad do back-end ao site. Em todas as opções de implantação, a navegação baseada em intent mantém o mesmo contrato: um intent entra, e o conteúdo do usuário decide qual app sai.
Navegação baseada em intent vs. target mapping vs. URL fixa no código: qual é a diferença?
| Navegação baseada em intent | Target mapping | URL fixa no código | |
|---|---|---|---|
| O que é | Modelo de navegação: solicitar um intent | Regra que resolve um intent para um app | Link direto para um endereço de aplicativo |
| Quando é decidido | Em tempo de execução, por usuário e dispositivo | Na configuração, aplicado em tempo de execução | No desenvolvimento |
| Respeita as roles | Sim, pelos catálogos do usuário | Sim, quando seu catálogo está nas roles do usuário | Não, o link aparece independentemente do acesso |
| Mudar o destino | Alterar a configuração, não o código | Editar ou substituir o mapping | Alterar e reimplantar o app chamador |
A navegação baseada em intent é o modelo, um target mapping é uma regra dentro dele e uma URL fixa no código o contorna.
Perguntas frequentes
O que é um intent no SAP Fiori?
Um intent é a combinação de um semantic object e uma ação, como PurchaseOrder-display, opcionalmente com parâmetros. Ele expressa o que o usuário quer fazer. O SAP Fiori Launchpad o resolve para um app concreto pelos target mappings disponíveis nas roles do usuário.
Navegação baseada em intent é o mesmo que navegação cross-app?
Na prática do SAP Fiori, sim. Navegação cross-app ou cross-application descreve a passagem de um app para outro, e a navegação baseada em intent é o mecanismo que a faz funcionar. O serviço SAPUI5 mais antigo chegava a se chamar CrossApplicationNavigation antes de a SAP substituí-lo pelo serviço Navigation.
Por que o mesmo link abre apps diferentes para usuários diferentes?
Porque o launchpad resolve o intent com base nos target mappings de cada usuário. Roles diferentes podem conter target mappings diferentes para o mesmo intent, e os target mappings também podem variar por tipo de dispositivo, de modo que um link pode legitimamente abrir apps diferentes.
O CrossApplicationNavigation está descontinuado?
Sim. O serviço SAPUI5 sap.ushell.services.CrossApplicationNavigation está descontinuado desde a versão 1.120. Código novo e código em manutenção devem usar sap.ushell.services.Navigation, que oferece métodos assíncronos para navegar, montar links e verificar se um intent é suportado.
Como vejo qual app um intent abre para um usuário?
No launchpad ABAP, execute a /UI2/FLIA com o intent, o tipo de dispositivo e o usuário. Ela lista as roles e os catálogos que carregam o intent e o target mapping que pertence a ele. No SAP BTP, verifique os inbounds no descriptor do app de destino.
Fontes
- SAP Help Portal: Intent-Based Navigation (SAP Fiori launchpad, ABAP platform)
- SAP Help Portal: Issues with Navigation (SAP Fiori launchpad troubleshooting)
- SAPUI5 SDK: Manifest (descriptor for applications) — crossNavigation inbounds and outbounds
- SAPUI5 SDK: API reference — sap.ushell.services.Navigation
- Aplica-se a
- SAP S/4HANA on-premise · SAP S/4HANA Cloud Private Edition · SAP S/4HANA Cloud Public Edition · SAP BTP
- Última revisão