ABAP Cloud Developers are in extremely high demand from 2025 onwards - but the skill gap between Classic ABAP and ABAP Cloud is significant. This learning path shows you step by step how to go from classic ABAP developer to sought-after cloud expert in 6-12 months.
Where Are You? (Skill-Level Assessment)
Level 1: ABAP Newcomer
Current Status:
- No or minimal programming experience
- No SAP knowledge
What you need to learn:
- Programming basics (variables, loops, functions)
- ABAP syntax and basic concepts
- SAP fundamentals (customizing, transaction, client)
- OOP principles (classes, interfaces, inheritance)
Time Investment: 12-18 months to ABAP Cloud
Level 2: Classic ABAP Developer
Current Status:
- ABAP syntax (SELECT, LOOP, IF/CASE)
- Reports, Dynpro, Module Pool
- Function Modules, Includes
- Little OOP knowledge
- No cloud experience
What you need to learn:
- Object-oriented ABAP (classes, interfaces)
- CDS Views (Core Data Services)
- RAP (RESTful ABAP Programming)
- Eclipse ADT (ABAP Development Tools)
- Clean Core & Released APIs
Time Investment: 6-12 months to ABAP Cloud
Level 3: Modern ABAP Developer
Current Status:
- OOP ABAP (classes, interfaces)
- CDS Views basics
- Eclipse ADT
- HANA optimization
- No RAP
- No S/4HANA Cloud / BTP
What you need to learn:
- RAP (Behavior Definitions, EML)
- Fiori Elements Basics
- SAP BTP (ABAP Environment)
- Clean Core Strategy
- OData Services
Time Investment: 3-6 months to ABAP Cloud
The 6-Month Learning Path (for Level 2)
┌─────────────────────────────────────────────────────────┐│ Month 1-2: Solidify Fundamentals │├─────────────────────────────────────────────────────────┤│ - Deepen OOP ABAP ││ - Master Eclipse ADT ││ - CDS Views & Annotations ││ - ABAP Unit Testing │└────────────┬────────────────────────────────────────────┘ │ ▼┌─────────────────────────────────────────────────────────┐│ Month 3-4: RAP Core │├─────────────────────────────────────────────────────────┤│ - RAP Managed Scenario ││ - Behavior Definitions (BDEF) ││ - EML (Entity Manipulation Language) ││ - Determinations & Validations ││ - Actions │└────────────┬────────────────────────────────────────────┘ │ ▼┌─────────────────────────────────────────────────────────┐│ Month 5: Integration & UI │├─────────────────────────────────────────────────────────┤│ - OData V4 Services ││ - Fiori Elements Basics ││ - Service Bindings ││ - UI Annotations │└────────────┬────────────────────────────────────────────┘ │ ▼┌─────────────────────────────────────────────────────────┐│ Month 6: Practice & Certification │├─────────────────────────────────────────────────────────┤│ - Own RAP project (see below) ││ - SAP Learning Hub (optional) ││ - Community contributions (Blog, GitHub) ││ - SAP Certification (optional) │└─────────────────────────────────────────────────────────┘Phase 1: Solidify Fundamentals (Month 1-2)
1.1 Object-Oriented ABAP
Why important? ABAP Cloud is 100% OOP. Without OOP, no RAP.
What to learn:
" Understanding Classes & InterfacesINTERFACE zif_calculator. METHODS add IMPORTING iv_a TYPE i iv_b TYPE i RETURNING VALUE(rv_result) TYPE i.ENDINTERFACE.
CLASS zcl_calculator DEFINITION PUBLIC FINAL CREATE PUBLIC. PUBLIC SECTION. INTERFACES zif_calculator.ENDCLASS.
CLASS zcl_calculator IMPLEMENTATION. METHOD zif_calculator~add. rv_result = iv_a + iv_b. ENDMETHOD.ENDCLASS.
" InheritanceCLASS zcl_base DEFINITION ABSTRACT. PUBLIC SECTION. METHODS process ABSTRACT.ENDCLASS.
CLASS zcl_child DEFINITION INHERITING FROM zcl_base. PUBLIC SECTION. METHODS process REDEFINITION.ENDCLASS.
" PolymorphismDATA(lo_calc) = CAST zif_calculator( NEW zcl_calculator( ) ).DATA(lv_result) = lo_calc->add( iv_a = 5 iv_b = 3 ).Learning Resources:
- Book: “ABAP Objects” (Horst Keller, SAP Press)
- YouTube: SAP Developers Channel - “OOP in ABAP”
- Hands-on: openSAP Course “Object-Oriented Programming in ABAP”
Exercises:
- Implement an interface-based strategy (e.g., different discount calculations)
- Create an abstract base class with inheritance
- Use Design Patterns (Factory, Singleton)
1.2 Eclipse ADT
Why important? ABAP Cloud is ONLY developed in Eclipse ADT (not SE80).
What to learn:
- ADT Installation & Setup
- Create ABAP project
- Quick Fixes (Ctrl+1)
- Refactoring tools
- Shortcuts
Setup:
# 1. Install Eclipse# https://tools.hana.ondemand.com/#abap
# 2. ABAP Development Tools PluginHelp → Install New Software→ https://tools.hana.ondemand.com/latest
# 3. Create ABAP ProjectFile → New → ABAP Project→ System: [Your S/4HANA or BTP System]Must-Know Shortcuts:
Ctrl+Space Auto-CompletionCtrl+1 Quick FixF3 Navigate to DefinitionCtrl+Shift+G Find ReferencesCtrl+Shift+F Format CodeCtrl+/ Comment/UncommentF8 ActivateCtrl+F11 RunLearning Resources:
- SAP Developers YouTube: “ABAP Development Tools Tutorial”
- SAP Help: help.sap.com/adt
1.3 CDS Views
Why important? CDS Views are the data model in RAP. Without CDS, no RAP.
What to learn:
-- Interface View (I_*): Data Model@AccessControl.authorizationCheck: #CHECK@EndUserText.label: 'Customer - Interface View'
define view entity ZI_Customer as select from kna1 association [0..*] to ZI_SalesOrder as _SalesOrders on $projection.CustomerId = _SalesOrders.SoldToParty{ key kunnr as CustomerId, name1 as CustomerName, ort01 as CityName, land1 as Country,
@Semantics.user.createdBy: true ernam as CreatedBy,
@Semantics.systemDateTime.createdAt: true erdat as CreatedOn,
// Association _SalesOrders}-- Consumption View (C_*): UI-specific@AccessControl.authorizationCheck: #CHECK@EndUserText.label: 'Customer - Consumption View'@Metadata.allowExtensions: true
@UI: { headerInfo: { typeName: 'Customer', typeNamePlural: 'Customers', title: { value: 'CustomerName' } }}
define view entity ZC_Customer as projection on ZI_Customer{ @UI.facet: [{ position: 10, type: #IDENTIFICATION_REFERENCE }]
key @UI.lineItem: [{ position: 10 }] @UI.identification: [{ position: 10 }] CustomerId,
@UI.lineItem: [{ position: 20 }] @UI.identification: [{ position: 20 }] CustomerName,
@UI.lineItem: [{ position: 30 }] CityName,
@UI.lineItem: [{ position: 40 }] Country,
_SalesOrders : redirected to composition child ZC_SalesOrder}Learning Resources:
- Article: /en/cds-views/
- openSAP: “Building Apps with the ABAP RESTful Application Programming Model”
- Hands-on: developers.sap.com/mission.cp-starter-extensions-abap.html
Exercises:
- Create CDS Views for your favorite tables (VBAK, EKKO, etc.)
- Implement associations (1:n, n:m)
- Use annotations (@Semantics, @ObjectModel)
1.4 ABAP Unit Testing
Why important? Testing is essential in ABAP Cloud. TDD (Test-Driven Development) is best practice.
What to learn:
CLASS ltc_calculator DEFINITION FINAL FOR TESTING DURATION SHORT RISK LEVEL HARMLESS.
PRIVATE SECTION. DATA mo_cut TYPE REF TO zcl_calculator. " CUT = Class Under Test
METHODS: setup, teardown, test_add_positive FOR TESTING, test_add_negative FOR TESTING, test_add_zero FOR TESTING.ENDCLASS.
CLASS ltc_calculator IMPLEMENTATION.
METHOD setup. CREATE OBJECT mo_cut. ENDMETHOD.
METHOD test_add_positive. " Arrange DATA(lv_a) = 5. DATA(lv_b) = 3.
" Act DATA(lv_result) = mo_cut->add( iv_a = lv_a iv_b = lv_b ).
" Assert cl_abap_unit_assert=>assert_equals( exp = 8 act = lv_result msg = '5 + 3 should equal 8' ). ENDMETHOD.
METHOD test_add_negative. DATA(lv_result) = mo_cut->add( iv_a = -5 iv_b = 3 ). cl_abap_unit_assert=>assert_equals( exp = -2 act = lv_result ). ENDMETHOD.
METHOD test_add_zero. DATA(lv_result) = mo_cut->add( iv_a = 0 iv_b = 0 ). cl_abap_unit_assert=>assert_equals( exp = 0 act = lv_result ). ENDMETHOD.
METHOD teardown. CLEAR mo_cut. ENDMETHOD.
ENDCLASS.Learning Resources:
- Article: /en/abap-unit-testing/
- SAP TechEd: “ABAP Unit Testing Best Practices”
Exercises:
- Write tests for existing classes
- Practice TDD: Test first, then implementation
- Use Test Doubles for DB access
Phase 2: RAP Core (Month 3-4)
2.1 RAP Basic Concepts
What to learn:
┌────────────────────────────────────────┐│ Fiori UI (Browser) │└───────────────┬────────────────────────┘ │ ▼ OData V4┌────────────────────────────────────────┐│ Service Binding ││ (ZUI_TRAVEL_O4) │└───────────────┬────────────────────────┘ │ ▼┌────────────────────────────────────────┐│ Service Definition ││ expose ZC_Travel as Travel │└───────────────┬────────────────────────┘ │ ▼┌────────────────────────────────────────┐│ Projection Layer (C_*) ││ ZC_Travel (Consumption View) ││ + Projection Behavior │└───────────────┬────────────────────────┘ │ ▼┌────────────────────────────────────────┐│ Business Object Layer (I_*) ││ ZI_Travel (Interface View) ││ + Behavior Definition (BDEF) ││ + Behavior Implementation (ABAP) │└───────────────┬────────────────────────┘ │ ▼┌────────────────────────────────────────┐│ Database (ZTRAVEL) │└────────────────────────────────────────┘Learning Resources:
- Article: /en/rap-basics/
- openSAP: “Building Apps with RAP” (free!)
- SAP Press: “ABAP RESTful Application Programming Model”
2.2 Hands-On: Travel App (4-5 Days)
Project: Travel Booking App
-
Day 1: Data Model
- Tables: ZTRAVEL, ZBOOKING
- CDS Views: ZI_TRAVEL, ZI_BOOKING
-
Day 2: Behavior Definition
- CRUD Operations
- Field Properties (readonly, mandatory)
- Associations
-
Day 3: Validations & Determinations
- validateDates
- validateCustomer
- setInitialStatus
- calculateTotal
-
Day 4: Actions
- acceptTravel
- rejectTravel
-
Day 5: UI
- Projection Views (ZC_*)
- UI Annotations
- Service Definition & Binding
- Fiori Elements Preview
Tutorial: developers.sap.com/mission.cp-starter-extensions-abap.html
2.3 EML (Entity Manipulation Language)
What to learn:
" READREAD ENTITIES OF zi_travel ENTITY Travel ALL FIELDS WITH VALUE #( ( TravelId = '00001' ) ) RESULT DATA(lt_travel).
" CREATEMODIFY ENTITIES OF zi_travel ENTITY Travel CREATE FIELDS ( AgencyId CustomerId ) WITH VALUE #( ( %cid = 'CID_1' AgencyId = '001' CustomerId = '042' ) ) MAPPED DATA(mapped).
COMMIT ENTITIES.
" UPDATEMODIFY ENTITIES OF zi_travel ENTITY Travel UPDATE FIELDS ( Status ) WITH VALUE #( ( TravelId = '00001' Status = 'A' ) ).
COMMIT ENTITIES.
" DELETEMODIFY ENTITIES OF zi_travel ENTITY Travel DELETE FROM VALUE #( ( TravelId = '00001' ) ).
COMMIT ENTITIES.Learning Resources:
Exercises:
- Implement all CRUD operations
- Use EML in a report
- Practice error handling with FAILED/REPORTED
Phase 3: Integration & UI (Month 5)
3.1 OData Services
What to learn:
-- Service Definition@EndUserText.label: 'Travel Service'define service ZUI_TRAVEL_O4 { expose ZC_Travel as Travel; expose ZC_Booking as Booking;}Service Binding:1. Eclipse ADT → New → Service Binding2. Binding Type: OData V4 - UI3. Service Definition: ZUI_TRAVEL_O44. Publish5. Preview → Fiori Elements App opensLearning Resources:
- SAP Help: “OData V4 in RAP”
- SAP Developers: “Building OData Services with RAP”
3.2 Fiori Elements Basics
What to learn:
- List Report (Overview list)
- Object Page (Detail view)
- UI Annotations (@UI.lineItem, @UI.facet)
- Value Helps (@Consumption.valueHelpDefinition)
- Actions in UI
Example:
@UI: { headerInfo: { typeName: 'Travel', typeNamePlural: 'Travels', title: { value: 'Description' }, description: { value: 'TravelId' } }}define view entity ZC_Travel as projection on ZI_Travel{ // Facets (Tabs on Object Page) @UI.facet: [ { position: 10, type: #IDENTIFICATION_REFERENCE, label: 'General' }, { position: 20, type: #LINEITEM_REFERENCE, label: 'Bookings', targetElement: '_Bookings' } ]
// List Report Columns key @UI.lineItem: [{ position: 10 }] @UI.identification: [{ position: 10 }] @UI.selectionField: [{ position: 10 }] TravelId,
@UI.lineItem: [{ position: 20 }] @UI.identification: [{ position: 20 }] AgencyId,
// Action Buttons @UI.lineItem: [ { type: #FOR_ACTION, dataAction: 'acceptTravel', label: 'Accept' }, { type: #FOR_ACTION, dataAction: 'rejectTravel', label: 'Reject' } ] Status}Learning Resources:
- SAP Fiori Design Guidelines: experience.sap.com/fiori-design
- openSAP: “Developing Web Apps with SAPUI5”
Phase 4: Practice & Certification (Month 6)
4.1 Own Project: 3 Ideas
Project 1: Equipment Management (Easy)
Data Model:- Equipment (ID, Name, Type, Status, PurchaseDate, Cost)- Maintenance (ID, EquipmentId, MaintenanceDate, Cost, Notes)
Features:- CRUD for Equipment & Maintenance- Validation: MaintenanceDate not in future- Determination: Auto-status based on last maintenance- Actions: markAsDefect, markAsRepaired- UI: Fiori Elements (List Report + Object Page)Project 2: Leave Request App (Medium)
Data Model:- Employee (ID, Name, Department, VacationDays)- LeaveRequest (ID, EmployeeId, StartDate, EndDate, Type, Status, Approver)
Features:- CRUD for LeaveRequest- Validations: - EndDate after StartDate - Enough vacation days available - No overlap with other requests- Determinations: - Auto-calculate LeaveDays - Update Employee.VacationDays on approval- Actions: - approve, reject, cancel- Draft-enabled (save as draft)- Email notification (via save_modified hook)- UI: Fiori Elements with custom actionsProject 3: Expense Management (Hard)
Data Model:- ExpenseReport (ID, EmployeeId, TripDate, TotalAmount, Status)- ExpenseItem (ID, ReportId, Date, Category, Amount, Receipt)- Approval (ID, ReportId, ApproverLevel, Approver, Status, Comments)
Features:- Composition: Report → Items- Multi-level approval process- Validations: - Receipts for items > 100 EUR - Budget check against cost center- Determinations: - Auto-calculate TotalAmount - Set next approver- Actions: - submit, approve, reject, requestChanges- Business Events: ReportSubmitted, ReportApproved- Integration: PDF generation (Receipt upload)- Custom Entity: Currency conversion (via API)- Authorization: Only see own reports (DCL)- UI: Custom Fiori Elements (Freestyle for receipt upload)Timeline:
- Project 1: 1 week
- Project 2: 2-3 weeks
- Project 3: 4-5 weeks
4.2 SAP BTP Trial Account (FREE)
# 1. Register SAP BTP Trial (free for 90 days)https://cockpit.hanatrial.ondemand.com
# 2. Provision ABAP Environment (Steampunk)BTP Cockpit → Services → ABAP Environment → Create Instance
# 3. Connect Eclipse ADTNew ABAP Project → Enter Service Instance URL
# 4. Develop your own RAP project!→ Full ABAP Cloud system, free!Tutorial: /en/sap-btp-trial-account-create/
4.3 Certifications
SAP Certified Development Associate - SAP BTP, ABAP Environment
Topics:
- ABAP Cloud Language
- CDS Views
- RAP (Managed & Unmanaged)
- OData Services
- Fiori Elements
- Unit Testing
Preparation:
- SAP Learning Hub (€40/month): Official trainings
- SAP Press Books: “ABAP RESTful Application Programming Model”
- Exam Prep: SAP Learning Room (practice questions)
Cost: ~€500 Validity: Unlimited (but new versions every 2-3 years)
Value: Very valuable in job market
Free Resources
Online Courses
-
openSAP (free!)
- “Building Apps with RAP”
- “ABAP Platform Introduction”
- “ABAP RESTful Application Programming Model”
-
SAP Developers YouTube (free!)
- RAP Tutorials
- ABAP Cloud Basics
- Hands-on Videos
-
SAP Community (free!)
- community.sap.com/topics/abap
- Blogs, Tutorials, Q&A
Books (Investment)
-
“ABAP RESTful Application Programming Model” (SAP Press, ~€70)
- Must-Have for RAP
-
“Core Data Services for ABAP” (SAP Press, ~€70)
- Deep dive into CDS Views
-
“ABAP to the Future” (SAP Press, ~€50)
- Modern ABAP patterns
Communities & Network
- LinkedIn: SAP ABAP Community Groups
- GitHub: github.com/SAP-samples
- Stack Overflow: Tag
[abap]+[sap-cloud-platform] - Discord/Slack: SAP Developer Groups
Career & Salary
ABAP Cloud Salaries (Germany, 2025)
| Level | Experience | Salary (Median) |
|---|---|---|
| Junior | 0-2 years | €50,000 - €60,000 |
| Mid-Level | 2-5 years | €60,000 - €80,000 |
| Senior | 5-10 years | €80,000 - €100,000 |
| Lead/Architect | 10+ years | €100,000 - €130,000+ |
| Freelance | variable | €800 - €1,200/day |
Premium for ABAP Cloud skills: +15-25% vs Classic ABAP
Job Titles
- ABAP Cloud Developer
- SAP BTP ABAP Developer
- RAP Developer
- S/4HANA Cloud Developer
- SAP Fiori / ABAP Full Stack Developer
Remote Opportunities
Very good (80%+ of jobs remote-friendly from 2025)
Important Notes / Best Practices
- Don’t do everything at once: Focus on one area (e.g., first RAP, then Fiori)
- Hands-on > Theory: 80% practical exercises, 20% reading/videos
- Use Trial Account: SAP BTP Trial is free - no reason not to practice!
- Actively use community: Ask questions, read blogs, network
- Own project: GitHub repository with RAP project = portfolio for applications
- Continuous Learning: ABAP Cloud evolves quickly - stay current!
- Don’t forget Classic ABAP: Many companies have legacy code that needs to be migrated
- Understand Clean Core: Not just RAP, but also “why” and strategic context
- Certification optional: Practical experience > Certificate (but certificate helps)
- Patience: 6-12 months is realistic - don’t get discouraged!
Additional Resources
- ABAP Cloud Definition: /en/abap-cloud-definition/
- RAP Basics: /en/rap-basics/
- Clean Core Strategy: /en/clean-core-strategie/
- Migration Classic → Cloud: /en/migration-classic-zu-abap-cloud/
- VS Code for ABAP Cloud: /en/vscode-abap-cloud/