Tuesday, 30 September 2025

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.

No comments:

Post a Comment

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