ABAP CDS Associations ile ilgili kod.
Ön koşullar
1. ABAP CDS yaratma
2. SAP EPM
Senaryo
Satış siparişlerinin detaylarını ve fatura bilgilerini içeren rapor.
Anlatım
CDS Associations konusu yeniden kullanılabilir JOIN olarak da düşünülebilir. Teknik olarak arka planda JOIN olarak çalıştırılmaktadır ancak association türüne göre yeniden de kullanılabilir. İki türlü association vardır. Ad-hoc ve Exposed association. Ad-hoc assocation normal JOIN gibi ikinci tablonun herhangi bir alanını kullanmak üzerinedir. Exposed association ise ilgili View için bir alan olarak görünmez ancak başka bir View aracılığıyla erişim sağlandığı zaman direk olarak orada kullanılabilir. Exposed assocation’ı iç içe structure gibi düşünebiliriz. Eğer tekrar eden satırlar olacak şekilde bir eşleşme yapılırsa ve ilgili bir alan kullanılmak istenirse satırlar çoklanarak getirilecektir. Association kullanımının bir diğer faydası ise okunabilir kodlama yapmaktır. Association için SAP HANA View’lerinde dökümantasyon oluşturmaktadır hangi alanlar aracılığıyla bağlanmış olduğuna dair bu yüzden karmaşık mimarilerde CDS View’lerin okunabilirliğini arttırmaktadır.
Associations sadece syntax olarak kontrol edilmektedir. Yapılan eşleşme türleri herhangi bir kontrole girmemektedir. Örneğin 1-1 eşleşme verdiğimiz bir View üzerinde 1-N sonuç gelmesi herhangi bir şekilde HANA tarafından kontrol edilmez. Buradaki belirlenen Cardinality tamamen dökümantasyon amaçlıdır. O yüzden Associations kullanırken bunlara dikkat edilmelidir.
Base CDS View
@AbapCatalog.sqlViewName: 'ZZXB_V_ASSOCTYPE' @AbapCatalog.compiler.compareFilter: true @AccessControl.authorizationCheck: #CHECK @EndUserText.label: 'Association types CDS örneği' define view zzxb_cdsv_assoc_types as select from snwd_so as so association [1] to snwd_bpa as bpa on so.buyer_guid = $projection.buyer_guid association[0..1] to snwd_so_inv_head as invhead on so.buyer_guid = invhead.so_guid { so.so_id as order_id, so.delivery_status, so.gross_amount, so.currency_code, // Ad-hoc association invhead.payment_status, so.buyer_guid, // Exposed association bpa }
Consumed Association CDS View
@AbapCatalog.sqlViewName: 'ZZXB_V_ASSOCONS' @AbapCatalog.compiler.compareFilter: true @AccessControl.authorizationCheck: #CHECK @EndUserText.label: 'Association consumer CDS örneği' define view zzxb_cdsv_assoc_consumer as select from zzxb_cdsv_assoc_types as asstype { bpa.company_name, sum( asstype.gross_amount ) as total_gross_amount, asstype.currency_code } group by bpa.company_name, asstype.currency_code