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.