ABAP Cloud: what changes compared to classic ABAP
What ABAP Cloud is, where it is mandatory, what disappears in each area of the code, what replaces it, and what is still allowed, contrary to what is often said.
ABAP Cloud is not a different language. It is the same ABAP with a set of rules that make it upgrade-safe: whatever SAP does not guarantee as stable simply does not exist for those who program in it. Understanding exactly what changes avoids two common mistakes: underestimating the conversion effort and, at the other extreme, believing that "nothing we do today works there".
What ABAP Cloud is
SAP defines ABAP Cloud through four rules:
- the "ABAP for Cloud Development" language version, a lean version of ABAP, without obsolete statements and without anything that depends on SAP GUI or the application server;
- released objects only: from SAP, the code uses only what SAP publishes as an API, with a stability contract;
- ABAP Development Tools (ADT) only, in Eclipse: there is no development through SAP GUI;
- RAP (ABAP RESTful Application Programming Model) as the model for transactional applications.
What "released" means, for whom and with what guarantee is covered in API release contracts: what C0, C1, C2, C3 and C4 guarantee. Besides Standard ABAP and ABAP Cloud, there is a third language version, even more restricted: ABAP for Key Users, used by the Fiori extensibility apps such as Custom Logic and Custom CDS Views. It is covered in ABAP for Key Users: what key user objects are and where they fit in Clean Core.
Where it is mandatory
| Product | ABAP Cloud |
|---|---|
| SAP BTP ABAP Environment and S/4HANA Cloud Public Edition | Mandatory: classic ABAP does not exist |
| S/4HANA on-premise and Private Edition, since 2022 | Optional and recommended: coexists with classic ABAP, object by object |
In S/4HANA on-premise, each object has its own language version. A system can have old classic code and new ABAP Cloud code side by side, and the conversion can be done gradually.
What prevents the use of what is not allowed
In ABAP Cloud, the rule does not depend on someone running the ATC: it is enforced by the syntax check. An object that uses something not released, or a statement that does not exist in the language version, cannot be activated. With dynamic access, such as a call built at runtime, the check happens at execution, with a runtime error. The ATC remains useful for assessing classic code before conversion, pointing out what would prevent the switch.
What changes, area by area
Object types
| In classic ABAP | In ABAP Cloud |
|---|---|
Executable program (REPORT), module pool, INCLUDE, type pool |
Do not exist. Only classes, interfaces and function groups |
| Dynpro, selection screen, GUI status, SAP GUI transaction | Do not exist. The UI is Fiori on top of RAP |
| Dictionary search help | Does not exist. CDS-based search help |
CDS in the old format (define view) |
Obsolete: SAP only evolves the view entity, which is the format to use |
| User exit, implicit or explicit enhancement | Do not exist. Only released BAdIs |
Custom function groups and function modules are still allowed, without the TABLES parameter.
User interface and lists
The entire SAP GUI world is left out: WRITE and lists, TOP-OF-PAGE, AT LINE-SELECTION, PARAMETERS, SELECT-OPTIONS, START-OF-SELECTION, CALL SCREEN, SET PF-STATUS and the like. The UI becomes Fiori, with RAP exposing the data through an OData service. ALV, whether through REUSE_ALV_* or CL_SALV_TABLE, is not available either.
Calling programs
SUBMIT, CALL TRANSACTION and LEAVE TO TRANSACTION do not exist. Background processing becomes an application job (job catalog and job template), and logic is reused through classes.
Database
| In classic ABAP | In ABAP Cloud |
|---|---|
Native SQL (EXEC SQL), cursors, CALL DATABASE PROCEDURE |
Do not exist. ABAP SQL and AMDP |
CLIENT SPECIFIED, USING CLIENT (access to another client) |
Do not exist: each program sees only its own client |
| Reading any SAP table | Only through released CDS views, such as I_Product instead of MARA and I_JournalEntry instead of BKPF |
| Custom tables | Reading and writing are still allowed |
FOR ALL ENTRIES, BYPASSING BUFFER, WITH PRIVILEGED ACCESS and AMDP are still allowed. AMDP must be client-safe and use only released objects.
Transactions and updates
- Update task (
CALL FUNCTION IN UPDATE TASK),SET UPDATE TASK LOCALandPERFORM ON COMMITdo not exist: updates are always local, in the same process. COMMIT WORKis still allowed for whoever controls the transaction, but not inside RAP: in the handlers and in the save phase, the framework itself commits.
Parallel processing and RFC
| In classic ABAP | In ABAP Cloud |
|---|---|
STARTING NEW TASK, tRFC |
Released frameworks: CL_ABAP_PARALLEL and the Background Processing Framework |
CALL FUNCTION DESTINATION with an SM59 destination |
Still allowed, with the destination coming from a communication arrangement |
Dynamic programming
- Code generation (
GENERATE SUBROUTINE POOL,INSERT REPORT,READ REPORT) does not exist. SAP offers the XCO APIs to generate objects. - Dynamic tokens are still allowed:
ASSIGNby name,CREATE OBJECTby class name, dynamic method calls andSELECTwith a dynamic table. The release check is done at runtime. - RTTS (
CL_ABAP_TYPEDESCRand subclasses) is still allowed;DESCRIBEdoes not exist.
Technical services
Each classic service has a released API in its place:
| Service | In classic ABAP | In ABAP Cloud |
|---|---|---|
| Application log | BAL_LOG_CREATE, BAL_DB_SAVE |
CL_BALI_LOG |
| Number range | NUMBER_GET_NEXT |
CL_NUMBERRANGE_RUNTIME |
SO_NEW_DOCUMENT_ATT_SEND_API1, CL_BCS |
CL_BCS_MAIL_MESSAGE |
|
| Locking | Direct call of ENQUEUE_* |
CL_ABAP_LOCK_OBJECT_FACTORY |
| Change document | CHANGEDOCUMENT_OPEN |
CL_CHDO_WRITE_TOOLS |
| Jobs | JOB_OPEN, JOB_CLOSE |
Application job (CL_APJ_RT_API) |
| Forms | Smart Forms, SAPscript | Adobe Forms, through Adobe Document Services |
| Spreadsheet | Download through SAP GUI | XCO_CP_XLSX |
| External communication | SM59 destinations | Communication scenarios and arrangements |
| Table maintenance | Maintenance view (SM30) | Business configuration object and configuration app |
Files on the application server (OPEN DATASET) and upload or download through SAP GUI are left out.
Language
ABAP Cloud removes what was already obsolete and what depended on the classic environment:
- macros (
DEFINE), header lines in internal tables,OCCURS,RANGES,MOVE,COMPUTE,REFRESH,CATCH SYSTEM-EXCEPTIONS, logical databases and extracts; MESSAGEonly withINTO: the message reaches the user through an exception, through RAP or through the application log;BREAK-POINTin the code (ASSERTis still allowed);GET TIMEandSET LANGUAGE: date and time come fromGET TIME STAMPandCL_ABAP_CONTEXT_INFO;- most system fields: the official ones include
sy-subrc,sy-tabix,sy-index,sy-uname,sy-languandsy-mandt; - conversion routines: only
ALPHAandISOLA.
FORM and PERFORM still compile, but SAP marks them as obsolete, supported only temporarily.
What is still allowed, contrary to what is often said
- creating and calling custom function modules;
- synchronous RFC, with a destination from a communication arrangement;
COMMIT WORKoutside RAP;- AMDP;
- dynamic programming and RTTS;
CALL TRANSFORMATIONwith XSLT and Simple Transformations;- reading and writing custom tables;
AUTHORITY-CHECKwith released or custom authorization objects;FOR ALL ENTRIESandWITH PRIVILEGED ACCESS.
Changes between releases
The language version evolves. From S/4HANA 2023 (ABAP 7.58) to 2025, the following became allowed, among others: WAIT UP TO, function calls IN REMOTE SESSION and secondary database connections, provided they are opened through a connection object. Before ruling out a technique, it is worth checking the documentation for the release in use.
How ABAP Cloud coexists with classic ABAP
In S/4HANA on-premise and Private Edition, the two coexist:
- classic code can call anything, including ABAP Cloud objects;
- ABAP Cloud code calls released SAP objects and Z objects in the same software component. To call a classic object in another software component, that object must be released with the C1 contract, which is the role of a wrapper.
The details of this rule are in Software components in ABAP Cloud: who can call whom. For the effect of this on the SAP Cloud ALM dashboard, see Why a program with a classic screen stops at Level B.
Sources
- SAP Help, ABAP Keyword Documentation, Language Elements in ABAP Versions (S/4HANA 2025 and 7.58) and the ABAP for Cloud Development documentation.
- SAP Help, SAP BTP ABAP Environment: object types, application jobs, forms, communication and business configuration.
- SAP Community, ABAP Cloud FAQ.
- Thomas Schneider (SAP), ABAP Language Versions – FAQs, SAP Community.
- SAP, Cloudification Repository (GitHub SAP/abap-atc-cr-cv-s4hc).