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
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 Version | Used For | Restrictions |
|---|---|---|
| Standard ABAP | Classic development (legacy) | None — full unrestricted ABAP language |
| ABAP for Cloud Development | Tier 2 extensions, ABAP Cloud runtime | Only C1 APIs, no CALL FUNCTION, no direct table SELECT |
| ABAP for Key Users | Key User field validation logic | Most restricted — no custom DB tables, no RFC |
What is Blocked — and the Correct Alternatives
" ❌ 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. " ✅ ReleasedKey Released API Replacements
| Forbidden (Standard ABAP) | Correct (ABAP Cloud) |
|---|---|
| SELECT * FROM vbak | SELECT FROM I_SalesOrder (CDS view) |
| SELECT * FROM ekko | SELECT FROM I_PurchaseOrder (CDS view) |
| SELECT * FROM lfa1 | SELECT 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 / ekpo | TYPE STRUCTURE OF I_SalesOrderItem |
How to Set ABAP Cloud Language Version
" In ADT (Eclipse):
" Right-click on ABAP class → Properties → ABAP 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 ADT → Properties → ABAP Language Version
" Setting at package level forces all objects in the package to comply
" Check current language version:
" ADT → Outline view → Class properties → Language VersionATC 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.
" 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 unresolvedDEWA 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
Best Practices
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 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.
SAP provides transaction SATRS for semi-automated conversion of some classic ABAP patterns to ABAP Cloud compliant equivalents. Use it to accelerate bulk migration.
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.
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.