0% found this document useful (0 votes)
1K views3 pages

Email Excel Attachment from ABAP Table

Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
1K views3 pages

Email Excel Attachment from ABAP Table

Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 3

Send an Email with Excel Attachment (From Internal Table)

CLASS lcl_email_with_excel DEFINITION.


PUBLIC SECTION.
METHODS send_email.

PRIVATE SECTION.
TYPES: BEGIN OF ty_employee,
emp_id TYPE pernr_d,
emp_name TYPE text100,
manager_id TYPE pernr_d,
manager_name TYPE text100,
emp_position TYPE text100,
END OF ty_employee,
tt_employee TYPE TABLE OF ty_employee WITH EMPTY KEY.

TYPES: BEGIN OF ty_column,


column_name TYPE text30,
column_text TYPE text40,
END OF ty_column,
tt_columns TYPE TABLE OF ty_column WITH EMPTY KEY.
CLASS-DATA mt_emloyees TYPE tt_employee.
CLASS-DATA mt_columns TYPE tt_columns.

METHODS load_data.
METHODS convert_itab_to_xls_xstring RETURNING VALUE(rv_xstring) TYPE xstring.
ENDCLASS.

CLASS lcl_email_with_excel IMPLEMENTATION.


METHOD load_data.
mt_emloyees = VALUE #( ( emp_id = '1' emp_name = 'Name 1' emp_position = 'DEV_1' ma
nager_id = '1' manager_name = 'Manager 1' )
( emp_id = '2' emp_name = 'Name 2' emp_position = 'DEV_2' ma
nager_id = '2' manager_name = 'Manager 2' ) ).

mt_columns = VALUE #( ( column_name = 'EMP_ID' column_text = 'Employee ID' )


( column_name = 'EMP_NAME' column_text = 'Employee Name'
)
( column_name = 'EMP_POSITION' column_text = 'Employee Positi
on' )
( column_name = 'MANAGER_ID' column_text = 'Manager ID' )
( column_name = 'MANAGER_NAME' column_text = 'Manager Name' )
).
ENDMETHOD.

METHOD convert_itab_to_xls_xstring.
TRY.
cl_salv_table=>factory(
EXPORTING
list_display = abap_false
IMPORTING
r_salv_table = DATA(lo_salv_table)
CHANGING
t_table = mt_emloyees ).

LOOP AT mt_columns ASSIGNING FIELD-SYMBOL(<column>).


DATA(lo_column) = lo_salv_table->get_columns( )->get_column( <column>-
column_name ).
lo_column->set_long_text( <column>-column_text ).
lo_column->set_medium_text( CONV #( <column>-column_text ) ).
lo_column->set_short_text( CONV #( <column>-column_text ) ).
ENDLOOP.

DATA(lt_fcat) = cl_salv_controller_metadata=>get_lvc_fieldcatalog(
r_columns = lo_salv_table->get_columns( )
r_aggregations = lo_salv_table->get_aggregations( ) ).
CATCH cx_salv_msg INTO DATA(lx_mail).
MESSAGE lx_mail TYPE 'E'.
ENDTRY.

cl_salv_bs_lex=>export_from_result_data_table(
EXPORTING
is_format = if_salv_bs_lex_format=>mc_format_xlsx
ir_result_data_table = cl_salv_ex_util=>factory_result_data_table(
r_data = REF #( mt_emloyees )
t_fieldcatalog = lt_fcat )
IMPORTING
er_result_file = rv_xstring ).
ENDMETHOD.

METHOD send_email.

TRY.
load_data( ).

DATA(lo_mail) = cl_bcs=>create_persistent( ).
DATA(lo_sender_address) = cl_cam_address_bcs=>create_internet_address(
i_address_string = CONV #( '[email protected]' ) ).
lo_mail->set_sender( lo_sender_address ).

DATA(recipient_address) = cl_cam_address_bcs=>create_internet_address(
i_address_string = CONV #( '[email protected]' ) )
.
lo_mail->add_recipient( i_recipient = recipient_address ).

DATA(lo_document) = cl_document_bcs=>create_document(
i_type = 'htm'
i_subject = `Excel Attachment`
i_text = VALUE #( ( CONV #( 'Excel Attachment' ) ) )
i_sender = lo_sender_address ).

DATA(lv_excel_data) = convert_itab_to_xls_xstring( ).
lo_document->add_attachment(
i_attachment_type = 'XLS'
i_attachment_subject = 'Employee Table'
i_attachment_size = CONV #( xstrlen( lv_excel_data ) )
i_att_content_hex = cl_bcs_convert=>xstring_to_solix( lv_excel_data ) ).

lo_mail->set_document( lo_document ).

lo_mail->set_send_immediately( abap_true ).

DATA(lv_send_success) = lo_mail->send( ).

COMMIT WORK.

CATCH cx_send_req_bcs cx_address_bcs cx_document_bcs INTO DATA(lx_mail).


MESSAGE lx_mail TYPE 'E'.
ENDTRY.
ENDMETHOD.
ENDCLASS.

START-OF-SELECTION.
DATA(lo_mail) = NEW lcl_email_with_excel( ).
lo_mail->send_email( ).

Result:

You might also like