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.
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.
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