OData: Entity oluşturma ve fonksiyon implementasyonu

OData

OData, sunucu(server) ve istemci(client) arasında HTTP protokülü kullanarak veri alış verişi yapmamızı sağlayan, standart haline gelmiş bir RESTful servis yöntemidir. Olaya biraz daha SAP ekosistemi içerisinde bakacak olursak; bu yöntem modüllerimiz altında ihtiyaç duyduğumuz kayıt, raporlama, çıktı, iş akışı, vb. tüm işlemlerin özellikle web ve mobil gibi dış kaynaklara erişimi için güvenli ve kolay bir yol sağlar.

OData yapısı her REST servis gibi temel olarak varlıklar(entity), bu varlıkların özellikleri(property) ve bu varlıklara bağlı metotlar üzerine inşa edilmiştir. OData’yı bir market, içerisindeki manav, şarküteri gibi farklı reyonları varlık olarak düşünebiliriz. Entity üzerinde işlemler, farklı HTTP istek(request) tipleri kullanılarak anlamlandırılır.

İstekİşlem
GET
Listeleme/görüntüleme
POSTKaydetme
PUT/MERGEGüncelleme
DELETESilme

Söz dizimi olarak OData okunaklı ve anlaması kolay bir yapı sunar. Varlıklar arasında ilişkilendirme sayesinde, varlıkları hiyerarşik olarak yönetebilmemizi ve erişebilmemizi sağlar.

SAP üzerinde OData oluşturmaya başlamadan önce ihtiyaç duyulan senaryoyu veri tekrarı oluşmasını engelleyecek ya da en az seviyeye indirecek şekilde küçük varlıklara ayırmayı ve birbirleri arası ilişkilendirmeleri (mümkünse kağıt üzerinde) tasarlamanızı tavsiye ederim. Geliştirme aşamasında faydasını göreceksiniz. OData servisleri SEGW tcode altında geliştirilir.

Malzeme verilerini listeleyebileceğimiz küçük bir örnek yapalım. Create Project ile açılan pencerede servis ismini ve açıklamasını giriyoruz.

OData Create Project
OData Create Project

Entity, tek tek property ekleyerek ya da SAP üzerindeki herhangi bir structure, tablo(DDIC), search help, Business Object veya RFC referans gösterilerek de oluşturulabilir. Parametrelerindeki her yapıyı alanlarıyla birlikte gösterebildiğinden tavsiyem RFC referansıdır. Böylece fonksiyona structure/tablo eklediğimizde veya yapılarda değişiklik yaptığımızda bunu kolayca entitymize yansıtma imkanımız oluyor.

Entity oluşturmadan önce ihtiyacımıza yönelik structure ve fonksiyonu hazırlıyoruz. Fonksiyonun Remote-Enabled Module olması önemli.

Material Structure
Material Structure
Function Attributes
Function Attributes
Function Tables
Function Tables
FUNCTION zobakirci_get_material_list.
*"----------------------------------------------------------------------
*"*"Local Interface:
*"  TABLES
*"      ET_MATERIAL STRUCTURE  ZOBAKIRCI_S_MATERIAL OPTIONAL
*"----------------------------------------------------------------------


  SELECT mara~matnr  AS material_nr,
         mara~mtart  AS material_type,
         mara~matkl  AS material_group,
         mara~meins  AS material_unit,
         mara~groes  AS material_size,
         makt~maktx  AS material_desc,
         t134t~mtbez AS material_type_desc,
         t023t~wgbez AS material_group_desc,
         t006a~mseh6 AS material_unit_desc
    FROM mara
    LEFT OUTER JOIN makt  ON makt~matnr  EQ mara~matnr AND makt~spras  EQ @sy-langu
    LEFT OUTER JOIN t134t ON t134t~mtart EQ mara~mtart AND t134t~spras EQ @sy-langu
    LEFT OUTER JOIN t023t ON t023t~matkl EQ mara~matkl AND t023t~spras EQ @sy-langu
    LEFT OUTER JOIN t006a ON t006a~msehi EQ mara~meins AND t006a~spras EQ @sy-langu
    INTO CORRESPONDING FIELDS OF TABLE @et_material
   ORDER BY material_nr ASCENDING.


ENDFUNCTION.

Fonksiyonu hazırladıktan sonra tekrar servis oluşturma ekranına dönüp Entity oluşturuyoruz.

Data Model Import
Data Model Import
Create Entity Wizard 1/3
Create Entity Wizard 1/3

Eklemek istediğimiz özellikleri soldaki menüden seçiyoruz. Bu adımda Assign Structure kutucuğundaki tıkı kaldırın aksi takdirde kaldırmazsak Entity ismi olarak değişkenin ismini veriyor(EtMaterial) ve değiştirmemizi engelliyor.

Create Entity Wizard 2/3
Create Entity Wizard 2/3

En az bir anahtar(key) alan seçmek zorundayız.

Create Entity Wizard 3/3
Create Entity Wizard 3/3

Her entitynin temel olarak beş metoda sahip olduğunu söylemiştik. Şimdi listeleme metodunu(Query) uyguluyoruz.

Data Source Mapping 1/3
Data Source Mapping 1/3
Data Source Mapping 2/3
Data Source Mapping 2/3

Propose Mapping özelliğini kullanarak Entity ile ET_MATERIAL alanlarını otomatik eşliyoruz. Son olarak Generate butonuyla servisi kullanılır hale getiriyoruz.

Data Source Mapping 3/3
Data Source Mapping 3/3

Oluşturduğumuz servisi /IWFND/GW_CLIENT tcode ile açılan Gateway Client ekranını kullanarak test edebiliriz.

Gateway Client
Gateway Client
Gateway Client: MaterialSet
Gateway Client: MaterialSet

Comments

“OData: Entity oluşturma ve fonksiyon implementasyonu” için 3 yanıt

  1. isa avatarı
    isa

    Merhaba,
    “check the icf nodes in tx sicf at least one node is inactive ” hatası almadınız mı?

    1. İbrahim Ömer Bakırcı avatarı

      Selam İsa,

      SICF işlem koduyla sap > opu > odata ve altındaki düğümlerin aktifliğini kontrol edebilirsin.

  2. firdevs avatarı
    firdevs

    Merhaba deep entity hakkında örnek paylaşabilir misiniz.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir