ABAP RESTful Application Programming (RAP)

Target: Advanced ABAP Developer yang ingin menguasai standar tertinggi arsitektur modern di SAP S/4HANA dan ABAP Cloud untuk membangun aplikasi web SAP Fiori kelas dunia. Versi: SAP S/4HANA (On-Premise 1909+ & Cloud) & SAP BTP ABAP Environment (Eclipse ADT). Prasyarat: Telah menguasai ABAP Objects (OOP) dan ABAP Core Data Services (CDS Views) & AMDP.


Gambaran Umum

Perjalanan evolusi teknologi SAP telah melompat jauh dari antarmuka desktop klasik SAP GUI menuju antarmuka web modern yang responsif dan intuitif, yaitu SAP Fiori.

Untuk menjembatani logika backend ABAP dengan frontend web modern secara mulus dan terstandarisasi, SAP memperkenalkan ABAP RESTful Application Programming Model (RAP).

RAP adalah arsitektur pemrograman generasi terbaru dari SAP yang dirancang khusus untuk lingkungan Clean Core, SAP S/4HANA, dan Cloud Development. RAP menggabungkan pemodelan data tingkat tinggi via CDS Views, logika bisnis terenkapsulasi via Behavior Definitions (BDEF), bahasa kueri bisnis baru Entity Manipulation Language (EML), serta publikasi otomatis antarmuka OData Service (V2 / V4) yang siap dikonsumsi langsung oleh aplikasi SAP Fiori Elements tanpa memerlukan keahlian mendalam pemrograman web frontend.


Cara Belajar

🟢 Fundamental
→ Pahami evolusi arsitektur web SAP, gambaran besar 3 lapisan RAP, serta perbedaan skenario Managed vs Unmanaged.
 
🟡 Lanjutan
→ Kuasai Behavior Definition (BDEF), manipulasi entitas bisnis via EML, implementasi Action/Validation, dan Service Binding OData V4.
 
🛠️ Praktik
→ Bangun mini project aplikasi manajemen pesanan penjualan Fiori lengkap dengan validasi diskon otomatis dan tombol aksi Approve.

Mental model alur arsitektur 3 lapis ABAP RAP:

       Frontend Layer (SAP Fiori Elements Web App / Browser)
                                  │
                                  │ HTTP RESTful Request (OData V4 JSON)
                                  ▼
       ┌────────────────────────────────────────────────────────┐
       │ 1. Business Services Layer                             │
       │    - Service Binding (Protokol OData V4 UI / Web API)  │
       │    - Service Definition (Mengekspos entitas tertentu)   │
       └──────────────────────────┬─────────────────────────────┘
                                  │
                                  ▼
       ┌────────────────────────────────────────────────────────┐
       │ 2. Data Model Layer (Core Data Services / CDS)         │
       │    - Consumption Views (Anotasi UI / Fiori Elements)   │
       │    - Interface Views (Struktur semantik entitas bisnis)│
       └──────────────────────────┬─────────────────────────────┘
                                  │
                                  ▼
       ┌────────────────────────────────────────────────────────┐
       │ 3. Behavior Layer (Logika Transaksi Bisnis)            │
       │    - Behavior Definition / BDEF (CRUD, Action, Valid.) │
       │    - Behavior Pool / Class Handler (ABAP EML Logic)     │
       └──────────────────────────┬─────────────────────────────┘
                                  │
                                  ▼
       Database Layer (SAP HANA In-Memory Engine)

Hafalan:

RAP            → RESTful Application Programming Model: standar emas arsitektur S/4HANA & Cloud
Managed        → Skenario RAP di mana seluruh operasi CRUD database ditangani otomatis oleh framework
Unmanaged      → Skenario RAP di mana developer menulis sendiri kode persistensi (cocok untuk legacy BAPI)
BDEF           → Behavior Definition: dokumen kontrak yang mendefinisikan operasi bisnis (Create, Delete, Action)
EML            → Entity Manipulation Language: ekstensi sintaks ABAP baru khusus memanipulasi Business Object RAP
Service Def.   → Dokumen penentu CDS View mana saja yang akan diekspos keluar
Service Bind.  → Konfigurasi protokol rilis (OData V2/V4) dan pintu masuk Fiori Elements Preview
Action         → Tombol operasi kustom pada UI Fiori (contoh: tombol 'Approve Order', 'Cancel Invoice')

Daftar Isi

🟢 Fundamental

  1. Evolusi Arsitektur Antarmuka SAP Menuju RAP
  2. Gambaran Besar Arsitektur 3 Lapis RAP
  3. Dua Skenario Utama: Managed vs Unmanaged
  4. Pemodelan Data CDS untuk Konsumsi Fiori Elements

🟡 Lanjutan

  1. Behavior Definition (BDEF): Kontrak Operasi Bisnis
  2. Validations & Determinations di RAP
  3. Aksi Bisnis Kustom (Actions)
  4. Pengenalan EML (Entity Manipulation Language)
  5. Mengekspos API: Service Definition & Service Binding
  6. Pratinjau Aplikasi Web Fiori Elements dari Eclipse ADT

🛠️ Praktik

  1. Mini Project: Membangun Aplikasi Sales Order Fiori Modern

📚 Ringkasan & Referensi

  1. Peta Ingatan & Ringkasan
  2. Cheat Code RAP 10 Detik
  3. Rangkuman Kurikulum ABAP & Jalur Spesialisasi
  4. Referensi Resmi

1. 🟢 Evolusi Arsitektur Antarmuka SAP Menuju RAP

Kronologi Transformasi

Era 1: Classic Dynpro (SAP GUI)
└── T-Code SE38/SE80, layar abu-abu kaku berbasis desktop Windows.
 
Era 2: SAP Gateway Klasik (T-Code SEGW)
└── Pembangunan OData manual dengan memetakan BAPI ke model data secara grafis.
 
Era 3: Business Object Processing Framework (BOPF)
└── Framework transaksional kompleks era transisi S/4HANA awal.
 
Era 4: ABAP RESTful Application Programming Model (RAP)
└── Standar resmi masa kini dan masa depan: Deklaratif, terpadu dengan CDS, dan Cloud-ready.

2. 🟢 Gambaran Besar Arsitektur 3 Lapis RAP

Tiga Pilar Penyusun RAP

  1. Data Model & Query (CDS): Mendefinisikan struktur data entitas bisnis, relasi asosiasi, serta anotasi antarmuka Fiori (@UI.lineItem, @UI.identification).
  2. Business Services: Lapisan gateway yang membungkus CDS Views menjadi protokol standar internet (OData V2 atau OData V4).
  3. Behavior Layer: Jantung logika transaksional yang mengontrol operasi simpan data, otorisasi, validasi integritas, dan tombol aksi bisnis.

3. 🟢 Dua Skenario Utama: Managed vs Unmanaged

Konsep

Saat mendefinisikan Behavior Definition, Anda wajib memilih salah satu dari dua skenario:

KarakteristikSkenario Managed (Managed Scenario)Skenario Unmanaged (Unmanaged Scenario)
Persistensi DatabaseOtomatis. Framework RAP langsung mengeksekusi INSERT, UPDATE, DELETE ke database tanpa coding.Manual. Developer wajib menulis sendiri kode SQL atau memanggil BAPI di dalam handler.
Kapan Digunakan?Tabel kustom baru (Greenfield development) di mana tabel sepenuhnya di bawah kendali Anda.Menghubungkan logika transaksi warisan (Brownfield development) seperti membungkus BAPI standar SAP.
Beban KodingSangat rendah (hanya menulis validasi & action).Cukup tinggi (mengelola buffer dan commit manual).

4. 🟢 Pemodelan Data CDS untuk Konsumsi Fiori Elements

Konsep

Aplikasi frontend Fiori Elements dibangun secara otomatis berdasarkan Anotasi UI yang ditulis langsung di dalam CDS View:

@EndUserText.label: 'Proyeksi Pesanan Penjualan'
@AccessControl.authorizationCheck: #NOT_REQUIRED
@UI.headerInfo: { typeName: 'Pesanan Penjualan', typeNamePlural: 'Daftar Pesanan Penjualan' }
 
define root view entity ZC_SalesOrder_R
  as projection on ZI_SalesOrder_R
{
  @UI.facet: [ { id: 'GeneralInfo', purpose: #STANDARD, type: #IDENTIFICATION_REFERENCE, label: 'Rincian Utama' } ]
 
  @UI.lineItem:       [ { position: 10, label: 'Nomor Order' } ]
  @UI.identification: [ { position: 10, label: 'Nomor Order' } ]
  key OrderID,
 
  @UI.lineItem:       [ { position: 20, label: 'Pelanggan' } ]
  @UI.identification: [ { position: 20, label: 'Pelanggan' } ]
  CustomerName,
 
  @UI.lineItem:       [ { position: 30, label: 'Total Nilai (Rp)' } ]
  @UI.identification: [ { position: 30, label: 'Total Nilai (Rp)' } ]
  GrossAmount,
 
  @UI.lineItem:       [ { position: 40, label: 'Status Dokumen' } ]
  @UI.identification: [ { position: 40, label: 'Status Dokumen' } ]
  OrderStatus
}

Anotasi @UI.lineItem secara otomatis menentukan urutan kolom pada tabel spreadsheet Fiori, sedangkan @UI.identification menentukan letak kolom pada formulir rincian dokumen!


5. 🟡 Behavior Definition (BDEF): Kontrak Operasi Bisnis

Konsep

Behavior Definition (BDEF) adalah dokumen teks di Eclipse ADT yang mendefinisikan apa saja aksi bisnis yang diizinkan pada entitas tersebut:

managed implementation in class zbp_i_salesorder_r unique;
strict ( 2 );
 
define behavior for ZI_SalesOrder_R alias Order
persistent table ztsales_order
lock master
authorization master ( global )
{
  create;
  update;
  delete;
 
  // Mendefinisikan Validasi Otomatis
  validation validateCustomer on save { field CustomerName; create; }
 
  // Mendefinisikan Tombol Aksi Kustom di Fiori UI
  action approveOrder result [1] $self;
}

6. 🟡 Validations & Determinations di RAP

Konsep

  1. Validation: Logika verifikasi yang dipicu pada momen tertentu (misal: on save). Jika validasi gagal, RAP membatalkan proses simpan dan memunculkan pesan error di layar browser pengguna via parameter reported.
  2. Determination: Logika otomatis yang menghitung atau mengisi field turunan saat ada perubahan field lain (misal: saat field Quantity diubah, sistem otomatis mengkalkulasikan ulang nilai GrossAmount).

7. 🟡 Aksi Bisnis Kustom (Actions)

Konsep

Action merepresentasikan operasi bisnis khusus selain operasi CRUD standar. Di antarmuka SAP Fiori, setiap action akan otomatis dirender sebagai tombol interaktif di toolbar atas (misal: tombol Setujui Pesanan / Batalkan Faktur).


8. 🟡 Pengenalan EML (Entity Manipulation Language)

Konsep

EML (Entity Manipulation Language) adalah sintaks baru bawaan ABAP modern untuk berinteraksi dengan entitas RAP secara type-safe.

Daripada menulis UPDATE ztsales_order, Anda memanipulasi Business Object menggunakan EML:

" Membaca data via EML
READ ENTITIES OF ZI_SalesOrder_R
  ENTITY Order
    FIELDS ( OrderID CustomerName OrderStatus )
    WITH VALUE #( ( %key-OrderID = 'SO-001' ) )
  RESULT DATA(lt_orders).
 
" Mengubah status via Action EML
MODIFY ENTITIES OF ZI_SalesOrder_R
  ENTITY Order
    EXECUTE approveOrder
    FROM VALUE #( ( %key-OrderID = 'SO-001' ) )
  FAILED DATA(lt_failed)
  REPORTED DATA(lt_reported).
 
" Simpan transaksi ke database
COMMIT ENTITIES.

9. 🟡 Mengekspos API: Service Definition & Service Binding

Konsep

Dalam arsitektur enterprise SAP RAP, model data dipisahkan secara bertingkat:

  1. Interface Layer (ZI_...): Entitas inti yang mendefinisikan struktur data transaksional dan Base Behavior Definition (ZI_SalesOrder_R.bdef).
  2. Projection / Consumption Layer (ZC_...): Entitas konsumsi yang membawa anotasi @UI untuk tampilan Fiori dan Projection BDEF (ZC_SalesOrder_R.bdef).
Data Model Layer (Interface)
├── Root Entity (ZI_SalesOrder_R)
└── Base BDEF (ZI_SalesOrder_R.bdef) -> CRUD, Action, Validation
        │
        ▼
Consumption Layer (Projection)
├── Projection View (ZC_SalesOrder_R) -> Membawa anotasi @UI
└── Projection BDEF (ZC_SalesOrder_R.bdef) -> 'use create', 'use action'
        │
        ▼
Business Service Layer
├── Service Definition -> expose ZC_SalesOrder_R
└── Service Binding (OData V4 - UI)
        │
        ▼
SAP Fiori Elements Web App

NOTE

Peran Projection Behavior Definition (BDEF): Pada skenario konsumsi Fiori Elements, Projection BDEF berfungsi sebagai pengendali operasi yang diekspos ke antarmuka pengguna. Operasi dari Base BDEF diekspos secara selektif menggunakan kata kunci use:

projection;
define behavior for ZC_SalesOrder_R alias SalesOrder
{
  use create;
  use update;
  use delete;
  use action approveOrder;
}

(Catatan: Pada skenario prototipe cepat atau layanan read-only sederhana, antarmuka dapat mengekspos entitas secara langsung. Namun penggunaan Projection BDEF adalah best practice enterprise saat membangun aplikasi Fiori transaksional).

Langkah 1: Buat Service Definition

Memilih entitas proyeksi yang akan diekspos:

@EndUserText.label: 'Layanan API Manajemen Pesanan'
define service ZUI_SALES_ORDER_MANAGE {
  expose ZC_SalesOrder_R as SalesOrder;
}

Langkah 2: Buat Service Binding

Menetapkan protokol komunikasi jaringan:

  • Binding Type: Pilih OData V4 - UI (Standar modern dengan payload JSON super ringan dan efisien).
  • Klik tombol Activate, lalu klik tombol Publish.

10. 🟡 Pratinjau Aplikasi Web Fiori Elements dari Eclipse ADT

Konsep

Setelah Service Binding dipublikasikan di Eclipse ADT:

  1. Klik kanan pada entitas SalesOrder.
  2. Pilih menu Open Fiori Elements App Preview.
  3. Browser default Anda akan terbuka seketika dan menampilkan aplikasi web SAP Fiori interaktif lengkap (dengan fitur pencarian, filter tanggal, tabel dinamis, formulir entri data, serta tombol aksi kustom) tanpa Anda perlu menulis satu baris pun kode JavaScript, HTML, atau CSS!

11. 🛠️ Mini Project: Membangun Aplikasi Sales Order Fiori Modern

Tujuan

Membangun arsitektur backend RAP lengkap untuk aplikasi Fiori Elements: mendefinisikan CDS View entitas pesanan, membuat Behavior Definition dengan operasi CRUD Managed dan tombol aksi approveOrder, mengimplementasikan handler class menggunakan EML, serta mempublikasikan layanan via Service Binding OData V4.

Fitur

  1. Model data entitas transaksional ZI_SalesOrder_R.
  2. Pengaturan otomatis operasi CRUD persistensi via Managed Scenario.
  3. Tombol aksi kustom approveOrder untuk mengubah status pesanan menjadi 'APPROVED'.
  4. Publikasi OData V4 UI siap pakai untuk SAP Fiori Elements.

Konsep yang Digunakan

  • Definisi Root Entity CDS View define root view entity.
  • Behavior Definition Managed managed implementation in class.
  • Pemrograman handler method menggunakan EML (MODIFY ENTITIES).
  • Service Definition dan Service Binding OData V4.

Langkah Implementasi

Langkah 1: Buat Root CDS View (ZI_SalesOrder_R)

@AccessControl.authorizationCheck: #NOT_REQUIRED
@EndUserText.label: 'Entitas Utama Pesanan Penjualan'
define root view entity ZI_SalesOrder_R
  as select from ztsales_order
{
  key order_id     as OrderID,
      customer     as CustomerName,
      gross_amount as GrossAmount,
      order_status as OrderStatus
}

Langkah 2: Buat Behavior Definition (BDEF)

managed implementation in class zbp_i_salesorder_r unique;
strict ( 2 );
 
define behavior for ZI_SalesOrder_R alias SalesOrder
persistent table ztsales_order
lock master
authorization master ( global )
{
  create;
  update;
  delete;
 
  action ( features : instance ) approveOrder result [1] $self;
 
  mapping for ztsales_order
  {
    OrderID     = order_id;
    CustomerName = customer;
    GrossAmount = gross_amount;
    OrderStatus = order_status;
  }
}

Langkah 3: Implementasikan Logika Action pada Behavior Pool Class

Di dalam Local Types Class zbp_i_salesorder_r:

CLASS lhc_salesorder DEFINITION INHERITING FROM cl_abap_behavior_handler.
  PRIVATE SECTION.
    METHODS approveOrder FOR MODIFY
      IMPORTING keys FOR ACTION SalesOrder~approveOrder RESULT result.
ENDCLASS.
 
CLASS lhc_salesorder IMPLEMENTATION.
  METHOD approveOrder.
    " 1. Ubah status pesanan menjadi 'APPROVED' menggunakan EML
    MODIFY ENTITIES OF ZI_SalesOrder_R IN LOCAL MODE
      ENTITY SalesOrder
        UPDATE FIELDS ( OrderStatus )
        WITH VALUE #( FOR key IN keys ( %tky = key-%tky OrderStatus = 'APPROVED' ) )
      FAILED failed
      REPORTED reported.
 
    " 2. Kembalikan data terbaru ke layar Fiori
    READ ENTITIES OF ZI_SalesOrder_R IN LOCAL MODE
      ENTITY SalesOrder
        ALL FIELDS WITH CORRESPONDING #( keys )
      RESULT DATA(lt_updated_orders).
 
    result = VALUE #( FOR order IN lt_updated_orders
                      ( %tky   = order-%tky
                        %param = order ) ).
  ENDMETHOD.
ENDCLASS.

Langkah 4: Buat Projection View & Projection BDEF (ZC_SalesOrder_R)

  1. Projection View (ZC_SalesOrder_R):
@AccessControl.authorizationCheck: #NOT_REQUIRED
@EndUserText.label: 'Konsumsi Proyeksi Pesanan Fiori'
define root view entity ZC_SalesOrder_R
  provider contract transactional_query
  as projection on ZI_SalesOrder_R
{
  key OrderID,
      CustomerName,
      GrossAmount,
      OrderStatus
}
  1. Projection Behavior Definition (ZC_SalesOrder_R.bdef):
projection;
define behavior for ZC_SalesOrder_R alias SalesOrder
{
  use create;
  use update;
  use delete;
  use action approveOrder;
}

Langkah 5: Publikasikan Layanan via Service Definition & Service Binding

@EndUserText.label: 'Definisi Layanan Pesanan Penjualan'
define service ZUI_SALES_ORDER_O4 {
  expose ZC_SalesOrder_R as SalesOrder;
}

Hasil Akhir

Saat Fiori Elements App Preview dibuka di browser:

┌────────────────────────────────────────────────────────────────────────┐
│ Aplikasi Web SAP Fiori: Manajemen Pesanan Penjualan (OData V4)         │
├────────────────────────────────────────────────────────────────────────┤
│ Filter Pencarian: [ Cari Pesanan... ] [ Status: Semua v ] [ Go ]       │
├────────────────────────────────────────────────────────────────────────┤
│ Daftar Pesanan (4)        [ + Buat Baru ] [ Hapus ] [ Setujui Pesanan ]│
├──────────────┬────────────────────────┬─────────────────┬──────────────┤
│ [ ] No Order │ Nama Pelanggan         │ Total Nilai     │ Status       │
├──────────────┼────────────────────────┼─────────────────┼──────────────┤
│ [X] SO-00101 │ PT Surya Kencana       │ Rp 45.000.000   │ APPROVED     │
│ [ ] SO-00102 │ CV Bintang Timur       │ Rp 12.000.000   │ PENDING      │
│ [ ] SO-00103 │ PT Harapan Bangsa      │ Rp 85.000.000   │ PENDING      │
└──────────────┴────────────────────────┴─────────────────┴──────────────┘

Ketika pengguna mencentang baris SO-00102 dan mengklik tombol Setujui Pesanan, browser langsung mengirimkan panggilan OData Action ke backend RAP, method EML dieksekusi, dan status di layar seketika berganti menjadi APPROVED secara mulus tanpa me-reload halaman browser!


12. 📚 Ringkasan & Peta Ingatan

Peta Konsep ABAP RESTful Application Programming (RAP)

ABAP RAP (Arsitektur Modern S/4HANA & Fiori)
├── 1. Data Model Layer (CDS)
│   ├── Root View Entity (Entitas induk bisnis)
│   └── Anotasi UI (@UI.lineItem untuk tampilan tabel Fiori)
├── 2. Behavior Layer (BDEF & EML)
│   ├── Managed Scenario (Persistensi CRUD otomatis oleh framework)
│   ├── Unmanaged Scenario (Persistensi manual untuk legacy code/BAPI)
│   ├── Validations & Determinations (Logika verifikasi & hitung nilai)
│   └── Actions (Tombol operasi bisnis kustom di UI Fiori)
└── 3. Business Service Layer
    ├── Service Definition (Menentukan eksposur entitas CDS)
    ├── Service Binding (Protokol OData V4 UI / Web API)
    └── Fiori Elements App Preview (Pratinjau antarmuka web instan)

13. 📚 Cheat Code RAP 10 Detik

managed implementation in class zbp_...   → Deklarasi BDEF skenario Managed
define root view entity ZI_...            → Mendefinisikan entitas induk CDS
action ( features : instance ) approve... → Menambahkan tombol aksi di Fiori
validation check_data on save ...         → Menambahkan validasi saat simpan
READ ENTITIES OF ...                      → Query entitas via EML
MODIFY ENTITIES OF ...                    → Mengubah status data via EML
define service ZUI_...                    → Membuat Service Definition
OData V4 - UI                             → Standar binding rekomendasi untuk Fiori

14. 🧭 Rangkuman Kurikulum ABAP & Jalur Spesialisasi

Selamat! Dengan menyelesaikan modul ini, Anda telah menuntaskan seluruh perjalanan kurikulum SAP ABAP dari level dasar hingga modern arsitektur S/4HANA:

Fondasi Bahasa & Data:
🟢 Modul 1: ABAP Dasar
🟢 Modul 2: ABAP Data Dictionary (DDIC)
🟢 Modul 3: ABAP Internal Tables
    │
    ▼
Logika Bisnis & Pelaporan:
🟡 Modul 4: ABAP Database Access & Open SQL
🟡 Modul 5: ABAP Modularization & Integration (RFC/BAPI)
🟡 Modul 6: ABAP Reports & ALV Grid (CL_SALV_TABLE)
🟡 Modul 7: ABAP Objects (OOP)
    │
    ▼
Enterprise S/4HANA Modern:
🔴 Modul 8: ABAP Enhancement Framework (Clean Core)
🔴 Modul 9: ABAP Debugging & Performance Tuning
🔴 Modul 10: ABAP Core Data Services (CDS) & AMDP
🔴 Modul 11: ABAP RESTful Application Programming (RAP)

Jalur Spesialisasi Karier Selanjutnya

  1. SAP S/4HANA Cloud Developer: Mendalami ABAP Cloud Development Model dan Developer Extensibility.
  2. SAP Integration Consultant: Mengintegrasikan sistem SAP dengan aplikasi cloud luar via SAP Integration Suite (BTP) dan REST API.
  3. Full-Stack SAP Developer: Mengombinasikan keahlian backend ABAP RAP dengan frontend SAPUI5 / TypeScript.

15. 🔗 Referensi Resmi