*DECALARATIONS.
TYPES: BEGIN OF TY_TEXT,
XMLLINE(100000) TYPE C,
END OF TY_TEXT.
CONSTANT: LC_I_TYPE TYPE SO_OBJ_TP VALUE 'HTM'. "I_TYPE to create
document
LC_ATT_TYPE TYPE STRING VALUE 'XLSX'.
"I_ATTACHMENT_TYPE for XL sheet
DATA: LS_TEXT TYPE TY_TEXT,
LS_HEADER TYPE STRING.
DATA: HTML_STRING01 TYPE STRING,
HTML_STRING02 TYPE STRING,
LV_STRING TYPE STRING,
HTML TYPE SOLI_TAB,
LV_SUBJ TYPE CHAR50, " SUBJECT WHICH WILL BE DISPLAYED IN THE
SO15
LV_EMAILSUBJ TYPE STRING,
LS_DOCUMENT TYPE REF TO CL_DOCUMENT_BCS,
LV_SENDER TYPE AD_SMTPADR, " ANY SENDER E-MAIL ADDRESS
LV_RECEIVER TYPE AD_SMTPADR, " ANY RECEIVER E-MAIL ADDRESS
LV_DISLIST TYPE SO_OBJ_NAM, " DISTRIBUTION LIST
LV_RESULTS TYPE SYST-BINPT,
BCS_EXCEPTION TYPE REF TO CX_BCS,
LV_ATT_TYPE TYPE SOODK-OBJTP,
CELL_H TYPE STRING, " FOR XL SHEET
CELL_F TYPE STRING, " FOR XL SHEET
ENDCELL TYPE STRING, " FOR XL SHEET.
DATA: HTML_WA LIKE LINE OF HTML,
LT_MAILHEX TYPE STANDARD TABLE OF SOLIX,
LT_TEXT TYPE STANDARD TABLE OF TY_TEXT,
LT_HEADER TYPE STANDARD TABLE OF STRING.
*PASSING VALUES TO THE LOCAL VARIABLES.
LV_ATT_TYPE = LC_ATT_TYPE.
CELL_H = '<CELL SS:STYLEID="2"><DATA SS:TYPE="STRING" >'.
CELL_F = '<CELL SS:STYLEID="1"><DATA SS:TYPE="STRING" >'.
ENDCELL = '</DATA></CELL>'.
LV_STRING = '<P> 'Any sentence or line' '</P>'
LV_SENDER = '
[email protected]'.
lv_RECEIVER = 'Any Email address'.
*FETCH THE DATA.
SELECT * FROM ZXYZ INTO @DATA(LT_FINAL).
*XL SHEET.
*START OF XML DATA.
APPEND :'<?XML VERSION="1.0"?>' TO LT_TEXT,
'<WORKBOOK XMLNS="URN:SCHEMAS-MICROSOFT-COM:OFFICE:SPREADSHEET"' TO
LT_TEXT,
'XMLNS:SS="URN:SCHEMAS-MICROSOFT-COM:OFFICE:SPREADSHEET">' TO
LT_TEXT,
'<WORKSHEET SS:NAME="B1 CARTRIDGE DELIVERY INFO">' TO LT_TEXT.
'<TABLE>' TO LT_TEXT,
'<COLUMN SS:AUTOFITWIDTH="1" SS:WIDTH="100" />' TO LT_TEXT2
'<COLUMN SS:AUTOFITWIDTH="2" SS:WIDTH="100" />' TO LT_TEXT3
'<COLUMN SS:AUTOFITWIDTH="3" SS:WIDTH="100" />' TO LT_TEXT4
'<COLUMN SS:AUTOFITWIDTH="4" SS:WIDTH="100" />' TO LT_TEXT,
'<COLUMN SS:AUTOFITWIDTH="5" SS:WIDTH="100" />' TO LT_TEXT,
'<ROW>' TO LT_TEXT.
*ADDING COLUMNS HEADING TO TEXT FILE.
CONCATENATE 'AAA' 'BBB' 'CCC' 'DDD' 'EEE' INTO LS_HEADER SEPARATED BY
CL_ABAP_CHAR_UTILITIES=>NEWLINE.
SPLIT LS_HEADER AT CL_ABAP_CHAR_UTILITIES=>NEWLINE INTO TABLE LT_HEADER.
CLEAR LS_HEADER.
LOOP AT LT_HEADER INTO LS_HEADER.
CONCATENATE CELL_H LS_HEADER ENDCELL INTO LS_TEXT.
APPEND LS_TEXT TO LT_TEXT.
CLEAR : LS_TEXT.
ENDLOOP.
APPEND '</ROW>' TO LT_TEXT.
*FILLING FINAL DATA TO TEXT TABLE.
LOOP AT LT_FINAL INTO DATA(LS_FINAL).
APPEND '<ROW>' TO LT_TEXT.
CONCATENATE CELL_F LS_FINAL-AAA ENDCELL INTO LS_TEXT.
APPEND LS_TEXT TO LT_TEXT.
CLEAR LS_TEXT.
CONCATENATE CELL_F LS_FINAL-BBB ENDCELL INTO LS_TEXT.
APPEND LS_TEXT TO LT_TEXT.
CLEAR LS_TEXT.
CONCATENATE CELL_F LS_FINAL-CCC ENDCELL INTO LS_TEXT.
APPEND LS_TEXT TO LT_TEXT.
CLEAR LS_TEXT.
CONCATENATE CELL_F LS_FINAL-DDD ENDCELL INTO LS_TEXT.
APPEND LS_TEXT TO LT_TEXT.
CLEAR LS_TEXT.
CONCATENATE CELL_F LS_FINAL-EEE ENDCELL INTO LS_TEXT.
APPEND LS_TEXT TO LT_TEXT.
CLEAR LS_TEXT.
APPEND '</ROW>' TO LT_TEXT.
CLEAR: LS_FINAL.
ENDLOOP.
*END OF XML DATA.
IF SY-SUBRC = 0.
APPEND : ' </TABLE>' TO LT_TEXT,
' </WORKSHEET>' TO LT_TEXT,
' </WORKBOOK>' TO LT_TEXT.
ELSE.
REFRESH : LT_TEXT.
ENDIF.
*CONVERTING TEXT TO BINARY FORMAT.
REFRESH: LT_MAILHEX.
CALL FUNCTION 'SCMS_TEXT_TO_BINARY'
EXPORTING
FIRST_LINE = 1
TABLES
TEXT_TAB = LT_TEXT
BINARY_TAB = LT_MAILHEX
EXCEPTIONS
FAILED = 1
OTHERS = 2.
*BODY OF AN E-MAIL.
CONCATENATE HTML_STRING01
'<HTML> <BODY STYLE="FONT-FAMILY: CALIBRI, VERDANA, ARIAL,SANS-SERIF;">'
'<BR> <FONT SIZE="3">'
INTO HTML_STRING01 SEPARATED BY SPACE.
CONCATENATE HTML_STRING01
LV_STRING
INTO HTML_STRING01 SEPARATED BY SPACE.
REFRESH: HTML, TEXT_TABLE.
CLEAR : HTML_STRING02.
MOVE HTML_STRING01 TO HTML_STRING02.
CONCATENATE HTML_STRING02 '</BODY></HTML>' INTO HTML_STRING02 SEPARATED BY SPACE.
HTML_WA = HTML_STRING02+0(255).
IF HTML_WA IS INITIAL.
EXIT.
ENDIF.
APPEND HTML_WA TO HTML.
*EMAIL CONCEPT.
*CREATE DOCUMENT.
TRY.
TRY.
LS_DOCUMENT = CL_DOCUMENT_BCS=>CREATE_DOCUMENT(
I_TYPE = LC_I_TYPE
I_TEXT = HTML
"TEXT_TABLE
I_SUBJECT = LV_SUBJ
).
CATCH CX_DOCUMENT_BCS INTO BCS_EXCEPTION.
ENDTRY.
*ADD ATTACHMENT.
TRY.
CALL METHOD LS_DOCUMENT->ADD_ATTACHMENT
EXPORTING
I_ATTACHMENT_TYPE = LV_ATT_TYPE " DOCUMENT CLASS
FOR ATTACHMENT
I_ATTACHMENT_SUBJECT = LV_XLSHEETSUBJ " ATTACHMENT TITLE
I_ATT_CONTENT_HEX = LT_MAILHEX. " CONTENT (BINARY)
CATCH CX_DOCUMENT_BCS INTO BCS_EXCEPTION.
ENDTRY.
*CREATE SEND REQUEST.
DATA(SEND_REQUEST) = CL_BCS=>CREATE_PERSISTENT( ).
*SET SUBJECT TO THE EMAIL.
TRY.
CALL METHOD SEND_REQUEST->SET_MESSAGE_SUBJECT
EXPORTING
IP_SUBJECT = LV_EMAILSUBJ. " SUBJECT OF EMAIL
CATCH CX_SEND_REQ_BCS INTO BCS_EXCEPTION.
ENDTRY.
*ADD DOCUMENT TO SEND REQUEST.
TRY.
CALL METHOD SEND_REQUEST->SET_DOCUMENT
EXPORTING
I_DOCUMENT = LS_DOCUMENT. " DOCUMENT TO BE
SENT
CATCH CX_SEND_REQ_BCS INTO BCS_EXCEPTION.
ENDTRY.
*SET SENDER EMAIL ADDRESS.
TRY.
DATA(SENDER) = CL_CAM_ADDRESS_BCS=>CREATE_INTERNET_ADDRESS(
I_ADDRESS_STRING = LV_SENDER ).
CATCH CX_ADDRESS_BCS INTO BCS_EXCEPTION.
ENDTRY.
TRY.
CALL METHOD SEND_REQUEST->SET_SENDER
EXPORTING
I_SENDER = SENDER.
CATCH CX_SEND_REQ_BCS INTO BCS_EXCEPTION.
ENDTRY.
*SET DISTRIBUTION LIST.
DATA(RECIPIENT01) = CL_DISTRIBUTIONLIST_BCS=>GETU_PERSISTENT(
I_DLINAME = LV_DISLIST
"DISTRIBUTION LIST
I_PRIVATE = ' '
).
CATCH CX_ADDRESS_BCS INTO BCS_EXCEPTION.
ENDTRY.
TRY.
CALL METHOD SEND_REQUEST->ADD_RECIPIENT
EXPORTING
I_RECIPIENT = RECIPIENT01 " RECIPIENT OF
MESSAGE
I_EXPRESS = 'X'. " SEND AS EXPRESS
MESSAGE
CATCH CX_SEND_REQ_BCS INTO BCS_EXCEPTION.
ENDTRY.
*SET RECIPIENT EMAIL ADDRESS.
TRY.
DATA(RECIPIENT02) = CL_CAM_ADDRESS_BCS=>CREATE_INTERNET_ADDRESS(
I_ADDRESS_STRING = LV_RECEIVER ).
CATCH CX_ADDRESS_BCS INTO BCS_EXCEPTION.
ENDTRY.
TRY.
CALL METHOD SEND_REQUEST->ADD_RECIPIENT
EXPORTING
I_RECIPIENT = RECIPIENT02 " RECIPIENT OF
MESSAGE
I_EXPRESS = 'X'. " SEND AS EXPRESS
MESSAGE
CATCH CX_SEND_REQ_BCS INTO BCS_EXCEPTION.
ENDTRY.
*SEND AN EMAIL.
TRY.
SEND_REQUEST->SET_SEND_IMMEDIATELY( I_SEND_IMMEDIATELY = 'X' ).
CATCH CX_SEND_REQ_BCS INTO BCS_EXCEPTION.
ENDTRY.
TRY.
CALL METHOD SEND_REQUEST->SEND
EXPORTING
I_WITH_ERROR_SCREEN = 'X' " TRANSMISSION LOG
BOOK IF ERRORS OCCUR
RECEIVING
RESULT = LV_RESULTS. " FLAG INDICATES
WHETHER DOCUMENT WAS SENT SUCCESSFULLY
CATCH CX_SEND_REQ_BCS INTO BCS_EXCEPTION.
ENDTRY.
COMMIT WORK AND WAIT.
ENDTRY.
*PASSING RESULT OUTPUT TO THE SCREEN.
IF LV_RESULTS = 'X'.
WRITE:/ 'E-MAIL SENT SUCCESSFULLY'.
ELSE.
WRITE:/ 'E-MAIL NOT SENT'.
ENDIF.