步骤 1:SE24 创建处理类(100% 可激活)
- 事务码
SE24,输入类名ZCL_HTTP_RFC_SRV,点击「创建」 - 类属性设置:公共类、最终类、实例化方式为「公共」,保存
- 切换到「接口」标签页,输入
IF_HTTP_EXTENSION回车,保存 - 切换到「方法」标签页,双击
IF_HTTP_EXTENSION~HANDLE_REQUEST进入方法实现编辑器 - 仅在方法内部粘贴以下代码(类定义、实现外壳由系统自动生成,不要手动粘贴)
abap
DATA: lo_req TYPE REF TO if_http_request,
lo_rsp TYPE REF TO if_http_response,
lv_body TYPE string,
iv_aufnr TYPE aufnr,
lt_out TYPE TABLE OF zrfc_get_aufnr_a_out,
lv_json TYPE string.
" 获取请求/响应对象(属性调用,不加括号)
lo_req = server->request.
lo_rsp = server->response.
" 读取POST请求体
lv_body = lo_req->get_cdata( ).
IF lv_body IS INITIAL.
lv_json = '{"code":400,"msg":"请求体不能为空"}'.
lo_rsp->set_status( code = 400 reason = 'Bad Request' ).
ELSE.
" JSON反序列化入参
/ui2/cl_json=>deserialize(
EXPORTING
json = lv_body
CHANGING
data = iv_aufnr
).
" 调用业务RFC
CALL FUNCTION 'ZRFC_GET_AUFNR_A'
EXPORTING
i_aufnr = iv_aufnr
TABLES
ot_out = lt_out.
" 结果序列化为JSON
/ui2/cl_json=>serialize(
EXPORTING
data = lt_out
RECEIVING
r_json = lv_json
).
lo_rsp->set_status( code = 200 reason = 'OK' ).
ENDIF.
" 设置响应头与返回内容
lo_rsp->set_content_type( content_type = 'application/json;charset=utf-8' ).
lo_rsp->set_cdata( data = lv_json ).
lo_rsp->set_header_field( name = 'Access-Control-Allow-Origin' value = '*' ).
- 保存方法,返回类主界面,点击「激活」,无语法错误。
步骤 2:SICF 发布 HTTP 服务
- 事务码
SICF,执行后展开default_host节点 - 选择你要放置的路径(如
default_host/sap/zapi),右键「新建子元素」 - 服务名称输入
zrfc_aufnr,类型选择「独立服务」,描述自定义,保存 - 切换到「处理器列表」标签页,处理器类填入
ZCL_HTTP_RFC_SRV - 切换到「登录数据」标签页:
- 测试环境可勾选「无需登录」,填入有权限的系统用户和密码
- 生产环境建议配置基础认证或 SSO
- 右键该服务节点,点击「激活服务」
步骤 3:接口测试
- 请求地址:
http://<系统域名>:<端口>/sap/zapi/zrfc_aufnr - 请求方式:
POST - 请求头:
Content-Type: application/json - 请求体示例:
json
"0000123456"