Tuesday, 30 September 2025

ABAP CDS View Part 4 : Membuat CDS View Basic (Single Table)

Cara Membuat Basic CDS View di ABAP | Panduan SAP S/4HANA

Membuat CDS View Basic (Single Table)

Kalau di Episode 1–3 kita bahas konsep, struktur, dan annotation, sekarang kita langsung masuk ke praktik teknik real. Fokus Episode 4 adalah membuat CDS View basic dari satu tabel saja, misalnya MARA. Cocok untuk pemula dan jadi pondasi sebelum masuk ke join.

1. Lokasi & Naming Pattern

  • Buat di ADT (Eclipse)
  • Folder: core data services → data definitions
  • Prefix object misal ZCDS_*
  • SQL View Name max 16 karakter, huruf kapital

2. Contoh CDS View Basic

@AbapCatalog.sqlViewName: 'ZVBASIC_MARA'
@AbapCatalog.compiler.compareFilter: true
@EndUserText.label: 'CDS View Basic dari Tabel MARA'

define view ZCDS_BASIC_MARA
  as select from mara
{
  key matnr,
      ersda,
      mtart,
      matkl,
      meins
}

Struktur ini adalah pondasi minimal:

  • Annotation untuk nama DB & label
  • define view + nama object
  • select from (tabel utama)
  • daftar field

3. Aktivasi View

Setelah selesai coding:

  • Tekan Ctrl + F3 atau klik Activate
  • View .hdbdip dibuat otomatis di DB
  • Pastikan tidak ada error syntax

4. Data Preview

Untuk cek data:

  • Klik kanan nama view → Open Data Preview
  • Bisa filter langsung dari Eclipse
  • Tampilkan hasil table view

5. Query via ABAP (Optional)

SELECT * FROM ZCDS_BASIC_MARA
  INTO TABLE @DATA(lt_data).

IF lt_data IS NOT INITIAL.
  WRITE / |Total: { lines( lt_data ) }|.
ENDIF.

6. Contoh Lain (But000)

Kalau mau ambil data business partner:

@AbapCatalog.sqlViewName: 'ZVBASIC_BP'
@EndUserText.label     : 'CDS Basic from BUT000'

define view ZCDS_BASIC_BP
  as select from but000
{
  key partner,
      type,
      name_first,
      name_last
}
Summary:
CDS Basic View adalah langkah pertama yang wajib dikuasai. Dengan struktur sederhana (single table), kamu bisa latihan aktivasi, preview data, dan mulai membangun fondasi untuk episode lanjutan seperti join, annotation lanjutan, dan exposure ke OData.

➡️ Next (Episode 5): CDS View dengan Join Antar Tabel (misal MARA + MAKT atau VBAK + VBAP).

ABAP CDS View Part 3 : Annotation dalam CDS View

Annotation Lengkap dalam ABAP CDS View | Panduan SAP S/4HANA

Annotation dalam CDS View

Di Episode 2 kita sudah lihat struktur dasar CDS View. Nah, di Episode 3 ini kita fokus pada annotation — elemen krusial yang bikin CDS powerful. Annotation digunakan untuk memberi metadata tambahan, mengontrol behavior, ekspos data, UI, security, sampai analytic integration.

1. Kategori Annotation Utama

Kategori Fungsi Contoh
Catalog Pengaturan DB View dan compiler @AbapCatalog.sqlViewName
Text/Documentation Label, deskripsi object @EndUserText.label
OData/Exposure Publish sebagai OData Service @OData.publish
Authorization Check akses user @AccessControl.authorizationCheck
UI Annotation Integrasi Fiori/UI5 @UI.lineItem
Analytics OLAP, cube, dimension @Analytics.query

2. Contoh Annotation Dasar

@AbapCatalog.sqlViewName: 'ZV_MARA_ANN'
@AbapCatalog.compiler.compareFilter: true
@EndUserText.label: 'CDS with Annotation Example'
@AccessControl.authorizationCheck: #CHECK
@OData.publish: true

define view ZCDS_MARA_ANN
  as select from mara
{
  key matnr,
      ersda,
      mtart,
      matkl
}
  • @OData.publish: true → otomatis generate service
  • @AccessControl.authorizationCheck: #CHECK → integrasi ke DCL
  • @AbapCatalog.sqlViewName → nama di database

3. Contoh UI Annotation

@UI.lineItem: [
  {
    position: 10,
    label: 'Material',
    value: matnr
  },
  {
    position: 20,
    label: 'Material Type',
    value: mtart
  }
]
define view ZCDS_UI_DEMO
  as select from mara
{
  key matnr,
      mtart,
      matkl
}

Annotation ini sering dipakai kalau CDS akan dihubungkan ke Fiori Elements tanpa perlu coding tambahan.

4. Authorization Annotation

@AccessControl.authorizationCheck: #NOT_REQUIRED
-- atau
@AccessControl.authorizationCheck: #CHECK

Kalau pakai #CHECK, maka harus ada DCL (Data Control Language) yang mengatur role-based access.

5. Contoh Analytic Annotation (Singkat)

@Analytics.query: true
@VDM.viewType: #CONSUMPTION

Biasanya dipakai untuk reporting (misalnya embedded analytics).

Summary:
Annotation adalah “superpower”-nya CDS View. Dengan anotasi, satu object bisa sekaligus jadi source OData, UI Fiori, analytic cube, atau dilindungi security.

➡️ Next Episode (4): Praktik Membuat CDS Basic View
(dari tabel MARA, join sederhana, dan aktivasi).

Monday, 29 September 2025

ABAP CDS View Part 2 : Struktur & Sintaks Dasar ABAP CDS View

Struktur & Sintaks Dasar ABAP CDS View | Tutorial SAP S/4HANA

Struktur & Sintaks Dasar ABAP CDS View

Setelah memahami konsep CDS di Episode 1, sekarang kita lanjut ke bagian teknis: bagaimana struktur dasar CDS View, elemen pentingnya, dan contoh sederhana yang bisa langsung dicoba di ADT Eclipse.

1. Komponen Utama dalam CDS View

  • Define View — deklarasi utama
  • SQL Source — tabel / source data
  • Annotation — metadata tambahan
  • Field List — kolom yang diekspose

2. Contoh Struktur Dasar

@AbapCatalog.sqlViewName: 'ZV_MARA_DEMO'
@AbapCatalog.compiler.compareFilter: true
@EndUserText.label: 'Contoh CDS View Sederhana'

define view ZCDS_MARA_DEMO
  as select from mara
{
  matnr,
  ersda,
  mtart,
  matkl
}

Penjelasan singkat:

  • @AbapCatalog.sqlViewName → nama view di level DB
  • @EndUserText.label → nama yang tampil di UI
  • define view → deklarasi object
  • select from → ambil data dari tabel
  • Field list → kolom yang diekspos

3. Annotation Dasar yang Wajib Diketahui

  • @AbapCatalog.sqlViewName — identifier level DB
  • @EndUserText.label — deskripsi object
  • @AccessControl.authorizationCheck — security
  • @OData.publish — expose ke OData

4. Aktivasi & Testing

Setelah kode dibuat di ADT Eclipse:

  • Tekan Ctrl + F3 atau klik Activate
  • Gunakan Data Preview untuk cek data
  • Bisa juga query via SELECT * FROM di ABAP

Contoh Preview Query di ABAP

SELECT * FROM ZCDS_MARA_DEMO
  INTO TABLE @DATA(lt_mara).
Summary:
Struktur CDS sangat sederhana: annotation, define view, select from, dan daftar field. Dengan format ini, kita bisa mulai membangun view yang reusable dan performa tinggi.

➡️ Up Next (Episode 3): Annotation lengkap CDS View (kategori teknis, UI, OData, authorization, dan contoh penerapannya).

ABAP CDS View Part 1: Introduction to ABAP CDS View (Pengenalan)

Pengenalan ABAP CDS View | SAP S/4HANA

Introduction to ABAP CDS View (Pengenalan)

Core Data Services (CDS) adalah teknologi modern di SAP yang memungkinkan kita mendefinisikan data secara semantik di database layer. In SAP S/4HANA, CDS becomes a fundamental concept karena mendukung performance tinggi, analytical capabilities, dan integrasi langsung ke OData/Fiori.

What is a CDS View?

CDS View adalah “next generation view” yang ditulis dengan sintaks deklaratif berbasis SQL, tapi diperkaya dengan annotation yang memberikan fungsi tambahan seperti UI exposure, authorization, layanan OData, sampai analitik.

Why SAP Introduced CDS?

  • Higher performance dengan HANA pushdown
  • Mendukung arsitektur service-based dan reuse
  • OData exposure langsung tanpa coding tambahan
  • Mengurangi beban di layer ABAP klasik

CDS vs SE11 Classical View

Aspect SE11 View CDS View
Creation Method GUI (SE11) Source Code via ADT Eclipse
Annotation Support No Yes (UI, OData, Auth, etc.)
Performance Standard Optimized for HANA
OData Exposure Manual & Limited Native via annotation

Main Benefits (Keunggulan)

  • Query lebih cepat untuk data besar
  • Reusable objects antar modul
  • Mudah dihubungkan dengan OData, Fiori, RAP
  • Dapat digunakan untuk reporting dan BI

Types of CDS View

  • Basic View – single source/table
  • Composite View – combine beberapa basic view
  • Consumption View – presentasi, UI, OData
  • Analytical View – laporan OLAP/BI

Use Case Examples

  • Laporan penjualan antar tabel SD
  • Expose material ke aplikasi Fiori
  • Mengurangi SELECT kompleks di ABAP
  • Source data dashboard atau analitik
Summary:
CDS View bukan sekadar pengganti view lama, tetapi fondasi utama pengembangan modern di SAP S/4HANA. Memahami dasar CDS akan sangat membantu sebelum masuk ke syntax, annotation, dan integrasi teknis.

➡️ Up Next (Episode 2): Basic Structure & Syntax CDS (struktur file, annotation dasar, dan contoh yang bisa langsung dicoba).

Tuesday, 23 September 2025

Belajar ABAP Summary Part 1–16

Belajar ABAP Summary Part 1–16 | Expandable Sitemap

Belajar ABAP Part 16: Security Best Practices & Authorization in ABAP/CDS

Belajar ABAP Part 16: Security Best Practices & Authorization in ABAP/CDS

Belajar ABAP Part 16: Security Best Practices & Authorization in ABAP/CDS

Security adalah aspek kritikal dalam pengembangan ABAP. Tanpa kontrol otorisasi yang baik, data sensitif bisa terekspos ke user yang tidak berhak. Di part ini kita akan membahas bagaimana Authorization bekerja di ABAP dan CDS, serta best practices untuk menulis kode yang aman.

1. Authorization Object

Authorization Object adalah komponen di SAP yang mendefinisikan izin akses berdasarkan field-field tertentu (misalnya Company Code, Activity). Authorization Object digunakan dalam role (via PFCG).

Contoh Authorization Object standar: M_BEST_BSA (untuk Purchase Requisition by Document Type).

2. Authority-Check di ABAP

Dalam ABAP, validasi otorisasi dilakukan dengan statement AUTHORITY-CHECK. Contoh sederhana:

AUTHORITY-CHECK OBJECT 'Z_SALES_AUTH'
  ID 'VKORG' FIELD lv_vkorg
  ID 'ACTVT' FIELD '03'.  "Display

IF sy-subrc <> 0.
  MESSAGE 'You are not authorized to view this Sales Org' TYPE 'E'.
ENDIF.
Gunakan sy-subrc untuk mengecek hasil: 0 = authorized, selain itu tidak berhak.

3. DCL (Data Control Language) di CDS

Di dunia CDS View, security dikelola dengan DCL (Data Control Language). DCL mengikat Authorization Object dengan CDS sehingga filter terjadi otomatis di query.

Contoh DCL untuk CDS View Sales Data:

@EndUserText.label: 'Authorization for Sales Data'
define role ZR_SALES_AUTH {
  grant select on ZC_SalesData
    where VKORG = aspect pfcg_auth(VKORG, 'Z_SALES_AUTH');
}

Dengan DCL ini, user hanya bisa melihat Sales Org sesuai otorisasi di role.

4. Best Practices Security di ABAP/CDS

  • Selalu gunakan AUTHORITY-CHECK untuk transaksi Z-report.
  • Implementasikan DCL di CDS agar query otomatis secure.
  • Hindari hardcode user dalam program.
  • Lakukan input validation (cek value kosong, tipe data, dsb).
  • Cegah SQL injection dengan parameterized query (gunakan Open SQL, jangan string concatenation).

5. Real Case: Proteksi Report Z Sales

Misal ada report Z_SALES_REPORT yang menampilkan data sales berdasarkan Sales Organization. Kita ingin supaya hanya user dengan otorisasi tertentu bisa akses.

Contoh Implementasi

REPORT z_sales_report.

PARAMETERS: p_vkorg TYPE vkorg.

" Authorization check
AUTHORITY-CHECK OBJECT 'Z_SALES_AUTH'
  ID 'VKORG' FIELD p_vkorg
  ID 'ACTVT' FIELD '03'.

IF sy-subrc <> 0.
  MESSAGE 'Not authorized for this Sales Org' TYPE 'E'.
ENDIF.

" Jika authorized, fetch data
SELECT vbeln, vkorg, netwr
  FROM vbak
  INTO TABLE @DATA(lt_sales)
  WHERE vkorg = @p_vkorg.

cl_demo_output=>display( lt_sales ).

Pada contoh di atas:

  • User input Sales Org (p_vkorg).
  • Program cek otorisasi via AUTHORITY-CHECK.
  • Jika tidak berhak → error message.
  • Jika berhak → data ditampilkan.

6. Summary

Key Takeaways Part 16:
  • Authorization Object adalah dasar kontrol akses di SAP.
  • AUTHORITY-CHECK wajib dipakai di ABAP report untuk validasi akses.
  • DCL di CDS mengikat security langsung ke level database query.
  • Selalu ikuti best practices security seperti input validation, SQL injection prevention, dan role-based access.
  • Real case: proteksi Z_SALES_REPORT dengan AUTHORITY-CHECK agar hanya user berotorisasi yang bisa lihat data.

Belajar ABAP Part 15: Performance Tuning — Teknik, Tools & Contoh Kasus

Belajar ABAP Part 15: Performance Tuning — Teknik, Tools & Contoh Kasus Z_SALES

Belajar ABAP Part 15: Performance Tuning — Teknik, Tools & Contoh Kasus Z_SALES

Ringkasan: Ini panduan praktis untuk optimasi performa program ABAP. Fokus: ukur dulu (profiling), kemudian optimasi DB access, loop, dan memory; gunakan CDS/AMDP untuk pushdown; pakai tools seperti ST05, SAT, ST12, PlanViz. Termasuk contoh real case mempercepat report Z_SALES (before/after) beserta checklist tuning.

1. Prinsip Utama

  • Measure first: gunakan trace/profiler — jangan tebak-tebak.
  • Push logic ke DB: gunakan CDS/AMDP bila operasi data besar & agregasi.
  • Avoid row-by-row: hindari SELECT di dalam loop (N+1 problem).
  • Reduce network round-trips: ambil data bulk (INTO TABLE) dan proses di memori.
  • Keep it testable: benchmark sebelum & sesudah perubahan.

2. Tools Diagnosis (kapan & bagaimana dipakai)

ToolFungsiUse-case
ST05 (SQL Trace)Trace semua SQL statementTemukan query lambat & frekuensi eksekusi
SAT / SE30Runtime breakdown (time per function/line)Profiling CPU/WALL time di ABAP
ST12Gabungan ST05 + SE30Investigasi mendalam root cause
PlanViz (HANA)Analisa execution plan HANAOptimasi CDS/AMDP/SQLScript
DBACOCKPIT / ST04DB stats & indexPeriksa statistik, locks, space

3. Open SQL Best Practices

  • Pilih field eksplisit (hindari SELECT *).
  • Gunakan INTO TABLE untuk bulk load, bukan banyak SELECT SINGLE.
  • Tambahkan filter yang mengurangi rows (key/partition filter).
  • Gunakan UP TO n ROWS saat sampling.

4. FOR ALL ENTRIES — aturan aman

Gunakan FOR ALL ENTRIES hanya bila:

  • internal table tidak kosong (`IF it_tab IS NOT INITIAL`).
  • internal table tidak berisi banyak ribuan baris; kalau besar, lebih baik masukkan ke Z-temp table / CDS / AMDP.
  • pastikan internal table sudah di-unique/di-sort untuk mencegah IN-list berlebihan.

5. Looping & Internal Table

Prefer struktur data & algoritma yang O(n) atau O(n log n), hindari O(n²) pada data volume besar.

  • Gunakan SORT + READ TABLE ... BINARY SEARCH untuk lookup cepat.
  • Pertimbangkan hashed table (HASHED TABLE) untuk lookup by key.
  • Gunakan FIELD-SYMBOLS / REFERENCE untuk akses tanpa copy.

6. Memory & Garbage

  • Free memory untuk tabel besar: FREE lt_table.
  • Gunakan REFRESH atau reassign variable bila perlu menghindari fragmentasi.
  • Pertimbangkan streaming processing (process partial chunks) untuk dataset sangat besar.

7. CDS/AMDP Pushdown

Jika calculasi heavy & aggregasi besar, pindahkan ke DB:

  • CDS bagus untuk joins & aggregations deklaratif.
  • AMDP/SQLScript untuk algoritma procedural atau window functions yang kompleks.

8. Profiling Workflow — langkah praktis

  1. Reproduce slowdown (test case & dataset representative).
  2. Jalankan ST05 untuk capture SQL; analisa query yang paling sering dan paling lambat.
  3. Jalankan SAT untuk lihat metode/line yang menghabiskan waktu.
  4. Ambil SQL & buka di PlanViz untuk analisa DB plan.
  5. Terapkan perubahan (SQL rewrite, index, CDS/AMDP, loop refactor).
  6. Benchmark ulang & dokumentasikan hasil (before/after timing).

Real Case: Tuning Report Z_SALES (Before → After)

Scenario: report Z_SALES menampilkan sales order lines dengan beberapa filter (company code, date range). User complain: laporan butuh 40–60 detik untuk load 10k rows.

Step 0 — Reproduce & Measure

Reproduksi di DEV/QA dengan dataset ~10k rows. Jalankan SAT untuk total runtime (contoh: 52s). Jalankan ST05 untuk lihat SQL calls (muncul ribuan SELECT SINGLE).

Before — kode inti (inefficient)


" Z_SALES (simplified)
SELECT ebeln FROM vbak INTO TABLE lt_vbak
  WHERE bukrs = p_bukrs AND erdat BETWEEN p_from AND p_to.

LOOP AT lt_vbak INTO lv_ebeln.
  SELECT * FROM vbap INTO TABLE lt_vbap WHERE ebeln = lv_ebeln.
  " process and append to output
ENDLOOP.
    

Masalah utama:

  • SELECT di dalam LOOP → N+1 problem (banyak DB round-trips).
  • Tidak ada filter pada item select selain ebeln → data overfetching.
  • Tidak memakai JOIN atau bulk select.

Analysis (ST05 & SAT)

ST05 menunjukkan ribuan statement SELECT * FROM vbap WHERE ebeln = ... (one per header). SAT menunjukkan method yang memanggil SELECT ini menghabiskan mayoritas wall time. PlanViz tidak relevan karena terlalu banyak small queries.

Solution strategy

  1. Eliminate per-row SELECT — ambil semua item dalam 1 query (JOIN) atau gunakan FOR ALL ENTRIES.
  2. Jika join result besar, gunakan CDS consumption view yang melakukan pushdown & aggregasi, atau AMDP untuk aggregasi/summary.
  3. Reduce columns selected (select only needed fields).

After — opsi A: Single JOIN (preferred)


" Option A: single join, bulk fetch
SELECT h~ebeln h~vkorg h~vkbur i~ebelp i~matnr i~netwr
  FROM vbak AS h
  INNER JOIN vbap AS i ON h~ebeln = i~ebeln
  INTO TABLE @DATA(lt_result)
  WHERE h~bukrs = @p_bukrs
    AND h~erdat BETWEEN @p_from AND @p_to
    AND /* add item-level filters if any */;
" process lt_result in-memory
    

Hasil: satu SQL call, transport data sekali saja. Benchmark: ~1.8s (contoh), drastis turun dari 52s.

After — opsi B: CDS Consumption View (best for reuse & Fiori)


@AbapCatalog.sqlViewName: 'ZV_SALES_LIST'
@EndUserText.label: 'Sales List CDS'
define view ZCDS_SALES_LIST as select from vbak
  association [0..*] to vbap as _items on $projection.ebeln = _items.ebeln
{
  key vbak.ebeln,
      vbak.vkorg,
      vbak.erdat,
      _items.matnr,
      _items.netwr
}
where vbak.bukrs = :p_bukrs and vbak.erdat between :p_from and :p_to;
    

Konsumsi via CDS membuat DB lakukan join & pushdown; Fiori/apps bisa langsung pakai CDS.

After — opsi C: AMDP jika butuh heavy aggregation


" AMDP pseudo example: aggregate order value per material within date range
DATA(lt_agg) = zcl_amdp_sales=>get_sales_agg( iv_bukrs = p_bukrs iv_from = p_from iv_to = p_to ).
    

AMDP menghitung agregasi di HANA dan mengembalikan small resultset. Gunakan ketika logic grouping/rolling/window functions berat.

Micro-optimizations applied

  • Explicit field list (hilangkan SELECT *).
  • Dedupe input IDs sebelum FOR ALL ENTRIES.
  • Gunakan hashed internal table untuk lookup jika perlu.
  • Batch processing / paging untuk UI (limit & lazy load).

Benchmark (example)

VersiAvg Response (10k rows)Notes
Before (per-row SELECT)~52 sN+1 problem, many DB round-trips
After (Single JOIN)~1.8 sSingle query, bulk transfer
After (CDS)~2.2 sPushdown & reusable view (depends on plan)
After (AMDP Agg)~0.5 - 1.0 sBest untuk heavy aggregations (small output)
Catatan: angka di atas ilustratif — hasil sebenarnya bergantung volume data, hardware HANA, dan kondisi jaringan.

Checklist Tuning Praktis (quick)

  1. Reproduce issue & ambil baseline (SAT time, ST05 traces).
  2. Identifikasi hotspot (SQL yang sering/laman & methods terlama).
  3. Refactor: eliminate SELECT-in-loop → JOIN / FOR ALL ENTRIES (safe) / CDS / AMDP.
  4. Minimize selected columns.
  5. Gunakan hashed table / binary search untuk lookup di memory.
  6. Profiling ulang & bandingkan before/after.
  7. Deploy ke QA, lakukan load test, monitoring di production after release.

Common Anti-patterns to Avoid

  • SELECT * di report produksi
  • Nested SELECT di loop
  • FOR ALL ENTRIES tanpa check is not initial
  • Using huge internal tables without FREE
  • Long transactions holding locks during heavy writes

Penutup

Performance tuning itu iterative — ukur dulu, ubah yang paling berdampak, ukur lagi. Kolaborasi developer + DBA + BASIS itu penting. Untuk report besar, pola umum: push aggregation ke DB (AMDP) atau gunakan CDS, lalu ambil hasil kecil ke ABAP untuk render.

👉 Lanjut ke: Belajar ABAP Part 16: Security Best Practices & Authorization in ABAP/CDS


Catatan: contoh dan best practice di atas disesuaikan untuk sistem SAP S/4HANA. Selalu test perubahan performa di environment yang representatif dan libatkan DBA HANA saat melakukan tuning DB-level.

Belajar SAP ABAP RAP

  Belajar SAP ABAP RAP: Pengenalan dan Konsep Dasar Restful ABAP Programming Model Kalau kamu seorang ABAPer yang mulai terjun ke dunia SAP...