Skip to Content
avatar image
Former Member

Sending PDF + Excel as Email attachments in Unicode System

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

Add comment
10|10000 characters needed characters exceeded

  • Get RSS Feed

1 Answer

  • avatar image
    Former Member
    Apr 30, 2009 at 05:50 AM

    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.

    Add comment
    10|10000 characters needed characters exceeded

    • Former Member

      Hi,

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

      Thanks

      Ravikanth