ABAP Cloud & Clean Core

Clean core means keeping the S/4HANA core free of modifications and tight coupling so that upgrades are fast and risk-free.

36.1 Clean core

Clean core means keeping the S/4HANA core free of modifications and tight coupling so that upgrades are fast and risk-free. Extensions use only stable, released interfaces and are separated from SAP code:

Key user (in-app) Inside S/4HANA Fiori apps: Custom Fields, Custom Logic, Custom CDS Views, Custom Business Objects Developer extensibility (on-stack) Inside S/4HANA ("Embedded Steampunk") ADT, ABAP Cloud

BTP ABAP Environment, CAP (Node.js/Java), Build Apps On-premise / private cloud

All classic tools — governed by clean-core levels SAP describes extension quality with clean-core levels (introduced 2025: A = ABAP Cloud/released APIs only, B = classic APIs, C = internal/unreleased objects, D = modifications and other not-recommended practices) — check the current SAP guidance for your release.

36.2 ABAP Cloud development model

Language version "ABAP for Cloud Development": restricted syntax — no WRITE, no dynpros, no SUBMIT, no direct access to SAP tables, no unreleased function modules/classes, no CALL TRANSACTION, no file system or GUI_UPLOAD.

Only released objects (release contract C1 "use system-internally", C0 extension points, C2 remote APIs) may be used. Check the API state in ADT (*Properties → API State*) or the Cloud Readiness / Released Objects lists (also on GitHub: SAP/abap-atc-cr-cv-s4hc).

Tools: ADT only; RAP for transactional apps, CDS for data models, classes for logic, IF_OO_ADT_CLASSRUN for console output.

Software components and packages with ABAP language version set to *ABAP for Cloud Development*.

36.3 Classic vs ABAP Cloud equivalents

ABAP Cloud (released) Current date/time sy-datum, sy-uzeit

cl_abap_context_info=>get_system_date( ), utclong_current( ), xco_cp=>sy->date( )

cl_abap_context_info=>get_user_technical_name() Read customer master SELECT … FROM kna1 SELECT … FROM I_Customer Create sales order

EML on I_SalesOrderTP (where released) Fiori elements, out->write() SM36, JOB_OPEN Application jobs (IF_APJ_*)

CL_WEB_HTTP_CLIENT_MANAGER + communication arrangements RAP locking; CL_ABAP_LOCK_OBJECT_FACTORY

XCO_CP_* (strings, time, JSON, XLSX, generation)

36.4 Wrapping unreleased functionality

On-premise/private cloud, when no released API exists, SAP's recommended approach is a wrapper: create a classic-ABAP class (in a classic software component) that calls the unreleased API, release it with a C1 contract for cloud development, and consume the wrapper from ABAP Cloud code. Replace the wrapper when SAP releases an official API.

36.5 BTP ABAP Environment

Provisioned in an SAP BTP subaccount (free tier/trial available), developed with ADT, transported via gCTS-based software components and the *Manage Software Components* app.

Integration via communication scenarios, systems, and arrangements; destinations via the BTP Destination service.

UI via Fiori elements apps deployed to the BTP launchpad (SAP Build Work Zone).

36.6 Readiness checks

Run ATC with the Cloud Readiness check variant (ABAP_CLOUD_READINESS, and S4HANA_READINESS for S/4HANA conversion) to find usages of unreleased APIs and obsolete statements in classic code.