FUNCTION ZFM_RESTFUL_PAK.
*"----------------------------------------------------------------------
*"*"本地接口:
*" IMPORTING
*" VALUE(I_URL_ID) TYPE STRING DEFAULT 'IND_TO_WMS'
*" VALUE(I_BODYDATA) TYPE STRING DEFAULT '{}'
*" VALUE(I_HTTP_METHOD) TYPE STRING DEFAULT 'POST'
*" EXPORTING
*" REFERENCE(E_MSG) TYPE STRING
*" REFERENCE(E_CODE) TYPE CHAR1
*" REFERENCE(E_DATA) TYPE STRING
*" REFERENCE(E_HTTP_STATUS_CODE) TYPE I
*" REFERENCE(E_BIZ_CODE) TYPE CHAR1
*"----------------------------------------------------------------------
DATA OREF TYPE REF TO CX_ROOT.
TRY .
DATA LV_URL TYPE STRING .
"获取URL接口地址
SELECT SINGLE ZZURL FROM ZTPAKESBURL WHERE ZZURLID EQ @I_URL_ID AND ZZCLIENT EQ @SY-MANDT INTO @LV_URL.
IF SY-SUBRC NE 0.
E_CODE = 'E'.
E_MSG = '连接地址获取失败!'.
RETURN.
ENDIF.
"获取TOKEN
DATA LV_TOKEN TYPE STRING.
SELECT SINGLE ZZURL FROM ZTPAKESBURL WHERE ZZURLID EQ 'ESB_TOKEN' INTO @LV_TOKEN.
IF SY-SUBRC NE 0.
E_CODE = 'E'.
E_MSG = 'TOKEN获取获取失败!'.
RETURN.
ENDIF.
DATA: LO_HTTP_CLIENT TYPE REF TO IF_HTTP_CLIENT.
"实例化1个 IF_HTTP_CLIENT 的对象得到HTTP_CLIENT
CL_HTTP_CLIENT=>CREATE_BY_URL(
EXPORTING URL = LV_URL "输入参数
IMPORTING CLIENT = LO_HTTP_CLIENT
).
LO_HTTP_CLIENT->PROPERTYTYPE_LOGON_POPUP = LO_HTTP_CLIENT->CO_DISABLED.
"设置某个特定的header field的值
LO_HTTP_CLIENT->REQUEST->SET_HEADER_FIELD( NAME = 'identitytoken' VALUE = LV_TOKEN ). "TOKEN
"设置某个特定的header field的值
LO_HTTP_CLIENT->REQUEST->SET_HEADER_FIELD( NAME = '~SERVER_PROTOCOL' VALUE = 'HTTP/1.1').
"设置某个特定的header field的值
LO_HTTP_CLIENT->REQUEST->SET_HEADER_FIELD( NAME = 'CONTENT-TYPE' VALUE = 'APPLICATION/JSON').
"设置某个特定的header field的值
LO_HTTP_CLIENT->REQUEST->SET_HEADER_FIELD( NAME = 'ACCEPT' VALUE = '*/*' ).
"设置http请求的方法GET 或者 POST,默认使用POST
IF I_HTTP_METHOD IS NOT INITIAL.
LO_HTTP_CLIENT->REQUEST->SET_METHOD( I_HTTP_METHOD ).
ELSE.
LO_HTTP_CLIENT->REQUEST->SET_METHOD( 'POST' ).
ENDIF.
"设置http body
CALL METHOD LO_HTTP_CLIENT->REQUEST->SET_CDATA
EXPORTING
DATA = I_BODYDATA. "输入参数
"发送数据
CALL METHOD LO_HTTP_CLIENT->SEND
EXCEPTIONS
HTTP_COMMUNICATION_FAILURE = 1
HTTP_INVALID_STATE = 2.
"接收HTTP返回
CALL METHOD LO_HTTP_CLIENT->RECEIVE
EXCEPTIONS
HTTP_COMMUNICATION_FAILURE = 1
HTTP_INVALID_STATE = 2
HTTP_PROCESSING_FAILED = 3.
"返回状态校验
LO_HTTP_CLIENT->RESPONSE->GET_STATUS( IMPORTING CODE = E_HTTP_STATUS_CODE ).
E_DATA = LO_HTTP_CLIENT->RESPONSE->GET_CDATA( ).
CASE E_HTTP_STATUS_CODE.
WHEN 200.
E_CODE = 'S'.
E_MSG = '系统连接成功!请查看执行结果消息。'.
"返回数据,"获取response中的http的body内容
E_DATA = LO_HTTP_CLIENT->RESPONSE->GET_CDATA( ).
WHEN OTHERS.
E_CODE = 'E'.
E_MSG = '接口访问失败,返回码:' && E_HTTP_STATUS_CODE && E_DATA.
ENDCASE.
"关闭http链接
CALL METHOD LO_HTTP_CLIENT->CLOSE.
CATCH CX_ROOT INTO OREF.
E_CODE = 'E'.
E_MSG = OREF->IF_MESSAGE~GET_TEXT( ).
"关闭http链接
IF LO_HTTP_CLIENT IS NOT INITIAL.
CALL METHOD LO_HTTP_CLIENT->CLOSE.
ENDIF.
ENDTRY.
*业务状态识别
IF E_CODE EQ 'S'.
*JSON数据转为内表数据
TYPES : BEGIN OF TY_RESULTINFO,
RETURNSTATUS TYPE CHAR1,
RETURNMSG TYPE STRING,
END OF TY_RESULTINFO.
DATA :LS_RESULTINFO TYPE TY_RESULTINFO.
CALL METHOD /UI2/CL_JSON=>DESERIALIZE
EXPORTING
JSON = E_DATA
* PRETTY_NAME = ABAP_FALSE
CHANGING
DATA = LS_RESULTINFO.
IF LS_RESULTINFO-RETURNSTATUS EQ 'S'.
E_BIZ_CODE = 'S'.
E_MSG = '接口处理成功!'.
ELSE.
E_BIZ_CODE = 'E'.
E_MSG = '接口处理失败!'.
ENDIF.
E_MSG = E_MSG && LS_RESULTINFO-RETURNMSG.
ENDIF.
ENDFUNCTION.
网友评论