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.