Embedded Steampunk – Some more details for ABAP developers
The SAP S/4HANA Cloud ABAP Environment (Embedded Steampunk) is available for new customers.
Please see Sven Denecken’s video and Arpan Shah presenting Embedded Steampunk in the last SAP S/4HANA Cloud update: SAP S/4HANA Cloud 2208: Run Business Efficiently | SAP News Center
Many of you have read Harald Kuck’s blog post https://blogs.sap.com/2021/09/30/steampunk-is-going-all-in/ which explains nicely the benefits and concepts behind Embedded Steampunk.
But we still get a lot of questions from ABAP experts asking what exactly Embedded Steampunk is about.
This blog provides some more details about Embedded Steampunk for ABAP developers. But stay tuned – we are in the final phase of releasing a new SAP community landing page for Embedded Steampunk. Additionally, a comprehensive SAP S/4HANA ABAP extensibility guide will be published soon. All these resources will answer most of your Embedded Steampunk questions.
From classic ABAP extensions to ABAP Cloud development
You all know the Classic ABAP extensibility model which has been used during the last decades to extend SAP ERP systems. It allows ABAP developers to use and even to modify all SAP objects. This is powerful and flexible. But the missing clear interface between SAP code and the extension adds a lot of test and adaptation effort during SAP upgrades – this is a no-go for the automated SAP software updates in the public Cloud.
With the launch of Steampunk (SAP BTP ABAP Environment) SAP introduced a new ABAP Cloud development model which leads to modern, cloud-ready, and upgrade-stable ABAP apps and extensions.
ABAP Cloud development means:
- Use public SAP APIs (local or remote) released by SAP to access SAP functionality and SAP data.
- Use public SAP extension points released by SAP to extend SAP objects. Modifications to SAP objects are not supported.
- Use ADT (ABAP Development Tools) as your ABAP IDE
- Use RAP (ABAP RESTful Application Programming Model) to build Fiori apps and services. SAP technologies like Dynpro or Web Dynpro are not released for ABAP Cloud development
The ABAP Cloud development rules are enforced via:
- ABAP compiler and runtime checks: We introduced a new ABAP language version = “ABAP for Cloud Development” for ABAP Cloud. This ABAP language version defines the set of supported ABAP statements (e.g, no CALL SCREEN) and launches syntax- or runtime errors if for example, a non-public SAP API is used.
- ABAP authorization checks: We redefined the authorizations in the ABAP Cloud developer role. For example, no authorization to change SAP objects.
The ABAP Cloud development model is mandatory for:
- ABAP apps and extensions built on SAP BTP (Steampunk)
- ABAP extensions built on SAP S/4HANA public Cloud edition (Embedded Steampunk)
This explains the term Embedded Steampunk. The ABAP Cloud development model of Steampunk is now available “embedded” in SAP S/4HANA Cloud.
SAP plans to support the ABAP Cloud development model (Embedded Steampunk) in the SAP S/4HANA private Cloud and on-premise edition as well. Private Cloud and on-premise customers can decide on ABAP object level whether they want to use ABAP Cloud (Embedded Steampunk) or stay with Classic ABAP extensibility.
ABAP Cloud will provide ONE common and future-proof ABAP development model for side-by-side extension on SAP BTP and for extensions running directly on the SAP S/4HANA stack:
- Steampunk: Build ABAP Cloud apps and extensions on SAP BTP (side-by-side to SAP S/4HANA)
- Embedded Steampunk: Build ABAP Cloud extensions on SAP S/4HANA (all editions)
Added value of ABAP Cloud development (Embedded Steampunk):
- Public Cloud: ABAP Cloud (Embedded Steampunk) is the only option* to develop extensions that should run on the SAP S/4HANA public Cloud edition stack – e.g. because the extension needs proximity or coupling to SAP data, SAP transactions, or SAP apps.
For all other loosely coupled apps and extensions SAP BTP is the default choice. Here, developers can choose their preferred programming environment (Java, Node.js, ABAP…). ABAP Cloud added the option to build ABAP based apps or extensions on SAP BTP (Steampunk)
- SAP S/4HANA private Cloud and on-premise edition: ABAP Cloud will be a new option to build upgrade-stable extensions on SAP S/4HANA (Embedded Steampunk) that are ready for the next cloud transformation steps. This complements the SAP BTP extensibility offering and helps to reach a Clean Core.
*Embedded Steampunk is often combined with Key user extensibility – for details and a comprehensive example please read this nice blog post.
Examples and a glimpse into the system
ABAP extension on Steampunk or on SAP S/4HANA public Cloud edition (Embedded Steampunk)
In the public cloud, the ABAP Cloud development model is mandatory for ABAP extensions. The ABAP language version is automatically set to “ABAP for Cloud development” for all custom ABAP objects and cannot be changed. (Here for the custom ABAP class ZCL_BGTEST)
ABAP Cloud development (Embedded Steampunk) on SAP S/4HANA private Cloud or on-premise edition (planned innovation)
In SAP S/4HANA private Cloud and on-premise, ABAP Cloud development will be a recommended option – especially for new ABAP development projects. The ABAP language version of custom ABAP objects (e.g., an ABAP class) can be changed one by one from Classic ABAP (= Standard ABAP) to ABAP Cloud (= ABAP for Cloud Development)
Example for a local public SAP API released by SAP for ABAP Cloud development
The SAP CDS (Core Data Services) view i_product allows to read data (e.g. via a SELECT) from the SAP table MARA (material master). SAP released this SAP CDS view as a local public SAP API for ABAP Cloud development (ABAP language version “ABAP for Cloud development”). The direct access to SAP tables is not allowed in the ABAP Cloud development model.
ABAP Cloud development (Embedded Steampunk) – Get syntax errors when trying to use non-public SAP APIs
The ABAP class ZCL_BGTEST in the screenshot underneath uses the ABAP Cloud development model (ABAP language version “ABAP for Cloud development”). The class cannot be compiled because of two ABAP statements containing syntax-errors:
- Line 23: The SAP function module “POPUP_TO_CONFIRM” is used in the classic Dynpro/SAP GUI world and is no public SAP API in the ABAP Cloud development model.
- Line 24: Direct access to SAP table MARA is not allowed (use public CDS view i_product – see line 27).
As a developer without access to a system with Embedded Steampunk, how is it possible to identify the objects that are released?
I would like to use released objects on lower releases, if they exist, so the code I'm writing today is compatible with Embedded Steampunk.
For "SAP BTP ABAP Environment" (aka "Steampunk") there's the option to use a trial system.
Starting point: https://developers.sap.com/trials-downloads.html resp. https://account.hanatrial.ondemand.com/trial/#/home/trial
There's even a tutorial provided.
For Steampunk, most released objects are listed at https://abapedia.org/steampunk-2208-api/
But I don't know of a way to list released objects in Embedded Steampunk(SAP S/4HANA Cloud) without access to a system. I find it important that already today, all developers in lower releases starts aligning towards the released objects.
Will there be a free public trial for Embedded Steampunk in the last SAP S/4HANA Cloud ?
the public local APIs for Embedded Steampunk can be inspected on the SAP API Business Hub > S/4HANA Cloud > Developer Extensibility (https://api.sap.com/products/SAPS4HANACloud/developerextensibility/bointerface). There you currently find RAP Business Object Interfaces and BAdIs. Likewise, released CDS views can be found under SAP API Business Hub > S/4HANA Cloud > CDS Views (https://api.sap.com/products/SAPS4HANACloud/cdsviews/cdsviews)
These sections will be extended continuously with newly released objects.
Please also have a look at the product documentation on SAP Help to get more information about CDS Views and Developer Extensibility in SAP S/4HANA Cloud.
Classic Steampunk have released objects of types(and more?):
does none of these object types have released objects in Embedded Steampunk on SAP S/4HANA Cloud ? I would expect the released objects on S/4 to be a superset of classic steampunk?
very good point, of course the objects that are released on Steampunk are also available in Embedded Steampunk in SAP S/4HANA Cloud. You can find more information in the corresponding section of the SAP Help documentation.
The focus of the released objects listed on the SAP API Business Hub is on business object-related object types.
As an interim solution you can check the content of note: https://launchpad.support.sap.com/#/notes/3088062
This includes a table of successor informations ("old API" -> released API),
e.g. MARA -> I_PRODUCT
Our goal is to provide this information in a human and machine readable format in near future.
Thanks, I've noted that 150+ BAPIs are mentioned in the "old API" column, does SAP consider BAPIs to be deprecated/obsolete?
BAPIs will most likely not be released for ABAP for Cloud development. Read access to business data will be available via CDS views. Updates via RAP facades.
"Updates via RAP facades" - is this mentioned somewhere in documentations or any of the learning courses?
I understand that USING BAPis won't be possible to do it in the cloud version, but in the on premise we may still need to be required to use a BAPI as I don't think all available BAPIs have been replaced by RAP facades.
When working with RAP I noticed it is not the best tool to work with BAPIs, especially where you have a Parent->child relationship and have to pass them to the BAPI at the same time e.g. BAPI_PO_CREAT1. There is still no example how to do it. BOPF FIORI apps would be using a draft table and then converting it to an active instance on 'SAVE' (although this is not released to customers - so it is a hack!).
Still not sure how this would be done in RAP. An example would be much appreciated.
And maybe a quick blog post comparing the on premise to cloud world e.g.
Before: SELECT FROM DB TABLE
Cloud: CDS Views
Cloud: RAP facades
Before: User exits, Customer Exits, BTEs, BADIs
Cloud: BADIs implemented in Eclipse ADT or via a "Custom Logic" FIORI app
weil, this note is better than nothing, but for anything non-obvious it is not helpful.
eg kbed is also used in maintenance orders and not only in production orders which is completly ignored in the table from the note.
eg currently I am searching for a method to parse an ISO timestamp string into a timestamp (like cl_xlf_date_time->parse offers) - does anybody here has a suggestion for this (besides manual implementation) in steampunk?
Otherwise we are looking forward to S/4HANA Cloud ABAP Environment!
I typically search via https://github.com/abapedia/steampunk-2208-api/search?q=iso&type=code
https://github.com/abapedia/steampunk-2208-api/blob/d9046cfb3a88f05e1c8cedfc9328c677e0db76ea/src/cl_abap_utclong.clas.abap#L36 might work for you
Thanks, great idea, I wasn't really aware that I could search abapedia.
if the note 2923223 is back, you'll find there a list of public released and also deprecated APIs like classes, Views and BDEFs and so on...
I created a new ABAP repository Tree in Eclipse ADT for released objects.
ABAP Repository Tree for released objects
BADIs are fully supported in Embedded Steampunk. BADIs belong to the public extensions points and therefore are upgrade-stable.
User exits and BTEs belong to classical extension techniques and are not supported for ABAP Cloud development following the Embedded Steampunk rules. They still occur in private Cloud deployments, though, and can be implemented using the classic extension approach.
Thanks Karl Kessler : This is very helpful , How to handle the background job reports and SE11 tables using embedded steam , Is there any roadmaps planned for this using embedded steampunk ?
There is a list of all released BADIs available as attachment to OSS note: OSS Note mit Successor Excel
Thomas Fiedler : Really help SAP Note 🙂 I am able get most of the new BADIs and hopefully these will be available in the on-premise version of 2208 as well ?
Yes, this is our goal to provide the same list of released BAdis also for on-premise with the 2022 release.
Hi Boris and Thomas
Are there replacements for BTEs? Perhaps in the same way that VOFM has a replacement in ES_SD_SLS_EXTEND? (see this blog post by Vijay Sharma)
BTE sucessor should be the newly released RAP Events AFAIK, but the question remains, how fast this will be adopted in the individual areas...
Thanks for this very informative blog.
What is the difference between 'ABAP for Cloud Development' and 'ABAP for Key Users'?
'ABAP for Cloud Development' and 'ABAP for Key Users' are explained in detail in the following blog posts:
S/4HANA Extensibility Concept Details: Restricted ABAP | SAP Blogs -> general concept of ABAP Language versions and ABAP for Key Users.
Restricted ABAP for SAP BTP ABAP Environment | SAP Blogs -> 'ABAP for Cloud Development'. In this blog the name of the language version is still referred to as "ABAP for SAP BTP", it has been recently renamed to 'ABAP for Cloud Development' . It is available in SAP BTP (therfore the original name) and - as of 2208 - in SAP S/4HANA Cloud, and in S/4HANA on-premise.
So if I want to use it in a S/4HANA private Cloud system can I do this once the 2022 OP release is available? And in a greenfield scenario (where the realize phase has not yet started) it is SAP's recommendation to do so?!
I would assume that 'ABAP for Cloud Development' and 'ABAP for BTP' will have some differences. Embedded steampunk should have less restrictions, i believe, as it will be closer to S/4HANA. ABAP for BTP won't have any BAdI implementations or direct access to back-end released CDS views. As per my understanding, Embedded steampunk ABAP should be closer to ABAP for Key users. No?
there is no difference between the language versions 'ABAP for Cloud Development' and 'ABAP for BTP'. 'ABAP for Cloud Development' is just the new name for 'ABAP for BTP'.
But there is of course a difference in the amount of APIs and extension points that you can use. In SAP BTP ABAP Environment, you can use the (local) APIs (and extension points) from the ABAP platform only. In SAP S/4HANA Cloud ABAP Environment, you can use the (local) APIs from ABAP platform and from the S/4HANA Cloud layer. This is visualized nicely in Harald Kucks blog https://blogs.sap.com/2021/09/30/steampunk-is-going-all-in/ in the pictures.
It is important to distinguish between the language version (= which ABAP language elements are allowed) and the APIs (and extension points) that are available in a particular product. The language version 'ABAP for Cloud Development' is exactly the same in SAP BTP and in S/4HANA Cloud. The APIs (and extension points) are different.
For 'ABAP for Cloud Development' and 'ABAP for Key Users', the language versions are different. 'ABAP for Cloud Development' is much richer. See details in the my blog Restricted ABAP for SAP BTP ABAP Environment | SAP Blogs . The APIs are also different.
I hope this clarifies your question.
Best regards, Thomas.
For some detailed questions on ABAP language versions, the following FAQ might be useful:
ABAP Language Versions – FAQs
The promised SAP community landing page for SAP S/4HANA Cloud ABAP Environment (Embedded Steampunk) is now available:
SAP S/4HANA Cloud ABAP Environment | SAP Community
Use this community to ask questions or to find more information about Embedded Steampunk.
Watch the replay of Developer Extensibility and Business Events with RAP on SAP S/4HANA Cloud ABAP Environment (incl. demos of SalesOrder scenarios).
Hi Boris Gebhardt
the term "ABAP Cloud" was announced by Jürgen Müller in the keynote
and we got the hint that your blog explains the term.
Unfortunately I still don't get it.
In your blog these terms are used:
- ABAP Steampunk
- ABAP Cloud development model
- ABAP Cloud development
- ABAP for Cloud development
- ABAP Cloud
(The term "ABAP Cloud" is rarely used in the blog .. and not even used once in https://blogs.sap.com/2022/09/09/abap-language-versions-faqs/ )
Question: Are all these terms synonyms so far?
If yes: Can we now reduce it to just "ABAP Cloud" starting with SAPTechEd 2022?
Anyhow it will give us a hard to time calling the ABAP engine
in an OnPrem S/4HANA system:
"ABAP Cloud" .. without any Cloud involved.
Yes, now we can start to clean up all the names/terms and use those consistently. Concerning your list - only ABAP Cloud will survive this cleanup.
ABAP Cloud = The new ABAP development model (IDE, services, development model, ABAP language) leading to state-of-the-art, cloud-ready and upgrade-stable extensions and solutions.
ABAP Cloud is supported in the following products (+ links to the recommended blogs):
ABAP Cloud includes everything you need to build state-of-the art apps and services:
So, we use the term ABAP Cloud for the entire development model and for the ABAP language version. This is consistent with the use of the term “ABAP”.
ABAP has always been more than the pure ABAP language.
The term ABAP Cloud in SAP S/4HANA Cloud, private edition and in on-premise
Many of the SAP S/4HANA Cloud, private edition and on-premise customers want to go for a Clean Core to have smoother SAP upgrades and to build future-safe extensions that are ready for their next cloud transformation steps.
For ABAP extensions this means that they follow whenever possible the cloud extensibility rules and switch step by step from classic ABAP to ABAP Cloud.
Please read the new ABAP extensibility guide to get more details about ABAP Cloud.
Additionally, we plan to release a blog explaining ABAP Cloud in more detail.
Hi Boris Gebhardt , I was led here from Teched Keynote and would like to share some doubts regarding new Clean Core API.
We are coming from ABAP addon partner (in a own registered namespace) and have only used BTP apps as side-by-side extensions.
For on-prem system we developing our addon in S/4HANA system but have ERP EHP8 system in our system track (as per SAP ICC suggestion for ABAP addons!) adopting one codeline approach. That being sad we are using the same released BAPIs for both S/4 and ERP.
Following new ABAP Cloud world suggesting to use new released APIs with new ABAP language version we cannot use BAPIs anymore. We also cannot use new RAP fascades as they are not available in ERP. So we will now have to implement some additional layer to split delivery components for ERP and S/4HANA and leave one codeline way, right?
My question to you: Can you provide a compability layer for ERP in SAP standard that uses BAPI or RAP depending on current system? Otherwise many many many manpower will be utilized at many development partners and probably also customers to implement such a compability layer, which will be very un-sustainable.
few examples, for code that runs on classic ABAP and ABAP cloud,
1: converting hex to utf, https://github.com/open-abap/open-table-maintenance/blob/main/src/zcl_otm_table_maintenance.clas.abap#L132-L161
2: listing key fields of a database table, https://github.com/open-abap/open-table-maintenance/blob/main/src/zcl_otm_table_maintenance.clas.abap#L239-L280
Its quite a lot of work
Also created https://github.com/open-abap/cross-http-client some time ago, pull requests welcome
Hi Lars, yeah, that dynamic aproach is what we have started doing in cases we need it (ERP vs. S/4HANA) and maybe many other SAP customers/partners need to do. As we are providing our applications as add-on, which required use of only our registered namespace, we cannot rely on open source projects outside of our namespace.
But while you show examples for fascading ABAP tooling, I am asking more about APIs for SAP processes for both read (many many CDS views are already available, but no chance to use them on ERP) and write access (hardly any fascades for BAPIs available) to documents.
Edit: And while I have the chance here - THANKS a lot for your great efforts abapGit and ABAPLint! 🙂
Just automatically rename it and copy into your namespace
I’ve only just found this blog and was interested if the BC flight model, such as SCARR, SPFLI etc are available? Thanks
it's technically there - but it's not released. Instead we offer a new reference scenario that can be imported from github. See: https://github.com/SAP-samples/abap-platform-refscen-flight
Best Regards, Volker
What are the specific (1) Advantages and (2) Limitations of Embedded Steampunk/Developer On-Stack extensibility as compared to Side-by-Side extensibility?
Please check chapter 3 "When to use which cloud extensibility option" of the new ABAP extensibility guide . Here you find the answers when to use on-stack and when to use side-by-side extensibility.
Olga Dolinskaja Will there be an ABAP Test Cockpit (ATC) check we can leverage to check the ABAP for Cloud Development status of development objects already created in the landscape?
see please this blog: https://blogs.sap.com/2022/10/26/how-to-make-your-custom-code-cloud-ready-and-upgrade-stable/
The new functionality with regard to the ATC check for ABAP cloud development will come in the upcoming weeks (will be described in the new blog), stay tuned!
I need to extend standard App such as Sales order by additional fields in addition to add custom logic for some validations (that's implemented already in customer exits or BADI).
To keep the core clean, I need to do this using the BTP side by side extension, is this applicable? If not, what alternatives do you suggest?
To keep the clore clean you can use the on-stack cloud extensibility options based on key-user extensibility or Embedded Steampunk, or you build the extension side-by-side on SAP BTP.
On-stack extensibility is used for extensions which are tightly coupled to the extended SAP S/4HANA apps, transaction or data. For loosely coupled extensions SAP BTP is the default choice.
For details please refer to chapter 3 "When to use which cloud extensibility option" of the ABAP extensibility guide.
Your example (add a custom field to the SAP sales order app, implement a BADI in the SAP business logic) sounds like a very tightly coupled extension and therefore I would first check key-user extensibility or Embedded Steampunk.
Thanks a lot Boris for your reply.
Hi Boris Gebhardt
Thank you for sharing valuable information.
With regards to developer/on-stack extensibility, we see a list of legacy objects that have 'released' successor (substitution) object recommendations, as seen in Note#3088062. While this list is helpful for on-stack developments, however most of those substitution objects are 'non-extensible' in context of Developer Extensibility.
For example, there are many traditional BAPIs that are recommended to be substituted with released BDEF or DDLS objects; (example - I_JOURNALENTRYTP for BAPI_ACC_DOCUMENT_POST) but they are mostly non-extensible, meaning any custom field extensions to the legacy object, cannot be handled via the released successor/substitution objects. Also checked in the SAP data sources like ARS_ADT_API_FLTR in latest S/4HANA 2022 system - which says there are only 20 released objects that are extensible (tagged - EXTEND_IN_CLOUD_DEVELOPMENT).
As custom field extensions are quite common customer use-cases, wanted to understand what is the recommended alternative for such scenarios? Is the 'Tier-2' approach suggested here until more released APIs are enabled for custom extensions in Developer Extensibility? Kindly advise.