外部传输内表内容,转换成EXLCE文件流至企业微信机器人,并获取MEDIA_ID。
IV_KEY为企微机器人KEY,
IV_FIELD_NAME为定义的文件名
https://blog.csdn.net/weixin_65625611/article/details/128204931
FUNCTION zfm_send_file. *"---------------------------------------------------------------------- *"*"本地接口: *" IMPORTING *" VALUE(IV_KEY) TYPE STRING *" VALUE(IV_FIELD_NAME) TYPE STRING *" EXPORTING *" REFERENCE(EV_MEDIA_ID) TYPE STRING *" TABLES *" ZMESG STRUCTURE BAPIRET2 *" ET_TABLE TYPE TABLE *"---------------------------------------------------------------------- *----------------------------------------------------------------------- * create function for log *----------------------------------------------------------------------- DATA: lo_http_client TYPE REF TO if_http_client, lv_service TYPE string, lv_result_string TYPE string, lv_len TYPE i, lv_msg TYPE string, lv_message TYPE string, lv_http_method TYPE string, lv_string TYPE string, lv_xstring TYPE xstring, lv_media_id TYPE string, lv_head_field TYPE string, lo_entity TYPE REF TO if_http_entity, lv_name TYPE string, lv_filename TYPE string, lv_field_symbols_string TYPE string, lo_respone_data TYPE REF TO data, part TYPE REF TO if_http_entity, lv_fielname_length TYPE i. DATA: lr_result_data TYPE REF TO data, lr_data_line TYPE REF TO data. DATA: lo_excel_export_service TYPE REF TO cl_salv_export_tool_xls, lo_salv_export_column_conf TYPE REF TO if_salv_export_column_conf, lo_configuration TYPE REF TO if_salv_export_configuration. DATA: lv_content TYPE cl_salv_export_tool_xls=>y_file_content, lv_mime_type TYPE cl_salv_export_tool_xls=>y_mime_type, lt_infos TYPE cl_salv_export_tool_xls=>yt_msg, "#EC NEEDED lt_warnings TYPE cl_salv_export_tool_xls=>yt_msg. "#EC NEEDED DATA: lo_table_rtti TYPE REF TO cl_abap_tabledescr, lt_dfies TYPE ddfields, ls_dfies TYPE dfies, lo_field_catalog TYPE REF TO cl_abap_structdescr. DATA: lv_fieldname TYPE string, lt_fieldcat TYPE lvc_t_fcat, ls_fieldcat TYPE lvc_s_fcat, lv_headtext TYPE string, lv_bin_filesize TYPE i, lt_data_tab TYPE TABLE OF solisti1. FIELD-SYMBOLS: <lt_result> TYPE STANDARD TABLE. CREATE DATA lr_result_data LIKE et_table[]. ASSIGN lr_result_data->* TO <lt_result>. <lt_result> = et_table[]. lo_excel_export_service = cl_salv_export_tool_xls=>create_for_excel( lr_result_data ). lo_configuration = lo_excel_export_service->configuration( ). CREATE DATA lr_data_line LIKE LINE OF <lt_result>. lo_field_catalog ?= cl_abap_tabledescr=>describe_by_data_ref( lr_data_line ). lt_dfies = cl_salv_data_descr=>read_structdescr( lo_field_catalog ). LOOP AT lt_dfies INTO ls_dfies. " Text CLEAR ls_fieldcat. READ TABLE lt_fieldcat INTO ls_fieldcat WITH KEY fieldname = ls_dfies-fieldname. IF ls_fieldcat-coltext IS NOT INITIAL. lv_headtext = ls_fieldcat-coltext. ELSE. lv_headtext = ls_dfies-scrtext_l. ENDIF. lv_fieldname = ls_dfies-fieldname. lo_salv_export_column_conf = lo_configuration->add_column( header_text = lv_headtext field_name = lv_fieldname display_type = if_salv_export_column_conf=>display_types-text_view ). ENDLOOP. lo_excel_export_service->check_configuration( IMPORTING t_messages_info = lt_infos t_messages_warning = lt_warnings ). TRY. lo_excel_export_service->read_result( IMPORTING content = lv_content mime_type = lv_mime_type filename = lv_filename t_messages_info = lt_infos t_messages_warning = lt_warnings ). CATCH cx_salv_export_error. "#EC NO_HANDLER ENDTRY. lv_xstring = lv_content. lv_service = 'https://qyapi.weixin.qq.com/cgi-bin/webhook/upload_media?key=' && iv_key && '&type=file'. CALL METHOD cl_http_client=>create_by_url EXPORTING url = lv_service IMPORTING client = lo_http_client EXCEPTIONS argument_not_found = 1 plugin_not_active = 2 internal_error = 3. CALL METHOD lo_http_client->request->set_method( if_http_request=>co_request_method_post ). CALL METHOD lo_http_client->request->set_version( if_http_request=>co_protocol_version_1_0 ). CALL METHOD lo_http_client->request->if_http_entity~set_content_type( EXPORTING content_type = 'multipart/form-data' ). CALL METHOD lo_http_client->request->if_http_entity~set_formfield_encoding EXPORTING formfield_encoding = cl_http_request=>if_http_entity~co_encoding_raw. part = lo_http_client->request->if_http_entity~add_multipart( ). * LV_FILENAME = CL_HTTP_UTILITY=>UNESCAPE_URL( IV_FIELD_NAME ). lv_filename = iv_field_name. lv_fielname_length = strlen( lv_filename ). * LV_FILENAME = CL_HTTP_UTILITY=>ESCAPE_URL( IV_FIELD_NAME ). lv_head_field = 'form-data; name="media";filename="' && lv_filename && '"; filelength=' && lv_fielname_length . CALL METHOD part->set_header_field EXPORTING name = 'Content-Disposition' value = lv_head_field. CALL METHOD part->set_content_type EXPORTING content_type = 'application/octet-stream'. * content_type = 'text/plain'. lv_len = xstrlen( lv_xstring ). CALL METHOD part->set_data EXPORTING data = lv_xstring offset = 0 length = lv_len. CALL METHOD lo_http_client->send EXCEPTIONS http_communication_failure = 1 http_invalid_state = 2 http_processing_failed = 3 OTHERS = 4. "读取远程服务返回的处理过结果。 CALL METHOD lo_http_client->receive EXCEPTIONS http_communication_failure = 1 http_invalid_state = 2 http_processing_failed = 3. IF sy-subrc <> 0 . lo_http_client->get_last_error( IMPORTING message = lv_message ). * ZMESG-MESSAGE = LV_MESSAGE. * ZMESG-TYPE = 'E'. RETURN. ELSE. lv_result_string = lo_http_client->response->get_cdata( ). lo_respone_data = /ui2/cl_json=>generate( json = lv_result_string ). IF lo_respone_data IS NOT INITIAL. lv_field_symbols_string = 'LO_RESPONE_DATA->MEDIA_ID->*'. ASSIGN (lv_field_symbols_string) TO FIELD-SYMBOL(<fs_media_id>). IF <fs_media_id> IS ASSIGNED. ev_media_id = <fs_media_id>. zmesg-type = 'S'. zmesg-message = text-s04 && ev_media_id . APPEND zmesg. ELSE. zmesg-type = 'E'. zmesg-message = lv_result_string . APPEND zmesg. ENDIF. ELSE. zmesg-type = 'E'. zmesg-message = lv_result_string . APPEND zmesg. ENDIF. ENDIF. *----------------------------------------------------------------------- * SAVE function log ENDFUNCTION.