Intent-Based Navigation
Intent-based navigation is the SAP Fiori navigation model in which a tile, link or app requests an intent, a semantic object plus an action written as #SemanticObject-action, instead of a concrete application. The launchpad resolves the intent at runtime through the target mappings in the user's roles, so one link can open different apps per role or device.
Quick facts
- Type
- Navigation concept (runtime resolution of intents)
- Layer
- Content, navigation & access
- Intent syntax
- #SemanticObject-action?parameter=value
- Resolved by
- Target mappings in catalogs (ABAP launchpad); app descriptor inbounds (SAP BTP)
- Developer API
- sap.ushell.services.Navigation (replaces CrossApplicationNavigation, deprecated since SAPUI5 1.120)
- Diagnose with
- /UI2/FLIA (intent analysis)
- Applies to
- SAP S/4HANA (all deployment options), SAP BTP and SAP Build Work Zone
Layer: Content, navigation & accessWhere it sits ▾
Layer: Content, navigation & access
Open the architecture map →The user opens the SAP Fiori Launchpad. The launchpad loads the spaces, pages and tiles granted by the user's business roles. No application code runs yet.
Related:SAP Fiori Launchpad · Business Role · Spaces and Pages
The tile does not contain an app. It fires an intent — a semantic object plus an action, such as PurchaseOrder-display — with optional parameters.
Related:Tile · Semantic Object · Intent-Based Navigation
The launchpad searches the target mappings in the catalogs of the user's roles and filters them by device type and parameters. If nothing matches, the user sees a navigation error.
Related:Target Mapping · Catalogs (Technical and Business) · /UI2/FLIA
The matching target mapping starts the target: a SAPUI5 or SAP Fiori elements app, an SAP GUI for HTML transaction, a Web Dynpro ABAP application or a URL.
Related:Target Mapping · SAP Fiori Elements · SAP GUI for HTML (Web GUI)
How does intent-based navigation work?
In the SAP Fiori Launchpad, the part of the URL after # is an intent, not an application address. A typical intent looks like #PurchaseOrder-display?PurchaseOrder=4500000123.
- The user clicks a tile or a link, or an app triggers navigation in code. Each of them names only the semantic object, the action and optional parameters.
- The launchpad checks which intents the user may use. On the ABAP launchpad, these come from the catalogs in the user's PFCG roles.
- The launchpad's target resolution compares the intent with the available target mappings, including device type and parameter rules.
- The winning target mapping supplies the application: a SAPUI5 component, an SAP GUI for HTML transaction, a Web Dynpro ABAP application or a URL, plus the system it runs against.
- The launchpad starts the target and passes the parameters.
The calling side never learns which app answered. Intent-based navigation is a late-binding contract between what the user wants to do and the app that does it.
Why does SAP Fiori use intents instead of direct URLs?
The indirection solves real life-cycle problems:
- Role-specific targets. The same intent can open a manager view for one role and a clerk view for another, through configuration only.
- Device-specific targets. A desktop user and a phone user can reach different apps through the same link.
- Replaceable apps. An intent can point to a Web Dynpro ABAP application today and to a new SAPUI5 app later, without changing the apps that link to it.
- Independent deployment. Apps have different life cycles; a source app cannot assume a target app is installed. Intents let the launchpad decide what exists for this user, in this system.
- Extension without modification. Customers can redirect a standard intent to a custom app without touching SAP code.
These properties are why SAP Fiori apps link to each other through intents rather than hard-coded addresses. Intent-based navigation trades a little configuration effort for apps that can evolve independently.
How do developers trigger intent-based navigation?
- SAP Fiori elements: fields annotated with a semantic object become smart links, and outbound navigation is declared through annotations and the app descriptor. The framework calls the launchpad on the developer's behalf.
- App descriptor:
sap.app→crossNavigationdeclares inbounds (the intents an app accepts, with parameter rules such as how additional parameters are handled: allowed, ignored or not allowed) and outbounds (the intents an app may trigger). - Freestyle SAPUI5: the shell service
sap.ushell.services.Navigationoffers asynchronous methods to navigate, build a link, check whether an intent is supported for the user and list the links for a semantic object. The olderCrossApplicationNavigationservice is deprecated since SAPUI5 1.120.
Developers should check that an intent is supported before rendering a link, because support differs per user. Intent-based navigation in code is a request to the launchpad, never a direct call to another app.
Where does intent-based navigation stop?
- It needs a launchpad or site runtime. Intents are resolved by the shell. SAP describes the Navigation service as working within the scope of the current launchpad, so an app opened on its own, outside the launchpad or an SAP Build Work Zone site, has no service to resolve them.
- Errors appear at runtime. A missing target mapping or wrong role surfaces when a user clicks, not when content is transported, so testing per role matters.
- Parameters travel in the URL. Large selections need an app state instead of URL parameters, and sensitive values should not be placed in an intent.
- Cross-system targets depend on configuration. A target in another system relies on a correct system alias or destination.
- Navigation is not process state. An intent opens an app with context; it does not record what the user then does, whether a task is complete or what comes next.
These limits follow from the design: intent-based navigation resolves where to go, and leaves what happens there to the target app.
How do you troubleshoot a failed intent?
On the ABAP launchpad, follow the evidence rather than editing content first:
- Read the intent from the browser address bar or the console message.
- If the console shows an application log ID, open the UI2 application log in SLG1; from the message, you can jump to intent analysis.
- Run /UI2/FLIA with the intent, the device type and the affected user. It shows which roles and catalogs carry the intent and which target mapping belongs to it.
- If the target mapping is correct but the app loads in the wrong system, check system aliases with /UI2/FSAC.
- If a SAPUI5 component cannot be loaded, check the SAPUI5 application index log with /UI5/APP_INDEX_CALCULATE.
On SAP BTP, compare the tile's intent with the inbounds of the deployed app descriptor. A failed intent is usually a content or role problem, and intent-based navigation tooling shows which one before anything is changed.
How does intent-based navigation work on SAP BTP and SAP Build Work Zone?
The syntax and the idea are the same; only the source of target mappings changes. Apps deployed on SAP BTP declare their inbounds in the app descriptor, and SAP Build Work Zone treats those inbounds as the targets for the site. Apps from SAP S/4HANA reach a Work Zone site through the Federation of Remote Content Providers, which exposes the backend launchpad content to the site. Across deployment options, intent-based navigation keeps the same contract: an intent goes in, and the user's content decides which app comes out.
Intent-based navigation vs. target mapping vs. hard-coded URL: what is the difference?
| Intent-based navigation | Target mapping | Hard-coded URL | |
|---|---|---|---|
| What it is | Navigation model: request an intent | Rule that resolves one intent to an app | Direct link to one application address |
| Decided when | At runtime, per user and device | At configuration time, applied at runtime | At development time |
| Respects roles | Yes, through the user's catalogs | Yes, when its catalog is in the user's roles | No, the link appears regardless of access |
| Changing the target | Change configuration, not code | Edit or replace the mapping | Change and redeploy the calling app |
Intent-based navigation is the model, a target mapping is one rule inside it, and a hard-coded URL bypasses it.
FAQ
What is an intent in SAP Fiori?
An intent is the combination of a semantic object and an action, such as PurchaseOrder-display, optionally with parameters. It expresses what the user wants to do. The SAP Fiori Launchpad resolves it to a concrete app through the target mappings available in the user's roles.
Is intent-based navigation the same as cross-app navigation?
In SAP Fiori practice, yes. Cross-app or cross-application navigation describes moving between apps, and intent-based navigation is the mechanism that makes it work. The older SAPUI5 service was even named CrossApplicationNavigation before SAP replaced it with the Navigation service.
Why does the same link open different apps for different users?
Because the launchpad resolves the intent against each user's own target mappings. Different roles can contain different target mappings for the same intent, and target mappings can also differ per device type, so one link can legitimately open different apps.
Is CrossApplicationNavigation deprecated?
Yes. The SAPUI5 service sap.ushell.services.CrossApplicationNavigation is deprecated since version 1.120. New and maintained code should use sap.ushell.services.Navigation, which offers asynchronous methods for navigating, building links and checking whether an intent is supported.
How do I see which app an intent opens for a user?
On the ABAP launchpad, run /UI2/FLIA with the intent, the device type and the user. It lists the roles and catalogs that carry the intent and the target mapping that belongs to it. On SAP BTP, check the inbounds in the target app's descriptor.
Sources
- 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
- Applies to
- SAP S/4HANA on-premise · SAP S/4HANA Cloud Private Edition · SAP S/4HANA Cloud Public Edition · SAP BTP
- Last reviewed