‎2006 Mar 02 10:37 AM
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.
‎2006 Mar 02 10:43 AM
Hi,
USE this FM : RSPO_SX_OUTPUT_TEXTDATA, you can easily send data to spool , rqid parameter gives spool number after spool generation.
Laxman
‎2006 Mar 02 10:46 AM
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.
‎2006 Mar 02 10:48 AM
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
‎2006 Mar 02 10:59 AM
‎2006 Mar 02 5:14 PM
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