├── 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 |
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 |
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 |
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 |
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 |

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 |

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 |
--------------------------------------------------------------------------------