‎2008 Oct 07 7:37 AM
Hi
We Implemented E-mail functionality in our tool useing "so_new_document_att_send_api1" standard FM but here im unable to attach excel document .How to attach a excel document in this standard FM plz help.
Asif
‎2008 Oct 07 7:48 AM
hi try this code
&----
*& Report ZTEST_2 *
*& *
&----
*& *
*& *
&----
&----
*& Report ZTEST_2 *
*& *
&----
*& *
*& *
&----
REPORT ztest_2 .
TYPES : BEGIN OF t_email_update_iw32,
aufnr LIKE viaufks-aufnr,
vornr LIKE afvc-vornr,
text(220),
END OF t_email_update_iw32.
DATA : gt_email_update_iw32 TYPE STANDARD TABLE OF t_email_update_iw32,
gw_email_update_iw32 TYPE t_email_update_iw32.
TYPES : BEGIN OF t_email_date_error,
aufnr LIKE viaufks-aufnr,
prueflos LIKE qamr-prueflos,
merknr LIKE qamr-merknr,
text(220),
END OF t_email_date_error.
DATA : gt_email_date_error TYPE STANDARD TABLE OF t_email_date_error,
gw_email_date_error TYPE t_email_date_error.
TYPES : BEGIN OF t_email_conf_doc_error,
aufnr LIKE viaufks-aufnr,
vornr LIKE afvc-vornr,
text(220),
END OF t_email_conf_doc_error.
DATA : gt_email_conf_doc_error TYPE STANDARD TABLE OF
t_email_conf_doc_error,
gw_email_conf_doc_error TYPE t_email_conf_doc_error.
SELECTION-SCREEN : BEGIN OF BLOCK b4 WITH FRAME TITLE text-004.
PARAMETERS : cb_email AS CHECKBOX DEFAULT 'X'.
*SELECTION-SCREEN BEGIN OF LINE.
*SELECTION-SCREEN COMMENT (16) text-007 FOR FIELD p_email1.
PARAMETERS : p_email LIKE somlreci1-receiver,
p_email1 LIKE adr6-smtp_addr.
PARAMETERS : p_table1 AS CHECKBOX,
p_table2 AS CHECKBOX,
p_table3 AS CHECKBOX.
SELECTION-SCREEN : END OF BLOCK b4.
CLEAR gw_email_update_iw32.
REFRESH gt_email_update_iw32.
gw_email_update_iw32-aufnr = '1234567'.
gw_email_update_iw32-vornr = '0010'.
gw_email_update_iw32-text = 'This is table1'.
APPEND gw_email_update_iw32 TO gt_email_update_iw32.
CLEAR gw_email_update_iw32.
gw_email_update_iw32-aufnr = '4564578'.
gw_email_update_iw32-vornr = '0020'.
gw_email_update_iw32-text = 'This is table1'.
APPEND gw_email_update_iw32 TO gt_email_update_iw32.
gw_email_date_error-aufnr = '222615'.
gw_email_date_error-prueflos = '1111'.
gw_email_date_error-merknr = '2222'.
gw_email_date_error-text = 'This is table2'.
APPEND gw_email_date_error TO gt_email_date_error.
gw_email_date_error-aufnr = '222615'.
gw_email_date_error-prueflos = '3333'.
gw_email_date_error-merknr = '4444'.
gw_email_date_error-text = 'This is table2'.
APPEND gw_email_date_error TO gt_email_date_error.
gw_email_conf_doc_error-aufnr = '9900107987'.
gw_email_conf_doc_error-vornr = '999999'.
gw_email_conf_doc_error-text = 'This is table3'.
APPEND gw_email_conf_doc_error TO gt_email_conf_doc_error.
gw_email_conf_doc_error-aufnr = '9900107987'.
gw_email_conf_doc_error-vornr = '999999'.
gw_email_conf_doc_error-text = 'This is table3'.
APPEND gw_email_conf_doc_error TO gt_email_conf_doc_error.
DATA : lw_space VALUE ''.
SET PARAMETER ID 'ZPDF' FIELD lw_space.
DATA : pripar LIKE pri_params.
CALL FUNCTION 'GET_PRINT_PARAMETERS'
EXPORTING
in_parameters = pripar
line_size = 255
layout = 'X_65_132'
no_dialog = 'X'
IMPORTING
out_parameters = pripar
EXCEPTIONS
archive_info_not_found = 1
invalid_print_params = 2
invalid_archive_params = 3
OTHERS = 4.
NEW-PAGE PRINT ON PARAMETERS pripar NO DIALOG .
RESERVE 5 LINES.
DATA : text1(10) TYPE c VALUE 'AUFNR',
text2(10) TYPE c VALUE 'VORNR',
text3(50) TYPE c VALUE 'TEXT'.
IF p_table1 = 'X'.
WRITE AT 10 text1. WRITE AT 30 text2 . WRITE AT 30 text3.
LOOP AT gt_email_update_iw32 INTO gw_email_update_iw32.
WRITE : / gw_email_update_iw32-aufnr , gw_email_update_iw32-vornr ,
gw_email_update_iw32-text.
ENDLOOP.
ENDIF.
WRITE : / sy-uline .
IF p_table2 = 'X'.
WRITE : / 'AUFNR' , 'PRUEFLOS' , 'MERKNR', 'TEXT' .
LOOP AT gt_email_date_error INTO gw_email_date_error.
WRITE : / gw_email_date_error-aufnr, gw_email_date_error-prueflos,
gw_email_date_error-merknr,gw_email_date_error-text.
ENDLOOP.
ENDIF.
WRITE : / sy-uline .
IF p_table3 = 'X'.
WRITE : / 'AUFNR' , 'VORNR' , 'TEXT' .
LOOP AT gt_email_conf_doc_error INTO gw_email_conf_doc_error.
WRITE : / gw_email_conf_doc_error-aufnr,
gw_email_conf_doc_error-vornr, gw_email_conf_doc_error-text.
ENDLOOP.
ENDIF.
NEW-PAGE PRINT OFF.
DATA : mtab_pdf LIKE tline OCCURS 0 WITH HEADER LINE.
DATA : rqident LIKE tsp01-rqident ,
rqcretime LIKE tsp01-rqcretime .
SELECT rqident rqcretime FROM tsp01
INTO (rqident,rqcretime)
WHERE rqowner = sy-uname
ORDER BY rqcretime DESCENDING.
EXIT.
ENDSELECT.
DATA: spool_id LIKE tsp01-rqident.
MOVE rqident TO spool_id.
DATA : p_file LIKE rlgrap-filename VALUE 'C:\file.pdf' ,
numbytes TYPE i,
cancel.
CALL FUNCTION 'CONVERT_ABAPSPOOLJOB_2_PDF'
EXPORTING
src_spoolid = spool_id
NO_DIALOG =
DST_DEVICE =
PDF_DESTINATION =
IMPORTING
pdf_bytecount = numbytes
PDF_SPOOLID =
LIST_PAGECOUNT =
BTC_JOBNAME =
BTC_JOBCOUNT =
TABLES
pdf = mtab_pdf
EXCEPTIONS
err_no_abap_spooljob = 1
err_no_spooljob = 2
err_no_permission = 3
err_conv_not_possible = 4
err_bad_destdevice = 5
user_cancelled = 6
err_spoolerror = 7
err_temseerror = 8
err_btcjob_open_failed = 9
err_btcjob_submit_failed = 10
err_btcjob_close_failed = 11
OTHERS = 12
.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE 'I' NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
end
DATA : w_buffer TYPE string. "To convert from 132 to 255
DATA : i_record LIKE solisti1 OCCURS 0 WITH HEADER LINE.
LOOP AT mtab_pdf.
Replacing space by ~
TRANSLATE mtab_pdf USING ' ~'.
CONCATENATE w_buffer mtab_pdf INTO w_buffer.
ENDLOOP.
Replacing ~ by space
TRANSLATE w_buffer USING '~ ' .
DO.
i_record = w_buffer.
Appending 255 characters as a record
APPEND i_record.
SHIFT w_buffer LEFT BY 255 PLACES.
IF w_buffer IS INITIAL.
EXIT.
ENDIF.
ENDDO.
*start try
DATA: objpack LIKE sopcklsti1 OCCURS 2 WITH HEADER LINE.
DATA: objhead LIKE solisti1 OCCURS 1 WITH HEADER LINE.
DATA: objbin LIKE solisti1 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 TYPE c.
doc_chng-obj_name = 'TEST'.
doc_chng-obj_descr = 'Mail came successfully'.
objtxt = 'Regards'.
APPEND objtxt.
objtxt = 'Nitin'.
APPEND objtxt.
objtxt = 'hahaha'.
APPEND objtxt.
DESCRIBE TABLE objtxt LINES tab_lines.
READ TABLE objtxt INDEX tab_lines.
doc_chng-doc_size = ( tab_lines - 1 ) * 255 + STRLEN( objtxt ).
* ERSTELLEN DES EINTRAGS ZUM KOMPRIMIERTEN DOKUMENT
CLEAR objpack-transf_bin.
objpack-head_start = 1.
objpack-head_num = 0.
objpack-body_start = 1.
objpack-body_num = tab_lines.
objpack-doc_type = 'RAW'.
APPEND objpack.
* ERSTELLEN DER ANLAGE FUR DAS DOKUMENT
**OBJBIN = '\O/ '. APPEND OBJBIN.
**OBJBIN = ' '. APPEND OBJBIN.
**OBJBIN = ' / \ '. APPEND OBJBIN.
LOOP AT i_record.
objbin[] = i_record[].
ENDLOOP.
DESCRIBE TABLE objbin LINES tab_lines.
*objhead = 'picasso.txt'. APPEND objhead.
* Erstellen des Eintrags zur komprimierten Anlage
objpack-transf_bin = 'X'.
objpack-head_start = 1.
objpack-head_num = 1.
objpack-body_start = 1.
objpack-body_num = tab_lines.
objpack-doc_type = 'PDF'.
objpack-obj_name = 'PDF File received '.
objpack-obj_descr = 'PDF File received '.
*objpack-doc_size = ( tab_lines ) * 255 .
APPEND objpack.
* Fullen der Empfangerliste
refresh reclist.
reclist-rec_type = 'U'.
reclist-receiver = p_email1.
APPEND reclist.
reclist-rec_type = 'B'.
reclist-receiver = sy-uname.
APPEND reclist.
reclist-rec_type = 'U'.
reclist-receiver = p_email.
APPEND reclist.
CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
EXPORTING
document_data = doc_chng
put_in_outbox = 'X'
TABLES
packing_list = objpack
object_header = objhead
contents_bin = objbin
contents_txt = objtxt
receivers = reclist
EXCEPTIONS
too_many_receivers = 1
document_not_sent = 2
operation_no_authorization = 4
OTHERS = 99.
‎2008 Oct 07 7:49 AM
copy paste the below given code.it works perfect..
Local TYPES declaration
TYPES : BEGIN OF ty_s_smtpadd,
smtp_addr TYPE zglt_distr_list-smtp_addr,
END OF ty_s_smtpadd,
ty_t_smtpadd TYPE STANDARD TABLE OF ty_s_smtpadd.
Local Data Declarations
DATA:
Variables
lv_tab_lines TYPE sy-tabix,
Internal Tables
lt_objpack TYPE STANDARD TABLE OF sopcklsti1, "Number of text lines
lt_reclist TYPE STANDARD TABLE OF somlreci1, "Reciver's details
lt_objhead TYPE STANDARD TABLE OF solisti1, " Column Length
Workareas
ls_objpack TYPE sopcklsti1, "Number of text lines
ls_reclist TYPE somlreci1, "Reciver's details
ls_doc_chng TYPE sodocchgi1, "Mail Subject details
ls_objhead TYPE solisti1,
lt_contents TYPE STANDARD TABLE OF solisti1,
ls_contents TYPE solisti1,
ls_err_rec TYPE ty_output,
lc_x(1) TYPE c VALUE gc_x,
lv_lines TYPE i,
lv_hex1(1) TYPE c. "Carriage return
lv_hex1 = cl_abap_char_utilities=>cr_lf.
Local Constant Declarations
CONSTANTS:
lc_rec_typ(1) TYPE c VALUE 'U',
lc_doc_typ_raw TYPE so_obj_tp VALUE 'RAW',
lc_doc_typ_xls TYPE so_obj_tp VALUE 'XLS',
lc_tab(1) TYPE c VALUE cl_abap_char_utilities=>horizontal_tab.
Creating the document to be sent
ls_doc_chng-obj_name = sy-repid.
Prepare the Mail Subject
ls_doc_chng-obj_descr = 'Unpaid AP Invoices log.xls'(h05).
Object Description
ls_objhead = ls_doc_chng-obj_descr.
APPEND ls_objhead TO lt_objhead.
Populate body of the email
PERFORM populate_email_body.
DESCRIBE TABLE gt_objtxt LINES lv_tab_lines.
READ TABLE gt_objtxt INTO gs_objtxt INDEX lv_tab_lines.
ls_doc_chng-doc_size = ( lv_tab_lines - 1 ) * 255 +
STRLEN( gs_objtxt ).
Creating the entry for the compressed document
CLEAR ls_objpack-transf_bin.
ls_objpack-head_start = 1.
ls_objpack-head_num = 0.
ls_objpack-body_start = 1.
ls_objpack-body_num = lv_tab_lines.
ls_objpack-doc_type = lc_doc_typ_raw. "RAW
APPEND ls_objpack TO lt_objpack.
CLEAR ls_objpack.
Email details
ls_reclist-receiver = p_mail.
ls_reclist-rec_type = lc_rec_typ.
ls_reclist-com_type = 'INT'.
APPEND ls_reclist TO lt_reclist.
CLEAR : ls_reclist.
DESCRIBE TABLE gt_error LINES lv_lines.
Send attachment only it the error file is not empty
IF gt_error[] IS NOT INITIAL.
Prepare the Error log attachment
Header details
CONCATENATE 'GL Account'(h38)
'Journal Batch'(h09)
'Store'(h10)
'Division'(h11)
'Control no'(h12)
'Currency'(h13)
'Crc'(h14)
'Discount amount'(h15)
'Discount percent'(h16)
'Due date'(h17)
'Invoince cost'(h18)
'Invoice date'(h19)
'Invoice no'(h20)
'New record'(h21)
'Orginal contorl no'(h22)
'Match/Unmatch'(h23)
'OSI Trans Id'(h24)
'PO Number'(h25)
'Post date'(h26)
'Processed Flag'(h27)
'Retail AMount'(h28)
'Source Code'(h29)
'Time Stamp'(h30)
'Vendor No'(h31)
'Alpha Flag'(h32)
'Object Key'(h33)
'GL ind'(h34)
'Payment Block'(h35)
'Payable ID'(h36)
'Change/Create'(h37)
INTO ls_contents-line
SEPARATED BY lc_tab.
CONCATENATE ls_contents lv_hex1 INTO ls_contents.
APPEND ls_contents TO lt_contents.
CLEAR ls_contents.
LOOP AT gt_error INTO ls_err_rec.
CONCATENATE
ls_err_rec-glaccnt
ls_err_rec-batchno
ls_err_rec-store
ls_err_rec-division
ls_err_rec-cntrlno
ls_err_rec-country
ls_err_rec-currency
ls_err_rec-disamnt
ls_err_rec-disper
ls_err_rec-duedate
ls_err_rec-invcst
ls_err_rec-invdate
ls_err_rec-invoiceno
ls_err_rec-nerecflg
ls_err_rec-orgcntrlno
ls_err_rec-matunmflg
ls_err_rec-transid
ls_err_rec-ponumb
ls_err_rec-postdate
ls_err_rec-procflag
ls_err_rec-retailamnt
ls_err_rec-sourccode
ls_err_rec-timestmp
ls_err_rec-vendor
ls_err_rec-alphaflg
ls_err_rec-objectkey
ls_err_rec-glind
ls_err_rec-paymntblk
ls_err_rec-payabid
ls_err_rec-chcrind
'Legacy Country Key Does Not Exists'(m12)
INTO ls_contents-line SEPARATED BY lc_tab.
IF lv_lines NE sy-tabix.
CONCATENATE ls_contents lv_hex1 INTO ls_contents.
ENDIF.
APPEND ls_contents TO lt_contents.
CLEAR ls_contents.
ENDLOOP.
DESCRIBE TABLE lt_contents LINES lv_tab_lines.
READ TABLE lt_contents INTO ls_contents INDEX lv_tab_lines.
ls_objpack-transf_bin = lc_x.
ls_objpack-head_start = 1.
ls_objpack-head_num = 1.
ls_objpack-body_start = 1.
ls_objpack-body_num = lv_tab_lines.
ls_objpack-doc_type = lc_doc_typ_xls.
ls_objpack-obj_name = 'ATTACHMENT'(h07).
ls_objpack-doc_size = lv_tab_lines * 255.
APPEND ls_objpack TO lt_objpack.
CLEAR ls_objpack.
Send Email with attachment
CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
EXPORTING
document_data = ls_doc_chng
put_in_outbox = lc_x
commit_work = lc_x
TABLES
packing_list = lt_objpack
object_header = lt_objhead
contents_bin = lt_contents
contents_txt = gt_objtxt
receivers = lt_reclist
EXCEPTIONS
too_many_receivers = 1
document_not_sent = 2
document_type_not_exist = 3
operation_no_authorization = 4
parameter_error = 5
x_error = 6
enqueue_error = 7
OTHERS = 8.
CASE sy-subrc .
WHEN 0.
Mail successfully delivered
CONCATENATE 'Error file send to '(m13) p_mail INTO gs_err-line.
APPEND gs_err TO gt_err.
CLEAR gs_err.
WHEN OTHERS.
Do nothing
ENDCASE.
ENDIF.
‎2008 Oct 07 8:04 AM
Hi
Good
Hi I guess you may not be able to get ur excel attach in a proper format. This could be because of the delimeters you are using between the fields. Try the following to fill the objbin table.
let me know the problem clearly if you are not done with this.
call function 'SAP_CONVERT_TO_TXT_FORMAT'
exporting
i_line_header = 'X'
tables
i_tab_sap_data = gt_outtab6
changing
i_tab_converted_data = wa_data
exceptions
conversion_failed = 1
others = 2.
loop at wa_data into wa_format_data.
move wa_format_data+0(255) to gt_objbin.
append gt_objbin.
clear gt_objbin.
use the following 4 lines only if your internal table fields total length more than 255 chars ********************
concatenate wa_format_data+255 gs_end_of_line
into gt_objbin-line.
append gt_objbin.
clear gt_objbin.
endloop.
Thanks
mrutyun^
‎2008 Oct 07 8:13 AM
Hi Roshan,
Check out the below link. This might helpful for you.
move 'Please find Component Tracker Report' to g_text.
append g_text to i_content.
* Preparing contents of attachment with Change Log
perform prepare_attachment.
* Creates persistent send request
try.
l_send_request = cl_bcs=>create_persistent( ).
* Creating Document
l_document = cl_document_bcs=>create_document(
i_type = 'RAW'
i_text = i_content[]
i_subject = 'Component Tracker Report' ).
describe table i_attach lines g_lines.
* Size to multiplied by 2 for UNICODE enabled systems
g_size = g_lines * 2 * 255.
* Adding Attachment
call method l_document->add_attachment
exporting
i_attachment_type = c_ext
i_attachment_size = g_size
i_attachment_subject = 'Component Tracker'
i_att_content_text = i_attach[].
* Add document to send request
call method l_send_request->set_document( l_document ).
* Get Sender Object
l_uname = sy-uname.
l_sender = cl_sapuser_bcs=>create( l_uname ).
call method l_send_request->set_sender
exporting
i_sender = l_sender.
* E-Mail
translate s_mail to lower case.
l_recipient = cl_cam_address_bcs=>create_internet_address( s_mail )
.
call method l_send_request->add_recipient
exporting
i_recipient = l_recipient
i_express = 'U'
i_copy = ' '
i_blind_copy = ' '
i_no_forward = ' '.
*Trigger E-Mail immediately
l_send_request->set_send_immediately( 'X' ).
call method l_send_request->send( ).
commit work.
catch cx_document_bcs into l_bcs_exception.
catch cx_send_req_bcs into l_send_exception.
catch cx_address_bcs into l_addr_exception.
endtry.