继承接口:IF_HTTP_EXTENSION,使用SICF创建服务
![]()
METHOD if_http_extension~handle_request.
DATA: path_info TYPE string,
p_info_tab TYPE TABLE OF string,
action TYPE string,
l_xt TYPE zifid,
funcname TYPE rs38l_fnam,
request_method TYPE string,
lt_nvp TYPE tihttpnvp.
FIELD-SYMBOLS <ls_nvp> TYPE ihttpnvp.
DATA: i_json TYPE string,
o_json TYPE string,
l_num TYPE string,
l_size TYPE string,
l_ifid TYPE zifid.
DATA: lcx_error TYPE REF TO cx_root.
DATA: err_text TYPE c LENGTH 1000.
me->my_service = server->request->get_header_field( name = '~script_name' ).
action = server->request->get_form_field( 'action' ).
request_method = server->request->get_header_field( name = '~request_method' ).
IF my_service = '/sap_json' AND request_method = 'POST'.
path_info = server->request->get_header_field( name = '~path_info' ).
SPLIT path_info AT '/' INTO TABLE p_info_tab.
***20230721 优化 系统接口访问权限
READ TABLE p_info_tab INDEX 2 INTO l_xt."系统标识
READ TABLE p_info_tab INDEX 3 INTO funcname."接口
IF funcname IS INITIAL.
CLEAR l_xt.
READ TABLE p_info_tab INDEX 2 INTO funcname."原接口保持不变
ENDIF.
****
TRANSLATE l_xt TO UPPER CASE.
TRANSLATE funcname TO UPPER CASE.
IF funcname IS INITIAL AND action IS INITIAL.
o_json = `{"error_code": "404","error_message": "Not Found Empty request."}`.
ELSEIF funcname = 'Z_SRM_MARC_IN'.
l_ifid = funcname.
SELECT 'X'
INTO @DATA(l_x) UP TO 1 ROWS
FROM zjson_log
WHERE ifid = @l_ifid
AND ifxt = @l_xt
AND ifflag = ''.
ENDSELECT.
IF sy-subrc = 0.
CLEAR: l_num ,l_size.
server->request->get_form_fields_cs( CHANGING fields = lt_nvp )."PARAMETERS
LOOP AT lt_nvp ASSIGNING <ls_nvp>.
TRANSLATE <ls_nvp>-name TO UPPER CASE. " ABAP is upper case internally anyway.
IF <ls_nvp>-name = 'PAGENUM'.
l_num = <ls_nvp>-value.
ENDIF.
IF <ls_nvp>-name = 'PAGESIZE'.
l_size = <ls_nvp>-value.
ENDIF.
ENDLOOP.
i_json = server->request->get_cdata( )."BODY
CALL FUNCTION funcname
EXPORTING
i_json = i_json
pagenum = l_num
pagesize = l_size
IMPORTING
o_json = o_json.
ELSE.
o_json = 'Zjson_log Normal Service'.
ENDIF.
ELSE.
l_ifid = funcname.
SELECT 'X'
INTO @DATA(l_y) UP TO 1 ROWS
FROM zjson_log
WHERE ifid = @l_ifid
AND ifxt = @l_xt
AND ifflag = ''.
ENDSELECT.
IF sy-subrc = 0.
i_json = server->request->get_cdata( ).
TRY .
CALL FUNCTION funcname
EXPORTING
i_json = i_json
IMPORTING
o_json = o_json.
CATCH cx_root INTO lcx_error.
err_text = lcx_error->get_text( ). " 获取错误消息
o_json = `{"error_code": "404","error_message": "FSSC."}`.
REPLACE ALL OCCURRENCES OF 'FSSC' IN o_json WITH err_text.
ENDTRY.
ELSE.
o_json = `{"error_code": "404","error_message": "Zjson_log Normal Service."}`.
ENDIF.
ENDIF.
ELSE.
o_json = `{"error_code": "404","error_message": "Not Found Service."}`.
IF request_method NE 'POST'.
o_json = `{"error_code": "404","error_message": "Method not allowed Method not allowed."}`.
ENDIF.
ENDIF.
*------设置返回数据
server->response->set_cdata(
EXPORTING
data = o_json
).
FREE:l_x,l_y,l_ifid,l_xt.
ENDMETHOD.