I_URL_ID TYPE STRING http 服务接口地址id
I_BODYDATA TYPE STRING 传入参数
I_HTTP_METHOD TYPE STRING 'POST' http方式:POST ,GET

E_MSG TYPE STRING 返回消息
E_CODE TYPE CHAR1 连接标志:S成功,E错误,W警告,A拒绝
E_DATA TYPE STRING 返回结果
E_HTTP_STATUS_CODE TYPE I HTTP状态码
E_BIZ_CODE TYPE CHAR1 业务标志:S成功,E错误

URL_NOT_FOUND 未配置URL信息

MANDT MANDT CLNT 3 0 集团
ZURLID ZURLID CHAR 30 0 接口地址ID
ZCLIENT ZCLIENT CHAR 3 0 系统客户端
ZURL ZURL CHAR 100 0 接口的URL地址或SAP函数名称
ZTYPE ZCKSBUSTYPE CHAR 1 0 接口类型
ZREMARKS CHAR30 CHAR 30 0 30 个字符


FUNCTION ZFM_RESTFUL_CKS. *"---------------------------------------------------------------------- *"*"本地接口: *" IMPORTING *" VALUE(I_URL_ID) TYPE STRING *" VALUE(I_BODYDATA) TYPE STRING OPTIONAL *" VALUE(I_HTTP_METHOD) TYPE STRING DEFAULT 'POST' *" EXPORTING *" VALUE(E_MSG) TYPE STRING *" VALUE(E_CODE) TYPE CHAR1 *" VALUE(E_DATA) TYPE STRING *" VALUE(E_HTTP_STATUS_CODE) TYPE I *" VALUE(E_BIZ_CODE) TYPE CHAR1 *" EXCEPTIONS *" URL_NOT_FOUND *"---------------------------------------------------------------------- DATA OREF TYPE REF TO CX_ROOT. TRY . DATA LV_URL TYPE STRING . "根据配置信息,获取URL接口地址 SELECT SINGLE ZURL INTO LV_URL FROM ZCKSDATABUS WHERE ZURLID = I_URL_ID AND ZCLIENT = SY-MANDT. IF SY-SUBRC NE 0. RAISE URL_NOT_FOUND. ENDIF. TRANSLATE LV_URL TO LOWER CASE. 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. CALL METHOD LO_HTTP_CLIENT->AUTHENTICATE( EXPORTING * client = '' * proxy_authentication = 'X' USERNAME = '' PASSWORD = '' * LANGUAGE = 'E' ). "设置某个特定的header field的值 LO_HTTP_CLIENT->REQUEST->SET_HEADER_FIELD( EXPORTING NAME = '~SERVER_PROTOCOL' VALUE = 'HTTP/1.1' ). "设置某个特定的header field的值 CALL METHOD LO_HTTP_CLIENT->REQUEST->SET_HEADER_FIELD EXPORTING NAME = 'CONTENT-TYPE' VALUE = 'APPLICATION/JSON'. "设置某个特定的header field的值 LO_HTTP_CLIENT->REQUEST->SET_HEADER_FIELD( EXPORTING NAME = 'ACCEPT' VALUE = '*/*' ). "设置http请求的方法GET 或者 POST,默认使用POST IF I_HTTP_METHOD IS NOT INITIAL. CALL METHOD LO_HTTP_CLIENT->REQUEST->SET_METHOD( I_HTTP_METHOD ). ELSE. CALL METHOD LO_HTTP_CLIENT->REQUEST->SET_METHOD( 'POST' ). ENDIF. "设置http body CALL METHOD LO_HTTP_CLIENT->REQUEST->SET_CDATA EXPORTING DATA = I_BODYDATA. "输入参数 "dispatch of data CALL METHOD LO_HTTP_CLIENT->SEND EXCEPTIONS HTTP_COMMUNICATION_FAILURE = 1 HTTP_INVALID_STATE = 2. "receipt of http response 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 ). 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 . 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. *----------begin of by Luolin 02.03.2020 10:26:55---------- *业务状态识别 IF E_CODE = 'S'. *JSON数据转为内表数据 TYPES : BEGIN OF LTY_ZITMSG, CODE(2) TYPE C, ERRORMSG TYPE STRING, DATA TYPE STRING, END OF LTY_ZITMSG. DATA :LS_MSG TYPE LTY_ZITMSG, LT_MSG TYPE STANDARD TABLE OF LTY_ZITMSG. CALL METHOD /UI2/CL_JSON=>DESERIALIZE EXPORTING JSON = E_DATA * PRETTY_NAME = ABAP_FALSE CHANGING DATA = LS_MSG. IF LS_MSG-CODE = '0'. E_BIZ_CODE = 'S'. ELSE. E_BIZ_CODE = 'E'. E_MSG = E_MSG && LS_MSG-ERRORMSG. ENDIF. ENDIF. * ----------end of by Luolin 02.03.2020 10:26:55---------- ENDFUNCTION.
网友评论