Application Development and Automation 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: 
Read only

Need Help

Former Member
0 Likes
798

Hi,

My requirement is to send a mail with attachment (say .txt/.doc) it has to be convert into pdf file.

When i execute this it giving an error message like "Spool request 0 does not exist".

This is my code :

DATA : itab LIKE tline OCCURS 0 WITH HEADER LINE.

data : no_lines like tline occurs 0 with header line.

DATA : filename TYPE string.

data : path type PCFILE-PATH.

data : extension(5) type c.

data : name(100) type c.

data : spoolid like tsp01-rqident.

data : it_mess_att LIKE solisti1 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.

        • End of data for PDF Conversions

  • Job Runtime Parameters

DATA: gd_eventid LIKE tbtcm-eventid,

gd_eventparm LIKE tbtcm-eventparm,

gd_external_program_active LIKE tbtcm-xpgactive,

gd_jobcount LIKE tbtcm-jobcount,

gd_jobname LIKE tbtcm-jobname,

gd_stepcount LIKE tbtcm-stepcount,

gd_error TYPE sy-subrc,

gd_reciever TYPE sy-subrc.

    • end of Runtime parameters.

  • Binary store for PDF

DATA: BEGIN OF it_pdf_output OCCURS 0.

INCLUDE STRUCTURE tline.

DATA: END OF it_pdf_output.

DATA: w_recsize TYPE i,

w_spool_nr like sy-spono.

TYPES: BEGIN OF t_tbtcp.

INCLUDE STRUCTURE tbtcp.

TYPES: END OF t_tbtcp.

DATA: it_tbtcp TYPE STANDARD TABLE OF t_tbtcp INITIAL SIZE 0,

wa_tbtcp TYPE t_tbtcp.

data : pdf_lines like tline occurs 0 with header line.

PARAMETERS : receiver TYPE somlreci1-receiver lower case.

PARAMETERS : p_file LIKE rlgrap-filename OBLIGATORY.

DATA: docdata LIKE sodocchgi1,

objpack LIKE sopcklsti1 OCCURS 1 WITH HEADER LINE,

objhead LIKE solisti1 OCCURS 1 WITH HEADER LINE,

objtxt LIKE solisti1 OCCURS 10 WITH HEADER LINE,

objbin LIKE solisti1 OCCURS 10 WITH HEADER LINE,

objhex LIKE solix OCCURS 10 WITH HEADER LINE,

reclist LIKE somlreci1 OCCURS 1 WITH HEADER LINE.

CONSTANTS: c_dev LIKE sy-sysid VALUE 'DEV',

c_no(1) TYPE c VALUE ' ',

c_device(4) TYPE c VALUE 'LOCL'.

DATA: tab_lines TYPE i,

doc_size TYPE i,

att_type LIKE soodk-objtp.

DATA: listobject LIKE abaplist OCCURS 1 WITH HEADER LINE.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.

CLEAR p_file.

CALL FUNCTION 'F4_FILENAME'

IMPORTING

file_name = p_file.

START-OF-SELECTION.

PERFORM file_attachment USING 'Tst' 'Attachment'.

PERFORM mail_receiver USING receiver 'U'.

PERFORM upload_file.

PERFORM put_data TABLES itab objbin.

PERFORM imported_object_prepare USING 'X' extension name.

PERFORM get_job_details.

perform get_spool_request.

PERFORM convert_spool_to_pdf.

PERFORM mail_send.

  • EXPORT gd_spool_nr TO MEMORY ID 'SPOOLTOPDF'.

*

  • submit ZTESTFOREGROUND

  • with p_online = 'X'

  • to sap-spool

  • spool parameters %_print

    • archive parameters %_print

  • without spool dynpro

  • and return.

*----


SUBMIT rsconn01

WITH mode EQ 'INT'

AND RETURN.

if sy-subrc eq 0.

write : / 'Successfully sent to the recipient', receiver.

else.

write : / 'Not sent'.

endif.

&----


*& Form upload_file

&----


  • text

----


FORM upload_file.

filename = p_file.

CALL FUNCTION 'GUI_UPLOAD'

EXPORTING

FILENAME = filename

FILETYPE = 'BIN'

TABLES

DATA_TAB = itab.

path = filename.

CALL FUNCTION 'PC_SPLIT_COMPLETE_FILENAME'

EXPORTING

COMPLETE_FILENAME = path

  • CHECK_DOS_FORMAT =

IMPORTING

  • DRIVE =

EXTENSION = extension

NAME = name

  • NAME_WITH_EXT =

  • PATH =

EXCEPTIONS

INVALID_DRIVE = 1

INVALID_EXTENSION = 2

INVALID_NAME = 3

INVALID_PATH = 4

OTHERS = 5

.

ENDFORM. "upload_file

&----


*& Form file_attachment

&----


  • text

----


  • -->OBJNAME text

  • -->OBJDESC text

----


FORM file_attachment USING objname objdesc.

clear docdata.

docdata-obj_name = objname.

docdata-obj_descr = objdesc.

ENDFORM. "file_attachment

&----


*& Form mail_receiver

&----


  • text

----


  • -->PRECEIVER text

  • -->PREC_TYPE text

----


FORM mail_receiver USING preceiver prec_type.

CLEAR reclist.

reclist-receiver = preceiver.

reclist-rec_type = prec_type.

APPEND reclist.

ENDFORM. "mail_receiver

&----


*& Form imported_object_prepare

&----


  • text

----


  • -->BYPASSMEMORY text

  • -->WHATATT_TYPE text

  • -->WHATNAME text

----


FORM imported_object_prepare USING bypassmemory whatatt_type whatname.

IF bypassmemory = ''.

*----


Fetch List From Memory

CALL FUNCTION 'LIST_FROM_MEMORY'

TABLES

listobject = listobject

EXCEPTIONS

OTHERS = 1.

IF sy-subrc <> 0.

MESSAGE ID '61' TYPE 'E' NUMBER '731'

WITH 'LIST_FROM_MEMORY'.

ENDIF.

CALL FUNCTION 'TABLE_COMPRESS'

  • IMPORTING

  • COMPRESSED_SIZE =

TABLES

in = listobject

out = objbin

EXCEPTIONS

OTHERS = 1

.

IF sy-subrc <> 0.

MESSAGE ID '61' TYPE 'E' NUMBER '731'

WITH 'TABLE_COMPRESS'.

ENDIF.

ENDIF.

DESCRIBE TABLE objtxt LINES tab_lines.

READ TABLE objtxt INDEX tab_lines.

docdata-doc_size = ( tab_lines - 1 ) * 255 + STRLEN( objtxt ).

CLEAR objpack-transf_bin.

objpack-head_start = 1.

objpack-head_num = 0.

objpack-body_start = 1.

objpack-body_num = tab_lines.

objpack-doc_type = 'txt'.

APPEND objpack.

att_type = whatatt_type..

DESCRIBE TABLE objbin LINES tab_lines.

READ TABLE objbin INDEX tab_lines.

objpack-doc_size = ( tab_lines - 1 ) * 255 + STRLEN( objbin ).

objpack-transf_bin = 'X'.

objpack-head_start = 1.

objpack-head_num = 0.

objpack-body_start = 1.

objpack-body_num = tab_lines.

objpack-doc_type = att_type.

objpack-obj_name = 'ATTACHMENT'.

objpack-obj_descr = whatname.

APPEND objpack.

ENDFORM. "imported_object_prepare

&----


*& Form mail_send

&----


  • text

----


FORM mail_send.

CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'

EXPORTING

document_data = docdata

put_in_outbox = 'X'

commit_work = 'X'

  • IMPORTING

  • SENT_TO_ALL =

  • NEW_OBJECT_ID =

TABLES

packing_list = objpack

object_header = objhead

contents_bin = objbin

contents_txt = objtxt

  • CONTENTS_HEX = objhex

  • OBJECT_PARA =

  • object_parb =

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

.

ENDFORM. "mail_send

&----


*& Form put_data

&----


  • text

----


  • -->TEXTLINES text

  • -->OUTBIN text

----


FORM put_data TABLES textlines STRUCTURE tline outbin STRUCTURE solisti1.

DATA : pos TYPE i.

DATA : len TYPE i.

LOOP AT textlines.

pos = 255 - len.

IF pos > 134.

pos = 134.

ENDIF.

outbin+len = textlines(pos).

len = len + pos.

IF len = 255. "length of out (contents_bin)

APPEND outbin.

CLEAR: outbin, len.

IF pos < 134.

outbin = textlines+pos.

len = 134 - pos.

ENDIF.

ENDIF.

ENDLOOP.

IF len > 0.

APPEND outbin.

ENDIF.

*PERFORM CONVERT_TO_PDF.

ENDFORM. "put_data

&----


*& Form convert_spool_to_pdf

&----


  • text

----


FORM convert_spool_to_pdf.

CALL FUNCTION 'CONVERT_ABAPSPOOLJOB_2_PDF'

EXPORTING

src_spoolid = gd_spool_nr

no_dialog = c_no

dst_device = c_device

IMPORTING

pdf_bytecount = gd_bytecount

TABLES

pdf = it_pdf_output

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.

CHECK sy-subrc = 0.

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

LOOP AT it_pdf_output.

TRANSLATE it_pdf_output USING ' ~'.

CONCATENATE gd_buffer it_pdf_output 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. "convert_spool_to_pdf

&----


*& Form get_spool_request

&----


  • text

----


form get_spool_request.

CHECK NOT ( gd_jobname IS INITIAL ).

CHECK NOT ( gd_jobcount IS INITIAL ).

SELECT * FROM tbtcp

INTO TABLE it_tbtcp

WHERE jobname = gd_jobname

AND jobcount = gd_jobcount

AND stepcount = gd_stepcount

AND listident <> '0000000000'

ORDER BY jobname

jobcount

stepcount.

READ TABLE it_tbtcp INTO wa_tbtcp INDEX 1.

IF sy-subrc = 0.

message s004(zdd) with gd_spool_nr.

gd_spool_nr = wa_tbtcp-listident.

MESSAGE s004(zdd) WITH gd_spool_nr.

ELSE.

MESSAGE s005(zdd).

ENDIF.

endform. "get_spool_request

&----


*& Form get_job_details

&----


  • text

----


FORM get_job_details.

  • Get current job details

CALL FUNCTION 'GET_JOB_RUNTIME_INFO'

IMPORTING

eventid = gd_eventid

eventparm = gd_eventparm

external_program_active = gd_external_program_active

jobcount = gd_jobcount

jobname = gd_jobname

stepcount = gd_stepcount

EXCEPTIONS

no_runtime_info = 1

OTHERS = 2.

ENDFORM. "get_job_details

Please help me.

Thanks,

Pavan.

5 REPLIES 5
Read only

Laxmana_Appana_
Active Contributor
0 Likes
733

Hi,

USE this FM : RSPO_SX_OUTPUT_TEXTDATA, you can easily send data to spool , rqid parameter gives spool number after spool generation.

Laxman

Read only

Former Member
0 Likes
733

Hi pavan,

1. My requirement is to send a mail with attachment (say .txt/.doc) it has to be convert into pdf file

If we attach some .txt file, .doc file

, then it will be sent as it is.

The system CANNOT convert it into .pdf or anything else.

Its RAW.

2. ABAP List

Sapscript / smartforms.

Such kind of things, If attached in email,

can be converted into .pdf

using the scot settings, automatically !

regards,

amit m.

Read only

Former Member
0 Likes
733

Hi Pavan,

SUBMIT rsconn01

WITH mode EQ 'INT'

AND RETURN.

there is no spool genrated.

you need use option to sap-spool

print parameters etc..

Regards

vijay

Read only

Former Member
0 Likes
733

Hi,

Is there any function module?

Thanks,

Pavan.

Read only

Former Member
0 Likes
733

Hi,

Since the spool is not generated, it is giving error.

see the sample code to create the spool request...

CALL FUNCTION 'GET_PRINT_PARAMETERS'

EXPORTING DESTINATION = 'LOCL'

COPIES = COUNT

LIST_NAME = 'MYSPOOL'

LIST_TEXT = 'SUBMIT ... TO SAP-SPOOL'

IMMEDIATELY = ' '

RELEASE = ' '

NEW_LIST_ID = 'X'

EXPIRATION = DAYS

LINE_SIZE = 170

LINE_COUNT = 58

LAYOUT = 'X_58_170'

SAP_COVER_PAGE = ' '

COVER_PAGE = ' '

RECEIVER = 'SAP*'

DEPARTMENT = 'System'

SAP_OBJECT = 'RS'

AR_OBJECT = 'TEST'

ARCHIVE_ID = 'XX'

ARCHIVE_INFO = 'III'

ARCHIVE_TEXT = 'Description'

NO_DIALOG = 'X'

IMPORTING OUT_PARAMETERS = PARAMS

OUT_ARCHIVE_PARAMETERS = ARPARAMS

VALID = VALID.

IF VALID <> SPACE.

SUBMIT XYZ USING SELECTION-SET VARIANT

TO SAP-SPOOL

SPOOL PARAMETERS PARAMS

ARCHIVE PARAMETERS ARPARAMS

WITHOUT SPOOL DYNPRO

AND RETURN.

ENDIF.

Note: XYZ is the name of the program to be called.

once the Spool is generted, call the perform to convert that into pdf and send it to mail...

if this suits, reward with points.

Regards

Satish