SAP ABAP - Send email with excel file attachment
Updated: Aug 29, 2022
TYPE-POOLS: ixml.
*------------------------------------------------------------------------*
* Data Declarations *
*------------------------------------------------------------------------*
* Structure for Final Internal Table
TYPES: BEGIN OF ty_final,
srno(3) TYPE n,
user_id TYPE usr02-bname,
full_name TYPE bapiaddr3-fullname,
dept TYPE bapiaddr3-department,
login(3) TYPE c,
END OF ty_final.
* Structure for USR02
TYPES: BEGIN OF ty_usr02,
bname TYPE usr02-bname,
trdat TYPE usr02-trdat,
END OF ty_usr02.
* Internal Table & Work Area for Final Internal Table
DATA: it_final TYPE TABLE OF ty_final,
wa_final TYPE ty_final.
* Internal Table & Work Area for USR02 Internal Table
DATA: it_usr02 TYPE TABLE OF ty_usr02,
wa_usr02 TYPE ty_usr02.
* Work Area for ADD3_DATA Structre
DATA: wa_addr TYPE bapiaddr3.
DATA: it_return TYPE TABLE OF bapiret2.
DATA: lv_date TYPE d.
DATA: lv_filename TYPE string.
TYPES: BEGIN OF xml_line,
data(255) TYPE x,
END OF xml_line.
DATA: l_ixml TYPE REF TO if_ixml,
l_streamfactory TYPE REF TO if_ixml_stream_factory,
l_ostream TYPE REF TO if_ixml_ostream,
l_renderer TYPE REF TO if_ixml_renderer,
l_document TYPE REF TO if_ixml_document.
DATA: l_element_root TYPE REF TO if_ixml_element,
ns_attribute TYPE REF TO if_ixml_attribute,
r_element_properties TYPE REF TO if_ixml_element,
r_element TYPE REF TO if_ixml_element,
r_worksheet TYPE REF TO if_ixml_element,
r_table TYPE REF TO if_ixml_element,
r_column TYPE REF TO if_ixml_element,
r_row TYPE REF TO if_ixml_element,
r_cell TYPE REF TO if_ixml_element,
r_data TYPE REF TO if_ixml_element,
l_value TYPE string,
l_type TYPE string,
l_text(100) TYPE c,
r_styles TYPE REF TO if_ixml_element,
r_style TYPE REF TO if_ixml_element,
r_style1 TYPE REF TO if_ixml_element,
r_format TYPE REF TO if_ixml_element,
r_border TYPE REF TO if_ixml_element,
num_rows TYPE i.
DATA: l_xml_table TYPE TABLE OF xml_line,
wa_xml TYPE xml_line,
l_xml_size TYPE i,
l_rc TYPE i.
*------------------------------------------------------------------------*
* Initialization *
*------------------------------------------------------------------------*
INITIALIZATION.
lv_date = sy-datum - 1.
*------------------------------------------------------------------------*
* Start of Selection *
*------------------------------------------------------------------------*
START-OF-SELECTION.
PERFORM get_user_data.
PERFORM process_xml_data.
PERFORM send_mail.
*&---------------------------------------------------------------------*
*& Form get_user_data
*&---------------------------------------------------------------------*
* Fetch User details from USR02
*----------------------------------------------------------------------*
FORM get_user_data.
REFRESH it_final.
SELECT DISTINCT bname trdat FROM usr02 INTO TABLE it_usr02.
SORT it_usr02 BY bname.
IF NOT it_usr02[] IS INITIAL.
LOOP AT it_usr02 INTO wa_usr02.
CLEAR wa_final.
wa_final-srno = sy-tabix. " Serial No.
wa_final-user_id = wa_usr02-bname. " User ID
CALL FUNCTION 'BAPI_USER_GET_DETAIL'
EXPORTING
username = wa_usr02-bname
IMPORTING
address = wa_addr
TABLES
return = it_return.
IF sy-subrc EQ 0.
wa_final-full_name = wa_addr-fullname. " Full Name
wa_final-dept = wa_addr-department. " Department
ENDIF.
IF wa_usr02-trdat EQ lv_date.
wa_final-login = 'YES'. " Login on Previous Day
ELSE.
wa_final-login = 'NO'.
ENDIF.
APPEND wa_final TO it_final.
ENDLOOP.
ENDIF.
ENDFORM. " get_user_data
*&---------------------------------------------------------------------*
*& Form SEND_MAIL
*&---------------------------------------------------------------------*
* Send Email
*----------------------------------------------------------------------*
FORM send_mail.
DATA: objpack LIKE sopcklsti1 OCCURS 2 WITH HEADER LINE.
DATA: objhead LIKE solisti1 OCCURS 1 WITH HEADER LINE.
DATA: objbin LIKE solix OCCURS 10 WITH HEADER LINE.
DATA: objtxt LIKE solisti1 OCCURS 10 WITH HEADER LINE.
DATA: reclist LIKE somlreci1 <