SAP'de Web Service Kullanımı

Web Service, RFC

Herkese merhaba!

Bu yazımda, oluşturduğum bir fonksiyonu RFC’ye bağlayarak temel düzeyde bir web servisin çalışma mantığını ve örnek senaryoda işleyişini göstereceğim. Web servisler, SAP’yi farklı bir sisteme bağlamak ve dışardan veri akışı sağlamak için kullanılan bir yöntemdir.

RFC

Ürün Stok Kontrolü Uygulaması

İlk olarak bir senaryo belirlemekle başlıyorum. Bir market zincirinin SAP sistemler kullanarak ürün stok yönetimi yaptığını varsayalım. Bu şirket SAP’de bir tabloya, stoğa yeni eklenen ürünlerin kaydını atsın. Aynı malzeme numarasına sahip ürünlerin adet sayısı artarken, her yeni eklenen ürün için yeni bir satır eklensin. Ürün bilgisini de müşterinin düzenli olarak güncellediği bir bakım tablosundan alsın.

pseudo

İlk olarak kullanacağımız tabloları oluşturalım. Ürün bilgilerinin tutulacağı bakım tablomuzda hangi bilgileri istiyorsak, o alanları ekleyelim. Ben bu aşamada sadece Ürün Kodu ve Ürün Adı ekliyorum.

Product List

Oluşturduğum bakım tablosunu T-Code’a bağladım ve kolayca eklemek istediğim ürün bilgilerini ekledim:

Product List İşlem Kodu

Şimdi de stok bilgisini tutup, web service ile güncelleyeceğimiz tabloyu oluşturalım:

Stock Check Table

Tablolarımızı tamamladıktan sonra RFC bağlamak için bir fonksiyon modülü oluşturmalıyız. Bunun için SE37 T-Code’una gidelim ve oluşturmak istediğimiz fonksiyonun adını yazarak başlayalım:

SE37 Screen

Oluşturduğumuz fonksiyon modülünün parametrelerini belirleyeceğiz. Benim senaryomda sadece ürün kodu girerek, ürün bilgisini bakım tablosundan aldıracağım için import parametresi olarak ürün kodunu ekliyorum. Requesti ilettikten sonra yapılan işlemin başarılı ya da başarısız olduğunu dönmesi için export parametrlerine de text parametreleri ekliyorum:

Import Parameter
Export Parameter

Kurduğum senaryoya göre fonksiyonun source kodunu aşağıdaki şekilde yazdım:

FUNCTION zsg_fm_product_stok.
*"----------------------------------------------------------------------
*"*"Local Interface:
*"  IMPORTING
*"     VALUE(IV_PRODUCT_CODE) TYPE  ZPRODUCT_CODE_DE
*"  EXPORTING
*"     VALUE(EV_SUCCESS) TYPE  XFELD
*"     VALUE(EV_MESSAGE) TYPE  BAPI_MSG
*"----------------------------------------------------------------------

  DATA: ls_stok    TYPE zsg_stok_check,
        ls_product TYPE zsg_product_list.

  ls_stok-product_code = iv_product_code.
  ls_stok-uname        = sy-uname.
  ls_stok-datum        = sy-datum.
  ls_stok-uzeit        = sy-uzeit.

  SELECT * FROM zsg_product_list
    WHERE product_code EQ @iv_product_code
      INTO CORRESPONDING FIELDS OF @ls_product.
  ENDSELECT.

  IF sy-subrc EQ 0.
    SELECT * FROM zsg_stok_check
      WHERE product_code EQ @iv_product_code
        INTO CORRESPONDING FIELDS OF @ls_stok.
    ENDSELECT.
    IF sy-subrc EQ 0.
      ADD 1 TO ls_stok-stok.
      UPDATE zsg_stok_check FROM ls_stok.
      IF sy-subrc EQ 0.
        COMMIT WORK.
        ev_success = abap_true.
        ev_message = 'Stok güncellendi! / Stock updated!'.
      ENDIF.
    ELSE.
      ls_stok-product_name = ls_product-product_name.
      ADD 1 TO ls_stok-stok.
      INSERT zsg_stok_check FROM ls_stok.
      IF sy-subrc EQ 0.
        COMMIT WORK.
        ev_success = abap_true.
        ev_message = 'Yeni kayıt eklendi! / New record added!'.
      ENDIF.
    ENDIF.
  ELSE.
    ROLLBACK WORK.
    ev_success = abap_false.
    ev_message = 'Ürün kodu geçerli değildir! / Product code is not valid!'.
  ENDIF.

ENDFUNCTION.

Oluşturduğumuz fonksiyonu RFC’ye bağlamak için aşağıdaki şekilde, Proccessing Type alanını Remote-Enabled Module olarak değiştiriyorum ve fonksiyonumu Activate ediyorum.

Attributes

Fonksiyonun web servisini oluşturmak için Utulities->More Utulities->Create Web Service->From the Function Module seçimini yapmamız gerekiyor. Tek bir fonksiyon modülü üzerinde çalıştığım için Module olarak oluşturuyorum. Biden fazla fonksiyon modülünü tek web servise bağlamak isteseydim Fuction Group olarak seçim yapmam gerekirdi.

Utulities

Yaptığımız seçimlerin ardından RFC özellikleri belirlediğimiz ekran açılacak. Bu alanlara gerekli isimlendirme ve açıklamaları yazmamız yeterli. Tüm tanımlamarın ardından bu işlemi Complete ettikten sonra açılan ekranda oluşturduğumuz RFC’nin bazı özelliklerini değiştirmemiz gerekiyor. Servis çağırılırken uygulanacak güvenlik önlemi olarak en sık kullanılan yöntem olan Username/Password kullanımı için Profile Low olarak belirliyoruz ve servisi çağırmak istediğimizde SAP kullanıcı adı/şifremizi girerek işlem yapabileceğiz.

Configuration

Soamanager ayarlarını yapmamız gerekiyor. Soamanager, web servislerin SAP ile bağlantısını sağlayan linki üreten ve bazı özellikleri tanımladığımız ekran. SAP’de T-Code kısmına Soamanager yazarak erişebiliriz. Soamanager yazdıktan sonra browser’da açılan ekranda Web Service Configuration kısmına gireceğiz.

Soamanager

Object Name kısmına, oluşturduğumuz fonksiyon modülünün adını aratarak bulabiliriz.

Soamanager

Çıkan fonksiyonun içine girdiğimizde boş bir sayfa açılacak. Create Service diyerek aşağıdaki gibi servisi oluşturabilirsiniz:

Create Service

İsimlendirmeleri yaptıktan sonra dikkat edeceğimiz en önemli husus Provider Security kısmında User ID/Password seçeneğini işaretlememiz gerekiyor. Çünkü SAP’den web service ayarlarını düzenlerken Authontication olarak Low seçmiştik.

Security

Tüm bu işlemlerin ardından servisi kullanabilmek için Republish edebiliriz. Republish ettikten sonra aşağıda gösterdiğim icona basarak oluşan linki alabiliriz.

Republish
Link

Artık bir Web Service URL’ine sahibiz. Bu URL’i kullanabileceğimiz çeşitli uygulamalar var. Ben kullanıcı arayüzü kolay ve kullanışlı olduğunu düşündüğüm SOAPUI uygulamasını kullanacağım. Uygulamayı başlattıktan sonra SOAP seçeneğine tıklayıp Initial WSDL alanına kopyaladığımız linki yapıştırıyoruz:

SOAPUI

OK dediğimizde bizden kullanıcı adı ve şifre girmemizi isteyen ekran açılacak. SAP giriş kullanıcı bilgilerimizi buraya yazıp OK dedikten sonra servisimiz ekrana gelecek. Servisi kullanılabilir hale getirmek için Authantication seçeneğine girerek yeni kullanıcı yetkisi eklememiz gerekiyor:

Authorization
User Authorization

Kullanıcı bilgilerini girdikten sonra Request detaylarında görüneceği üzere, import parametresi olarak sadece Ürün Kodu belirlemiştik. Şimdi denemelerimizi yapabiliriz.

İlk olarak ürün listesinde varolan kodlardan biri ile başarılı bir kayıt girelim ve response detaylarını inceleyelim:

Success Response

Göreceğimiz üzere tablomuzda bir kayıt eklendi:

Success Table

Şimdi aynı üründen bir tane daha ekleyelim. Response detayında stoğun güncellendiğine dair mesajı ve tabloda stok miktarının arttığını görüyoruz.

Update Response
Update Table

Son olarak ürün listesinde olmayan bir kod eklemeyi deneyelim:

Error Response

Geçerli olmayan ürün kodu ile ilgili mesajı görüyoruz.

Böylece SAP’de veri akışı sağlamak için Web Service oluşturarak bu gibi işlemler yapabildiğimizi görmüş olduk. Fonksiyon içeriğini detaylandırarak daha farklı senarryolar kurgulanabilir. Umarım ilk adım için yardımcı bir doküman olmuştur.


Kaynakça: Burak Kocaaslan Udemy Eğitimi

← Return to Blog