Skip to Content
0
Former Member
Jun 27, 2008 at 04:30 AM

Want to Send smartform as pdf attachment with a Email to some mail id

1793 Views

Hi ,

I want to send a smartform as a PDF attachment with a mail to a mail id. And I can send a mail with the PDF attachment.

But I am not able to open the PDF. It is throwing some error (Adobe reader could not open u2018fileu2019 because it is either not a supported file type or because the file has been damaged (for example , it was sent as an email attachment and was not correctly decoded)).

By debugging I come to know that the file which is generating is in some encoding format.

Please help me regard this. This is very urgent.

here is the code,

Main Program :

REPORT Ztest_report.

*--Top Include for Global Data Declarations.

INCLUDE ztest_report_top.

*--Form Include for Form Routines.

INCLUDE ztest_report_form.

  • START-OF-SELECTION.

START-OF-SELECTION.

*--Display data

Perform display_data.

END-OF-SELECTION.

Top declaration :

  • Internal table

DATA : i_otfdata TYPE tsfotf, " Smart Forms: Table OTF

i_tline TYPE TABLE OF tline WITH HEADER LINE,

i_receivers TYPE TABLE OF somlreci1 WITH HEADER LINE,

i_record LIKE solisti1 OCCURS 0 WITH HEADER LINE,

  • Objects to send mail.

i_objpack LIKE sopcklsti1 OCCURS 0 WITH HEADER LINE,

i_objtxt LIKE solisti1 OCCURS 0 WITH HEADER LINE,

i_objbin LIKE solisti1 OCCURS 0 WITH HEADER LINE,

i_reclist LIKE somlreci1 OCCURS 0 WITH HEADER LINE,

  • Work Area declarations

w_mailaddr TYPE ppfdmailad,

w_mailtype TYPE so_escape,

w_mailrecipient TYPE swotobjid,

w_control TYPE ssfctrlop,

w_compop TYPE ssfcompop,

w_return TYPE ssfcrescl,

wa_doc_chng TYPE sodocchgi1,

w_data TYPE sodocchgi1,

wa_buffer TYPE string, "To convert from 132 to 255

wa_objhead TYPE soli_tab,

  • Variables declarations

v_form_name TYPE rs38l_fnam,

v_len_in LIKE sood-objlen,

v_len_out LIKE sood-objlen,

v_len_outn TYPE i,

v_lines_txt TYPE i,

v_lines_bin TYPE i.

  • Selection Screen

SELECTION-SCREEN BEGIN OF BLOCK blk1 WITH FRAME TITLE text-009.

PARAMETER: p_bukrs TYPE bukrs OBLIGATORY, "Company Code

p_belnr TYPE belnr_d OBLIGATORY, "Document No

p_gjahr TYPE gjahr OBLIGATORY, "document type

p_mailid(50) TYPE c OBLIGATORY.

"Mail Id

SELECTION-SCREEN END OF BLOCK blk1.

Form Logic :

FORM display_data.

*Local Variable declaration

DATA: lc_fm TYPE rs38l_fnam, "local variable to store the

l_i_document_output_info TYPE ssfcrespd,

l_i_struc_job_output_info TYPE ssfcrescl,

l_i_struc_job_output_options TYPE ssfcrescl,

i_lines TYPE TABLE OF tline WITH HEADER LINE,

lv_job_output_info TYPE ssfcrescl,

lv_document_output_info TYPE ssfcrespd,

lv_job_output_options TYPE ssfcresop,

lv_bin_filesize LIKE sood-objlen.

  • Determine the smartform name

CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'

EXPORTING

formname = 'ZTEST_SMARTFORM'

IMPORTING

fm_name = lc_fm

EXCEPTIONS

no_form = 1

no_function_module = 2

OTHERS = 3.

IF sy-subrc <> 0.

MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno

WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

ENDIF.

w_control-getotf = 'X'.

w_control-no_dialog = 'X'.

w_control-preview = space.

  • w_control-device = 'MAIL'.

  • Call the smartform and pass the selection screen parameter

CALL FUNCTION lc_fm

EXPORTING

control_parameters = w_control

output_options = w_compop

user_settings = 'X'

t_bukrs = p_bukrs

t_belnr = p_belnr

t_gjahr = p_gjahr

IMPORTING

job_output_info = l_i_struc_job_output_info

EXCEPTIONS

formatting_error = 1

internal_error = 2

send_error = 3

user_canceled = 4

OTHERS = 5.

IF sy-subrc <> 0.

MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno

WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

ENDIF.

  • Moving the Smart Forms: Table OTF into an internal table

i_otfdata[] = l_i_struc_job_output_info-otfdata[].

  • CONVERT TO OTF TO PDF.

CALL FUNCTION 'CONVERT_OTF'

EXPORTING

format = 'PDF'

max_linewidth = 132

IMPORTING

bin_filesize = lv_bin_filesize

TABLES

otf = i_otfdata

lines = i_lines

EXCEPTIONS

err_max_linewidth = 1

err_format = 2

err_conv_not_possible = 3

err_bad_otf = 4

OTHERS = 5.

  • IF sy-batch EQ l_c_no.

  • To directly view the print-preview in PDF format

CALL FUNCTION 'SSFCOMP_PDF_PREVIEW'

EXPORTING

i_otf = i_otfdata

EXCEPTIONS

convert_otf_to_pdf_error = 1

cntl_error = 2

OTHERS = 3.

  • For Sending the PDF file to a Mail ID.

  • LOOP AT i_lines.

  • TRANSLATE i_lines USING '~'.

  • CONCATENATE wa_buffer i_lines INTO wa_buffer.

  • ENDLOOP.

  • TRANSLATE wa_buffer USING '~'.

  • DO.

  • i_record = wa_buffer.

  • APPEND i_record.

  • SHIFT wa_buffer LEFT BY 255 PLACES.

  • IF wa_buffer IS INITIAL.

  • EXIT.

  • ENDIF.

  • ENDDO.

DATA: BEGIN OF zlines OCCURS 0,

tline TYPE char255,

END OF zlines.

*Change the PDF format from 132 to 255.

CALL FUNCTION 'SX_TABLE_LINE_WIDTH_CHANGE'

EXPORTING

transfer_bin = 'X'

TABLES

content_in = i_lines

content_out = zlines

EXCEPTIONS

err_line_width_src_too_long = 1

err_line_width_dst_too_long = 2

err_conv_failed = 3

OTHERS = 4.

IF sy-subrc <> 0.

MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno

WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

ENDIF.

  • Attachment

REFRESH: i_reclist,

i_objtxt,

i_objbin,

i_objpack.

CLEAR wa_objhead.

i_objbin[] = zlines[].

  • Create Message Body Title and Description

i_objtxt = 'test with pdf-Attachment!'.

APPEND i_objtxt.

DESCRIBE TABLE i_objtxt LINES v_lines_txt.

READ TABLE i_objtxt INDEX v_lines_txt.

wa_doc_chng-obj_name = 'smartform'.

wa_doc_chng-expiry_dat = sy-datum + 10.

wa_doc_chng-obj_descr = 'smartform'.

wa_doc_chng-sensitivty = 'F'.

wa_doc_chng-doc_size = v_lines_txt * 255.

  • Main Text

CLEAR i_objpack-transf_bin.

i_objpack-head_start = 1.

i_objpack-head_num = 1.

i_objpack-body_start = 2.

i_objpack-body_num = v_lines_txt.

i_objpack-doc_type = 'RAW'.

APPEND i_objpack.

  • Attachment (pdf-Attachment)

i_objpack-transf_bin = 'X'.

i_objpack-head_start = 1.

i_objpack-head_num = 1.

i_objpack-body_start = 2.

  • I_OBJPACK-DOC_TYPE = 'RAW'.

DESCRIBE TABLE i_objbin LINES v_lines_bin.

READ TABLE i_objbin INDEX v_lines_bin.

i_objpack-doc_size = v_lines_bin * 255 .

i_objpack-body_num = v_lines_bin.

i_objpack-doc_type = 'PDF'.

i_objpack-obj_name = 'smart'.

i_objpack-obj_descr = 'test'.

APPEND i_objpack.

CLEAR i_reclist.

i_reclist-receiver = p_mailid.

i_reclist-rec_type = 'U'.

APPEND i_reclist.

  • Send new document with attachments via RFC

CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'

EXPORTING

document_data = wa_doc_chng

put_in_outbox = 'X'

commit_work = 'X'

TABLES

packing_list = i_objpack

object_header = wa_objhead

contents_bin = i_objbin

contents_txt = i_objtxt

receivers = i_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.

IF sy-subrc <> 0.

WRITE:/ 'Error When Sending the File', sy-subrc.

ELSE.

WRITE:/ 'Mail sent'.

ENDIF.

ENDFORM. " display_data