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: 

Error while opening the Pdf Attachment at the time sending mail ..

Former Member
0 Kudos

Hi Frn's ,

i am sending a mail with pdf attachment ... but the pdf is not opening ...it is giving error "There was and error opening this document . This file can not be open because it has no page ."

Please resolve the problem ...below is the code pasted ..

REPORT ZPRI_TEST_LDB.

DATA: it_pdf LIKE tline OCCURS 0 WITH HEADER LINE .

  • Spool to PDF conversions

DATA: gd_spool_nr LIKE tsp01-rqident,

gd_destination LIKE rlgrap-filename,

gd_bytecount LIKE tst01-dsize,

gd_buffer TYPE string.

DATA: w_recsize TYPE i.

DATA: gd_recsize TYPE i.

DATA: gd_subject LIKE sodocchgi1-obj_descr,

it_mess_bod LIKE solisti1 OCCURS 0 WITH HEADER LINE,

it_mess_att LIKE solisti1 OCCURS 0 WITH HEADER LINE,

gd_sender_type LIKE soextreci1-adr_typ,

gd_attachment_desc TYPE so_obj_nam,

gd_attachment_name TYPE so_obj_des.

data: gd_error TYPE sy-subrc,

gd_reciever TYPE sy-subrc.

PARAMETER: p_email1 LIKE somlreci1-receiver

DEFAULT 'abc,

p_sender LIKE somlreci1-receiver

DEFAULT 'abc'.

perform write_output .

perform create_pdf .

PERFORM process_email .

FORM WRITE_OUTPUT .

write:'Listed below are the employees in your area who are due a Performance Appraisal'.

write:'during the month of May 2009 .A performance appraisal form can be found on-line'.

write: 'in the MUD template section .The Performance Appraisal is to be completed and' .

write:'discussed with the employee by the immediate supervisor .Signed forms should be '.

write: 'returned to the Human Resource Department by May 31,2009 .'.

skip 2 .

write: 'employee name' .

write: 'Job Date' .

write: 'Date of last appraisal' .

ENDFORM. " WRITE_OUTPUT

FORM CREATE_PDF .

DATA: spoolno LIKE tsp01-rqident.

DATA : p_repid LIKE sy-repid .

DATA: v_len TYPE i , v_len1 TYPE i .

DATA: v_temp(8) TYPE c .

DATA: p_uname LIKE sy-uname .

DATA: it_tsp01 TYPE STANDARD TABLE OF tsp01 WITH HEADER LINE .

  • DATA: it_pdf LIKE tline OCCURS 0 WITH HEADER LINE .

TABLES: tsp01.

data: var type c .

*-- STRUCTURES

DATA:

lc_rq2name LIKE tsp01-rq2name.

DATA:

mstr_print_parms LIKE pri_params,

mc_valid(1) TYPE c,

mi_bytecount TYPE i,

mi_length TYPE i,

mi_rqident LIKE tsp01-rqident.

*-- INTERNAL TABLES

DATA:

mtab_pdf LIKE tline OCCURS 0 WITH HEADER LINE,

mc_filename LIKE rlgrap-filename.

*-- SELECTION SCREEN

DATA:

p_linsz LIKE sy-linsz VALUE 132, " Line size

p_paart LIKE sy-paart VALUE 'X_65_132'. " Paper Format

*-- Setup the Print Parmaters

CALL FUNCTION 'GET_PRINT_PARAMETERS'

EXPORTING

authority = space

copies = '1'

cover_page = space

data_set = space

department = space

destination = space

expiration = '1'

immediately = space

new_list_id = 'X'

no_dialog = 'X'

user = sy-uname

IMPORTING

out_parameters = mstr_print_parms

valid = mc_valid

EXCEPTIONS

archive_info_not_found = 1

invalid_print_params = 2

invalid_archive_params = 3

OTHERS = 4.

*-- Explicitly set line width, and output format so that

*-- the PDF conversion comes out OK

mstr_print_parms-linsz = p_linsz.

mstr_print_parms-paart = p_paart.

  • importing variable value set at first time to restrict the infinite loop .

IMPORT var FROM MEMORY ID 'abc' .

var = var + 1 .

p_uname = sy-uname .

p_repid = sy-repid .

*checking variable to restricted scecond time exction of this block of code

IF var = 1 .

  • v_memid = 1 .

EXPORT var TO MEMORY ID 'abc' .

  • start ----p3d(02/13/2009)

  • EXPORT it_pernr it_pernr_quali v_memid it_pernr_status

  • p_file p_file1 rb_pres rb_app rb2 TO MEMORY ID 'bcd' .

  • EXPORT it_pernr it_pernr_quali v_memid it_pernr_status it_notqualified

  • p_file p_file1 rb_pres rb_app rb1 rb2 rb3 rb4 TO MEMORY ID 'bcd' .

  • EXPORT it_pernr it_pernr_quali v_memid it_pernr_status it_notqualified

  • p_file p_file1 rb_pres rb_app rb3 rb4 TO MEMORY ID 'bcd' .

  • end ----p3d(02/13/2009)

  • submitting the spool request

SUBMIT (p_repid) TO SAP-SPOOL

SPOOL PARAMETERS mstr_print_parms

WITHOUT SPOOL DYNPRO

AND RETURN.

ENDIF.

FREE MEMORY ID 'abc'.

FREE MEMORY ID 'bcd'.

*Calculating the lenth of report name

v_len = STRLEN( p_repid ) .

*consutrucing the database variable rq2name to search the spool request

IF v_len >= 9 .

CONCATENATE p_repid+0(9)

p_uname+0(3) INTO lc_rq2name .

ELSE.

v_len1 = 9 - v_len .

DO v_len1 TIMES .

CONCATENATE v_temp '_' INTO v_temp .

ENDDO.

CONCATENATE p_repid v_temp

p_uname INTO lc_rq2name .

ENDIF.

*selecting the spool request using the above consructed varibale

SELECT * FROM tsp01 INTO TABLE it_tsp01

WHERE rq2name = lc_rq2name .

*sorting the interbla table

SORT it_tsp01 BY rqcretime DESCENDING .

*reading the first spool request

READ TABLE it_tsp01 INDEX 1.

*converting the spool request into pdf

CALL FUNCTION 'CONVERT_ABAPSPOOLJOB_2_PDF'

EXPORTING

src_spoolid = it_tsp01-rqident

  • dst_device = 'LP01'

TABLES

pdf = it_pdf

EXCEPTIONS

err_no_abap_spooljob = 1

err_no_spooljob = 2

err_no_permission = 3

err_conv_not_possible = 4

err_bad_destdevice = 5

user_cancelled = 6

err_spoolerror = 7

err_temseerror = 8

err_btcjob_open_failed = 9

err_btcjob_submit_failed = 10

err_btcjob_close_failed = 11

OTHERS = 12.

IF sy-subrc <> 0.

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

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

ENDIF.

************************************************************

CHECK sy-subrc = 0.

  • Transfer the 132-long strings to 255-long strings

LOOP AT it_pdf.

TRANSLATE it_pdf USING ' ~'.

CONCATENATE gd_buffer it_pdf INTO gd_buffer.

ENDLOOP.

TRANSLATE gd_buffer USING '~ '.

DO.

it_mess_att = gd_buffer.

APPEND it_mess_att.

SHIFT gd_buffer LEFT BY 255 PLACES.

IF gd_buffer IS INITIAL.

EXIT.

ENDIF.

ENDDO.

ENDFORM. " CREATE_PDF

FORM SEND_eMAIL using p_email .

REFRESH it_mess_bod.

  • Default subject matter

gd_subject = 'Subject'.

gd_attachment_desc = 'Attachname'.

  • CONCATENATE 'attach_name' ' ' INTO gd_attachment_name.

it_mess_bod = 'Message Body text, line 1'.

APPEND it_mess_bod.

it_mess_bod = 'Message Body text, line 2...'.

APPEND it_mess_bod.

  • If no sender specified - default blank

IF p_sender EQ space.

gd_sender_type = space.

ELSE.

gd_sender_type = 'INT'.

ENDIF.

  • Send file by email as .xls speadsheet

PERFORM send_file_as_email_attachment

tables it_mess_bod

it_mess_att

using p_email

'Example .xls documnet attachment'

'PDF'

gd_attachment_name

gd_attachment_desc

p_sender

gd_sender_type

changing gd_error

gd_reciever.

ENDFORM. " SEND_MAIL

FORM process_email.

DESCRIBE TABLE it_mess_att LINES gd_recsize.

CHECK gd_recsize > 0.

PERFORM send_email using p_email1 . .

  • perform send_email using p_email2.

ENDFORM.

FORM send_file_as_email_attachment tables it_message

it_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.

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.

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.

Thanks and Regards ..

Priyank

2 REPLIES 2

Former Member
0 Kudos

kindly drop the part of code u are getting error with ....

0 Kudos

hi this is the part of code ...

PERFORM process_email .

CHECK sy-subrc = 0.

  • Transfer the 132-long strings to 255-long strings

LOOP AT it_pdf.

TRANSLATE it_pdf USING ' ~'.

CONCATENATE gd_buffer it_pdf INTO gd_buffer.

ENDLOOP.

TRANSLATE gd_buffer USING '~ '.

DO.

it_mess_att = gd_buffer.

APPEND it_mess_att.

SHIFT gd_buffer LEFT BY 255 PLACES.

IF gd_buffer IS INITIAL.

EXIT.

ENDIF.

ENDDO.

ENDFORM. " CREATE_PDF

FORM process_email.

DESCRIBE TABLE it_mess_att LINES gd_recsize.

CHECK gd_recsize > 0.

PERFORM send_email using p_email1 . .

  • perform send_email using p_email2.

ENDFORM.

FORM SEND_eMAIL using p_email .

REFRESH it_mess_bod.

  • Default subject matter

gd_subject = 'Subject'.

gd_attachment_desc = 'Attachname'.

  • CONCATENATE 'attach_name' ' ' INTO gd_attachment_name.

it_mess_bod = 'Message Body text, line 1'.

APPEND it_mess_bod.

it_mess_bod = 'Message Body text, line 2...'.

APPEND it_mess_bod.

  • If no sender specified - default blank

IF p_sender EQ space.

gd_sender_type = space.

ELSE.

gd_sender_type = 'INT'.

ENDIF.

  • Send file by email as .xls speadsheet

PERFORM send_file_as_email_attachment

tables it_mess_bod

it_mess_att

using p_email

'Example .xls documnet attachment'

'PDF'

gd_attachment_name

gd_attachment_desc

p_sender

gd_sender_type

changing gd_error

gd_reciever.

ENDFORM. " SEND_MAIL

FORM send_file_as_email_attachment tables it_message

it_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.

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.

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.