Skip to content

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:

BranchWhat the BSP carriesAfter an abap2UI5 update
standarda generated copy of the abap2UI5 frontendpull the matching frontend branch as well
standard_v2the same, on the legacy-free UI5 runtimepull the matching frontend branch as well
standard_newno copy of the frontend: one view with one z2ui5.embed.Container, which loads the frontend from the backend (?z2ui5-bundle) at run timenothing — 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:

abap
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:

abap
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:

abap
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 ​

  1. Recalculate the app index of z2ui5 with report /UI5/APP_INDEX_CALCULATEApp index calculation report selection screenApp index calculation report output

  2. Recalculate 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) Distribution layer tab in app index calculation reportDistribution layer recalculation output

  3. Clear HTTP caches in transaction SMICMHTTP cache invalidation in transaction SMICM

  4. Clear browser caches and hard reload

Manual Deployment ​

If clearing caches doesn't fix it, push the frontend app manually:

  1. Download the webapp folder of the project.

  2. Use the SAP program /UI5/UI5_REPOSITORY_LOAD to push the app to the server. UI5 Repository Load program for manual frontend deployment

Launchpad KPIs ​

Extend your Fiori Launchpad with Key Performance Indicators (KPIs) via the abap2UI5 Launchpad KPI add-on.

Repository

Functionality ​

Launchpad KPI tiles showing dynamic count values

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:

abap
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):

abap
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:

text
.../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>.

SampleClass
Read Startup Parameters — what the tile passed in - client->get( )-t_comp_paramsZ2UI5_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 tileZ2UI5_CL_SMPS_APP_483 · samples-stack, branch 09-launchpad
Cross-App Navigation Receiver — reads them back out of its startup parametersZ2UI5_CL_SMPS_APP_484 · samples-stack, branch 09-launchpad