点击此处---> 群内免费提供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。
方法。
我不知道问题出在哪里,我需要您的帮助
嗨,
在github上查看ABAP Swagger,它有助于使用ABAP创建Restfull资源。 也许会有所帮助。 我认为这会使您的生活更轻松。
但是,我的事是错误的:
-获取:
您正在使用create_entity,通常如果使用同一实体的多个记录,我们在谈论"实体集",您会看到一个create_entityset吗?
您不能只mo_response-> set_cdata(您的响应)吗?
-发布:
我认为同样适用,实体x实体集(多个实体)
-放置:
不知道...您能解释一下它不能正常工作吗?
此致
Felipe
嗨, Felipe ,
感谢您的帮助,我将检查并返回给您。
一周热门 更多>