Transport Fiori Launchpad sites on SAP BTP using SAP Cloud Transport Management service
[Update 2021]: Note that this asset was created before our branding changes related to SAP technology were announced on January 2021. Note that SAP Cloud Platform Launchpad was renamed to SAP Launchpad service, and SAP Cloud Platform Portal was renamed to SAP Cloud Portal service
[Update Nov-2022]: Please note that this blog was published prior to the re-branding related to SAP Build portfolio, which was announced at SAP TechEd 2022. SAP Launchpad service and SAP Work Zone come together under the SAP Build Work Zone brand, with two editions: standard edition (formerly SAP Launchpad service) and advanced edition (formerly SAP Work Zone). You can learn more in this announcement blog post: SAP Build Capabilities Explained | SAP TechEd | SAP News Center
A much-awaited capability of transporting Fiori Launchpad sites is now available on SAP Business Technology Platform (BTP). SAP Cloud Transport Management service enables the transport of application and interface artefacts between SAP BTP accounts and is well integrated with many other services on SAP BTP. With the recent update, SAP Cloud Transport Management service now also supports transporting Fiori Launchpad sites. You will be able to see the various touch points of the Cloud Transport Management service documented in SAP Help.
In this blog post, I will walk you through the steps which are required to be configured in order to transport Launchpad sites. You can find the high level documentation of all these step in this Help documentation.
For demonstration, I have created 3 subaccounts to represent a landscape with 3 environments – DEV/QA/PRD.
The Dev environment has instances of Business Application Studio, Alert Management and Transport Management. The Launchpad service along with the HTML5 apps will be enabled and deployed in the remaining subaccounts.
Create Launchpad service instance:
In the DEV subaccount, I have created a subscription & an instance for the Launchpad service (Standard Plan). A service key for the instance is required for creation of destinations.
Repeat the same for QA and PRD subaccounts too.
Create Cloud Transport Management service instance:
Similarly, I have created a subscription and service instance for the Cloud Transport Management service. A service key for the instance is required for creation of destinations.
You do not need to repeat this step for QA & PRD subaccounts. To access and configure the Launchpad and Transport Management service, don’t forget to assign the relevant role collections. You can find them in the Help documentation – Launchpad service & Transport Management service.
Setup Destinations in the DEV subaccount
In order to see the “Transport Site” or “Transport Selected Content” option within the site manager of the Launchpad service, you would need to configure a destination (under the connectivity menu) with the name “ctms_destination”.
Use the Authentication type as OAuth2ClientCredentials and use the following mapping from the Service Key created for the Transport Management service.
|Use the value of:||As the value of:|
|url||Token Service URL and add at the end: /oauth/token|
In the additional parameters, add node-name and set the value with the name of the initial transport node configured in the Transport Management service. This internally invokes the API /nodes/export and the transport request is added to the queues of the follow-on node provided as the parameter name.
Next, you will need to create 3 destinations for each of the launchpad sites which you are going to use in DEV/QA/PRD.
Similar to the previous destination, you will need the values from the service key created for the launchpad service.
Use the Authentication type as OAuth2ClientCredentials and use the following mapping from the Service Key created for the Launchpad service.
|Use the value of:||As the value of:|
URL and add at the end: cdm_import_service
|url||Token Service URL|
Configure Destinations to XSUAA Instances
You would also need to create a service instance for “Authorization and Trust Management Service” with apiaccess plan. You would need to have this configured in all the remaining subaccounts too.
Once a service instance is created, you need to create a destination of type “Service Instance” and use the exact name “xsuaa-apiaccess” as shown below.
Configuring the Launchpad site
Here is the overall solution diagram which depicts how various components will interact with each other to transport the contents across different subaccounts in SAP BTP.
I am assuming you know how to configure a launchpad site. If this is new to you, here is a link to a tutorial which you can use to familiarize yourself on the various objects which are available to configure in your launchpad site.
For demonstration, I have a simple site with a role called “Purchase Order” and configured it to provide access to a set of apps under a group called “Purchase Order Processing”.
I have configured a Launchpad site which has access to this role and the related contents.
Configuring the Transport Management service
In the Transport Management service, you will need to configure transport nodes to represent your landscape and create routes to indicate the path for the flow of contents in the landscape.
I have created 3 transport nodes – DEV/TST/PRD.
Here is the configuration for the DEV transport node. The destination should be correctly set to match the DEV_Sites destination which has been created earlier. Also ensure that the content type is “Application Content”. For the remaining transport nodes, ensure that you select the correct destination. This will determine the subaccount to which the transport Management will push the contents.
I have also created two transport routes to connect DEV/TST/PRD environments as shown below.
Transport your Launchpad site
Navigate to the Launchpad service – Site Manager in your DEV subaccount and select the “Transport Site” option. This option will transport the site along with the related contents.
This will initiate the transport of contents and communicate with the Transport Management service. In the Action logs, you will be able to see the files being uploaded.
The Launchpad contents would now be available in the import queue of the “PORTAL_TST” transport node. From here, I can import these contents by clicking on “Import Selected” button.
The launchpad site along with the contents will soon appear in the TMS_QA subaccount.
Make sure you assign the role collection to your users before trying to access the launchpad site
Within the Transport Management service, you will be able to find that the content has progressed and is in the import queue of the PRD environment. Similar to the previous step, you can select the content and import them.
This will kick off the import process of the Launchpad site and the contents into the TMS_PRD subaccount.
Transporting specific contents
The Content Manager of the Launchpad service allows specific contents to transported (instead of transporting the entire site). All the related contents will also be transported with this approach. For example, when a role is selected, the apps assigned to it, and the groups and catalogs to which these apps are assigned, are also transported. There is no need to select the individual objects.
Let me show you how to transport new/updated contents once you have already transported the Launchpad site. Within your Content Manager, you have the option to select the new/updated contents and transport them.
Below, I have created a new app config called “Monitor Purchase” and updated the existing role/group to include this app.
Importing this content will push all the relevant changes to TMS_QA subaccount. You would just repeat the same process to progress this change all the way to TMS_PRD subaccount.
When you are developing extension apps on SAP BTP, you will need a way to manage Fiori Apps & integration contents along with the Launchpad site. There are many DevOps related services on SAP BTP – for example: Alert Notification, CI/CD, Transport Management etc. Evaluate these options to see how best you can manage the software deliverables and transport them together across different SAP BTP subaccounts.
Thanks a lot for this great blog post (and the good news).
Great post! Thanks a lot!
Great article, thanks for the clear guide. 👍
Nice writing, very clear! Thanks a lot.
thanks for the blog!
I've a question, I can add the "Launchpad Service" subscription but I can't find the possibility to add the instance for the service "scp-launchpad". Without instance, we can't add add service key.
I've even try to add the scp-launchpad using Command-line but it says that scp-launchpad doesn't exists.
Please check if you have added the entitlement with these two plans.
unfortunately, I've checked the entitlements but I don't have the second option.
I'm using trial account, but even on customer environment it is the same.
I don't have it either on a CPEA account. Any idea to solve this issue?
Hi Séverin de BEAULIEU & Rachid Kaouass,
The ability to create service instance for Launchpad IS NOT there in the trial environment. Let me check if there is an issue with CPEA accounts.
Hi, Can you please open a SAP Incident on component EP-CPP-CF-LP-DEV if you are still unable to create a service instance within your CPEA accounts.
I have the same problem in my trial subaccount with the beta features activated.
Is it possible that this is a generalized problem of the trial accounts?
I tried to open the note, but unfortunately my trial account user is not an S user. Any suggestions?
Thanks in advance
Hi Enric Castella Gonzalez, Sorry, there was a typo in my response above. I can confirm that its not possible to create a service instance in the trial environment (as of today). I will update this blog post once this feature is made available in trial environments.
Hi Murali Shanmugham,
I am using a paid account and cannot create an instance of the service "scp-launchpad". Support says in an incident, this is not possible for launchpad service but only for portal service.
Do you have any information on that?
Hi Philipp Rausch,
I had the same issue with our paid account so I created an incident.
After some weeks, they fixed the issue at our subaccount and now I'm able to create a service instance.
Hi Murli ,
I have deployed my html5 repo app with managed app router ,I was able to see html applications in SAP BTP but its not visible on launchpad .
Few days back the same app I have deployed ,html apps were visible but now its not displaying new app as well as old apps
launchpad not updating content ? I am not sure what went wrong .
Hi Aishwarya Laxmi,
In the "Provider Manager" menu, can you try clicking on the action "Fetch updated content" ?
If you have done this, can you check in the browser console if you are getting any errors. I have seen few other report "403 CDMStoreError" as none of the HTML5 apps are displayed. You would need to raise this internally with the Product experts.
Any additional steps needed for provider(HTML5 Apps) instead of local?
As i can see in your above example you created the app locally.
Hi Murali Shanmugham ,
I tried to transport the federated content via TMS, but the content does not appear in the next tier/subaccount. Do we need to establish the federation for the entire landscape? Currently only Dev account has all the required federation configurations(both at BTP and S/4 end). Also, I dont see the spaces and pages option for BTP content. Documentation says that Space and Pages is applicable to S/4 federated content for now. Do you plan to bring it for custom BTP content?
when transporting federated content, you need to set up the same content providers on the target system as you have on the source system. This is mentioned in the documentation for manual transport, but also applies to transport via TMS. We will update the documentation accordingly.
Is it possible to transport Fiori Launchpad sites on SAP BTP NEO (Portal services) using SAP Cloud Transport Management service?
Or only for Portal and Launchpad services on SAP BTP Cloud Foundry?
In SAP BTP Neo environment, you can transport complete portal sites (besides SAP Fiori apps and roles). Content currently supported by SAP Cloud Transport Management service is listed here, ordered by environment:
Content supported by SAP Cloud Transport Management
For Neo, you should also take a look at the solution export wizard (the table above lists for which content types you can consider to use it).
Thanks Boris, I'll take a look in the Solution Export feature on Neo.
Thanks for sharing the information.
Do you know if I ca reproduce this configuration where the cTMS is located in another subaccount? Or it must be activated on the DEV suabaccount?
My topology is the following and I'm not receiving any transport on my TMS_DEV transport node
You should be able to create destinations to the other subaccounts from the cTMS subaccount.
Yes Gregor, In fact that's what I did.
My first problem is that my dev node on cTMS is not getting any transport when I select the “Transport Site” option.
But the second, and most important problem, is that I'm not receiving any error to work with. So, in this case, I'm kind of working on a trial and error basis without any input to troubleshoot this issue properly.
Is there any tool or procedure that allow me to see what's going on underneath the "surface".
As you are running the SAP Cloud Transport Management service on a separate node, please take special care which destination to create where: while ctms_destination has to be created on the DEV node (so that the "Transport Site" option shows up at all), the destinations for the launchpad sites would have to be created on the CTMS node. Then, if also the configuration of the transport landscape and the permissions are set correctly, a transport triggered from the DEV node should show up in the import queue of the TST node (not in the queue of DEV, as DEV should only be the entry node).
If this should not work, we could also set up a quick call, to go through the configuration together.
an additional hint: besides creating the destination in the correct subaccounts it is important to double-check the name of the destination pointing to the Cloud Transport Management service instance. It has to be exactly 'ctms_destination' (all lower case with an underscore). Secondly the additional parameter for the cTMS entry node has to be 'node-name' (all lower case with a hyphen or minus sign).
Together with the needed authorization on Launchpad side this should at least make the transport option visible.
Hi Diego and Experts,
My landscape look the same as Diego's, cTMS in different subaccount and there are 3 different subaccount for dev, qa & prod.
I'm facing same issue:
Can you provide the solution for that?
Sorry to hear that - and you already checked the hints provided to Diego by me and Harald above (on where to create which destination and cross-checking the naming conventions)?
Yes, I've created the destination and checked the naming convention.
'ctms_destination' is created in dev account but the 'Token Service URL' is of dev subaccount
& URL, ClientID, Client Secret are from ctms service key present in cTMS subaccount.
Here is the list of destination I have created:
In cTMS subaccount:
DEV_Sites (workzone dest of dev sub-acc)
QA_Sites (workzone dest of qa sub-acc)
PROD_Sites (workzone dest of prod sub-acc)
xsuaa_apiaccess (auth & transport service)
In DEV subaccount:
ctms_destination (ctms from ctms subaccount)
xsuaa_apiaccess (auth & transport service)
In QA subaccount:
xsuaa_apiaccess (auth & transport service)
In PROD subaccount:
xsuaa_apiaccess (auth & transport service)
what am I doing wrong can you please tell?
I have the same scenario . And facing similar issue . Any solution you got ?
Hello Dear Expert ,
Murali Shanmugham Gregor Wolf Boris Zarske : Can you please guide us on the solution for the
scenario raised by Diego Ismael Ibarra & SAGAR SINGH . We all have similar issue, where our
CTMS is in a separate subaccount and have 3 different subaccounts (Dev+Qa+Prd) .
But unable to move the content via CTMS . looking for the right solution .
(It's working if cTMS is in Dev subaccount)
Thanks and Regards
Hi Manauwar, I have not tried the setup of Transport Management in a separate subaccount. Can you please raise this as a question in the forum for experts to provide any guidance? Thanks.
Thank you for the response .
I have raised the question in the forum .
Hi Murali Shanmugham
I've a question, is possible the integration from launchpad service into SAP Solution Manager change Request Management ?
Yes, SAP Launchpad Service content can be handled by SAP Cloud Transport Management service and with this, its propagation can be orchestrated by ChaRM in SAP Solution Manager. For a list of content support by SAP Cloud Transport Management service, see Supported Content Types | SAP Help Portal:
Yes, we have SAP Launchapad Service content handled by SAP Cloud Transport Manager service
In this document the transport node "PORTAL_TST" content type: "Application content" is transported from Cloud Transport Manager without Sap Solution Manager.
the node PORTAL_TST dosen't have the check "controlled by SAP Solution Manager"
How can transport SAP launchpad service creating ticket ChaRM? It's possible ? if you have al guide I thank you
If you want to set this node under control of ChaRM, you would have to adapt the node configuration in SAP Cloud Transport Management accordingly, by setting the flag "Controlled by SAP Solution Manager". You can find further details here:
the official documentation how to enable the integration between ChaRM and Cloud TMS can be found here in SAP Help.
It is fairly short and so I wrote a more extensive blog post on the topic. It deals with another content type (MTA on Neo), but the SolMan side of the house works exactly the same for Launchpad content.
Basically you model your transport nodes as external services in SolMan's LMDB and set up a solution landscape containing them in transaction SLAN.
You then create a change cycle based on this landscape. In this change cycle you create change documents to which you can attach transport requests from Cloud TMS. When you now change the status of the change document in ChaRM (for example to 'To be tested'), the corresponding import in Cloud TMS is triggered.
The flag 'Controlled by Solution Manager' makes sure that nobody can accidentally perform imports for this node directly in Cloud TMS (bypassing ChaRM). It can also be set after the transport node has been created and even been used. However, from that point you will not be able to perform manual imports anymore (unless you reset the flag). Therefore, it might be good to clean up the queues of the transport nodes before switching on the flag.
One last word: technically the flag is not required for the scenario to function, but it reduces the risk of bypassing ChaRM.
We are configuring CTMS to transport the Business Content (roles, catalogs, Fiori tiles, etc) in our Work Zone.
My question here is about the instance I should configure so I can user the service key.
In the CTMS help site, it has a remark stating it's possible to transport work zone content by "Using SAP Launchpad service integration in SAP Work Zone"
Does it mean I need to create the launchpad service instance and use its service key instead of the work zone instance?
Thanks in advance,