Fiori Launchpad
Embed your abap2UI5 apps into the SAP Fiori Launchpad (FLP) on S/4 On-Premise or Private Cloud. Each app appears as a regular tile; inside the Launchpad shell, abap2UI5 apps can set their title, read startup parameters, and participate in cross-app navigation like any other Fiori app.
Installation
The Launchpad loads the abap2UI5 frontend from the UI5 ABAP repository of your system (as app z2ui5). Pull one branch of the frontend repository via abapGit — every branch ships the frontend app as the BSP Z2UI5 with the handler Z2UI5_CL_LP_HANDLER and the node /sap/bc/z2ui5, so the target mapping below is the same whichever you pick, and a system switches by pulling another branch into the same abapGit repository:
| Branch | What the BSP carries | After an abap2UI5 update |
|---|---|---|
standard | a generated copy of the abap2UI5 frontend | pull the matching frontend branch as well |
standard_v2 | the same, on the legacy-free UI5 runtime | pull the matching frontend branch as well |
standard_new | no copy of the frontend: one view with one z2ui5.embed.Container, which loads the frontend from the backend (?z2ui5-bundle) at run time | nothing — the frontend always has the backend's version |
standard_new (and cloud_new for ABAP Cloud, see S/4 Public Cloud) needs an abap2UI5 newer than 1.146.0 and exists since the 1.147.0 release. The trade-off: the frontend is fetched from the backend on every page load instead of being served out of the BSP, and the legacy-free runtime and the renamed standard_<name> builds are not covered by it yet. After the import, check that the app index is up to date (see Troubleshooting below).
Target Mapping
Use these parameters for target mapping in your Launchpad configuration. abap2UI5 uses the app's class name as the Semantic Object so each app gets its own navigation target — replace Z2UI5_CL_MY_APP with your app class:
- Semantic Object:
Z2UI5_CL_MY_APP - Action:
display - URL:
/sap/bc/ui5_ui5/sap/z2ui5 - ID:
z2ui5 - Parameter:
app_start / Z2UI5_CL_MY_APP
Launchpad Features
Inside your app, the client API gives you access to the Launchpad context. The working samples at the end of this page show each feature in a runnable class.
Detect the Launchpad Context
client->get( )-check_launchpad_active tells you whether the app currently runs inside a Launchpad — useful to hide your own page header or to guard Launchpad-only features:
IF client->get( )-check_launchpad_active = abap_false.
client->message_box_display( `This feature needs the Launchpad.` ).
ENDIF.Set the Tile Title Dynamically
Change the Launchpad shell title from ABAP at any time with the set_title_launchpad frontend event:
client->follow_up_action(
val = z2ui5_if_client=>cs_event-set_title_launchpad
t_arg = VALUE #( ( `My Dynamic Title` ) ) ).Read Startup Parameters
Parameters from the target mapping (or the start URL) arrive as name/value pairs in client->get( )-t_comp_params:
DATA(lt_params) = client->get( )-t_comp_params.
DATA(lv_product) = VALUE #( lt_params[ n = `PRODUCT` ]-v OPTIONAL ).Cross App Navigation
Navigating between Fiori apps goes through the Launchpad's own cross-app navigation rather than through an abap2UI5 roundtrip, so the shell's history and back button keep working. The intent, the parameters and the way back are on Navigation → Cross App.
Troubleshooting
Sometimes installation via abapGit causes cache-related issues. Here's how to clear them:
Cache Management
Recalculate the app index of z2ui5 with report
/UI5/APP_INDEX_CALCULATERecalculate the index of the distribution layer with report
/UI5/APP_INDEX_CALCULATE(if the tab isn't visible, switch to another tab first — it usually shows up after that)Clear HTTP caches in transaction
SMICMClear browser caches and hard reload
Manual Deployment
If clearing caches doesn't fix it, push the frontend app manually:
Download the webapp folder of the project.
Use the SAP program
/UI5/UI5_REPOSITORY_LOADto push the app to the server.
Launchpad KPIs
Extend your Fiori Launchpad with Key Performance Indicators (KPIs) via the abap2UI5 Launchpad KPI add-on.
Functionality
Approach
The integration has three steps: implement a simple interface, the Launchpad calls a generic OData proxy service, and the proxy delegates to your ABAP class to compute the KPI count.
(1/3) Implement the z2ui5_if_lp_kpi interface. The count method takes an optional filter string (from the OData $filter parameter) and returns the KPI as an integer:
INTERFACE z2ui5_if_lp_kpi
PUBLIC.
METHODS count
IMPORTING
filter TYPE string
RETURNING
VALUE(result) TYPE i.
ENDINTERFACE.(2/3) Implement the interface in your app class next to z2ui5_if_app. The count method holds your KPI logic (e.g., counting open items from the database):
CLASS z2ui5_cl_lp_kpi_hello_world DEFINITION PUBLIC.
PUBLIC SECTION.
INTERFACES z2ui5_if_lp_kpi.
INTERFACES z2ui5_if_app.
PROTECTED SECTION.
PRIVATE SECTION.
ENDCLASS.
CLASS z2ui5_cl_lp_kpi_hello_world IMPLEMENTATION.
METHOD z2ui5_if_lp_kpi~count.
"kpi calculation...
result = 10.
ENDMETHOD.
METHOD z2ui5_if_app~main.
"abap2UI5 app logic here...
ENDMETHOD.
ENDCLASS.(3/3) A generic OData proxy service (Z2UI5_PROXY_KPI_SRV) handles the rest. It takes the $filter parameter with your class name, creates an instance of the class, calls count, and returns that many dummy OData entries. The Launchpad then shows the $count result as the tile KPI. Configure the tile with this endpoint:
.../sap/opu/odata/sap/Z2UI5_PROXY_KPI_SRV/ENTITYCollection/$count?$filter=CLASS eq 'z2ui5_cl_lp_kpi_hello_world'Background
The steps above are complete on their own. The article series they come from has a screenshot of every dialog:
Working Samples
Complete apps from the sample catalog that use what this page describes. Each is a single class in abap2UI5/samples unless its row names another of the three sample repositories — pull that repository with abapGit and start the class with ?app_start=<class>.
| Sample | Class |
|---|---|
| Read Startup Parameters — what the tile passed in - client->get( )-t_comp_params | Z2UI5_CL_SMPS_APP_481 · samples-stack, branch 09-launchpad |
| Set Shell Title — follow_up_action( cs_event-set_title_launchpad ) | Z2UI5_CL_SMPS_APP_482 · samples-stack, branch 09-launchpad |
| Cross-App Navigation Sender — hands two values over to another tile | Z2UI5_CL_SMPS_APP_483 · samples-stack, branch 09-launchpad |
| Cross-App Navigation Receiver — reads them back out of its startup parameters | Z2UI5_CL_SMPS_APP_484 · samples-stack, branch 09-launchpad |
