Wednesday, 1 October 2025

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 — Panduan Lengkap

Di episode ini kita bahas cara mengamankan hasil CDS menggunakan Data Control Language (DCL), integrasinya dengan PFCG / role-based conditions, bagaimana menggunakan annotation @AccessControl.authorizationCheck, contoh implementasi, serta langkah pengujian. Tujuannya: memastikan user hanya melihat data yang mereka berhak akses.

Ringkasan konsep

  • CDS sendiri tidak otomatis memfilter baris — untuk row-level security kita pakai DCL (define role & grant rule) bersama annotation @AccessControl.authorizationCheck: #CHECK pada CDS.
  • DCL didefinisikan di file access control (.dcl) dan berisi role yang melakukan grant select on <cds> dengan kondisi.
  • Untuk integrasi dengan PFCG (role-based conditions), DCL mendukung pemetaan kondisi yang diisi lewat PFCG sehingga admin Basis/Security bisa mengelola nilai kondisi per role/user. :contentReference[oaicite:0]{index=0}

1) Annotation di CDS — aktifkan pemeriksaan DCL

Untuk mengaktifkan DCL pada sebuah CDS view, tambahkan annotation berikut di definisi CDS:

@AccessControl.authorizationCheck: #CHECK
define view ZCDS_SALES_CONS
  as select from ...
{ ... }

Dengan #CHECK sistem akan menerapkan aturan DCL (jika ada) saat CDS diakses baik lewat ABAP Open SQL, OData, maupun Data Preview (tergantung context). Jika annotation tidak ada, nilai default biasanya #NOT_REQUIRED. :contentReference[oaicite:1]{index=1}

2) Struktur DCL — konsep & contoh (pattern)

DCL berisi definisi role dan aturan grant. Berikut contoh pola umum (template) yang sering dipakai — sesuaikan nama object dan field dengan sistem Anda:

-- File: ZDCL_SALES.dcl
define role ZDCL_SALES {
  grant select on ZCDS_SALES_CONS
    where sales_org = $session.user_sales_org;   -- contoh placeholder
}

Catatan: variabel $session.* pada contoh di atas adalah ilustrasi. Dalam praktik yang umum, Anda dapat menggunakan pfcg_condition atau inheritance untuk memetakan kondisi dari PFCG ke DCL (lihat contoh berikut). Untuk sintaks dan opsi lengkap, rujuk dokumentasi SAP. :contentReference[oaicite:2]{index=2}

3) Contoh DCL menggunakan PFCG condition (pattern aman untuk production)

Cara populer: simpan daftar perusahaan / org unit di kondisi PFCG (role) lalu DCL memanggil kondisi itu — sehingga admin cukup assign role di PFCG tanpa ubah DCL. Contoh pattern (template):

-- File: ZDCL_SALES.dcl
define role ZDCL_SALES {
  grant select on ZCDS_SALES_CONS
    where company in pfcg_condition( 'ZCOND_COMPANY' );  -- ambil nilai dari PFCG condition 'ZCOND_COMPANY'
}

Dengan pendekatan ini, security admin membuat condition ZCOND_COMPANY di PFCG dan menetapkan nilai perusahaan (contoh: 1000,2000) ke role; DCL akan menggunakan nilai tersebut untuk memfilter baris. Ini memisahkan concern developer (kode) dan admin (data akses). :contentReference[oaicite:3]{index=3}

4) Contoh lengkap alur implementasi (step-by-step)

  1. Buat/ubah CDS Consumption View dan tambahkan annotation: @AccessControl.authorizationCheck: #CHECK.
  2. Buat DCL file (ABAP: New → Core Data Services → Access Control). Di dalamnya definisikan role dan aturan grant sebagaimana contoh di atas.
  3. Jika pakai PFCG conditions: buat condition di PFCG (Transaction PFCG → Role → Tab: Menu/Authorization → Conditions / Parameterization; admin mengisi nilai kondisi seperti daftar company codes atau plant).
  4. Transport & Activate: activate CDS & DCL (Ctrl+F3). Pastikan DCL ter-transport ke target system sesuai landscape.
  5. Assign PFCG role ke user atau ke group yang relevan.
  6. Test: login sebagai user A (yang punya company X) → query CDS (data preview / OData / ABAP SELECT) → hanya lihat baris company X. Login sebagai user B → lihat baris company Y. Lakukan juga test tanpa role untuk pastikan akses terblokir. :contentReference[oaicite:4]{index=4}

5) Testing & verifikasi

  • Data Preview di ADT: untuk DCL yang menggunakan PFCG, Data Preview di Eclipse tidak selalu menampilkan hasil sesuai user lain — gunakan user di system (atau debug session) untuk memverifikasi behavior sebenarnya.
  • ABAP SELECT: panggil CDS dari ABAP sebagai user target dan lihat apakah hasil terfilter sesuai DCL.
  • OData / Fiori: akses endpoint OData sebagai user target; cek /$metadata dan query collection (gunakan Postman atau browser) untuk memastikan row-level filtering jalan.
  • SU53 & ST01: jika akses gagal, gunakan SU53 untuk cek missing authorization/failed checks; gunakan trace jika perlu.

6) Advanced: inheritance & role composition

DCL mendukung inheritance dan komposisi role — mis. Anda dapat INHERIT kondisi dari role lain, atau membuat role yang mewarisi kondisi entitas lain sehingga mempermudah reuse aturan keamanan. Ini berguna ketika organisasi punya struktur role yang kompleks. Untuk detail syntax advanced lihat dokumentasi DCL (DEFINE ROLE variants). :contentReference[oaicite:5]{index=5}

7) Best practices & checklist

  • Gunakan @AccessControl.authorizationCheck: #CHECK pada CDS yang berisi data sensitif — jangan andalkan UI saja.
  • Pisahkan developer & admin tasks: definisi DCL di repo git/transport, nilai kondisi di-manage oleh admin (PFCG).
  • Dokumentasikan tiap rule: tujuan, fields yang dipakai, mapping ke PFCG condition.
  • Minimal privilege: buat rule seketat perlu (least privilege).
  • Uji di environment non-prod dengan user-role berbeda sebelum deploy ke production.
  • Perhatikan performance: kondisi kompleks di DCL dapat mempengaruhi runtime; optimalkan field index & pushdown di HANA jika perlu.
Ringkasan:
DCL adalah mekanisme standar untuk row-level security pada CDS. Gunakan @AccessControl.authorizationCheck: #CHECK pada CDS, definisikan role & grant di file DCL, dan bila perlu gunakan integrasi pfcg_condition agar admin bisa mengelola nilai kondisi lewat PFCG. Selalu test behavior dengan user nyata dan dokumentasikan aturan secara jelas.

➡️ Next (Episode 11): Performance & Best Practice untuk CDS — tips indexing, filter pushdown, menghindari pitfall, dan tools monitoring (ST05, SQL Monitor).

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.

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