You are on page 1of 2

REPORT zsend_email.

SELECT * UP TO 100 ROWS


FROM spfli
INTO TABLE @DATA(lt_spfli).

cl_salv_table=>factory( IMPORTING r_salv_table = DATA(lr_table)


CHANGING t_table = gt_na ).

DATA: lr_xldimension TYPE REF TO if_ixml_node,


lr_xlworksheet TYPE REF TO if_ixml_element.

DATA(lv_xlsx) = lr_table->to_xml( if_salv_bs_xml=>c_type_xlsx ).


DATA(lr_zip) = NEW cl_abap_zip( ).
lr_zip->load( lv_xlsx ).
lr_zip->get( EXPORTING name = 'xl/worksheets/sheet1.xml' IMPORTING content =
DATA(lv_file) ).

DATA(lr_file) = NEW cl_xml_document( ).


lr_file->parse_xstring( lv_file ).
* Row elements are under SheetData
DATA(lr_xlnode) = lr_file->find_node( 'sheetData' ).
DATA(lr_xlrows) = lr_xlnode->get_children( ).
* Create new element in the XML file
lr_xlworksheet ?= lr_file->find_node( 'worksheet' ).
DATA(lr_xlsheetpr) = cl_ixml=>create( )->create_document( )->create_element( name
= 'sheetPr' ).
DATA(lr_xloutlinepr) = cl_ixml=>create( )->create_document( )->create_element( name
= 'outlinePr' ).
lr_xlsheetpr->if_ixml_node~append_child( lr_xloutlinepr ).
lr_xloutlinepr->set_attribute( name = 'summaryBelow' value = 'false' ).
lr_xldimension ?= lr_file->find_node( 'dimension' ).
lr_xlworksheet->if_ixml_node~insert_child( new_child = lr_xlsheetpr ref_child =
lr_xldimension ).
* Create xstring and move it to XLSX
lr_file->render_2_xstring( IMPORTING stream = lv_file ).
lr_zip->delete( EXPORTING name = 'xl/worksheets/sheet1.xml' ).
lr_zip->add( EXPORTING name = 'xl/worksheets/sheet1.xml' content = lv_file ).
lv_xlsx = lr_zip->save( ).

DATA lv_size TYPE i.


DATA lt_bintab TYPE solix_tab.
DATA: main_text TYPE bcsy_text, "IT for emial body
w_text LIKE LINE OF main_text, "work area for email body
lv_subject TYPE char50 VALUE 'This is PI Doc deletion data'.
DATA: lo_sender TYPE REF TO if_sender_bcs VALUE IS INITIAL. "sender

* Convert to binary
CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
EXPORTING
buffer = lv_xlsx
IMPORTING
output_length = lv_size
TABLES
binary_tab = lt_bintab.

* create persistent send request


DATA(send_request) = cl_bcs=>create_persistent( ).
* create document object from internal table with text

w_text-line = 'This is the first line of email body'.


APPEND w_text TO main_text.
CLEAR w_text.
w_text-line = 'this is 2nd line of email body'.
APPEND w_text TO main_text.
CLEAR w_text.

DATA(document) = cl_document_bcs=>create_document(
i_type = 'RAW'
i_text = main_text
i_subject = lv_subject ).

DATA lt_att_head TYPE soli_tab.


APPEND '<(>&< )>SO_FILENAME=PI_Doc.xlsx' TO lt_att_head.

* add the spread sheet as attachment to document object


document->add_attachment(
i_attachment_type = 'xls'
i_attachment_subject = 'PI_Doc'
i_attachment_size = CONV so_obj_len( lv_size )
i_attachment_header = lt_att_head
i_att_content_hex = lt_bintab ).

send_request->set_document( document ).

lo_sender = cl_sapuser_bcs=>create( sy-uname ). "sender is the logged in user


* Set sender to send request
send_request->set_sender( i_sender = lo_sender ).

DATA(recipient) =
cl_cam_address_bcs=>create_internet_address( 'rahul820373@gmail.com' ).
send_request->add_recipient( recipient ).

DATA(lv_sent_to_all) = send_request->send( i_with_error_screen = 'X' ).


IF lv_sent_to_all = 'X'.
MESSAGE i000(8i) WITH 'Email send succesfully'.
ELSEIF lv_sent_to_all IS INITIAL.
MESSAGE i000(8i) WITH 'Email not send'.
ENDIF.
COMMIT WORK.

You might also like