前言
SE24
创建 服务处理类,作为IF_HTTP_EXTENSION
接口实现类- 实现
IF_HTTP_EXTENSION~HANDLE_REQUEST
方法 - 进行数据处理 SICF
发布服务Web
请求测试服务SRT_LOG
查看错误日志
SE24 创建 Class
TCode SE24
创建 服务处理类
选择 Class,Next
填入描述信息,Save 保存
实现 接口 IF_HTTP_EXTENSION
实现方法
切换到 Methods
页签,双击 IF_HTTP_EXTENSION~HANDLE_REQUEST
方法进入 源码 页面
- 业务逻辑:获取 JSON 格式数据,并以 JSON 格式返回给外部系统
- 实现方法,激活
实现逻辑源码如下:
METHOD if_http_extension~handle_request.
DATA: lr_json_ser TYPE REF TO cl_trex_json_serializer,
lr_json_des TYPE REF TO cl_trex_json_deserializer.
DATA: lv_json_string TYPE string.
DATA: gt_t005u TYPE TABLE OF t005u.
DATA: lv_request TYPE string.
DATA: BEGIN OF ls_request,
spras TYPE spras,
land1 TYPE land1,
END OF ls_request.
DATA lt_request LIKE STANDARD TABLE OF ls_request." 该内表格式要和外部传入参数格式一致
*&--- 获取调用时候传入的参数
CLEAR: lt_request.
lv_json_string = server->request->get_cdata( ). " 获取传入的 JSON 格式数据
/ui2/cl_json=>deserialize( " 把 JSON 格式的转化为 ABAP 内表, 把 LV_JSON_STRING 放入 LT_REQUEST 里面
EXPORTING
json = lv_json_string
pretty_name = /ui2/cl_json=>pretty_mode-camel_case
CHANGING
data = ls_request ).
APPEND ls_request TO lt_request.
*&--- 设置返回数据格式
CALL METHOD server->response->if_http_entity~set_content_type
EXPORTING
content_type = 'application/json'.
*&--- 获取要返回的数据
IF lt_request[] IS NOT INITIAL.
CLEAR: gt_t005u.
SELECT *
INTO TABLE gt_t005u
FROM t005u
UP TO 5 ROWS
FOR ALL ENTRIES IN lt_request
WHERE spras = lt_request-spras
AND land1 = lt_request-land1.
ENDIF.
*&--- 要返回的数据转换成 JSON 格式
CLEAR: lv_json_string.
CREATE OBJECT lr_json_ser
EXPORTING
data = gt_t005u[].
CALL METHOD lr_json_ser->serialize.
CALL METHOD lr_json_ser->get_data
RECEIVING
rval = lv_json_string.
*&--- 设置返回数据
server->response->set_cdata(
EXPORTING
data = lv_json_string " Character data
).
ENDMETHOD.
SICF 发布服务
TCode: SICF
创建自定义服务
default_host/sap
下创建Sub-Element
填写 Element
名称,点击确定
元素 Service
配置
配置刚刚创建的 服务实现类,然后 保存
激活服务
测试服务
获取 URL
,这里我们以 Postman
测试为例
这里需要注意拿到的
URL
中的Domain
和Port
会存在问题
- 直接访问对应
IP
/ 修改本地hosts
文件,做一下本地解析(具体可参见我的「SAP 发布 OData Service」文章中有介绍 / 或者自行 Google)- 端口号可能有误,需自行判断修改
程序中打 外部断点
测试查看
成功接收并转化值
响应码 200
,返回查询结果