SAP ile farklı bir platform arasında iletişim sağlamak için WSDL standartlarında protokoller aracılığıyla hedeflenen veri formatına göre uyarlanmasına ihtiyaç duyulabilir.
Daha basit bir dille anlatmak gerekirse, İstediğiniz bir veri kümesini SAP içerisine aktarmak veya SAP bünyesindeki verilerinizi kullanarak farklı formatta çeşitli fonksiyonların sonuçlarıyla yeni bir veri kümesi üretmek gibi işlemler için dış kaynaklardan sunulan servisler için SAP içerisinde bazı uyarlamalar yapılması gerekmektedir.
Bu servisler bir url aracılığı veya wsdl uzantılı xml şeması barındıran yapılar olabilir. SAP içerisinde Enterprise Services aracılığı ile SOAMANAGER üzerinden servisin tanımlanması sonrasında ABAP geliştirmesi ile servis sonucuna erişmek mümkündür. Bu konuda kısa bir demo ile aşağıda görebileceğiniz adımları uygulayarak istenilen bir wsdl servise erişebilirsiniz.
İlk olarak SE80 transaction’ı üzerinden Enterprise Services oluşturarak başlıyoruz.
Object Type olarak dış kaynaktan bir servise bağlanacağımız için Service Consumer seçeneği ile ileriyoruz.
Generation/Source altında External WSDL/Scheme seçeneği ile bağlanacağımız servis kaynağını belirliyoruz.

Bağlanmak istediğiniz servise ait wsdl dosyası bulunuyorsa, local file seçeneği ile dosyayı seçebilirsiniz ancak servis için url bağlantısına sahipseniz URL seçeneği ile ilerleyebiliriz. Bu örnek için basit bir hesap makinası formatını içeren 2 tane integer parametre alan ve 4 işlem fonksiyonlarına sahip bir wsdl servis kullanıyorum. Deneme için sizde bu servisi kullanabilirsiniz… Servis adresine erişmek için tıklayınız…


Son olarak uygulamanızı barındıracağınız Paket adı / Request bilgilerini giridikten sonra servis sınıflarınızın oluştuğunu görebilirsiniz.

Servis sınıfı oluşturulduktan sonra aktifleştirdikten sonra web service configuration işlemleri için SOAMANAGER üzerinden devam ediyoruz.


SOAMANAGER üzerinden Web Service Configuration Seçeneği ile servisin SAP ile bağlantısı için gerekli proxy uyarlamalarının yapılmasını sağlıyoruz. Arama kısmında Consumer Proxy seçeneği ile Enterprise Services altında oluşturduğumuz Servis Adını kullanarak service consumer yapısını görebiliriz.


Internal Name altında çıkan servis adına tıklayarak konfigürasyon işlemlerini yapacağımız alana giriyoruz. Burada WSDL Based Configuration yapacağımız için Create ile bu seçenek üzerinden ilerledikten sonra ilk olarak Logical Port adını belirliyoruz.


WSDL bilgilerini gireceğimiz 2. adımda, Enterprise Services oluşturulma aşamasında olduğu gibi, eğer servis url adresiniz varsa, Via HTTP Access, wsdl dökümanına sahipseniz, WSDL from upload seçeneği ile ilgili dosyayı yükleyerek ilerliyoruz.

4-5-6-7 aşamalarına next ile ilerledikten sonra finish seçeneği ile wsdl servisin proxy uyarlamasını tamamlıyoruz. Bu aşamadan sonra servisi ABAP programı aracılığı ile test edebiliriz.
ABAP ile oluşturduğumuz bir program aracılığı ile ilk olarak Enterprise Services altında oluşturduğumuz servis sınıfından bir instance alıyoruz. Bu service ait INPUT/OUTPUT yapılarına uygun data tipleri ile oluşturduğumuz service instance’ının bize sunduğu metodları çağırıyoruz. INPUT değerlerini belirttikten sonra OUTPUT üzerinden ilgili metodun sonucuna erişebiliyor olacağız.
Örnek olarak verdiğim servis içerisinde INPUT structure içerisine 2 integer değer alıyor. Bu değerleri Toplama/Çıkarma/Bölme/Çarpma metodlarını kullanarak OUTPUT çıktısını bize sunuyor.
REPORT ZDEMO_1. DATA : LR_PROXY TYPE REF TO ZPREFIXCO_CALCULATOR_SOAP, INPUT TYPE ZPREFIXADD_SOAP_IN, OUTPUT TYPE ZPREFIXADD_SOAP_OUT. INPUT-INT_A = 10. INPUT-INT_B = 5. CREATE OBJECT LR_PROXY EXPORTING LOGICAL_PORT_NAME = 'ZPORT1'. CALL METHOD LR_PROXY->ADD EXPORTING INPUT = INPUT IMPORTING OUTPUT = OUTPUT. DATA(LV_ADD) = 'ADD METHOD => ' && OUTPUT-ADD_RESULT. CLEAR OUTPUT. CALL METHOD LR_PROXY->DIVIDE EXPORTING INPUT = INPUT IMPORTING OUTPUT = OUTPUT. DATA(LV_DIVIDE) = 'DIVIDE METHOD => ' && OUTPUT-ADD_RESULT. CLEAR OUTPUT. CALL METHOD LR_PROXY->SUBTRACT EXPORTING INPUT = INPUT IMPORTING OUTPUT = OUTPUT. DATA(LV_SUBSTRACT) = 'SUBTRACT METHOD => ' && OUTPUT-ADD_RESULT. CLEAR OUTPUT. CALL METHOD LR_PROXY->MULTIPLY EXPORTING INPUT = INPUT IMPORTING OUTPUT = OUTPUT. DATA(LV_MULTIPLY) = 'MULTIPLY METHOD => ' && OUTPUT-ADD_RESULT. WRITE /: LV_ADD. WRITE /: LV_DIVIDE. WRITE /: LV_SUBSTRACT. WRITE /: LV_MULTIPLY.
Programın çıktısı aşağıdaki gibidir.
