Technology Blogs by SAP
Learn how to extend and personalize SAP applications. Follow the SAP technology blog for insights into SAP BTP, ABAP, SAP Analytics Cloud, SAP HANA, and more.
cancel
Showing results for 
Search instead for 
Did you mean: 
As member of the SAP S/4HANA Regional Implementation Group, I have the privilege of working with a lot of customers who are implementing SAP S/4HANA. Many of our SAP S/4HANA customer are looking to use in-app extensibility tools – Why? Because this is the easy, cloud-first, no-development-tools-needed way to extend your SAP S/4HANA solution, and particularly your SAP Fiori apps for SAP S/4HANA. This blog post is a summary of detail steps for setting up Adaptation Transport Organizer, which is a pre-requisite for using in-app extensibility.

In-app extensibility covers the most common changes most customers need to make to their SAP S/4HANA solution, including:

  • Adding custom fields to the database for use in SAP Fiori apps, SAP GUI transactions, forms, emails, etc.

  • Adding custom cards and filters to Overview Pages

  • Hiding unwanted fields, cards, and features from all users or from specific roles

  • Rearranging fields, field groups, and cards to make the most important fields for your specific business process more prominent

  • Presetting favorite navigation links, etc.


In-app extensibility changes are intended to be made by key users.  Who are key users? Whoever you authorize to make these changes on behalf of other business users. Because in-app extensibility does not require developer skills or developer tooling, your key users could be business process experts, or a central process governance group. Since these are the people who understand the business requirements behind these changes, it makes sense that they can make these changes for themselves.

NOTE: Of course, your key users could also be developers wanting to use in-app extensibility as the most efficient way to extend your SAP S/4ANA solution.

In-app extensibility options are inherited from SAP S/4HANA Cloud and the SAPUI5 technology to SAP S/4HANA AnyPremise solutions.

You can find out more about common patterns for in-app extensibility in the SAP Extensibility Explorer at https://sap.com/extends4

 

Here is the summary of steps covered in this blog post:

  1. Motivation and setting up Adaption Transport Organizer

  2. How to Configure Software Packages apps

  3. How to Register Extensions for Transport

  4. Monitoring your extensions in the Extensibility Inventory


 

1.    Motivation and setting up Adaption Transport Organizer


Adaption Transport Organizer is a pre-requisite for in-app extensibility.  In-app extensibility changes are typically made in your development system and need to be transported through your system landscape environment.  Since these changes are made by key users, who may not have development skills, the Adaptation Transport Organizer simplifies this process for key users.

The transport of key user extensions is managed by the Adaption Transport Organizer (ATO). Extensibility for key users is deactivated by default in the SAP S/4HANA on-premise edition. To activate it, you run SAP GUI transaction S_ATO_SETUP.

Usually, after running transaction S_ATO_SETUP you will see the status “NO”


This simply means your ATO is not yet configured. Before you start to activate it, you will need to understand the possibilities.

  1. You have to choose whether you want to use a prefix or a namespace for your packages and transports.




For example:

Prefix – your object will be called ZZ1_<Generated Object Name> and can be transported to your production system.

Sandbox Prefix – your object will be called ZZ9 _<Generated Object Name> and must not be transported to your production system, only used for local sandbox objects.

Namespace - your object will be called /YOUR_NAMESPACE/<Generated Object Name>

  1. Define a local and a sandbox package where the extension items will be stored.


For example, in a SAP S/4HANA 30-day trial system the local package is called “TEST_YY_KEY_USER_LOCAL” and the sandbox is called “TEST_YY_KEY_USER_SANDBOX”.  In your case you will need your package names to follow the naming guidelines explained in the from SAP Help Portal guide General Functions for Key Users, and within that the section Configuration Information: Adaptation Transport Organizer.

Just keep in mind that the package names $YATO_KEY_USER_LOCAL and $YATO_KEY_USER_SANDBOX, are examples and all packages starting with “$” are deleted during upgrades. You can check the details in SAP Notes 2478895-ATO Package Lost in Upgrade.

Both local and sandbox packages are assigned to the software component “LOCAL”.


Now you are ready to press the button “Setup with specific data” and your ATO will be configured and you can access on the SAP Fiori launchpad extensibility apps and transportation apps for key users.

Transaction S_ATO_SETUP provides a few additional options, so here is some quick information to help you understand them:

Setup read only – Key user extensibility will be configured, but only in read mode.

Setup with default data – this action will set up the ATO with default values provided by SAP.

Lock – the ATO is locked and the extensibility apps and transportation apps are locked for key users.

Unlock – the ATO is unlocked and change, create, or transport extension items is activated.

Registration User for Job – you can register a job user, who will take care of the generation of artifacts. Job user needs the roles and authorizations required for artifact generation authorization object S_DEVELOP.  With this option you can reduce roles and authorizations for key users as generation is done with job user. Registration is done via Maintain Table view ATO_PK_JOB_USER.

Delete Setup – the configuration will be removed.

2.    How to Configure Software Packages


How do you transport extensibility items, if your local package is not assigned to a transport layer? That is the reason why you have to create a new software package that will be assigned to Transport Layer. The software package can be created in transaction Object Navigator SE80 or Package Builder SE21.

Example via SE21


Next step is to use the SAP Fiori app F1590 Configure Software Packages. This app is part of the security roles SAP_NW_APS_EXT_ATO_PK_CFG_APP, which need to assign to your User ID.

You can check details at SAP Fiori apps reference library

https://fioriappslibrary.hana.ondemand.com/sap/fix/externalViewer/#/detail/Apps('F1590')/S16OP

Logon to your SAP Fiori system follow steps:




  1. Choose Configure Software Packages app

  2. Select “Add Registration”

  3. Search for your package and select it

  4. Press OK button



So now within the Configure Software Packages app, the software package Z_ATO_DEMO is registered. The app allows you to assign a specific transport request to the registered package by selecting the transport request and then activate Automatic Task Handling.  Alternatively you can ask your administrator to manually create a task for your user in an open transport request via the transaction SE01 or SE09.

If Automatic Request Handling option is activated, then also the option Automatic Task Handling is activated and transport request and tasks are managed by system.

Now you are ready to create the extension items and publish it.

You can see very nice blog posts from my colleague Masaaki Arai How to add a field in standard Fiori apps and other objects by using Custom Fields menu in Key User Extensibility Tools Custom Fields and Logic

https://blogs.sap.com/2020/02/01/adding-field-in-standard-fiori-apps-of-s-4hana-with-custom-fields-a...

 

3.    How to Register Extensions for Transport


Your final step is to register the extensions for transport using SAP Fiori app F1589 Register Extensions for Transport. This app is part of the security role SAP_NW_APS_EXT_ATO_PK_AI_APP, which need to assign to your User ID.

You can check the details in the SAP Fiori apps reference library

https://fioriappslibrary.hana.ondemand.com/sap/fix/externalViewer/#/detail/Apps('F1589')/S16OP

Your roles assignment should be like this, or you can use an equivalent customer-specific security rules.


Logon to your SAP Fiori system and follow these steps:

Search for SAP Fiori app Register Extensions for Transport for Administrator and click on it.

Now you will get an overview of extensions that are available for transport, check the current status of assignment and reassign extensions.


 

4.    Monitoring extensions in the Extensibility Inventory


You can monitor the extensions created in your system using the SAP Fiori app F2587 Extensibility Inventory.

As before, to see this SAP Fiori app in action you will need the relevant authorizations.

This app doesn’t have any standard SAP security role which can be assigned to your User ID, so you have to assign to your security role / business role (PFCG) the Business Catalog (and optionally the business Group to add the tile to your Home Page). You can find the names of the business catalog and business group can be found in the SAP Fiori apps reference library

https://fioriappslibrary.hana.ondemand.com/sap/fix/externalViewer/#/detail/Apps('F2587')/S16OP

Logon to your SAP Fiori system and follow these steps:

Search for Fiori app Extensibility Inventory and click on it.

Now you will get an overview of your extensibility items and to see all details. Pay particular attention to columns Uses or Used By, which provide information about extensibility items that the extensibility item in question “uses” or is “used by”.


 

You can go to SAP help, where you will find a video overview explaining the Transport process.

App-Specific Implementation and Configuration Information


 

Becoming a SAP Fiori for SAP S/4HANA guru


You’ll find much more on the community topic page for SAP Fiori for SAP S/4HANA

Other helpful links in the SAP Community:

Brought to you by the SAP S/4HANA Customer Care and RIG.

 
19 Comments
SyambabuAllu
Contributor
0 Kudos
Really helpful blog.Thanks for sharing!

Thanks,

Syam
0 Kudos
Relay Help Full
robbewuyts
Explorer
Hi, thank you for this blog!

One question: do we need to repeat this for each system? I believe the configuration of ATO cannot be transported, right? Some applications need this ATO setup, even in a test/productive system.

thanks,

Robbe

 
0 Kudos
Hi Robbe,

You don't have to transport Ato configuration. No need to configure ATO in productive system.

But if I want to use the "CUstom Analytical Queries" application, to check out a query in our test system, I need to have a ATO setup in place.

verakovic
Explorer
0 Kudos
Dear Peter,

thank you for your blog, but..

Oh my good!

Do I get it right, that all these steps are just invented by SAP because SAP assumes that key-users/business users are not capable of ab initio assign a transport request to the adaptations?

So,

  1. create a dummy local package, not assigned to a transport layer. Then,

  2. create another package, that will be assigned to a transportation layer, then,

  3. make this "transportable" package eligible for those extension artefacts, aka register it, and then,..finally,

  4. change the package assignment of the extension artifacts to the package assigned to a transport layer, to have them assigned to a transport...


wow! In german, this is called "Arbeitsbeschaffungsmasnahme". Isn't it involving way too many steps? Why not providing the option to directly assign the adaptations to a transport and that's it?

BR,

Aleks
Jocelyn_Dart
Product and Topic Expert
Product and Topic Expert
Hi Aleks

in practice it is one click to set this up with the defaults You are just given the option to adjust it, for example if you have strict naming conventions at your site. Provision of both local and transportable packages are to cater for:

  1. Key users may want to make these changes in different clients - for example in development you want to transport it, in sandbox or production you don’t

  2. Key users may want to trial their changes using local, for example as part of a workshop to show what is possible, or to prototype changes that you do not want to transport before there is agreement on the way forward from multiple perspectives

  3. It is also possible to create different app variants for example for different roles, or for A/B testing with different user groups to see what works best


Hope this helps you see some of the considerations from a key user & UX perspective that makes this kind of flexibility a benefit
Jocelyn
verakovic
Explorer
0 Kudos
Dear Jocelyn,

thank you for your reply and detialed explanation. Yes, I agree that this approach provides more flexibility to decide afterwards if and where something has to be transported, but it would also maybe make sense to have a quick option for transport/package assignment from the very begininng, after one is changing to UI adaptation mode.

Still, what is for me striking or interesting is, the question of the architecture. I guess this blog assumes an embedded system (as the best practice recommendation for newer S4H-systems is), so no differentiation between Frontend/Backend system. I have a case where, though in a newer S4H-System (AnyPrem), the system is a deployed-HUB/Gateway Solution. So, in the steps outlined by Peter, I assume that it is:

 

  1. transaction S_ATO_SETUP executed in the backend

  2. creation of package connected to an transportation layer, in the backend

  3. transports requests in the backend

  4. execution of the software configurations app, in the frontend, but configuring backend packages

  5. Perform your extensions using the respective tools (UI-adaptations, custom fields & logic, custom business objects etc.) in the frontend

  6. Execute the Extension Inventory App, in the frontend


 

Is it correct? If so, I see the need of some different handling of this topic than compared to usual " chose a packaage & transport and click on save"-approach...

 

Thank you again for your time & Input

BR,

Aleks
Jocelyn_Dart
Product and Topic Expert
Product and Topic Expert
Hi Aleks

S_ATO_SETUP is a backend transaction as is confirmed in its configuration documentation

The extension apps - including F2587 Extensibility Inventory - run in the SAP Fiori frontend server and are launched from the SAP Fiori launchpad as is usual for all SAP Fiori apps.

There is no difference to a business user between embedded and standalone when it comes to executing SAP Fiori apps. All are accessed via the SAP Fiori launchpad.

For an administrator, provided you use the recommended task lists such as the SAP Fiori content activation task list SAP_FIORI_FCM_CONTENT_ADMINISTRATION, there is not much distinction either - the task lists handles OData and ICF node activation for you.

There are some differences when it comes to assigning authorizations, however there, as usual, the mass maintenance tools derive these authorizations from your launchpad content assignments in both frontend and backend servers, e.g. refer to https://blogs.sap.com/2018/09/03/fiori-for-s4hana-mass-maintenance-of-business-roles-for-sap-fiori-... and understanding business roles blog series.

Be aware that embedded Fiori Frontend Server has been the recommended approach for SAP S/4HANA since December 2017.  Increasingly most advice is centred on the most common scenario: embedded.

Rgds

Jocelyn
former_member596519
Participant
0 Kudos
Dear Jocelyn,

again, thank you very much for your thorough and detailed answers! I am aware of the recommandation for embedded approach, but I am encountering here an deployed-hub/gateway scenario, setup by somebody else (S4H 1909!) and now it is a little mess...

Best regards

Aleks
wenjie_he
Explorer
0 Kudos
Could you please explain the difference between 'Setup read only' and 'Lock'?
uta_hedemann
Participant

Does anybody know, if there were any changes with S/4 2021?
We have configured test/prodsystems with "Setup read only". Unfortunately after upgrade to S/4 2021 SP1 (some months ago),  we have now problems to start  a specific fiori app F1572  and  when starting S_ATO_SETUP  we only get:  EN: „ZDO active. Function is temporary disabled (see note 3116886).”

We already opened a customer message and implemented note 2956185, but no solution yet.
Some similar notes:
3040585 - In-App-Erweiterbarkeit und ATO-Transporte vorübergehend deaktiviert - SAP ONE Support Laun...
2956185 - Upgrade-Prüfungen für ZDM in technischen Reports - SAP ONE Support Launchpad
3123119 - Upgrade-Prüfungen für ZDM in technischen Reports - SAP ONE Support Launchpad

Looks a bit like 3204440 - Job ATO_REFRESH_READY_FOR_IMPORT_JOB cancelled after S/4HANA 2021 upgrade - SAP ONE Suppor... which is implementable, but we are not during an ZDO upgrade....

former_member596519
Participant
0 Kudos
Following..
0 Kudos
Have you solved this problem?
tom_kaeser
Participant
0 Kudos

Hi!

The custom analytical queries are part of key user extensibility. Those extention items can be transported. Therefore you should use the app on the dev system and transport your changes.

SAP Help

On top please have a look at the this SAP note: 2595483 - An error is displayed loading the Custom Analytical Queries app

Jocelyn_Dart
Product and Topic Expert
Product and Topic Expert
0 Kudos
Hi Uta,

Sorry to have missed this... did you end up getting an answer?

I see the Workbench Lock can also be set deliberately by administrators.

These should also help:

3077994 - Frequently asked questions about Extensibility in SAP S/4 HANA On Premise

2207944 - How to implement a SAP note during System update using SUM (ABAP only)

2501671 - CTS+ and locking of the system for upgrade

 
former_member674455
Participant
0 Kudos

See SAP Note 3077994

Can ATO Setup be done in non-development systems?

0 Kudos
Hi,

in our landscape Focused Build controls the change and transport managment. How can the changes generated and contolled with ATO can be integrated into FB?

 

Thanks,

Rafael
kadudura
Participant
0 Kudos

 

Hello,

What is the scenario for using ATO sandbox package?

I have set up ATO as described above, and it works perfectly, but all objects are automatically created in a local package with the prefix ZZ1_ and never in the sandbox package.

How do extensibility apps know which package (local or sandbox) to use, when creating extensibility objects?

KR,

Konstantin