需求介绍:外部系统(钉钉)要同步员工考勤汇总数据到ERP系统(SAP),要求接口以Rest方式调用。
需求实现:平时SAP发布接口都是生成Webservice地址供外部系统以SOAP方式调用,没发布过需求中的这种接口。通过看其他人的介绍找到一些方法,借鉴这些方法最后实现了需求。
主要借鉴的文章有:SAP 如何提供 RESTful Web 服务?_王敏的专栏-CSDN博客_sap web 服务
SAP发布REST/HTTP接口 - ^ω^SAP傻X^o^ - 博客园
整个过程主要有以下几步:
1.Tcode SE24创建类来实现IF_HTTP_EXTENSION这个接口;
2.使用IF_HTTP_EXTENSION~HANDLE_REQUEST方法进行数据处理;
3.Tcode SICF创建服务。
接下来是我这个接口的具体实现过程
创建类,实现接口 IF_HTTP_EXTENSION
1.se24 创建一个类
2.切换到接口(interface)页签,输入IF_HTTP_EXTENSION ,回车。切换到方法(method)页签,双击IF_HTTP_EXTENSION~HANDLE_REQUEST进入代码编辑界面。
我的代码如下
METHOD if_http_extension~handle_request.
DATA: lt_json TYPE string,
lt_fields TYPE tihttpnvp.
FIELD-SYMBOLS: <fs_field> LIKE LINE OF lt_fields.
*获取JSON头数据
server->request->get_header_fields(
CHANGING
fields = lt_fields
).
*获取JSON行数据
lt_json = server->request->if_http_entity~get_cdata( ).
*JSON转为ABAP内表
DATA: deserializer TYPE REF TO zcl_trex_json_deserializer,
lt_data TYPE STANDARD TABLE OF zthr040.
CLEAR lt_data.
CREATE OBJECT deserializer.
CALL METHOD deserializer->deserialize(
EXPORTING
json = lt_json
IMPORTING
abap = lt_data[] ).
*调用考勤结果写入函数执行数据
CALL FUNCTION 'ZFMHRDING001'
TABLES
it_hr040 = lt_data[].
*ABAP内表转换为JSON
DATA: serializer TYPE REF TO zcl_trex_json_serializer.
CLEAR lt_json.
CREATE OBJECT serializer EXPORTING data = lt_data[].
CALL METHOD serializer->serialize( ).
lt_json = serializer->get_data( ).
*将JSON返回给调用端
server->response->set_cdata(
EXPORTING
data = lt_json
).
ENDMETHOD.
3.以上完成后激活方法。
创建WEB服务
使用事务码 SICF 在 default_host/sap
节点下面创建子节点,使用 Z_SIMPLE_REQ_HANDLER
类并激活方法:
测试服务
工具调用 http://erpdev:8000/sap/zsimple_service?sap-client=200
查看执行情况。