09-14-2008 3:23 AM
Hi All,
In the program as below , i am getting the output and i am able to send excel as attachment , but when
downloaded to excel , i am getting all the records in a single line and also first record in comming in a single cell not like each field in single colum or cell.
report zsgx.
tables: ekko.
parameters: p_email type somlreci1-receiver
default 'mailid.
types: begin of t_ekpo,
ebeln type ekpo-ebeln,
ebelp type ekpo-ebelp,
aedat type ekpo-aedat,
matnr type ekpo-matnr,
end of t_ekpo.
data: it_ekpo type standard table of t_ekpo initial size 0,
wa_ekpo type t_ekpo.
types: begin of t_charekpo,
ebeln(10) type c,
ebelp(5) type c,
aedat(8) type c,
matnr(18) type c,
end of t_charekpo.
data: wa_charekpo type t_charekpo.
data: it_message type standard table of solisti1 initial size 0
with header line.
data: it_attach type standard table of solisti1 initial size 0
with header line.
data: t_packing_list like sopcklsti1 occurs 0 with header line,
t_contents like solisti1 occurs 0 with header line,
t_receivers like somlreci1 occurs 0 with header line,
t_attachment like solisti1 occurs 0 with header line,
t_object_header like solisti1 occurs 0 with header line,
w_cnt type i,
w_sent_all(1) type c,
w_doc_data like sodocchgi1,
gd_error type sy-subrc,
gd_reciever type sy-subrc.
**************************************************************************
*START_OF_SELECTION
start-of-selection.
*Retrieve sample data from table ekpo
perform data_retrieval.
***
*Populate table with detaisl to be entered into .xls file
perform build_xls_data_table.
**************************************************************************
*END-OF-SELECTION
end-of-selection.
***
*Populate message body text
perform populate_email_message_body.
***
*Send file by email as .xls speadsheet
perform send_file_as_email_attachment
tables it_message
it_attach
using p_email
'Example .xls documnet attachment'
'XLS'
'filename'
' '
' '
' '
changing gd_error
gd_reciever.
***
*Instructs mail send program for SAPCONNECT to send email(rsconn01)
perform initiate_mail_execute_program.
*&----
**& Form DATA_RETRIEVAL
*&----
***
***
*Retrieve data form EKPO table and populate itab it_ekko
*----
form data_retrieval.
select ebeln ebelp aedat matnr
up to 10 rows
from ekpo
into table it_ekpo.
endform. " DATA_RETRIEVAL
***
*&----
**& Form BUILD_XLS_DATA_TABLE
**&----
****
****
*Build data table for .xls document
*----
form build_xls_data_table.
data: ld_store(50) type c. "Leading zeros
constants: con_cret(5) type c value '0D', "OK for non Unicode
con_tab(5) type c value '09'. "OK for non Unicode
*If you have Unicode check active in program attributes thnen you will
*need to declare constants as follows
*class cl_abap_char_utilities definition load.
*constants:
*data :con_tab type c value cl_abap_char_utilities=>HORIZONTAL_TAB,
*con_cret type c value cl_abap_char_utilities=>CR_LF.
concatenate 'EBELN' 'EBELP' 'AEDAT' 'MATNR' into it_attach separated by con_tab.
concatenate con_cret it_attach into it_attach.
append it_attach.
loop at it_ekpo into wa_charekpo.
*Modification to retain leading zeros
*inserts code for excell REPLACE command into ld_store
*=REPLACE("00100",1,5,"00100")
*concatenate '=REPLACE("' wa_charekpo-ebelp '",1,5,"'
*wa_charekpo-ebelp '")' into ld_store .
***
*concatenate ld_store into .xls file instead of actual value(ebelp)
concatenate wa_charekpo-ebeln ld_store wa_charekpo-aedat wa_charekpo-matnr into it_attach separated by con_tab.
concatenate con_cret it_attach into it_attach.
append it_attach.
endloop.
endform. " BUILD_XLS_DATA_TABLE
*&----
**& 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_attdescription type so_obj_nam ,
ld_attfilename type so_obj_des ,
ld_sender_address like soextreci1-receiver,
ld_sender_address_type like soextreci1-adr_typ,
ld_receiver like sy-subrc.
ld_email = p_email.
ld_mtitle = p_mtitle.
ld_format = p_format.
ld_attdescription = p_attdescription.
ld_attfilename = p_filename.
ld_sender_address = p_sender_address.
ld_sender_address_type = p_sender_addres_type.
*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[] = it_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_attdescription.
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 = 'U'.
t_receivers-com_type = 'INT'.
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_sender_address
sender_address_type = ld_sender_address_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'
with output = 'X'
and return.
endform. " INITIATE_MAIL_EXECUTE_PROGRAM
*&----
**& Form POPULATE_EMAIL_MESSAGE_BODY
*&----
***
***
*Populate message body text
*----
form populate_email_message_body.
refresh it_message.
it_message = 'Please find attached a list test ekpo records'.
append it_message.
endform. " POPULATE_EMAIL_MESSAGE_BODY
Regards,
subba
09-14-2008 7:35 AM
Dear,
You have to convert char data to binary (possible uses can be the function module SO_NEW_DOCUMENT_ATT_SEND_API1 where you want to send an internal table or some data in binary format) we can use the following logic.
1: Get the system code page
2: create instance of cl_abap_conv_uc_number
3: use a method from this class called convert_char_stream to convert to binary.
More details u check the below blog which is very useful:
https://www.sdn.sap.com/irj/sdn/wiki?path=/display/snippets/abap-%2bdata%2bconversion%2bfrom%2bchar%2bto%2bbinary
Also refer below threads;
<a class="jive_macro jive_macro_thread" href="" __jive_macro_name="thread" modifiedtitle="true" __default_attr="392122"></a>
<a class="jive_macro jive_macro_thread" href="" __jive_macro_name="thread" modifiedtitle="true" __default_attr="720669"></a>
<a class="jive_macro jive_macro_thread" href="" __jive_macro_name="thread" modifiedtitle="true" __default_attr="445183"></a>
<a class="jive_macro jive_macro_thread" href="" __jive_macro_name="thread" modifiedtitle="true" __default_attr="199562"></a>
Regards,
09-14-2008 7:35 AM
Dear,
You have to convert char data to binary (possible uses can be the function module SO_NEW_DOCUMENT_ATT_SEND_API1 where you want to send an internal table or some data in binary format) we can use the following logic.
1: Get the system code page
2: create instance of cl_abap_conv_uc_number
3: use a method from this class called convert_char_stream to convert to binary.
More details u check the below blog which is very useful:
https://www.sdn.sap.com/irj/sdn/wiki?path=/display/snippets/abap-%2bdata%2bconversion%2bfrom%2bchar%2bto%2bbinary
Also refer below threads;
<a class="jive_macro jive_macro_thread" href="" __jive_macro_name="thread" modifiedtitle="true" __default_attr="392122"></a>
<a class="jive_macro jive_macro_thread" href="" __jive_macro_name="thread" modifiedtitle="true" __default_attr="720669"></a>
<a class="jive_macro jive_macro_thread" href="" __jive_macro_name="thread" modifiedtitle="true" __default_attr="445183"></a>
<a class="jive_macro jive_macro_thread" href="" __jive_macro_name="thread" modifiedtitle="true" __default_attr="199562"></a>
Regards,
09-14-2008 9:22 AM
Hi chandra,
i am not familiar with classes , object oriented programming as i copied this code from sdn.
if you can send some piece of code it will be helpful.
Regards
subba
09-14-2008 9:27 AM
09-14-2008 10:23 AM
Hi Chandra,
Thanks for your reply actually i have commented the code and i de commented it works fine,
my problem is resolved.
class cl_abap_char_utilities definition load.
*constants:
*data :con_tab type c value cl_abap_char_utilities=>HORIZONTAL_TAB,
*con_cret type c value cl_abap_char_utilities=>CR_LF.
concatenate 'EBELN' 'EBELP' 'AEDAT' 'MATNR' into it_attach separated by con_tab.
concatenate con_cret it_attach into it_attach.
Regards
subba