ABAP Cloud vs Classic ABAP: Der komplette Vergleich 2025

kategorie
Vergleich
Veröffentlicht
autor
Johannes

ABAP Cloud vs. Classic ABAP - was sind die Unterschiede? Welche Version solltest du lernen? Dieser komplette Vergleich zeigt dir Side-by-Side, was sich geändert hat und warum.

🎯 Überblick: ABAP Cloud vs Classic ABAP

AspektClassic ABAPABAP Cloud
Seit wann?1980er Jahre2019 (ABAP Environment)
Verfügbar inSAP ECC, S/4HANA On-PremSAP BTP, S/4HANA Cloud
EntwicklungsmodusAlle ABAP-FeaturesNur Released APIs
UI-TechnologieDynpro, WebDynpro, FioriNur Fiori
DeploymentOn-PremiseCloud & On-Premise
Upgrade-StabilitätOft manuell anpassenAutomatisch (Clean Core)
LernkurveMittelSteil (viele neue Konzepte)

Kurz gesagt: ABAP Cloud ist die moderne, cloud-ready Variante von ABAP mit strengeren Regeln aber besserer Wartbarkeit.


1. Syntax-Vergleich: Alt vs. Neu

1.1 Datendeklaration

Classic ABAP:

DATA lv_name TYPE string.
DATA lv_count TYPE i.
lv_name = 'Max Mustermann'.
lv_count = 42.
DATA lt_customers TYPE TABLE OF ty_customer.
DATA ls_customer TYPE ty_customer.

ABAP Cloud:

" ✅ Inline-Deklaration bevorzugt
DATA(lv_name) = 'Max Mustermann'.
DATA(lv_count) = 42.
DATA(lt_customers) = VALUE ty_customer_table(
( id = 1 name = 'Max' )
( id = 2 name = 'Anna' )
).

Unterschied: ABAP Cloud bevorzugt Inline-Deklarationen für kürzeren Code.


1.2 String-Operationen

Classic ABAP:

DATA lv_full_name TYPE string.
CONCATENATE lv_first_name lv_last_name
INTO lv_full_name
SEPARATED BY space.
" Oder
CONCATENATE 'Hallo ' lv_name '!' INTO lv_greeting.

ABAP Cloud:

" ✅ String Templates
DATA(lv_full_name) = |{ lv_first_name } { lv_last_name }|.
DATA(lv_greeting) = |Hallo { lv_name }!|.
" Mit Formatierung
DATA(lv_price) = |Preis: { lv_amount CURRENCY = lv_currency }|.

Unterschied: CONCATENATE ist obsolete in ABAP Cloud. String Templates sind moderner und mächtiger.


1.3 Interne Tabellen

Classic ABAP:

DATA ls_customer TYPE ty_customer.
READ TABLE lt_customers INTO ls_customer
WITH KEY id = lv_id.
IF sy-subrc = 0.
" Kunde gefunden
WRITE: ls_customer-name.
ENDIF.
" Zeile ändern
ls_customer-name = 'Neuer Name'.
MODIFY TABLE lt_customers FROM ls_customer.

ABAP Cloud:

" ✅ Table Expression
TRY.
DATA(ls_customer) = lt_customers[ id = lv_id ].
" Kunde gefunden
cl_demo_output=>display( ls_customer-name ).
" Zeile direkt ändern
lt_customers[ id = lv_id ]-name = 'Neuer Name'.
CATCH cx_sy_itab_line_not_found.
" Nicht gefunden
ENDTRY.
" Oder: Mit OPTIONAL (keine Exception)
DATA(ls_customer) = VALUE #( lt_customers[ id = lv_id ] OPTIONAL ).

Unterschied: Table Expressions sind kürzer und moderner, benötigen aber Exception Handling.


1.4 Kontrollstrukturen

Classic ABAP:

IF lv_status = 'A'.
lv_message = 'Aktiv'.
ELSEIF lv_status = 'I'.
lv_message = 'Inaktiv'.
ELSE.
lv_message = 'Unbekannt'.
ENDIF.
CASE lv_type.
WHEN 'A'.
lv_result = 'Typ A'.
WHEN 'B'.
lv_result = 'Typ B'.
WHEN OTHERS.
lv_result = 'Anderer Typ'.
ENDCASE.

ABAP Cloud:

" ✅ COND Expression (Inline IF)
DATA(lv_message) = COND string(
WHEN lv_status = 'A' THEN 'Aktiv'
WHEN lv_status = 'I' THEN 'Inaktiv'
ELSE 'Unbekannt'
).
" ✅ SWITCH Expression (Inline CASE)
DATA(lv_result) = SWITCH string( lv_type
WHEN 'A' THEN 'Typ A'
WHEN 'B' THEN 'Typ B'
ELSE 'Anderer Typ'
).

Unterschied: COND/SWITCH sind funktional (geben Wert zurück) statt imperativ.


1.5 Schleifen & Iterationen

Classic ABAP:

DATA lv_total TYPE i VALUE 0.
LOOP AT lt_orders INTO DATA(ls_order).
lv_total = lv_total + ls_order-amount.
ENDLOOP.
" Namen extrahieren
DATA lt_names TYPE TABLE OF string.
DATA ls_name TYPE string.
LOOP AT lt_customers INTO DATA(ls_customer).
ls_name = ls_customer-name.
APPEND ls_name TO lt_names.
ENDLOOP.

ABAP Cloud:

" ✅ REDUCE (für Aggregationen)
DATA(lv_total) = REDUCE i( INIT sum = 0
FOR ls_order IN lt_orders
NEXT sum = sum + ls_order-amount ).
" ✅ FOR Expression (für Transformationen)
DATA(lt_names) = VALUE string_table(
FOR ls_customer IN lt_customers
( ls_customer-name )
).
" Mit Filter
DATA(lt_active_names) = VALUE string_table(
FOR ls_cust IN lt_customers
WHERE ( status = 'ACTIVE' )
( ls_cust-name )
).

Unterschied: REDUCE/FOR sind deklarativ und oft performanter.


1.6 Datenbankzugriff

Classic ABAP:

" ❌ SELECT * nicht empfohlen, aber erlaubt
SELECT * FROM mara
INTO TABLE @DATA(lt_materials)
WHERE mtart = 'FERT'.
" Ohne @-Escaping (alte Syntax)
SELECT matnr maktx FROM mara
INTO TABLE lt_materials
WHERE mtart = 'FERT'.

ABAP Cloud:

" ❌ SELECT * VERBOTEN in ABAP Cloud
" ✅ Nur Released CDS Views + Explizite Felder
SELECT Product, ProductDescription
FROM I_Product
INTO TABLE @DATA(lt_products)
WHERE ProductType = 'FERT'.
" @-Escaping ist PFLICHT

Unterschied:

  • SELECT * verboten
  • Nur Released APIs (CDS Views mit Released-Status)
  • @-Escaping verpflichtend

1.7 Subroutinen (FORM/PERFORM)

Classic ABAP:

" ✅ In Classic erlaubt
FORM calculate_total USING pv_amount TYPE p
CHANGING pv_total TYPE p.
pv_total = pv_amount * '1.19'.
ENDFORM.
PERFORM calculate_total USING lv_amount
CHANGING lv_total.

ABAP Cloud:

" ❌ FORM/PERFORM VERBOTEN
" ✅ Nur Klassen & Methoden
CLASS lcl_calculator DEFINITION.
PUBLIC SECTION.
CLASS-METHODS calculate_total
IMPORTING iv_amount TYPE p
RETURNING VALUE(rv_total) TYPE p.
ENDCLASS.
CLASS lcl_calculator IMPLEMENTATION.
METHOD calculate_total.
rv_total = iv_amount * '1.19'.
ENDMETHOD.
ENDCLASS.
DATA(lv_total) = lcl_calculator=>calculate_total( lv_amount ).

Unterschied: ABAP Cloud erzwingt objektorientierte Programmierung.


2. UI-Entwicklung

Classic ABAP

Verfügbare Technologien:

  • Dynpro (klassische SAP GUI)
  • WebDynpro ABAP
  • SAP Fiori (mit SAPUI5)
  • BSP (Business Server Pages)

Beispiel Dynpro:

" Screen 100 mit MODULE
CALL SCREEN 100.
MODULE status_0100 OUTPUT.
SET PF-STATUS 'MAIN'.
SET TITLEBAR 'TITLE'.
ENDMODULE.
MODULE user_command_0100 INPUT.
CASE sy-ucomm.
WHEN 'SAVE'.
" Speichern
WHEN 'BACK'.
LEAVE TO SCREEN 0.
ENDCASE.
ENDMODULE.

ABAP Cloud

Verfügbare Technologien:

  • SAP Fiori (mit SAPUI5 oder Fiori Elements)
  • Dynpro VERBOTEN
  • WebDynpro ABAP VERBOTEN

Beispiel Fiori Elements (RAP):

" Kein UI-Code nötig! Automatisch aus Annotations generiert
" Service Binding
@EndUserText.label: 'Book Service'
define service ZUI_BOOK_O4 {
expose ZC_Book as Book;
}
" Metadata Extension (UI-Layout)
@UI.lineItem: [{ position: 10 }]
@UI.identification: [{ position: 10 }]
BookId;

Unterschied: Dynpro ist Geschichte. Fiori ist die Zukunft (web-basiert, responsive).


3. Datenbankzugriff & APIs

Classic ABAP

Zugriff auf:

  • ✅ Alle SAP-Tabellen (MARA, VBAK, KNA1, etc.)
  • ✅ Alle Funktionsbausteine
  • ✅ Alle BAPIs
  • ✅ Alle Klassen (auch interne)

Beispiel:

SELECT matnr maktx FROM mara
INTO TABLE @DATA(lt_materials)
WHERE mtart = 'FERT'.
CALL FUNCTION 'BAPI_MATERIAL_GET_DETAIL'
EXPORTING
material = lv_matnr
IMPORTING
material_general_data = ls_material.

ABAP Cloud

Zugriff auf:

  • Nur Released APIs (CDS Views, Klassen mit Released-Status)
  • ❌ Keine direkten Tabellenzugriffe auf SAP-Tabellen
  • ❌ Viele alte BAPIs nicht verfügbar

Beispiel:

" ✅ Released CDS View
SELECT Product, ProductDescription
FROM I_Product
INTO TABLE @DATA(lt_products).
" ✅ RAP/EML statt BAPI
READ ENTITIES OF I_Product
ENTITY Product
ALL FIELDS
WITH VALUE #( ( Product = lv_product_id ) )
RESULT DATA(lt_result).

So findest du Released APIs:

  1. ADT: Ctrl+Shift+A → Suche mit Filter “API State: Released”
  2. SAP API Business Hub: api.sap.com
  3. Released Objects: Grüner Haken in ADT

Unterschied: ABAP Cloud hat Zugriffsbeschränkungen für bessere Upgrade-Stabilität.


4. RAP (RESTful ABAP Programming)

Classic ABAP

RAP verfügbar?

  • ⚠️ Ja, aber optional (ab S/4HANA 2020)
  • Du kannst weiterhin BAPIs, Dynpro, etc. nutzen

ABAP Cloud

RAP verfügbar?

  • Haupt-Entwicklungsmodell
  • Für transaktionale Apps ist RAP der einzige Weg

RAP Komponenten:

KomponenteZweck
CDS ViewDatenmodell
Behavior Definition (BDEF)CRUD-Logik, Actions, Validations
Behavior Implementation (BIL)Business-Logik in ABAP
Service DefinitionWelche Entities werden exposed?
Service BindingOData Service (V2 oder V4)

Beispiel - Managed Scenario:

managed implementation in class zbp_i_book unique;
strict ( 2 );
define behavior for ZI_BOOK alias Book
persistent table zbook_tab
{
create;
update;
delete;
field ( readonly ) BookId;
field ( numbering : managed ) BookId;
validation validateIsbn on save { field Isbn; }
action markAsRead result [1] $self;
}

Unterschied: RAP ist in ABAP Cloud zentral, in Classic ABAP optional.


5. Performance

Classic ABAP

Mögliche Performance-Probleme:

  • SELECT in Loops (häufig)
  • Keine Built-In Optimierungen
  • Manuelles Tuning erforderlich

Beispiel Problem:

LOOP AT lt_customers INTO DATA(ls_customer).
" ❌ SELECT in Loop - sehr langsam!
SELECT SINGLE * FROM kna1
WHERE kunnr = ls_customer-id
INTO @DATA(ls_detail).
ENDLOOP.

ABAP Cloud

Performance-Vorteile:

  • ✅ CDS Views mit automatischen Optimierungen
  • ✅ RAP Framework optimiert DB-Zugriffe
  • ✅ Built-in Caching
  • ✅ EML batcht Operationen automatisch

Beispiel Lösung:

" ✅ Ein SELECT für alle IDs
SELECT FROM I_Customer
FIELDS Customer, CustomerName
FOR ALL ENTRIES IN @lt_customers
WHERE Customer = @lt_customers-id
INTO TABLE @DATA(lt_details).

Unterschied: ABAP Cloud erzwingt Best Practices, Classic ABAP erlaubt schlechte Patterns.


6. Testing

Classic ABAP

Unit Testing:

  • ✅ ABAP Unit vorhanden
  • ⚠️ Aber oft nicht genutzt
  • Kein Test Seam Framework
CLASS ltc_test DEFINITION FOR TESTING.
PRIVATE SECTION.
METHODS test_calculation FOR TESTING.
ENDCLASS.
CLASS ltc_test IMPLEMENTATION.
METHOD test_calculation.
DATA(lv_result) = zcl_calculator=>calculate( 10 ).
cl_abap_unit_assert=>assert_equals(
act = lv_result
exp = 12 ).
ENDMETHOD.
ENDCLASS.

ABAP Cloud

Unit Testing:

  • ✅ ABAP Unit empfohlen
  • ✅ CDS Test Double Framework
  • ✅ RAP Test Seams
CLASS ltc_test DEFINITION FOR TESTING.
PRIVATE SECTION.
CLASS-DATA environment TYPE REF TO if_cds_test_environment.
CLASS-METHODS class_setup.
METHODS test_create_book FOR TESTING.
ENDCLASS.
CLASS ltc_test IMPLEMENTATION.
METHOD class_setup.
environment = cl_cds_test_environment=>create_for_multiple_cds(
i_for_entities = VALUE #( ( i_for_entity = 'ZI_BOOK' ) )
).
ENDMETHOD.
METHOD test_create_book.
MODIFY ENTITIES OF zi_book
ENTITY Book CREATE FROM VALUE #( ( %cid = 'B1' Title = 'Test' ) ).
" Test-Assertions
ENDMETHOD.
ENDCLASS.

Unterschied: ABAP Cloud hat bessere Test-Tools und Testing ist kulturell wichtiger.


7. Deployment & DevOps

Classic ABAP

Deployment:

  • Transports (DEV → QAS → PRD)
  • Manuelle Freigaben
  • Wenig CI/CD

Versionierung:

  • ⚠️ abapGit optional
  • Oft kein Git

ABAP Cloud

Deployment:

  • ✅ Transports + gapless abapGit
  • ✅ CI/CD Pipelines (ABAP Environment Pipelines)
  • ✅ Continuous Deployment möglich

Versionierung:

  • ✅ abapGit empfohlen
  • ✅ Git-Integration in ADT

Beispiel CI/CD Pipeline:

# Azure DevOps / GitHub Actions
- name: Run ABAP Unit Tests
run: abap test --package ZBOOK
- name: Deploy to QAS
run: abap deploy --target QAS
- name: Run Integration Tests
run: abap integration-test

Unterschied: ABAP Cloud ist DevOps-freundlicher.


8. Wann welche Version nutzen?

Nutze Classic ABAP wenn:

  • ✅ Du On-Premise SAP ECC/S/4HANA hast
  • ✅ Legacy-Code gepflegt werden muss
  • ✅ Migration zu ABAP Cloud (noch) nicht geplant
  • ✅ Du mit Dynpro arbeiten musst
  • ✅ Kurz- bis mittelfristige Projekte (<5 Jahre)

Beispiel-Szenarien:

  • Wartung bestehender Reports
  • Schnelle Anpassungen an Standard-Code
  • Projekte mit knappem Budget/Zeit

Nutze ABAP Cloud wenn:

  • ✅ Neuentwicklung startest
  • ✅ Cloud-Deployment geplant (SAP BTP)
  • ✅ Langfristige Wartbarkeit wichtig (>5 Jahre)
  • ✅ Clean Core Strategie verfolgst
  • ✅ Moderne Entwicklung (RAP, Fiori)

Beispiel-Szenarien:

  • Neue SAP Fiori Apps
  • S/4HANA Cloud Projekte
  • Greenfield-Entwicklung
  • SaaS-Anwendungen auf SAP BTP

9. Lernkurve

Classic ABAP

Lernaufwand: ⭐⭐⭐ Mittel

Einstieg:

  1. ABAP Basics (2-4 Wochen)
  2. Interne Tabellen, Selects (2 Wochen)
  3. Dynpro/Reports (2-3 Wochen)
  4. BAPIs, RFCs (1-2 Wochen)

Gesamt: ~3 Monate bis produktiv

ABAP Cloud

Lernaufwand: ⭐⭐⭐⭐ Hoch

Einstieg:

  1. Modern ABAP Syntax (2 Wochen)
  2. CDS Views (3-4 Wochen)
  3. RAP (6-8 Wochen)
  4. SAP Fiori (4-6 Wochen)
  5. Testing & DevOps (2 Wochen)

Gesamt: ~5-6 Monate bis produktiv

Aber: Langfristig besser wartbar!


10. Migration: Classic → Cloud

Migrationspfad

Classic ABAP
Modernisieren (ABAP Cleaner, neue Syntax)
Released APIs identifizieren
ABAP Cloud-konforme Neuentwicklung
Schritt für Schritt Migration
ABAP Cloud ✓

Tools:

  • Custom Code Migration App (Fiori App)
  • ABAP Test Cockpit (ATC Checks)
  • ABAP Cleaner (Syntax-Modernisierung)

Siehe: ABAP Cloud Migration Guide


11. Kosten

Classic ABAP

Lizenzkosten:

  • On-Premise Lizenz (einmalig + Wartung)
  • Keine Cloud-Kosten

Entwicklerkosten:

  • Durchschnittlicher ABAP-Entwickler: 60-80k€/Jahr

ABAP Cloud

Lizenzkosten:

  • SAP BTP: Pay-per-Use (ab ~200€/Monat)
  • Oder: S/4HANA Cloud (höhere Lizenzkosten)

Entwicklerkosten:

  • ABAP Cloud-Entwickler: 70-90k€/Jahr (höhere Nachfrage)

Langfristig: ABAP Cloud oft günstiger durch:

  • Weniger Wartungsaufwand
  • Automatische Upgrades
  • Geringere Infrastruktur-Kosten (Cloud)

12. Zusammenfassung: Entscheidungsmatrix

KriteriumClassic ABAPABAP CloudGewinner
EinstiegshürdeNiedrigHochClassic
Langfristige WartbarkeitMittelHochCloud
PerformanceGutSehr gutCloud
Upgrade-StabilitätGeringSehr hochCloud
FlexibilitätSehr hochMittelClassic
Cloud-ReadyNeinJaCloud
UI-ModerneMittel (Dynpro alt)Hoch (nur Fiori)Cloud
Developer ExperienceGutSehr gut (ADT)Cloud
Community/RessourcenSehr großWachsendClassic
ZukunftssicherheitMittelSehr hochCloud

Fazit:

  • Kurzfristig: Classic ABAP schneller & flexibler
  • Langfristig: ABAP Cloud wartbarer & zukunftssicher

📚 Weiterführende Ressourcen

Auf abapcloud.com:

Externe Ressourcen:


💬 Deine Meinung?

  • Entwickelst du mit Classic ABAP oder ABAP Cloud?
  • Planst du eine Migration?
  • Was fehlt dir in ABAP Cloud?

Teile deine Erfahrungen in den Kommentaren!

Viel Erfolg bei der Entscheidung! 🚀