Application Development Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 

Sending PDF + Excel as Email attachments in Unicode System

former_member187668
Participant
0 Kudos

Hi,

I have a problem in sending mails having 2 attachments. one with PDF and another Excel. I use SO_DOCUMENT_SEND_API1 by populating contents_bin table. PDF attachment is fine (PDF is created from spool), but excel attachment fails to open correctly. I refered note 1151258, but not successfull.

When I tried using contents_hex as suggested in report SENDLIST, the PDF attachment is corrupted.

The above method works fine in non-unicode system. But not in a unicode system.

In short I want to send two attachments (one PDF by reading spool and second excel by using an interanl table) in a mail. Any ideas & suggestions please?

Thanks,

Ravikanth

2 REPLIES 2

Former Member
0 Kudos

HI,

use below logic..

&----


*& Form BUILD_XLS_DATA_TABLE

&----


  • Build data table for .xls document

----


FORM build_xls_data_table.

*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:

con_tab TYPE c VALUE cl_abap_char_utilities=>horizontal_tab,

con_cret TYPE c VALUE cl_abap_char_utilities=>cr_lf.

CONCATENATE '' '' '' 'PASSPORT AND VISA DETAILS REPORT' ' '

INTO lt_attach SEPARATED BY SPACE.

CONCATENATE con_cret lt_attach INTO lt_attach.

APPEND lt_attach.

CONCATENATE 'Per.Num' 'Sub.Type' 'First.Name' 'Dep.Name'

'Nation ' 'Pass. Num' 'Exp.Date' 'Visa.Num' 'Exp.Date'

INTO lt_attach SEPARATED BY con_tab.

CONCATENATE con_cret lt_attach INTO lt_attach.

APPEND lt_attach.

LOOP AT ot_dependent INTO wa_dependent.

CONCATENATE wa_dependent-pernr

  • wa_dependent-subty

wa_dependent-subtype_text

wa_dependent-vorna

wa_dependent-favor

wa_dependent-fanat

wa_dependent-zzicnum

wa_dependent-zzexpid

wa_dependent-zzvcnum

wa_dependent-zzvexpid

INTO lt_attach SEPARATED BY con_tab.

CONCATENATE con_cret lt_attach INTO lt_attach.

APPEND lt_attach.

ENDLOOP.

ENDFORM. " BUILD_XLS_DATA_TABLE

----


FORM f_send_email_passport_details .

  • Populate message body text

PERFORM populate_email_message_body.

  • Send file by email as .xls speadsheet

PERFORM send_file_as_email_attachment

TABLES lt_message

lt_attach

USING p_email

'Passport and Visa .xls document attachment'

'XLS'

'filename'

' '

' '

' '

CHANGING gd_error

gd_reciever.

  • Instructs mail send program for SAPCONNECT to send email(rsconn01)

PERFORM initiate_mail_execute_program.

ENDFORM. " F_SEND_EMAIL_PASSPORT_DETAILS

----


FORM f_send_email_passport_details .

  • Populate message body text

PERFORM populate_email_message_body.

  • Send file by email as .xls speadsheet

PERFORM send_file_as_email_attachment

TABLES lt_message

lt_attach

USING p_email

'Passport and Visa .xls document attachment'

'XLS'

'filename'

' '

' '

' '

CHANGING gd_error

gd_reciever.

  • Instructs mail send program for SAPCONNECT to send email(rsconn01)

PERFORM initiate_mail_execute_program.

ENDFORM. " F_SEND_EMAIL_PASSPORT_DETAILS

&----


*

*& 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 lt_attach INDEX w_cnt.

w_doc_data-doc_size =

( w_cnt - 1 ) * 255 + STRLEN( lt_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 lt_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 = lt_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. "send_file_as_email_attachment

&----


*& 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

Regards,

Naresh Chava.

0 Kudos

Hi,

I used BCS interface itself and coded as in standard report BCS_EXAMPLE_7. It worked.

Thanks

Ravikanth