在系统 VL02N 交货过账后触发发送邮件、短信的功能,短信邮件接口是经过第三方系统封装,然后开发出的API接口。 请求地址: http://180.167.01.01/ns/sends 请求方式: POST 参数格式: JSON 请求参数: { "ncode": "sapOrderSend", "source": "订单号", "contacts": [ { "code": "订货人邮箱地址", "type": "1" }, { "code": "订货人手机号", "type": "2" } ], "params": { "contactName": "订货人姓名", "contactCode": "订货人编号", "code": "订单号", "createDate": "订单创建时间", "storageName": "发货仓库名称", "shipTypeName": "发货方式名称" } } 复制代码 RFC接口代码: FUNCTION zot_do_send_message. *"---------------------------------------------------------------------- *"*"本地接口: *" IMPORTING *" VALUE(I_VBELN) TYPE VBELN_VL OPTIONAL *" EXCEPTIONS *" URL_ERROR *"---------------------------------------------------------------------- DATA: lr_http_client TYPE REF TO if_http_client . DATA: lv_url TYPE string, lv_result TYPE string, lv_post_string TYPE string, lv_len TYPE i. TYPES:BEGIN OF ty_contacts, code TYPE string, type TYPE char1, END OF ty_contacts. TYPES:BEGIN OF ty_params, contactname TYPE string, contactcode TYPE string, code TYPE string, createdate TYPE string, storagename TYPE string, shiptypename TYPE string, END OF ty_params. DATA:lt_contacts TYPE TABLE OF ty_contacts. TYPES:BEGIN OF ty_message, ncode TYPE string, source TYPE string, contacts LIKE lt_contacts, params TYPE ty_params, END OF ty_message. DATA:ls_message TYPE ty_message. DATA:ls_contacts TYPE ty_contacts. DATA:BEGIN OF lt_vbap OCCURS 0, vbeln TYPE vbap-vbeln, posnr TYPE vbap-posnr, ktgrm TYPE vbap-ktgrm, END OF lt_vbap. DATA:lv_vbeln_so TYPE vbak-vbeln, lv_tel_number TYPE adr2-tel_number, lv_smtp_addr TYPE adr6-smtp_addr, lv_kunnr TYPE kna1-kunnr, lv_name TYPE kna1-name1, lv_erdat TYPE vbak-erdat, lv_bname TYPE vbak-bname, lv_bezei TYPE t173t-bezei, lv_lgobe TYPE t001l-lgobe. IF i_vbeln IS INITIAL. EXIT. ENDIF. SELECT SINGLE url INTO lv_url FROM zot_message WHERE fm_name = 'ZOT_DO_SEND_MESSAGE' AND pm1 = 'URL'. IF sy-subrc NE 0. MESSAGE '请在表ZOT_MESSAGE配置URL参数' TYPE 'E' RAISING url_error. ENDIF. SELECT vbap~vbeln vbap~posnr vbap~ktgrm INTO TABLE lt_vbap FROM lips INNER JOIN vbap ON lips~vgbel = vbap~vbeln AND vbap~abgru = '' INNER JOIN vbak ON vbap~vbeln = vbak~vbeln AND vbak~vkorg = '3110' "国内发短信 WHERE lips~vbeln = i_vbeln. DELETE lt_vbap WHERE ktgrm = '02'. "技术服务 IF lt_vbap[] IS INITIAL. EXIT. ENDIF. SELECT SINGLE lips~vgbel adr2~tel_number adr6~smtp_addr kna1~kunnr kna1~name1 INTO (lv_vbeln_so,lv_tel_number,lv_smtp_addr,lv_kunnr,lv_name) FROM lips INNER JOIN vbpa ON lips~vgbel = vbpa~vbeln AND vbpa~posnr = space AND vbpa~parvw = 'WE' INNER JOIN kna1 ON vbpa~kunnr = kna1~kunnr LEFT JOIN adr2 ON kna1~adrnr = adr2~addrnumber AND adr2~persnumber = space AND adr2~r3_user = '3' LEFT JOIN adr6 ON kna1~adrnr = adr6~addrnumber AND adr6~persnumber = space WHERE lips~vbeln = i_vbeln. IF lv_tel_number IS INITIAL AND lv_smtp_addr IS INITIAL. EXIT. ENDIF. SELECT SINGLE likp~erdat vbak~bname t173t~bezei t001l~lgobe INTO (lv_erdat,lv_bname,lv_bezei,lv_lgobe) FROM likp INNER JOIN lips ON likp~vbeln = lips~vbeln INNER JOIN vbak ON lips~vgbel = vbak~vbeln LEFT JOIN t173t ON t173t~spras = sy-langu AND t173t~vsart = likp~vsart LEFT JOIN t001l ON lips~werks = t001l~werks AND lips~lgort = t001l~lgort WHERE likp~vbeln = i_vbeln. *-->数据初始化成嵌套内表形式 ls_message-ncode = 'sapOrderSend'. IF lv_bname IS NOT INITIAL. ls_message-source = lv_bname. ELSE. ls_message-source = i_vbeln. ENDIF. IF lv_smtp_addr IS NOT INITIAL. ls_contacts-code = lv_smtp_addr. ls_contacts-type = '1'. APPEND ls_contacts TO ls_message-contacts. ENDIF. IF lv_tel_number IS NOT INITIAL. ls_contacts-code = lv_tel_number. ls_contacts-type = '2'. APPEND ls_contacts TO ls_message-contacts. ENDIF. ls_message-params-contactname = lv_name. ls_message-params-contactcode = lv_kunnr. IF lv_bname IS NOT INITIAL. ls_message-params-code = lv_bname. ELSE. ls_message-params-code = lv_vbeln_so. ENDIF. IF lv_erdat IS NOT INITIAL. CONCATENATE lv_erdat+0(4) lv_erdat+4(2) lv_erdat+6(2) INTO ls_message-params-createdate SEPARATED BY '-'. ENDIF. ls_message-params-storagename = lv_lgobe. ls_message-params-shiptypename = lv_bezei. *-->内表数据转-->json格式 lv_post_string = /ui2/cl_json=>serialize( data = ls_message compress = ABAP_true pretty_name = abap_true ). REPLACE ALL OCCURRENCES OF 'contactname' IN lv_post_string WITH 'contactName'. REPLACE ALL OCCURRENCES OF 'contactcode' IN lv_post_string WITH 'contactCode'. REPLACE ALL OCCURRENCES OF 'createdate' IN lv_post_string WITH 'createDate'. REPLACE ALL OCCURRENCES OF 'storagename' IN lv_post_string WITH 'storageName'. REPLACE ALL OCCURRENCES OF 'shiptypename' IN lv_post_string WITH 'shipTypeName'. * lv_len = strlen( lv_post_string ) . lv_len = cl_abap_list_utilities=>dynamic_output_length( lv_post_string ). *send * lv_url = 'http://192.168.01.01:8088/ns/sends'. CALL METHOD cl_http_client=>create_by_url EXPORTING url = lv_url IMPORTING client = lr_http_client EXCEPTIONS argument_not_found = 1 plugin_not_active = 2 internal_error = 3 OTHERS = 4. CALL METHOD lr_http_client->request->set_header_field EXPORTING name = '~request_method' value = 'POST'. CALL METHOD lr_http_client->request->set_header_field EXPORTING name = '~server_protocol' value = 'HTTP/1.1'. CALL METHOD lr_http_client->request->set_header_field EXPORTING name = 'Content-Type' value = 'application/json; charset=utf-8'. CALL METHOD lr_http_client->request->set_header_field EXPORTING name = 'Accept' value = 'application/json'. * CALL METHOD lr_http_client->request->set_header_field * EXPORTING * name = 'Content-Length' * value = len_str. CALL METHOD lr_http_client->request->set_cdata EXPORTING data = lv_post_string offset = 0 length = lv_len. CALL METHOD lr_http_client->send EXCEPTIONS http_communication_failure = 1 http_invalid_state = 2. CALL METHOD lr_http_client->receive EXCEPTIONS http_communication_failure = 1 http_invalid_state = 2 http_processing_failed = 3. lv_result = lr_http_client->response->get_cdata( ). ENDFUNCTION. |