Become an ABAP Cloud Developer: The Complete Learning Path 2025

Category
General
Published
Author
Johannes

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 & Interfaces
INTERFACE 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.
" Inheritance
CLASS zcl_base DEFINITION ABSTRACT.
PUBLIC SECTION.
METHODS process ABSTRACT.
ENDCLASS.
CLASS zcl_child DEFINITION INHERITING FROM zcl_base.
PUBLIC SECTION.
METHODS process REDEFINITION.
ENDCLASS.
" Polymorphism
DATA(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:

  1. Implement an interface-based strategy (e.g., different discount calculations)
  2. Create an abstract base class with inheritance
  3. 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:

Terminal window
# 1. Install Eclipse
# https://tools.hana.ondemand.com/#abap
# 2. ABAP Development Tools Plugin
Help Install New Software
https://tools.hana.ondemand.com/latest
# 3. Create ABAP Project
File New ABAP Project
System: [Your S/4HANA or BTP System]

Must-Know Shortcuts:

Ctrl+Space Auto-Completion
Ctrl+1 Quick Fix
F3 Navigate to Definition
Ctrl+Shift+G Find References
Ctrl+Shift+F Format Code
Ctrl+/ Comment/Uncomment
F8 Activate
Ctrl+F11 Run

Learning 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:

Exercises:

  1. Create CDS Views for your favorite tables (VBAK, EKKO, etc.)
  2. Implement associations (1:n, n:m)
  3. 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:

Exercises:

  1. Write tests for existing classes
  2. Practice TDD: Test first, then implementation
  3. 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

  1. Day 1: Data Model

    • Tables: ZTRAVEL, ZBOOKING
    • CDS Views: ZI_TRAVEL, ZI_BOOKING
  2. Day 2: Behavior Definition

    • CRUD Operations
    • Field Properties (readonly, mandatory)
    • Associations
  3. Day 3: Validations & Determinations

    • validateDates
    • validateCustomer
    • setInitialStatus
    • calculateTotal
  4. Day 4: Actions

    • acceptTravel
    • rejectTravel
  5. 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:

" READ
READ ENTITIES OF zi_travel
ENTITY Travel ALL FIELDS WITH VALUE #( ( TravelId = '00001' ) )
RESULT DATA(lt_travel).
" CREATE
MODIFY ENTITIES OF zi_travel
ENTITY Travel CREATE FIELDS ( AgencyId CustomerId )
WITH VALUE #( ( %cid = 'CID_1' AgencyId = '001' CustomerId = '042' ) )
MAPPED DATA(mapped).
COMMIT ENTITIES.
" UPDATE
MODIFY ENTITIES OF zi_travel
ENTITY Travel UPDATE FIELDS ( Status )
WITH VALUE #( ( TravelId = '00001' Status = 'A' ) ).
COMMIT ENTITIES.
" DELETE
MODIFY ENTITIES OF zi_travel
ENTITY Travel DELETE FROM VALUE #( ( TravelId = '00001' ) ).
COMMIT ENTITIES.

Learning Resources:

Exercises:

  1. Implement all CRUD operations
  2. Use EML in a report
  3. 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 Binding
2. Binding Type: OData V4 - UI
3. Service Definition: ZUI_TRAVEL_O4
4. Publish
5. Preview → Fiori Elements App opens

Learning 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:

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 actions

Project 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)

Terminal window
# 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 ADT
New 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

  1. openSAP (free!)

    • “Building Apps with RAP”
    • “ABAP Platform Introduction”
    • “ABAP RESTful Application Programming Model”
  2. SAP Developers YouTube (free!)

    • RAP Tutorials
    • ABAP Cloud Basics
    • Hands-on Videos
  3. SAP Community (free!)

Books (Investment)

  1. “ABAP RESTful Application Programming Model” (SAP Press, ~€70)

    • Must-Have for RAP
  2. “Core Data Services for ABAP” (SAP Press, ~€70)

    • Deep dive into CDS Views
  3. “ABAP to the Future” (SAP Press, ~€50)

    • Modern ABAP patterns

Communities & Network

  1. LinkedIn: SAP ABAP Community Groups
  2. GitHub: github.com/SAP-samples
  3. Stack Overflow: Tag [abap] + [sap-cloud-platform]
  4. Discord/Slack: SAP Developer Groups

Career & Salary

ABAP Cloud Salaries (Germany, 2025)

LevelExperienceSalary (Median)
Junior0-2 years€50,000 - €60,000
Mid-Level2-5 years€60,000 - €80,000
Senior5-10 years€80,000 - €100,000
Lead/Architect10+ years€100,000 - €130,000+
Freelancevariable€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