06-04-2008 8:31 AM
Hi Friends,
I have a requirement of sending th Excel sheet through email attachment.
I am getting the records into the internal table,using the function module 'SO_NEW_DOCUMENT_ATT_SEND_API1'.
But after sending the Email and receiving it the first columns in the excel file give lots of blank spaces which is giving me problem in uploading t excel file. Also, the line after all t records is also a blank line.
Can you please provide me a solution with source code.
Regards,
pooja
06-04-2008 5:14 PM
Hi,
First build the XL Table from the actual Iternal table in my example its IT_ATTACH.
FORM build_xls_data_table.
CONSTANTS: con_cret TYPE x VALUE '0D',
con_tab TYPE x VALUE '09'.
CONCATENATE ' '
'SEASONAL TERMS CONFIRMATION'
into it_attach
SEPARATED BY SPACE.
APPEND it_attach.
CONCATENATE text-004 text-005
text-006 text-007
text-008 text-009
text-010 text-011
INTO it_attach
SEPARATED BY con_tab.
CONCATENATE con_cret it_attach
INTO it_attach.
APPEND it_attach.
CLEAR it_attach.
LOOP AT itab_term.
CONCATENATE itab_term-pernr
itab_term-emp_name
itab_term-parea
itab_term-cost_center
itab_term-manager
itab_term-hire_date
itab_term-term_date
itab_term-term_reasn
INTO it_attach
SEPARATED BY con_tab.
CONCATENATE con_cret it_attach
INTO it_attach.
APPEND it_attach.
CLEAR it_attach.
ENDLOOP.
ENDFORM. " build_xls_data_table
Then Send an Email With an Attachment
&----
*& Form SEND_FILE_AS_EMAIL_ATTACHMENT
&----
Send email
----
FORM send_file_as_email_attachment tables pit_message
pit_attach
using p_email
p_mtitle
p_format
p_filename
p_attdescription
p_sender_address
p_sender_addres_type
changing p_error
p_reciever.
DATA: ld_error TYPE sy-subrc,
ld_reciever TYPE sy-subrc,
ld_mtitle LIKE sodocchgi1-obj_descr,
ld_email LIKE somlreci1-receiver,
ld_format TYPE so_obj_tp ,
ld_attdescript TYPE so_obj_nam ,
ld_attfilename TYPE so_obj_des ,
ld_send_adres LIKE soextreci1-receiver,
ld_send_adres_type LIKE soextreci1-adr_typ,
ld_receiver LIKE sy-subrc,
ld_text(40) TYPE C.
ld_email = p_email.
ld_format = p_format.
ld_attdescript = p_attdescription.
ld_attfilename = p_filename.
ld_send_adres = p_sender_address.
ld_send_adres_type = p_sender_addres_type.
CONCATENATE sy-sysid
'(' sy-mandt ')'
INTO ld_text.
CONCATENATE ld_text ':'
p_mtitle
into ld_mtitle.
Fill the document data.
w_doc_data-doc_size = 1.
Populate the subject/generic message attributes
w_doc_data-obj_langu = sy-langu.
w_doc_data-obj_name = 'SAPRPT'.
w_doc_data-obj_descr = ld_mtitle .
w_doc_data-sensitivty = 'F'.
Fill the document data and get size of attachment
CLEAR w_doc_data.
READ TABLE it_attach INDEX w_cnt.
w_doc_data-doc_size =
( w_cnt - 1 ) * 255 + STRLEN( it_attach ).
w_doc_data-obj_langu = sy-langu.
w_doc_data-obj_name = 'SAPRPT'.
w_doc_data-obj_descr = ld_mtitle.
w_doc_data-sensitivty = 'F'.
CLEAR t_attachment.
REFRESH t_attachment.
t_attachment[] = pit_attach[].
Describe the body of the message
CLEAR t_packing_list.
REFRESH t_packing_list.
t_packing_list-transf_bin = space.
t_packing_list-head_start = 1.
t_packing_list-head_num = 0.
t_packing_list-body_start = 1.
DESCRIBE TABLE it_message LINES t_packing_list-body_num.
t_packing_list-doc_type = 'RAW'.
APPEND t_packing_list.
Create attachment notification
t_packing_list-transf_bin = 'X'.
t_packing_list-head_start = 1.
t_packing_list-head_num = 1.
t_packing_list-body_start = 1.
DESCRIBE TABLE t_attachment LINES t_packing_list-body_num.
t_packing_list-doc_type = ld_format.
t_packing_list-obj_descr = ld_attdescript.
t_packing_list-obj_name = ld_attfilename.
t_packing_list-doc_size = t_packing_list-body_num * 255.
APPEND t_packing_list.
Add the recipients email address
CLEAR t_receivers.
REFRESH t_receivers.
t_receivers-receiver = ld_email.
t_receivers-rec_type = 'C'.
t_receivers-com_type = 'INT'.
t_receivers-express = 'X'.
t_receivers-notif_del = 'X'.
t_receivers-notif_ndel = 'X'.
APPEND t_receivers.
CALL FUNCTION 'SO_DOCUMENT_SEND_API1'
EXPORTING
document_data = w_doc_data
put_in_outbox = 'X'
sender_address = ld_send_adres
sender_address_type = ld_send_adres_type
commit_work = 'X'
IMPORTING
sent_to_all = w_sent_all
TABLES
packing_list = t_packing_list
contents_bin = t_attachment
contents_txt = it_message
receivers = t_receivers
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.
Populate zerror return code
ld_error = sy-subrc.
Populate zreceiver return code
LOOP AT t_receivers.
ld_receiver = t_receivers-retrn_code.
ENDLOOP.
ENDFORM.
&----
*& Form INITIATE_MAIL_EXECUTE_PROGRAM
&----
Instructs mail send program for SAPCONNECT to send email.
----
FORM initiate_mail_execute_program.
WAIT UP TO 2 SECONDS.
SUBMIT rsconn01 WITH mode = 'INT'.
ENDFORM. " INITIATE_MAIL_EXECUTE_PROGRAM
06-04-2008 5:14 PM
Hi,
First build the XL Table from the actual Iternal table in my example its IT_ATTACH.
FORM build_xls_data_table.
CONSTANTS: con_cret TYPE x VALUE '0D',
con_tab TYPE x VALUE '09'.
CONCATENATE ' '
'SEASONAL TERMS CONFIRMATION'
into it_attach
SEPARATED BY SPACE.
APPEND it_attach.
CONCATENATE text-004 text-005
text-006 text-007
text-008 text-009
text-010 text-011
INTO it_attach
SEPARATED BY con_tab.
CONCATENATE con_cret it_attach
INTO it_attach.
APPEND it_attach.
CLEAR it_attach.
LOOP AT itab_term.
CONCATENATE itab_term-pernr
itab_term-emp_name
itab_term-parea
itab_term-cost_center
itab_term-manager
itab_term-hire_date
itab_term-term_date
itab_term-term_reasn
INTO it_attach
SEPARATED BY con_tab.
CONCATENATE con_cret it_attach
INTO it_attach.
APPEND it_attach.
CLEAR it_attach.
ENDLOOP.
ENDFORM. " build_xls_data_table
Then Send an Email With an Attachment
&----
*& Form SEND_FILE_AS_EMAIL_ATTACHMENT
&----
Send email
----
FORM send_file_as_email_attachment tables pit_message
pit_attach
using p_email
p_mtitle
p_format
p_filename
p_attdescription
p_sender_address
p_sender_addres_type
changing p_error
p_reciever.
DATA: ld_error TYPE sy-subrc,
ld_reciever TYPE sy-subrc,
ld_mtitle LIKE sodocchgi1-obj_descr,
ld_email LIKE somlreci1-receiver,
ld_format TYPE so_obj_tp ,
ld_attdescript TYPE so_obj_nam ,
ld_attfilename TYPE so_obj_des ,
ld_send_adres LIKE soextreci1-receiver,
ld_send_adres_type LIKE soextreci1-adr_typ,
ld_receiver LIKE sy-subrc,
ld_text(40) TYPE C.
ld_email = p_email.
ld_format = p_format.
ld_attdescript = p_attdescription.
ld_attfilename = p_filename.
ld_send_adres = p_sender_address.
ld_send_adres_type = p_sender_addres_type.
CONCATENATE sy-sysid
'(' sy-mandt ')'
INTO ld_text.
CONCATENATE ld_text ':'
p_mtitle
into ld_mtitle.
Fill the document data.
w_doc_data-doc_size = 1.
Populate the subject/generic message attributes
w_doc_data-obj_langu = sy-langu.
w_doc_data-obj_name = 'SAPRPT'.
w_doc_data-obj_descr = ld_mtitle .
w_doc_data-sensitivty = 'F'.
Fill the document data and get size of attachment
CLEAR w_doc_data.
READ TABLE it_attach INDEX w_cnt.
w_doc_data-doc_size =
( w_cnt - 1 ) * 255 + STRLEN( it_attach ).
w_doc_data-obj_langu = sy-langu.
w_doc_data-obj_name = 'SAPRPT'.
w_doc_data-obj_descr = ld_mtitle.
w_doc_data-sensitivty = 'F'.
CLEAR t_attachment.
REFRESH t_attachment.
t_attachment[] = pit_attach[].
Describe the body of the message
CLEAR t_packing_list.
REFRESH t_packing_list.
t_packing_list-transf_bin = space.
t_packing_list-head_start = 1.
t_packing_list-head_num = 0.
t_packing_list-body_start = 1.
DESCRIBE TABLE it_message LINES t_packing_list-body_num.
t_packing_list-doc_type = 'RAW'.
APPEND t_packing_list.
Create attachment notification
t_packing_list-transf_bin = 'X'.
t_packing_list-head_start = 1.
t_packing_list-head_num = 1.
t_packing_list-body_start = 1.
DESCRIBE TABLE t_attachment LINES t_packing_list-body_num.
t_packing_list-doc_type = ld_format.
t_packing_list-obj_descr = ld_attdescript.
t_packing_list-obj_name = ld_attfilename.
t_packing_list-doc_size = t_packing_list-body_num * 255.
APPEND t_packing_list.
Add the recipients email address
CLEAR t_receivers.
REFRESH t_receivers.
t_receivers-receiver = ld_email.
t_receivers-rec_type = 'C'.
t_receivers-com_type = 'INT'.
t_receivers-express = 'X'.
t_receivers-notif_del = 'X'.
t_receivers-notif_ndel = 'X'.
APPEND t_receivers.
CALL FUNCTION 'SO_DOCUMENT_SEND_API1'
EXPORTING
document_data = w_doc_data
put_in_outbox = 'X'
sender_address = ld_send_adres
sender_address_type = ld_send_adres_type
commit_work = 'X'
IMPORTING
sent_to_all = w_sent_all
TABLES
packing_list = t_packing_list
contents_bin = t_attachment
contents_txt = it_message
receivers = t_receivers
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.
Populate zerror return code
ld_error = sy-subrc.
Populate zreceiver return code
LOOP AT t_receivers.
ld_receiver = t_receivers-retrn_code.
ENDLOOP.
ENDFORM.
&----
*& Form INITIATE_MAIL_EXECUTE_PROGRAM
&----
Instructs mail send program for SAPCONNECT to send email.
----
FORM initiate_mail_execute_program.
WAIT UP TO 2 SECONDS.
SUBMIT rsconn01 WITH mode = 'INT'.
ENDFORM. " INITIATE_MAIL_EXECUTE_PROGRAM