CDS View’de Kullanılan ABAP Annotasyonları

Herkese Merhaba,
Bu yazımızda, RAP (Restful Application Programming)-CDS view’de sıkça kullanılan annotasyonlara ve onların işlevlerine değineceğiz. CDS View’lerde sıklıkla karşılaşılan ve uygulamanızın performansından kullanıcı arayüzüne kadar birçok yönünü etkileyen ABAP annotasyonlarını derinlemesine inceliyoruz. Bu yazıda, sık kullanılan annotasyonların ne işe yaradığını, nasıl gruplandırıldığını ve çevrilebilir metinler için nasıl kullanıldığını öğrenecek, kodumuzu optimize ederek daha kullanıcı dostu uygulamalar geliştireceğiz.

SAP annotasyonları, SAP tarafından yaratılan CDS annotasyonlarıdır. İki grup SAP annotasyonu vardır: ABAP annotasyonları ve framework-specific annotasyonlar (ABAP annotations and framework-specific annotations).
ABAP annotasyonları:
ABAP annotasyonları, bir CDS nesnesinin teknik ve anlamsal(semantic) özelliklerini tanımlar. CDS kaynak kodunda tanımlanan nesne etkinleştirildiğinde veya nesne ABAP çalışma zamanı (runtime) ortamında kullanıldığında değerlendirilirler. ABAP ek açıklamaları, bir CDS nesnesine erişen ABAP SQL deyimlerinin davranışını değiştirebilir.
Framework-specific annotasyonlar:
ODATA, UI, Analytics vb. gibi belirli yazılım bileşenleri için gerekli olan CDS nesnelerinin teknik ve anlamsal özelliklerini tanımlar. Bunlar, uygun bir API kullanılarak ilgili yazılım bileşenlerinin çerçeveleri tarafından değerlendirilir ve etkinleştirmeler ve ABAP çalışma zamanı ortamı ile ilgili değildir.
CDS View İçin Önemli ABAP Annotasyonları

// @AbapCatalog.dataMaintenance: #RESTRICTED
// @AbapCatalog.viewEnhancementCategory: [#NONE]
@AbapCatalog: {
dataMaintenance: #RESTRICTED,
viewEnhancementCategory: [#NONE]
}
@AccessControl.authorizationCheck: #NOT_REQUIRED
- @AbapCatalog.dataMaintenance: #RESTRICTED: Bu annotasyon, CDS görünümü için veri bakımının kısıtlandığını belirtir. Yani, kullanıcıların doğrudan bu görünüm üzerinden veri değiştirmesine veya eklemesine izin verilmez. Genellikle sadece okuma amaçlı (read-only) görünümler için kullanılır. Temelde bu görünümle veri bakımının kısıtlandığını belirtir.
- @AbapCatalog.viewEnhancementCategory: [#NONE]: Bu annotasyon, CDS görünümünün CDS uzantıları (extensions) kullanılarak nasıl genişletileceğini belirtir. #NONE değeri, bu görünümün herhangi bir uzantı kategorisine sahip olmadığını, yani genişletilemez olduğunu gösterir. Eğer [#NONE] yerine başka değerler olsaydı, görünümün hangi tür uzantılarla genişletilebileceğini tanımlardı.
- @AccessControl.authorizationCheck: #NOT_REQUIRED: Bu annotasyon, Open SQL’de örtülü (implicit) erişim kontrolünün açılıp kapatılmasını sağlar. #NOT_REQUIRED değeri, erişim kontrolünün gerekli olmadığını, yani bu görünümdeki verilere erişim için herhangi bir yetki kontrolünün yapılmayacağını belirtir. Diğer değerler (örneğin, #CHECK) yetki kontrollerini etkinleştirebilir.
- @ObjectModel.usageType.serviceQuality: #X, @ObjectModel.usageType.sizeCategory: #S, @ObjectModel.usageType.dataClass: #MIXED: Bu annotasyonlar, görünümün performansla ilgili özelliklerini belirtir.
- serviceQuality: Servis kalitesini belirtir (örneğin, X değeri yüksek performans anlamına gelebilir).
- sizeCategory: Veri miktarını belirtir (örneğin, S değeri küçük veri seti anlamına gelebilir).
- dataClass: Veri sınıfını belirtir (örneğin, MIXED değeri farklı veri türlerini içerdiği anlamına gelebilir). Bu annotasyonlar, sistemin görünümü nasıl optimize edeceğine dair ipuçları sağlar.
- @AbapCatalog.entityBuffer.definitionAllowed: false: Bu annotasyon, CDS görünümü entity’si için tablo belleklemenin (table buffering) etkinleştirilip devre dışı bırakılmasını sağlar. false değeri, tablo belleklemenin devre dışı olduğunu belirtir. Tablo bellekleme, sık erişilen verilerin bellekte saklanarak erişim hızını artırır. Bu annotasyon, performansı etkileyen önemli bir ayardır.
ABAP Annotations for View Elements

1. Miktar (Amount) için Semantikler:
- @Semantics.amount.currencyCode: ‘currency’
- Açıklama: Bu annotasyon, price adlı alanın bir miktar (amount) olduğunu ve bu miktarın hangi para biriminde (currency) olduğunu belirtmek için kullanılır.
- Nasıl Çalışır: CDS görünümünde bir price alanı varsa ve bu alan bir miktarı temsil ediyorsa, bu annotasyonu kullanarak price alanının para birimi bilgisinin currency adlı alanda bulunduğunu belirtirsiniz. Örneğin, bir ürünün fiyatı price alanında 100 olarak saklanıyorsa, bu fiyatın hangi para biriminde (örneğin, USD, EUR) olduğunu currency alanında belirtirsiniz.
- Önemi: Bu annotasyon, kullanıcı arayüzünde (örneğin, Fiori uygulamasında) fiyatın doğru para birimi sembolü ile görüntülenmesini sağlar. Ayrıca, para birimi dönüşümleri gibi işlemlerde de kullanılır.
2. Miktar (Quantity) için Semantikler:
- @Semantics.quantity.unitOfMeasure: ‘DistanceID’
- Açıklama: Bu annotasyon, distance adlı alanın bir miktar (quantity) olduğunu ve bu miktarın hangi ölçü birimi (unit of measure) ile ifade edildiğini belirtmek için kullanılır.
- Nasıl Çalışır: CDS görünümünde bir distance alanı varsa ve bu alan bir mesafeyi temsil ediyorsa, bu annotasyonu kullanarak distance alanının ölçü birimi bilgisinin DistanceID adlı alanda bulunduğunu belirtirsiniz. Örneğin, bir mesafenin uzunluğu distance alanında 5 olarak saklanıyorsa, bu mesafenin hangi birimde (örneğin, metre, kilometre) olduğunu DistanceID alanında belirtirsiniz.
- Önemi: Bu annotasyon, kullanıcı arayüzünde (örneğin, Fiori uygulamasında) mesafenin doğru ölçü birimi sembolü ile görüntülenmesini sağlar. Ayrıca, ölçü birimi dönüşümleri gibi işlemlerde de kullanılır.
Gruplandırılmış Ek Açıklamalar (Grouped Annotations)

Görüntüdeki annotasyonlar, CDS (Core Data Services) görünümlerinde kullanılan @ObjectModel annotasyonlarının farklı yazım şekillerini göstermektedir. Her iki yöntem de aynı sonucu verir, ancak yazım şekli farklıdır.
- Bireysel Annotasyonlar (Individual Annotations):
@ObjectModel.usageType.serviceQuality: #X
@ObjectModel.usageType.sizeCategory: #S
@ObjectModel.usageType.dataClass: #MIXED
Bu yöntemde, her bir annotasyon ayrı bir satırda ve tamamen belirtilmiştir.
- @ObjectModel.usageType.serviceQuality: #X: Bu, servis kalitesini belirtir. #X değeri genellikle yüksek performans veya kritik bir hizmet anlamına gelir.
- @ObjectModel.usageType.sizeCategory: #S: Bu, veri setinin boyutunu belirtir. #S değeri genellikle küçük bir veri seti anlamına gelir.
- @ObjectModel.usageType.dataClass: #MIXED: Bu, veri sınıfını belirtir. #MIXED değeri, farklı veri türlerini içerdiği anlamına gelir.
2. Gruplanmış Alt Annotasyonlar (Grouped Sub-Annotations):
@ObjectModel:{
usageType:{
serviceQuality: #X,
sizeCategory: #S,
dataClass: #MIXED
}
}
Bu yöntemde, aynı üst kategoriye ait annotasyonlar (bu örnekte @ObjectModel) gruplanmıştır. Bu, kodun daha düzenli ve okunabilir olmasını sağlar.
- @ObjectModel:{ … }: Bu, @ObjectModel annotasyonunun bir grup olduğunu belirtir.
- usageType:{ … }: Bu, @ObjectModel annotasyonunun altında bir usageType alt grubu olduğunu belirtir.
- serviceQuality: #X, sizeCategory: #S, dataClass: #MIXED: Bu, usageType alt grubunun içindeki bireysel annotasyonlardır.
Farklar ve Benzerlikler:
İşlevsellik: Her iki yöntem de aynı işlevselliği sağlar. Yani, @ObjectModel ile ilgili aynı meta verileri tanımlarlar.
Okunabilirlik: Gruplanmış alt annotasyonlar, özellikle çok sayıda annotasyon olduğunda, kodun daha düzenli ve okunabilir olmasını sağlayabilir.
Yazım: Bireysel annotasyonlar her bir annotasyonu ayrı ayrı belirtirken, gruplanmış alt annotasyonlar aynı üst kategoriye ait annotasyonları bir araya getirir.
ABAP Annotations for Translatable Texts (Çevrilebilir Metinler için ABAP Annotasyonları)

1. View Annotation (Görünüm Annotasyonu):
@EndUserText.label: ‘Employee’
- Açıklama: Bu annotasyon, CDS görünümünün kendisi için kullanıcı arayüzünde (UI) görüntülenecek bir etiket (label) tanımlar. Bu etiket, genellikle görünümün adını veya kısa bir açıklamasını içerir.
- Karakter Sınırı: Bu etiketin uzunluğu en fazla 60 karakter olabilir.
2. Element Annotations (Eleman Annotasyonları):
@EndUserText.label: ‘Date of Birth’
@EndUserText.quickInfo: ‘Date of birth of this employee’
- Açıklama: Bu annotasyonlar, CDS görünümündeki belirli bir eleman (alan) için kullanıcı arayüzünde görüntülenecek etiketleri ve kısa açıklamaları tanımlar.
@EndUserText.label: Elemanın kullanıcı arayüzünde görüntülenecek etiketini tanımlar. Bu etiket, genellikle alanın adını veya kısa bir açıklamasını içerir.
@EndUserText.quickInfo: Eleman hakkında daha detaylı bilgi sağlayan kısa bir açıklama tanımlar. Bu açıklama, genellikle mouse imleci alanın üzerine getirildiğinde görüntülenir (tooltip gibi).
- Karakter Sınırı: @EndUserText.label için etiket uzunluğu en fazla 60 karakter olabilir.
- Değişken Uzunluk (String): @EndUserText.quickInfo için açıklama (string) değişken uzunlukta olabilir, ancak pratikte çok uzun açıklamalar kullanıcı arayüzünde iyi görünmeyebilir.
Önemli Notlar:
- Çevrilebilirlik: @EndUserText annotasyonları ile tanımlanan etiketler ve açıklamalar, SAP’nin çeviri mekanizmaları kullanılarak farklı dillere çevrilebilir. Bu sayede, kullanıcılar kendi dillerinde etiketleri ve açıklamaları görebilirler.
- UI Entegrasyonu: Bu annotasyonlar, Fiori uygulamaları gibi SAP kullanıcı arayüzü teknolojileri ile entegre edilmiştir. Bu sayede, etiketler ve açıklamalar otomatik olarak kullanıcı arayüzünde görüntülenir.
- Standartlar: @EndUserText.label ve @EndUserText.quickInfo gibi standart annotasyonlar, SAP tarafından tanımlanmış ve kullanıcı arayüzü geliştirme sürecini kolaylaştırmak için tasarlanmıştır.
Active Annotations View (Aktif Annotasyon Görünümü)

Aktif olan annotasyonları görmek için aşağıdaki adımları izleyiniz.
- CDS View’de herhangi bir yere sağ tıklayınız.
- Open With seçeneğinin üzerine geliniz.
- Açılan yan panelden Active Annotations seçeneğini seçiniz.

Bir konunun daha sonuna gelmiş bulunmaktayız. SAP ABAP ve RAP dünyasına dair daha çok bilgilenmek için beni Medium’dan ve linkedinden takip etmeyi unutmayınız.
