17 Mart 2015 Salı

SAP de RESTful Web Servis oluşturma

Bu yayında bir REST service yazacağız.
Servisimizin yapacağı iş basitçe 1000 adet malzeme verisini bize JSON data olarak geri döndermek olsun.



sicf transaction a giriş yapıyoruz.


Ekranı geçip servisleri listeliyoruz.



Default Host altında yeni bir alt  öge oluşturuyoruz.


Servise bir isim veriyoruz.


Servise bir açıklama girip kaydedelim.Görüldüğü gibi işleyici listemiz boş , servisi handle edeceğimiz bir class oluşturmamız gerekiyor.


se24 transaction ı ile bir class oluşturalım.



Classımızın interface i if_http_extension olacak.


Görüldüğü gibi handle_request methodu methodlarımıza eklendi , bizde malzeme listesini dönderecek get_materiallist methodumuzu ekleyelim.



get_materiallist methodumuz http request i import etsin ve bize string olarak json data yı döndersin.


 Sıra geldi methodlarımızın içerisini doldurmaya.

 
 METHOD if_http_extension~handle_request.


    DATA : lv_json TYPE string.

    DATA : lv_form      TYPE        string,
           lr_exception TYPE REF TO cx_root,
           lv_error(1).



    lv_form = to_upper( server->request->get_form_field( 'method' ) ).


    TRY.

        CALL METHOD (lv_form)
          EXPORTING
            io_request = server->request
          IMPORTING
            ev_json    = lv_json.


      CATCH cx_sy_dyn_call_error INTO lr_exception.

        lv_error = abap_true.

    ENDTRY.


* Activate compression
    server->response->set_compression(
    disable_extended_checks = abap_true
    options = if_http_server=>co_compress_in_all_cases ).

    IF lv_error = abap_true.

      server->response->set_status( code = 500 reason = 'Internal Server Error' ).

    ELSE.

      server->response->set_status( code = 200 reason = 'OK' ).
      server->response->set_cdata( data = lv_json ).
      server->response->set_content_type(
      content_type = 'application/json' ).


    ENDIF.

  ENDMETHOD.


 
  METHOD get_materiallist.

    DATA : BEGIN OF ls_out ,
             matnr TYPE matnr,
             maktx TYPE maktx,
           END OF ls_out .


    DATA lt_out LIKE STANDARD TABLE OF ls_out.

    SELECT a~matnr
           b~maktx
       FROM mara AS a
             LEFT JOIN makt AS b
               ON b~matnr EQ a~matnr AND b~spras EQ sy-langu
       INTO TABLE lt_out UP TO 1000 ROWS .


    DATA(writer) = cl_sxml_string_writer=>create(
  type = if_sxml=>co_xt_json ).

    CALL TRANSFORMATION id SOURCE  itab = lt_out
                           RESULT XML writer.

    ev_json = cl_abap_codepage=>convert_from(
    writer->get_output( ) ).

  ENDMETHOD.



Artık yaratmış olduğumuz class ı servisimizin işleyici listesine ekleyebiliriz.


Son olarak servisi etkinleştirmemiz gerekmekte. Bunu da servise sağ tıklayıp Srv.etkinleştir seçeneği ile gerçekleştirebiliriz.


Şimdi servisimizi test edelim.  Browser ınızdan hostname ve port bilgilerinizi kullanarak aşağıdaki URL ile servise ulaşabilirsiniz.

<hostname:port>/zui501/?method=get_materiallist


Bir sonraki yayında SAP backend den almış olduğumuz bu JSON datayı bir SAPUI5 uygulaması ile bir tabloya dolduracağız.

Hiç yorum yok :

Yorum Gönder