FUNCTION zfi_epib_mt_cmb_reques.
*"----------------------------------------------------------------------
*"*"本地接口:
*" IMPORTING
*" VALUE(INPUT) TYPE ZFICO_EPIC004 OPTIONAL
*" VALUE(BUKRS) TYPE BUKRS OPTIONAL
*" EXPORTING
*" VALUE(O_ERROR) TYPE CHAR100
*" REFERENCE(OUTPUT) TYPE ZFICO_EPIC004C
*" TABLES
*" TABLE TYPE ZFICO_EPIC004E OPTIONAL
*"----------------------------------------------------------------------
DATA msg TYPE string.
DATA: lo_oref TYPE REF TO cx_st_error.
DATA: lv_url TYPE string.
DATA: lo_http_client TYPE REF TO if_http_client.
DATA: binary_msg TYPE string.
DATA: lv_len TYPE i,
lv_msgtx TYPE string.
DATA: lv_respon TYPE string.
TRY.
CALL TRANSFORMATION zfico0004a
SOURCE output=input
RESULT XML msg.
REPLACE ALL OCCURRENCES OF REGEX '' IN msg WITH '$1>'.
REPLACE 'utf-16' IN msg WITH 'GBK'.
CATCH cx_st_error INTO lo_oref .
ENDTRY.
binary_msg=cl_abap_codepage=>convert_to( source=msg codepage='GBK' ).
SELECT SINGLE url FROM zfit0001a
INTO lv_url
WHERE zyhsx='CMB'
AND bukrs=bukrs.
"创建客户端请求
CALL METHOD cl_http_client=>create_by_url
EXPORTING
url =lv_url
IMPORTING
client =lo_http_client
EXCEPTIONS
argument_not_found=1
plugin_not_active=2
internal_error=3
OTHERS =4.
IF sy-subrc <> 0.
"lv_subrc=sy-subrc.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH
sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
EXIT.
ENDIF.
"设定传输请求内容格式以及编码格式
lo_http_client->request->set_content_type( content_type='application/xml; charset=GBK' ).
"设定调用服务
lo_http_client->request->set_method( if_http_request=>co_request_method_post ).
"设置待传输内容
lv_len=strlen( binary_msg ).
CALL METHOD lo_http_client->request->set_cdata
EXPORTING
data=binary_msg
offset=0
length=lv_len.
"发送请求
lo_http_client->send( EXCEPTIONS http_communication_failure=1
http_invalid_state=2 ).
IF sy-subrc <> 0.
"操作失败,获取失败原因
"lv_subrc=sy-subrc.
lo_http_client->get_last_error( IMPORTING message=lv_msgtx ).
* lv_msgty='E'.
o_error=lv_msgtx.
EXIT.
ENDIF.
"读取远程服务返回的处理过结果。
lo_http_client->receive( EXCEPTIONS http_communication_failure=1
http_invalid_state=2
http_processing_failed=3 ).
IF sy-subrc <> 0 .
lo_http_client->get_last_error( IMPORTING message=lv_msgtx ).
* lv_msgty='E'.
o_error=lv_msgtx.
EXIT.
ELSE.
"读取返回返回内容
CLEAR lv_respon.
lv_respon=lo_http_client->response->get_cdata( ).
TRY .
CALL TRANSFORMATION zfico0004b
SOURCE XML lv_respon
RESULT output=output
root=table[].
CATCH cx_st_error INTO lo_oref .
ENDTRY.
ENDIF.
ENDFUNCTION.