Layering of Key User Extensibility and Developer Extensibility
With the introduction of developer extensibility (also S/4HANA Cloud ABAP Environment, Embedded Steampunk), the extensibility options in S/4HANA Cloud, public edition have been improved dramatically. Developer extensibility refers to the new capabilities now embedded into the S/4HANA stack, allowing developers to develop tightly coupled on-stack extensions following the ABAP Cloud development model.
In the document Extend SAP S/4HANA in the cloud and on premise with ABAP based extensions there is Chapter 3, “When To Use Which Extensibility Option”, which provides general guidance and typical examples. The general recommendation regarding the use of key user and developer extensibility is:
Key user extensibility shall be chosen for extensions by single business experts.
Developer extensibility shall be chosen for extensions requiring professional ABAP development.
Customers may additionally define a company-specific policy that considers available business expert and developer resources as well as the extension scenario to choose between these options.
Layering of key user and developer extensibility: on-stack extensions are often a mixture of key user extensions and developer extensibility. For these scenarios customers must consider that these extension types are layered (key user extensions on top of developer extensions). Objects built with developer extensibility can be released for key user extensibility, but not vice versa. Consequently, objects that are to be re-used in both layers must be built with developer extensibility.
Exceptions from this layering are discussed in this blog, below.
The documentation describes the layering relationship in more details in the section Key User Extensibility and Developer Extensibility.
Figure: Layering of Key User Extensibility, Developer Extensibility, Partner Add-Ons and SAP standard software.
In a clean core compliant system, the four layers, key user extensibility, developer extensibility, partner add-ons and SAP standard software are clearly separated by name range, software component and/or ABAP packages. Developer extensibility and key user extensibility also have separate (key user / developer) tools for creating, editing, and deleting the objects.
Access to lower layers is possible via released APIs or extension points only. The release of an API or extension point involves the obligation that the releasing party does not change the object incompatibly. Thus, the lower layer can be updated without impacting the upper layer.
Access from lower layers to upper layers are not possible at all, because this would also impact the updatability (exceptions between key user and developer extensibility layer are discussed below).
In SAP S/4HANA public cloud systems this is enforced by the system setup, in private cloud and on-premise systems this kind of setup is in the responsibility of the customer, and customers should set up their system in this way. For example, customers should not modify SAP software and call into their custom code.
Having this picture in mind, it is clear that objects that are to be re-used in the key user and the developer extensibility layer must be built with developer extensibility. Objects built with developer extensibility can be released for key user extensibility. The documentation provides a list of objects that can be released for key user extensibility in the section Key User Extensibility and Developer Extensibility. In contrary, objects in the key user layer cannot be released for developer extensibility.
There is one big exception from this rule, this is the creation of custom fields. For the time being, we recommend creating custom fields with the key user tool. The runtime representation of a custom field is accessible from both, key user extensibility and developer extensibility, independent of the fact whether the field was created using key user extensibility or developer extensibility. For details see the blog https://blogs.sap.com/2022/11/23/custom-fields-in-s-4hana-key-user-versus-developer-extensibility/.
A last point is important to know. If you need to access the data of a custom business object (created with the key user tool) in developer extensibility, you can do this via the released Data Retrieval for Custom Business Objects API (see documentation).