├── src ├── package.devc.xml ├── za2xh_email.fugr.lza2xh_emailtop.abap ├── fpm_enh │ ├── package.devc.xml │ ├── ze_a2xh_cl_fpm_tree_rendering.enho.a09a3301.abap │ ├── ze_a2xh_cl_fpm_list_uibb_rende.enho.51558c31.abap │ ├── ze_a2xh_fpm_enh.enhc.xml │ ├── ze_a2xh_fpmgb_export_format.doma.xml │ ├── zcl_a2xh_fpm_enh.clas.xml │ ├── ze_a2xh_cl_fpm_list_uibb_assis.enho.55729d2e.abap │ ├── ze_a2xh_cl_fpm_tree_assistance.enho.940ce275.abap │ ├── ze_a2xh_cl_fpm_tree_rendering.enho.xml │ ├── ze_a2xh_cl_fpm_list_uibb_assis.enho.xml │ ├── ze_a2xh_cl_fpm_tree_assistance.enho.xml │ ├── ze_a2xh_cl_fpm_list_uibb_rende.enho.xml │ └── zcl_a2xh_fpm_enh.clas.abap ├── za2xh_email.fugr.lza2xh_emailtop.xml ├── za2xh_email.fugr.saplza2xh_email.xml ├── za2xh_email_popup.wdya.xml ├── za2xh_upload_popup.wdya.xml ├── za2xh_email.fugr.lza2xh_emailf01.xml ├── za2xh_email.fugr.lza2xh_emaili01.xml ├── za2xh_email.fugr.lza2xh_emailo01.xml ├── za2xh_t_error_log.ttyp.xml ├── za2xh_t_fieldcatalog.ttyp.xml ├── za2xh_email.fugr.lza2xh_emaili01.abap ├── zcl_za2xh_email_popup.clas.xml ├── zcl_za2xh_upload_popup.clas.xml ├── za2xh_email.fugr.lza2xh_emailo01.abap ├── za2xh_email.fugr.za2xh_email_popup_gui.abap ├── za2xh_email.fugr.saplza2xh_email.abap ├── za2xh_s_fieldcatalog.tabl.xml ├── za2xh_email.fugr.lza2xh_emailf01.abap ├── zcl_abap2xlsx_helper_int.clas.xml ├── za2xh_s_error_log.tabl.xml ├── zcl_abap2xlsx_helper.clas.xml ├── za2xh_email.fugr.za2xh_email_rfc.abap ├── za2xh_email.fugr.za2xh_email.abap ├── zcl_za2xh_email_popup.clas.abap ├── zcl_za2xh_upload_popup.clas.abap ├── za2xh_email.fugr.xml ├── zcl_abap2xlsx_helper.clas.abap └── zcl_abap2xlsx_helper_int.clas.abap ├── .abapgit.xml ├── LICENSE └── README.md /src/package.devc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | abap2xlsx helper 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /src/za2xh_email.fugr.lza2xh_emailtop.abap: -------------------------------------------------------------------------------- 1 | FUNCTION-POOL za2xh_email. "MESSAGE-ID .. 2 | 3 | DATA: go_cont TYPE REF TO cl_gui_custom_container, 4 | go_edit TYPE REF TO cl_gui_textedit, 5 | go_assist TYPE REF TO zcl_za2xh_email_popup, 6 | gv_email TYPE string. 7 | 8 | * INCLUDE LZA2XH_EMAILD... " Local class definition 9 | -------------------------------------------------------------------------------- /src/fpm_enh/package.devc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | abap2xlsx helper FPM enhancements 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.abapgit.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | E 6 | /src/ 7 | PREFIX 8 | 9 | *.sicf.xml 10 | *.sush.xml 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /src/fpm_enh/ze_a2xh_cl_fpm_tree_rendering.enho.a09a3301.abap: -------------------------------------------------------------------------------- 1 | "Name: \TY:CL_FPM_TREE_RENDERING\ME:RENDER_TOOLBAR_C_TABLE\SE:END\EI 2 | ENHANCEMENT 0 ZE_A2XH_CL_FPM_TREE_RENDERING. 3 | * additional export menu. 4 | 5 | IF lo_export_btn_choice IS BOUND. 6 | zcl_a2xh_fpm_enh=>enh_cl_fpm_list_uibb_renderer_( 7 | EXPORTING 8 | io_export_btn_choice = lo_export_btn_choice 9 | iv_export_action = lc_export_action 10 | ). 11 | ENDIF. 12 | 13 | ENDENHANCEMENT. 14 | -------------------------------------------------------------------------------- /src/za2xh_email.fugr.lza2xh_emailtop.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | LZA2XH_EMAILTOP 7 | S 8 | D$ 9 | I 10 | S 11 | X 12 | D$S 13 | X 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /src/za2xh_email.fugr.saplza2xh_email.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | SAPLZA2XH_EMAIL 7 | S 8 | D$ 9 | F 10 | S 11 | E 12 | X 13 | D$S 14 | X 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /src/fpm_enh/ze_a2xh_cl_fpm_list_uibb_rende.enho.51558c31.abap: -------------------------------------------------------------------------------- 1 | "Name: \PR:CL_FPM_LIST_UIBB_RENDERER_ATS=CP\TY:LCL_TABLE_RENDERER\ME:RENDER_STANDARD_TOOLBAR_ITEMS\SE:END\EI 2 | ENHANCEMENT 0 ZE_A2XH_CL_FPM_LIST_UIBB_RENDE. 3 | * additional export menu. 4 | 5 | IF lo_export_btn_choice IS BOUND. 6 | zcl_a2xh_fpm_enh=>enh_cl_fpm_list_uibb_renderer_( 7 | EXPORTING 8 | io_export_btn_choice = lo_export_btn_choice 9 | iv_export_action = lif_renderer_constants=>cs_table_action-export 10 | ). 11 | ENDIF. 12 | 13 | ENDENHANCEMENT. 14 | -------------------------------------------------------------------------------- /src/za2xh_email_popup.wdya.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZA2XH_EMAIL_POPUP 7 | ZA2XH_EMAIL_POPUP 8 | W_TEST 9 | DEFAULT 10 | ZA2XH_EMAIL_POPUP 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /src/za2xh_upload_popup.wdya.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZA2XH_UPLOAD_POPUP 7 | ZA2XH_UPLOAD_POPUP 8 | W_TEST 9 | DEFAULT 10 | ZA2XH_UPLOAD_POPUP 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /src/za2xh_email.fugr.lza2xh_emailf01.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | LZA2XH_EMAILF01 7 | I 8 | S 9 | E 10 | X 11 | 12 | 13 | 14 | R 15 | Include LZA2XH_EMAILF01 16 | 23 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /src/za2xh_email.fugr.lza2xh_emaili01.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | LZA2XH_EMAILI01 7 | I 8 | S 9 | E 10 | X 11 | 12 | 13 | 14 | R 15 | Include LZA2XH_EMAILI01 16 | 23 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /src/za2xh_email.fugr.lza2xh_emailo01.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | LZA2XH_EMAILO01 7 | I 8 | S 9 | E 10 | X 11 | 12 | 13 | 14 | R 15 | Include LZA2XH_EMAILO01 16 | 23 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /src/fpm_enh/ze_a2xh_fpm_enh.enhc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | abap2xlsx helper FPM enhancements 6 | 7 | ZE_A2XH_CL_FPM_LIST_UIBB_ASSIS 8 | ZE_A2XH_CL_FPM_LIST_UIBB_RENDE 9 | ZE_A2XH_CL_FPM_TREE_RENDERING 10 | ZE_A2XH_CL_FPM_TREE_ASSISTANCE 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /src/za2xh_t_error_log.ttyp.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZA2XH_T_ERROR_LOG 7 | E 8 | ZA2XH_S_ERROR_LOG 9 | S 10 | STRU 11 | T 12 | D 13 | N 14 | error log of abap2xlsx helper 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /src/za2xh_t_fieldcatalog.ttyp.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZA2XH_T_FIELDCATALOG 7 | E 8 | ZA2XH_S_FIELDCATALOG 9 | S 10 | STRU 11 | T 12 | D 13 | N 14 | field catalog of abap2xlsx helper 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /src/za2xh_email.fugr.lza2xh_emaili01.abap: -------------------------------------------------------------------------------- 1 | *----------------------------------------------------------------------* 2 | ***INCLUDE LZA2XH_EMAILI01. 3 | *----------------------------------------------------------------------* 4 | *&---------------------------------------------------------------------* 5 | *& Module USER_COMMAND_2100 INPUT 6 | *&---------------------------------------------------------------------* 7 | * text 8 | *----------------------------------------------------------------------* 9 | MODULE user_command_2100 INPUT. 10 | CASE sy-ucomm. 11 | WHEN 'OK'. 12 | PERFORM on_ok. 13 | WHEN OTHERS. 14 | LEAVE TO SCREEN 0. 15 | ENDCASE. 16 | ENDMODULE. 17 | -------------------------------------------------------------------------------- /src/zcl_za2xh_email_popup.clas.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZCL_ZA2XH_EMAIL_POPUP 7 | E 8 | Assistance Class for ZA2XH_EMAIL_POPUP 9 | 1 10 | X 11 | X 12 | X 13 | 14 | 15 | 16 | ZCL_ZA2XH_EMAIL_POPUP 17 | CLASS_CONSTRUCTOR 18 | E 19 | CLASS_CONSTRUCTOR 20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /src/zcl_za2xh_upload_popup.clas.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZCL_ZA2XH_UPLOAD_POPUP 7 | E 8 | Assistance Class for ZA2XH_UPLOAD_POPUP 9 | 1 10 | X 11 | X 12 | X 13 | 14 | 15 | 16 | ZCL_ZA2XH_UPLOAD_POPUP 17 | CLASS_CONSTRUCTOR 18 | E 19 | CLASS_CONSTRUCTOR 20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /src/fpm_enh/ze_a2xh_fpmgb_export_format.doma.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZE_A2XH_FPMGB_EXPORT_FORMAT 7 | E 8 | X 9 | abap2xlsx helper FPM enhancements 10 | FPMGB_EXPORT_FORMAT 11 | 12 | 13 | 14 | 0001 15 | E 16 | ZA2X 17 | Excel by abap2xlsx 18 | 19 | 20 | 0002 21 | E 22 | ZA2E 23 | Email me 24 | 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /src/za2xh_email.fugr.lza2xh_emailo01.abap: -------------------------------------------------------------------------------- 1 | *----------------------------------------------------------------------* 2 | ***INCLUDE LZA2XH_EMAILO01. 3 | *----------------------------------------------------------------------* 4 | *&---------------------------------------------------------------------* 5 | *& Module STATUS_2100 OUTPUT 6 | *&---------------------------------------------------------------------* 7 | *& 8 | *&---------------------------------------------------------------------* 9 | MODULE status_2100 OUTPUT. 10 | SET PF-STATUS '2100'. 11 | SET TITLEBAR '2100'. 12 | 13 | IF go_edit IS INITIAL. 14 | CREATE OBJECT go_cont 15 | EXPORTING 16 | container_name = 'TEXT_EDIT'. 17 | CREATE OBJECT go_edit 18 | EXPORTING 19 | parent = go_cont. 20 | ENDIF. 21 | 22 | IF gv_email IS NOT INITIAL. 23 | go_edit->set_textstream( gv_email ). 24 | CLEAR: gv_email. 25 | ENDIF. 26 | 27 | go_edit->set_focus( go_edit ). 28 | 29 | ENDMODULE. 30 | -------------------------------------------------------------------------------- /src/za2xh_email.fugr.za2xh_email_popup_gui.abap: -------------------------------------------------------------------------------- 1 | FUNCTION za2xh_email_popup_gui . 2 | *"---------------------------------------------------------------------- 3 | *"*"Local Interface: 4 | *" IMPORTING 5 | *" REFERENCE(IO_EVENT_DATA) TYPE REF TO IF_FPM_PARAMETER 6 | *"---------------------------------------------------------------------- 7 | DATA: lt_receiver TYPE TABLE OF string. 8 | 9 | IF go_assist IS INITIAL. 10 | CREATE OBJECT go_assist. 11 | ENDIF. 12 | 13 | IF io_event_data IS NOT INITIAL. 14 | go_assist->mo_event_data = io_event_data. 15 | io_event_data->get_value( 16 | EXPORTING 17 | iv_key = 'IT_RECEIVER' 18 | IMPORTING 19 | ev_value = lt_receiver 20 | ). 21 | CONCATENATE LINES OF lt_receiver INTO gv_email SEPARATED BY cl_abap_char_utilities=>newline. 22 | ELSE. 23 | CREATE OBJECT go_assist->mo_event_data TYPE cl_fpm_parameter. 24 | ENDIF. 25 | 26 | IF go_edit IS NOT INITIAL. 27 | go_edit->delete_text( ). 28 | ENDIF. 29 | 30 | CALL SCREEN 2100 STARTING AT 5 5. 31 | 32 | ENDFUNCTION. 33 | -------------------------------------------------------------------------------- /src/fpm_enh/zcl_a2xh_fpm_enh.clas.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZCL_A2XH_FPM_ENH 7 | E 8 | abap2xlsx helper FPM enhancements 9 | 1 10 | X 11 | X 12 | X 13 | 14 | 15 | 16 | ZCL_A2XH_FPM_ENH 17 | ENH_CL_FPM_LIST_UIBB_ASSIST_AT 18 | E 19 | CL_FPM_LIST_UIBB_ASSIST_ATS 20 | 21 | 22 | ZCL_A2XH_FPM_ENH 23 | ENH_CL_FPM_LIST_UIBB_RENDERER_ 24 | E 25 | CL_FPM_LIST_UIBB_RENDERER_ATS 26 | 27 | 28 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /src/za2xh_email.fugr.saplza2xh_email.abap: -------------------------------------------------------------------------------- 1 | ******************************************************************* 2 | * System-defined Include-files. * 3 | ******************************************************************* 4 | INCLUDE LZA2XH_EMAILTOP. " Global Declarations 5 | INCLUDE LZA2XH_EMAILUXX. " Function Modules 6 | 7 | ******************************************************************* 8 | * User-defined Include-files (if necessary). * 9 | ******************************************************************* 10 | * INCLUDE LZA2XH_EMAILF... " Subroutines 11 | * INCLUDE LZA2XH_EMAILO... " PBO-Modules 12 | * INCLUDE LZA2XH_EMAILI... " PAI-Modules 13 | * INCLUDE LZA2XH_EMAILE... " Events 14 | * INCLUDE LZA2XH_EMAILP... " Local class implement. 15 | * INCLUDE LZA2XH_EMAILT99. " ABAP Unit tests 16 | 17 | INCLUDE lza2xh_emailo01. 18 | 19 | INCLUDE lza2xh_emaili01. 20 | 21 | INCLUDE lza2xh_emailf01. 22 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 Derby 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /src/fpm_enh/ze_a2xh_cl_fpm_list_uibb_assis.enho.55729d2e.abap: -------------------------------------------------------------------------------- 1 | "Name: \PR:CL_FPM_LIST_UIBB_ASSIST_ATS===CP\TY:LCL_EXPORT_ACTION\ME:EXECUTE\SE:BEGIN\EI 2 | ENHANCEMENT 0 ZE_A2XH_CL_FPM_LIST_UIBB_ASSIS. 3 | * additional export menu. 4 | DATA: zlrt_result_data TYPE REF TO data. 5 | 6 | IF me->mv_format CP 'Z*'. 7 | me->get_result_data( 8 | EXPORTING 9 | iv_data_only = abap_true 10 | IMPORTING 11 | ert_result_data = zlrt_result_data 12 | ). 13 | zcl_a2xh_fpm_enh=>enh_cl_fpm_list_uibb_assist_at( 14 | EXPORTING 15 | iv_format = me->mv_format 16 | irt_result_data = zlrt_result_data 17 | it_p13n_column = me->mo_list_uibb_assist->mo_personalization_api->get_current_variant( )->get_columns( ) 18 | it_field_usage = me->mo_list_uibb_assist->mt_field_usage 19 | iv_from_comp = me->mo_list_uibb_assist->mv_component_name 20 | io_c_table = cast CL_FPM_LIST_UIBB_RENDERER_ATS( me->mo_list_uibb_assist->mo_render )->get_table_ui_element( ) 21 | ). 22 | RETURN. 23 | ENDIF. 24 | 25 | ENDENHANCEMENT. 26 | -------------------------------------------------------------------------------- /src/za2xh_s_fieldcatalog.tabl.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZA2XH_S_FIELDCATALOG 7 | E 8 | INTTAB 9 | field catalog of abap2xlsx helper 10 | 11 | 12 | 13 | FIELDNAME 14 | FIELDNAME 15 | 0 16 | E 17 | 18 | 19 | LABEL_TEXT 20 | SCRTEXT_L 21 | 0 22 | E 23 | 24 | 25 | FIXED_VALUES 26 | WDR_CONTEXT_ATTR_VALUE_LIST 27 | 0 28 | TTYP 29 | TTYPL 30 | L 31 | 32 | 33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /src/za2xh_email.fugr.lza2xh_emailf01.abap: -------------------------------------------------------------------------------- 1 | *----------------------------------------------------------------------* 2 | ***INCLUDE LZA2XH_EMAILF01. 3 | *----------------------------------------------------------------------* 4 | *&---------------------------------------------------------------------* 5 | *& Form on_ok 6 | *&---------------------------------------------------------------------* 7 | *& text 8 | *&---------------------------------------------------------------------* 9 | *& --> p1 text 10 | *& <-- p2 text 11 | *&---------------------------------------------------------------------* 12 | FORM on_ok . 13 | DATA: lv_text TYPE string. 14 | 15 | go_edit->get_textstream( 16 | * EXPORTING 17 | * only_when_modified = false " get text only when modified 18 | IMPORTING 19 | text = lv_text " Text as String with Carriage Returns and Linefeeds 20 | * is_modified = is_modified " modify status of text 21 | * EXCEPTIONS 22 | * error_cntl_call_method = 1 " Error while retrieving a property from TextEdit control 23 | * not_supported_by_gui = 2 " Method is not supported by installed GUI 24 | * others = 3 25 | ). 26 | cl_gui_cfw=>flush( ). 27 | 28 | go_assist->mo_event_data->set_value( 29 | EXPORTING 30 | iv_key = 'IT_RECEIVER' 31 | iv_value = go_assist->split_email_string( lv_text ) 32 | ). 33 | 34 | go_assist->on_ok( ). 35 | LEAVE TO SCREEN 0. 36 | ENDFORM. 37 | -------------------------------------------------------------------------------- /src/fpm_enh/ze_a2xh_cl_fpm_tree_assistance.enho.940ce275.abap: -------------------------------------------------------------------------------- 1 | "Name: \PR:CL_FPM_TREE_ASSISTANCE========CP\TY:LCL_EXPORT_ACTION\ME:EXECUTE\SE:BEGIN\EI 2 | ENHANCEMENT 0 ZE_A2XH_CL_FPM_TREE_ASSISTANCE. 3 | * additional export menu. 4 | DATA: zlrt_result_data TYPE REF TO data, 5 | zlt_columns TYPE CL_FPM_GUIBB_BASE_RENDER=>T_COLUMN. 6 | 7 | IF me->mv_format CP 'Z*'. 8 | * zlt_columns = me->mo_tree_uibb_assist->mo_config_data->get_columns( iv_include_secondary_editors = abap_true ). 9 | zlt_columns = me->mo_tree_uibb_assist->mo_config_data->get_columns( ). 10 | me->create_result_data( 11 | EXPORTING 12 | irt_columns = ref #( zlt_columns ) 13 | iv_mc_image_src_field_name = me->get_master_col_image_src_field( ) 14 | irt_frontend_data = me->get_frontend_data( ) 15 | RECEIVING 16 | rrt_result_data = zlrt_result_data 17 | ). 18 | zcl_a2xh_fpm_enh=>enh_cl_fpm_list_uibb_assist_at( 19 | EXPORTING 20 | iv_format = me->mv_format 21 | irt_result_data = zlrt_result_data 22 | it_p13n_column = me->mo_tree_uibb_assist->mo_personalization_api->get_current_variant( )->get_columns( ) 23 | it_field_usage = me->mo_tree_uibb_assist->mt_field_usage 24 | iv_from_comp = me->mo_tree_uibb_assist->mv_component_name 25 | io_c_table = me->mo_tree_uibb_assist->mo_render_tree->mo_c_table 26 | ). 27 | RETURN. 28 | ENDIF. 29 | 30 | ENDENHANCEMENT. 31 | -------------------------------------------------------------------------------- /src/zcl_abap2xlsx_helper_int.clas.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZCL_ABAP2XLSX_HELPER_INT 7 | E 8 | abap2xlsx helper internal 9 | 1 10 | X 11 | X 12 | X 13 | 14 | 15 | 16 | ZCL_ABAP2XLSX_HELPER_INT 17 | CONVERT_ABAP_TO_EXCEL 18 | E 19 | Download 20 | 21 | 22 | ZCL_ABAP2XLSX_HELPER_INT 23 | CONVERT_EXCEL_TO_ABAP 24 | E 25 | Upload 26 | 27 | 28 | ZCL_ABAP2XLSX_HELPER_INT 29 | CONVERT_JSON_TO_EXCEL 30 | E 31 | Download 32 | 33 | 34 | ZCL_ABAP2XLSX_HELPER_INT 35 | EXCEL_DOWNLOAD 36 | E 37 | Download 38 | 39 | 40 | ZCL_ABAP2XLSX_HELPER_INT 41 | EXCEL_EMAIL 42 | E 43 | make excel file and send email 44 | 45 | 46 | ZCL_ABAP2XLSX_HELPER_INT 47 | EXCEL_UPLOAD 48 | E 49 | Upload 50 | 51 | 52 | 53 | 54 | 55 | -------------------------------------------------------------------------------- /src/za2xh_s_error_log.tabl.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZA2XH_S_ERROR_LOG 7 | E 8 | INTTAB 9 | error log of abap2xlsx helper 10 | 11 | 12 | 13 | ROW 14 | 0 15 | X 16 | 000004 17 | INT4 18 | 000010 19 | INT4 20 | Row 21 | 22 | 23 | FIELDNAME 24 | 0 25 | g 26 | 000008 27 | STRG 28 | STRG 29 | Fieldname 30 | 31 | 32 | ABAP_VALUE 33 | 0 34 | g 35 | 000008 36 | STRG 37 | STRG 38 | ABAP Value 39 | 40 | 41 | EXCEL_VALUE 42 | 0 43 | g 44 | 000008 45 | STRG 46 | STRG 47 | Excel Value 48 | 49 | 50 | EXCEL_COORDS 51 | 0 52 | g 53 | 000008 54 | STRG 55 | STRG 56 | Excel Coordinates 57 | 58 | 59 | 60 | 61 | 62 | -------------------------------------------------------------------------------- /src/fpm_enh/ze_a2xh_cl_fpm_tree_rendering.enho.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | HOOK_IMPL 6 | CL_FPM_TREE_RENDERING Rendering class for tree GUIBB 7 | 8 | R3TR 9 | CLAS 10 | CL_FPM_TREE_RENDERING 11 | CLAS 12 | CL_FPM_TREE_RENDERING 13 | CL_FPM_TREE_RENDERING=========CP 14 | 15 | 16 | 17 | CL_FPM_TREE_RENDERING=========CP 18 | D 19 | \TY:CL_FPM_TREE_RENDERING\ME:RENDER_TOOLBAR_C_TABLE\SE:END\EI 20 | 21 | 22 | 23 | 24 | \TY:CL_FPM_TREE_RENDERING\ME:RENDER_TOOLBAR_C_TABLE\SE:END\EI 25 | a09a3301 26 | 27 | 28 | 29 | 30 |
31 | E04F4306E0601EDBB4FD594D725E98D6 32 | E 33 | 1 34 | AAI= 35 |
36 | 37 | 38 | E04F4306E0601EDBB4FD594D725E98D6 39 | E 40 | 0001 41 | X 42 | R 43 | 078 44 | CL_FPM_TREE_RENDERING Rendering class for tree GUIBB 45 | 46 | 47 |
48 |
49 | 50 | 51 | R3TR 52 | ENHO 53 | ZE_A2XH_CL_FPM_TREE_RENDERING 54 | E04F4306E0601EDBB4FD594D725E98D6 55 | 0001 56 | 57 | 58 |
59 |
60 |
61 | -------------------------------------------------------------------------------- /src/fpm_enh/ze_a2xh_cl_fpm_list_uibb_assis.enho.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | HOOK_IMPL 6 | CL_FPM_LIST_UIBB_ASSIST_ATS: List UIBB 7 | 8 | R3TR 9 | CLAS 10 | CL_FPM_LIST_UIBB_ASSIST_ATS 11 | CLAS 12 | CL_FPM_LIST_UIBB_ASSIST_ATS 13 | CL_FPM_LIST_UIBB_ASSIST_ATS===CP 14 | 15 | 16 | 17 | CL_FPM_LIST_UIBB_ASSIST_ATS===CP 18 | D 19 | \PR:CL_FPM_LIST_UIBB_ASSIST_ATS===CP\TY:LCL_EXPORT_ACTION\ME:EXECUTE\SE:BEGIN\EI 20 | 21 | 22 | 23 | 24 | \PR:CL_FPM_LIST_UIBB_ASSIST_ATS===CP\TY:LCL_EXPORT_ACTION\ME:EXECUTE\SE:BEGIN\EI 25 | 55729d2e 26 | 27 | 28 | 29 | 30 |
31 | E04F4306E0601EDBB4FCC8E76D775644 32 | E 33 | 1 34 | AAI= 35 |
36 | 37 | 38 | E04F4306E0601EDBB4FCC8E76D775644 39 | E 40 | 0001 41 | X 42 | R 43 | 057 44 | CL_FPM_LIST_UIBB_ASSIST_ATS: List UIBB 45 | 46 | 47 |
48 |
49 | 50 | 51 | R3TR 52 | ENHO 53 | ZE_A2XH_CL_FPM_LIST_UIBB_ASSIS 54 | E04F4306E0601EDBB4FCC8E76D775644 55 | 0001 56 | 57 | 58 |
59 |
60 |
61 | -------------------------------------------------------------------------------- /src/fpm_enh/ze_a2xh_cl_fpm_tree_assistance.enho.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | HOOK_IMPL 6 | CL_FPM_TREE_ASSISTANCE Assistance class for TREE GUIBB 7 | 8 | R3TR 9 | CLAS 10 | CL_FPM_TREE_ASSISTANCE 11 | CLAS 12 | CL_FPM_TREE_ASSISTANCE 13 | CL_FPM_TREE_ASSISTANCE========CP 14 | 15 | 16 | 17 | CL_FPM_TREE_ASSISTANCE========CP 18 | D 19 | \PR:CL_FPM_TREE_ASSISTANCE========CP\TY:LCL_EXPORT_ACTION\ME:EXECUTE\SE:BEGIN\EI 20 | 21 | 22 | 23 | 24 | \PR:CL_FPM_TREE_ASSISTANCE========CP\TY:LCL_EXPORT_ACTION\ME:EXECUTE\SE:BEGIN\EI 25 | 940ce275 26 | 27 | 28 | 29 | 30 |
31 | E04F4306E0601EDBB4FD80FE366DD9A5 32 | E 33 | 1 34 | AAI= 35 |
36 | 37 | 38 | E04F4306E0601EDBB4FD80FE366DD9A5 39 | E 40 | 0001 41 | X 42 | R 43 | 081 44 | CL_FPM_TREE_ASSISTANCE Assistance class for TREE GUIBB 45 | 46 | 47 |
48 |
49 | 50 | 51 | R3TR 52 | ENHO 53 | ZE_A2XH_CL_FPM_TREE_ASSISTANCE 54 | E04F4306E0601EDBB4FD80FE366DD9A5 55 | 0001 56 | 57 | 58 |
59 |
60 |
61 | -------------------------------------------------------------------------------- /src/fpm_enh/ze_a2xh_cl_fpm_list_uibb_rende.enho.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | HOOK_IMPL 6 | CL_FPM_LIST_UIBB_RENDERER_ATS : List UIBB renderer 7 | 8 | R3TR 9 | CLAS 10 | CL_FPM_LIST_UIBB_RENDERER_ATS 11 | CLAS 12 | CL_FPM_LIST_UIBB_RENDERER_ATS 13 | CL_FPM_LIST_UIBB_RENDERER_ATS=CP 14 | 15 | 16 | 17 | CL_FPM_LIST_UIBB_RENDERER_ATS=CP 18 | D 19 | \PR:CL_FPM_LIST_UIBB_RENDERER_ATS=CP\TY:LCL_TABLE_RENDERER\ME:RENDER_STANDARD_TOOLBAR_ITEMS\SE:END\EI 20 | 21 | 22 | 23 | 24 | \PR:CL_FPM_LIST_UIBB_RENDERER_ATS=CP\TY:LCL_TABLE_RENDERER\ME:RENDER_STANDARD_TOOLBAR_ITEMS\SE:END\EI 25 | 51558c31 26 | 27 | 28 | 29 | 30 |
31 | E04F4306E0601EDBB4FCD63F7EDE9656 32 | E 33 | 1 34 | AAI= 35 |
36 | 37 | 38 | E04F4306E0601EDBB4FCD63F7EDE9656 39 | E 40 | 0001 41 | X 42 | R 43 | 075 44 | CL_FPM_LIST_UIBB_RENDERER_ATS : List UIBB renderer 45 | 46 | 47 |
48 |
49 | 50 | 51 | R3TR 52 | ENHO 53 | ZE_A2XH_CL_FPM_LIST_UIBB_RENDE 54 | E04F4306E0601EDBB4FCD63F7EDE9656 55 | 0001 56 | 57 | 58 |
59 |
60 |
61 | -------------------------------------------------------------------------------- /src/zcl_abap2xlsx_helper.clas.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZCL_ABAP2XLSX_HELPER 7 | E 8 | abap2xlsx helper 9 | 1 10 | X 11 | X 12 | X 13 | 14 | 15 | 16 | ZCL_ABAP2XLSX_HELPER 17 | CONVERT_ABAP_TO_EXCEL 18 | E 19 | Download 20 | 21 | 22 | ZCL_ABAP2XLSX_HELPER 23 | CONVERT_EXCEL_TO_ABAP 24 | E 25 | Upload 26 | 27 | 28 | ZCL_ABAP2XLSX_HELPER 29 | CONVERT_JSON_TO_EXCEL 30 | E 31 | Download 32 | 33 | 34 | ZCL_ABAP2XLSX_HELPER 35 | EXCEL_DOWNLOAD 36 | E 37 | Download 38 | 39 | 40 | ZCL_ABAP2XLSX_HELPER 41 | EXCEL_EMAIL 42 | E 43 | make excel file and send email 44 | 45 | 46 | ZCL_ABAP2XLSX_HELPER 47 | EXCEL_UPLOAD 48 | E 49 | Upload 50 | 51 | 52 | ZCL_ABAP2XLSX_HELPER 53 | FPM_UPLOAD_POPUP 54 | E 55 | FPM file upload 56 | 57 | 58 | ZCL_ABAP2XLSX_HELPER 59 | TEST 60 | E 61 | Do Not Call. This is test. 62 | 63 | 64 | ZCL_ABAP2XLSX_HELPER 65 | WD_UPLOAD_POPUP 66 | E 67 | WD file upload 68 | 69 | 70 | 71 | 72 | 73 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # ABAP2XLSX_HELPER 2 | abap2xlsx helper 3 | 4 | [**Korean**](#korean) 5 |  ·  6 | [**English**](#english) 7 | 8 | ## Korean 9 | ### 필수 설치 10 | - [abap2xlsx](https://github.com/sapmentors/abap2xlsx)를 우선 설치하세요. 11 | ### 아래의 메소드를 사용할 수 있습니다. 12 | - ZCL_ABAP2XLSX_HELPER=>EXCEL_DOWNLOAD 13 |
인터널 테이블 내용을 엑셀 파일로 다운로드 합니다.
14 | - ZCL_ABAP2XLSX_HELPER=>EXCEL_EMAIL 15 |
인터널 테이블 내용을 엑셀 파일로 첨부하여 이메일을 발송 합니다. 변환작업을 백그라운드로 처리하므로 실행은 바로 끝납니다. 용량에 따라 이메일이 늦게 도착 할 수 있습니다.
16 | - ZCL_ABAP2XLSX_HELPER=>EXCEL_UPLOAD 17 |
엑셀 파일을 업로드하여 인터널 테이블에 넣습니다.
18 | - ZCL_ABAP2XLSX_HELPER=>GET_FIELDCATALOG 19 | - ZCL_ABAP2XLSX_HELPER=>CONVERT_ABAP_TO_EXCEL 20 |
인터널 테이블 내용을 엑셀 파일(XSTRING)로 변환 합니다.
21 | - ZCL_ABAP2XLSX_HELPER=>CONVERT_JSON_TO_EXCEL 22 |
JSON 표현의 데이터를 읽어 엑셀 파일(XSTRING)로 변환 합니다.
23 | - ZCL_ABAP2XLSX_HELPER=>CONVERT_EXCEL_TO_ABAP 24 |
엑셀 파일(XSTRING)을 읽어 인터널 테이블에 넣습니다.
25 | - ZCL_ABAP2XLSX_HELPER=>GET_XSTRING_FROM_SMW0 26 |
SMW0에 업로드한 이미지 파일을 읽어서 XSTRING으로 변환 합니다. 엑셀 다운로드시 IV_IMAGE_XSTRING 파라미터로 전달하면 이미지를 추가 할 수 있습니다.
27 | - ZCL_ABAP2XLSX_HELPER=>FPM_UPLOAD_POPUP 28 | - ZCL_ABAP2XLSX_HELPER=>GET_DDIC_FIXED_VALUES 29 | 30 | ### FPM enhancements @ list UIBB 31 |
![image](https://user-images.githubusercontent.com/75079431/124207191-ebb66380-db1f-11eb-8b1e-1f6cc0466a16.png) 32 |
Excel by abap2xlsx : 다운로드 실행 ZCL_ABAP2XLSX_HELPER=>EXCEL_DOWNLOAD 33 |
Email me : 이메일 전송 실행 ZCL_ABAP2XLSX_HELPER=>EXCEL_EMAIL 34 |
35 | 36 | 37 | ## English 38 | ### Prerequisite 39 | - Install [abap2xlsx](https://github.com/sapmentors/abap2xlsx) first. 40 | ### You can use these methods. 41 | - ZCL_ABAP2XLSX_HELPER=>EXCEL_DOWNLOAD 42 |
convert abap internal table to excel file and start to download.
43 | - ZCL_ABAP2XLSX_HELPER=>EXCEL_EMAIL 44 |
convert abap internal table to excel file and send by email. execution is finished quickly. converting is processed in background. in case of large convertion, email delays can occur
45 | - ZCL_ABAP2XLSX_HELPER=>EXCEL_UPLOAD 46 |
start to upload file and convert excel file to abap internal table.
47 | - ZCL_ABAP2XLSX_HELPER=>GET_FIELDCATALOG 48 | - ZCL_ABAP2XLSX_HELPER=>CONVERT_ABAP_TO_EXCEL 49 |
convert abap internal table to excel XSTRING
50 | - ZCL_ABAP2XLSX_HELPER=>CONVERT_JSON_TO_EXCEL 51 |
convert JSON data(it must come from abap internal table) to excel XSTRING
52 | - ZCL_ABAP2XLSX_HELPER=>CONVERT_EXCEL_TO_ABAP 53 |
convert excel XSTRING to abap internal table.
54 | - ZCL_ABAP2XLSX_HELPER=>GET_XSTRING_FROM_SMW0 55 |
convert image file from SMW0 to XSTRING. if add image to excel, use IV_IMAGE_XSTRING parameter.
56 | - ZCL_ABAP2XLSX_HELPER=>FPM_UPLOAD_POPUP 57 | - ZCL_ABAP2XLSX_HELPER=>GET_DDIC_FIXED_VALUES 58 | 59 | ### FPM enhancements @ list UIBB 60 |
![image](https://user-images.githubusercontent.com/75079431/124207191-ebb66380-db1f-11eb-8b1e-1f6cc0466a16.png) 61 |
Excel by abap2xlsx : it calls ZCL_ABAP2XLSX_HELPER=>EXCEL_DOWNLOAD 62 |
Email me : it calls ZCL_ABAP2XLSX_HELPER=>EXCEL_EMAIL 63 |
64 | -------------------------------------------------------------------------------- /src/za2xh_email.fugr.za2xh_email_rfc.abap: -------------------------------------------------------------------------------- 1 | FUNCTION za2xh_email_rfc. 2 | *"---------------------------------------------------------------------- 3 | *"*"Local Interface: 4 | *" IMPORTING 5 | *" VALUE(IV_DATA_JSON) TYPE STRING 6 | *" VALUE(IT_DDIC_OBJECT) TYPE DD_X031L_TABLE 7 | *" VALUE(IT_FIELD) TYPE ZA2XH_T_FIELDCATALOG 8 | *" VALUE(IV_SUBJECT) TYPE STRING OPTIONAL 9 | *" VALUE(IV_SENDER) TYPE STRING OPTIONAL 10 | *" VALUE(IT_RECEIVER) TYPE STRINGTAB 11 | *" VALUE(IV_FILENAME) TYPE STRING OPTIONAL 12 | *" VALUE(IV_SHEET_TITLE) TYPE STRING OPTIONAL 13 | *" VALUE(IV_IMAGE_XSTRING) TYPE XSTRING OPTIONAL 14 | *" VALUE(IV_ADD_FIXEDVALUE_SHEET) TYPE FLAG DEFAULT ABAP_TRUE 15 | *" VALUE(IV_AUTO_COLUMN_WIDTH) TYPE FLAG DEFAULT ABAP_TRUE 16 | *" VALUE(IV_DEFAULT_DESCR) TYPE CHAR1 DEFAULT 'L' 17 | *"---------------------------------------------------------------------- 18 | DATA: lv_excel TYPE xstring, 19 | lo_bcs TYPE REF TO cl_bcs, 20 | lv_subject TYPE string, 21 | lv_string TYPE string, 22 | lv_email TYPE ad_smtpadr, 23 | lv_filename TYPE sood-objdes, 24 | lv_filesize TYPE sood-objlen, 25 | lt_filecontent TYPE solix_tab, 26 | lo_document TYPE REF TO cl_document_bcs. 27 | FIELD-SYMBOLS: TYPE table. 28 | 29 | CHECK: iv_data_json IS NOT INITIAL AND it_field IS NOT INITIAL. 30 | 31 | zcl_abap2xlsx_helper=>convert_json_to_excel( 32 | EXPORTING 33 | iv_data_json = iv_data_json 34 | it_ddic_object = it_ddic_object 35 | it_field = it_field 36 | iv_sheet_title = iv_sheet_title 37 | iv_image_xstring = iv_image_xstring 38 | iv_add_fixedvalue_sheet = iv_add_fixedvalue_sheet 39 | iv_auto_column_width = iv_auto_column_width 40 | iv_default_descr = iv_default_descr 41 | IMPORTING 42 | ev_excel = lv_excel 43 | * ev_error_text = ev_error_text 44 | ). 45 | CHECK: lv_excel IS NOT INITIAL. 46 | 47 | " filename 48 | IF iv_filename IS NOT INITIAL. 49 | lv_filename = iv_filename. 50 | ELSE. 51 | lv_filename = zcl_abap2xlsx_helper=>default_excel_filename( ). 52 | ENDIF. 53 | 54 | " subject 55 | IF iv_subject IS NOT INITIAL. 56 | lv_subject = iv_subject. 57 | ELSE. 58 | lv_subject = lv_filename. 59 | ENDIF. 60 | 61 | 62 | TRY. 63 | lo_bcs = cl_bcs=>create_persistent( ). 64 | 65 | cl_document_bcs=>create_document( 66 | EXPORTING 67 | i_type = 'RAW' " Code for Document Class 68 | i_subject = CONV #( lv_subject ) " Short Description of Contents 69 | * i_length = i_length " Size of Document Content 70 | * i_language = space " Language in Which Document Is Created 71 | * i_importance = i_importance " Document priority 72 | * i_sensitivity = i_sensitivity " Object: Sensitivity (private, functional, ...) 73 | i_text = VALUE #( ( line = 'attached' ) ) " Content (Text-Like) 74 | * i_hex = i_hex " Content (Binary) 75 | * i_header = i_header " Objcont and Objhead as Table Type 76 | * i_sender = i_sender " BCS: Represents a BAS Address 77 | * iv_vsi_profile = iv_vsi_profile " Virus Scan Profile 78 | RECEIVING 79 | result = lo_document " Wrapper Class for Office Documents 80 | ). 81 | 82 | " sender 83 | IF iv_sender IS NOT INITIAL. 84 | lv_email = iv_sender. 85 | lo_bcs->set_sender( cl_cam_address_bcs=>create_internet_address( lv_email ) ). 86 | ENDIF. 87 | 88 | " receiver 89 | LOOP AT it_receiver INTO lv_string. 90 | lv_email = lv_string. 91 | lo_bcs->add_recipient( cl_cam_address_bcs=>create_internet_address( lv_email ) ). 92 | ENDLOOP. 93 | 94 | 95 | " attachment 96 | lv_filesize = xstrlen( lv_excel ). 97 | lt_filecontent = cl_bcs_convert=>xstring_to_solix( lv_excel ). 98 | 99 | lo_document->add_attachment( 100 | EXPORTING 101 | i_attachment_type = 'xls' " Document Class for Attachment 102 | i_attachment_subject = lv_filename " Attachment Title 103 | i_attachment_size = lv_filesize " Size of Document Content 104 | * i_attachment_language = space " Language in Which Attachment Is Created 105 | * i_att_content_text = i_att_content_text " Content (Text-Like) 106 | i_att_content_hex = lt_filecontent " Content (Binary) 107 | * i_attachment_header = i_attachment_header " Attachment Header Data 108 | * iv_vsi_profile = iv_vsi_profile " Virus Scan Profile 109 | ). 110 | 111 | " send 112 | lo_bcs->set_document( lo_document ). 113 | lo_bcs->set_message_subject( lv_subject ). 114 | lo_bcs->send_without_dialog( ). 115 | 116 | COMMIT WORK. 117 | 118 | CATCH cx_bcs. 119 | 120 | ENDTRY. 121 | 122 | ENDFUNCTION. 123 | -------------------------------------------------------------------------------- /src/za2xh_email.fugr.za2xh_email.abap: -------------------------------------------------------------------------------- 1 | FUNCTION za2xh_email. 2 | *"---------------------------------------------------------------------- 3 | *"*"Local Interface: 4 | *" IMPORTING 5 | *" REFERENCE(IT_DATA) TYPE TABLE 6 | *" REFERENCE(IT_FIELD) TYPE ZA2XH_T_FIELDCATALOG OPTIONAL 7 | *" REFERENCE(IV_SUBJECT) TYPE CLIKE OPTIONAL 8 | *" REFERENCE(IV_SENDER) TYPE CLIKE OPTIONAL 9 | *" REFERENCE(IT_RECEIVER) TYPE STRINGTAB 10 | *" REFERENCE(IV_FILENAME) TYPE CLIKE OPTIONAL 11 | *" REFERENCE(IV_SHEET_TITLE) TYPE CLIKE OPTIONAL 12 | *" REFERENCE(IV_IMAGE_XSTRING) TYPE XSTRING OPTIONAL 13 | *" REFERENCE(IV_ADD_FIXEDVALUE_SHEET) TYPE FLAG DEFAULT ABAP_TRUE 14 | *" REFERENCE(IV_AUTO_COLUMN_WIDTH) TYPE FLAG DEFAULT ABAP_TRUE 15 | *" REFERENCE(IV_DEFAULT_DESCR) TYPE C DEFAULT 'L' 16 | *"---------------------------------------------------------------------- 17 | DATA: lt_field TYPE za2xh_t_fieldcatalog, 18 | lv_xstring TYPE xstring, 19 | lv_filename_string TYPE string, 20 | lv_parti TYPE i VALUE 50000, 21 | lv_count TYPE i, 22 | lv_from TYPE i, 23 | lv_to TYPE i, 24 | lr_data TYPE REF TO data, 25 | ls_comp TYPE abap_componentdescr, 26 | lt_comp TYPE abap_component_tab, 27 | lo_tab_type TYPE REF TO cl_abap_tabledescr, 28 | lo_struc_type TYPE REF TO cl_abap_structdescr, 29 | lv_data_json TYPE string, 30 | lt_comp_view TYPE abap_component_view_tab, 31 | ls_comp_view TYPE abap_simple_componentdescr, 32 | lt_ddic_object TYPE dd_x031l_table, 33 | lv_index TYPE i. 34 | * CLEAR ev_error_text. 35 | FIELD-SYMBOLS: TYPE table, 36 | TYPE table, 37 | TYPE za2xh_s_fieldcatalog. 38 | 39 | IF it_field IS NOT INITIAL. 40 | lt_field = it_field. 41 | ELSE. 42 | zcl_abap2xlsx_helper=>get_fieldcatalog( 43 | EXPORTING 44 | it_data = it_data 45 | * iv_default_descr = 'L' 46 | IMPORTING 47 | et_field = lt_field 48 | ). 49 | ENDIF. 50 | 51 | lo_tab_type ?= cl_abap_tabledescr=>describe_by_data( it_data ). 52 | lo_struc_type ?= lo_tab_type->get_table_line_type( ). 53 | lo_struc_type->get_ddic_object( 54 | RECEIVING 55 | p_object = lt_ddic_object 56 | EXCEPTIONS 57 | not_found = 1 58 | no_ddic_type = 2 59 | others = 3 60 | ). 61 | lt_comp_view = lo_struc_type->get_included_view( ). 62 | SORT lt_comp_view BY name. 63 | LOOP AT lt_field ASSIGNING . 64 | READ TABLE lt_comp_view INTO ls_comp_view WITH KEY name = -fieldname BINARY SEARCH. 65 | IF sy-subrc <> 0. 66 | DELETE lt_field. 67 | CONTINUE. 68 | ENDIF. 69 | 70 | IF -fixed_values IS INITIAL. 71 | -fixed_values = zcl_abap2xlsx_helper=>get_ddic_fixed_values( ls_comp_view-type ). 72 | ENDIF. 73 | 74 | ls_comp-name = -fieldname. 75 | ls_comp-type = cl_abap_elemdescr=>get_string( ). 76 | APPEND ls_comp TO lt_comp. 77 | ENDLOOP. 78 | 79 | 80 | 81 | CHECK: lt_comp IS NOT INITIAL. 82 | lo_tab_type = cl_abap_tabledescr=>create( cl_abap_structdescr=>create( lt_comp ) ). 83 | CREATE DATA lr_data TYPE HANDLE lo_tab_type. 84 | ASSIGN lr_data->* TO . 85 | MOVE-CORRESPONDING it_data[] TO . 86 | 87 | CREATE DATA lr_data LIKE . 88 | ASSIGN lr_data->* TO . 89 | 90 | 91 | 92 | lv_count = lines( ). 93 | lv_from = 1. 94 | WHILE lv_from <= lv_count. 95 | lv_index = lv_index + 1. 96 | lv_to = lv_from + lv_parti - 1. 97 | CLEAR: , lv_filename_string, lv_data_json. 98 | INSERT LINES OF FROM lv_from TO lv_to INTO TABLE . 99 | /ui2/cl_json=>serialize( 100 | EXPORTING 101 | data = 102 | RECEIVING 103 | r_json = lv_data_json 104 | ). 105 | 106 | 107 | IF iv_filename IS NOT INITIAL. 108 | lv_filename_string = iv_filename. 109 | ELSE. 110 | lv_filename_string = zcl_abap2xlsx_helper=>default_excel_filename( ). 111 | ENDIF. 112 | IF lv_index EQ 1 AND lv_to >= lv_count. 113 | " 파일 1개. 114 | ELSE. 115 | REPLACE '.xlsx' IN lv_filename_string WITH '' IGNORING CASE. 116 | lv_filename_string = |{ lv_filename_string }_part{ lv_index }.xlsx|. 117 | ENDIF. 118 | 119 | 120 | CALL FUNCTION 'ZA2XH_EMAIL_RFC' 121 | IN BACKGROUND TASK AS SEPARATE UNIT 122 | EXPORTING 123 | iv_data_json = lv_data_json 124 | it_ddic_object = lt_ddic_object 125 | it_field = lt_field 126 | iv_subject = CONV string( iv_subject ) 127 | iv_sender = CONV string( iv_sender ) 128 | it_receiver = it_receiver 129 | iv_filename = lv_filename_string 130 | iv_sheet_title = CONV string( iv_sheet_title ) 131 | iv_image_xstring = iv_image_xstring 132 | iv_add_fixedvalue_sheet = iv_add_fixedvalue_sheet 133 | iv_auto_column_width = iv_auto_column_width 134 | iv_default_descr = iv_default_descr. 135 | 136 | lv_from = lv_from + lv_parti. 137 | ENDWHILE. 138 | 139 | COMMIT WORK. 140 | 141 | ENDFUNCTION. 142 | -------------------------------------------------------------------------------- /src/zcl_za2xh_email_popup.clas.abap: -------------------------------------------------------------------------------- 1 | CLASS zcl_za2xh_email_popup DEFINITION 2 | PUBLIC 3 | INHERITING FROM cl_wd_component_assistance 4 | CREATE PUBLIC . 5 | 6 | PUBLIC SECTION. 7 | 8 | DATA mo_event_data TYPE REF TO if_fpm_parameter . 9 | DATA mo_comp_usage TYPE REF TO if_wd_component_usage . 10 | CLASS-DATA gv_wd_comp_id TYPE string READ-ONLY . 11 | CLASS-DATA go_wd_comp TYPE REF TO ziwci_a2xh_email_popup READ-ONLY . 12 | 13 | CLASS-METHODS class_constructor . 14 | CLASS-METHODS open_popup 15 | IMPORTING 16 | !io_event_data TYPE REF TO if_fpm_parameter OPTIONAL . 17 | METHODS on_ok . 18 | METHODS on_close 19 | FOR EVENT window_closed OF if_wd_window . 20 | CLASS-METHODS split_email_string 21 | IMPORTING 22 | !iv_input TYPE clike 23 | RETURNING 24 | VALUE(rt_email) TYPE stringtab . 25 | CLASS-METHODS get_default_receiver 26 | RETURNING 27 | VALUE(rt_receiver) TYPE stringtab . 28 | PROTECTED SECTION. 29 | PRIVATE SECTION. 30 | ENDCLASS. 31 | 32 | 33 | 34 | CLASS ZCL_ZA2XH_EMAIL_POPUP IMPLEMENTATION. 35 | 36 | 37 | METHOD class_constructor. 38 | gv_wd_comp_id = CAST cl_abap_refdescr( cl_abap_typedescr=>describe_by_data( go_wd_comp ) )->get_referenced_type( )->get_relative_name( ). 39 | REPLACE 'IWCI_' IN gv_wd_comp_id WITH ''. 40 | ENDMETHOD. 41 | 42 | 43 | METHOD get_default_receiver. 44 | DATA: lv_my_email TYPE string, 45 | lt_error_table TYPE TABLE OF rpbenerr. 46 | 47 | CALL FUNCTION 'HR_FBN_GET_USER_EMAIL_ADDRESS' 48 | EXPORTING 49 | user_id = sy-uname 50 | reaction = 'N' 51 | IMPORTING 52 | email_address = lv_my_email 53 | * subrc = subrc " Return Value, Return Value After ABAP Statements 54 | TABLES 55 | error_table = lt_error_table. " Benefit structure for error table 56 | 57 | IF lv_my_email IS NOT INITIAL. 58 | APPEND lv_my_email TO rt_receiver. 59 | ENDIF. 60 | ENDMETHOD. 61 | 62 | 63 | METHOD on_close. 64 | mo_comp_usage->delete_component( ). 65 | ENDMETHOD. 66 | 67 | 68 | METHOD on_ok. 69 | DATA: lr_data TYPE REF TO data, 70 | lt_field TYPE za2xh_t_fieldcatalog, 71 | lv_subject TYPE string, 72 | lv_sender TYPE string, 73 | lt_receiver TYPE TABLE OF string, 74 | lv_filename TYPE string, 75 | lv_sheet_title TYPE string, 76 | lv_image_xstring TYPE xstring, 77 | lv_add_fixedvalue_sheet TYPE flag, 78 | lv_auto_column_width TYPE flag, 79 | lv_default_descr TYPE char1. 80 | FIELD-SYMBOLS: TYPE table. 81 | 82 | mo_event_data->get_value( 83 | EXPORTING 84 | iv_key = 'IT_DATA' 85 | IMPORTING 86 | * ev_value = ev_value 87 | er_value = lr_data 88 | ). 89 | ASSIGN lr_data->* TO . 90 | CHECK: sy-subrc EQ 0. 91 | 92 | mo_event_data->get_value( 93 | EXPORTING 94 | iv_key = 'IT_FIELD' 95 | IMPORTING 96 | ev_value = lt_field 97 | ). 98 | 99 | mo_event_data->get_value( 100 | EXPORTING 101 | iv_key = 'IV_SUBJECT' 102 | IMPORTING 103 | ev_value = lv_subject 104 | ). 105 | 106 | mo_event_data->get_value( 107 | EXPORTING 108 | iv_key = 'IV_SENDER' 109 | IMPORTING 110 | ev_value = lv_sender 111 | ). 112 | 113 | mo_event_data->get_value( 114 | EXPORTING 115 | iv_key = 'IT_RECEIVER' 116 | IMPORTING 117 | ev_value = lt_receiver 118 | ). 119 | 120 | mo_event_data->get_value( 121 | EXPORTING 122 | iv_key = 'IV_FILENAME' 123 | IMPORTING 124 | ev_value = lv_filename 125 | ). 126 | 127 | mo_event_data->get_value( 128 | EXPORTING 129 | iv_key = 'IV_SHEET_TITLE' 130 | IMPORTING 131 | ev_value = lv_sheet_title 132 | ). 133 | 134 | mo_event_data->get_value( 135 | EXPORTING 136 | iv_key = 'IV_IMAGE_XSTRING' 137 | IMPORTING 138 | ev_value = lv_image_xstring 139 | ). 140 | 141 | mo_event_data->get_value( 142 | EXPORTING 143 | iv_key = 'IV_ADD_FIXEDVALUE_SHEET' 144 | IMPORTING 145 | ev_value = lv_add_fixedvalue_sheet 146 | ). 147 | 148 | mo_event_data->get_value( 149 | EXPORTING 150 | iv_key = 'IV_AUTO_COLUMN_WIDTH' 151 | IMPORTING 152 | ev_value = lv_auto_column_width 153 | ). 154 | 155 | mo_event_data->get_value( 156 | EXPORTING 157 | iv_key = 'IV_DEFAULT_DESCR' 158 | IMPORTING 159 | ev_value = lv_default_descr 160 | ). 161 | 162 | 163 | CALL FUNCTION 'ZA2XH_EMAIL' 164 | EXPORTING 165 | it_data = 166 | it_field = lt_field 167 | iv_subject = lv_subject 168 | iv_sender = lv_sender 169 | it_receiver = lt_receiver 170 | iv_filename = lv_filename 171 | iv_sheet_title = lv_sheet_title 172 | iv_image_xstring = lv_image_xstring 173 | iv_add_fixedvalue_sheet = lv_add_fixedvalue_sheet 174 | iv_auto_column_width = lv_auto_column_width 175 | iv_default_descr = lv_default_descr. 176 | 177 | ENDMETHOD. 178 | 179 | 180 | METHOD open_popup. 181 | DATA: lo_comp_usage TYPE REF TO if_wd_component_usage. 182 | 183 | cl_wdr_runtime_services=>get_component_usage( 184 | EXPORTING 185 | component = wdr_task=>application->component 186 | used_component_name = gv_wd_comp_id 187 | component_usage_name = gv_wd_comp_id 188 | create_component = abap_true 189 | do_create = abap_true 190 | RECEIVING 191 | component_usage = lo_comp_usage 192 | ). 193 | 194 | go_wd_comp ?= lo_comp_usage->get_interface_controller( ). 195 | 196 | go_wd_comp->open_popup( 197 | io_event_data = io_event_data 198 | io_comp_usage = lo_comp_usage 199 | ). 200 | ENDMETHOD. 201 | 202 | 203 | METHOD split_email_string. 204 | DATA: lv_string TYPE string. 205 | 206 | lv_string = iv_input. 207 | 208 | REPLACE ALL OCCURRENCES OF REGEX '[[:space:]]' IN lv_string WITH `;`. 209 | SPLIT lv_string AT ';' INTO TABLE rt_email. 210 | DELETE rt_email WHERE table_line IS INITIAL. 211 | 212 | ENDMETHOD. 213 | ENDCLASS. 214 | -------------------------------------------------------------------------------- /src/zcl_za2xh_upload_popup.clas.abap: -------------------------------------------------------------------------------- 1 | class ZCL_ZA2XH_UPLOAD_POPUP definition 2 | public 3 | inheriting from CL_WD_COMPONENT_ASSISTANCE 4 | create public . 5 | 6 | public section. 7 | 8 | class-data GO_WD_COMP type ref to ZIWCI_A2XH_UPLOAD_POPUP read-only . 9 | class-data GV_WD_COMP_ID type STRING read-only . 10 | data MO_EVENT_DATA type ref to IF_FPM_PARAMETER . 11 | data MO_COMP_USAGE type ref to IF_WD_COMPONENT_USAGE . 12 | 13 | class-methods CLASS_CONSTRUCTOR . 14 | class-methods FPM_POPUP 15 | importing 16 | !IO_EVENT_DATA type ref to IF_FPM_PARAMETER optional 17 | !IO_EVENT_ORIG type ref to CL_FPM_EVENT optional 18 | !IV_CALLBACK_EVENT_ID type CLIKE . 19 | methods ON_CLOSE 20 | for event WINDOW_CLOSED of IF_WD_WINDOW . 21 | methods ON_OK 22 | importing 23 | !IV_FILE_NAME type FPM_FILE_NAME 24 | !IV_FILE_CONTENT type FPM_FILE_CONTENT . 25 | class-methods OPEN_POPUP 26 | importing 27 | !IO_EVENT_DATA type ref to IF_FPM_PARAMETER . 28 | class-methods WD_POPUP 29 | importing 30 | !IO_EVENT_DATA type ref to IF_FPM_PARAMETER optional 31 | !IO_VIEW type ref to IF_WD_VIEW_CONTROLLER 32 | !IV_CALLBACK_ACTION type CLIKE . 33 | PROTECTED SECTION. 34 | 35 | METHODS do_callback . 36 | PRIVATE SECTION. 37 | ENDCLASS. 38 | 39 | 40 | 41 | CLASS ZCL_ZA2XH_UPLOAD_POPUP IMPLEMENTATION. 42 | 43 | 44 | METHOD class_constructor. 45 | gv_wd_comp_id = CAST cl_abap_refdescr( cl_abap_typedescr=>describe_by_data( go_wd_comp ) )->get_referenced_type( )->get_relative_name( ). 46 | REPLACE 'IWCI_' IN gv_wd_comp_id WITH ''. 47 | ENDMETHOD. 48 | 49 | 50 | METHOD do_callback. 51 | DATA: lv_event_id TYPE fpm_event_id, 52 | lo_fpm TYPE REF TO if_fpm, 53 | lo_event TYPE REF TO cl_fpm_event, 54 | lo_event_orig TYPE REF TO cl_fpm_event, 55 | lt_key TYPE TABLE OF string, 56 | lv_key TYPE string, 57 | lr_value TYPE REF TO data, 58 | lv_action TYPE string, 59 | lo_view TYPE REF TO cl_wdr_view, 60 | lo_action TYPE REF TO if_wdr_action, 61 | lt_param TYPE wdr_name_value_list, 62 | ls_param TYPE wdr_name_value. 63 | 64 | 65 | ********************************************************************** 66 | * FPM 67 | ********************************************************************** 68 | mo_event_data->get_value( 69 | EXPORTING 70 | iv_key = 'IV_CALLBACK_EVENT_ID' 71 | IMPORTING 72 | ev_value = lv_event_id 73 | ). 74 | IF lv_event_id IS NOT INITIAL. 75 | 76 | lo_fpm = cl_fpm=>get_instance( ). 77 | CHECK: lo_fpm IS NOT INITIAL. 78 | 79 | CREATE OBJECT lo_event 80 | EXPORTING 81 | iv_event_id = lv_event_id 82 | io_event_data = mo_event_data. 83 | 84 | mo_event_data->get_value( 85 | EXPORTING 86 | iv_key = 'IO_EVENT_ORIG' 87 | IMPORTING 88 | ev_value = lo_event_orig 89 | ). 90 | IF lo_event_orig IS NOT INITIAL. 91 | lo_event->ms_source_uibb = lo_event_orig->ms_source_uibb. 92 | ENDIF. 93 | 94 | lo_fpm->raise_event( lo_event ). 95 | 96 | ENDIF. 97 | 98 | 99 | ********************************************************************** 100 | * WD 101 | ********************************************************************** 102 | mo_event_data->get_value( 103 | EXPORTING 104 | iv_key = 'IV_CALLBACK_ACTION' 105 | IMPORTING 106 | ev_value = lv_action 107 | ). 108 | IF lv_action IS NOT INITIAL. 109 | 110 | mo_event_data->get_value( 111 | EXPORTING 112 | iv_key = 'IO_VIEW' 113 | IMPORTING 114 | ev_value = lo_view 115 | ). 116 | CHECK: lo_view IS NOT INITIAL. 117 | 118 | TRY. 119 | lo_action = lo_view->get_action_internal( lv_action ). 120 | CATCH cx_wdr_runtime INTO DATA(lx_wdr_runtime). 121 | wdr_task=>application->component->if_wd_controller~get_message_manager( )->report_error_message( lx_wdr_runtime->get_text( ) ). 122 | ENDTRY. 123 | CHECK: lo_action IS NOT INITIAL. 124 | 125 | CLEAR: ls_param. 126 | ls_param-name = 'MO_EVENT_DATA'. 127 | ls_param-object = mo_event_data. 128 | ls_param-type = cl_abap_typedescr=>typekind_oref. 129 | APPEND ls_param TO lt_param. 130 | 131 | lt_key = mo_event_data->get_keys( ). 132 | LOOP AT lt_key INTO lv_key. 133 | mo_event_data->get_value( 134 | EXPORTING 135 | iv_key = lv_key 136 | IMPORTING 137 | er_value = lr_value 138 | ). 139 | CLEAR: ls_param. 140 | ls_param-name = lv_key. 141 | ls_param-dref = lr_value. 142 | ls_param-type = cl_abap_typedescr=>typekind_dref. 143 | APPEND ls_param TO lt_param. 144 | ENDLOOP. 145 | 146 | lo_action->set_parameters( lt_param ). 147 | lo_action->fire( ). 148 | 149 | ENDIF. 150 | ENDMETHOD. 151 | 152 | 153 | METHOD on_close. 154 | mo_comp_usage->delete_component( ). 155 | ENDMETHOD. 156 | 157 | 158 | METHOD on_ok. 159 | DATA: lt_callstack TYPE abap_callstack, 160 | ls_callstack TYPE abap_callstack_line, 161 | lo_class_desc TYPE REF TO cl_abap_classdescr, 162 | ls_method_desc TYPE abap_methdescr, 163 | ls_param_desc TYPE abap_parmdescr. 164 | FIELD-SYMBOLS: TYPE any. 165 | 166 | CALL FUNCTION 'SYSTEM_CALLSTACK' 167 | EXPORTING 168 | max_level = 1 169 | IMPORTING 170 | callstack = lt_callstack. 171 | READ TABLE lt_callstack INTO ls_callstack INDEX 1. 172 | lo_class_desc ?= cl_abap_classdescr=>describe_by_name( cl_oo_classname_service=>get_clsname_by_include( ls_callstack-include ) ). 173 | READ TABLE lo_class_desc->methods INTO ls_method_desc WITH KEY name = ls_callstack-blockname. 174 | LOOP AT ls_method_desc-parameters INTO ls_param_desc WHERE parm_kind = cl_abap_classdescr=>importing. 175 | ASSIGN (ls_param_desc-name) TO . 176 | mo_event_data->set_value( 177 | EXPORTING 178 | iv_key = CONV #( ls_param_desc-name ) 179 | iv_value = 180 | ). 181 | ENDLOOP. 182 | 183 | do_callback( ). 184 | 185 | ENDMETHOD. 186 | 187 | 188 | METHOD open_popup. 189 | DATA: lo_comp_usage TYPE REF TO if_wd_component_usage. 190 | 191 | cl_wdr_runtime_services=>get_component_usage( 192 | EXPORTING 193 | component = wdr_task=>application->component 194 | used_component_name = gv_wd_comp_id 195 | component_usage_name = gv_wd_comp_id 196 | create_component = abap_true 197 | do_create = abap_true 198 | RECEIVING 199 | component_usage = lo_comp_usage 200 | ). 201 | 202 | go_wd_comp ?= lo_comp_usage->get_interface_controller( ). 203 | 204 | go_wd_comp->open_popup( 205 | io_event_data = io_event_data 206 | io_comp_usage = lo_comp_usage 207 | ). 208 | ENDMETHOD. 209 | 210 | 211 | METHOD fpm_popup. 212 | DATA: lo_event_data TYPE REF TO if_fpm_parameter. 213 | 214 | IF io_event_data IS NOT INITIAL. 215 | lo_event_data = io_event_data. 216 | ELSE. 217 | CREATE OBJECT lo_event_data TYPE cl_fpm_parameter. 218 | ENDIF. 219 | 220 | lo_event_data->set_value( 221 | EXPORTING 222 | iv_key = 'IV_CALLBACK_EVENT_ID' 223 | iv_value = iv_callback_event_id 224 | ). 225 | 226 | IF io_event_orig IS NOT INITIAL. 227 | lo_event_data->set_value( 228 | EXPORTING 229 | iv_key = 'IO_EVENT_ORIG' 230 | iv_value = io_event_orig 231 | ). 232 | ENDIF. 233 | 234 | 235 | open_popup( lo_event_data ). 236 | *@78\QImporting@ IV_FILE_NAME TYPE FPM_FILE_NAME File Name 237 | *@78\QImporting@ IV_FILE_CONTENT TYPE FPM_FILE_CONTENT File Content 238 | 239 | ENDMETHOD. 240 | 241 | 242 | METHOD wd_popup. 243 | DATA: lo_event_data TYPE REF TO if_fpm_parameter. 244 | 245 | IF io_event_data IS NOT INITIAL. 246 | lo_event_data = io_event_data. 247 | ELSE. 248 | CREATE OBJECT lo_event_data TYPE cl_fpm_parameter. 249 | ENDIF. 250 | 251 | lo_event_data->set_value( 252 | EXPORTING 253 | iv_key = 'IV_CALLBACK_ACTION' 254 | iv_value = iv_callback_action 255 | ). 256 | 257 | lo_event_data->set_value( 258 | EXPORTING 259 | iv_key = 'IO_VIEW' 260 | iv_value = CAST cl_wdr_view( io_view ) 261 | ). 262 | 263 | open_popup( lo_event_data ). 264 | *@78\QImporting@ IV_FILE_NAME TYPE FPM_FILE_NAME File Name 265 | *@78\QImporting@ IV_FILE_CONTENT TYPE FPM_FILE_CONTENT File Content 266 | 267 | ENDMETHOD. 268 | ENDCLASS. 269 | -------------------------------------------------------------------------------- /src/fpm_enh/zcl_a2xh_fpm_enh.clas.abap: -------------------------------------------------------------------------------- 1 | class ZCL_A2XH_FPM_ENH definition 2 | public 3 | create public . 4 | 5 | public section. 6 | 7 | class-data GV_LIST_UIBB_EXPORT_ON type FLAG value ABAP_TRUE ##NO_TEXT. 8 | 9 | class-methods ENH_CL_FPM_LIST_UIBB_ASSIST_AT 10 | importing 11 | !IV_FORMAT type FPMGB_EXPORT_FORMAT 12 | !IRT_RESULT_DATA type ref to DATA 13 | !IT_P13N_COLUMN type IF_FPM_LIST_SETTINGS_VARIANT=>TY_T_O_COLUMN 14 | !IT_FIELD_USAGE type FPMGB_T_FIELDUSAGE 15 | !IV_FROM_COMP type WDY_COMPONENT_NAME 16 | !IO_C_TABLE type ref to CL_WD_C_TABLE . 17 | class-methods ENH_CL_FPM_LIST_UIBB_RENDERER_ 18 | importing 19 | !IO_EXPORT_BTN_CHOICE type ref to CL_WD_TOOLBAR_BTN_CHOICE 20 | !IV_EXPORT_ACTION type STRING . 21 | PROTECTED SECTION. 22 | 23 | CLASS-METHODS readme . 24 | PRIVATE SECTION. 25 | ENDCLASS. 26 | 27 | 28 | 29 | CLASS ZCL_A2XH_FPM_ENH IMPLEMENTATION. 30 | 31 | 32 | METHOD enh_cl_fpm_list_uibb_assist_at. 33 | DATA: lt_field2 TYPE za2xh_t_fieldcatalog, 34 | lt_field TYPE za2xh_t_fieldcatalog, 35 | ls_field TYPE za2xh_s_fieldcatalog, 36 | ls_field_usage TYPE fpmgb_s_fieldusage, 37 | lo_context_data_s_type TYPE REF TO cl_abap_structdescr, 38 | lo_context_data_t_type TYPE REF TO cl_abap_tabledescr, 39 | lr_context_data TYPE REF TO data, 40 | lo_p13n_column TYPE REF TO if_fpm_list_settings_column, 41 | lv_column_name TYPE string, 42 | lv_conversion TYPE string, 43 | lv_index TYPE i. 44 | FIELD-SYMBOLS: TYPE table, 45 | TYPE data, 46 | TYPE data, 47 | TYPE table, 48 | TYPE data, 49 | TYPE data. 50 | 51 | CHECK: gv_list_uibb_export_on EQ abap_true AND 52 | zcl_abap2xlsx_helper=>is_abap2xlsx_installed( iv_with_message = abap_false ) EQ abap_true. 53 | 54 | ASSIGN irt_result_data->* TO . 55 | 56 | zcl_abap2xlsx_helper=>get_fieldcatalog( 57 | EXPORTING 58 | it_data = 59 | IMPORTING 60 | et_field = lt_field2 61 | ). 62 | 63 | IF iv_from_comp EQ if_fpm_constants=>gc_components-tree. 64 | ls_field-fieldname = 'MASTER_COLUMN_TEXT'. 65 | ls_field-label_text = io_c_table->get_column( id = 'MASTER_COLUMN' )->get_header( )->get_text( ). 66 | APPEND ls_field TO lt_field. 67 | ENDIF. 68 | 69 | LOOP AT it_p13n_column INTO lo_p13n_column. 70 | CHECK: lo_p13n_column->is_visible( ). 71 | lv_column_name = lo_p13n_column->get_name( ). 72 | READ TABLE lt_field2 INTO ls_field WITH KEY fieldname = lv_column_name. 73 | CHECK: sy-subrc EQ 0. 74 | 75 | IF iv_from_comp EQ if_fpm_constants=>gc_components-tree. 76 | ls_field-label_text = io_c_table->get_column( id = lv_column_name && '_C' )->get_header( )->get_text( ). 77 | ELSE. 78 | ls_field-label_text = io_c_table->get_column( id = lv_column_name )->get_header( )->get_text( ). 79 | ENDIF. 80 | 81 | READ TABLE it_field_usage INTO ls_field_usage WITH KEY name = lv_column_name. 82 | * ls_field-label_text = ls_field_usage-label_text. 83 | ls_field-fixed_values = ls_field_usage-fixed_values. 84 | APPEND ls_field TO lt_field. 85 | ENDLOOP. 86 | 87 | 88 | lo_context_data_s_type = io_c_table->get_data_source( )->get_node_info( )->get_static_attributes_type( ). 89 | lo_context_data_t_type = cl_abap_tabledescr=>create( lo_context_data_s_type ). 90 | CREATE DATA lr_context_data TYPE HANDLE lo_context_data_t_type. 91 | ASSIGN lr_context_data->* TO . 92 | 93 | io_c_table->get_data_source( )->get_static_attributes_table( 94 | IMPORTING 95 | table = 96 | ). 97 | * MOVE-CORRESPONDING TO . 98 | LOOP AT ASSIGNING . 99 | lv_index = sy-tabix. 100 | READ TABLE ASSIGNING INDEX lv_index. 101 | CHECK: sy-subrc EQ 0. 102 | MOVE-CORRESPONDING TO . 103 | ENDLOOP. 104 | 105 | 106 | 107 | CASE iv_format. 108 | WHEN 'ZA2X'. 109 | zcl_abap2xlsx_helper=>excel_download( 110 | EXPORTING 111 | it_data = 112 | it_field = lt_field 113 | ). 114 | WHEN 'ZA2E'. 115 | zcl_abap2xlsx_helper=>excel_email( 116 | EXPORTING 117 | it_data = 118 | it_field = lt_field 119 | ). 120 | ENDCASE. 121 | 122 | 123 | * enhancement 위치: 124 | *Enhanced Development Object CL_FPM_LIST_UIBB_ASSIST_ATS 125 | """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""$"$\SE:(1) Class LCL_EXPORT_ACTION, Method EXECUTE, Start A 126 | *$*$-Start: (1)---------------------------------------------------------------------------------$*$* 127 | *ENHANCEMENT 1 ZE_ABAP2XLSX_HELPER_LIST_ASSIS. "active version 128 | ** additional export menu. 129 | * DATA: zlrt_result_data TYPE REF TO data. 130 | * 131 | * IF me->mv_format CP 'Z*'. 132 | * me->get_result_data( 133 | * EXPORTING 134 | * iv_data_only = abap_true 135 | * IMPORTING 136 | * ert_result_data = zlrt_result_data 137 | * ). 138 | * zcl_a2xh_fpm_enh=>enh_cl_fpm_list_uibb_assist_at( 139 | * EXPORTING 140 | * iv_format = me->mv_format 141 | * irt_result_data = zlrt_result_data 142 | * it_p13n_column = me->mo_list_uibb_assist->mo_personalization_api->get_current_variant( )->get_columns( ) 143 | * it_field_usage = me->mo_list_uibb_assist->mt_field_usage 144 | * ). 145 | * RETURN. 146 | * ENDIF. 147 | *ENDENHANCEMENT. 148 | *$*$-End: (1)---------------------------------------------------------------------------------$*$* 149 | ENDMETHOD. 150 | 151 | 152 | METHOD enh_cl_fpm_list_uibb_renderer_. 153 | DATA: lo_tab_action TYPE REF TO cl_wd_menu_action_item, 154 | lo_el TYPE REF TO cl_abap_elemdescr, 155 | lt_fv TYPE ddfixvalues, 156 | ls_fv TYPE ddfixvalue. 157 | 158 | CHECK: gv_list_uibb_export_on EQ abap_true AND 159 | zcl_abap2xlsx_helper=>is_abap2xlsx_installed( iv_with_message = abap_false ) EQ abap_true. 160 | 161 | CHECK: io_export_btn_choice IS BOUND. 162 | 163 | * io_export_btn_choice->remove_choice( 164 | * EXPORTING 165 | * id = 'MNUAI_FPM_EXPORT_PDF' 166 | * ). 167 | 168 | * lo_tab_action = 169 | * cl_wd_menu_action_item=>new_menu_action_item( 170 | * id = `ZMNUAI_FPM_EXPORT_ZA2X` "#EC NOTEXT 171 | * on_action = 'DISPATCH_EXPORT' " lif_renderer_constants=>cs_table_action-export 172 | * text = 'Excel by abap2xlsx' 173 | * enabled = abap_true 174 | * visible = abap_true 175 | * ). 176 | * DATA(lt_action_parameters) = VALUE wdr_name_value_list( 177 | * ( 178 | * name = 'FORMAT' " lc_export_action_format_param 179 | * value = 'ZA2X' 180 | * ) 181 | * ). 182 | * lo_tab_action->map_on_action( lt_action_parameters ). 183 | * io_export_btn_choice->add_choice( lo_tab_action ). 184 | 185 | lo_el ?= cl_abap_elemdescr=>describe_by_data( if_fpm_list_types=>cs_export_format-selection_at_runtime ). 186 | lt_fv = lo_el->get_ddic_fixed_values( ). 187 | 188 | LOOP AT lt_fv INTO ls_fv WHERE low CP 'Z*'. 189 | lo_tab_action = 190 | cl_wd_menu_action_item=>new_menu_action_item( 191 | id = `MNUAI_FPM_EXPORT_` && ls_fv-low "#EC NOTEXT 192 | on_action = iv_export_action " lif_renderer_constants=>cs_table_action-export 193 | text = CONV string( ls_fv-ddtext ) 194 | enabled = abap_true 195 | visible = abap_true 196 | ). 197 | DATA(lt_action_parameters) = VALUE wdr_name_value_list( 198 | ( 199 | name = 'FORMAT' " lc_export_action_format_param 200 | value = ls_fv-low 201 | ) 202 | ). 203 | lo_tab_action->map_on_action( lt_action_parameters ). 204 | io_export_btn_choice->add_choice( lo_tab_action ). 205 | ENDLOOP. 206 | 207 | 208 | * enhancement 위치: 209 | *Enhanced Development Object CL_FPM_LIST_UIBB_RENDERER_ATS 210 | """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""$"$\SE:(1) Class LCL_TABLE_RENDERER, Method RENDER_STANDARD_TOOLBAR_ITEMS, End A 211 | *$*$-Start: (1)---------------------------------------------------------------------------------$*$* 212 | *ENHANCEMENT 1 ZE_ABAP2XLSX_HELPER_LIST_RENDE. "active version 213 | ** additional export menu. 214 | * 215 | * IF lo_export_btn_choice IS BOUND. 216 | * zcl_a2xh_fpm_enh=>enh_cl_fpm_list_uibb_renderer_( 217 | * EXPORTING 218 | * io_export_btn_choice = lo_export_btn_choice 219 | * ). 220 | * ENDIF. 221 | * 222 | *ENDENHANCEMENT. 223 | *$*$-End: (1)---------------------------------------------------------------------------------$*$* 224 | ENDMETHOD. 225 | 226 | 227 | METHOD readme. 228 | * https://github.com/boy0korea/ABAP2XLSX_HELPER 229 | ENDMETHOD. 230 | ENDCLASS. 231 | -------------------------------------------------------------------------------- /src/za2xh_email.fugr.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | abap2xlsx helper 6 | 7 | LZA2XH_EMAILF01 8 | LZA2XH_EMAILI01 9 | LZA2XH_EMAILO01 10 | LZA2XH_EMAILTOP 11 | SAPLZA2XH_EMAIL 12 | 13 | 14 | 15 | ZA2XH_EMAIL 16 | abap2xlsx helper send email function 17 | 18 | 19 | IT_DATA 20 | X 21 | TABLE 22 | 23 | 24 | IT_FIELD 25 | X 26 | X 27 | ZA2XH_T_FIELDCATALOG 28 | 29 | 30 | IV_SUBJECT 31 | X 32 | X 33 | CLIKE 34 | 35 | 36 | IV_SENDER 37 | X 38 | X 39 | CLIKE 40 | 41 | 42 | IT_RECEIVER 43 | X 44 | STRINGTAB 45 | 46 | 47 | IV_FILENAME 48 | X 49 | X 50 | CLIKE 51 | 52 | 53 | IV_SHEET_TITLE 54 | X 55 | X 56 | CLIKE 57 | 58 | 59 | IV_IMAGE_XSTRING 60 | X 61 | X 62 | XSTRING 63 | 64 | 65 | IV_ADD_FIXEDVALUE_SHEET 66 | ABAP_TRUE 67 | X 68 | X 69 | FLAG 70 | 71 | 72 | IV_AUTO_COLUMN_WIDTH 73 | ABAP_TRUE 74 | X 75 | X 76 | FLAG 77 | 78 | 79 | IV_DEFAULT_DESCR 80 | 'L' 81 | X 82 | X 83 | C 84 | 85 | 86 | 87 | 88 | IT_DATA 89 | P 90 | 91 | 92 | IT_FIELD 93 | P 94 | 95 | 96 | IV_SUBJECT 97 | P 98 | 99 | 100 | IV_SENDER 101 | P 102 | 103 | 104 | IT_RECEIVER 105 | P 106 | 107 | 108 | IV_FILENAME 109 | P 110 | 111 | 112 | IV_SHEET_TITLE 113 | P 114 | 115 | 116 | IV_IMAGE_XSTRING 117 | P 118 | 119 | 120 | IV_ADD_FIXEDVALUE_SHEET 121 | P 122 | 123 | 124 | IV_AUTO_COLUMN_WIDTH 125 | P 126 | 127 | 128 | IV_DEFAULT_DESCR 129 | P 130 | 131 | 132 | 133 | 134 | ZA2XH_EMAIL_POPUP_GUI 135 | popup 136 | 137 | 138 | IO_EVENT_DATA 139 | X 140 | REF TO IF_FPM_PARAMETER 141 | X 142 | 143 | 144 | 145 | 146 | IO_EVENT_DATA 147 | P 148 | Property Bag 149 | 150 | 151 | 152 | 153 | ZA2XH_EMAIL_RFC 154 | R 155 | abap2xlsx helper send email function 156 | 157 | 158 | IV_DATA_JSON 159 | STRING 160 | 161 | 162 | IT_DDIC_OBJECT 163 | DD_X031L_TABLE 164 | 165 | 166 | IT_FIELD 167 | ZA2XH_T_FIELDCATALOG 168 | 169 | 170 | IV_SUBJECT 171 | X 172 | STRING 173 | 174 | 175 | IV_SENDER 176 | X 177 | STRING 178 | 179 | 180 | IT_RECEIVER 181 | STRINGTAB 182 | 183 | 184 | IV_FILENAME 185 | X 186 | STRING 187 | 188 | 189 | IV_SHEET_TITLE 190 | X 191 | STRING 192 | 193 | 194 | IV_IMAGE_XSTRING 195 | X 196 | XSTRING 197 | 198 | 199 | IV_ADD_FIXEDVALUE_SHEET 200 | ABAP_TRUE 201 | X 202 | FLAG 203 | 204 | 205 | IV_AUTO_COLUMN_WIDTH 206 | ABAP_TRUE 207 | X 208 | FLAG 209 | 210 | 211 | IV_DEFAULT_DESCR 212 | 'L' 213 | X 214 | CHAR1 215 | 216 | 217 | 218 | 219 | IV_DATA_JSON 220 | P 221 | 222 | 223 | IT_DDIC_OBJECT 224 | P 225 | 226 | 227 | IT_FIELD 228 | P 229 | 230 | 231 | IV_SUBJECT 232 | P 233 | 234 | 235 | IV_SENDER 236 | P 237 | 238 | 239 | IT_RECEIVER 240 | P 241 | 242 | 243 | IV_FILENAME 244 | P 245 | 246 | 247 | IV_SHEET_TITLE 248 | P 249 | 250 | 251 | IV_IMAGE_XSTRING 252 | P 253 | 254 | 255 | IV_ADD_FIXEDVALUE_SHEET 256 | P 257 | 258 | 259 | IV_AUTO_COLUMN_WIDTH 260 | P 261 | 262 | 263 | IV_DEFAULT_DESCR 264 | P 265 | 266 | 267 | 268 | 269 | 270 | 271 |
272 | SAPLZA2XH_EMAIL 273 | 2100 274 | E 275 | popup 276 | M 277 | 2100 278 | 027 279 | 121 280 |
281 | 282 | 283 | SCREEN 284 | SCREEN 285 | 286 | 287 | CUST_CTRL 288 | TEXT_EDIT 289 | SCREEN 290 | 001 291 | 005 292 | 070 293 | 015 294 | 295 | 296 | 297 | 298 | SCREEN 299 | SCREEN 300 | TEXT 301 | %#AUTOTEXT001 302 | To 303 | 002 304 | 001 305 | 002 306 | 002 307 | 001 308 | CHAR 309 | N 310 | 311 | 312 | SCREEN 313 | SCREEN 314 | OKCODE 315 | ____________________ 316 | 020 317 | 020 318 | 001 319 | CHAR 320 | X 321 | 322 | 323 | 324 | 325 | PROCESS BEFORE OUTPUT. 326 | 327 | 328 | MODULE status_2100. 329 | 330 | 331 | * 332 | 333 | 334 | PROCESS AFTER INPUT. 335 | 336 | 337 | MODULE user_command_2100. 338 | 339 | 340 |
341 |
342 | 343 | 344 | 000001 345 | 346 | 347 | 348 | 2100 349 | P 350 | 000001 351 | 0001 352 | 2100 353 | 354 | 355 | 356 | 357 | CANC 358 | 001 359 | S 360 | ICON_CANCEL 361 | @0W@ 362 | Cancel 363 | A 364 | 365 | 366 | OK 367 | 001 368 | S 369 | ICON_OKAY 370 | @0V@ 371 | Continue 372 | 373 | 374 | 375 | 376 | 000001 377 | 0001 378 | 01 379 | 00 380 | 381 | 382 | 000001 383 | 0001 384 | 02 385 | 12 386 | 387 | 388 | 389 | 390 | 000001 391 | 00 392 | OK 393 | 001 394 | 395 | 396 | 000001 397 | 12 398 | CANC 399 | 001 400 | 401 | 402 | 403 | 404 | 2100 405 | CANC 406 | 407 | 408 | 2100 409 | OK 410 | 411 | 412 | 413 | 414 | P 415 | 000001 416 | P 417 | 2100 418 | 419 | 420 | B 421 | 000001 422 | 0001 423 | P 424 | 2100 425 | 426 | 427 | 428 | 429 | 2100 430 | Send email 431 | 432 | 433 | 434 |
435 |
436 |
437 | -------------------------------------------------------------------------------- /src/zcl_abap2xlsx_helper.clas.abap: -------------------------------------------------------------------------------- 1 | class ZCL_ABAP2XLSX_HELPER definition 2 | public 3 | create public . 4 | 5 | public section. 6 | 7 | class-methods EXCEL_DOWNLOAD 8 | importing 9 | !IT_DATA type STANDARD TABLE 10 | !IT_FIELD type ZA2XH_T_FIELDCATALOG optional 11 | !IV_FILENAME type CLIKE optional 12 | !IV_SHEET_TITLE type CLIKE optional 13 | !IV_IMAGE_XSTRING type XSTRING optional 14 | !IV_ADD_FIXEDVALUE_SHEET type FLAG default ABAP_TRUE 15 | !IV_AUTO_COLUMN_WIDTH type FLAG default ABAP_TRUE 16 | !IV_DEFAULT_DESCR type C default 'L' 17 | exporting 18 | !EV_EXCEL type XSTRING 19 | !EV_ERROR_TEXT type STRING . 20 | class-methods EXCEL_EMAIL 21 | importing 22 | !IT_DATA type STANDARD TABLE 23 | !IT_FIELD type ZA2XH_T_FIELDCATALOG optional 24 | !IV_SUBJECT type CLIKE optional 25 | !IV_SENDER type CLIKE optional 26 | !IT_RECEIVER type STRINGTAB optional 27 | !IV_FILENAME type CLIKE optional 28 | !IV_SHEET_TITLE type CLIKE optional 29 | !IV_IMAGE_XSTRING type XSTRING optional 30 | !IV_ADD_FIXEDVALUE_SHEET type FLAG default ABAP_TRUE 31 | !IV_AUTO_COLUMN_WIDTH type FLAG default ABAP_TRUE 32 | !IV_DEFAULT_DESCR type C default 'L' . 33 | class-methods EXCEL_UPLOAD 34 | importing 35 | !IV_EXCEL type XSTRING optional 36 | !IT_FIELD type ZA2XH_T_FIELDCATALOG optional 37 | !IV_BEGIN_ROW type INT4 default 2 38 | !IV_SHEET_NO type INT1 default 1 39 | exporting 40 | !ET_DATA type STANDARD TABLE 41 | !EV_ERROR_TEXT type STRING 42 | !ET_ERROR_LOG type ZA2XH_T_ERROR_LOG . 43 | class-methods GET_FIELDCATALOG 44 | importing 45 | !IT_DATA type STANDARD TABLE 46 | !IV_DEFAULT_DESCR type C default 'L' 47 | exporting 48 | !ET_FIELD type ZA2XH_T_FIELDCATALOG . 49 | class-methods CONVERT_ABAP_TO_EXCEL 50 | importing 51 | !IT_DATA type STANDARD TABLE 52 | !IT_FIELD type ZA2XH_T_FIELDCATALOG optional 53 | !IV_SHEET_TITLE type CLIKE optional 54 | !IV_IMAGE_XSTRING type XSTRING optional 55 | !IV_ADD_FIXEDVALUE_SHEET type FLAG default ABAP_TRUE 56 | !IV_AUTO_COLUMN_WIDTH type FLAG default ABAP_TRUE 57 | !IV_DEFAULT_DESCR type C default 'L' 58 | exporting 59 | !EV_EXCEL type XSTRING 60 | !EV_ERROR_TEXT type STRING . 61 | class-methods CONVERT_JSON_TO_EXCEL 62 | importing 63 | !IV_DATA_JSON type STRING 64 | !IT_DDIC_OBJECT type DD_X031L_TABLE 65 | !IT_FIELD type ZA2XH_T_FIELDCATALOG 66 | !IV_SHEET_TITLE type CLIKE optional 67 | !IV_IMAGE_XSTRING type XSTRING optional 68 | !IV_ADD_FIXEDVALUE_SHEET type FLAG default ABAP_TRUE 69 | !IV_AUTO_COLUMN_WIDTH type FLAG default ABAP_TRUE 70 | !IV_DEFAULT_DESCR type C default 'L' 71 | exporting 72 | !EV_EXCEL type XSTRING 73 | !EV_ERROR_TEXT type STRING . 74 | class-methods CONVERT_EXCEL_TO_ABAP 75 | importing 76 | !IV_EXCEL type XSTRING 77 | !IT_FIELD type ZA2XH_T_FIELDCATALOG optional 78 | !IV_BEGIN_ROW type INT4 default 2 79 | !IV_SHEET_NO type INT1 default 1 80 | exporting 81 | !ET_DATA type STANDARD TABLE 82 | !EV_ERROR_TEXT type STRING 83 | !ET_ERROR_LOG type ZA2XH_T_ERROR_LOG . 84 | class-methods GET_XSTRING_FROM_SMW0 85 | importing 86 | !IV_SMW0 type WWWDATA-OBJID 87 | returning 88 | value(RV_XSTRING) type XSTRING . 89 | class-methods FPM_UPLOAD_POPUP 90 | importing 91 | !IV_CALLBACK_EVENT_ID type CLIKE default 'ZA2XH_UPLOAD' 92 | !IO_EVENT_ORIG type ref to CL_FPM_EVENT optional . 93 | class-methods WD_UPLOAD_POPUP 94 | importing 95 | !IV_CALLBACK_ACTION type CLIKE 96 | !IO_VIEW type ref to IF_WD_VIEW_CONTROLLER . 97 | class-methods DEFAULT_EXCEL_FILENAME 98 | returning 99 | value(RV_FILENAME) type STRING . 100 | class-methods GET_DDIC_FIXED_VALUES 101 | importing 102 | !IO_TYPE type ref to CL_ABAP_TYPEDESCR 103 | returning 104 | value(RT_DDL) type WDR_CONTEXT_ATTR_VALUE_LIST . 105 | class-methods TEST . 106 | class-methods IS_ABAP2XLSX_INSTALLED 107 | importing 108 | !IV_WITH_MESSAGE type FLAG default ABAP_TRUE 109 | returning 110 | value(RV_INSTALLED) type FLAG . 111 | class-methods MESSAGE 112 | importing 113 | !IV_ERROR_TEXT type CLIKE . 114 | class-methods CHECK_INSTALL 115 | importing 116 | !IV_CLASS_NAME type CLIKE 117 | !IV_ERROR_TEXT type CLIKE optional 118 | returning 119 | value(RV_INSTALLED) type FLAG . 120 | PROTECTED SECTION. 121 | 122 | CLASS-METHODS readme . 123 | PRIVATE SECTION. 124 | ENDCLASS. 125 | 126 | 127 | 128 | CLASS ZCL_ABAP2XLSX_HELPER IMPLEMENTATION. 129 | 130 | 131 | METHOD check_install. 132 | * https://github.com/boy0korea/ABAP_INSTALL_CHECK 133 | 134 | TRY. 135 | cl_abap_typedescr=>describe_by_name( 136 | EXPORTING 137 | p_name = iv_class_name 138 | EXCEPTIONS 139 | type_not_found = 1 140 | ). 141 | CATCH cx_root. 142 | " error 143 | sy-subrc = 4. 144 | ENDTRY. 145 | 146 | IF sy-subrc EQ 0. 147 | " exist 148 | rv_installed = abap_true. 149 | ELSEIF iv_error_text IS NOT INITIAL. 150 | " not exist 151 | message( iv_error_text = iv_error_text ). 152 | ENDIF. 153 | ENDMETHOD. 154 | 155 | 156 | METHOD convert_abap_to_excel. 157 | CHECK: is_abap2xlsx_installed( ) EQ abap_true. 158 | CALL METHOD ('ZCL_ABAP2XLSX_HELPER_INT')=>('CONVERT_ABAP_TO_EXCEL') 159 | * CALL METHOD zcl_abap2xlsx_helper_int=>convert_abap_to_excel 160 | EXPORTING 161 | it_data = it_data 162 | it_field = it_field 163 | iv_sheet_title = iv_sheet_title 164 | iv_image_xstring = iv_image_xstring 165 | iv_add_fixedvalue_sheet = iv_add_fixedvalue_sheet 166 | iv_auto_column_width = iv_auto_column_width 167 | iv_default_descr = iv_default_descr 168 | IMPORTING 169 | ev_excel = ev_excel 170 | ev_error_text = ev_error_text. 171 | ENDMETHOD. 172 | 173 | 174 | METHOD convert_excel_to_abap. 175 | CHECK: is_abap2xlsx_installed( ) EQ abap_true. 176 | CALL METHOD ('ZCL_ABAP2XLSX_HELPER_INT')=>('CONVERT_EXCEL_TO_ABAP') 177 | * CALL METHOD zcl_abap2xlsx_helper_int=>convert_excel_to_abap 178 | EXPORTING 179 | iv_excel = iv_excel 180 | it_field = it_field 181 | iv_begin_row = iv_begin_row 182 | iv_sheet_no = iv_sheet_no 183 | IMPORTING 184 | et_data = et_data 185 | ev_error_text = ev_error_text 186 | et_error_log = et_error_log. 187 | ENDMETHOD. 188 | 189 | 190 | METHOD convert_json_to_excel. 191 | CHECK: is_abap2xlsx_installed( ) EQ abap_true. 192 | CALL METHOD ('ZCL_ABAP2XLSX_HELPER_INT')=>('CONVERT_JSON_TO_EXCEL') 193 | * CALL METHOD zcl_abap2xlsx_helper_int=>convert_json_to_excel 194 | EXPORTING 195 | iv_data_json = iv_data_json 196 | it_ddic_object = it_ddic_object 197 | it_field = it_field 198 | iv_sheet_title = iv_sheet_title 199 | iv_image_xstring = iv_image_xstring 200 | iv_add_fixedvalue_sheet = iv_add_fixedvalue_sheet 201 | iv_auto_column_width = iv_auto_column_width 202 | iv_default_descr = iv_default_descr 203 | IMPORTING 204 | ev_excel = ev_excel 205 | ev_error_text = ev_error_text. 206 | ENDMETHOD. 207 | 208 | 209 | METHOD default_excel_filename. 210 | rv_filename = |{ sy-uname }_{ sy-datum }_{ sy-uzeit }.xlsx|. 211 | ENDMETHOD. 212 | 213 | 214 | METHOD excel_download. 215 | CHECK: is_abap2xlsx_installed( ) EQ abap_true. 216 | CALL METHOD ('ZCL_ABAP2XLSX_HELPER_INT')=>('EXCEL_DOWNLOAD') 217 | * CALL METHOD zcl_abap2xlsx_helper_int=>excel_download 218 | EXPORTING 219 | it_data = it_data 220 | it_field = it_field 221 | iv_filename = iv_filename 222 | iv_sheet_title = iv_sheet_title 223 | iv_image_xstring = iv_image_xstring 224 | iv_add_fixedvalue_sheet = iv_add_fixedvalue_sheet 225 | iv_auto_column_width = iv_auto_column_width 226 | iv_default_descr = iv_default_descr 227 | IMPORTING 228 | ev_excel = ev_excel 229 | ev_error_text = ev_error_text. 230 | ENDMETHOD. 231 | 232 | 233 | METHOD excel_email. 234 | CHECK: is_abap2xlsx_installed( ) EQ abap_true. 235 | CALL METHOD ('ZCL_ABAP2XLSX_HELPER_INT')=>('EXCEL_EMAIL') 236 | * CALL METHOD zcl_abap2xlsx_helper_int=>excel_email 237 | EXPORTING 238 | it_data = it_data 239 | it_field = it_field 240 | iv_subject = iv_subject 241 | iv_sender = iv_sender 242 | it_receiver = it_receiver 243 | iv_filename = iv_filename 244 | iv_sheet_title = iv_sheet_title 245 | iv_image_xstring = iv_image_xstring 246 | iv_add_fixedvalue_sheet = iv_add_fixedvalue_sheet 247 | iv_auto_column_width = iv_auto_column_width 248 | iv_default_descr = iv_default_descr. 249 | ENDMETHOD. 250 | 251 | 252 | METHOD excel_upload. 253 | CHECK: is_abap2xlsx_installed( ) EQ abap_true. 254 | CALL METHOD ('ZCL_ABAP2XLSX_HELPER_INT')=>('EXCEL_UPLOAD') 255 | * CALL METHOD zcl_abap2xlsx_helper_int=>excel_upload 256 | EXPORTING 257 | iv_excel = iv_excel 258 | it_field = it_field 259 | iv_begin_row = iv_begin_row 260 | iv_sheet_no = iv_sheet_no 261 | IMPORTING 262 | et_data = et_data 263 | ev_error_text = ev_error_text 264 | et_error_log = et_error_log. 265 | ENDMETHOD. 266 | 267 | 268 | METHOD fpm_upload_popup. 269 | zcl_za2xh_upload_popup=>fpm_popup( 270 | EXPORTING 271 | * io_event_data = io_event_data 272 | io_event_orig = io_event_orig 273 | iv_callback_event_id = iv_callback_event_id 274 | ). 275 | *@78\QImporting@ IV_FILE_NAME TYPE FPM_FILE_NAME File Name 276 | *@78\QImporting@ IV_FILE_CONTENT TYPE FPM_FILE_CONTENT File Content 277 | 278 | ENDMETHOD. 279 | 280 | 281 | METHOD get_ddic_fixed_values. 282 | DATA: lt_fixed_value TYPE ddfixvalues, 283 | ls_fixed_value TYPE ddfixvalue, 284 | ls_ddl TYPE wdr_context_attr_value. 285 | 286 | IF io_type IS INSTANCE OF cl_abap_elemdescr. 287 | CAST cl_abap_elemdescr( io_type )->get_ddic_fixed_values( 288 | * EXPORTING 289 | * p_langu = SY-LANGU " Current Language 290 | RECEIVING 291 | p_fixed_values = lt_fixed_value " Defaults 292 | EXCEPTIONS 293 | not_found = 1 " Type could not be found 294 | no_ddic_type = 2 " Typ is not a dictionary type 295 | OTHERS = 3 296 | ). 297 | 298 | LOOP AT lt_fixed_value INTO ls_fixed_value WHERE option = 'EQ'. 299 | CLEAR: ls_ddl. 300 | ls_ddl-value = ls_fixed_value-low. 301 | ls_ddl-text = ls_fixed_value-ddtext. 302 | APPEND ls_ddl TO rt_ddl. 303 | ENDLOOP. 304 | ENDIF. 305 | 306 | ENDMETHOD. 307 | 308 | 309 | METHOD get_fieldcatalog. 310 | CHECK: is_abap2xlsx_installed( ) EQ abap_true. 311 | CALL METHOD ('ZCL_ABAP2XLSX_HELPER_INT')=>('GET_FIELDCATALOG') 312 | * CALL METHOD zcl_abap2xlsx_helper_int=>get_fieldcatalog 313 | EXPORTING 314 | it_data = it_data 315 | iv_default_descr = iv_default_descr 316 | IMPORTING 317 | et_field = et_field. 318 | ENDMETHOD. 319 | 320 | 321 | METHOD get_xstring_from_smw0. 322 | CHECK: is_abap2xlsx_installed( ) EQ abap_true. 323 | CALL METHOD ('ZCL_ABAP2XLSX_HELPER_INT')=>('GET_XSTRING_FROM_SMW0') 324 | * CALL METHOD zcl_abap2xlsx_helper_int=>GET_XSTRING_FROM_SMW0 325 | EXPORTING 326 | iv_smw0 = iv_smw0 327 | RECEIVING 328 | rv_xstring = rv_xstring. 329 | ENDMETHOD. 330 | 331 | 332 | METHOD is_abap2xlsx_installed. 333 | DATA: lv_class_name TYPE string VALUE 'ZCL_EXCEL'. 334 | 335 | check_install( 336 | EXPORTING 337 | iv_class_name = lv_class_name 338 | RECEIVING 339 | rv_installed = rv_installed 340 | ). 341 | IF rv_installed EQ abap_false AND iv_with_message EQ abap_true. 342 | AUTHORITY-CHECK OBJECT 'S_DEVELOP' ID 'ACTVT' FIELD '03'. 343 | IF sy-subrc EQ 0. 344 | " for developer 345 | message( 'install abap2xlsx from https://github.com/sapmentors/abap2xlsx' ). 346 | ELSE. 347 | " for user 348 | message( 'abap2xlsx is not installed.' ). 349 | ENDIF. 350 | ENDIF. 351 | ENDMETHOD. 352 | 353 | 354 | METHOD message. 355 | CHECK: iv_error_text IS NOT INITIAL. 356 | 357 | IF wdr_task=>application IS NOT INITIAL. 358 | " WD or FPM 359 | wdr_task=>application->component->if_wd_controller~get_message_manager( )->report_error_message( 360 | EXPORTING 361 | message_text = iv_error_text 362 | ). 363 | ELSE. 364 | " GUI 365 | MESSAGE iv_error_text TYPE 'S' DISPLAY LIKE 'E'. 366 | ENDIF. 367 | 368 | ENDMETHOD. 369 | 370 | 371 | METHOD readme. 372 | * https://github.com/boy0korea/ABAP2XLSX_HELPER 373 | ENDMETHOD. 374 | 375 | 376 | METHOD test. 377 | DATA: lt_sflight TYPE TABLE OF sflight, 378 | lt_sflight2 TYPE TABLE OF sflight, 379 | lt_field TYPE za2xh_t_fieldcatalog, 380 | ls_sflight TYPE sflight, 381 | lv_xstring TYPE xstring. 382 | FIELD-SYMBOLS: TYPE za2xh_s_fieldcatalog. 383 | 384 | SELECT * 385 | FROM sflight 386 | INTO TABLE lt_sflight. 387 | 388 | IF lt_sflight IS INITIAL. 389 | * CALL TRANSACTION 'BC_DATA_GEN' AND SKIP FIRST SCREEN. 390 | SUBMIT sapbc_data_generator USING SELECTION-SET 'SAP&BC_MINI' WITH pa_dark = abap_true AND RETURN. 391 | SELECT * 392 | FROM sflight 393 | INTO TABLE lt_sflight. 394 | ENDIF. 395 | 396 | zcl_abap2xlsx_helper=>get_fieldcatalog( 397 | EXPORTING 398 | it_data = lt_sflight 399 | IMPORTING 400 | et_field = lt_field 401 | ). 402 | LOOP AT lt_field ASSIGNING . 403 | CASE -fieldname. 404 | WHEN 'CARRID'. 405 | SELECT carrid AS value carrname AS text 406 | INTO CORRESPONDING FIELDS OF TABLE -fixed_values 407 | FROM scarr. 408 | SORT -fixed_values BY value. 409 | WHEN 'CONNID'. 410 | SELECT connid AS value connid AS text 411 | INTO CORRESPONDING FIELDS OF TABLE -fixed_values 412 | FROM spfli. 413 | SORT -fixed_values BY value. 414 | WHEN 'CURRENCY'. 415 | SELECT currkey AS value currkey AS text 416 | INTO CORRESPONDING FIELDS OF TABLE -fixed_values 417 | FROM scurx. 418 | SORT -fixed_values BY value. 419 | WHEN 'PLANETYPE'. 420 | SELECT planetype AS value planetype AS text 421 | INTO CORRESPONDING FIELDS OF TABLE -fixed_values 422 | FROM saplane. 423 | SORT -fixed_values BY value. 424 | WHEN OTHERS. 425 | ENDCASE. 426 | ENDLOOP. 427 | 428 | zcl_abap2xlsx_helper=>excel_download( 429 | EXPORTING 430 | it_data = lt_sflight 431 | it_field = lt_field 432 | iv_image_xstring = zcl_abap2xlsx_helper=>get_xstring_from_smw0( 'S_F_FAVO' ) 433 | IMPORTING 434 | ev_excel = lv_xstring 435 | ). 436 | 437 | 438 | zcl_abap2xlsx_helper=>excel_upload( 439 | EXPORTING 440 | iv_excel = lv_xstring 441 | IMPORTING 442 | et_data = lt_sflight2 443 | ). 444 | ls_sflight-mandt = sy-mandt. 445 | MODIFY lt_sflight2 FROM ls_sflight TRANSPORTING mandt WHERE mandt NE ls_sflight-mandt. 446 | 447 | IF lt_sflight NE lt_sflight2. 448 | BREAK-POINT. 449 | ENDIF. 450 | 451 | 452 | zcl_abap2xlsx_helper=>excel_email( 453 | EXPORTING 454 | it_data = lt_sflight 455 | it_field = lt_field 456 | ). 457 | 458 | ENDMETHOD. 459 | 460 | 461 | METHOD wd_upload_popup. 462 | zcl_za2xh_upload_popup=>wd_popup( 463 | EXPORTING 464 | * io_event_data = io_event_data 465 | io_view = io_view 466 | iv_callback_action = iv_callback_action 467 | ). 468 | *@78\QImporting@ IV_FILE_NAME TYPE FPM_FILE_NAME File Name 469 | *@78\QImporting@ IV_FILE_CONTENT TYPE FPM_FILE_CONTENT File Content 470 | 471 | ENDMETHOD. 472 | ENDCLASS. 473 | -------------------------------------------------------------------------------- /src/zcl_abap2xlsx_helper_int.clas.abap: -------------------------------------------------------------------------------- 1 | CLASS zcl_abap2xlsx_helper_int DEFINITION 2 | PUBLIC 3 | CREATE PUBLIC . 4 | 5 | PUBLIC SECTION. 6 | 7 | CLASS-METHODS excel_download 8 | IMPORTING 9 | !it_data TYPE STANDARD TABLE 10 | !it_field TYPE za2xh_t_fieldcatalog OPTIONAL 11 | !iv_filename TYPE clike OPTIONAL 12 | !iv_sheet_title TYPE clike OPTIONAL 13 | !iv_image_xstring TYPE xstring OPTIONAL 14 | !iv_add_fixedvalue_sheet TYPE flag DEFAULT abap_true 15 | !iv_auto_column_width TYPE flag DEFAULT abap_true 16 | !iv_default_descr TYPE c DEFAULT 'L' 17 | EXPORTING 18 | !ev_excel TYPE xstring 19 | !ev_error_text TYPE string . 20 | CLASS-METHODS excel_email 21 | IMPORTING 22 | !it_data TYPE STANDARD TABLE 23 | !it_field TYPE za2xh_t_fieldcatalog OPTIONAL 24 | !iv_subject TYPE clike OPTIONAL 25 | !iv_sender TYPE clike OPTIONAL 26 | !it_receiver TYPE stringtab OPTIONAL 27 | !iv_filename TYPE clike OPTIONAL 28 | !iv_sheet_title TYPE clike OPTIONAL 29 | !iv_image_xstring TYPE xstring OPTIONAL 30 | !iv_add_fixedvalue_sheet TYPE flag DEFAULT abap_true 31 | !iv_auto_column_width TYPE flag DEFAULT abap_true 32 | !iv_default_descr TYPE c DEFAULT 'L' . 33 | CLASS-METHODS excel_upload 34 | IMPORTING 35 | !iv_excel TYPE xstring OPTIONAL 36 | !it_field TYPE za2xh_t_fieldcatalog OPTIONAL 37 | !iv_begin_row TYPE int4 DEFAULT 2 38 | !iv_sheet_no TYPE int1 DEFAULT 1 39 | EXPORTING 40 | !et_data TYPE STANDARD TABLE 41 | !ev_error_text TYPE string 42 | !et_error_log TYPE za2xh_t_error_log . 43 | CLASS-METHODS get_fieldcatalog 44 | IMPORTING 45 | !it_data TYPE STANDARD TABLE 46 | !iv_default_descr TYPE c DEFAULT 'L' 47 | EXPORTING 48 | !et_field TYPE za2xh_t_fieldcatalog . 49 | CLASS-METHODS convert_abap_to_excel 50 | IMPORTING 51 | !it_data TYPE STANDARD TABLE 52 | !it_ddic_object TYPE dd_x031l_table OPTIONAL 53 | !it_field TYPE za2xh_t_fieldcatalog OPTIONAL 54 | !iv_sheet_title TYPE clike OPTIONAL 55 | !iv_image_xstring TYPE xstring OPTIONAL 56 | !iv_add_fixedvalue_sheet TYPE flag DEFAULT abap_true 57 | !iv_auto_column_width TYPE flag DEFAULT abap_true 58 | !iv_default_descr TYPE c DEFAULT 'L' 59 | EXPORTING 60 | !ev_excel TYPE xstring 61 | !ev_error_text TYPE string . 62 | CLASS-METHODS convert_json_to_excel 63 | IMPORTING 64 | !iv_data_json TYPE string 65 | !it_ddic_object TYPE dd_x031l_table 66 | !it_field TYPE za2xh_t_fieldcatalog 67 | !iv_sheet_title TYPE clike OPTIONAL 68 | !iv_image_xstring TYPE xstring OPTIONAL 69 | !iv_add_fixedvalue_sheet TYPE flag DEFAULT abap_true 70 | !iv_auto_column_width TYPE flag DEFAULT abap_true 71 | !iv_default_descr TYPE c DEFAULT 'L' 72 | EXPORTING 73 | !ev_excel TYPE xstring 74 | !ev_error_text TYPE string . 75 | CLASS-METHODS convert_excel_to_abap 76 | IMPORTING 77 | !iv_excel TYPE xstring 78 | !it_field TYPE za2xh_t_fieldcatalog OPTIONAL 79 | !iv_begin_row TYPE int4 DEFAULT 2 80 | !iv_sheet_no TYPE int1 DEFAULT 1 81 | EXPORTING 82 | !et_data TYPE STANDARD TABLE 83 | !ev_error_text TYPE string 84 | !et_error_log TYPE za2xh_t_error_log . 85 | CLASS-METHODS get_xstring_from_smw0 86 | IMPORTING 87 | !iv_smw0 TYPE wwwdata-objid 88 | RETURNING 89 | VALUE(rv_xstring) TYPE xstring . 90 | PROTECTED SECTION. 91 | 92 | CLASS-METHODS start_download 93 | IMPORTING 94 | !iv_excel TYPE xstring 95 | !iv_filename TYPE clike OPTIONAL . 96 | CLASS-METHODS start_upload 97 | EXPORTING 98 | !ev_excel TYPE xstring . 99 | CLASS-METHODS do_drm_encode 100 | CHANGING 101 | !cv_excel TYPE xstring . 102 | CLASS-METHODS do_drm_decode 103 | CHANGING 104 | !cv_excel TYPE xstring . 105 | CLASS-METHODS add_fixedvalue_sheet 106 | IMPORTING 107 | !it_data TYPE STANDARD TABLE 108 | !it_field TYPE za2xh_t_fieldcatalog 109 | !it_field_catalog TYPE zexcel_t_fieldcatalog 110 | !io_excel TYPE REF TO zcl_excel 111 | !iv_worksheet_index TYPE i DEFAULT 1 112 | !iv_header_row_index TYPE i DEFAULT 1 113 | RAISING 114 | zcx_excel . 115 | CLASS-METHODS add_image 116 | IMPORTING 117 | !iv_image_xstring TYPE xstring 118 | !iv_col TYPE i 119 | !io_excel TYPE REF TO zcl_excel 120 | !iv_worksheet_index TYPE i DEFAULT 1 121 | RAISING 122 | zcx_excel . 123 | CLASS-METHODS get_ddic_object 124 | IMPORTING 125 | !i_data TYPE data 126 | RETURNING 127 | VALUE(rt_ddic_object) TYPE dd_x031l_table . 128 | PRIVATE SECTION. 129 | ENDCLASS. 130 | 131 | 132 | 133 | CLASS ZCL_ABAP2XLSX_HELPER_INT IMPLEMENTATION. 134 | 135 | 136 | METHOD add_fixedvalue_sheet. 137 | * http://www.abap2xlsx.org 138 | DATA: lo_worksheet TYPE REF TO zcl_excel_worksheet, 139 | lo_worksheet_fv TYPE REF TO zcl_excel_worksheet, 140 | lo_data_validation TYPE REF TO zcl_excel_data_validation, 141 | ls_field_catalog TYPE zexcel_s_fieldcatalog, 142 | ls_field TYPE za2xh_s_fieldcatalog, 143 | lv_sheet_title_fv TYPE zexcel_sheet_title, 144 | lt_comp_view TYPE abap_component_view_tab, 145 | ls_comp_view TYPE abap_simple_componentdescr, 146 | lt_fixed_value TYPE ddfixvalues, 147 | ls_fixed_value TYPE ddfixvalue, 148 | lt_ddl TYPE wdr_context_attr_value_list, 149 | ls_ddl TYPE wdr_context_attr_value, 150 | lv_cell_value TYPE zexcel_cell_value, 151 | lo_style_fv TYPE REF TO zcl_excel_style, 152 | lv_style_fv TYPE zexcel_cell_style, 153 | lv_lines_data TYPE i, 154 | lv_lines_ddl TYPE i, 155 | lv_index_col TYPE i. 156 | 157 | lo_worksheet = io_excel->get_worksheet_by_index( iv_worksheet_index ). 158 | lv_lines_data = lines( it_data ). 159 | IF lv_lines_data EQ 0. 160 | lv_lines_data = 1. 161 | ENDIF. 162 | lv_lines_data = lv_lines_data + iv_header_row_index. 163 | 164 | lo_style_fv = io_excel->add_new_style( ). 165 | lo_style_fv->font->color-rgb = zcl_excel_style_color=>c_yellow. 166 | lv_style_fv = lo_style_fv->get_guid( ). 167 | 168 | CAST cl_abap_structdescr( 169 | CAST cl_abap_tabledescr( 170 | cl_abap_tabledescr=>describe_by_data( it_data ) 171 | )->get_table_line_type( ) 172 | )->get_included_view( RECEIVING p_result = lt_comp_view ). 173 | SORT lt_comp_view BY name. 174 | 175 | LOOP AT it_field_catalog INTO ls_field_catalog. 176 | lv_index_col = sy-tabix. 177 | CLEAR: lt_ddl. 178 | 179 | 180 | " 1. Get from it_field-fxied_values 181 | READ TABLE it_field INTO ls_field INDEX lv_index_col. 182 | IF sy-subrc EQ 0. 183 | lt_ddl = ls_field-fixed_values. 184 | ENDIF. 185 | 186 | " 2. Get from ddic domain fixed value 187 | IF lt_ddl IS INITIAL. 188 | READ TABLE lt_comp_view INTO ls_comp_view WITH KEY name = ls_field_catalog-fieldname BINARY SEARCH. 189 | lt_ddl = zcl_abap2xlsx_helper=>get_ddic_fixed_values( ls_comp_view-type ). 190 | ENDIF. 191 | 192 | CHECK: lt_ddl IS NOT INITIAL. 193 | lv_lines_ddl = lines( lt_ddl ) + 1. 194 | 195 | " Create fv-sheet 196 | lv_sheet_title_fv = ls_field_catalog-fieldname. 197 | lo_worksheet_fv = io_excel->get_worksheet_by_name( lv_sheet_title_fv ). 198 | IF lo_worksheet_fv IS INITIAL. 199 | lo_worksheet_fv = io_excel->add_new_worksheet( lv_sheet_title_fv ). 200 | lo_worksheet_fv->bind_table( 201 | EXPORTING 202 | ip_table = lt_ddl 203 | it_field_catalog = VALUE #( 204 | ( fieldname = 'VALUE' position = 1 scrtext_l = 'Value' dynpfld = abap_true ) 205 | ( fieldname = 'TEXT' position = 2 scrtext_l = 'Text' dynpfld = abap_true ) 206 | ) 207 | ). 208 | lo_worksheet_fv->zif_excel_sheet_protection~protected = lo_worksheet_fv->zif_excel_sheet_protection~c_protected. 209 | lo_worksheet_fv->zif_excel_sheet_protection~sheet = lo_worksheet_fv->zif_excel_sheet_protection~c_active. 210 | lo_worksheet_fv->zif_excel_sheet_protection~objects = lo_worksheet_fv->zif_excel_sheet_protection~c_active. 211 | IF lv_lines_ddl <= 3. 212 | " If it has 1 or 2 fixed values, hide fv-sheet. 213 | lo_worksheet_fv->zif_excel_sheet_properties~hidden = lo_worksheet_fv->zif_excel_sheet_properties~c_hidden. 214 | ENDIF. 215 | ENDIF. 216 | 217 | " Add validation 218 | lo_data_validation = lo_worksheet->add_new_data_validation( ). 219 | lo_data_validation->type = zcl_excel_data_validation=>c_type_list. 220 | lo_data_validation->allowblank = abap_true. 221 | lo_data_validation->formula1 = lv_sheet_title_fv && '!$A$2:$A$' && lv_lines_ddl. 222 | lo_data_validation->cell_column = zcl_excel_common=>convert_column2alpha( lv_index_col ). 223 | lo_data_validation->cell_column_to = lo_data_validation->cell_column. 224 | lo_data_validation->cell_row = iv_header_row_index + 1. 225 | lo_data_validation->cell_row_to = lv_lines_data. 226 | 227 | IF iv_header_row_index IS NOT INITIAL AND lo_worksheet_fv->zif_excel_sheet_properties~hidden IS INITIAL. 228 | " Link to fv-sheet @ header 229 | lo_worksheet->get_cell( 230 | EXPORTING 231 | ip_column = lo_data_validation->cell_column 232 | ip_row = iv_header_row_index 233 | IMPORTING 234 | ep_value = lv_cell_value 235 | ). 236 | lo_worksheet->set_cell( 237 | EXPORTING 238 | ip_column = lo_data_validation->cell_column 239 | ip_row = iv_header_row_index 240 | ip_value = lv_cell_value 241 | ip_style = lv_style_fv 242 | ip_hyperlink = zcl_excel_hyperlink=>create_internal_link( lv_sheet_title_fv && '!A1' ) 243 | ). 244 | ENDIF. 245 | 246 | ENDLOOP. 247 | 248 | ENDMETHOD. 249 | 250 | 251 | METHOD add_image. 252 | * http://www.abap2xlsx.org 253 | DATA: lo_worksheet TYPE REF TO zcl_excel_worksheet, 254 | lo_drawing TYPE REF TO zcl_excel_drawing, 255 | lv_image_type TYPE string, 256 | lv_image_width TYPE i, 257 | lv_image_height TYPE i. 258 | 259 | 260 | cl_fxs_image_info=>determine_info( 261 | EXPORTING 262 | iv_data = iv_image_xstring 263 | IMPORTING 264 | ev_mimetype = lv_image_type 265 | ev_xres = lv_image_width 266 | ev_yres = lv_image_height 267 | ). 268 | CASE lv_image_type. 269 | WHEN cl_fxs_mime_types=>co_image_bitmap. 270 | lv_image_type = 'BMP'. 271 | WHEN cl_fxs_mime_types=>co_image_png. 272 | lv_image_type = 'PNG'. 273 | WHEN cl_fxs_mime_types=>co_image_gif. 274 | lv_image_type = 'GIF'. 275 | WHEN cl_fxs_mime_types=>co_image_tiff. 276 | lv_image_type = 'TIF'. 277 | WHEN cl_fxs_mime_types=>co_image_jpeg. 278 | lv_image_type = 'JPG'. 279 | WHEN OTHERS. 280 | " not supported. 281 | RETURN. 282 | ENDCASE. 283 | 284 | lo_worksheet = io_excel->get_worksheet_by_index( iv_worksheet_index ). 285 | lo_drawing = io_excel->add_new_drawing( ). 286 | 287 | lo_drawing->set_media( 288 | EXPORTING 289 | ip_media = iv_image_xstring 290 | ip_media_type = lv_image_type 291 | ip_width = lv_image_width 292 | ip_height = lv_image_height 293 | ). 294 | lo_drawing->set_position( 295 | EXPORTING 296 | ip_from_row = 1 297 | ip_from_col = zcl_excel_common=>convert_column2alpha( iv_col ) 298 | ). 299 | lo_worksheet->add_drawing( lo_drawing ). 300 | ENDMETHOD. 301 | 302 | 303 | METHOD convert_abap_to_excel. 304 | * http://www.abap2xlsx.org 305 | DATA: lo_excel TYPE REF TO zcl_excel, 306 | lo_writer TYPE REF TO zif_excel_writer, 307 | lo_worksheet TYPE REF TO zcl_excel_worksheet, 308 | ls_table_settings TYPE zexcel_s_table_settings, 309 | lt_field_catalog TYPE zexcel_t_fieldcatalog, 310 | lt_field_catalog2 TYPE zexcel_t_fieldcatalog, 311 | ls_field_catalog TYPE zexcel_s_fieldcatalog, 312 | ls_field TYPE za2xh_s_fieldcatalog, 313 | lo_zcx_excel TYPE REF TO zcx_excel, 314 | lv_sheet_title TYPE zexcel_sheet_title, 315 | lt_ddic_object TYPE dd_x031l_table, 316 | ls_ddic_object TYPE x031l, 317 | ls_ddic_object_ref TYPE x031l, 318 | lv_currency TYPE tcurc-waers, 319 | lv_amount_external TYPE bapicurr-bapicurr, 320 | lv_local_ts TYPE timestamp, 321 | lv_alpha_out TYPE string, 322 | lv_column_count TYPE i, 323 | lv_index_col TYPE i, 324 | lv_index TYPE i. 325 | FIELD-SYMBOLS: TYPE data, 326 | TYPE data, 327 | TYPE data. 328 | 329 | CLEAR: ev_excel, ev_error_text. 330 | 331 | 332 | TRY. 333 | 334 | " Creates active sheet 335 | IF iv_sheet_title IS NOT INITIAL. 336 | lv_sheet_title = iv_sheet_title. 337 | ELSE. 338 | lv_sheet_title = 'Export'. 339 | ENDIF. 340 | CREATE OBJECT lo_excel. 341 | lo_worksheet = lo_excel->get_active_worksheet( ). 342 | lo_worksheet->set_title( ip_title = lv_sheet_title ). 343 | 344 | " Table settings 345 | ls_table_settings-table_style = zcl_excel_table=>builtinstyle_medium2. 346 | ls_table_settings-show_row_stripes = abap_true. 347 | ls_table_settings-nofilters = abap_false. 348 | 349 | " Field catalog 350 | lt_field_catalog = zcl_excel_common=>get_fieldcatalog( ip_table = it_data ). 351 | IF it_field IS NOT INITIAL. 352 | lt_field_catalog2 = lt_field_catalog. 353 | SORT lt_field_catalog2 BY fieldname. 354 | CLEAR: lt_field_catalog. 355 | 356 | IF it_ddic_object IS NOT INITIAL. 357 | LOOP AT it_ddic_object INTO ls_ddic_object. 358 | READ TABLE lt_field_catalog2 INTO ls_field_catalog WITH KEY fieldname = ls_ddic_object-fieldname BINARY SEARCH. 359 | IF sy-subrc EQ 0. 360 | lv_index = sy-tabix. 361 | ls_field_catalog-abap_type = ls_ddic_object-exid. 362 | MODIFY lt_field_catalog2 FROM ls_field_catalog INDEX lv_index TRANSPORTING abap_type. 363 | ENDIF. 364 | ENDLOOP. 365 | ENDIF. 366 | 367 | LOOP AT it_field INTO ls_field. 368 | lv_index = sy-tabix. 369 | READ TABLE lt_field_catalog2 INTO ls_field_catalog WITH KEY fieldname = ls_field-fieldname BINARY SEARCH. 370 | CHECK: sy-subrc EQ 0. 371 | ls_field_catalog-position = lv_index. 372 | ls_field_catalog-dynpfld = abap_true. 373 | IF ls_field-label_text IS NOT INITIAL. 374 | ls_field_catalog-scrtext_s = ls_field_catalog-scrtext_m = ls_field_catalog-scrtext_l = ls_field-label_text. 375 | ENDIF. 376 | APPEND ls_field_catalog TO lt_field_catalog. 377 | ENDLOOP. 378 | ENDIF. 379 | DELETE lt_field_catalog WHERE dynpfld NE abap_true. 380 | lv_column_count = lines( lt_field_catalog ). 381 | 382 | 383 | ********************************************************************** 384 | lo_worksheet->bind_table( 385 | EXPORTING 386 | ip_table = it_data 387 | it_field_catalog = lt_field_catalog 388 | is_table_settings = ls_table_settings 389 | iv_default_descr = iv_default_descr 390 | ). 391 | ********************************************************************** 392 | 393 | IF it_ddic_object IS NOT INITIAL. 394 | lt_ddic_object = it_ddic_object. 395 | ELSE. 396 | lt_ddic_object = get_ddic_object( it_data ). 397 | ENDIF. 398 | 399 | " Apply conversion exit. 400 | LOOP AT lt_ddic_object INTO ls_ddic_object WHERE convexit IS NOT INITIAL. 401 | READ TABLE lt_field_catalog TRANSPORTING NO FIELDS WITH KEY fieldname = ls_ddic_object-fieldname. 402 | CHECK: sy-subrc EQ 0. 403 | lv_index_col = sy-tabix. 404 | 405 | IF ls_ddic_object-convexit EQ 'TSTLC' OR 406 | ls_ddic_object-convexit EQ 'TSTPS'. 407 | LOOP AT it_data ASSIGNING . 408 | lv_index = sy-tabix + 1. 409 | ASSIGN COMPONENT ls_ddic_object-fieldname OF STRUCTURE TO . 410 | CHECK: sy-subrc EQ 0. 411 | IF IS NOT INITIAL. 412 | IF ls_ddic_object-convexit EQ 'TSTLC'. 413 | PERFORM convert_to_local_time IN PROGRAM saplsdc_cnv USING CHANGING lv_local_ts. 414 | ELSE. 415 | lv_local_ts = . 416 | ENDIF. 417 | lo_worksheet->set_cell( 418 | EXPORTING 419 | ip_column = lv_index_col 420 | ip_row = lv_index 421 | ip_value = lv_local_ts 422 | ip_abap_type = cl_abap_typedescr=>typekind_char 423 | ). 424 | ENDIF. 425 | ENDLOOP. 426 | ELSEIF ls_ddic_object-convexit EQ 'ALPHA'. 427 | LOOP AT it_data ASSIGNING . 428 | lv_index = sy-tabix + 1. 429 | ASSIGN COMPONENT ls_ddic_object-fieldname OF STRUCTURE TO . 430 | CHECK: sy-subrc EQ 0. 431 | IF IS NOT INITIAL. 432 | CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT' 433 | EXPORTING 434 | input = 435 | IMPORTING 436 | output = lv_alpha_out. 437 | lo_worksheet->set_cell( 438 | EXPORTING 439 | ip_column = lv_index_col 440 | ip_row = lv_index 441 | ip_value = lv_alpha_out 442 | ip_abap_type = cl_abap_typedescr=>typekind_char 443 | ). 444 | ENDIF. 445 | ENDLOOP. 446 | ENDIF. 447 | 448 | ENDLOOP. 449 | 450 | " Apply currency 451 | LOOP AT lt_ddic_object INTO ls_ddic_object WHERE reffield IS NOT INITIAL. 452 | READ TABLE lt_field_catalog TRANSPORTING NO FIELDS WITH KEY fieldname = ls_ddic_object-fieldname. 453 | CHECK: sy-subrc EQ 0. 454 | lv_index_col = sy-tabix. 455 | 456 | READ TABLE lt_ddic_object INTO ls_ddic_object_ref WITH KEY fieldname = ls_ddic_object-reffield dtyp = 'CUKY'. 457 | CHECK: sy-subrc EQ 0. 458 | READ TABLE lt_field_catalog TRANSPORTING NO FIELDS WITH KEY fieldname = ls_ddic_object_ref-fieldname. 459 | CHECK: sy-subrc EQ 0. 460 | 461 | LOOP AT it_data ASSIGNING . 462 | lv_index = sy-tabix + 1. 463 | ASSIGN COMPONENT ls_ddic_object-fieldname OF STRUCTURE TO . 464 | CHECK: sy-subrc EQ 0. 465 | ASSIGN COMPONENT ls_ddic_object_ref-fieldname OF STRUCTURE TO . 466 | CHECK: sy-subrc EQ 0. 467 | IF IS NOT INITIAL AND 468 | IS NOT INITIAL AND 469 | NE 'USD' AND 470 | NE 'EUR'. 471 | lv_currency = . 472 | CALL FUNCTION 'BAPI_CURRENCY_CONV_TO_EXTERNAL' 473 | EXPORTING 474 | currency = lv_currency 475 | amount_internal = 476 | IMPORTING 477 | amount_external = lv_amount_external. 478 | lo_worksheet->set_cell( 479 | EXPORTING 480 | ip_column = lv_index_col 481 | ip_row = lv_index 482 | ip_value = lv_amount_external 483 | ip_abap_type = cl_abap_typedescr=>typekind_packed 484 | ). 485 | ENDIF. 486 | ENDLOOP. 487 | ENDLOOP. 488 | 489 | " auto column width 490 | IF iv_auto_column_width EQ abap_true. 491 | DO lv_column_count TIMES. 492 | lv_index_col = sy-index. 493 | lo_worksheet->set_column_width( 494 | EXPORTING 495 | ip_column = lv_index_col 496 | ip_width_autosize = abap_true 497 | ). 498 | ENDDO. 499 | ENDIF. 500 | 501 | " add fixed value sheet 502 | IF iv_add_fixedvalue_sheet EQ abap_true. 503 | add_fixedvalue_sheet( 504 | EXPORTING 505 | it_data = it_data 506 | it_field = it_field 507 | it_field_catalog = lt_field_catalog 508 | io_excel = lo_excel 509 | ). 510 | lo_excel->set_active_sheet_index( 1 ). 511 | ENDIF. 512 | 513 | " add image 514 | IF iv_image_xstring IS NOT INITIAL. 515 | add_image( 516 | EXPORTING 517 | iv_image_xstring = iv_image_xstring 518 | iv_col = lv_column_count + 1 519 | io_excel = lo_excel 520 | ). 521 | ENDIF. 522 | 523 | " Freeze column headers when scrolling 524 | lo_worksheet->freeze_panes( ip_num_rows = 1 ). 525 | 526 | " Create output 527 | CREATE OBJECT lo_writer TYPE zcl_excel_writer_2007. 528 | ev_excel = lo_writer->write_file( lo_excel ). 529 | 530 | 531 | CATCH zcx_excel INTO lo_zcx_excel. " Exceptions for ABAP2XLSX 532 | ev_error_text = lo_zcx_excel->error. 533 | RETURN. 534 | ENDTRY. 535 | 536 | 537 | do_drm_decode( 538 | CHANGING 539 | cv_excel = ev_excel 540 | ). 541 | 542 | ENDMETHOD. 543 | 544 | 545 | METHOD convert_excel_to_abap. 546 | * http://www.abap2xlsx.org 547 | TYPES: BEGIN OF ts_field_conv, 548 | fieldname TYPE x031l-fieldname, 549 | convexit TYPE x031l-convexit, 550 | END OF ts_field_conv, 551 | BEGIN OF ts_style_conv, 552 | cell_style TYPE zexcel_s_cell_data-cell_style, 553 | abap_type TYPE abap_typekind, 554 | END OF ts_style_conv. 555 | DATA: lo_excel TYPE REF TO zcl_excel, 556 | lo_reader TYPE REF TO zif_excel_reader, 557 | lo_worksheet TYPE REF TO zcl_excel_worksheet, 558 | lv_excel TYPE xstring, 559 | ls_error_log TYPE za2xh_s_error_log, 560 | lt_field TYPE za2xh_t_fieldcatalog, 561 | lt_field_conv TYPE TABLE OF ts_field_conv, 562 | lt_comp TYPE abap_component_tab, 563 | ls_comp TYPE abap_componentdescr, 564 | lo_tab_type TYPE REF TO cl_abap_tabledescr, 565 | lr_data TYPE REF TO data, 566 | lt_ddic_object TYPE dd_x031l_table, 567 | lt_style_conv TYPE TABLE OF ts_style_conv, 568 | ls_style_conv TYPE ts_style_conv, 569 | ls_stylemapping TYPE zexcel_s_stylemapping, 570 | lv_format_code TYPE zexcel_number_format, 571 | lv_float TYPE f, 572 | lt_map_excel_row TYPE TABLE OF i, 573 | lv_currency TYPE tcurc-waers, 574 | lv_amount_external TYPE bapicurr-bapicurr, 575 | lo_cx_root TYPE REF TO cx_root, 576 | lo_zcx_excel TYPE REF TO zcx_excel, 577 | lv_index TYPE i, 578 | lv_index_col TYPE i. 579 | FIELD-SYMBOLS: TYPE STANDARD TABLE, 580 | TYPE data, 581 | TYPE data, 582 | TYPE STANDARD TABLE, 583 | TYPE data, 584 | TYPE data, 585 | TYPE data, 586 | TYPE za2xh_s_fieldcatalog, 587 | TYPE ts_field_conv, 588 | TYPE x031l, 589 | TYPE x031l, 590 | TYPE zexcel_s_cell_data. 591 | 592 | CLEAR: ev_error_text, et_data[], et_error_log[]. 593 | 594 | CHECK: iv_excel IS NOT INITIAL. 595 | lv_excel = iv_excel. 596 | " DRM Decode 597 | do_drm_decode( 598 | CHANGING 599 | cv_excel = lv_excel 600 | ). 601 | 602 | 603 | TRY. 604 | CREATE OBJECT lo_reader TYPE zcl_excel_reader_2007. 605 | lo_excel = lo_reader->load( lv_excel ). 606 | lo_worksheet = lo_excel->get_worksheet_by_index( iv_sheet_no ). 607 | 608 | 609 | " Field catalog 610 | IF it_field IS NOT INITIAL. 611 | lt_field = it_field. 612 | ELSE. 613 | get_fieldcatalog( 614 | EXPORTING 615 | it_data = et_data 616 | IMPORTING 617 | et_field = lt_field 618 | ). 619 | ENDIF. 620 | 621 | " Create internal table with string columns 622 | ls_comp-type = cl_abap_elemdescr=>get_string( ). 623 | LOOP AT lt_field ASSIGNING . 624 | ls_comp-name = -fieldname. 625 | APPEND ls_comp TO lt_comp. 626 | ENDLOOP. 627 | lo_tab_type = cl_abap_tabledescr=>create( cl_abap_structdescr=>create( lt_comp ) ). 628 | CREATE DATA lr_data TYPE HANDLE lo_tab_type. 629 | ASSIGN lr_data->* TO . 630 | 631 | " Collect field conversion rules 632 | IF et_data IS SUPPLIED. 633 | lt_ddic_object = get_ddic_object( et_data ). 634 | SORT lt_ddic_object BY fieldname. 635 | ENDIF. 636 | MOVE-CORRESPONDING lt_field TO lt_field_conv. 637 | LOOP AT lt_field_conv ASSIGNING . 638 | READ TABLE lt_ddic_object ASSIGNING WITH KEY fieldname = -fieldname BINARY SEARCH. 639 | CHECK: sy-subrc EQ 0. 640 | CASE -exid. 641 | WHEN cl_abap_typedescr=>typekind_int 642 | OR cl_abap_typedescr=>typekind_int1 643 | OR cl_abap_typedescr=>typekind_int8 644 | OR cl_abap_typedescr=>typekind_int2 645 | OR cl_abap_typedescr=>typekind_packed 646 | OR cl_abap_typedescr=>typekind_decfloat 647 | OR cl_abap_typedescr=>typekind_decfloat16 648 | OR cl_abap_typedescr=>typekind_decfloat34 649 | OR cl_abap_typedescr=>typekind_float. 650 | " Numbers 651 | -convexit = cl_abap_typedescr=>typekind_float. 652 | WHEN OTHERS. 653 | -convexit = -convexit. 654 | ENDCASE. 655 | ENDLOOP. 656 | 657 | " Date & Time in excel style 658 | LOOP AT lo_worksheet->sheet_content ASSIGNING WHERE cell_style IS NOT INITIAL AND data_type IS INITIAL. 659 | ls_style_conv-cell_style = -cell_style. 660 | APPEND ls_style_conv TO lt_style_conv. 661 | ENDLOOP. 662 | IF lt_style_conv IS NOT INITIAL. 663 | SORT lt_style_conv BY cell_style. 664 | DELETE ADJACENT DUPLICATES FROM lt_style_conv COMPARING cell_style. 665 | 666 | LOOP AT lt_style_conv INTO ls_style_conv. 667 | 668 | ls_stylemapping = lo_excel->get_style_to_guid( ls_style_conv-cell_style ). 669 | lv_format_code = ls_stylemapping-complete_style-number_format-format_code. 670 | " https://support.microsoft.com/en-us/office/number-format-codes-5026bbd6-04bc-48cd-bf33-80f18b4eae68 671 | IF lv_format_code CS ';'. 672 | lv_format_code = lv_format_code(sy-fdpos). 673 | ENDIF. 674 | CHECK: lv_format_code NA '#?'. 675 | 676 | " Remove color pattern 677 | REPLACE ALL OCCURRENCES OF REGEX '\[\L[^]]*\]' IN lv_format_code WITH ''. 678 | 679 | IF lv_format_code CA 'yd' OR lv_format_code EQ zcl_excel_style_number_format=>c_format_date_std. 680 | " DATE = yyyymmdd 681 | ls_style_conv-abap_type = cl_abap_typedescr=>typekind_date. 682 | ELSEIF lv_format_code CA 'hs'. 683 | " TIME = hhmmss 684 | ls_style_conv-abap_type = cl_abap_typedescr=>typekind_time. 685 | ELSE. 686 | DELETE lt_style_conv. 687 | CONTINUE. 688 | ENDIF. 689 | 690 | MODIFY lt_style_conv FROM ls_style_conv TRANSPORTING abap_type. 691 | 692 | ENDLOOP. 693 | ENDIF. 694 | 695 | 696 | ********************************************************************** 697 | * Start of convert content 698 | ********************************************************************** 699 | READ TABLE lo_worksheet->sheet_content TRANSPORTING NO FIELDS WITH KEY cell_row = iv_begin_row. 700 | IF sy-subrc EQ 0. 701 | lv_index = sy-tabix. 702 | ENDIF. 703 | 704 | LOOP AT lo_worksheet->sheet_content ASSIGNING FROM lv_index. 705 | AT NEW cell_row. 706 | " New line 707 | APPEND INITIAL LINE TO ASSIGNING . 708 | lv_index = sy-tabix. 709 | ENDAT. 710 | 711 | IF -cell_value IS NOT INITIAL. 712 | ASSIGN COMPONENT -cell_column OF STRUCTURE TO . 713 | IF sy-subrc EQ 0. 714 | " value 715 | = -cell_value. 716 | 717 | " field conversion 718 | READ TABLE lt_field_conv ASSIGNING INDEX -cell_column. 719 | IF sy-subrc EQ 0 AND -convexit IS NOT INITIAL. 720 | CASE -convexit. 721 | WHEN cl_abap_typedescr=>typekind_float. 722 | lv_float = zcl_excel_common=>excel_string_to_number( -cell_value ). 723 | = |{ lv_float NUMBER = RAW }|. 724 | WHEN 'ALPHA'. 725 | CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT' 726 | EXPORTING 727 | input = -cell_value 728 | IMPORTING 729 | output = . 730 | ENDCASE. 731 | ENDIF. 732 | 733 | " style conversion 734 | IF -cell_style IS NOT INITIAL. 735 | READ TABLE lt_style_conv INTO ls_style_conv WITH KEY cell_style = -cell_style BINARY SEARCH. 736 | IF sy-subrc EQ 0. 737 | CASE ls_style_conv-abap_type. 738 | WHEN cl_abap_typedescr=>typekind_date. 739 | = zcl_excel_common=>excel_string_to_date( -cell_value ). 740 | WHEN cl_abap_typedescr=>typekind_time. 741 | = zcl_excel_common=>excel_string_to_time( -cell_value ). 742 | ENDCASE. 743 | ENDIF. 744 | ENDIF. 745 | 746 | " condense 747 | CONDENSE . 748 | ENDIF. 749 | ENDIF. 750 | 751 | AT END OF cell_row. 752 | " Delete empty line 753 | IF IS INITIAL. 754 | DELETE INDEX lv_index. 755 | ELSE. 756 | APPEND -cell_row TO lt_map_excel_row. 757 | ENDIF. 758 | ENDAT. 759 | ENDLOOP. 760 | ********************************************************************** 761 | * End of convert content 762 | ********************************************************************** 763 | 764 | 765 | CHECK: IS NOT INITIAL. 766 | MOVE-CORRESPONDING TO et_data. 767 | 768 | 769 | " Find errors 770 | IF et_error_log IS SUPPLIED. 771 | CREATE DATA lr_data LIKE . 772 | ASSIGN lr_data->* TO . 773 | MOVE-CORRESPONDING et_data TO . 774 | LOOP AT lt_field_conv ASSIGNING 775 | WHERE convexit = cl_abap_typedescr=>typekind_float. 776 | LOOP AT ASSIGNING . 777 | ASSIGN COMPONENT -fieldname OF STRUCTURE TO . 778 | CHECK: sy-subrc EQ 0 AND IS NOT INITIAL. 779 | lv_float = . 780 | = |{ lv_float NUMBER = RAW }|. 781 | ENDLOOP. 782 | ENDLOOP. 783 | 784 | IF NE . 785 | LOOP AT ASSIGNING . 786 | lv_index = sy-tabix. 787 | READ TABLE ASSIGNING INDEX lv_index. 788 | IF NE . 789 | LOOP AT lt_field_conv ASSIGNING . 790 | lv_index_col = sy-tabix. 791 | ASSIGN COMPONENT -fieldname OF STRUCTURE TO . 792 | CHECK: sy-subrc EQ 0. 793 | ASSIGN COMPONENT -fieldname OF STRUCTURE TO . 794 | CHECK: sy-subrc EQ 0. 795 | IF NE . 796 | CLEAR: ls_error_log. 797 | ls_error_log-row = lv_index. 798 | ls_error_log-fieldname = -fieldname. 799 | ls_error_log-abap_value = . 800 | ls_error_log-excel_value = . 801 | READ TABLE lt_map_excel_row INTO lv_index INDEX lv_index. 802 | READ TABLE lo_worksheet->sheet_content ASSIGNING WITH TABLE KEY cell_row = lv_index cell_column = lv_index_col. 803 | ls_error_log-excel_coords = -cell_coords. 804 | APPEND ls_error_log TO et_error_log. 805 | ENDIF. 806 | ENDLOOP. 807 | ENDIF. 808 | ENDLOOP. 809 | ENDIF. 810 | ENDIF. 811 | 812 | 813 | " Apply conversion exit. 814 | LOOP AT lt_field_conv ASSIGNING 815 | WHERE convexit = 'ALPHA' 816 | OR convexit = 'TSTLC'. 817 | LOOP AT et_data ASSIGNING . 818 | ASSIGN COMPONENT -fieldname OF STRUCTURE TO . 819 | CHECK: sy-subrc EQ 0 AND IS NOT INITIAL. 820 | CASE -convexit. 821 | WHEN 'ALPHA'. 822 | CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' 823 | EXPORTING 824 | input = 825 | IMPORTING 826 | output = . 827 | WHEN 'TSTLC'. 828 | PERFORM convert_to_utc_time IN PROGRAM saplsdc_cnv USING CHANGING . 829 | ENDCASE. 830 | ENDLOOP. 831 | ENDLOOP. 832 | 833 | 834 | " Apply currency 835 | LOOP AT lt_ddic_object ASSIGNING WHERE reffield IS NOT INITIAL. 836 | READ TABLE lt_ddic_object ASSIGNING WITH KEY fieldname = -reffield dtyp = 'CUKY'. 837 | CHECK: sy-subrc EQ 0. 838 | LOOP AT et_data ASSIGNING . 839 | ASSIGN COMPONENT -fieldname OF STRUCTURE TO . 840 | CHECK: sy-subrc EQ 0. 841 | IF IS NOT INITIAL. 842 | ASSIGN COMPONENT -fieldname OF STRUCTURE TO . 843 | CHECK: sy-subrc EQ 0. 844 | IF IS NOT INITIAL AND 845 | NE 'USD' AND 846 | NE 'EUR'. 847 | lv_currency = . 848 | lv_amount_external = . 849 | CALL FUNCTION 'BAPI_CURRENCY_CONV_TO_INTERNAL' 850 | EXPORTING 851 | currency = lv_currency 852 | amount_external = lv_amount_external 853 | max_number_of_digits = 23 854 | IMPORTING 855 | amount_internal = . 856 | ENDIF. 857 | ENDIF. 858 | ENDLOOP. 859 | ENDLOOP. 860 | 861 | CATCH zcx_excel INTO lo_zcx_excel. " Exceptions for ABAP2XLSX 862 | ev_error_text = lo_zcx_excel->error. 863 | CATCH cx_root INTO lo_cx_root. 864 | ev_error_text = lo_cx_root->get_text( ). 865 | ENDTRY. 866 | 867 | 868 | 869 | ENDMETHOD. 870 | 871 | 872 | METHOD convert_json_to_excel. 873 | * http://www.abap2xlsx.org 874 | DATA: ls_field TYPE za2xh_s_fieldcatalog, 875 | lt_comp TYPE abap_component_tab, 876 | ls_comp TYPE abap_componentdescr, 877 | lo_tab_type TYPE REF TO cl_abap_tabledescr, 878 | lr_data TYPE REF TO data. 879 | FIELD-SYMBOLS: TYPE table. 880 | 881 | " json to table 882 | LOOP AT it_field INTO ls_field. 883 | ls_comp-name = ls_field-fieldname. 884 | ls_comp-type = cl_abap_elemdescr=>get_string( ). 885 | APPEND ls_comp TO lt_comp. 886 | ENDLOOP. 887 | lo_tab_type = cl_abap_tabledescr=>create( cl_abap_structdescr=>create( lt_comp ) ). 888 | CREATE DATA lr_data TYPE HANDLE lo_tab_type. 889 | ASSIGN lr_data->* TO . 890 | 891 | /ui2/cl_json=>deserialize( 892 | EXPORTING 893 | json = iv_data_json 894 | CHANGING 895 | data = 896 | ). 897 | 898 | " table to excel 899 | convert_abap_to_excel( 900 | EXPORTING 901 | it_data = 902 | it_ddic_object = it_ddic_object 903 | it_field = it_field 904 | iv_sheet_title = iv_sheet_title 905 | iv_image_xstring = iv_image_xstring 906 | iv_add_fixedvalue_sheet = iv_add_fixedvalue_sheet 907 | iv_auto_column_width = iv_auto_column_width 908 | iv_default_descr = iv_default_descr 909 | IMPORTING 910 | ev_excel = ev_excel 911 | ev_error_text = ev_error_text 912 | ). 913 | ENDMETHOD. 914 | 915 | 916 | METHOD do_drm_decode. 917 | * if you need to DRM decode. write code here. 918 | ENDMETHOD. 919 | 920 | 921 | METHOD do_drm_encode. 922 | * if you need to DRM encode. write code here. 923 | ENDMETHOD. 924 | 925 | 926 | METHOD excel_download. 927 | * http://www.abap2xlsx.org 928 | convert_abap_to_excel( 929 | EXPORTING 930 | it_data = it_data 931 | it_field = it_field 932 | iv_sheet_title = iv_sheet_title 933 | iv_image_xstring = iv_image_xstring 934 | iv_add_fixedvalue_sheet = iv_add_fixedvalue_sheet 935 | iv_auto_column_width = iv_auto_column_width 936 | iv_default_descr = iv_default_descr 937 | IMPORTING 938 | ev_excel = ev_excel 939 | ev_error_text = ev_error_text 940 | ). 941 | 942 | IF ev_error_text IS NOT INITIAL. 943 | zcl_abap2xlsx_helper=>message( iv_error_text = ev_error_text ). 944 | RETURN. 945 | ENDIF. 946 | 947 | start_download( 948 | EXPORTING 949 | iv_excel = ev_excel 950 | iv_filename = iv_filename 951 | ). 952 | 953 | ENDMETHOD. 954 | 955 | 956 | METHOD excel_email. 957 | * http://www.abap2xlsx.org 958 | DATA: lt_receiver TYPE TABLE OF string, 959 | lo_event_data TYPE REF TO if_fpm_parameter. 960 | 961 | IF it_receiver IS NOT INITIAL. 962 | lt_receiver = it_receiver. 963 | ELSE. 964 | lt_receiver = zcl_za2xh_email_popup=>get_default_receiver( ). 965 | ENDIF. 966 | 967 | lo_event_data = NEW cl_fpm_parameter( ). 968 | 969 | lo_event_data->set_value( 970 | EXPORTING 971 | iv_key = 'IT_RECEIVER' 972 | iv_value = lt_receiver 973 | ). 974 | 975 | lo_event_data->set_value( 976 | EXPORTING 977 | iv_key = 'IT_DATA' 978 | iv_value = it_data 979 | ). 980 | 981 | lo_event_data->set_value( 982 | EXPORTING 983 | iv_key = 'IT_FIELD' 984 | iv_value = it_field 985 | ). 986 | 987 | lo_event_data->set_value( 988 | EXPORTING 989 | iv_key = 'IV_SUBJECT' 990 | iv_value = CONV string( iv_subject ) 991 | ). 992 | 993 | lo_event_data->set_value( 994 | EXPORTING 995 | iv_key = 'IV_SENDER' 996 | iv_value = CONV string( iv_sender ) 997 | ). 998 | 999 | lo_event_data->set_value( 1000 | EXPORTING 1001 | iv_key = 'IV_FILENAME' 1002 | iv_value = CONV string( iv_filename ) 1003 | ). 1004 | 1005 | lo_event_data->set_value( 1006 | EXPORTING 1007 | iv_key = 'IV_SHEET_TITLE' 1008 | iv_value = CONV string( iv_sheet_title ) 1009 | ). 1010 | 1011 | lo_event_data->set_value( 1012 | EXPORTING 1013 | iv_key = 'IV_IMAGE_XSTRING' 1014 | iv_value = iv_image_xstring 1015 | ). 1016 | 1017 | lo_event_data->set_value( 1018 | EXPORTING 1019 | iv_key = 'IV_ADD_FIXEDVALUE_SHEET' 1020 | iv_value = iv_add_fixedvalue_sheet 1021 | ). 1022 | 1023 | lo_event_data->set_value( 1024 | EXPORTING 1025 | iv_key = 'IV_AUTO_COLUMN_WIDTH' 1026 | iv_value = iv_auto_column_width 1027 | ). 1028 | 1029 | lo_event_data->set_value( 1030 | EXPORTING 1031 | iv_key = 'IV_DEFAULT_DESCR' 1032 | iv_value = iv_default_descr 1033 | ). 1034 | 1035 | 1036 | IF wdr_task=>application IS NOT INITIAL. 1037 | " WD or FPM 1038 | zcl_za2xh_email_popup=>open_popup( io_event_data = lo_event_data ). 1039 | ELSE. 1040 | " GUI 1041 | CALL FUNCTION 'ZA2XH_EMAIL_POPUP_GUI' 1042 | EXPORTING 1043 | io_event_data = lo_event_data. 1044 | ENDIF. 1045 | 1046 | 1047 | IF 1 EQ 2. 1048 | " ok click on popup 1049 | NEW zcl_za2xh_email_popup( )->on_ok( ). 1050 | ENDIF. 1051 | 1052 | ENDMETHOD. 1053 | 1054 | 1055 | METHOD excel_upload. 1056 | * http://www.abap2xlsx.org 1057 | DATA: lv_excel TYPE xstring. 1058 | FIELD-SYMBOLS: TYPE xstring. 1059 | 1060 | 1061 | IF iv_excel IS NOT INITIAL. 1062 | ASSIGN iv_excel TO . 1063 | ELSE. 1064 | start_upload( 1065 | IMPORTING 1066 | ev_excel = lv_excel 1067 | ). 1068 | ASSIGN lv_excel TO . 1069 | ENDIF. 1070 | 1071 | convert_excel_to_abap( 1072 | EXPORTING 1073 | iv_excel = 1074 | it_field = it_field 1075 | iv_begin_row = iv_begin_row 1076 | iv_sheet_no = iv_sheet_no 1077 | IMPORTING 1078 | et_data = et_data 1079 | ev_error_text = ev_error_text 1080 | et_error_log = et_error_log 1081 | ). 1082 | 1083 | IF ev_error_text IS NOT INITIAL. 1084 | zcl_abap2xlsx_helper=>message( iv_error_text = ev_error_text ). 1085 | ENDIF. 1086 | 1087 | ENDMETHOD. 1088 | 1089 | 1090 | METHOD get_ddic_object. 1091 | DATA: lo_type_desc TYPE REF TO cl_abap_typedescr, 1092 | lo_table_desc TYPE REF TO cl_abap_tabledescr, 1093 | lo_struct_desc TYPE REF TO cl_abap_structdescr, 1094 | lt_comp_view TYPE abap_component_view_tab, 1095 | ls_comp_view TYPE abap_simple_componentdescr, 1096 | lt_ddic_object TYPE dd_x031l_table, 1097 | ls_ddic_object TYPE x031l. 1098 | 1099 | lo_type_desc = cl_abap_typedescr=>describe_by_data( i_data ). 1100 | CASE lo_type_desc->kind. 1101 | WHEN cl_abap_typedescr=>kind_table. 1102 | lo_table_desc ?= lo_type_desc. 1103 | lo_type_desc = lo_table_desc->get_table_line_type( ). 1104 | IF lo_type_desc->kind EQ cl_abap_typedescr=>kind_struct. 1105 | lo_struct_desc ?= lo_type_desc. 1106 | ENDIF. 1107 | WHEN cl_abap_typedescr=>kind_struct. 1108 | lo_struct_desc ?= lo_type_desc. 1109 | ENDCASE. 1110 | 1111 | IF lo_struct_desc IS NOT INITIAL. 1112 | lo_struct_desc->get_ddic_object( 1113 | RECEIVING 1114 | p_object = rt_ddic_object 1115 | EXCEPTIONS 1116 | not_found = 1 1117 | no_ddic_type = 2 1118 | OTHERS = 3 1119 | ). 1120 | IF rt_ddic_object IS INITIAL. 1121 | lt_comp_view = lo_struct_desc->get_included_view( ). 1122 | LOOP AT lt_comp_view INTO ls_comp_view. 1123 | ls_comp_view-type->get_ddic_object( 1124 | RECEIVING 1125 | p_object = lt_ddic_object 1126 | EXCEPTIONS 1127 | not_found = 1 1128 | no_ddic_type = 2 1129 | OTHERS = 3 1130 | ). 1131 | IF lt_ddic_object IS NOT INITIAL. 1132 | READ TABLE lt_ddic_object INTO ls_ddic_object INDEX 1. 1133 | ls_ddic_object-fieldname = ls_comp_view-name. 1134 | APPEND ls_ddic_object TO rt_ddic_object. 1135 | ENDIF. 1136 | ENDLOOP. 1137 | ENDIF. 1138 | ENDIF. 1139 | 1140 | ENDMETHOD. 1141 | 1142 | 1143 | METHOD get_fieldcatalog. 1144 | * http://www.abap2xlsx.org 1145 | DATA: lt_fc TYPE zexcel_t_fieldcatalog, 1146 | ls_fc TYPE zexcel_s_fieldcatalog, 1147 | ls_field TYPE za2xh_s_fieldcatalog. 1148 | 1149 | lt_fc = zcl_excel_common=>get_fieldcatalog( ip_table = it_data ). 1150 | DELETE lt_fc WHERE dynpfld NE abap_true. 1151 | 1152 | LOOP AT lt_fc INTO ls_fc. 1153 | ls_field-fieldname = ls_fc-fieldname. 1154 | CASE iv_default_descr. 1155 | WHEN 'L'. 1156 | ls_field-label_text = ls_fc-scrtext_l. 1157 | WHEN 'M'. 1158 | ls_field-label_text = ls_fc-scrtext_m. 1159 | WHEN 'S'. 1160 | ls_field-label_text = ls_fc-scrtext_s. 1161 | WHEN OTHERS. 1162 | CLEAR: ls_field-label_text. 1163 | ENDCASE. 1164 | APPEND ls_field TO et_field. 1165 | ENDLOOP. 1166 | ENDMETHOD. 1167 | 1168 | 1169 | METHOD get_xstring_from_smw0. 1170 | DATA: lo_drawing TYPE REF TO zcl_excel_drawing. 1171 | 1172 | CREATE OBJECT lo_drawing. 1173 | lo_drawing->set_media_www( 1174 | EXPORTING 1175 | ip_key = VALUE #( relid = 'MI' objid = iv_smw0 ) 1176 | ip_width = 0 1177 | ip_height = 0 1178 | ). 1179 | rv_xstring = lo_drawing->get_media( ). 1180 | ENDMETHOD. 1181 | 1182 | 1183 | METHOD start_download. 1184 | CONSTANTS: lc_xlsx_mime TYPE string VALUE 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'. 1185 | DATA: lv_filename_string TYPE string, 1186 | lv_filename_path TYPE string, 1187 | lv_filename_fullpath TYPE string, 1188 | lv_bin_filesize TYPE i, 1189 | lt_temptable TYPE w3mimetabtype. 1190 | 1191 | 1192 | IF iv_filename IS NOT INITIAL. 1193 | lv_filename_string = iv_filename. 1194 | ELSE. 1195 | lv_filename_string = zcl_abap2xlsx_helper=>default_excel_filename( ). 1196 | ENDIF. 1197 | 1198 | IF wdr_task=>application IS NOT INITIAL. 1199 | " WD or FPM 1200 | cl_wd_runtime_services=>attach_file_to_response( 1201 | EXPORTING 1202 | i_filename = lv_filename_string 1203 | i_content = iv_excel 1204 | i_mime_type = lc_xlsx_mime 1205 | ). 1206 | ELSE. 1207 | " GUI 1208 | CALL FUNCTION 'SCMS_XSTRING_TO_BINARY' 1209 | EXPORTING 1210 | buffer = iv_excel 1211 | IMPORTING 1212 | output_length = lv_bin_filesize 1213 | TABLES 1214 | binary_tab = lt_temptable. 1215 | cl_gui_frontend_services=>file_save_dialog( 1216 | EXPORTING 1217 | default_file_name = lv_filename_string " DEFAULT FILE NAME 1218 | file_filter = '*.xlsx' " file type filter table 1219 | CHANGING 1220 | filename = lv_filename_string " file name to save 1221 | path = lv_filename_path " path to file 1222 | fullpath = lv_filename_fullpath " path + file name 1223 | EXCEPTIONS 1224 | OTHERS = 5 1225 | ). 1226 | IF sy-subrc NE 0. 1227 | MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno 1228 | WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. 1229 | ENDIF. 1230 | IF lv_filename_fullpath IS NOT INITIAL. 1231 | cl_gui_frontend_services=>gui_download( 1232 | EXPORTING 1233 | bin_filesize = lv_bin_filesize 1234 | filename = lv_filename_fullpath 1235 | filetype = 'BIN' 1236 | CHANGING 1237 | data_tab = lt_temptable 1238 | EXCEPTIONS 1239 | file_write_error = 1 1240 | no_batch = 2 1241 | gui_refuse_filetransfer = 3 1242 | invalid_type = 4 1243 | no_authority = 5 1244 | unknown_error = 6 1245 | header_not_allowed = 7 1246 | separator_not_allowed = 8 1247 | filesize_not_allowed = 9 1248 | header_too_long = 10 1249 | dp_error_create = 11 1250 | dp_error_send = 12 1251 | dp_error_write = 13 1252 | unknown_dp_error = 14 1253 | access_denied = 15 1254 | dp_out_of_memory = 16 1255 | disk_full = 17 1256 | dp_timeout = 18 1257 | file_not_found = 19 1258 | dataprovider_exception = 20 1259 | control_flush_error = 21 1260 | not_supported_by_gui = 22 1261 | error_no_gui = 23 1262 | OTHERS = 24 1263 | ). 1264 | IF sy-subrc NE 0. 1265 | MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno 1266 | WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. 1267 | ENDIF. 1268 | ENDIF. 1269 | ENDIF. 1270 | 1271 | ENDMETHOD. 1272 | 1273 | 1274 | METHOD start_upload. 1275 | DATA: lt_file_table TYPE filetable, 1276 | ls_file_table TYPE file_table, 1277 | lv_rc TYPE i, 1278 | lv_filename TYPE string, 1279 | lv_filelength TYPE i, 1280 | lt_temptable TYPE w3mimetabtype. 1281 | 1282 | IF wdr_task=>application IS NOT INITIAL. 1283 | " WD or FPM 1284 | RETURN. 1285 | ELSE. 1286 | " GUI 1287 | cl_gui_frontend_services=>file_open_dialog( 1288 | EXPORTING 1289 | * window_title = window_title " Title Of File Open Dialog 1290 | default_extension = 'xlsx' " Default Extension 1291 | * default_filename = default_filename " Default File Name 1292 | file_filter = 'excel (*.xlsx)|*.xlsx|' " File Extension Filter String 1293 | * with_encoding = with_encoding " File Encoding 1294 | * initial_directory = initial_directory " Initial Directory 1295 | multiselection = abap_false " Multiple selections poss. 1296 | CHANGING 1297 | file_table = lt_file_table " Table Holding Selected Files 1298 | rc = lv_rc " Return Code, Number of Files or -1 If Error Occurred 1299 | * user_action = user_action " User Action (See Class Constants ACTION_OK, ACTION_CANCEL) 1300 | * file_encoding = file_encoding 1301 | EXCEPTIONS 1302 | file_open_dialog_failed = 1 " "Open File" dialog failed 1303 | cntl_error = 2 " Control error 1304 | error_no_gui = 3 " No GUI available 1305 | not_supported_by_gui = 4 " GUI does not support this 1306 | OTHERS = 5 1307 | ). 1308 | IF sy-subrc NE 0. 1309 | MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno 1310 | WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. 1311 | ENDIF. 1312 | 1313 | READ TABLE lt_file_table INTO ls_file_table INDEX 1. 1314 | CHECK: sy-subrc EQ 0. 1315 | lv_filename = ls_file_table-filename. 1316 | 1317 | cl_gui_frontend_services=>gui_upload( 1318 | EXPORTING 1319 | filename = lv_filename " Name of file 1320 | filetype = 'BIN' " File Type (ASCII, Binary) 1321 | * has_field_separator = space " Columns Separated by Tabs in Case of ASCII Upload 1322 | * header_length = 0 " Length of Header for Binary Data 1323 | * read_by_line = 'X' " File Written Line-By-Line to the Internal Table 1324 | * dat_mode = space " Numeric and date fields are in DAT format in WS_DOWNLOAD 1325 | * codepage = codepage " Character Representation for Output 1326 | * ignore_cerr = abap_true " Ignore character set conversion errors? 1327 | * replacement = '#' " Replacement Character for Non-Convertible Characters 1328 | * virus_scan_profile = virus_scan_profile " Virus Scan Profile 1329 | IMPORTING 1330 | filelength = lv_filelength " File Length 1331 | * header = header " File Header in Case of Binary Upload 1332 | CHANGING 1333 | data_tab = lt_temptable " Transfer table for file contents 1334 | * isscanperformed = space " File already scanned 1335 | EXCEPTIONS 1336 | file_open_error = 1 " File does not exist and cannot be opened 1337 | file_read_error = 2 " Error when reading file 1338 | no_batch = 3 " Cannot execute front-end function in background 1339 | gui_refuse_filetransfer = 4 " Incorrect front end or error on front end 1340 | invalid_type = 5 " Incorrect parameter FILETYPE 1341 | no_authority = 6 " No upload authorization 1342 | unknown_error = 7 " Unknown error 1343 | bad_data_format = 8 " Cannot Interpret Data in File 1344 | header_not_allowed = 9 " Invalid header 1345 | separator_not_allowed = 10 " Invalid separator 1346 | header_too_long = 11 " Header information currently restricted to 1023 bytes 1347 | unknown_dp_error = 12 " Error when calling data provider 1348 | access_denied = 13 " Access to file denied. 1349 | dp_out_of_memory = 14 " Not enough memory in data provider 1350 | disk_full = 15 " Storage medium is full. 1351 | dp_timeout = 16 " Data provider timeout 1352 | not_supported_by_gui = 17 " GUI does not support this 1353 | error_no_gui = 18 " GUI not available 1354 | OTHERS = 19 1355 | ). 1356 | IF sy-subrc NE 0. 1357 | MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno 1358 | WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. 1359 | ENDIF. 1360 | 1361 | CALL FUNCTION 'SCMS_BINARY_TO_XSTRING' 1362 | EXPORTING 1363 | input_length = lv_filelength 1364 | IMPORTING 1365 | buffer = ev_excel 1366 | TABLES 1367 | binary_tab = lt_temptable 1368 | EXCEPTIONS 1369 | failed = 1 1370 | OTHERS = 2. 1371 | IF sy-subrc NE 0. 1372 | MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno 1373 | WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. 1374 | ENDIF. 1375 | ENDIF. 1376 | ENDMETHOD. 1377 | ENDCLASS. 1378 | --------------------------------------------------------------------------------