Skip to Content
0
Former Member
Jun 16, 2009 at 02:58 PM

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

17 Views

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