- 1.Introduction
- 2.code
This is an interface .(data From sap to mes ). The process is that we convert data format(sap data to jason data and jason data to sap data). The outer system interface is restful(java)
2.code** gv_json
DATA ztrexjson TYPE REF TO cl_trex_json_serializer.
DATA ztrexjsonret TYPE REF TO zcl_trex_json_deserializer.
DATA: http_client TYPE REF TO if_http_client .
DATA: z_len TYPE i,
z_sysid TYPE sysysid.
* URL地址
DATA: z_url TYPE string .
DATA: z_url1 TYPE string .
* 返回的MEAASGE
DATA: z_return TYPE string,
lv_msg TYPE string.
DATA: lv_str TYPE char4 .
CLEAR:gv_json,gv_msg,gt_send[].
LOOP AT it_data INTO iw_data.
ref_exit_zero:iw_data-MATNR.
gs_send-material_Code = iw_data-matnr.
gs_send-cCount = iw_data-menge.
gs_send-material_Name = iw_data-maktx.
ConCATENATE iw_data-budat+0(4) '-' iw_data-budat+4(2) '-' iw_data-budat+6(2) INTO gs_send-cDate.
APPEND gs_send TO gt_send.
CLEAR: gs_send,gv_msg.
ENDLOOP.
CHECK gt_send[] IS NOT INITIAL.
gv_json = zcl_json=>serialize( data = gt_send[] compress = abap_true pretty_name = zcl_json=>pretty_mode-camel_case ).
CHECK gv_json IS NOT INITIAL.
CHECK gv_json IS NOT INITIAL.
z_sysid = sy-sysid.
z_len = STRLEN( gv_json ) .
SELECt SINGLE zurl zurl1 INTO (z_url,z_url1) FROM ztpm002
WHERe progname = 'ZPP_SAP2MES_FH' AND zsysid = z_sysid
AND sys_detail = 'MES'.
ConCATENATE z_url z_url1 INTO z_url.
CHECK z_url IS NOT INITIAL.
"创建客户端请求
CALL METHOD cl_http_client=>create_by_url
EXPORTING
url = z_url
importING
client = http_client.
http_client->propertytype_logon_popup = http_client->co_enabled .
CALL METHOD http_client->request->set_header_field
EXPORTING
name = 'CONTENT-TYPE'
value = 'APPLICATION/JSON'.
CALL METHOD http_client->request->set_method( 'POST' )."PUT
"设置待传输内容
CALL METHOD http_client->request->set_cdata
EXPORTING
data = gv_json
offset = 0
length = z_len.
"发送请求
CALL METHOD http_client->send
EXCEPTIONS
http_communication_failure = 1
http_invalid_state = 2
http_invalid_timeout = 4
http_processing_failed = 3
OTHERS = 5.
IF sy-subrc <> 0 .
http_client->get_last_error( importING message = lv_msg ).
ENDIF.
"读取远程服务返回的处理过结果。
CALL METHOD http_client->receive
EXCEPTIONS
http_communication_failure = 1
http_invalid_state = 2
http_processing_failed = 3.
IF sy-subrc <> 0 .
http_client->get_last_error( importING message = lv_msg ).
ENDIF.
* 获取返回的数据
z_return = http_client->response->get_cdata( ).
CALL METHOD http_client->close.
IF z_return IS NOT INITIAL AND z_return+0(1) = '{' .
REPLACe ALL OCCURRENCES OF REGEX '"(w+)"(s*:s*)'
IN z_return WITH '$1$2'.
CREATE OBJECT ztrexjsonret.
CALL METHOD ztrexjsonret->deserialize(
EXPORTING json = z_return
importING abap = gs_return ).
* CLEAR:lw_return.
* CALL METHOD ztrexjsonret->deserialize
* EXPORTING
* json = lo_output-rtn_msg
* importING
* abap = lw_return.
ENDIF.
"写日志
IF gs_return-success = '1'.
LOOP AT it_data INTO iw_data.
iw_data-status = 'S'.
iw_data-RESULTDATA = '操作成功'.
iw_data-zcdte = sy-datum.
iw_data-zcime = sy-uzeit.
iw_data-zcnme = sy-uname.
MOVE-CORRESPonDING iw_data TO gs_ztpp072.
APPEND gs_ztpp072 TO gt_ztpp072.
MODIFY it_data FROM iw_data.
ENDLOOP.
ELSEIF gs_return-success = '0'.
LOOP AT it_data INTO iw_data.
iw_data-status = 'E'.
iw_data-RESULTDATA = gs_return-msg.
iw_data-zcdte = sy-datum.
iw_data-zcime = sy-uzeit.
iw_data-zcnme = sy-uname.
MOVE-CORRESPonDING iw_data TO gs_ztpp072.
APPEND gs_ztpp072 TO gt_ztpp072.
MODIFY it_data FROM iw_data.
ENDLOOP.
ENDIF.
IF gt_ztpp072[] IS NOT INITIAL.
MODIFY ztpp072 FROM TABLE gt_ztpp072[].
COMMIT WORK.
ENDIF.



