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 |
POST | Kaydetme |
PUT/MERGE | Güncelleme |
DELETE | Silme |
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.

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.



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.


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.

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

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


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

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


Bir yanıt yazın