Wednesday, 1 October 2025

ABAP CDS View Part 9 : CDS Analytical — Fact, Dimension & Annotation

CDS Analytical: Fact & Dimension untuk Reporting di SAP S/4HANA

CDS Analytical — Fact, Dimension & Annotation untuk Reporting

Di episode ini kita membahas CDS Analytical: bagaimana merancang CDS sebagai sumber data analitik (fact & dimension), anotasi yang umum dipakai untuk analytical/embedded analytics, serta cara mengkonsumsi hasilnya di Fiori atau SAP Analytics Cloud (SAC).

1. Konsep: Fact vs Dimension

  • Fact: berisi ukuran (measures) numerik yang bisa di-aggregate—misalnya jumlah penjualan, quantity, revenue.
  • Dimension: konteks atau atribut untuk memotong/menyaring fact—mis. customer, material, time, region.
  • Di model CDS Analytical kita biasanya memisahkan view menjadi fact view (menampung measures) dan beberapa dimension view untuk atribut.

2. Kenapa pisah Fact & Dimension?

  • Memudahkan reuse: dimensi bisa dipakai oleh banyak faktur/kueri.
  • Performance: view analytical dapat dioptimalkan untuk agregasi dan push-down ke HANA.
  • Compatibility: memudahkan konsumsi oleh tools analitik (SAC, Fiori Analytical, atau reporting engine).

3. Annotation Analytic yang sering dipakai (konsep)

Beberapa annotation di CDS berguna untuk menandai bahwa view ini dimaksudkan untuk analytic/query dan untuk mengidentifikasi measures vs dimensions. Contoh umum (konsep, cek ADT SAP doc untuk variant lengkap):

AnotasiTujuan
@VDM.viewType: #ANALYTICALMenandai view sebagai analytical/consumption type.
@Analytics.query: trueMengindikasikan view dapat dipakai sebagai query/analytical dataset.
@DefaultAggregate / agregasiMenentukan fungsi agregasi default untuk field numeric (sum, avg).
@Semantics.amount / @Semantics.unitOfMeasureMenandakan field sebagai amount dan unit (penting untuk pemformatan/UOM).
@UI.lineItem / @UI.selectionFieldUI hints untuk Fiori Elements Analytical apps.

Catatan: detail nama annotation bisa berbeda-beda versi SAP; gunakan ADT/Help untuk memastikan nama dan parameter yang tepat.

4. Contoh Arsitektur Sederhana

Contoh pattern yang sering dipakai:

  1. Dimension Material — CDS yang expose atribut material (material id, description, group).
  2. Dimension Customer — CDS yang expose customer attributes (id, name, region).
  3. Fact Sales — CDS yang mengambil transaksi penjualan (header/item) dan menyediakan measures seperti NetValue, Quantity.
  4. Consumption / Analytical View — menggabungkan fact + dimension (via association/join) dan menandainya sebagai consumption/analytical untuk reporting.

5. Contoh CDS (pattern) — Dimension + Fact + Consumption

Berikut contoh sederhana (kode contoh; sesuaikan nama tabel/field dengan sistem Anda):

-- Dimension: Material
@AbapCatalog.sqlViewName: 'ZV_DIM_MAT'
@EndUserText.label: 'Dimension Material'
define view ZCDS_DIM_MATERIAL
  as select from mara
{
  key matnr      as MaterialID,
      matkl      as MaterialGroup,
      mtart      as MaterialType
}

-- Dimension: Customer (contoh)
@AbapCatalog.sqlViewName: 'ZV_DIM_CUST'
@EndUserText.label: 'Dimension Customer'
define view ZCDS_DIM_CUSTOMER
  as select from kna1
{
  key kunnr     as CustomerID,
      name1     as CustomerName,
      regio     as Region
}

-- Fact: Sales (mengumpulkan measures)
@AbapCatalog.sqlViewName: 'ZV_FACT_SALES'
@EndUserText.label: 'Fact Sales'
define view ZCDS_FACT_SALES
  as select from vbap as I
    inner join vbak as H on I.vbeln = H.vbeln
{
  key H.vbeln            as SalesDoc,
      I.posnr            as ItemNo,
      I.matnr            as MaterialID,
      H.kunnr           as CustomerID,
      sum( I.netwr )     as TotalNetValue,   -- measure (aggregate)
      sum( I.kwmeng )    as TotalQuantity
}
-- Catatan: penulisan agregasi / grouping bisa membutuhkan sintaks 'group by' tergantung pada versi CDS.

Jika Anda perlu agregasi kompleks (rolling, windowing), pertimbangkan CDS Table Function/AMDP untuk logika yang lebih fleksibel.

6. Membuat Consumption / Analytical View

Setelah punya fact + dimension, biasanya dibuat consumption view yang menghubungkan keduanya dan memberikan annotation untuk analytic consumption.

@AbapCatalog.sqlViewName: 'ZV_CDS_SALES_CONS'
@EndUserText.label: 'Consumption: Sales for Analytics'
@VDM.viewType: #ANALYTICAL
@Analytics.query: true

define view ZCDS_SALES_ANALYTICS
  as select from ZCDS_FACT_SALES as F
    left outer join ZCDS_DIM_MATERIAL   as M  on F.MaterialID = M.MaterialID
    left outer join ZCDS_DIM_CUSTOMER   as C  on F.CustomerID = C.CustomerID
{
  key F.SalesDoc,
      F.ItemNo,
      M.MaterialID,
      M.MaterialGroup,
      C.CustomerID,
      C.CustomerName,
      F.TotalNetValue    as NetValue    @Semantics.amount: true,
      F.TotalQuantity    as Quantity
}

7. Aktivasi & Konsumsi Reporting

  • Aktifkan semua view di ADT (Ctrl+F3).
  • Jika pakai Fiori Analytical atau Fiori Elements, tambahkan UI annotation (@UI.lineItem, @UI.selectionField) pada consumption view agar list/filters terbentuk otomatis.
  • Untuk SAC: expose consumption view via OData (lihat Episode 8) atau buat connection langsung ke S/4HANA sebagai source (tergantung arsitektur landscape).
  • Test metadata (/…/$metadata) agar tools analitik dapat membaca measures & dimensions dengan benar.

8. Praktik Terbaik (Best Practices)

  • Pisahkan fact & dimension untuk reuse dan kejelasan model.
  • Tandai measures dengan semantic annotation (amount, currency, unit) agar tools men-format angka dengan benar.
  • Kendalikan jumlah field yang di-expose ke consumption view — hanya field yang dibutuhkan untuk analitik.
  • Uji performa pada HANA: pastikan filter pushdown dan agregasi terjadi di DB untuk skala besar.
  • Gunakan table function / AMDP untuk scenario agregasi kompleks atau perhitungan windowing.
  • Document setiap measure: definisi, sumber, dan periode (mis. net value in document currency).
Ringkasan:
CDS Analytical membantu membuat model data yang rapi untuk reporting: fact menyimpan measures, dimension menyimpan atribut, dan consumption view menggabungkan keduanya untuk consumption oleh Fiori atau tools analitik seperti SAC. Gunakan annotation analytic & semantic agar hasil konsumsi tepat, dan selalu cek performa & metadata sebelum dipakai produksi.

➡️ Next (Episode 10): Authorization & DCL — mengamankan CDS dengan Data Control Language, role-based access, dan contoh implementasi DCL.

Tuesday, 30 September 2025

ABAP CDS View Part 8 : CDS untuk OData & Fiori

CDS untuk OData & Fiori | Ekspos Consumption View ke OData SAP

CDS untuk OData & Fiori — Ekspos Consumption View sebagai OData Service

Di episode ini kita akan membahas bagaimana membuat CDS Consumption View agar bisa diakses sebagai OData service dan digunakan oleh Fiori/UI5 (mis. Fiori Elements). Fokus praktis: anotasi penting, langkah aktivasi service di Gateway, dan cara menguji endpoint OData.

Ringkasan alur kerja

  • Buat Consumption View (CDS) yang berisi field & annotation untuk UI/OData.
  • Tambahkan anotasi publikasi OData (mis. @OData.publish: true) atau buat Service Definition + Service Binding.
  • Aktifkan / daftarkan service di transaction /IWFND/MAINT_SERVICE (SAP Gateway).
  • Uji endpoint OData via browser/Postman dan integrasikan ke Fiori/UI5 atau Fiori Elements.

1. Anotasi penting untuk OData & Fiori

Beberapa anotasi yang sering digunakan:

AnotasiFungsi singkat
@OData.publish: trueMenghasilkan (auto-generate) service OData untuk consumption view (cepat untuk dev/testing).
@UI.headerInfoInfo header untuk Fiori Elements
@UI.lineItemMenentukan kolom yang muncul di list (Fiori Elements)
@UI.selectionFieldField yang muncul di filter bar
@AccessControl.authorizationCheckBagian security — jika #CHECK, harus ada DCL

Tip: @OData.publish: true berguna untuk percepatan pengembangan, tapi di landscape production biasanya tim Basis/NetWeaver mendaftarkan service secara manual dengan Service Definition / Service Binding untuk kontrol lebih ketat.

2. Contoh CDS Consumption View dengan @OData.publish

@AbapCatalog.sqlViewName: 'ZV_CDS_MAT_CONS'
@AbapCatalog.compiler.compareFilter: true
@EndUserText.label: 'Consumption view: Material for OData'
@OData.publish: true
@VDM.viewType: #CONSUMPTION

define view ZCDS_MATERIAL_CONS
  as select from mara as M
    inner join makt as T on M.matnr = T.matnr
{
  key M.matnr         as Material,
      T.maktx         as Description,
      M.mtart         as MaterialType,
      M.matkl         as MaterialGroup
}

Jika view di-activate dengan annotation @OData.publish: true, sistem biasanya mempersiapkan artefak service yang bisa didaftarkan/diaktifkan pada Gateway.

3. Cara mendaftarkan dan mengaktifkan OData Service (ringkasan langkah)

  1. Aktifkan CDS di ADT (Ctrl+F3).
  2. Buka transaction /IWFND/MAINT_SERVICE pada sistem Gateway (Fiori server atau system yang jadi front-end).
  3. Klik Add Service (Register Service) → pilih backend system alias / technical system → cari service yang generated (nama service biasanya bereferensi ke nama view atau prefix seperti Z*).
  4. Pilih service → klik Add Selected Services → tunggu hingga status “Active”.
  5. Jika service membutuhkan authentication atau ICF node, pastikan admin Basis sudah konfigurasi dan ICF service aktif.

Catatan penting: Nama service yang muncul di Gateway dapat berbeda-beda (tergantung konfigurasi). Jika @OData.publish tidak dipakai, Anda perlu membuat Service Definition (SEGW) atau Service Binding (RAP) secara manual.

4. Testing endpoint OData

Contoh pola URL OData (umum):

https://:/sap/opu/odata/sap//
-- Contoh resource:
https://my.sap.system:443/sap/opu/odata/sap/ZCDS_MATERIAL_CONS/MaterialSet?$top=10
  • Buka URL di browser (untuk GET collection) atau gunakan Postman untuk pengujian lebih lanjut (headers, auth).
  • Gunakan parameter query standar OData ($filter, $select, $top, $skip, $orderby).
  • Jika menggunakan Fiori Elements, service metadata harus lengkap (/sap/opu/odata/sap//$metadata).

5. Menghubungkan ke Fiori/UI5 (singkat)

  • Jika ingin Fiori Elements: buat aplikasi Fiori Elements List Report yang menunjuk ke OData service (service alias di manifest.json).
  • Gunakan annotation UI (di CDS) untuk menyesuaikan layout List, Table, Selection fields, headerInfo.
  • Untuk app custom UI5: panggil endpoint OData dari model (OData V2/V4) dan bind ke control table/list.

6. Praktik terbaik & peringatan

  • Gunakan @OData.publish untuk dev/test, tapi pertimbangkan proses registrasi service formal di landscape production.
  • Pastikan security/DCL sudah benar jika data sensitif (annotation @AccessControl dan file DCL terkait).
  • Jangan expose terlalu banyak field atau field sensitif tanpa filtering/authorization.
  • Perhatikan performa: gunakan filter pushdown, batasi result set dengan $top atau implementasi paging.
  • Selalu cek $metadata — Fiori Elements sangat bergantung pada metadata yang lengkap dan konsisten.
Ringkasan:
Mengekspos CDS Consumption View ke OData memungkinkan integrasi cepat ke Fiori/UI5. Untuk percepatan gunakan @OData.publish: true, namun di production sebaiknya service didaftarkan dan dikontrol oleh tim Basis (registrasi di /IWFND/MAINT_SERVICE, ICF, dan security). Gunakan annotation UI untuk Fiori Elements agar tampilan lebih rapi tanpa coding UI tambahan.

➡️ Next (Episode 9): CDS Analytical — membahas konsep fact & dimension, annotation analytics, dan penggunaan CDS untuk reporting/embedded analytics.

ABAP CDS View Part 7 : Extend View & Reuse

Extend & Reuse CDS View — Extend View Entity di ABAP CDS | SAP Tutorial

Extend View & Reuse — Memperluas CDS tanpa Mengubah Base View

When projects grow, requirement berubah, atau kamu butuh custom field untuk customer/partner, kita tidak selalu ingin mengubah CDS standar yang sudah ada. CDS View extension memungkinkan developer menambah field atau association ke view yang sudah ada — tanpa memodifikasi object asli. Ini mirip konsep append structure di ABAP Dictionary, tapi untuk CDS. :contentReference[oaicite:1]{index=1}

1) Dua pendekatan utama

  • Extend View Entity (new syntax) — direkomendasikan untuk view entity modern (define view entity). Ada statement baru EXTEND VIEW ENTITY untuk extensibility. :contentReference[oaicite:2]{index=2}
  • Extend / Append style (older templates) — untuk `define view` yang lebih lama, ADT menyediakan template Extend View yang menghasilkan object extension yang menambahkan kolom/association. Banyak tutorial praktis menjelaskan alurnya. :contentReference[oaicite:3]{index=3}

2) Contoh konsep (pattern) — extend via separate data definition

Prinsipnya: kamu buat object CDS baru (extension) yang menunjuk ke CDS base, lalu tambahkan elemen yang diperlukan. Extension ini disimpan di object terpisah dan dapat dideploy/transport secara independen.

2.a — Contoh pola umum (pseudocode / template)

-- Template style (ADT: "Extend View")
@AbapCatalog.sqlViewAppendName: 'ZV_BASE_EXT'    "SQL append name (16 chars)
@EndUserText.label: 'Extension: add extra fields'
extend view ZCDS_BASE with ZCDS_BASE_EXT
{
  -- refer to original data source alias of base view, e.g. "BaseSource.field"
  BaseSource.extra_field,
  AnotherSource.more_field
}

Note: Actual template generated by ADT may use keywords like EXTEND VIEW or EXTEND VIEW ENTITY depending on whether base view is legacy DEFINE VIEW or modern DEFINE VIEW ENTITY. Selalu gunakan template ADT agar format dan atribut transport/activation benar. :contentReference[oaicite:4]{index=4}

2.b — Contoh praktis: menambah field teks ke consumption view

-- Base consumption view (example)
define view ZCDS_MATERIAL_BASE
  as select from mara as M
{
  key M.matnr,
      M.mtart,
      M.matkl
}

-- Extension (contoh)
@AbapCatalog.sqlViewAppendName: 'ZV_MAT_EXT'
@EndUserText.label: 'Extension: add material description'
extend view ZCDS_MATERIAL_BASE with ZCDS_MATERIAL_BASE_EXT
{
  M.maktx   -- refer to data source field (MAKT) via path / alias if allowed
}

Di praktik nyata, kadang kamu perlu menggunakan path expression ke association extension (mis. _Extension) atau extend the E-view dulu sebelum extend R-view (pattern SAP standar). Ini berguna terutama pada standar SAP yang membatasi sumber data ekstensi. :contentReference[oaicite:5]{index=5}

3) Extensibility Control & Annotations penting

Owner dari base view bisa mengontrol apakah view boleh di-extend, dan dari mana extension boleh mengambil data, lewat annotation seperti:

AnnotationFungsi singkat
@AbapCatalog.viewEnhancementCategoryMenentukan bagian view yang boleh di-extend (mis. PROJECTION_LIST, AGGREGATE)
@AbapCatalog.extensibilityKontrol lebih detil atas extensibility (allowNewDatasources, dataSources, elementSuffix, dsb.)
@AccessControlMasih berlaku — extension tetap mengikuti security & DCL jika ada

Dengan pengaturan ini, pemilik object mengatur batasan yang aman untuk ekstensi (mis. tidak membiarkan membaca sembarang tabel baru tanpa izin). :contentReference[oaicite:6]{index=6}

4) Best Practice untuk Reuse & Extension

  • Jangan ubah base view langsung — buat extension object terpisah agar upgrade-safe.
  • Gunakan E-views (extension includes) — SAP sering menyediakan E_* views sebagai target extension; tambah field ke E-view lalu expose ke R-view. Ini pattern aman untuk standard SAP. :contentReference[oaicite:7]{index=7}
  • Limit sumber data — jika owner men-set allowNewDatasources=false, extension hanya boleh membaca dari dataSources yang diizinkan.
  • Dokumentasikan extension — jelaskan kenapa field ditambah, mapping tabel asal, dan impact ke OData/UI.
  • Test data preview & OData exposure setelah aktivasi—pastikan tidak merusak binding ke Fiori Elements atau service metadata.

5) Kapan pakai extension vs membuat view baru?

  • Pakai extension jika: butuh menambah field ke view existing yang banyak dipakai, dan kamu ingin preserve konsistensi nama service/object.
  • Buat view baru jika: requirement berbeda total (struktur output berubah), atau kamu butuh behavior/aggregation berbeda.
Summary:
CDS View extension adalah cara upgrade-safe untuk menambah field atau association tanpa memodifikasi base view. Gunakan template ADT (Extend View / Extend View Entity), perhatikan annotation extensibility yang di-set oleh owner, dan ikuti best practice SAP (pakai E-view pattern bila tersedia). Untuk referensi resmi dan panduan langkah demi langkah, cek dokumentasi SAP dan tutorial ADT. :contentReference[oaicite:8]{index=8}

➡️ Next (Episode 8): CDS untuk OData & Fiori — expose consumption view ke OData, service binding, dan testing via Gateway.

ABAP CDS View Part 6 : CDS View dengan Parameter & Filter

CDS View dengan Parameter & Filter di ABAP | Tutorial SAP S/4HANA

CDS View dengan Parameter & Filter

Di Episode 5 kita belajar JOIN. Sekarang kita fokus pada parameterized CDS View: cara menambahkan input parameters untuk kontrol filter seperti bahasa (sy-langu), rentang tanggal, atau filter optional (opsional). Contoh-contoh di bawah bisa langsung dicoba di ADT Eclipse.

1) Pattern: Parameter Bahasa (sy-langu)

Sering dipakai saat join ke MAKT (material text) agar deskripsi mengikuti bahasa user secara otomatis. Gunakan @Environment.systemField: #SYSTEM_LANGUAGE untuk binding ke sy-langu.

@AbapCatalog.sqlViewName: 'ZV_MAKT_LANG'
@EndUserText.label     : 'Material Text by Language (Param)'

define view with parameters
  p_langu : abap.lang  -- CHAR(1)
    @Environment.systemField: #SYSTEM_LANGUAGE
ZCDS_MAKT_LANG
  as select from makt
{
  key matnr,
      spras,
      maktx
}
where spras = $parameters.p_langu
Tip: Dengan annotation @Environment.systemField: #SYSTEM_LANGUAGE, banyak consumer (mis. Fiori Elements) akan otomatis mengisi parameter sesuai bahasa user, tanpa kamu isi manual.

2) Pattern: Date Range (FROM–TO)

Memfilter data berdasarkan tanggal pembuatan (ERSDA) pada MARA.

@AbapCatalog.sqlViewName: 'ZV_MARA_DATER'
@EndUserText.label     : 'Material by Created Date Range'

define view with parameters
  p_date_from : abap.dats,
  p_date_to   : abap.dats
ZCDS_MARA_DATE_RANGE
  as select from mara
{
  key matnr,
      ersda,
      mtart,
      matkl
}
where ersda between $parameters.p_date_from and $parameters.p_date_to

3) Pattern: Optional Filter (Param Boleh Kosong)

CDS parameter wajib ada, tapi kamu bisa membuatnya “opsional” secara logika—misal, jika parameter kosong maka semua data diambil. Untuk tipe CHAR gunakan perbandingan dengan literal kosong ''.

@AbapCatalog.sqlViewName: 'ZV_MARA_OPT'
@EndUserText.label     : 'Optional Filter by MATNR'

define view with parameters
  p_matnr : abap.char(18)
ZCDS_MARA_OPT
  as select from mara
{
  key matnr,
      mtart,
      matkl
}
where ( $parameters.p_matnr = '' or matnr = $parameters.p_matnr )
Catatan: Untuk tipe tanggal/num, pakai nilai sentinel (mis. '00000000') atau range luas sebagai “mode all”.

4) Konsumsi di ABAP Open SQL

Cara memanggil CDS ber-parameter di ABAP (perhatikan sintaks kurung dan @ escape host variable).

DATA(lv_from) = '20240101'.
DATA(lv_to)   = '20241231'.

" Contoh 1: Date range
SELECT * FROM ZCDS_MARA_DATE_RANGE( p_date_from = @lv_from, p_date_to = @lv_to )
  INTO TABLE @DATA(lt_mara).

" Contoh 2: Language-bound (pakai sy-langu otomatis)
SELECT * FROM ZCDS_MAKT_LANG( p_langu = @sy-langu )
  INTO TABLE @DATA(lt_makt).

" Contoh 3: Optional filter
DATA(lv_matnr) = ''. " kosong = ambil semua
SELECT * FROM ZCDS_MARA_OPT( p_matnr = @lv_matnr )
  INTO TABLE @DATA(lt_opt)
  UP TO 100 ROWS. " limit di ABAP, bukan di CDS

5) Aktivasi & Data Preview di ADT

  • Activate (Ctrl + F3) data definition-nya
  • Klik kanan → Open Data Preview
  • Dialog akan minta nilai parameter → isi sesuai kebutuhan

6) Best Practices & Batasan

  • Gunakan tipe ABAP (mis. abap.lang, abap.dats) agar interoperabilitas lebih mudah
  • Hindari logika kompleks di WHERE—pindahkan ke Table Function bila perlu
  • Parameter bukan field—tidak muncul di output
  • Batasi jumlah parameter agar konsumsi OData/UI tetap simpel
Summary:
Parameter membuat CDS lebih fleksibel: bisa lock ke bahasa user, batasi data dengan date range, atau sediakan filter opsional. Konsumsi di ABAP sangat straightforward dengan sintaks VIEW_NAME( param = @var ).

➡️ Next (Episode 7): Extend View & Reuse — memperluas CDS tanpa modifikasi objek asli, strategi enhancement yang aman untuk upgrade.

ABAP CDS View Part 5 : CDS View dengan Join (Multi Table)

CDS View dengan Join di SAP ABAP | Tutorial SAP S/4HANA

CDS View dengan Join (Multi Table)

Kalau di Episode 4 kita main di single table CDS, sekarang kita naik level. Episode 5 fokus pada JOIN – fitur penting untuk gabung data dari beberapa tabel sekaligus, mirip SELECT JOIN di SQL, tapi lebih elegan dan reusable.

1. Tipe Join dalam CDS

  • Inner Join – hanya data yang cocok di kedua tabel
  • Left Outer Join – semua dari tabel utama + matching dari tabel kedua
  • Right Join jarang dipakai (direkomendasikan hindari)

2. Contoh Join: MARA + MAKT

Contoh umum: Material Master (MARA) dengan Deskripsi Material (MAKT).

@AbapCatalog.sqlViewName: 'ZV_JOIN_MARA'
@EndUserText.label     : 'CDS Join MARA dan MAKT'

define view ZCDS_JOIN_MARA
  as select from mara as A
    inner join makt as B
      on A.matnr = B.matnr
{
  key A.matnr,
      A.mtart,
      A.matkl,
      B.maktx,
      B.spras
}

Alias A dan B membantu membaca struktur dengan lebih jelas.

3. Contoh Left Outer Join

Kalau mau semua material muncul walaupun tidak ada translation:

define view ZCDS_JOIN_LEFT
  as select from mara as A
    left outer join makt as B
      on A.matnr = B.matnr
{
  key A.matnr,
      B.maktx,
      B.spras
}

4. Data Preview & Aktivasi

  • Tekan Ctrl + F3 untuk aktivasi
  • Klik kanan → Open Data Preview
  • Cek hasil join langsung dari Eclipse

5. Contoh Join di Modul SD (Header + Item)

@AbapCatalog.sqlViewName: 'ZV_VBAK_VBAP'
@EndUserText.label     : 'CDS Join VBAP dan VBAK'

define view ZCDS_JOIN_SALES
  as select from vbak as H
    inner join vbap as I
      on H.vbeln = I.vbeln
{
  key H.vbeln,
      H.auart,
      I.posnr,
      I.matnr,
      I.netwr
}

Struktur header–item ini sering dipakai untuk laporan atau OData.

6. Tips & Best Practice

  • Gunakan alias A, B, H, I biar kode clean
  • Hindari wildcard (*)
  • Selalu pakai key field untuk identifikasi
  • Join secukupnya (hindari join 7–8 tabel sekaligus)
Summary:
Join adalah fitur penting dalam CDS untuk gabung data dari beberapa tabel. Gunakan inner atau left join sesuai kebutuhan. Dengan struktur rapi dan alias, CDS View kamu siap dipakai untuk OData, analitik, atau laporan Fiori.

➡️ Next (Episode 6): CDS View dengan Filter & Parameter (misal p_langu, date filter, top N data).

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

ABAP CDS View Part 10 : Authorization & DCL untuk ABAP CDS

Authorization & DCL di ABAP CDS | Panduan Lengkap (PFCG, @AccessControl, DCL) Authorization & DCL untuk ABAP CDS — Pandua...