提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
步骤
1.SE24创建类,实现IF_HTTP_EXTENSION
- SE24创建类实现接口
输入接口描述保存
在接口选项,输入IF_HTTP_EXTENSION
再方法选项,点击IF_HTTP_EXTENSOIN~HANDLE_REQUEST
进入方法编辑
method IF_HTTP_EXTENSION~HANDLE_REQUEST.
TYPES: BEGIN OF ty_data,
matnr TYPE matnr,
maktx TYPE maktx,
END OF ty_data,
BEGIN OF ty_mat,
matnr TYPE matnr,
END OF ty_mat.
DATA: lt_data TYPE TABLE OF ty_data,
lt_mat TYPE TABLE OF ty_mat,
ls_mat TYPE ty_mat.
DATA: lr_mat TYPE RANGE OF matnr,
lrs_mat LIKE LINE OF lr_mat.
DATA: lt_form_fields TYPE tihttpnvp, "请求url参数
lt_header_fields TYPE tihttpnvp, "请求头部数据
lv_method TYPE string, "请求类型
lv_request TYPE string, "请求json数据
lv_response TYPE string. "返回json数据
"请求类型
lv_method = server->request->get_method( ).
"请求url参数
server->request->get_form_fields( CHANGING fields = lt_form_fields ).
"请求头部数据
server->request->get_header_fields( CHANGING fields = lt_header_fields ).
"请求json数据
lv_request = server->request->get_cdata( ).
"json转abap
/ui2/cl_json=>deserialize( EXPORTING json = lv_request
CHANGING data = lt_mat ).
"将内表数据转成range用作查询条件
LOOP AT lt_mat INTO ls_mat.
lrs_mat-sign = 'I'.
lrs_mat-option = 'EQ'.
lrs_mat-low = ls_mat-matnr.
APPEND lrs_mat TO lr_mat.
ENDLOOP.
CASE lv_method.
WHEN 'GET'.
SELECT matnr maktx INTO CORRESPONDING FIELDS OF TABLE lt_data
FROM makt
UP TO 20 ROWS
WHERE spras = sy-langu
AND matnr IN lr_mat.
"abap转换json
/ui2/cl_json=>serialize( EXPORTING data = lt_data
RECEIVING r_json = lv_response ).
"返回json数据给调用端
server->response->set_cdata( EXPORTING data = lv_response ).
"请求响应
server->response->set_status( code = 200 reason = 'OK' ).
WHEN OTHERS.
"如果不是get请求,则返回错误
server->response->set_status( code = 405 reason = 'ERROR' ).
ENDCASE.
endmethod.
2.激活HTTP服务
进入SICF,运行后,
选中sap,鼠标右键点击"新的子元素"
添加服务名称,勾选"服务为管理服务"
输入描述内容,不用设置集团和账号密码
在处理器清单界面添加刚才创建的类后保存
然后返回,就能看到刚才创建的服务,右击,点击启用服务
3测试服务
右击服务,选测试服务
弹框中有测试url,复制后,粘贴到接口测试工具中,我用的apifox,其他的接口测试工具也可以
备注一下请求的名称,选择好请求类型GET,填好URL(需要在接口后面增加?sap-client=202来决定是取哪个集团数据)
在Auth里选择授权类型,并输入SAP登陆的账号密码
因为我们接口是通过接受JSON参数的,所以在Body里选择row和JSON,输入JSON参数,然后点击发送请求,得到响应数据