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