FUNCTION zhr_intf_per_pho2cms.*"----------------------------------------------------------------------*"*"本地接口:*" IMPORTING*" REFERENCE(IV_PERNR) TYPE PERNR_D OPTIONAL*" REFERENCE(IV_GUID) TYPE ZE_EHR_GUID OPTIONAL*" EXPORTING*" REFERENCE(EV_PHOTO) TYPE STRING*" REFERENCE(ES_MESSAGE) TYPE ZSEHR_MESSAGE*"---------------------------------------------------------------------- DATA:lv_objid(50). DATA: lt_toav0 TYPE toav0 OCCURS 1 WITH HEADER LINE. DATA: lt_bindata LIKE tbl1024 OCCURS 0 WITH HEADER LINE. DATA:lt_bin TYPE TABLE OF sdokcntbin. DATA:lt_info TYPE TABLE OF scms_acinf, ls_info TYPE scms_acinf. DATA:l_str TYPE string. DATA: lv_bindata TYPE xstring. DATA: lv_count TYPE sy-index. DATA: lv_length TYPE sapb-length. DATA: ls_toahr TYPE toahr, lv_object_id TYPE toahr-object_id. DATA:host TYPE string. DATA:client TYPE REF TO if_http_client. DATA: it_formulario TYPE tihttpnvp, lv_error_msg TYPE string, wa_formulario LIKE LINE OF it_formulario, len TYPE i, part TYPE REF TO if_http_entity. CLEAR ev_photo.* CONCATENATE IV_PERNR '0002' INTO LV_OBJID. IF iv_pernr IS NOT INITIAL. lv_objid = iv_pernr. lv_object_id = iv_pernr . "&& '0002'. SELECT SINGLE * INTO ls_toahr FROM toahr WHERE sap_object = 'PREL' AND ( object_id = lv_objid OR object_id = lv_object_id ) AND archiv_id = 'A2'. IF sy-subrc NE 0. SELECT SINGLE guid INTO lv_objid FROM zthr0099 WHERE ztype IN ( 'ZZ01','Z001' ) AND objid = iv_pernr AND zstat NOT IN ( 'D', '7', '3' ). ELSE. CLEAR lv_objid. CONDENSE:ls_toahr-object_id NO-GAPS. lv_objid = ls_toahr-object_id. ENDIF. ELSE. lv_objid = iv_guid. ENDIF. REFRESH lt_toav0. CALL FUNCTION 'ARCHIV_GET_CONNECTIONS' EXPORTING objecttype = 'PREL' object_id = lv_objid client = sy-mandt archiv_id = 'A2' documenttype = 'HRICOLFOTO' IMPORTING count = lv_count TABLES connections = lt_toav0 EXCEPTIONS nothing_found = 1 OTHERS = 2. SORT lt_toav0 BY ar_date DESCENDING. IF lv_count > 0. CLEAR lt_toav0. READ TABLE lt_toav0 INDEX 1. REFRESH lt_bindata.* CALL FUNCTION 'ARCHIVOBJECT_GET_TABLE'* EXPORTING* archiv_id = 'A2'* document_type = 'HRICOLFOTO'* archiv_doc_id = lt_toav0-arc_doc_id* IMPORTING* binlength = lv_length* TABLES* binarchivobject = lt_bindata* EXCEPTIONS* error_archiv = 1* error_communicationtable = 2* error_kernel = 3* OTHERS = 4. CALL FUNCTION 'SCMS_DOC_READ' EXPORTING* MANDT = SY-MANDT stor_cat = space crep_id = lt_toav0-archiv_id doc_id = lt_toav0-arc_doc_id TABLES access_info = lt_info content_bin = lt_bin EXCEPTIONS bad_storage_type = 1 bad_request = 2 unauthorized = 3 comp_not_found = 4 not_found = 5 forbidden = 6 conflict = 7 internal_server_error = 8 error_http = 9 error_signature = 10 error_config = 11 error_format = 12 error_parameter = 13 error = 14 OTHERS = 15. IF sy-subrc <> 0 AND lt_bin[] IS INITIAL. EXIT. ELSE. DATA:lv_len TYPE i, lv_lin TYPE i. CLEAR lv_bindata. CLEAR lv_len.* DESCRIBE TABLE lt_bindata LINES lv_lin.* lv_len = lv_length.* LOOP AT lt_bindata.* l_str = lt_bindata-line.* lv_len = lv_len + strlen( l_str ).* CONCATENATE lv_bindata lt_bindata-line INTO lv_bindata IN BYTE MODE.* ENDLOOP. READ TABLE lt_info INTO ls_info INDEX 1. lv_len = ls_info-comp_size. CALL FUNCTION 'SCMS_BINARY_TO_XSTRING' EXPORTING input_length = lv_len IMPORTING buffer = lv_bindata TABLES binary_tab = lt_bin[] EXCEPTIONS failed = 1 OTHERS = 2.* CLEAR ev_photo.* CALL FUNCTION 'SSFC_BASE64_ENCODE'* EXPORTING* bindata = lv_bindata* IMPORTING* b64data = ev_photo.** REPLACE 'data:image/jpeg;base64,' IN ev_photo WITH space.** REPLACE 'data:image/jpg;base64,' IN ev_photo WITH space.** REPLACE* IF ev_photo IS NOT INITIAL.* EXIT.* ENDIF. ENDIF. host = 'http://xxxxxxxxxxxxxx/balabala/upload'. CALL METHOD cl_http_client=>create_by_url EXPORTING url = host IMPORTING client = client EXCEPTIONS argument_not_found = 1 plugin_not_active = 2 internal_error = 3 OTHERS = 4. CALL METHOD client->request->set_method( if_http_request=>co_request_method_post ). CALL METHOD client->request->set_version( if_http_request=>co_protocol_version_1_0 ). CALL METHOD client->request->if_http_entity~set_content_type( EXPORTING content_type = 'multipart/form-data' ). CALL METHOD client->request->if_http_entity~set_formfield_encoding EXPORTING formfield_encoding = cl_http_request=>if_http_entity~co_encoding_raw. part = client->request->if_http_entity~add_multipart( ). CALL METHOD part->set_header_field EXPORTING name = 'content-disposition' value = 'form-data; name="content"; filename="god.jpg";'. CALL METHOD part->set_content_type EXPORTING content_type = 'application/x-jpg-compressed'. len = xstrlen( lv_bindata ). CALL METHOD part->set_data EXPORTING data = lv_bindata offset = 0 length = len. CALL METHOD client->send EXPORTING timeout = 200 EXCEPTIONS http_communication_failure = 1 http_invalid_state = 2 http_processing_failed = 3 OTHERS = 4. IF sy-subrc NE 0. client->get_last_error( IMPORTING message = lv_error_msg ). ENDIF. CALL METHOD client->receive EXCEPTIONS http_communication_failure = 1 http_invalid_state = 2 http_processing_failed = 3 OTHERS = 4. IF sy-subrc NE 0. client->get_last_error( IMPORTING message = lv_error_msg ). ENDIF. CLEAR:l_str. l_str = client->response->get_cdata( ). IF lv_error_msg IS INITIAL. es_message = VALUE #( msgtx = 'S' msgty = 'Send is ok'). ENDIF. ENDIF.ENDFUNCTION.