Hello guys,,,
this time i would like to show you how to code in SAP ABAP, a simple program which can create an excel based attachment, and adjust the subject with long text, and set the specific sender address..
GRAB YOUR COFFEE and Here we GO.
*&---------------------------------------------------------------------*
*& Include ZZMM_TKDN_EMAILF01
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form F_GET_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM F_GET_DATA .
SELECT * FROM zmm_enhance INTO CORRESPONDING FIELDS OF TABLE lt_tkdnbukrs
WHERE progname = 'ZTMM_TKDN' AND
bukrs in S_BUKRS " bukrs = ekko-bukrs
* AND datab <= ekko-aedat " AND datab <= ekko-aedat
* AND datbi > ekko-aedat.
.
SELECT * FROM tvarvc INTO CORRESPONDING FIELDS OF TABLE lt_tkdnbsart
WHERE name = 'ZTMM_TKDN_BSART'.
*Delete s_bukrs yang tidak ada di lt_tkdnbukrs.
*Delete s_bsart yang tidak ada di lt_tkdnbsart.
SELECT * FROM ztmm_tkdn INTO CORRESPONDING FIELDS OF TABLE lt_TKDN
WHERE ebeln IN s_ebeln AND bukrs IN s_bukrs.
*Logic untuk get data OA
SELECT * FROM ekko INTO CORRESPONDING FIELDS OF TABLE lt_oa
WHERE ebeln IN s_ebeln AND bukrs IN s_bukrs
AND bsart IN s_bsart AND bstyp = 'K'.
* AND ekgrp IN s_ekgrp AND kdate LE S_ENDAT
* AND bedat IN s_endat.
if lt_oa[] is NOT INITIAL.
SELECT * FROM ekpo
INTO CORRESPONDING FIELDS OF TABLE lt_oaitem
FOR ALL ENTRIES IN lt_oa
WHERE ebeln = lt_oa-ebeln AND loekz = ''.
SELECT * FROM t024 INTO CORRESPONDING FIELDS OF TABLE lt_t024
FOR ALL ENTRIES IN lt_oa
WHERE ekgrp = lt_oa-ekgrp.
SELECT * FROM lfa1 INTO CORRESPONDING FIELDS OF TABLE lt_lfa1
FOR ALL ENTRIES IN lt_oa
WHERE lifnr = lt_oa-lifnr.
LOOP at lt_oa INTO ls_oa.
READ TABLE lt_tkdn INTO ls_tkdn WITH KEY ebeln = ls_oa-ebeln.
IF sy-subrc = 0.
*DELETE LINE lt_oa.
ELSE.
ls_final-ebeln = ls_oa-ebeln.
ls_final-bsart = ls_oa-bsart.
ls_final-bukrs = ls_oa-bukrs.
ls_final-lifnr = ls_oa-lifnr.
READ TABLE lt_lfa1 INTO ls_lfa1 WITH KEY lifnr = ls_oa-lifnr.
if sy-subrc eq 0.
ls_final-vendorname = lfa1-name1.
endif.
READ TABLE lt_t024 INTO ls_t024 WITH KEY ekgrp = ls_oa-ekgrp.
IF sy-subrc eq 0.
CONCATENATE ls_oa-ekgrp '-' ls_t024-eknam INTO ls_final-ekgrp.
*ls_final-ekgrp = ls_oa-ekgrp & “-“ & t024-eknam.
ENDIF.
*ls_final-startdate = ls_oa-kdatb.
CONCATENATE ls_oa-kdatb+6(2) '.' ls_oa-kdatb+4(2) '.' ls_oa-kdatb(4) INTO ls_final-startdate.
CONCATENATE ls_oa-kdate+6(2) '.' ls_oa-kdate+4(2) '.' ls_oa-kdate(4) INTO ls_final-enddate.
*ls_final-enddate = ls_oa-kdate.
if ls_oa-bstyp eq 'K'.
name = ls_oa-ebeln.
CALL FUNCTION 'READ_TEXT'
EXPORTING
CLIENT = SY-MANDT
ID = 'K02'
LANGUAGE = lv_lang
NAME = name
OBJECT = 'EKKO'
* ARCHIVE_HANDLE = 0
* LOCAL_CAT = ' '
* IMPORTING
* HEADER =
* OLD_LINE_COUNTER =
TABLES
LINES = LINES[]
EXCEPTIONS
ID = 1
LANGUAGE = 2
NAME = 3
NOT_FOUND = 4
OBJECT = 5
REFERENCE_CHECK = 6
WRONG_ACCESS_TO_ARCHIVE = 7
OTHERS = 8
.
IF LINES[] is NOT INITIAL.
READ TABLE lines INTO sline INDEX 1.
IF sy-subrc eq 0.
ls_final-Judul = sline-TDLINE.
IF ls_final-judul IS INITIAL.
READ TABLE lt_oaitem INTO ls_oaitem WITH KEY ebeln = ls_oa-ebeln.
if sy-subrc eq 0.
ls_final-Judul = ls_oaitem-TXZ01.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
ls_final-totalval = ls_oa-ktwrt.
ls_final-penawal = ls_oa-zmmpenawal.
ls_final-waers = ls_oa-waers.
ls_final-zzmtkdn = ls_oa-zzmmtkdn.
ls_final-ZBTSMINTKDN = ls_oa-ZBTSMINTKDN.
APPEND ls_final to lt_final.
clear ls_final.
ENDIF.
ENDLOOP.
ENDif.
*
*Logic untuk get data PO
*SELECT a~ebeln a~bukrs b~eindt
* FROM ekko AS a
* INNER JOIN eket as b ON a~ebeln = b~ebeln "AND c~etenr = '0001'
* INTO CORRESPONDING FIELDS OF TABLE lt_po
*WHERE a~ebeln IN s_ebeln AND a~bukrs IN s_bukrs
* AND a~bstyp = 'F' AND a~ekgrp IN s_ekgrp AND a~bedat IN S_ENDAT
** AND c~eindt LT s_enddate
.
BREAK t_fachrezar.
SELECT * FROM ekko
INTO TABLE lt_PO
WHERE ebeln in s_ebeln AND bukrs in s_bukrs AND bstyp = 'F' AND ekgrp in s_ekgrp AND bedat in S_ENDAT.
* AND a~zzmtkdn IS NOT initial AND a~zbtsmintkdn IS NOT INITIAL.
if lt_po[] IS NOT INITIAL.
DATA : lt_eket TYPE TABLE OF eket,
ls_eket TYPE eket,
lt_ekpo TYPE TABLE OF ekpo,
ls_ekpo TYPE ekpo.
SELECT * FROM eket INTO TABLE lt_eket
FOR ALL ENTRIES IN lt_po
WHERE ebeln eq lt_po-ebeln AND etenr = '0001' .
SELECT * FROM ekpo INTO TABLE lt_ekpo
FOR ALL ENTRIES IN lt_po
WHERE ebeln = lt_po-ebeln AND loekz eq space."AND etenr = '0001'.
SELECT * FROM t024 APPENDING TABLE lt_t024 "INTO CORRESPONDING FIELDS OF TABLE lt_t024
FOR ALL ENTRIES IN lt_po
WHERE ekgrp = lt_po-ekgrp.
LOOP AT lt_po INTO ls_po.
READ TABLE lt_eket INTO ls_eket WITH KEY ebeln = ls_po-ebeln.
IF sy-subrc eq 0.
READ TABLE lt_ekpo INTO ls_ekpo WITH KEY ebelp = ls_eket-ebelp.
IF sy-subrc eq 0.
ELSE.
delete lt_po WHERE ebeln = ls_po-ebeln.
ENDIF.
ELSE.
delete lt_po WHERE ebeln = ls_po-ebeln.
ENDIF.
ENDLOOP.
*lt_poitem = lt_po2.
lt_poitem = lt_po2 = lt_po.
SORT lt_po2 DESCENDING by ebeln eq_eindt.
DELETE ADJACENT DUPLICATES FROM lt_po2 COMPARING ebeln.
*DELETE duplikasi lt_po2 berdasarkan ebeln. (agar PO dengan multilines dengan delivery date yang belum expired tidak ikut terkirim)
LOOP at lt_po2 into ls_po2 ."WHERE eq_eindt LT S_ENDAT.
READ TABLE lt_tkdn INTO ls_tkdn WITH KEY ebeln = ls_po2-ebeln.
IF sy-subrc = 0.
*DELETE LINE lt_poheader.
ELSE.
ls_final-ebeln = ls_po2-ebeln.
ls_final-bsart = ls_po2-bsart.
ls_final-bukrs = ls_po2-bukrs.
ls_final-lifnr = ls_po2-lifnr.
ls_final-vendorname = lfa1-name1.
*ls_final-ekgrp = lt_po2-ekgrp & “-“ & t024-eknam.
READ TABLE lt_t024 INTO ls_t024 WITH KEY ekgrp = ls_po2-ekgrp.
IF sy-subrc eq 0.
CONCATENATE ls_oa-ekgrp '-' ls_t024-eknam INTO ls_final-ekgrp.
ENDIF.
ls_final-startdate = ls_po2-bedat.
*Pakai FM READ_TEXT untuk lt_final-judul.
IF ls_po2-bstyp = 'F'.
name = ls_po2-ebeln.
CALL FUNCTION 'READ_TEXT'
EXPORTING
CLIENT = SY-MANDT
ID = 'F02'
LANGUAGE = lv_lang
NAME = name
OBJECT = 'EKKO'
* ARCHIVE_HANDLE = 0
* LOCAL_CAT = ' '
* IMPORTING
* HEADER =
* OLD_LINE_COUNTER =
TABLES
LINES = LINES[]
EXCEPTIONS
ID = 1
LANGUAGE = 2
NAME = 3
NOT_FOUND = 4
OBJECT = 5
REFERENCE_CHECK = 6
WRONG_ACCESS_TO_ARCHIVE = 7
OTHERS = 8
.
IF LINES[] is NOT INITIAL.
READ TABLE lines INTO sline INDEX 1.
IF sy-subrc eq 0.
ls_final-Judul = sline-TDLINE.
IF ls_final-judul IS INITIAL.
READ TABLE lt_oaitem INTO ls_oaitem WITH KEY ebeln = ls_oa-ebeln.
if sy-subrc eq 0.
ls_final-Judul = ls_oaitem-TXZ01.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
LOOP at lt_ekpo INTO ls_ekpo WHERE ebeln = ls_po2-ebeln.
ls_final-totalval = ls_final-totalval + ls_ekpo-netwr.
ENDLOOP.
ls_final-penawal = ls_po2-zmmpenawal.
ls_final-waers = ls_po2-waers.
ls_final-zzmtkdn = ls_po2-zzmmtkdn.
ls_final-ZBTSMINTKDN = ls_po2-ZBTSMINTKDN.
APPEND ls_final to lt_final.
CLEAR ls_final.
ENDIF.
ENDLOOP.
endif.
ENDFORM. " F_GET_DATA
*&---------------------------------------------------------------------*
*& Form F_PREP_XML
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM F_PREP_XML .
* Creating a ixml Factory
l_ixml = cl_ixml=>create( ).
* Creating the DOM Object Model
l_document = l_ixml->create_document( ).
* Create Root Node 'Workbook'
l_element_root = l_document->create_simple_element( name = 'Workbook' parent = l_document ).
l_element_root->set_attribute( name = 'xmlns' value = 'urn:schemas-microsoft-com:office:spreadsheet' ).
ns_attribute = l_document->create_namespace_decl( name = 'ss' prefix = 'xmlns' uri = 'urn:schemas-microsoft-com:office:spreadsheet' ).
l_element_root->set_attribute_node( ns_attribute ).
ns_attribute = l_document->create_namespace_decl( name = 'x' prefix = 'xmlns' uri = 'urn:schemas-microsoft-com:office:excel' ).
l_element_root->set_attribute_node( ns_attribute ).
* Create node for document properties.
r_element_properties = l_document->create_simple_element( name = 'TEST_REPORT' parent = l_element_root ).
l_value = sy-uname.
l_document->create_simple_element( name = 'Author' value = l_value parent = r_element_properties ).
* Styles
r_styles = l_document->create_simple_element( name = 'Styles' parent = l_element_root ).
* Style for Header
r_style = l_document->create_simple_element( name = 'Style' parent = r_styles ).
r_style->set_attribute_ns( name = 'ID' prefix = 'ss' value = 'Header' ).
r_format = l_document->create_simple_element( name = 'Font' parent = r_style ).
r_format->set_attribute_ns( name = 'Bold' prefix = 'ss' value = '1' ).
r_format = l_document->create_simple_element( name = 'Interior' parent = r_style ).
r_format->set_attribute_ns( name = 'Color' prefix = 'ss' value = '#92D050' ).
r_format->set_attribute_ns( name = 'Pattern' prefix = 'ss' value = 'Solid' ).
r_format = l_document->create_simple_element( name = 'Alignment' parent = r_style ).
r_format->set_attribute_ns( name = 'Vertical' prefix = 'ss' value = 'Center' ).
r_format->set_attribute_ns( name = 'WrapText' prefix = 'ss' value = '1' ).
r_border = l_document->create_simple_element( name = 'Borders' parent = r_style ).
r_format = l_document->create_simple_element( name = 'Border' parent = r_border ).
r_format->set_attribute_ns( name = 'Position' prefix = 'ss' value = 'Bottom' ).
r_format->set_attribute_ns( name = 'LineStyle' prefix = 'ss' value = 'Continuous' ).
r_format->set_attribute_ns( name = 'Weight' prefix = 'ss' value = '1' ).
r_format = l_document->create_simple_element( name = 'Border' parent = r_border ).
r_format->set_attribute_ns( name = 'Position' prefix = 'ss' value = 'Left' ).
r_format->set_attribute_ns( name = 'LineStyle' prefix = 'ss' value = 'Continuous' ).
r_format->set_attribute_ns( name = 'Weight' prefix = 'ss' value = '1' ).
r_format = l_document->create_simple_element( name = 'Border' parent = r_border ).
r_format->set_attribute_ns( name = 'Position' prefix = 'ss' value = 'Top' ).
r_format->set_attribute_ns( name = 'LineStyle' prefix = 'ss' value = 'Continuous' ).
r_format->set_attribute_ns( name = 'Weight' prefix = 'ss' value = '1' ).
r_format = l_document->create_simple_element( name = 'Border' parent = r_border ).
r_format->set_attribute_ns( name = 'Position' prefix = 'ss' value = 'Right' ).
r_format->set_attribute_ns( name = 'LineStyle' prefix = 'ss' value = 'Continuous' ).
r_format->set_attribute_ns( name = 'Weight' prefix = 'ss' value = '1' ).
* Style for Data
r_style1 = l_document->create_simple_element( name = 'Style' parent = r_styles ).
r_style1->set_attribute_ns( name = 'ID' prefix = 'ss' value = 'Data' ).
r_border = l_document->create_simple_element( name = 'Borders' parent = r_style1 ).
r_format = l_document->create_simple_element( name = 'Border' parent = r_border ).
r_format->set_attribute_ns( name = 'Position' prefix = 'ss' value = 'Bottom' ).
r_format->set_attribute_ns( name = 'LineStyle' prefix = 'ss' value = 'Continuous' ).
r_format->set_attribute_ns( name = 'Weight' prefix = 'ss' value = '1' ).
r_format = l_document->create_simple_element( name = 'Border' parent = r_border ).
r_format->set_attribute_ns( name = 'Position' prefix = 'ss' value = 'Left' ).
r_format->set_attribute_ns( name = 'LineStyle' prefix = 'ss' value = 'Continuous' ).
r_format->set_attribute_ns( name = 'Weight' prefix = 'ss' value = '1' ).
r_format = l_document->create_simple_element( name = 'Border' parent = r_border ).
r_format->set_attribute_ns( name = 'Position' prefix = 'ss' value = 'Top' ).
r_format->set_attribute_ns( name = 'LineStyle' prefix = 'ss' value = 'Continuous' ).
r_format->set_attribute_ns( name = 'Weight' prefix = 'ss' value = '1' ).
r_format = l_document->create_simple_element( name = 'Border' parent = r_border ).
r_format->set_attribute_ns( name = 'Position' prefix = 'ss' value = 'Right' ).
r_format->set_attribute_ns( name = 'LineStyle' prefix = 'ss' value = 'Continuous' ).
r_format->set_attribute_ns( name = 'Weight' prefix = 'ss' value = '1' ).
* Style for TL Red
r_style2 = l_document->create_simple_element( name = 'Style' parent = r_styles ).
r_style2->set_attribute_ns( name = 'ID' prefix = 'ss' value = 'TLRed' ).
r_border2 = l_document->create_simple_element( name = 'Borders' parent = r_style2 ).
r_format = l_document->create_simple_element( name = 'Border' parent = r_border2 ).
r_format->set_attribute_ns( name = 'Position' prefix = 'ss' value = 'Bottom' ).
r_format->set_attribute_ns( name = 'LineStyle' prefix = 'ss' value = 'Continuous' ).
r_format->set_attribute_ns( name = 'Weight' prefix = 'ss' value = '1' ).
r_format = l_document->create_simple_element( name = 'Border' parent = r_border2 ).
r_format->set_attribute_ns( name = 'Position' prefix = 'ss' value = 'Left' ).
r_format->set_attribute_ns( name = 'LineStyle' prefix = 'ss' value = 'Continuous' ).
r_format->set_attribute_ns( name = 'Weight' prefix = 'ss' value = '1' ).
r_format = l_document->create_simple_element( name = 'Border' parent = r_border2 ).
r_format->set_attribute_ns( name = 'Position' prefix = 'ss' value = 'Top' ).
r_format->set_attribute_ns( name = 'LineStyle' prefix = 'ss' value = 'Continuous' ).
r_format->set_attribute_ns( name = 'Weight' prefix = 'ss' value = '1' ).
r_format = l_document->create_simple_element( name = 'Border' parent = r_border2 ).
r_format->set_attribute_ns( name = 'Position' prefix = 'ss' value = 'Right' ).
r_format->set_attribute_ns( name = 'LineStyle' prefix = 'ss' value = 'Continuous' ).
r_format->set_attribute_ns( name = 'Weight' prefix = 'ss' value = '1' ).
r_format = l_document->create_simple_element( name = 'Interior' parent = r_style2 ).
r_format->set_attribute_ns( name = 'Color' prefix = 'ss' value = '#f00232' ).
r_format->set_attribute_ns( name = 'Pattern' prefix = 'ss' value = 'Solid' ).
* Style for TL Green
r_style3 = l_document->create_simple_element( name = 'Style' parent = r_styles ).
r_style3->set_attribute_ns( name = 'ID' prefix = 'ss' value = 'TLGreen' ).
r_border3 = l_document->create_simple_element( name = 'Borders' parent = r_style3 ).
r_format = l_document->create_simple_element( name = 'Border' parent = r_border3 ).
r_format->set_attribute_ns( name = 'Position' prefix = 'ss' value = 'Bottom' ).
r_format->set_attribute_ns( name = 'LineStyle' prefix = 'ss' value = 'Continuous' ).
r_format->set_attribute_ns( name = 'Weight' prefix = 'ss' value = '1' ).
r_format = l_document->create_simple_element( name = 'Border' parent = r_border3 ).
r_format->set_attribute_ns( name = 'Position' prefix = 'ss' value = 'Left' ).
r_format->set_attribute_ns( name = 'LineStyle' prefix = 'ss' value = 'Continuous' ).
r_format->set_attribute_ns( name = 'Weight' prefix = 'ss' value = '1' ).
r_format = l_document->create_simple_element( name = 'Border' parent = r_border3 ).
r_format->set_attribute_ns( name = 'Position' prefix = 'ss' value = 'Top' ).
r_format->set_attribute_ns( name = 'LineStyle' prefix = 'ss' value = 'Continuous' ).
r_format->set_attribute_ns( name = 'Weight' prefix = 'ss' value = '1' ).
r_format = l_document->create_simple_element( name = 'Border' parent = r_border3 ).
r_format->set_attribute_ns( name = 'Position' prefix = 'ss' value = 'Right' ).
r_format->set_attribute_ns( name = 'LineStyle' prefix = 'ss' value = 'Continuous' ).
r_format->set_attribute_ns( name = 'Weight' prefix = 'ss' value = '1' ).
r_format = l_document->create_simple_element( name = 'Interior' parent = r_style3 ).
r_format->set_attribute_ns( name = 'Color' prefix = 'ss' value = '#92D050' ).
r_format->set_attribute_ns( name = 'Pattern' prefix = 'ss' value = 'Solid' ).
* Worksheet
r_worksheet = l_document->create_simple_element( name = 'Worksheet' parent = l_element_root ).
r_worksheet->set_attribute_ns( name = 'Name' prefix = 'ss' value = 'Sheet1' ).
* Table
r_table = l_document->create_simple_element( name = 'Table' parent = r_worksheet ).
r_table->set_attribute_ns( name = 'FullColumns' prefix = 'x' value = '1' ).
r_table->set_attribute_ns( name = 'FullRows' prefix = 'x' value = '1' ).
* Column Formatting
r_column = l_document->create_simple_element( name = 'Column' parent = r_table ).
r_column->set_attribute_ns( name = 'Width' prefix = 'ss' value = '30' ).
r_column = l_document->create_simple_element( name = 'Column' parent = r_table ).
r_column->set_attribute_ns( name = 'Width' prefix = 'ss' value = '50' ).
r_column = l_document->create_simple_element( name = 'Column' parent = r_table ).
r_column->set_attribute_ns( name = 'Width' prefix = 'ss' value = '50' ).
r_column = l_document->create_simple_element( name = 'Column' parent = r_table ).
r_column->set_attribute_ns( name = 'Width' prefix = 'ss' value = '150' ).
r_column = l_document->create_simple_element( name = 'Column' parent = r_table ).
r_column->set_attribute_ns( name = 'Width' prefix = 'ss' value = '50' ).
r_column = l_document->create_simple_element( name = 'Column' parent = r_table ).
r_column->set_attribute_ns( name = 'Width' prefix = 'ss' value = '70' ).
r_column = l_document->create_simple_element( name = 'Column' parent = r_table ).
r_column->set_attribute_ns( name = 'Width' prefix = 'ss' value = '150' ).
r_column = l_document->create_simple_element( name = 'Column' parent = r_table ).
r_column->set_attribute_ns( name = 'Width' prefix = 'ss' value = '60' ).
r_column = l_document->create_simple_element( name = 'Column' parent = r_table ).
r_column->set_attribute_ns( name = 'Width' prefix = 'ss' value = '60' ).
r_column = l_document->create_simple_element( name = 'Column' parent = r_table ).
r_column->set_attribute_ns( name = 'Width' prefix = 'ss' value = '100' ).
r_column = l_document->create_simple_element( name = 'Column' parent = r_table ).
r_column->set_attribute_ns( name = 'Width' prefix = 'ss' value = '30' ).
r_column = l_document->create_simple_element( name = 'Column' parent = r_table ).
r_column->set_attribute_ns( name = 'Width' prefix = 'ss' value = '100' ).
r_column = l_document->create_simple_element( name = 'Column' parent = r_table ).
r_column->set_attribute_ns( name = 'Width' prefix = 'ss' value = '30' ).
r_column = l_document->create_simple_element( name = 'Column' parent = r_table ).
r_column->set_attribute_ns( name = 'Width' prefix = 'ss' value = '50' ).
** Blank Row
* r_row = l_document->create_simple_element( name = 'Row' parent = r_table ).
* Column Headers Row
r_row = l_document->create_simple_element( name = 'Row' parent = r_table ).
r_row->set_attribute_ns( name = 'AutoFitHeight' prefix = 'ss' value = '1' ).
** Sequence No.
* r_cell = l_document->create_simple_element( name = 'Cell' parent = r_row ).
* r_cell->set_attribute_ns( name = 'StyleID' prefix = 'ss' value = 'Header' ).
* r_data = l_document->create_simple_element( name = 'Data' value = 'No.' parent = r_cell ).
* r_data->set_attribute_ns( name = 'Type' prefix = 'ss' value = 'String' ).
* Purchasing Doc
r_cell = l_document->create_simple_element( name = 'Cell' parent = r_row ).
r_cell->set_attribute_ns( name = 'StyleID' prefix = 'ss' value = 'Header' ).
r_data = l_document->create_simple_element( name = 'Data' value = 'Purchasing Doc' parent = r_cell ).
r_data->set_attribute_ns( name = 'Type' prefix = 'ss' value = 'String' ).
* Document Type
r_cell = l_document->create_simple_element( name = 'Cell' parent = r_row ).
r_cell->set_attribute_ns( name = 'StyleID' prefix = 'ss' value = 'Header' ).
r_data = l_document->create_simple_element( name = 'Data' value = 'Document Type' parent = r_cell ).
r_data->set_attribute_ns( name = 'Type' prefix = 'ss' value = 'String' ).
* Cocd
r_cell = l_document->create_simple_element( name = 'Cell' parent = r_row ).
r_cell->set_attribute_ns( name = 'StyleID' prefix = 'ss' value = 'Header' ).
r_data = l_document->create_simple_element( name = 'Data' value = 'Cocd' parent = r_cell ).
r_data->set_attribute_ns( name = 'Type' prefix = 'ss' value = 'String' ).
* Vendor
r_cell = l_document->create_simple_element( name = 'Cell' parent = r_row ).
r_cell->set_attribute_ns( name = 'StyleID' prefix = 'ss' value = 'Header' ).
r_data = l_document->create_simple_element( name = 'Data' value = 'Vendor' parent = r_cell ).
r_data->set_attribute_ns( name = 'Type' prefix = 'ss' value = 'String' ).
* Vendor Name
r_cell = l_document->create_simple_element( name = 'Cell' parent = r_row ).
r_cell->set_attribute_ns( name = 'StyleID' prefix = 'ss' value = 'Header' ).
r_data = l_document->create_simple_element( name = 'Data' value = 'Vendor Name' parent = r_cell ).
r_data->set_attribute_ns( name = 'Type' prefix = 'ss' value = 'String' ).
* Purchasing Group
r_cell = l_document->create_simple_element( name = 'Cell' parent = r_row ).
r_cell->set_attribute_ns( name = 'StyleID' prefix = 'ss' value = 'Header' ).
r_data = l_document->create_simple_element( name = 'Data' value = 'Purchasing Group' parent = r_cell ).
r_data->set_attribute_ns( name = 'Type' prefix = 'ss' value = 'String' ).
* Start Date
r_cell = l_document->create_simple_element( name = 'Cell' parent = r_row ).
r_cell->set_attribute_ns( name = 'StyleID' prefix = 'ss' value = 'Header' ).
r_data = l_document->create_simple_element( name = 'Data' value = 'Start Date' parent = r_cell ).
r_data->set_attribute_ns( name = 'Type' prefix = 'ss' value = 'String' ).
* End Date
r_cell = l_document->create_simple_element( name = 'Cell' parent = r_row ).
r_cell->set_attribute_ns( name = 'StyleID' prefix = 'ss' value = 'Header' ).
r_data = l_document->create_simple_element( name = 'Data' value = 'End Date' parent = r_cell ).
r_data->set_attribute_ns( name = 'Type' prefix = 'ss' value = 'String' ).
* Judul
r_cell = l_document->create_simple_element( name = 'Cell' parent = r_row ).
r_cell->set_attribute_ns( name = 'StyleID' prefix = 'ss' value = 'Header' ).
r_data = l_document->create_simple_element( name = 'Data' value = 'Judul' parent = r_cell ).
r_data->set_attribute_ns( name = 'Type' prefix = 'ss' value = 'String' ).
* Total Value
r_cell = l_document->create_simple_element( name = 'Cell' parent = r_row ).
r_cell->set_attribute_ns( name = 'StyleID' prefix = 'ss' value = 'Header' ).
r_data = l_document->create_simple_element( name = 'Data' value = 'Total Value' parent = r_cell ).
r_data->set_attribute_ns( name = 'Type' prefix = 'ss' value = 'String' ).
* Penawaran Awal
r_cell = l_document->create_simple_element( name = 'Cell' parent = r_row ).
r_cell->set_attribute_ns( name = 'StyleID' prefix = 'ss' value = 'Header' ).
r_data = l_document->create_simple_element( name = 'Data' value = 'Penawaran Awal' parent = r_cell ).
r_data->set_attribute_ns( name = 'Type' prefix = 'ss' value = 'String' ).
* Currency
r_cell = l_document->create_simple_element( name = 'Cell' parent = r_row ).
r_cell->set_attribute_ns( name = 'StyleID' prefix = 'ss' value = 'Header' ).
r_data = l_document->create_simple_element( name = 'Data' value = 'Currency' parent = r_cell ).
r_data->set_attribute_ns( name = 'Type' prefix = 'ss' value = 'String' ).
* Komitmen TKDN
r_cell = l_document->create_simple_element( name = 'Cell' parent = r_row ).
r_cell->set_attribute_ns( name = 'StyleID' prefix = 'ss' value = 'Header' ).
r_data = l_document->create_simple_element( name = 'Data' value = 'Komitmen TKDN' parent = r_cell ).
r_data->set_attribute_ns( name = 'Type' prefix = 'ss' value = 'String' ).
* Batas Minimum TKDN
r_cell = l_document->create_simple_element( name = 'Cell' parent = r_row ).
r_cell->set_attribute_ns( name = 'StyleID' prefix = 'ss' value = 'Header' ).
r_data = l_document->create_simple_element( name = 'Data' value = 'Batas Minimum TKDN' parent = r_cell ).
r_data->set_attribute_ns( name = 'Type' prefix = 'ss' value = 'String' ).
loop at lt_final INTO ls_final.
r_row = l_document->create_simple_element( name = 'Row' parent = r_table ).
** No.
* r_cell = l_document->create_simple_element( name = 'Cell' parent = r_row ).
* r_cell->set_attribute_ns( name = 'StyleID' prefix = 'ss' value = 'Data' ).
* l_value = sy-tabix.
* CONDENSE l_value NO-GAPS.
* r_data = l_document->create_simple_element( name = 'Data' value = l_value parent = r_cell ). " Data
* r_data->set_attribute_ns( name = 'Type' prefix = 'ss' value = 'Number' ). " Cell format
* Purchasing Doc
r_cell = l_document->create_simple_element( name = 'Cell' parent = r_row ).
r_cell->set_attribute_ns( name = 'StyleID' prefix = 'ss' value = 'Data' ).
l_value = ls_final-EBELN.
r_data = l_document->create_simple_element( name = 'Data' value = l_value parent = r_cell ). " Data
r_data->set_attribute_ns( name = 'Type' prefix = 'ss' value = 'String' ). " Cell format
* Document Type
r_cell = l_document->create_simple_element( name = 'Cell' parent = r_row ).
r_cell->set_attribute_ns( name = 'StyleID' prefix = 'ss' value = 'Data' ).
l_value = ls_final-BSART.
r_data = l_document->create_simple_element( name = 'Data' value = l_value parent = r_cell ). " Data
r_data->set_attribute_ns( name = 'Type' prefix = 'ss' value = 'String' ). " Cell format
* Cocd
r_cell = l_document->create_simple_element( name = 'Cell' parent = r_row ).
r_cell->set_attribute_ns( name = 'StyleID' prefix = 'ss' value = 'Data' ).
l_value = ls_final-bukrs.
r_data = l_document->create_simple_element( name = 'Data' value = l_value parent = r_cell ). " Data
r_data->set_attribute_ns( name = 'Type' prefix = 'ss' value = 'String' ). " Cell format
* Vendor
r_cell = l_document->create_simple_element( name = 'Cell' parent = r_row ).
r_cell->set_attribute_ns( name = 'StyleID' prefix = 'ss' value = 'Data' ).
l_value = ls_final-lifnr .
r_data = l_document->create_simple_element( name = 'Data' value = l_value parent = r_cell ). " Data
r_data->set_attribute_ns( name = 'Type' prefix = 'ss' value = 'String' ). " Cell format
* Vendor Name
r_cell = l_document->create_simple_element( name = 'Cell' parent = r_row ).
r_cell->set_attribute_ns( name = 'StyleID' prefix = 'ss' value = 'Data' ).
l_value = ls_final-vendorname.
r_data = l_document->create_simple_element( name = 'Data' value = l_value parent = r_cell ). " Data
r_data->set_attribute_ns( name = 'Type' prefix = 'ss' value = 'String' ). " Cell format
* Purchasing Group
r_cell = l_document->create_simple_element( name = 'Cell' parent = r_row ).
r_cell->set_attribute_ns( name = 'StyleID' prefix = 'ss' value = 'Data' ).
l_value = ls_final-ekgrp.
r_data = l_document->create_simple_element( name = 'Data' value = l_value parent = r_cell ). " Data
r_data->set_attribute_ns( name = 'Type' prefix = 'ss' value = 'String' ). " Cell format
* startdate
r_cell = l_document->create_simple_element( name = 'Cell' parent = r_row ).
r_cell->set_attribute_ns( name = 'StyleID' prefix = 'ss' value = 'Data' ).
l_value = ls_final-startdate.
r_data = l_document->create_simple_element( name = 'Data' value = l_value parent = r_cell ). " Data
r_data->set_attribute_ns( name = 'Type' prefix = 'ss' value = 'String' ). " Cell format
* End date
r_cell = l_document->create_simple_element( name = 'Cell' parent = r_row ).
r_cell->set_attribute_ns( name = 'StyleID' prefix = 'ss' value = 'Data' ).
l_value = ls_final-enddate .
r_data = l_document->create_simple_element( name = 'Data' value = l_value parent = r_cell ). " Data
r_data->set_attribute_ns( name = 'Type' prefix = 'ss' value = 'String' ).
* Judul
r_cell = l_document->create_simple_element( name = 'Cell' parent = r_row ).
r_cell->set_attribute_ns( name = 'StyleID' prefix = 'ss' value = 'Data' ).
l_value = ls_final-judul.
r_data = l_document->create_simple_element( name = 'Data' value = l_value parent = r_cell ). " Data
r_data->set_attribute_ns( name = 'Type' prefix = 'ss' value = 'String' ).
* Total Value
r_cell = l_document->create_simple_element( name = 'Cell' parent = r_row ).
r_cell->set_attribute_ns( name = 'StyleID' prefix = 'ss' value = 'Data' ).
l_value = ls_final-totalval.
r_data = l_document->create_simple_element( name = 'Data' value = l_value parent = r_cell ). " Data
r_data->set_attribute_ns( name = 'Type' prefix = 'ss' value = 'String' ).
* Penawaran Awal
r_cell = l_document->create_simple_element( name = 'Cell' parent = r_row ).
r_cell->set_attribute_ns( name = 'StyleID' prefix = 'ss' value = 'Data' ).
l_value = ls_final-penawal .
r_data = l_document->create_simple_element( name = 'Data' value = l_value parent = r_cell ). " Data
r_data->set_attribute_ns( name = 'Type' prefix = 'ss' value = 'String' ).
* Currency
r_cell = l_document->create_simple_element( name = 'Cell' parent = r_row ).
r_cell->set_attribute_ns( name = 'StyleID' prefix = 'ss' value = 'Data' ).
l_value = ls_final-waers.
r_data = l_document->create_simple_element( name = 'Data' value = l_value parent = r_cell ). " Data
r_data->set_attribute_ns( name = 'Type' prefix = 'ss' value = 'String' ).
* Komitment TKDN
r_cell = l_document->create_simple_element( name = 'Cell' parent = r_row ).
r_cell->set_attribute_ns( name = 'StyleID' prefix = 'ss' value = 'Data' ).
l_value = ls_final-zzmtkdn.
r_data = l_document->create_simple_element( name = 'Data' value = l_value parent = r_cell ). " Data
r_data->set_attribute_ns( name = 'Type' prefix = 'ss' value = 'String' ).
* Batas Minimum TKDN
r_cell = l_document->create_simple_element( name = 'Cell' parent = r_row ).
r_cell->set_attribute_ns( name = 'StyleID' prefix = 'ss' value = 'Data' ).
l_value = ls_final-zbtsmintkdn.
r_data = l_document->create_simple_element( name = 'Data' value = l_value parent = r_cell ). " Data
r_data->set_attribute_ns( name = 'Type' prefix = 'ss' value = 'String' ).
ENDLOOP.
* Creating a Stream Factory
l_streamfactory = l_ixml->create_stream_factory( ).
* Connect Internal XML Table to Stream Factory
l_ostream = l_streamfactory->create_ostream_itable( table = l_xml_table ).
* Rendering the Document
l_renderer = l_ixml->create_renderer( ostream = l_ostream document = l_document ).
l_rc = l_renderer->render( ).
* Saving the XML Document
l_xml_size = l_ostream->get_num_written_raw( ).
ENDFORM. " F_PREP_XML
*&---------------------------------------------------------------------*
*& Form F_SEND_EMAIL
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM F_SEND_EMAIL USING u_mail TYPE bi_smtp_addr..
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 OCCURS 5 WITH HEADER LINE.
DATA: doc_chng LIKE sodocchgi1.
DATA: tab_lines LIKE sy-tabix.
DATA: l_num(3).
DATA: subj_date(10) TYPE c.
* Mail Subject
CONCATENATE 'Notifikasi List Outstanding' 'Dokumen untuk Capaian TKDN di cocd' S_BUKRS-LOW INTO doc_chng-obj_descr SEPARATED BY space.
objtxt = '<body> <html>'.
APPEND objtxt.
* Mail Contents
objtxt = 'Dengan hormat,<br>'.
APPEND objtxt.
objtxt = '<br>'.
APPEND objtxt.
CONCATENATE 'Berikut kami sampaikan list outstanding purchasing document yang' '<br>' INTO objtxt SEPARATED BY space. " Mail Contents
APPEND objtxt.
CONCATENATE 'sudah expired tetapi belum dilakukan penginputan capaian TKDN.' '<br>' INTO objtxt SEPARATED BY space. " Mail Contents
APPEND objtxt.
objtxt = '<br>'.
APPEND objtxt.
CONCATENATE 'Silahkan dikoordinasikan ke pihak terkait dan dilakukan input' '<br>' INTO objtxt SEPARATED BY space. " Mail Contents
APPEND objtxt.
CONCATENATE 'capaian TKDN melalui tcode ZM105.' '<br>' INTO objtxt SEPARATED BY space. " Mail Contents
APPEND objtxt.
objtxt = '<br>'.
APPEND objtxt.
CONCATENATE 'Terima kasih.' '<br>' INTO objtxt SEPARATED BY space. " Mail Contents
APPEND objtxt.
objtxt = '</body> </html>'.
APPEND objtxt.
DESCRIBE TABLE objtxt LINES tab_lines.
READ TABLE objtxt INDEX tab_lines.
doc_chng-doc_size = ( tab_lines - 1 ) * 255 + strlen( objtxt ).
* Packing List For the E-mail Body
objpack-head_start = 1.
objpack-head_num = 0.
objpack-body_start = 1.
objpack-body_num = tab_lines.
objpack-doc_type = 'HTML'.
APPEND objpack.
* Creation of the Document Attachment
LOOP AT l_xml_table INTO wa_xml.
CLEAR objbin.
objbin-line = wa_xml-data.
APPEND objbin.
ENDLOOP.
DESCRIBE TABLE objbin LINES tab_lines.
CONCATENATE 'Notifikasi List Outstanding' 'Dokumen untuk Capaian TKDN di cocd' S_BUKRS-LOW INTO objhead SEPARATED BY space.
APPEND objhead.
* Packing List For the E-mail Attachment
objpack-transf_bin = 'X'.
objpack-head_start = 1.
objpack-head_num = 0.
objpack-body_start = 1.
objpack-body_num = tab_lines.
CONCATENATE 'Notifikasi List Outstanding' 'Dokumen untuk Capaian TKDN di cocd' S_BUKRS-LOW INTO objpack-obj_descr SEPARATED BY space.
objpack-doc_type = 'XLS'.
objpack-doc_size = tab_lines * 255.
APPEND objpack.
* Target Recipent
REFRESH reclist.
reclist-receiver = u_mail.
reclist-rec_type = 'U'.
APPEND reclist.
* Sending the document
CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
EXPORTING
document_data = doc_chng
commit_work = 'X'
TABLES
packing_list = objpack
object_header = objhead
contents_txt = objtxt
contents_hex = objbin
receivers = reclist
EXCEPTIONS
too_many_receivers = 1
document_not_sent = 2
operation_no_authorization = 4
OTHERS = 99.
ENDFORM. " F_SEND_EMAIL
*&---------------------------------------------------------------------*
*& Form F_SEND_EMAIL2
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_MAIL text
*----------------------------------------------------------------------*
FORM F_SEND_EMAIL2 USING MAIL.
DATA : main_text TYPE bcsy_text.
DATA : send_request TYPE REF TO cl_bcs,
send_requests TYPE REF TO cl_bcs.
DATA : document TYPE REF TO cl_document_bcs,
documents TYPE REF TO cl_document_bcs,
t_attachment_header TYPE soli_tab,
wa_attachment_header LIKE LINE OF t_attachment_header.
DATA : recipient TYPE REF TO if_recipient_bcs.
DATA : bcs_exception TYPE REF TO cx_bcs.
DATA : ls_reclist TYPE somlreci1.
DATA : mailto TYPE ad_smtpadr,
mailcc TYPE ad_smtpadr.
DATA : sent_to_all TYPE os_boolean.
DATA : save_outbox TYPE os_boolean.
DATA : size TYPE sood-objlen.
DATA :
subject TYPE so_obj_des,
sub_str TYPE string,
attsubj TYPE sood-objdes.
DATA : xdata TYPE xstring,
rawdata TYPE solix_tab,
bytecount TYPE i.
DATA : lo_excel TYPE REF TO zcl_excel,
lo_worksheet TYPE REF TO zcl_excel_worksheet,
lo_style_header TYPE REF TO zcl_excel_style,
lo_style_cell TYPE REF TO zcl_excel_style,
lo_cell_date TYPE REF TO zcl_excel_style,
lo_style_wrap TYPE REF TO zcl_excel_style,
lv_style_header_guid TYPE zexcel_cell_style,
lv_style_cell_guid TYPE zexcel_cell_style,
lv_cell_date_guid TYPE zexcel_cell_style,
lv_style_wrap_guid TYPE zexcel_cell_style,
lo_border_dark TYPE REF TO zcl_excel_style_border,
column_dimension TYPE REF TO zcl_excel_worksheet_columndime.
DATA : cl_writer TYPE REF TO zif_excel_writer,
l_row TYPE i,
l_check TYPE flag.
DATA : ls_line LIKE LINE OF main_text,
ls_email TYPE ztmm_emailexp.
DATA : reclist TYPE STANDARD TABLE OF somlreci1.
DATA: lo_sender TYPE REF TO if_sender_bcs VALUE IS INITIAL. "sender
* SELECT zemail
* FROM ztmm_emailexp
* INTO ls_reclist-receiver
* WHERE zprog = sy-repid
* AND zfunc = 'TO'
* AND bukrs IN s_group. "--> PEDK979174 07.08.2018 By Yulian Req By Vika Add Filter Group for CICO-OSES
ls_reclist-receiver = MAIL.
ls_reclist-rec_type = 'U' .
ls_reclist-express = 'X' .
APPEND ls_reclist TO reclist .
* ENDSELECT.
DELETE reclist WHERE receiver IS INITIAL.
CREATE OBJECT cl_writer TYPE zcl_excel_writer_2007.
IF lo_excel IS INITIAL.
CREATE OBJECT lo_excel.
ENDIF.
" Get active sheet
lo_worksheet = lo_excel->get_active_worksheet( ).
TRY.
CALL METHOD lo_worksheet->set_title
EXPORTING
ip_title = 'Sheet TKDN'.
CATCH zcx_excel .
ENDTRY.
IF lo_border_dark IS INITIAL.
CREATE OBJECT lo_border_dark.
ENDIF.
lo_border_dark->border_color-rgb = zcl_excel_style_color=>c_black.
lo_border_dark->border_style = zcl_excel_style_border=>c_border_thin.
"Header: Center, Middle, Bold, Fill, Border
lo_style_header = lo_excel->add_new_style( ).
lo_style_header->font->bold = abap_true.
lo_style_header->font->italic = abap_false.
lo_style_header->font->color-rgb = zcl_excel_style_color=>c_black.
lo_style_header->fill->filltype = zcl_excel_style_fill=>c_fill_solid.
lo_style_header->fill->fgcolor-theme = zcl_excel_style_color=>c_theme_accent6.
lo_style_header->borders->allborders = lo_border_dark.
lo_style_header->alignment->horizontal = zcl_excel_style_alignment=>c_horizontal_center.
lo_style_header->alignment->vertical = zcl_excel_style_alignment=>c_vertical_center.
lv_style_header_guid = lo_style_header->get_guid( ).
"Cell:
lo_style_cell = lo_excel->add_new_style( ).
lo_style_cell->alignment->vertical = zcl_excel_style_alignment=>c_vertical_top.
lo_style_cell->borders->allborders = lo_border_dark.
lv_style_cell_guid = lo_style_cell->get_guid( ).
"Cell DATE
lo_cell_date = lo_excel->add_new_style( ).
* lo_cell_date->alignment->vertical = zcl_excel_style_alignment=>c_vertical_top.
lo_cell_date->borders->allborders = lo_border_dark.
lo_cell_date->number_format->format_code = zcl_excel_style_number_format=>c_format_date_ddmmyyyy.
lv_cell_date_guid = lo_cell_date->get_guid( ).
"Wrap:
lo_style_wrap = lo_excel->add_new_style( ).
lo_style_wrap->borders->allborders = lo_border_dark.
lo_style_wrap->alignment->horizontal = zcl_excel_style_alignment=>c_horizontal_justify.
lo_style_wrap->alignment->vertical = zcl_excel_style_alignment=>c_vertical_top.
lv_style_wrap_guid = lo_style_wrap->get_guid( ).
*** KOLOM HEADER
TRY.
lo_worksheet->set_cell( ip_row = 1 ip_column = 'A' ip_value = 'Purchasing Doc' ip_style = lv_style_header_guid ).
lo_worksheet->set_cell( ip_row = 1 ip_column = 'B' ip_value = 'Document Type' ip_style = lv_style_header_guid ).
lo_worksheet->set_cell( ip_row = 1 ip_column = 'C' ip_value = 'Cocd' ip_style = lv_style_header_guid ).
lo_worksheet->set_cell( ip_row = 1 ip_column = 'D' ip_value = 'Vendor' ip_style = lv_style_header_guid ).
lo_worksheet->set_cell( ip_row = 1 ip_column = 'E' ip_value = 'Vendor Name' ip_style = lv_style_header_guid ).
lo_worksheet->set_cell( ip_row = 1 ip_column = 'F' ip_value = 'Purchasing Group' ip_style = lv_style_header_guid ).
lo_worksheet->set_cell( ip_row = 1 ip_column = 'G' ip_value = 'Start Date' ip_style = lv_style_header_guid ).
lo_worksheet->set_cell( ip_row = 1 ip_column = 'H' ip_value = 'End Date' ip_style = lv_style_header_guid ).
lo_worksheet->set_cell( ip_row = 1 ip_column = 'I' ip_value = 'Judul' ip_style = lv_style_header_guid ).
lo_worksheet->set_cell( ip_row = 1 ip_column = 'J' ip_value = 'Total Value' ip_style = lv_style_header_guid ).
lo_worksheet->set_cell( ip_row = 1 ip_column = 'K' ip_value = 'Penawaran Awal' ip_style = lv_style_header_guid ).
lo_worksheet->set_cell( ip_row = 1 ip_column = 'L' ip_value = 'Currency' ip_style = lv_style_header_guid ).
lo_worksheet->set_cell( ip_row = 1 ip_column = 'M' ip_value = 'Komitmen TKDN' ip_style = lv_style_header_guid ).
lo_worksheet->set_cell( ip_row = 1 ip_column = 'N' ip_value = 'Batas Minimum TKDN' ip_style = lv_style_header_guid ).
CATCH zcx_excel.
ENDTRY.
l_row = 1.
LOOP AT LT_FINAL INTO ls_final.
add 1 to l_row.
TRY.
lo_worksheet->set_cell( ip_row = l_row ip_column = 'A' ip_value = ls_final-ebeln ip_style = lv_style_cell_guid ).
lo_worksheet->set_cell( ip_row = l_row ip_column = 'B' ip_value = ls_final-bsart ip_style = lv_style_cell_guid ).
lo_worksheet->set_cell( ip_row = l_row ip_column = 'C' ip_value = ls_final-bukrs ip_style = lv_style_cell_guid ).
lo_worksheet->set_cell( ip_row = l_row ip_column = 'D' ip_value = ls_final-lifnr ip_style = lv_style_cell_guid ).
lo_worksheet->set_cell( ip_row = l_row ip_column = 'E' ip_value = ls_final-vendorname ip_style = lv_cell_date_guid ).
lo_worksheet->set_cell( ip_row = l_row ip_column = 'F' ip_value = ls_final-ekgrp ip_style = lv_style_cell_guid ).
lo_worksheet->set_cell( ip_row = l_row ip_column = 'G' ip_value = ls_final-startdate ip_style = lv_style_cell_guid ).
lo_worksheet->set_cell( ip_row = l_row ip_column = 'H' ip_value = ls_final-enddate ip_style = lv_style_cell_guid ).
lo_worksheet->set_cell( ip_row = l_row ip_column = 'I' ip_value = ls_final-judul ip_style = lv_style_cell_guid ).
lo_worksheet->set_cell( ip_row = l_row ip_column = 'J' ip_value = ls_final-totalval ip_style = lv_style_cell_guid ).
lo_worksheet->set_cell( ip_row = l_row ip_column = 'K' ip_value = ls_final-penawal ip_style = lv_style_cell_guid ).
lo_worksheet->set_cell( ip_row = l_row ip_column = 'L' ip_value = ls_final-waers ip_style = lv_style_cell_guid ).
lo_worksheet->set_cell( ip_row = l_row ip_column = 'M' ip_value = ls_final-zzmtkdn ip_style = lv_style_cell_guid ).
lo_worksheet->set_cell( ip_row = l_row ip_column = 'N' ip_value = ls_final-zbtsmintkdn ip_style = lv_style_cell_guid ).
CATCH zcx_excel.
ENDTRY.
ENDLOOP.
xdata = cl_writer->write_file( lo_excel ).
rawdata = cl_bcs_convert=>xstring_to_solix( iv_xstring = xdata ).
bytecount = xstrlen( xdata ).
ls_line = '<body> <html>'.
APPEND ls_line TO main_text.
* Mail Contents
ls_line = 'Dengan hormat,<br>'.
APPEND ls_line TO main_text.
ls_line = '<br>'.
APPEND ls_line TO main_text.
CONCATENATE 'Berikut kami sampaikan list outstanding purchasing document yang' '<br>' INTO ls_line SEPARATED BY space. " Mail Contents
APPEND ls_line TO main_text.
CONCATENATE 'sudah expired tetapi belum dilakukan penginputan capaian TKDN.' '<br>' INTO ls_line SEPARATED BY space. " Mail Contents
APPEND ls_line TO main_text.
ls_line = '<br>'.
APPEND ls_line TO main_text.
CONCATENATE 'Silahkan dikoordinasikan ke pihak terkait dan dilakukan input' '<br>' INTO ls_line SEPARATED BY space. " Mail Contents
APPEND ls_line TO main_text.
CONCATENATE 'capaian TKDN melalui tcode ZM105.' '<br>' INTO ls_line SEPARATED BY space. " Mail Contents
APPEND ls_line TO main_text.
ls_line = '<br>'.
APPEND ls_line TO main_text.
CONCATENATE 'Terima kasih.' '<br>' INTO ls_line SEPARATED BY space. " Mail Contents
APPEND ls_line TO main_text.
ls_line = '</body> </html>'.
APPEND ls_line TO main_text.
CONCATENATE 'Notifikasi List Outstanding' 'Dokumen untuk Capaian TKDN di cocd' S_BUKRS-LOW
* CONCATENATE 'HBM/HBI Report - ' sy-datum+6(2) '.' sy-datum+4(2) '.' sy-datum+0(4)
INTO sub_str SEPARATED BY space.
attsubj = 'TKDN_Report.xlsx'.
*
TRY.
* -------- create persistent send request ------------------------
send_request = cl_bcs=>create_persistent( ).
* -------- create and set document with attachment ---------------
* create document object from internal table with text
document = cl_document_bcs=>create_document(
i_type = 'HTM' "#EC NOTEXT
i_text = main_text
i_subject = ``
).
* i_subject = subject ).
* catch CX_SEND_REQ_BCS. "
size = bytecount.
CONCATENATE '&SO_FILENAME=' attsubj INTO wa_attachment_header.
APPEND wa_attachment_header TO t_attachment_header.
* add the spread sheet as attachment to document object
document->add_attachment(
i_attachment_type = 'XLS' "#EC NOTEXT
i_attachment_subject = attsubj
i_attachment_size = size
i_att_content_hex = rawdata
i_attachment_header = t_attachment_header ).
* add document object to send request
call METHOD send_request->SET_MESSAGE_SUBJECT
exporting
IP_SUBJECT = sub_str " Subject of MIME Message
.
send_request->set_document( document ).
data: sender type ref to cl_sapuser_bcs.
data: lo_ref_sender type ref to IF_SENDER_BCS.
* data: lo_ref_sender type ref to cl_cam_address_bcs.
data: lv_smtp_addr TYPE ADR6-SMTP_ADDR.
lv_smtp_addr = 'sap.noreply@xyz.com'.
lo_ref_sender = cl_cam_address_bcs=>create_internet_address(
i_address_string = lv_smtp_addr
i_address_name = lv_smtp_addr ).
* TRY.
call METHOD SEND_REQUEST->SET_SENDER
exporting
I_SENDER = lo_ref_sender " Sender
.
LOOP AT reclist INTO ls_reclist.
IF ls_reclist-copy IS INITIAL.
MOVE ls_reclist-receiver TO mailto.
recipient = cl_cam_address_bcs=>create_internet_address( mailto ).
CALL METHOD send_request->add_recipient
EXPORTING
i_recipient = recipient
i_express = 'X'.
ELSEIF ls_reclist-copy IS NOT INITIAL.
MOVE ls_reclist-receiver TO mailcc.
recipient = cl_cam_address_bcs=>create_internet_address( mailcc ).
CALL METHOD send_request->add_recipient
EXPORTING
i_recipient = recipient
i_express = 'X'
i_copy = 'X'.
ENDIF.
ENDLOOP.
* add recipient object to send request
send_request->add_recipient( recipient ).
* set outbox flag
send_request->send_request->set_link_to_outbox( 'X' ).
* ---------- send document ---------------------------------------
sent_to_all = send_request->send( i_with_error_screen = 'X' ).
COMMIT WORK.
IF sent_to_all IS INITIAL.
MESSAGE i500(sbcoms) WITH mailto.
ELSE.
MESSAGE s022(so).
ENDIF.
** ------------ exception handling ----------------------------------
** replace this rudimentary exception handling with your own one !!!
CATCH cx_bcs INTO bcs_exception.
MESSAGE i865(so) WITH bcs_exception->error_type.
ENDTRY.
ENDFORM. " F_SEND_EMAIL2
this method though has one deficiency,
when you check the SOST tcode, the subject sections remains empty, BUT when you check the email on your mailbox, the subject is filled.