Navegación basada en intents
La navegación basada en intents es el modelo de navegación de SAP Fiori en el que un tile, un enlace o una app solicita un intent, un semantic object más una acción escritos como #SemanticObject-action, en lugar de una aplicación concreta. El launchpad resuelve el intent en tiempo de ejecución mediante los target mappings de los roles del usuario, de modo que un mismo enlace puede abrir apps distintas según el rol o el dispositivo.
Datos clave
- Tipo
- Concepto de navegación (resolución de intents en tiempo de ejecución)
- Capa
- Contenido, navegación y acceso
- Sintaxis del intent
- #SemanticObject-action?parameter=value
- Se resuelve mediante
- Target mappings en catálogos (launchpad ABAP); inbounds del app descriptor (SAP BTP)
- API para desarrolladores
- sap.ushell.services.Navigation (sustituye a CrossApplicationNavigation, obsoleto desde SAPUI5 1.120)
- Diagnóstico con
- /UI2/FLIA (análisis de intents)
- Se aplica a
- SAP S/4HANA (todas las opciones de implementación), SAP BTP y SAP Build Work Zone
Capa: Contenido, navegación y accesoDónde se ubica ▾
Capa: Contenido, navegación y acceso
Abrir el mapa de arquitectura →El usuario abre el SAP Fiori Launchpad. El launchpad carga los spaces, pages y tiles que le conceden sus business roles. Todavía no se ejecuta ningún código de aplicación.
Relacionadas:SAP Fiori Launchpad · Business Role · Spaces y Pages
El tile no contiene ninguna app. Dispara un intent —un semantic object más una acción, como PurchaseOrder-display— con parámetros opcionales.
Relacionadas:Tile · Semantic Object · Navegación basada en intents
El launchpad busca los target mappings en los catálogos de los roles del usuario y los filtra por tipo de dispositivo y por parámetros. Si nada coincide, el usuario ve un error de navegación.
Relacionadas:Target Mapping · Catálogos (technical y business) · /UI2/FLIA
El target mapping coincidente inicia el destino: una app SAPUI5 o SAP Fiori elements, una transacción de SAP GUI for HTML, una aplicación Web Dynpro ABAP o una URL.
Relacionadas:Target Mapping · SAP Fiori Elements · SAP GUI for HTML (Web GUI)
¿Cómo funciona la navegación basada en intents?
En el SAP Fiori Launchpad, la parte de la URL que sigue a # es un intent, no la dirección de una aplicación. Un intent típico tiene este aspecto: #PurchaseOrder-display?PurchaseOrder=4500000123.
- El usuario hace clic en un tile o en un enlace, o una app desencadena la navegación en el código. Cada uno de ellos indica solo el semantic object, la acción y parámetros opcionales.
- El launchpad comprueba qué intents puede utilizar el usuario. En el launchpad ABAP, estos proceden de los catálogos de los roles PFCG del usuario.
- La resolución de destinos del launchpad compara el intent con los target mappings disponibles, incluidas las reglas de tipo de dispositivo y de parámetros.
- El target mapping ganador aporta la aplicación: un componente SAPUI5, una transacción de SAP GUI for HTML, una aplicación Web Dynpro ABAP o una URL, además del sistema contra el que se ejecuta.
- El launchpad inicia el destino y le pasa los parámetros.
El lado que llama nunca sabe qué app ha respondido. La navegación basada en intents es un contrato de vinculación tardía entre lo que el usuario quiere hacer y la app que lo hace.
¿Por qué SAP Fiori utiliza intents en lugar de URL directas?
Esta indirección resuelve problemas reales del ciclo de vida:
- Destinos específicos por rol. El mismo intent puede abrir una vista de responsable para un rol y una vista de administrativo para otro, solo mediante configuración.
- Destinos específicos por dispositivo. Un usuario de escritorio y un usuario de teléfono pueden llegar a apps distintas a través del mismo enlace.
- Apps sustituibles. Un intent puede apuntar hoy a una aplicación Web Dynpro ABAP y más adelante a una nueva app SAPUI5, sin modificar las apps que enlazan con él.
- Despliegue independiente. Las apps tienen ciclos de vida distintos; una app de origen no puede dar por hecho que una app de destino está instalada. Los intents permiten que el launchpad decida qué existe para este usuario, en este sistema.
- Extensión sin modificación. Los clientes pueden redirigir un intent estándar a una app personalizada sin tocar el código de SAP.
Estas propiedades explican por qué las apps SAP Fiori se enlazan entre sí mediante intents y no mediante direcciones fijas en el código. La navegación basada en intents cambia un pequeño esfuerzo de configuración por apps que pueden evolucionar de forma independiente.
¿Cómo desencadenan los desarrolladores la navegación basada en intents?
- SAP Fiori elements: los campos anotados con un semantic object se convierten en smart links, y la navegación de salida se declara mediante anotaciones y el app descriptor. El framework llama al launchpad en nombre del desarrollador.
- App descriptor:
sap.app→crossNavigationdeclara los inbounds (los intents que acepta una app, con reglas de parámetros como el tratamiento de los parámetros adicionales: permitidos, ignorados o no permitidos) y los outbounds (los intents que una app puede desencadenar). - SAPUI5 freestyle: el servicio de shell
sap.ushell.services.Navigationofrece métodos asíncronos para navegar, construir un enlace, comprobar si un intent está admitido para el usuario y listar los enlaces de un semantic object. El servicio anteriorCrossApplicationNavigationestá obsoleto desde SAPUI5 1.120.
Los desarrolladores deben comprobar que un intent está admitido antes de mostrar un enlace, porque la compatibilidad varía según el usuario. En el código, la navegación basada en intents es una petición al launchpad, nunca una llamada directa a otra app.
¿Dónde termina el alcance de la navegación basada en intents?
- Necesita un launchpad o un runtime de sitio. Los intents los resuelve el shell. SAP describe que el servicio Navigation funciona dentro del ámbito del launchpad actual, por lo que una app abierta por sí sola, fuera del launchpad o de un sitio de SAP Build Work Zone, no dispone de ningún servicio que los resuelva.
- Los errores aparecen en tiempo de ejecución. Un target mapping que falta o un rol incorrecto se manifiesta cuando un usuario hace clic, no cuando se transporta el contenido, por lo que importa probar por rol.
- Los parámetros viajan en la URL. Las selecciones grandes necesitan un app state en lugar de parámetros de URL, y los valores sensibles no deben incluirse en un intent.
- Los destinos en otros sistemas dependen de la configuración. Un destino en otro sistema depende de un alias de sistema o un destino correctos.
- La navegación no es estado del proceso. Un intent abre una app con contexto; no registra lo que el usuario hace después, si una tarea está completada ni qué viene a continuación.
Estos límites se derivan del diseño: la navegación basada en intents resuelve adónde ir y deja a la app de destino lo que ocurre allí.
¿Cómo se diagnostica un intent que falla?
En el launchpad ABAP, siga las evidencias en lugar de editar primero el contenido:
- Lea el intent en la barra de direcciones del navegador o en el mensaje de la consola.
- Si la consola muestra un ID de log de aplicación, abra el log de aplicación UI2 en SLG1; desde el mensaje puede saltar al análisis de intents.
- Ejecute /UI2/FLIA con el intent, el tipo de dispositivo y el usuario afectado. Muestra qué roles y catálogos contienen el intent y qué target mapping le corresponde.
- Si el target mapping es correcto pero la app se carga en el sistema equivocado, compruebe los alias de sistema con /UI2/FSAC.
- Si no se puede cargar un componente SAPUI5, compruebe el log del índice de aplicaciones SAPUI5 con /UI5/APP_INDEX_CALCULATE.
En SAP BTP, compare el intent del tile con los inbounds del app descriptor desplegado. Un intent que falla suele ser un problema de contenido o de roles, y las herramientas de la navegación basada en intents muestran cuál de los dos antes de cambiar nada.
¿Cómo funciona la navegación basada en intents en SAP BTP y SAP Build Work Zone?
La sintaxis y la idea son las mismas; solo cambia el origen de los target mappings. Las apps desplegadas en SAP BTP declaran sus inbounds en el app descriptor, y SAP Build Work Zone trata esos inbounds como los destinos del sitio. Las apps de SAP S/4HANA llegan a un sitio de Work Zone mediante la Federation of Remote Content Providers, que expone al sitio el contenido del launchpad del back-end. En todas las opciones de implementación, la navegación basada en intents mantiene el mismo contrato: entra un intent, y el contenido del usuario decide qué app sale.
¿Navegación basada en intents frente a target mapping frente a URL fija: cuál es la diferencia?
| Navegación basada en intents | Target mapping | URL fija en el código | |
|---|---|---|---|
| Qué es | Modelo de navegación: solicitar un intent | Regla que resuelve un intent en una app | Enlace directo a la dirección de una aplicación |
| Cuándo se decide | En tiempo de ejecución, por usuario y dispositivo | En la configuración, aplicada en tiempo de ejecución | En el desarrollo |
| Respeta los roles | Sí, a través de los catálogos del usuario | Sí, cuando su catálogo está en los roles del usuario | No, el enlace aparece con independencia del acceso |
| Cambiar el destino | Cambiar la configuración, no el código | Editar o sustituir el mapping | Modificar y volver a desplegar la app que llama |
La navegación basada en intents es el modelo, un target mapping es una regla dentro de él y una URL fija en el código lo esquiva.
Preguntas frecuentes
¿Qué es un intent en SAP Fiori?
Un intent es la combinación de un semantic object y una acción, como PurchaseOrder-display, opcionalmente con parámetros. Expresa lo que el usuario quiere hacer. El SAP Fiori Launchpad lo resuelve en una app concreta mediante los target mappings disponibles en los roles del usuario.
¿La navegación basada en intents es lo mismo que la navegación entre aplicaciones?
En la práctica de SAP Fiori, sí. La navegación entre apps o entre aplicaciones (cross-app navigation) describe el paso de una app a otra, y la navegación basada en intents es el mecanismo que lo hace posible. El antiguo servicio SAPUI5 incluso se llamaba CrossApplicationNavigation antes de que SAP lo sustituyera por el servicio Navigation.
¿Por qué el mismo enlace abre apps distintas para usuarios distintos?
Porque el launchpad resuelve el intent con los target mappings propios de cada usuario. Roles distintos pueden contener target mappings distintos para el mismo intent, y los target mappings también pueden variar según el tipo de dispositivo, de modo que un mismo enlace puede abrir legítimamente apps distintas.
¿CrossApplicationNavigation está obsoleto?
Sí. El servicio SAPUI5 sap.ushell.services.CrossApplicationNavigation está obsoleto desde la versión 1.120. El código nuevo y el que se mantiene deben usar sap.ushell.services.Navigation, que ofrece métodos asíncronos para navegar, construir enlaces y comprobar si un intent está admitido.
¿Cómo puedo ver qué app abre un intent para un usuario?
En el launchpad ABAP, ejecute /UI2/FLIA con el intent, el tipo de dispositivo y el usuario. Lista los roles y catálogos que contienen el intent y el target mapping que le corresponde. En SAP BTP, compruebe los inbounds en el descriptor de la app de destino.
Fuentes
- 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
- Se aplica a
- SAP S/4HANA on-premise · SAP S/4HANA Cloud Private Edition · SAP S/4HANA Cloud Public Edition · SAP BTP
- Última revisión