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
@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 )
'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
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