Emre Göçmen Blog

SAP OData Servislerini Oluşturma ve Yönetme

5 dk. okuma
1616 görüntülenme
0 yorum

Emre Göçmen

Yazar

SAP OData Servislerini Oluşturma ve Yönetme

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

0

Yorum yapmak için giriş yapmalısınız.

Henüz yorum bulunmamaktadır.

İlk yorumu yapan siz olun.

Emre Göçmen

Yazar & Geliştirici

SAP ABAP & Full Stack geliştirici olarak deneyimlerim, becerilerim ve kariyer yolculuğum hakkında blog yazılarım.

Kategori

SAP

SAP

Yazılardan Haberdar Olun

Yeni yazılardan ilk siz haberdar olmak için e-posta bültenime abone olun.