ABAP Cloud
Language Version
API Compliance
Compiler

ABAP Cloud

The restricted ABAP language version that enforces Clean Core compliance at compile time — allowing only released APIs, CDS-based data access, and modern OO programming patterns. The foundation for upgrade-safe ABAP development.

ABAP Language Versions Overview

ABAP Language Versions
Rendering diagram…

Executive Summary

ABAP Cloud is the restricted ABAP language variant that compiles only API-compliant code. When a program, class, or function group is set to language version "ABAP for Cloud Development," the ABAP compiler refuses to compile any reference to unreleased, deprecated, or system-internal APIs. This makes Clean Core compliance a compile-time guarantee rather than a code review convention — violations are caught before the object can even be activated.

Three ABAP Language Versions

Language VersionUsed ForRestrictions
Standard ABAPClassic development (legacy)None — full unrestricted ABAP language
ABAP for Cloud DevelopmentTier 2 extensions, ABAP Cloud runtimeOnly C1 APIs, no CALL FUNCTION, no direct table SELECT
ABAP for Key UsersKey User field validation logicMost restricted — no custom DB tables, no RFC

What is Blocked — and the Correct Alternatives

Compile-time enforcement
ABAP Cloud violations are caught at activation time in ADT, before any transport. The ABAP compiler itself enforces the restrictions — there is no way to activate a non-compliant object.
abap
" ❌ These compile in Standard ABAP but FAIL in ABAP Cloud:

" 1. Direct SELECT on SAP dictionary tables (use CDS views instead)
SELECT * FROM ekko INTO TABLE @lt_po.  " → ATC BLOCKER: use I_PurchaseOrder CDS

" 2. CALL FUNCTION (RFC)
CALL FUNCTION 'BAPI_SALESORDER_GETLIST'  " → ATC BLOCKER: use released OData API
  EXPORTING  CUSTOMER_NUMBER = lv_kunnr.

" 3. CALL TRANSACTION
CALL TRANSACTION 'VA01'.  " → ATC BLOCKER: forbidden in Cloud Development

" 4. SUBMIT
SUBMIT RVKWREP4.  " → ATC BLOCKER: forbidden in Cloud Development

" 5. Unreleased system variables
lv_user = sy-msegno.  " → ATC BLOCKER: SY-MSEGNO not released for Cloud

" 6. Type reference to unreleased SAP type
DATA: ls_vbap TYPE vbap.  " → ATC BLOCKER: VBAP is not released

" ✅ Correct patterns in ABAP Cloud:

" 1. CDS view instead of direct table SELECT
SELECT SINGLE SalesOrder, SoldToParty
  FROM I_SalesOrder  " Released CDS view
  WHERE SalesOrder = @lv_so_id
  INTO @DATA(ls_so).

" 2. Released OData API via CDS / RAP (no CALL FUNCTION needed)
READ ENTITIES OF i_salesorder_api01
  ENTITY SalesOrder
  ALL FIELDS WITH VALUE #( ( SalesOrder = lv_so_id ) )
  RESULT DATA(lt_so).

" 3. Released system variables
lv_user = sy-uname.    " ✅ Released
lv_date = sy-datum.    " ✅ Released
lv_time = sy-uzeit.    " ✅ Released

Key Released API Replacements

Forbidden (Standard ABAP)Correct (ABAP Cloud)
SELECT * FROM vbakSELECT FROM I_SalesOrder (CDS view)
SELECT * FROM ekkoSELECT FROM I_PurchaseOrder (CDS view)
SELECT * FROM lfa1SELECT FROM I_Supplier (CDS view)
CALL FUNCTION 'BAPI_SO_*'READ/MODIFY ENTITIES OF I_SalesOrder_Api01
CALL TRANSACTION 'VA01'N/A — use released RAP BO or Fiori app
sy-mandt (direct access)cl_abap_context_info=>get_system_date()
TYPE vbap / ekpoTYPE STRUCTURE OF I_SalesOrderItem

How to Set ABAP Cloud Language Version

abap
" In ADT (Eclipse):
" Right-click on ABAP classPropertiesABAP Language Version
" → Select: ABAP for Cloud Development

" In ABAP Editor (SE80/SE24): Not recommended for new development
" Use ADT for all ABAP Cloud development

" For entire Package (recommended):
" Right-click Package in ADTPropertiesABAP Language Version
" Setting at package level forces all objects in the package to comply

" Check current language version:
" ADTOutline viewClass propertiesLanguage Version

ATC Configuration for Clean Core Enforcement

Configure an ATC check profile that treats all unreleased API usage as BLOCKER severity, then attach this profile to the transport release check. No transport leaves the system with BLOCKER findings.

abap
" ATC Check Profile for Clean Core enforcement
" Transaction: ATC → System Configuration → Check Profiles

" Create profile: ZCLEANCORE_MANDATORY
" Checks to include:
" - SLIN_UMETH (unreleased method usage)          → Severity: BLOCKER
" - SLIN_UATTR (unreleased attribute usage)        → Severity: BLOCKER
" - SLIN_UCLAS (unreleased class usage)            → Severity: BLOCKER
" - SLIN_UOPER (deprecated operation usage)        → Severity: CRITICAL
" - SLIN_UPROG (unreleased programs/FM)            → Severity: BLOCKER
" - FINDMSAG    (deprecated message class)          → Severity: MAJOR

" Transport check: reject transport request if
" any BLOCKER findings remain unresolved

DEWA Enterprise Migration

Adoption Date
Q1 2024
Legacy ABAP Programs
600
Total ABAP Objects
8,000
Compliant by Q4 2024
89%
Remaining (scheduled)
11%
ATC Integrated with Cloud ALM
Yes
Migration Target
Remaining 11% of active ABAP development objects are scheduled for migration before the S/4HANA 2025 OP upgrade in August 2025. All objects in the critical path (BTP-facing, BAdI implementations, RAP behaviour classes) are already 100% compliant.

Best Practices

Set language version at package level

Configure ABAP Cloud language version on the entire package, not object-by-object. Package-level enforcement is consistent and cannot be accidentally missed on new objects.

Migrate incrementally — prioritise BTP-facing code

Migrate legacy ABAP objects to ABAP Cloud incrementally. Prioritise objects that are called from BTP extensions, CAP services, or OData APIs first — they carry the highest upgrade risk.

Use Clean Core Code Conversion tool

SAP provides transaction SATRS for semi-automated conversion of some classic ABAP patterns to ABAP Cloud compliant equivalents. Use it to accelerate bulk migration.

Pair with ATC transport gate

ABAP Cloud language version catches violations at compile time. Pair it with an ATC transport gate (BLOCKER = transport rejected) to prevent any non-compliant code from reaching QA.

Train developers before starting projects

ABAP Cloud restrictions are significant for developers trained on classic ABAP. Run an internal training session before any new project starts — surprises mid-project are expensive.

Common Pitfalls

Partial compliance
Setting Cloud language version on a class but leaving the calling program as Standard ABAP is not compliance — the calling code can still pass unreleased data types. Entire package must be migrated together.
Workarounds that bypass restrictions
Wrapping a non-released function module in a thin ABAP Cloud-compliant wrapper class is explicitly against the Clean Core spirit and will be flagged in SAP Clean Core Assessments.
No ATC transport gate
Setting the language version alone does not prevent deployment of violations found at runtime (e.g. dynamic code generation). The ATC transport gate is the critical enforcement layer.
Starting migration without a baseline report
Without an initial ATC baseline report, you cannot measure migration progress. Run a full ATC assessment and export results to CSV before beginning any migration work.

Security Considerations

ABAP Cloud as a Security Layer
ABAP Cloud restricts dangerous patterns — dynamic SQL, CALL TRANSACTION, direct table access — that are common attack vectors in classic ABAP. The restricted language version is itself a meaningful security improvement over unrestricted ABAP. However, SQL injection risks still exist in CDS SELECT statements. Always use host variable syntax (@ prefix on all variables in WHERE clauses) in every CDS SELECT to prevent injection.