SAP OData Servislerini Oluşturma ve Yönetme
Emre Göçmen
Yazar

SAP ABAP Geliştiricileri için OData Servisi Oluşturma ve Yönetme Rehberi
Bu kapsamlı makalede, SAP ABAP geliştiricilerinin SAP OData servislerini nasıl etkili bir şekilde oluşturup yönetebileceklerini adım adım bir kılavuz olarak sunacağım. Modern kurumsal uygulamalarda, OData servisleri SAP verilerine standart ve güvenli bir şekilde erişim sağlamada kritik bir rol oynamaktadır. Sonraki makalelerde detaylı uygulama örneklerine ve ileri düzey senaryolara yer vereceğim.
OData Protokolü: SAP Entegrasyonlarında Neden Önemli?
OData (Open Data Protocol), HTTP tabanlı, RESTful bir protokol olup, veri kaynaklarının sorgulanması ve manipülasyonu için standart bir yöntem sunar. SAP sistemlerinde OData'nın benimsenmesi, aşağıdaki avantajları sağlamaktadır:
- Standartlaşmış veri erişimi ve manipülasyonu
- Fiori uygulamaları, mobil uygulamalar ve üçüncü taraf çözümlerle kolay entegrasyon
- SAPUI5/Fiori uygulamalarıyla doğal uyumluluk
- SAP sistemi dışındaki uygulamalarla veri alışverişinde tutarlı bir yaklaşım
- Gelişmiş sorgulama, filtreleme ve veri manipülasyon özellikleri
OData Servisi Oluşturma Aşamaları
1. Veri Kaynağını Seçme ve Analiz
OData servisi oluşturmak için ilk adım, doğru veri kaynağının seçilmesidir. Bu aşamada dikkat edilmesi gereken hususlar:
Veri Kaynağı Seçenekleri:
- SAP Tabloları: Doğrudan tablo verilerine erişim için (örn. MARA, VBAK, KNA1)
- CDS Görünümleri: Complex Data Services görünümleri, verilerin analitik ve işlevsel olarak hazırlanmış hali
- Fonksiyon Modülleri: RFC ile çağrılabilen fonksiyon modülleri üzerinden veri erişimi
- BAPI'ler: Business API'ler üzerinden iş süreçlerine erişim
Veri Kaynağı Analizi:
- Veri hacmi ve performans gereksinimleri
- İlişkisel veri yapısı ve bağlantılar
- Veri güvenliği ve hassasiyet düzeyi
- Okuma/Yazma gereksinimleri (salt okunur veya değiştirilebilir veri)
En iyi uygulama olarak, özellikle büyük veri hacimleri için doğrudan tablolar yerine CDS görünümlerinin kullanılması önerilmektedir. CDS görünümleri, verileri ön işleme tabi tutarak performans optimizasyonu sağlar ve karmaşık veri ilişkilerini yönetmeyi kolaylaştırır.
// Örnek CDS Görünüm Tanımı
@AbapCatalog.sqlViewName: 'ZMATERIAL_VIEW'
@AbapCatalog.compiler.compareFilter: true
@AccessControl.authorizationCheck: #CHECK
@EndUserText.label: 'Material Data for OData Service'
define view ZI_Material_CDS as select from mara as Material
left outer join marc as Plant on Material.matnr = Plant.matnr
{
key Material.matnr as MaterialNumber,
Material.mtart as MaterialType,
Material.matkl as MaterialGroup,
Material.meins as BaseUnitOfMeasure,
Plant.werks as Plant,
Plant.lgort as StorageLocation
}
where Material.mtart = 'FERT';
2. Veri Modeli, Sağlayıcı ve Varlık Kümesi Tanımlama
OData servisi için veri modelini tanımlamak, servisin yapı taşlarını oluşturur. Bu aşamada şu adımlar izlenir:
Veri Modeli Oluşturma:
- Varlık Tipleri (Entity Types): Veri nesnelerinin yapısını tanımlar (örn. Malzeme, Müşteri)
- İlişkiler (Associations): Varlıklar arasındaki bağlantılar (örn. Müşteri-Sipariş ilişkisi)
- Karmaşık Tipler (Complex Types): Bileşik veri yapıları
Varlık Kümesi Tanımlama:
- Varlık kümeleri (Entity Sets), OData servisindeki koleksiyonları temsil eder
- Her varlık kümesi için CRUD (Create, Read, Update, Delete) işlemlerinin hangilerine izin verileceği belirlenir
- Varlık kümeleri arasındaki gezinme yolları (Navigation) tanımlanır
SAP Gateway Builder (Transaction SEGW) aracılığıyla bu tanımlamaları yapabilir veya CDS tabanlı yaklaşım ile doğrudan veri modeli oluşturabilirsiniz.
// Gateway Service Builder'da Varlık Kümesi Tanımlama Örneği
DATA: lo_entity_type TYPE REF TO /iwbep/if_mgw_odata_entity_typ.
DATA: lo_entity_set TYPE REF TO /iwbep/if_mgw_odata_entity_set.
lo_entity_type = mo_model->create_entity_type( 'Material' ).
lo_entity_type->create_property( 'MaterialNumber' )->set_is_key( ).
lo_entity_type->create_property( 'MaterialType' ).
lo_entity_type->create_property( 'MaterialGroup' ).
lo_entity_type->create_property( 'BaseUnitOfMeasure' ).
lo_entity_set = mo_model->create_entity_set( 'MaterialSet' ).
lo_entity_set->set_entity_type( lo_entity_type ).
3. Sorgu Seçeneklerini ve Operasyonları Belirleme
OData servisi, çeşitli sorgulama ve manipülasyon özellikleri sunar. Bu aşamada, kullanıcıların hangi sorgu seçeneklerini kullanabileceğini ve hangi operasyonları gerçekleştirebileceğini tanımlarsınız.
Sorgu Seçenekleri:
- $filter: Veri filtreleme (örn. MaterialType eq 'FERT')
- $select: Belirli alanları seçme (örn. $select=MaterialNumber,MaterialType)
- $expand: İlişkili varlıkları getirme (örn. $expand=Plants)
- $orderby: Sıralama (örn. $orderby=MaterialNumber desc)
- $top/$skip: Sayfalama için kullanılır
- $count: Toplam kayıt sayısını döndürme
Operasyonlar:
- Fonksiyonlar: Salt okunur işlemler (örn. GetMaterialStock)
- Aksiyonlar: Veri değiştiren işlemler (örn. CreatePurchaseOrder)
- Varlık İşlemleri: Standart CRUD operasyonları
// Özel Fonksiyon Tanımlama Örneği
DATA: lo_function TYPE REF TO /iwbep/if_mgw_odata_function.
lo_function = mo_model->create_function( 'GetMaterialStock' ).
lo_function->create_parameter( 'MaterialNumber' )->set_type_edm_string( ).
lo_function->create_parameter( 'Plant' )->set_type_edm_string( ).
lo_function->create_result_structure( 'StockData' ).
OData Servisi Uygulaması
1. Servis İmplementasyonu
Veri modeli tanımlandıktan sonra, OData servisinin davranışını uygulama aşamasına geçilir. Bu aşamada, aşağıdaki bileşenler geliştirilir:
Veri Sağlayıcı Sınıfı (DPC - Data Provider Class):
- Verileri almak ve işlemek için gerekli kod
- CRUD operasyonlarının uygulanması
- Özel fonksiyon ve aksiyonların gerçekleştirilmesi
// Get_Entity Metodu İmplementasyonu Örneği
METHOD /iwbep/if_mgw_appl_srv_runtime~get_entity.
DATA: lv_material_number TYPE matnr,
ls_material TYPE zcl_material_mpc=>ts_material.
" Anahtar alanı al
io_tech_request_context->get_converted_keys(
IMPORTING es_key_values = ls_material ).
lv_material_number = ls_material-materialnumber.
" Malzeme verilerini getir
SELECT SINGLE matnr, mtart, matkl, meins
FROM mara
INTO CORRESPONDING FIELDS OF ls_material
WHERE matnr = lv_material_number.
" Sonucu döndür
copy_data_to_ref(
EXPORTING is_data = ls_material
CHANGING cr_data = er_entity ).
ENDMETHOD.
Veri Modeli Sınıfı (MPC - Model Provider Class):
- Metaverinin tanımlanması
- Varlık tipleri ve ilişkilerin teknik tanımları
2. Veri Erişim Kontrolleri ve Yetkilendirme
OData servislerinin güvenliği, başarılı bir implementasyonun kritik bir bileşenidir. Sağlam bir yetkilendirme mekanizması şunları içermelidir:
SAP Yetkilendirme Nesneleri:
- Servis seviyesinde yetkilendirme (S_SERVICE yetkilendirme nesnesi)
- Veri seviyesinde yetkilendirme (özel yetkilendirme nesneleri)
Yetkilendirme Kontrolü İmplementasyonu:
- Servis metotlarında yetki kontrolü
- CDS görünümlerinde veri erişim kontrolü (@AccessControl.authorizationCheck)
- Veri okuma ve değiştirme işlemleri için ayrı yetkiler
// Yetkilendirme Kontrolü Örneği
METHOD check_authority.
DATA: ls_auth TYPE zsap_material_auth.
ls_auth-actvt = '03'. " Display yetki kontrolü
ls_auth-matgr = iv_material_group.
CALL FUNCTION 'AUTHORITY_CHECK_TCODE'
EXPORTING
tcode = 'Z_MATERIAL_DATA'
EXCEPTIONS
user_invalid = 1
OTHERS = 2.
IF sy-subrc <> 0.
RAISE EXCEPTION TYPE /iwbep/cx_mgw_busi_exception
EXPORTING
textid = /iwbep/cx_mgw_busi_exception=>authorization_failure.
ENDIF.
AUTHORITY-CHECK OBJECT 'Z_MAT_AUTH'
ID 'ACTVT' FIELD ls_auth-actvt
ID 'MATGR' FIELD ls_auth-matgr.
IF sy-subrc <> 0.
RAISE EXCEPTION TYPE /iwbep/cx_mgw_busi_exception
EXPORTING
textid = /iwbep/cx_mgw_busi_exception=>authorization_failure.
ENDIF.
ENDMETHOD.
3. Hata Yönetimi ve Loglama
Sağlam bir OData servisi, kapsamlı hata yönetimi ve loglama mekanizmalarına sahip olmalıdır:
Hata Yönetimi:
- Özel hata kodları ve mesajları
- İş mantığı hataları için yapılandırılmış yanıtlar
- Teknik hataların uygun şekilde ele alınması
Loglama Stratejisi:
- Servis çağrılarının loglanması
- Hata durumlarının detaylı kaydı
- Performans metriklerinin izlenmesi
// Hata Fırlatma ve Loglama Örneği
METHOD handle_material_not_found.
DATA: lo_message_container TYPE REF TO /iwbep/if_message_container,
lo_exception TYPE REF TO /iwbep/cx_mgw_busi_exception.
" Log oluştur
/iwbep/cl_sb_gen_dpc_rt_util=>log_message(
EXPORTING
iv_msg_type = 'E'
iv_msg_id = 'Z_MATERIAL'
iv_msg_number = '001'
iv_msg_v1 = iv_material_number
iv_entity_type= 'Material' ).
" Hata oluştur ve fırlat
lo_message_container = mo_context->get_message_container( ).
lo_message_container->add_message(
EXPORTING
iv_msg_type = 'E'
iv_msg_id = 'Z_MATERIAL'
iv_msg_number = '001'
iv_msg_v1 = iv_material_number ).
RAISE EXCEPTION TYPE /iwbep/cx_mgw_busi_exception
EXPORTING
message_container = lo_message_container.
ENDMETHOD.
Performans Optimizasyonu ve En İyi Uygulamalar
1. Performans Optimizasyonu Teknikleri
OData servislerinin performansı, kullanıcı deneyimini doğrudan etkiler. Aşağıdaki teknikler, yüksek performanslı OData servisleri geliştirmenize yardımcı olur:
Veri Erişimi Optimizasyonu:
- Seçici veri getirme (sadece ihtiyaç duyulan alanlar)
- Sayfalama ve kademeli yükleme teknikleri
- Etkin SQL sorguları ve indeksleme
- CDS görünümlerinde analitik optimizasyonlar (@Analytics.dataExtraction)
Önbellek Stratejileri:
- Etag kullanımı ile istemci önbelleği
- SAP Gateway önbelleği
- Sık kullanılan ve az değişen veriler için uygulama düzeyinde önbellekleme
// ETag Uygulaması Örneği
METHOD /iwbep/if_mgw_appl_srv_runtime~get_entity.
" ... Diğer kod
" ETag oluştur (örn. son değişiklik tarihine göre)
lv_etag = |{ ls_material-last_changed_date }{ ls_material-last_changed_time }|.
" ETag'i ayarla
io_tech_request_context->set_etag_response( lv_etag ).
" ... Diğer kod
ENDMETHOD.
2. Delta Sorgu Desteği
Büyük veri setleri için, delta sorgulama mekanizması önemli bir performans avantajı sağlar. Bu, yalnızca son sorgulama işleminden bu yana değişen verilerin alınmasını sağlar.
// Delta Token Uygulaması
METHOD /iwbep/if_mgw_appl_srv_runtime~get_entityset.
DATA: lv_delta_token TYPE string,
lt_delta_key TYPE STANDARD TABLE OF /iwbep/s_mgw_delta_key.
" Delta token'ı kontrol et
io_tech_request_context->get_delta_token(
IMPORTING
ev_delta_token = lv_delta_token ).
IF lv_delta_token IS NOT INITIAL.
" Delta verilerini getir (son değişiklik tarihine göre)
" ...
" Yeni delta token oluştur
lv_new_token = |{ sy-datum }{ sy-uzeit }|.
io_tech_request_context->set_delta_token_response( lv_new_token ).
ELSE.
" Tüm verileri getir
" ...
ENDIF.
ENDMETHOD.
3. Büyük Veri Hacmi Yönetimi
Büyük veri hacimleriyle çalışırken, aşağıdaki tekniklerin kullanılması önerilir:
- Sunucu taraflı sayfalama ($top ve $skip yerine)
- Veri akışı (Streaming) teknikleri
- Sorgu optimizasyonu (WHERE koşullarının etkin kullanımı)
- Paralel işleme teknikleri
OData Servisinin Test Edilmesi ve Dağıtımı
1. Test Stratejisi
Kapsamlı bir test stratejisi, OData servislerinizin güvenilirliğini sağlar:
Birim Testleri:
- Her bir CRUD operasyonunun testi
- Özel fonksiyon ve aksiyonların testi
- Hata durumlarının testi
Entegrasyon Testleri:
- Farklı istemcilerle test (SAP UI5, mobil uygulamalar, üçüncü taraf sistemler)
- Yetkilendirme ve güvenlik testleri
- Performans ve yük testleri
Test Araçları:
- SAP Gateway Client (Transaction /IWFND/GW_CLIENT)
- Postman gibi API test araçları
- Otomatize test scriptleri (ABAP Unit)
2. Dağıtım ve Bakım
OData servislerinin dağıtımı ve sonraki bakımı için aşağıdaki adımlar izlenmelidir:
Dağıtım İşlemleri:
- Servis kayıt ve aktivasyonu (Transaction /IWFND/MAINT_SERVICE)
- Taşıma ve sürüm yönetimi stratejisi
- Dokümantasyon ve kullanım rehberleri
İzleme ve Bakım:
- Servis performansının izlenmesi (Transaction /IWFND/TRACES)
- Kullanım istatistiklerinin analizi
- Düzenli optimizasyon ve güncelleme planı
Gerçek Dünya Uygulamaları ve Kullanım Senaryoları
OData servisleri, çeşitli kurumsal senaryolarda kullanılabilir:
Fiori Uygulamaları:
- Kullanıcı dostu arayüzlerle SAP verilerine erişim
- Mobil-öncelikli iş süreçleri
- Analitik ve raporlama uygulamaları
Sistem Entegrasyonları:
- Üçüncü taraf uygulamalarla SAP veri entegrasyonu
- IoT (Nesnelerin İnterneti) cihazlarıyla veri alışverişi
- Hibrit bulut senaryoları
İş Süreci İnovasyonları:
- Dijital dönüşüm projeleri
- Mobil iş akışları
- Müşteri ve tedarikçi portalları
Sonuç ve İleri Adımlar
SAP OData servisleri, modern entegrasyon senaryoları ve kullanıcı deneyimi için vazgeçilmez bir teknoloji haline gelmiştir. Bu makalede sunulan kapsamlı rehber, ABAP geliştiricilerin güvenli, performanslı ve ölçeklenebilir OData servisleri oluşturmasına yardımcı olacaktır.
İlerleyen makalelerimde, aşağıdaki konulara daha derinlemesine odaklanacağım:
- İleri düzey OData özellikleri ve OData V4 implementasyonu
- OData ve SAP Fiori entegrasyon senaryoları
- Büyük veri hacimleri için optimizasyon teknikleri
- OData servisleri için güvenlik en iyi uygulamaları
- Somut örnek projeler ve gerçek dünya uygulamaları
OData servisleri, SAP sistemlerinizi modern dijital dünyaya açmanın en etkili yollarından biridir. Doğru tasarlanmış ve uygulanmış OData servisleri, işletmenize çeviklik, verimlilik ve yenilikçi iş süreçleri kazandırabilir.
Sorularınız veya katkılarınız için yorum bölümünü kullanabilir veya doğrudan benimle iletişime geçebilirsiniz.
Bu makale, SAP ABAP geliştiricilerine yönelik olarak hazırlanmış olup, en güncel SAP teknolojileri ve en iyi uygulamalar dikkate alınarak oluşturulmuştur. Makaledeki kod örnekleri ve teknikler, gerçek projelerden uyarlanmıştır ve üretim sistemlerine uygulanmadan önce kapsamlı test edilmelidir.
Yorumlar
Henüz yorum bulunmamaktadır.
İlk yorumu yapan siz olun.



