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