Hi Experts,
I need you advice and help now i am new with web service i am working on a project integration between android and sap,
Now i have created a web service using CL_REST_HTTP_HANDLER and CL_rest_resource the service is working perfect getting data and posting data normally.
what i am facing now :
A - Can't post multi records i can post single records only.
B- Put Method is not working.
C- Get Method i can get all data and single, but i can't get range of records.
here is my code:
CL_rest_resource
Get Method : IF_REST_RESOURCE~GET
data : lv_str type string.
data : ls_it type TABLE OF ZRAM_ASSET_TEST0,
ws like LINE OF ls_it.
data(lo_entity) = mo_response->create_entity( ).
DATA(lv_EMP_ID) = to_upper(
cl_abap_dyn_prg=>escape_quotes( val =
escape( val = mo_request->get_header_field( iv_name = 'EMP_ID' )
format = cl_abap_format=>e_xss_ml ) ) ) ##no_text.
DATA(lv_ASSET_NO) = to_upper(
cl_abap_dyn_prg=>escape_quotes( val =
escape( val = mo_request->get_header_field( iv_name = 'ASSET_NO' )
format = cl_abap_format=>e_xss_ml ) ) ) ##no_text.
DATA(lv_SERIAL_NO) = to_upper(
cl_abap_dyn_prg=>escape_quotes( val =
escape( val = mo_request->get_header_field( iv_name = 'SERIAL_NO' )
format = cl_abap_format=>e_xss_ml ) ) ) ##no_text.
if lv_ASSET_NO is not INITIAL .".or lv_SERIAL_NO is not INITIAL or lv_EMP_ID IS not INITIAL.
SELECT *from ZRAM_ASSET_TEST0 into CORRESPONDING FIELDS OF TABLE @ls_it
where ZRAM_ASSET_TEST0~ASSET_NO = @lv_ASSET_NO .
ELSEIF lv_SERIAL_NO is not INITIAL.
SELECT * from ZRAM_ASSET_TEST0 into CORRESPONDING FIELDS OF TABLE @ls_it
where ZRAM_ASSET_TEST0~SERIAL_NO = @lv_SERIAL_NO.
ELSEIF lv_EMP_ID IS not INITIAL.
SELECT *from ZRAM_ASSET_TEST0 into CORRESPONDING FIELDS OF TABLE @ls_it
where ZRAM_ASSET_TEST0~EMP_ID = @lv_EMP_ID. "and and SERIAL_NO = @lv_SERIAL_NO.
else.
SELECT * from ZRAM_ASSET_TEST0 into CORRESPONDING FIELDS OF TABLE @ls_it.
endif.
/ui2/cl_json=>SERIALIZE(
EXPORTING
DATA = ls_it " Data to serialize
RECEIVING
R_JSON = lv_str " JSON string
).
MO_RESPONSE->CREATE_ENTITY( )->SET_STRING_DATA( IV_DATA = lv_str ).
MO_RESPONSE->SET_HEADER_FIELD(
EXPORTING
IV_NAME = 'CONTENT-TYPE' " Header Name
IV_VALUE = 'Application/Json' " Header Value
).
endmethod.
=======================================
IF_REST_RESOURCE~POST
data :ls_t TYPE TABLE OF ZRAM_ASSET_TEST0, ls_i type ZRAM_ASSET_TEST0.
data : lv_fin_res type string.
DATA(lv_EMP_ID) = to_upper(
cl_abap_dyn_prg=>escape_quotes( val =
escape( val = mo_request->get_header_field( iv_name = 'EMP_ID' )
format = cl_abap_format=>e_xss_ml ) ) ) ##no_text.
DATA(lv_Serial_No) = to_upper(
cl_abap_dyn_prg=>escape_quotes( val =
escape( val = mo_request->get_header_field( iv_name = 'Serial_No' )
format = cl_abap_format=>e_xss_ml ) ) ) ##no_text.
DATA(lv_Asset_No) = to_upper(
cl_abap_dyn_prg=>escape_quotes( val =
escape( val = mo_request->get_header_field( iv_name = 'Asset_No' )
format = cl_abap_format=>e_xss_ml ) ) ) ##no_text.
" 1- read data coming from client.
data(lo_entity) = mo_request->GET_ENTITY( ).
data(lv_data) = LO_ENTITY->GET_STRING_DATA( ).
"2- parse the json into abap sturture.
/UI2/CL_JSON=>DESERIALIZE(
EXPORTING
JSON = lv_data " JSON string
CHANGING
DATA = ls_i " Data to serialize
).
* 3- add the runtime info , id and current data.
ls_i-EMP_ID = CL_UUID_FACTORY=>CREATE_SYSTEM_UUID( )->CREATE_UUID_C32( ).
select max( EMP_ID ) from ZRAM_ASSET_TEST0 into @data(lv_max_id).
ls_i-EMP_ID = lv_max_id + 1.
"4- create data in database.
insert INTO ZRAM_ASSET_TEST0 VALUES ls_i.
"5 - return the response with the Id.
/UI2/CL_JSON=>SERIALIZE(
EXPORTING
DATA = ls_i " Data to serialize
RECEIVING
R_JSON = lv_fin_res " JSON string
).
LO_ENTITY->SET_STRING_DATA( IV_DATA = lv_fin_res ).
endmethod.
=============================================
Put Method.
IF_REST_RESOURCE~PUT
data : ls_it type TABLE OF ZRAM_ASSET_TEST0 ,ls_i type ZRAM_ASSET_TEST0.
data : lv_fin_res type string.", lv_xstr type string.
DATA(lv_EMP_ID) = MO_REQUEST->GET_URI_ATTRIBUTE(
IV_NAME = 'EMP_ID'
).
IF lv_EMP_ID IS not INITIAL.
SELECT * from ZRAM_ASSET_TEST0 into CORRESPONDING FIELDS OF TABLE @ls_it
where ZRAM_ASSET_TEST0~EMP_ID = @lv_EMP_ID.
endif.
ls_i-EMP_ID = lv_EMP_ID.
if sy-subrc <> 0.
mo_response->set_status( cl_rest_status_code=>gc_client_error_not_found ).
endif.
" 1- read data coming from client.
data(lo_entity) = mo_request->GET_ENTITY( ).
data(lv_data) = LO_ENTITY->GET_STRING_DATA( ).
data(lv_xstr) = lo_entity->get_binary_data( ).
call transformation id
source xml lv_xstr
result ZRAM_ASSET_TEST0 = ls_it.
if ls_i-EMP_ID is initial.
mo_response->set_status( cl_rest_status_code=>gc_client_error_bad_request ).
return.
endif.
ls_i-EMP_ID = lv_EMP_ID.
modify ls_it from ls_i.
endmethod.
i don't know where is issue , i need your help