使用CL_rest_resource中的post方法发布多个记录

2020-08-16 04:57发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)专家们, 我现在需要您的建议和...

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


专家们,

我现在需要您的建议和帮助,我是Web服务的新手,我正在从事android和sap之间的项目集成,

现在,我已经使用CL_REST_HTTP_HANDLER和CL_rest_resource创建了一个Web服务,该服务可以完美地正常获取数据和发布数据。

我现在要面对的是:

A-无法发布多条记录,我只能发布单条记录。

B- Put方法不起作用。

C-获取方法,我可以获取所有数据和单个数据,但是我无法获取记录范围。

这是我的代码:

CL_rest_resource

获取方法:IF_REST_RESOURCE〜GET

数据:lv_str类型的字符串。
数据:ls_it类型TABLE OF ZRAM_ASSET_TEST0,
与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#) 。

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 ')
format = cl_abap_format => e_xss_ml)))## no_text。


如果lv_ASSET_NO不是INITIAL。"。或者lv_SERIAL_NO不是INITIAL或lv_EMP_ID不是INITIAL。
SELECT *从ZRAM_ASSET_TEST0到表@ls_it
的对应字段,其中ZRAM_ASSET_TEST0〜ASSET_NO = @lv_ASS ET_NO。

ELSEIF lv_SERIAL_NO不是INITIAL。

SELECT *从ZRAM_ASSET_TEST0到表@ls_it
的对应字段中,其中ZRAM_ASSET_TEST0〜SERIAL_NO = @lv_SERIAL_NO。

ELSEIF 不是初始的。
SELECT *从ZRAM_ASSET_TEST0到表@ls_it的对应字段中

其中ZRAM_ASSET_TEST0〜EMP_ID = @lv_EMP_ID。 "并且and SERIAL_NO = @lv_SERIAL_NO。

else。
SELECT *从ZRAM_ASSET_TEST0到表@ls_it的对应字段中。
尾数。

/ui2/cl_json => SERIALIZE(
导出
DATA = ls_it"要序列化的数据
接收
R_JSON = lv_str" JSON字符串
)。
MO_RESPONSE-> CREATE_ENTITY()-> SET_STRING_DATA(IV_DATA = lv_str)。
MO_RESPONSE-> SET_HEADER_FIELD(
导出
IV_NAME ='CONTENT-TYPE'"标题名称
IV_VALUE ='Application/Json'"标题值
)。
结束方法。
>

=====================================

IF_REST_RESOURCE〜POST

data:ZRAM_ASSET_TEST0的LS_t类型表,ls_i ZRAM_ASSET_TEST0的类型表。
data:lv_fin_res类型的字符串。

DATA(lv_EMP_ID)= to_upper(
cl_abap_dyn_prg =>转义
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_pr 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)))##无文本。

" 1-读取来自客户端的数据。
data(lo_entity)= mo_request-> GET_ENTITY()。
data(lv_data)= LO_ENTITY-> GET_STRING_DATA()。
" 2-将json解析为 abap sturture。
/UI2/CL_JSON => DESERIALIZE(
导出
JSON = lv_data" JSON字符串
CHANGING DATA = ls_i"要序列化的数据
)。
* 3-添加运行时信息,ID和当前数据。
ls_i-EMP_ID = CL_UUID_FACTORY => CREATE_SYSTEM_UUID()-> CREATE_UUID_C32()。< br>从ZRAM_ASSET_TEST0选择max(EMP_ID)到@data(lv_max_id)。
ls_i-EMP_ID = lv_max_id +1。
" 4-在数据库中创建数据。
插入INTO ZRAM_ASSET_TEST0 VALUES ls_i。

" 5-返回带有ID的响应。
/UI2/CL_JSON => SERIALIZE(
EXPORTING
DATA = ls_i"要序列化的数据
RECEIVING
R_JSON = lv_fin_res" JSON 字符串
)。
LO_ENTITY-> SET_STRING_DATA(IV_DATA = lv_fin_res)。
终止方法。

============================================

放置方法。

IF_REST_RESOURCE〜PUT

data:ls_it类型ZRAM_ASSET_TEST0表,ls_i类型ZRAM_ASSET_TEST0。

data:lv_fin_res类型字符串。",lv_xstr类型字符串。

DATA(lv_EMP_ID)= MO_REQUEST-> GET_URI_ATTRIBUTE( br> IV_NAME ='EMP_ID'

)。

如果lv_EMP_ID不是INITIAL。
SELECT *从ZRAM_ASSET_TEST0到表@ls_it
的对应字段中,其中ZRAM_ASSET_TEST0〜EMP_ID = @ lv_EMP_ID。
endif。

ls_i-EMP_ID = lv_EMP_ID。

如果sy-subrc <> 0.
mo_response-> set_status(cl_rest_status_code => gc_client_error_not_found)。
endif。


" 1-读取来自客户端的数据。

data(lo_entity)= mo_request-> GET_ENTITY()。

data(lv_data)= LO_ENTITY -> GET_STRING_DATA()。
数据(lv_xstr)= lo_entity-> get_binary_data()。


调用转换ID
源xml lv_xstr
结果ZRAM_ASSET_TEST0 = ls_it。
如果ls_i-EMP_ID是初始值。
mo_response-> set_status(cl_rest_status_code => gc_client_error_bad_request)。
返回。
结束符。
ls_i-EMP_ID = lv_EMP_ID。
从ls_i修改ls_it。
方法。

我不知道问题出在哪里,我需要您的帮助