Restful ABAP | Annotation-Association-Composition-Aggregation (Fonksiyonları)
1. Annotation
Annotation’lar, belirli işlevleri yöneten meta verilerdir ve CDS (Core Data Services) View veya RAP projelerinde tanımlanır ve davranışları etkiler.
- Nedir?
- Annotation’lar, CDS varlıklarına (entity), alanlarına veya diğer nesnelerine eklenen, meta-data (veri hakkında veri) sağlayan etiketlerdir. Bu etiketler, CDS varlığının nasıl davranacağını, nasıl görüntüleneceğini veya nasıl işleneceğini belirlemeye yardımcı olur.
- Annotation’lar, @ sembolü ile başlar ve ardından bir ad (örneğin, @AbapCatalog.sqlViewName) ve bir değer gelir.
- Kullanımı:
- Veritabanı Görüntüsü Adını Belirtme: @AbapCatalog.sqlViewName: ‘SQL_VIEW_NAME’
- Verinin Etiketini Belirtme: @EndUserText.label: ‘Display Label’
- Yetkilendirme Kontrolü: @AccessControl.authorizationCheck: #NOT_REQUIRED (örneğin burada yetkilendirmenin gerekmediği söylenmiştir)
- Metadata İşleme: @Metadata.ignorePropagatedAnnotations: true
- UI Elemanlarını Tanımlama: @UI.lineItem: [{ position: 10 }]
- Daha Fazla Özelleştirme: Geliştiricilerin CDS varlıklarının davranışlarını ve özelliklerini özelleştirmesini sağlar.
Örnek:
@EndUserText.label: 'Sales Orders'
@AbapCatalog.sqlViewName: 'ZSO_VIEW'
@AccessControl.authorizationCheck: #NOT_REQUIRED
define view ZSO_CDS as select from salesorder
{
key SalesOrderID as SalesOrder,
BuyerName,
TotalAmount
}
Yukarıdaki örnekte kullanılan annotationlardan bazıları ve anlamları:
- @EndUserText.label: Tanım için kullanıcı dostu bir etiket ekler.
- @AccessControl.authorizationCheck: Yetki kontrolü yapılacak mı yapılmayacak mı tanımlar.
2. Association (İlişkilendirme)
- Nedir?
Association, bir veri modeli içinde bir tabloyu veya entity’yi başka bir tabloyla ilişkilendirmek için kullanılır. Bir nevi foreign key relationship‘in gelişmiş halidir.
- Association’lar, iki CDS varlığı (entity) arasındaki ilişkiyi tanımlar. Bu ilişki, veritabanındaki tablolara bağlı olabilir veya olmayabilir.
- Association’lar, veri modeli oluştururken farklı varlıkların birbirleriyle nasıl ilişkili olduğunu belirtmek için kullanılır.
- Bir entity’den diğer entity’e navigasyonu (gezinmeyi) ve veri çekmeyi sağlar.
- Kullanımı:
- Basit İlişkilendirme:
association [0..1] to spfli as _connection on $projection.carrid = _connection.carrid
- Bu örnekte, bir CDS entity’i (select from spfli ile başlayan) ile spfli entity’si arasında bir ilişki tanımlanır. _connection ilişkisinin adıdır. on kısmında da hangi alanlar üzerinden ilişkinin kurulacağı belirtilir.
- Çoklu İlişkilendirmeler: Aynı anda birden fazla ilişki tanımlanabilir.
- Navigasyon: İlişki tanımlandıktan sonra, ilişkili veriye erişmek için ilişki adı kullanılır (örneğin, _connection.connid).
Örnek:
define view ZMP_CDS as select from salesorder
association [0..*] to salesorderitem as _Items
on $projection.SalesOrder = _Items.SalesOrder
{
key SalesOrderID as SalesOrder,
BuyerName,
TotalAmount,
_Items
}
3. Composition (Bileşim)
- Nedir?
Composition, bir entity’nin başka bir entity ile bağımlı (dependent) bir ilişkisini ifade eder. Bir üst entity (parent) silindiğinde, alt entity’ler (child) otomatik olarak silinir. Parent-child ilişkisi kurar. Transactional işlemleri kolaylaştırır.
- Composition, bir CDS varlığının (parent entity) bir başka CDS varlığını (child entity) içermesi veya bu varlıktan oluşması durumunu ifade eder. Bu, bir tür “bütün-parça” ilişkisidir.
- Bir üst entity, alt entity’den oluşur veya onu içerir.
- Composition’lar, derin hiyerarşik veri yapılarını modellemek için kullanılır.
- Silme işlemleri, üst entity silindiğinde alt entity’yi de etkileyebilir.
- Kullanımı:
- Örnek: Bir müşteri (customer) ve bu müşteriye ait siparişler (orders) arasındaki ilişki. Müşteri silindiğinde, ilişkili siparişlerin de silinmesi gerekiyorsa, bir “composition” kullanılabilir.
- Syntax: CDS’te composition doğrudan kullanılmaz. Bunun yerine ilişkiler ve anahtar alanlar ile tanımlanır.
- Önemi:
- Hiyerarşik veri yapılarını modellemeyi kolaylaştırır.
- Veri bütünlüğünü sağlamaya yardımcı olur (örneğin, bir üst entity silindiğinde alt entity’lerin de silinmesi).
- Kompleks iş nesnelerini modellemek için kullanışlıdır.
Örnek:
define root view entity ZMP_Header
as select from salesorder
composition [0..*] to ZSO_Item as Items
on SalesOrderID = Items.SalesOrderID
{
key SalesOrderID as SalesOrder,
BuyerName,
TotalAmount,
Items
}
NOT:
composition: Items bağlı bir entity’dir.
Parent silindiğinde Items otomatik olarak silinir.
4. Aggregation Functions (Toplama Fonksiyonları)
- Nedir?
- Aggregation functions, bir grup veri üzerinde yapılan hesaplamaları gerçekleştiren fonksiyonlardır. Bu fonksiyonlar, verileri özetlemek veya analiz etmek için kullanılır.
- CDS’te, gruplanmış veriler üzerinde toplama işlemleri yapmak için kullanılır.
- Temel Toplama Fonksiyonları:
- SUM(): Bir ifade için değerleri toplar.
- AVG(): Bir ifade için ortalama değeri hesaplar.
- MIN(): Bir ifade için minimum değeri bulur.
- MAX(): Bir ifade için maksimum değeri bulur.
- COUNT() veya COUNT(*): Satır sayısını sayar.
- Kullanımı:
- GROUP BY keyword’u ile birlikte kullanılır.
ÖRNEK:
define view ZMP_SalesSummary as
select from sflight
{
carrid,
SUM(seatsmax) as total_seats,
AVG(price) as average_price
}
group by carrid;
- Önemi:
- Veriyi özetleme ve analiz etme yeteneği sağlar.
- RAP uygulamalarında veri analizi ve raporlama için kullanışlıdır.
- Karmaşık sorguları basitleştirmeye yardımcı olur.
Özetle;
- Annotation: CDS varlıklarına metadata eklemek için kullanılır ve davranışlarını ve özelliklerini özelleştirir.
- Association: Farklı CDS varlıkları arasındaki ilişkileri tanımlar, navigasyon sağlar ve veriye ilişkisel erişim imkânı tanır.
- Composition: Bir üst entity’nin alt entity’yi içerdiği “bütün-parça” ilişkisini temsil eder. Veri hiyerarşilerini modellemek için kullanılır.
- Aggregation Function: Verileri özetlemek, toplamak veya hesaplamak için kullanılır. Veri analizi için önemlidir.
