Spool to pdf to email
hi gurus
I have used function module CONVERT_ABAPSPOOLJOB_2_PDF for converting spool to pdf format , now i need to send email using methods and class ( not with FM SO_DOCUMENT_SEND_API1 ) .
iam useing
TRY.
-------- create persistent send request ------------------------
send_request = cl_bcs=>create_persistent( ).
CALL METHOD document->add_attachment
EXPORTING i_attachment_type = 'RAW'
i_attachment_subject = 'My attachment'
<b> i_att_content_hex = gti_contents_hex.</b>
CALL METHOD send_request->set_document( document ).
sender = cl_sapuser_bcs=>create( sy-uname ).
CALL METHOD send_request->set_sender
EXPORTING
i_sender = sender.
recipient = cl_cam_address_bcs=>create_internet_address(
'[email protected]' ).
add recipient with its respective attributes to send request
CALL METHOD send_request->add_recipient
EXPORTING
i_recipient = recipient
i_express = 'X'.
CALL METHOD send_request->set_send_immediately( 'X' ).
---------- send document ---------------------------------------
CALL METHOD send_request->send(
EXPORTING
i_with_error_screen = 'X'
RECEIVING
result = sent_to_all ).
IF sent_to_all = 'X'.
WRITE text-003.
ENDIF.
COMMIT WORK.
CATCH cx_bcs INTO bcs_exception.
WRITE: 'Fehler aufgetreten.'(001).
WRITE: 'Fehlertyp:'(002), bcs_exception->error_type.
EXIT.
ENDTRY.
In the above code iam unable to convert pdf( out put of FM) out to gti_contents_hex.
rewarded with points
Hi,
plz check the below link..
http://www.sapdevelopment.co.uk/reporting/rep_spooltopdf.htm
reward if helpful.
Regards,
Nagaraj
Similar Messages
-
Hi Gurus
I have to send output of report as pdf attachment of the email.
I have used Fm CONVERT_ABAPSPOOLJOB_2_PDF to convet spool request to pdf format.
and SO_DOCUMENT_SEND_API1 Fm to send email. Its working Fine.
But Now i need to send email by using Methods,My code is as below
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: it_pdf_output2 type SOLIX_TAB occurs 0.
DATA: BEGIN OF it_pdf_output OCCURS 0.
INCLUDE STRUCTURE tline.
DATA: END OF it_pdf_output.
DATA:
*it_mess_att LIKE solisti1 OCCURS 0 WITH HEADER LINE,
it_mess_att_wa TYPE solisti1,
gti_documents TYPE zsti_email_documents,
g_documents_wa TYPE LINE OF zsti_email_documents,
gti_recipients TYPE zsti_email_recipients,
g_recipients_wa TYPE LINE OF zsti_email_recipients,
gti_contents_hex TYPE solix_tab,
gti_contents_text TYPE soli_tab.
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.
<b>it_pdf_output is to be converted into gti_contents_hex.</b>
LOOP AT it_pdf_output INTO mess_att_wa.
MOVE mess_att_wa-line TO contents_hex_wa-line.
APPEND contents_hex_wa TO gti_contents_hex.
ENDLOOP.
g_documents_wa-type = 'RAW'.
g_documents_wa-subject = 'KUMAR TEST '.
g_documents_wa-content_hex = xcontent_hex.
APPEND g_documents_wa TO gti_documents.
DATA:email TYPE so_name.
email = '[email protected]'.
g_recipients_wa-uname = 'KUMAR'.
g_recipients_wa-c_address = email.
APPEND g_recipients_wa TO gti_recipients.
TRY.
-------- create persistent send request ------------------------
send_request = cl_bcs=>create_persistent( ).
APPEND 'hello world' TO text.
APPEND '20/09/2007' TO text.
document = cl_document_bcs=>create_document(
i_type = 'RAW'
i_text = text
i_length = '12'
i_subject = 'subject' ).
CALL METHOD document->add_attachment
EXPORTING
i_attachment_type = 'PDF'
i_attachment_subject = gd_subject
<b>i_att_content_hex = gti_contents_hex.</b>
add document to send request
CALL METHOD send_request->set_document( document ).
--------- set sender -------------------------------------------
note: this is necessary only if you want to set the sender
different from actual user (SY-UNAME). Otherwise sender is
set automatically with actual user.
sender = cl_sapuser_bcs=>create( sy-uname ).
CALL METHOD send_request->set_sender
EXPORTING
i_sender = sender.
--------- add recipient (e-mail address) -----------------------
create recipient - please replace e-mail address !!!
recipient = cl_cam_address_bcs=>create_internet_address( email ).
add recipient with its respective attributes to send request
CALL METHOD send_request->add_recipient
EXPORTING
i_recipient = recipient
i_express = 'X'.
set send immediately flag
send_request->set_send_immediately( 'X' ).
---------- send document ----------------------------------
CALL METHOD send_request->send(
EXPORTING
i_with_error_screen = 'X'
RECEIVING
result = sent_to_all ).
COMMIT WORK.
exception handling
CATCH cx_bcs INTO bcs_exception.
WRITE: bcs_exception->error_type.
EXIT.
ENDTRY.
MY problem is:
Iam receiving 'hello world' and '20/09/2007' as a pdf file in mail.But the actual data
from CONVERT_ABAPSPOOLJOB_2_PDF (it_pdf_output) is not getting in the pdf file.
Iam receiving the email properly with pdf attached, but no data in pdf.
Can any one please help me,its very ugrent
The Bold line above is the problem here ,the data from Fm it_pdf_output is of type tline and the method takes data as HEX. How to convert ?Sudheer,
Refer to this link... https://www.sdn.sap.com/irj/sdn/wiki?path=/display/snippets/smartformtoMailasPDF+attachment& -
Convert spool to pdf and send in email sometimes attachment duplicated.
Hi all, I have a process that creates a spool, converts it to a pdf and then attaches it to an email. My problem is that sometimes, the same attachment is duplicated.
The process seems to work fine in debug mode (the attachment changes for each loop) but when I run it in the background, every few emails, it will duplicate an attachment.
I have noticed that the size of the pdf seems to change properly but that the content of the pdf does not match. So, it is like it gets the correct size of the pdf but not the body.
This is code that a consultant wrote and I am pretty new to abap/sap. I have changed some of the code because it was trying to handle an endless loop (I figured it should not have to handle (be in) an endless loop). I changed that code and it is working but this previous issue still exists. Thanks for your help.
*& Form PROCESS_EMPLOYEE
FORM process_employee .
* process appraisal only
IF it_final[] IS NOT INITIAL .
* READ DISTRIBUTION LIST *
REFRESH : it_email, it_idlient.
*Sort by supervisor
SORT it_final[] BY supervisor.
LOOP AT it_final INTO wa_final .
APPEND wa_final TO it_final1 .
AT END OF supervisor .
* Perform to create the PDF from the Output
report = 'zhr_pm_appemail'.
PERFORM create_pdf using report.
** Perform to email the PDF attachment
** to the supervisor and the Mailing list
subject = 'Performance Appraisals'.
PERFORM process_email using subject.
REFRESH it_final1 .
CLEAR it_final1 .
CLEAR wa_final .
FREE MEMORY ID 'MEM'.
ENDAT .
ENDLOOP.
ENDIF.
ENDFORM. " PROCESS_EMPLOYEE
*& Form CREATE_PDF
FORM create_pdf using report.
DATA: spoolno TYPE tsp01-rqident.
DATA : p_repid TYPE sy-repid .
DATA: v_len TYPE i , v_len1 TYPE i .
DATA: v_temp(8) TYPE c .
DATA: p_uname TYPE sy-uname .
DATA: it_tsp01 TYPE STANDARD TABLE OF tsp01 WITH HEADER LINE .
* DATA: it_pdf TYPE tline OCCURS 0 WITH HEADER LINE .
TABLES: tsp01.
DATA: var TYPE c .
*-- STRUCTURES
DATA:
lc_rq2name TYPE tsp01-rq2name.
DATA:
mstr_print_parms TYPE pri_params,
mc_valid(1) TYPE c,
mi_bytecount TYPE i,
mi_length TYPE i,
mi_rqident TYPE tsp01-rqident.
*-- INTERNAL TABLES
DATA:
mtab_pdf TYPE tline OCCURS 0 WITH HEADER LINE,
mc_filename TYPE rlgrap-filename.
*-- SELECTION SCREEN
DATA:
p_linsz TYPE sy-linsz VALUE 80, " Line size
p_paart TYPE sy-paart VALUE 'X_65_80'. " Paper Format
p_uname = sy-uname .
var = var + 1.
p_repid = report.
* START-OF-SELECTION .
concatenate p_repid+0(9)
p_uname+0(3)
into mc_filename
separated by '_'.
translate mc_filename to upper case.
*-- 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.
IF sy-subrc = 0 .
*--Make sure that a printer destination has been set up. If this is not done the PDF module abends.
*-- 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.
EXPORT it_final1 it_email p_email1 p_sender p_date vl_nmth
TO MEMORY ID 'MEM' .
IF report = 'zhr_pm_appandprogemail'.
SUBMIT zhr_pm_appandprogemail TO SAP-SPOOL WITHOUT SPOOL DYNPRO
SPOOL PARAMETERS mstr_print_parms
VIA SELECTION-SCREEN AND RETURN.
ENDIF.
IF report = 'zhr_pm_appemail'.
SUBMIT zhr_pm_appemail TO SAP-SPOOL WITHOUT SPOOL DYNPRO
SPOOL PARAMETERS mstr_print_parms
VIA SELECTION-SCREEN AND RETURN.
ENDIF.
ENDIF.
*Find out what the spool number is that was just created
perform get_spool_number using p_repid p_uname changing mi_rqident.
*converting the spool request into pdf
CALL FUNCTION 'CONVERT_ABAPSPOOLJOB_2_PDF'
EXPORTING
src_spoolid = mi_rqident
no_dialog = space
dst_device = mstr_print_parms-pdest
IMPORTING
pdf_bytecount = mi_bytecount
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.
* call function 'DOWNLOAD'
* exporting
* bin_filesize = mi_bytecount
* filename = mc_filename
* filetype = 'BIN'
* importing
* act_filename = mc_filename
* tables
* data_tab = it_mess_att.
CHECK sy-subrc = 0.
* Transfer the 132-long strings to 255-long strings
LOOP AT it_pdf INTO wa_pdf.
TRANSLATE wa_pdf USING ' ~'.
CONCATENATE v_gd_buffer wa_pdf INTO v_gd_buffer.
CLEAR wa_pdf .
ENDLOOP.
TRANSLATE v_gd_buffer USING '~ '.
DO.
it_mess_att = v_gd_buffer.
APPEND it_mess_att.
SHIFT v_gd_buffer LEFT BY 255 PLACES.
IF v_gd_buffer IS INITIAL.
EXIT.
ENDIF.
ENDDO.
ENDFORM. " CREATE_PDF
* FORM get_spool_nunber *
* Get the most recent spool created by user/report *
form get_spool_number using f_repid
f_uname changing f_rqident.
data:
lc_rq2name TYPE rlgrap-filename.
concatenate f_repid+0(6)
f_repid+7(3)
f_uname+0(3)
into lc_rq2name.
* separated by '_'.
translate lc_rq2name to upper case.
select * from tsp01 where rq2name = lc_rq2name
order by rqcretime descending.
f_rqident = tsp01-rqident.
exit.
endselect.
if sy-subrc ne 0.
clear f_rqident.
endif.
endform. " get spool number
*& Form SEND_MAIL
FORM send_email USING p_email subject.
REFRESH it_mess_bod.
* Default subject matter
gd_subject = text-019 ."'Subject'.
gd_attachment_desc = text-020 ."'Performance Appraisal'.
IF subject = 'Performance Appraisals and Progression I'.
gd_attachment_desc = 'PerfAppAndProg'.
ENDIF.
IF subject = 'Performance Appraisals'.
gd_attachment_desc = 'PerfAppraisal'.
ENDIF.
* 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 .pdf
PERFORM send_file_as_email_attachment
TABLES it_mess_bod
it_mess_att
USING p_email
subject
'PDF'
gd_attachment_desc
gd_attachment_desc
p_sender
gd_sender_type
CHANGING gd_error
gd_reciever.
ENDFORM. " SEND_MAIL
* FORM process_email *
FORM process_email using subject.
DESCRIBE TABLE it_mess_att LINES gd_recsize.
CHECK gd_recsize > 0.
PERFORM send_email USING p_email1 subject.
* perform send_email using p_email2.
ENDFORM. "process_email
*& Form SEND_FILE_AS_EMAIL_ATTACHMENT
* Send email
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.
CLEAR : ld_email , ld_mtitle , ld_format , ld_attdescription ,
ld_attfilename , ld_sender_address , ld_sender_address_type ,
w_doc_data.
REFRESH: t_packing_list.
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.
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.
LOOP AT it_email.
* Add the recipients email address
t_receivers-receiver = it_email.
t_receivers-rec_type = 'U'.
t_receivers-com_type = 'INT'.
t_receivers-notif_del = 'X'.
t_receivers-notif_ndel = 'X'.
APPEND t_receivers.
ENDLOOP.
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_HEX = 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.
IF sy-subrc = 0.
PERFORM update_infotype_0019 .
ENDIF.
* Populate zerror return code
* ld_error = sy-subrc.
** stop .
* READ TABLE t_receivers WITH KEY retrn_code = '0' .
* IF sy-subrc = 0 .
* v_update_flag = '1' .
* EXPORT v_update_flag TO MEMORY ID 'MEM2' .
* ENDIF .
** Populate zreceiver return code
* LOOP AT t_receivers.
* ld_receiver = t_receivers-retrn_code.
* ENDLOOP.
ENDFORM. "send_file_as_email_attachment
*& Form GET_NEXT_MONTH
FORM get_next_month .
CLEAR v_month .
v_month = vl_nmth+4(2).
REFRESH it_t247 .
CLEAR it_t247 .
CALL FUNCTION 'IDWT_READ_MONTH_TEXT'
EXPORTING
langu = 'E'
month = v_month
IMPORTING
t247 = it_t247.
CLEAR v_mon_text .
v_mon_text = it_t247-ltx .
ENDFORM. " GET_NEXT_MONTH
Edited by: Katie Doody on Feb 24, 2010 12:30 AMThank you for your response, this has allowed me to identify the problem. It is when I create the spool by using the code below. If I add a wait after this, the program works successfully. Is there another way to write the data to create a spool within my initial program rather than doing the submit? Could it be that it is putting data in memory?
SUBMIT zhr_pm_appandprogemail TO SAP-SPOOL WITHOUT SPOOL DYNPRO
SPOOL PARAMETERS mstr_print_parms
VIA SELECTION-SCREEN AND RETURN.
*& Report ZHR_PM_APPANDPROGEMAIL
REPORT ZHR_PM_APPANDPROGEMAIL
NO STANDARD PAGE HEADING
LINE-SIZE 80
LINE-COUNT 65(8).
* MESSAGE-ID zhr.
* INTERNAL TABLES DECLARATION
DATA: it_pdf TYPE tline OCCURS 0 ." WITH HEADER LINE .
* WORK AEA DECLARATION
DATA: wa_pdf TYPE tline .
* Spool to PDF conversions
*DATA: "gd_spool_nr TYPE tsp01-rqident,
* gd_destination TYPE rlgrap-filename,
* gd_bytecount TYPE tst01-dsize,
DATA:v_update_flag TYPE c . "flag for updating infotype 41 last appraisal date
DATA: v_gd_buffer TYPE string.
DATA: BEGIN OF it_final1 OCCURS 0 ,
supervisor TYPE persno ,
pernr TYPE persno ,
ename TYPE pa0001-ename ,
subgroup TYPE persk ,
stext TYPE t503t-ptext ,
lastapp TYPE dats ,
lastjob TYPE dats ,
email TYPE ztype,
darxx(5) TYPE c,
progression(1) TYPE c,
supervisor_desc(50) TYPE c,
END OF it_final1 .
DATA: t_packing_list TYPE sopcklsti1 OCCURS 0 WITH HEADER LINE,
t_contents TYPE solisti1 OCCURS 0 WITH HEADER LINE,
t_receivers TYPE somlreci1 OCCURS 0 WITH HEADER LINE,
t_attachment TYPE solisti1 OCCURS 0 WITH HEADER LINE,
t_object_header TYPE solisti1 OCCURS 0 WITH HEADER LINE,
w_cnt TYPE i,
w_sent_all(1) TYPE c,
w_doc_data TYPE sodocchgi1 .
DATA: gd_error TYPE sy-subrc,
gd_reciever TYPE sy-subrc.
DATA: v_flag TYPE c VALUE '1' .
DATA: BEGIN OF it_final OCCURS 0 ,
subgroup TYPE persk ,
supervisor TYPE persno ,
pernr TYPE persno ,
ename TYPE pa0001-ename ,
stext TYPE t503t-ptext ,
lastapp TYPE dats ,
lastjob TYPE dats ,
email TYPE ztype,
progression(1) TYPE c,
supervisor_desc(50) TYPE c,
END OF it_final .
DATA:it_t247 TYPE STANDARD TABLE OF t247 WITH HEADER LINE .
DATA: it_email TYPE STANDARD TABLE OF zemail WITH HEADER LINE.
*VARIABLE DECLARATION
DATA: p_date TYPE sy-datum , "excution date
vl_date TYPE sy-datum ,
p_email1 TYPE somlreci1-receiver , "receiver
p_sender TYPE somlreci1-receiver . "sender
DATA: w_recsize TYPE i.
DATA: gd_recsize TYPE i.
DATA : vl_nmth TYPE sy-datum.
DATA: v_month(2) TYPE n .
DATA: v_mon_text TYPE t247-ltx .
*START OF SELECTION
START-OF-SELECTION .
REFRESH t_receivers.
IMPORT it_final1 it_email p_email1 p_sender p_date vl_nmth FROM MEMORY ID 'MEM'.
PERFORM get_next_month .
LOOP AT it_final1 .
IF it_final1-progression IS NOT INITIAL.
MOVE-CORRESPONDING it_final1 TO it_final .
APPEND it_final .
CLEAR it_final .
* Add the recipients email address
t_receivers-receiver = it_final1-email.
t_receivers-rec_type = 'U'.
t_receivers-com_type = 'INT'.
t_receivers-notif_del = 'X'.
t_receivers-notif_ndel = 'X'.
APPEND t_receivers.
ENDIF.
ENDLOOP .
PERFORM write_output .
*END OF SELECTION
END-OF-SELECTION .
*& Form WRITE_OUTPUT
FORM write_output .
DATA: l_date(14) TYPE c ,
l_date_temp(14) TYPE c ,
v_date(10) TYPE c ,
v_date1(20) TYPE c ,
v_date1_temp(20) TYPE c ,
f_date(10) TYPE c.
DATA: lv_stext TYPE t503t-ptext .
CLEAR : v_date, v_date1.
CONCATENATE p_date+4(02) p_date+6(02) p_date+0(04)'.' INTO v_date.
CONCATENATE v_mon_text p_date+0(4) INTO l_date_temp SEPARATED BY space.
CONCATENATE l_date_temp '.' INTO l_date.
CONCATENATE v_mon_text vl_nmth+6(2) INTO v_date1_temp SEPARATED BY space.
CONCATENATE v_date1_temp ',' INTO v_date1_temp.
CONCATENATE v_date1_temp vl_nmth(4) INTO v_date1_temp SEPARATED BY space.
CONCATENATE v_date1_temp '.' INTO v_date1.
CONDENSE l_date .
FORMAT INTENSIFIED ON.
SKIP 4.
WRITE:/(80) text-001 CENTERED . "'METROPOLITAN UTILITIES DISTRICT'.
WRITE:/(80) text-002 CENTERED . "'OMAHA NEBR.'.
SKIP 2.
WRITE:/(80) text-003 CENTERED . "'Inter-Departmental Communication'.
FORMAT INTENSIFIED OFF.
WRITE :/(80) v_date CENTERED using edit mask '__/__/____'. " v_date.
SKIP 2.
WRITE: /10 text-004. "'SUBJECT: Performance Appraisals and Progression Increase'.
SKIP 1.
WRITE: /10 text-005, it_final1-supervisor_desc. "'TO: Supervisor'.
SKIP 1.
WRITE: /10 text-006. "'FROM: Anne M. Undajon, Director of Compensation and Benefits'.
SKIP 2.
WRITE:/10 text-007 . "'Listed below are the employees in your area who are due a '.
WRITE:/10 text-008 ,l_date. "'Performance Appraisal during the month of ',l_date.'. "v_mon_text , P_date+0(4)
WRITE:/10 text-009 . "'These employees are also eligible for a progression increase.
WRITE:/10 text-010 . "' A performance appraisal form can be found on-line in the MUD '.
WRITE:/10 text-011 . "'template section. The Performance Appraisal is to be completed '
WRITE:/10 text-012 . "'and discussed with the employee by the immediate supervisor.'
SKIP 2.
WRITE:/10 text-013. "Signed forms should be returned to the Human Resource Department by '.
WRITE:/10 v_date1.
SKIP 2 .
SORT it_final[] BY subgroup .
LOOP AT it_final .
CLEAR: lv_stext .
lv_stext = it_final-stext.
AT NEW subgroup .
TRANSLATE lv_stext TO UPPER CASE .
WRITE:/(80) lv_stext CENTERED .
SKIP 2 .
WRITE: 10 text-014 . "'Employee name' .
WRITE: 32 text-015 . "'Job Date' .
WRITE :44 text-016 . "'Last Appraisal' .
WRITE :59 text-021 . "'Employee' .
WRITE :/10 '--------------------' , 32'----------', 44 '--------------', 59 '--------'.
ENDAT .
WRITE:/10 it_final-ename .
WRITE: 32 it_final-lastjob using edit mask '__/__/____'.
CONCATENATE it_final-lastapp+4(02) it_final-lastapp+6(02) it_final-lastapp+0(04) INTO f_date.
WRITE :44 f_date using edit mask '__/__/____'.
SHIFT it_final-pernr left deleting leading '0'.
WRITE : 59 it_final-pernr.
SKIP 2 .
ENDLOOP.
SKIP 4.
WRITE :10 text-017. "'Anne M. Undajon'.
FORMAT INTENSIFIED ON.
WRITE:/10 text-018. "'Director of Compensation & Benefits'.
FORMAT INTENSIFIED OFF.
ENDFORM. " WRITE_OUTPUT
*& Form GET_NEXT_MONTH
FORM get_next_month .
CLEAR v_month .
v_month = vl_nmth+4(2).
REFRESH it_t247 .
CLEAR it_t247 .
CALL FUNCTION 'IDWT_READ_MONTH_TEXT'
EXPORTING
langu = 'E'
month = v_month
IMPORTING
t247 = it_t247.
CLEAR v_mon_text .
v_mon_text = it_t247-ltx .
ENDFORM. " GET_NEXT_MONTH
Edited by: Katie Doody on Feb 24, 2010 4:07 PM -
Background Submit to Spool, convert spool to PDF send via email
I am calling an ABAP in the background. this abap makes use of a custom table as the main driver ie on each change of vendor within this custom table I want to create a spool and email the spool - the spool is suppossed to be created via a submit RMCB0300 with screen selection to to sap-spool and return. I then want the program to take the spool convert it to PDF and email.
Problems I am encountering:
1. writing to the spool via background ABAP as follows
submit RMCB0300 with selection-table rspar
to sap-spool
spool parameters %_print
archive parameters %_archive
without spool dynpro and return.
Doesn't appear to be creating the spool - rspar is populated.
2. Best way to retrieve the correct spool number.
3. how to successfully convert PDF output after CONVERT_ABAPSPOOLJOB_2_PDF for email attachment - if this returns IT_PDF_OUTPUT.
is this the best way to do it:
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.
Thanks
Mark
Edited by: Matt on Apr 2, 2009 11:03 AM - amended title with formatting problems.Please find the code for converting SPool to pdf and sending mail
CALL FUNCTION 'CONVERT_ABAPSPOOLJOB_2_PDF'
EXPORTING
SRC_SPOOLID = LV_MI_RQIDENT
NO_DIALOG = 'X'
DST_DEVICE = LV_PRINT_PARMS-PDEST
IMPORTING
PDF_BYTECOUNT = LV_BYTECOUNT
PDF_SPOOLID = LV_RQIDENT
TABLES
PDF = LT_MTAB_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.
LOOP AT LT_MTAB_PDF INTO LWA_MTAB_PDF.
TRANSLATE LWA_MTAB_PDF USING ' ~'.
CONCATENATE LV_GD_BUFFER LWA_MTAB_PDF INTO LV_GD_BUFFER.
CLEAR LWA_MTAB_PDF.
ENDLOOP.
TRANSLATE LV_GD_BUFFER USING '~ '.
DO.
LWA_MESS_ATT = LV_GD_BUFFER.
APPEND LWA_MESS_ATT TO LT_MESS_ATT.
CLEAR LWA_MESS_ATT.
SHIFT LV_GD_BUFFER LEFT BY 255 PLACES.
IF LV_GD_BUFFER IS INITIAL.
EXIT.
ENDIF.
ENDDO.
CLEAR: LWA_RECLIST, LT_RECLIST[],
LT_OBJHEAD, LT_OBJHEAD[],
LWA_OBJTXT, LT_OBJTXT[],
LWA_OBJBIN, LT_OBJBIN[],
LWA_OBJPACK, LT_OBJPACK[].
" CLEAR LT_OBJBIN.
REFRESH LT_OBJBIN.
LT_OBJBIN[] = LT_MESS_ATT[].
DESCRIBE TABLE LT_OBJBIN LINES LV_L_ATTACHMENT.
LWA_OBJTXT = ''.
APPEND LWA_OBJTXT TO LT_OBJTXT.
CLEAR LWA_OBJTXT.
DESCRIBE TABLE LT_OBJTXT LINES LV_L_TESTO.
LT_DOC_CHNG-OBJ_NAME = 'STATUS_REPORT'.
LT_DOC_CHNG-EXPIRY_DAT = SY-DATUM + 10.
LT_DOC_CHNG-OBJ_DESCR = 'Generated File'. "#EC NOTEXT
LT_DOC_CHNG-SENSITIVTY = 'F'.
LT_DOC_CHNG-SENSITIVTY = 'O'.
LT_DOC_CHNG-OBJ_PRIO = '1'.
LT_DOC_CHNG-DOC_SIZE = LV_L_TESTO * 255.
CLEAR LWA_OBJPACK-TRANSF_BIN.
LWA_OBJPACK-HEAD_START = 1.
LWA_OBJPACK-HEAD_NUM = 0.
LWA_OBJPACK-BODY_START = 1.
LWA_OBJPACK-BODY_NUM = LV_L_TESTO.
LWA_OBJPACK-DOC_TYPE = 'RAW'.
APPEND LWA_OBJPACK TO LT_OBJPACK.
CLEAR LWA_OBJPACK.
LWA_OBJPACK-TRANSF_BIN = 'X' .
LWA_OBJPACK-HEAD_START = 1.
LWA_OBJPACK-HEAD_NUM = 1.
LWA_OBJPACK-BODY_START = 1.
LWA_OBJPACK-BODY_NUM = LV_L_ATTACHMENT.
LWA_OBJPACK-DOC_TYPE = 'PDF'.
LWA_OBJPACK-OBJ_NAME ='SPOOL'.
LWA_OBJPACK-OBJ_DESCR = 'Test'.
LWA_OBJPACK-DOC_SIZE = LV_L_ATTACHMENT * 255.
APPEND LWA_OBJPACK TO LT_OBJPACK.
CLEAR LWA_OBJPACK.
CLEAR LWA_RECLIST.
LWA_RECLIST-COPY = 'X'.
LWA_RECLIST-RECEIVER = P_EMAIL.
LWA_RECLIST-REC_TYPE = 'U'.
LWA_RECLIST-NOTIF_DEL = 'X'.
LWA_RECLIST-NOTIF_NDEL = 'X'.
APPEND LWA_RECLIST TO LT_RECLIST.
CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
EXPORTING
DOCUMENT_DATA = LT_DOC_CHNG
PUT_IN_OUTBOX = ' '
COMMIT_WORK = 'X'
TABLES
PACKING_LIST = LT_OBJPACK
OBJECT_HEADER = LT_OBJHEAD
CONTENTS_BIN = LT_OBJBIN
CONTENTS_TXT = LT_OBJTXT
RECEIVERS = LT_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.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF. -
Convert spool to PDF and send as email attachment
When i try to convert SAP spool to PDF and send it as email attachment, size of PDF document becomes large as compared to size of the PDF cocument i download using the same spool.
I am using following FMs.
CONVERT_ABAPSPOOLJOB_2_PDF to convert spool to PDF
and
SO_NEW_DOCUMENT_ATT_SEND_API1 to send email with attchment.
some times size of attchment exceeds 2MB and email results in error in SAP connect (SOST).
Any idea on how to compress the PDF attchment??
ThanksHi Venkat,
Can you plesae assist me.
I have a requirement to convert spool to pdf
send an email to users
issue is that attachement is big cant go through
I have used compress, but when I open the pdf file error that file was not correclty decoded
please assist, anyone -
Send email with spool as PDF attachment using class CL_BCS
Hi,
I am converting a spool to PDF using the function module CONVERT_OTFSPOOLJOB_2_PDF. The spool contains graphic images etc just like a script output.
CALL FUNCTION 'CONVERT_OTFSPOOLJOB_2_PDF'
EXPORTING
src_spoolid = v_rqident
no_dialog = 'X'
IMPORTING
pdf_bytecount = numbytes
pdf_spoolid = pdfspoolid
TABLES
pdf = pdf
EXCEPTIONS
err_no_otf_spooljob = 1
err_no_spooljob = 2
err_no_permission = 3
err_conv_not_possible = 4
err_bad_dstdevice = 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.
After this I want to attach the pdf as an attachment to an email and send it. For this purpose I am using the code found in the example BCS_EXAMPLE_5.
CALL METHOD document->add_attachment
EXPORTING
i_attachment_type = 'PDF'
i_attachment_subject = 'My attachment'
i_att_content_hex = binary_content.
How do I convert the script text into binary content, could you please suggest some help.Old code, but I use:
DATA: lt_pdf TYPE soli_tab,
lt_pdfbin TYPE solix_tab.
* Convert the lines
CALL FUNCTION 'SX_TABLE_LINE_WIDTH_CHANGE'
EXPORTING
line_width_src = 134
line_width_dst = 255
transfer_bin = 'X'
TABLES
content_in = i_pdf
content_out = lt_pdf
EXCEPTIONS
err_line_width_src_too_long = 1
err_line_width_dst_too_long = 2
err_conv_failed = 3
OTHERS = 4.
IF sy-subrc NE 0.
RAISE convert_error.
ENDIF.
lt_pdfbin = lt_pdf.
Also, keep in mid that that OTF convert function has a 99 page limit - if you can potentially reach that limit, you need to handle the background job process and retrieval of the RAW data from the spool. -
Spool - PDF - Binary - EMail as an attachment
Hi all,
I have a classical report output that I need to send as a PDF attachment in an e-mail. I am converting the spool to PDF using FM CONVERT_ABAPSPOOLJOB_2_PDF. I have a bespoke e-mail framework that recognizes the data only in Binary format. And so I need to convert the PDF output given by CONVERT_ABAPSPOOLJOB_2_PDF into a Binary file. I am currently downloading and uploading this back in Binary format and then using my bespoke e-mail framework. Could you guys tell me an approach other than the download/upload option to convert the PDF into a Binary format?
Thanks in advance.Hi,
Check this code..Might be helpful.
https://wiki.sdn.sap.com/wiki/display/Snippets/ABAP-Sendthespooldatatoanemail+address.
THanks
Naren -
URGENT ----- Problem in converting spool to pdf .
Error - File cannot be opened because of no pages ......
Hi experts,
I am passing internal table contents to spool --> then spool to pdf -
> then mail sending.
Everything is fine but only error is in the receiving mail the above error is coming.
given the code...
<b>I think the error is in converting into pdf function module</b>
<b>Help me to solve this problem as it is very urgent</b>
include data_declare. " pasted down
select * from kna1 into table itab up to 50 rows.
CALL FUNCTION 'RSPO_OPEN_SPOOLREQUEST'
EXPORTING
dest = 'LP01'
immediate_print = 'X'
IMPORTING
handle = handle
SPOOLID = spoolid.
loop at itab.
concatenate itab-kunnr itab-name1 itab-land1 into text separated by
space.
CALL FUNCTION 'RSPO_WRITE_SPOOLREQUEST'
EXPORTING
handle = handle
text = text.
endloop.
CALL FUNCTION 'RSPO_CLOSE_SPOOLREQUEST'
EXPORTING
handle = handle.
Convert Spool to PDF **********************************
<b>CALL FUNCTION 'CONVERT_ABAPSPOOLJOB_2_PDF'
EXPORTING
src_spoolid = 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.</b>
Processing Mail Sending ************************************
DATA: p_email LIKE somlreci1-receiver,
p_sender LIKE somlreci1-receiver,
sub(40).
DESCRIBE TABLE it_mess_att LINES gd_recsize.
CHECK gd_recsize > 0.
REFRESH it_mess_bod.
Default subject matter
gd_subject = 'Subject'.
gd_attachment_desc = text-002.
it_mess_bod = text-001.
APPEND it_mess_bod.
IF p_sender EQ space.
gd_sender_type = space.
ELSE.
gd_sender_type = 'INT'.
ENDIF.
MOVE 'Orders Rejeced on' TO sub.
WRITE: sy-datum DD/MM/YYYY TO sub+27(10).
Send file by email as .xls speadsheet
PERFORM send_file_as_email_attachment
TABLES it_mess_bod
it_mess_att
USING
p_email
sub "text-009
'PDF'
gd_attachment_name
gd_attachment_desc
p_sender
gd_sender_type
CHANGING gd_error
gd_reciever.
ENDFORM. " process_email
*& Form send_file_as_email_attachment
text
-->P_IT_MESS_BOD text
-->P_IT_MESS_ATT text
-->P_TEXT_009 text
-->P_1058 text
-->P_GD_ATTACHMENT_NAME text
-->P_GD_ATTACHMENT_DESC text
<--P_GD_ERROR text
<--P_GD_RECIEVER text
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-rec_type = 'U'.
t_receivers-com_type = 'INT'.
t_receivers-notif_del = 'X'.
t_receivers-notif_ndel = 'X'.
CLEAR gt_mail.
SELECT SINGLE * FROM zmail INTO gt_mail
WHERE grpnr = '1'.
IF NOT gt_mail-mail1 IS INITIAL.
t_receivers-receiver = gt_mail-mail1.
APPEND t_receivers.
ENDIF.
IF NOT gt_mail-mail2 IS INITIAL.
t_receivers-receiver = gt_mail-mail2.
APPEND t_receivers.
ENDIF.
IF NOT gt_mail-mail3 IS INITIAL.
t_receivers-receiver = gt_mail-mail3.
APPEND t_receivers.
ENDIF.
IF NOT gt_mail-mail4 IS INITIAL.
t_receivers-receiver = gt_mail-mail4.
APPEND t_receivers.
ENDIF.
LOOP AT gt_mail.
t_receivers-receiver = gt_mail-mailid..
APPEND t_receivers.
ENDLOOP.
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. " send_file_as_email_attachment
Data Declaration ************************************
DATA : handle LIKE sy-tabix.
data itab like kna1 occurs 0 with header line.
data: text(50) type c.
data: spoolid type TSP01-RQIDENT.
DATA : gt_listobject LIKE abaplist OCCURS 10 .
DATA : gt_objcont LIKE soli OCCURS 10 WITH HEADER LINE.
DATA : gt_objcont1 LIKE soli OCCURS 10 WITH HEADER LINE.
DATA : gt_objhead LIKE soli OCCURS 10 WITH HEADER LINE.
DATA : gt_att_head LIKE soli OCCURS 10 WITH HEADER LINE.
DATA : gt_receivers LIKE soos1 OCCURS 10 WITH HEADER LINE.
DATA : gt_packing_list LIKE soxpl OCCURS 10 WITH HEADER LINE.
DATA : gt_so_ali LIKE soli OCCURS 100 WITH HEADER LINE.
DATA : gt_so_ali1 LIKE soli OCCURS 100 WITH HEADER LINE.
DATA : gt_document_data LIKE sood1.
DATA: lineno TYPE i , length TYPE i , size TYPE i.
DATA: gt_message LIKE soli OCCURS 10 WITH HEADER LINE,
gt_message1 LIKE soli OCCURS 10 WITH HEADER LINE.
DATA: gt_scheme LIKE ztrc_scheme OCCURS 0 WITH HEADER LINE,
gt_mail LIKE zmail_prov OCCURS 0 WITH HEADER LINE.
gt_mail LIKE zmail." occurs 0 with header line.
DATA: gd_recsize TYPE i.
Spool IDs
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.
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.
DATA: w_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.
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.
Binary store for PDF
DATA: BEGIN OF it_pdf_output OCCURS 0.
INCLUDE STRUCTURE tline.
DATA: END OF it_pdf_output.
CONSTANTS: c_dev LIKE sy-sysid VALUE 'DEV',
c_no(1) TYPE c VALUE ' ',
c_device(4) TYPE c VALUE 'LOCL'.
DATA: check TYPE c,
days TYPE i.
<b></b><b></b><b></b>Hi Prashant,
Thanks for your reply. Really it is very useful one.
In this, the output list is getting populated into spool and to pdf.
But my requirement sending the internal table contents to spool directly without dispalying in the output list.
I did the program like the above mentioned one already. But my requirement is not that one.
Regards
chakradhar -
Create Spool from Internal table & converrt the spool to PDF
Hi All,
My requirement is take data from a table and find amount specific to each Vendors . So I took all the data into ITAB and do all the calculation. Later after calculation I have to create a spool from this ITAB and this spool have to convert to PDF. Later this PDF have to seend via email.
To convert the internal table to Spool , I used
LOOP AT t_summ INTO wa_summ.
w-amount = wa_summ-remittanceamount.
CONCATENATE wa_summ-vendorcode
wa_summ-controlnum
w-amount INTO wa_textdata SEPARATED BY space.
APPEND wa_textdata TO t_textdata.
ENDLOOP.
DESCRIBE TABLE t_textdata .
w-file_length = syst-tfill * 1022.
l_doctype = 'LIST'.
l_layout = 'X_POSTSCRIPT'.
CONCATENATE ' Listbill Summary Report for' syst-datum INTO
l_title SEPARATED BY space.
l_receiver = syst-uname.
* Create Spool
CALL FUNCTION 'RSPO_SR_OPEN'
EXPORTING
dest = 'LOCL'
* LDEST =
layout = l_layout
name = 'SUMREP'
* SUFFIX1 =
* SUFFIX2 =
copies = '1'
* PRIO =
* immediate_print = ' '
* AUTO_DELETE =
titleline = l_title
receiver = syst-uname "
* division = l_pri_params-prabt " abteilung
* authority = l_pri_params-prber "
* POSNAME =
* ACTTIME =
* LIFETIME = '8'
* APPEND =
* COVERPAGE =
* CODEPAGE =
doctype = l_doctype
* ARCHMODE =
* ARCHPARAMS =
* TELELAND =
* TELENUM =
* TELENUME =
IMPORTING
handle = l_spool_handle
spoolid = w-spoolid
EXCEPTIONS
device_missing = 1
name_twice = 2
no_such_device = 3
operation_failed = 4
OTHERS = 5
. "#EC DOM_EQUAL
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
CALL FUNCTION 'SLVC_C1022_TO_C255'
EXPORTING
i_file_length = w-file_length
TABLES
it_c1022 = t_textdata
et_c255 = lt_spool.
l_length = w-file_length.
LOOP AT lt_spool INTO ls_spool.
l_length = l_length - 255.
IF ( l_length > 0 ).
l_line_length = 255.
ELSE.
l_line_length = l_length + 255.
ENDIF.
* Write contents to spool
CALL FUNCTION 'RSPO_SR_WRITE'
EXPORTING
handle = l_spool_handle
text = ls_spool
length = l_line_length.
ENDLOOP.
* Close Spool
CALL FUNCTION 'RSPO_SR_CLOSE'
EXPORTING
handle = l_spool_handle
pages = 1
FINAL = 'X'
EXCEPTIONS
handle_not_valid = 1
operation_failed = 2
OTHERS = 3
By this I can see the spool with data in SP02.
Then to conver to PDF, I used
CALL FUNCTION 'CONVERT_ABAPSPOOLJOB_2_PDF'
EXPORTING
src_spoolid = w-spoolid
no_dialog = 'X'
DST_DEVICE = 'LOCL'
* PDF_DESTINATION =
IMPORTING
* PDF_BYTECOUNT =
* PDF_SPOOLID =
list_pagecount = list_pagecount
* BTC_JOBNAME =
* BTC_JOBCOUNT =
TABLES
pdf = t_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.
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
* BIN_FILESIZE =
filename = 'D:\t\t.pdf'
filetype = 'BIN'
TABLES
data_tab = t_pdf
* FIELDNAMES =
EXCEPTIONS
file_write_error = 1
no_batch = 2
gui_refuse_filetransfer = 3
invalid_type = 4
no_authority = 5
unknown_error = 6
header_not_allowed = 7
separator_not_allowed = 8
filesize_not_allowed = 9
header_too_long = 10
dp_error_create = 11
dp_error_send = 12
dp_error_write = 13
unknown_dp_error = 14
access_denied = 15
dp_out_of_memory = 16
disk_full = 17
dp_timeout = 18
file_not_found = 19
dataprovider_exception = 20
control_flush_error = 21
OTHERS = 22
But later when I go and open the PDF, I am getting an error saying'Page cannot be open because it dont have any pages'
Please help me
Regards,
NikhilHi Nikhil,
<li>If you are still not able to find out the problem. You can an alternative way , which is used for the same purpose.
<li>Try this way. It creates spool and and same CONVERT_ABAPSPOOLJOB_2_PDF fm is used to convert spool to PDF. It works. Test this test program.
REPORT ztest_notepad.
DATA:g_val TYPE c,
w_pripar TYPE pri_params,
w_arcpar TYPE arc_params,
i_pdf TYPE TABLE OF tline,
spoolid LIKE tsp01-rqident,
l_no_of_bytes TYPE i,
l_pdf_spoolid LIKE tsp01-rqident,
l_jobname LIKE tbtcjob-jobname,
l_jobcount LIKE tbtcjob-jobcount.
DATA:it_t001 TYPE TABLE OF t001 WITH HEADER LINE.
START-OF-SELECTION.
SELECT * FROM t001 INTO TABLE it_t001.
"Read, determine, change spool print parameters and archive parameters
CALL FUNCTION 'GET_PRINT_PARAMETERS'
EXPORTING
in_archive_parameters = w_arcpar
in_parameters = w_pripar
layout = 'X_65_132'
line_count = 65
line_size = 132
no_dialog = 'X'
IMPORTING
out_archive_parameters = w_arcpar
out_parameters = w_pripar
valid = g_val.
IF g_val NE space AND sy-subrc = 0.
w_pripar-prrel = space.
w_pripar-primm = space.
NEW-PAGE PRINT ON NEW-SECTION PARAMETERS w_pripar ARCHIVE PARAMETERS w_arcpar NO DIALOG.
ENDIF.
LOOP AT it_t001.
WRITE:/ it_t001.
ENDLOOP.
NEW-PAGE PRINT OFF.
CALL FUNCTION 'ABAP4_COMMIT_WORK'.
spoolid = sy-spono.
CALL FUNCTION 'CONVERT_ABAPSPOOLJOB_2_PDF'
EXPORTING
src_spoolid = spoolid
no_dialog = ' '
IMPORTING
pdf_bytecount = l_no_of_bytes
pdf_spoolid = l_pdf_spoolid
btc_jobname = l_jobname
btc_jobcount = l_jobcount
TABLES
pdf = i_pdf.
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
filename = 'C:\temp\test.pdf'
filetype = 'BIN'
TABLES
data_tab = i_pdf.
Thanks
Venkat. -
Spool to PDF stored in application server
Hi Experts,
Please, please.....I need help.......
I have a problem with converting spool to PDF. If I download the spool to presentation, the output is fine, BUT when I download it to application server and try to view it in al11, a set of characters comes out and if I try to save it on my local drive from the application server, an error message pops out stating that it could not read the file because it is either not a supported file type or because the file has been damaged. Please help me. I've tried doing everything I can already. I cannot run the convertion of spool file to presentation because it always ends up as run time error, that's why I have no choice but to run it in background. These files will only be viewed by different offices. This files will NOT be sent via email. Please, please.......help......I'm really, really desperate......Here's what I did with the program....Please tell me where I went wrong.....Help......I've been on it for days and this is really causing a major headache........
DATA: BEGIN OF it_pdf_output OCCURS 0.
INCLUDE STRUCTURE tline.
DATA: END OF it_pdf_output.
PARAMETERS: p_file TYPE LOCALFILE DEFAULT TEXT-F02 OBLIGATORY.
DATA: gd_buffer TYPE STRING OCCURS 0 WITH HEADER LINE.
lt_conv LIKE gd_buffer OCCURS 0 WITH HEADER LINE.
DATA lv_string TYPE string.
LOOP AT it_pdf_output.
TRANSLATE it_pdf_output USING '~'.
CONCATENATE gd_buffer it_pdf_output INTO gd_buffer.
ENDLOOP.
TRANSLATE gd_buffer USING '~'.
APPEND gd_buffer.
DO.
counter = strlen( gd_buffer ).
IF counter GE 255.
lt_conv = gd_buffer(255).
APPEND lt_conv.
SHIFT gd_buffer LEFT BY 255 PLACES.
ELSE.
lt_conv = gd_buffer(counter).
APPEND lt_conv.
EXIT.
ENDIF.
ENDDO.
IF lt_conv[] IS NOT INITIAL.
OPEN DATASET p_file FOR OUTPUT IN TEXT MODE ENCODING DEFAULT.
IF sy-subrc EQ 0.
IF sy-subrc 0.
MESSAGE e398(00) WITH 'Error creating file' p_file.
ENDIF.
LOOP AT lt_conv INTO lv_string.
TRANSFER lv_string TO p_file.
ENDLOOP.
CLOSE DATASET p_file.
IF sy-subrc EQ 0.
ELSE.
MESSAGE e398(00) WITH 'Error closing file' p_file.
ENDIF.
ELSE.
MESSAGE e398(00) WITH 'Error creating file' p_file.
ENDIF.
ENDIF.Hi,
maybe a look at Function Module 'CONVERT_ABAPSPOOLJOB_2_PDF' could solve your problem.
Regards
Mark-André -
Sending Invoice as PDF in email
Hello,
I have a requirement where I have to send Proforma Invoice as PDF in email.
Now, the Proforma Invoice is already using output type to Print and when I see the routines in Tcode NACE
It uses RVADAUS1 Program where it calls RV_EXPORT_DOCUMENT_PRINT function module to generate the Print document.
This works fine.
So, I created a new output type, copied the RVADAUS1 to ZRVADAUS1 and modified the code where I am capturing the Spool generated through the original code and pass it to CONVERT_ABAPSPOOLJOB_2_PDF to convert it to PDF and then send it as an email.
Now, the problem I am facing is that, I am not able to generate a Spool when I am using the medium ( '5' External Send ). So the further code of capturing Spool and convert to PDF and send as email fails.
Any guidance is appreciated.
Regards,
DNPHi Sudhanshu,
Just before calling the function module RV_EXPORT_DOCUMENT_PRINT.
I forced TNAPR-NACHA = '1'. and NAST-NACHA = '1'.
which means I forced Transmission medium as 1(Print) instead of 5(External Send)
This created a SPOOL.
Regards,
DNP
Edited by: DNP on Aug 14, 2009 11:45 AM -
Hi experts,
I'm looking for a possibility to conbvert a Spool-request to PDF fomrat.
Following situation:
I have a Web Dynpro that creates a page with a few material details. I can now export this to Excel, but now the requeiremt is also to convert it to PDF.
We don't have ADS, so I can't use Adobe forms. First, I tried to create a Smartform and convert this to PDF which will work. But I have also a few pictures included which come from a Web Service (as JPG). After searchin a while I found a possibilty to convert them to TIF and insert them in SE78 automatically. But this takes to much time and as a result of insert them to SE78, the colors will change (only 256 colors).
Next idea was to generate a HTML-Mail out of my Smartform (regaring this blog /people/pavan.bayyapu/blog/2005/08/30/sending-html-email-from-sap-crmerp) what works perfectly now.
So now I have a Spool in SOST which contains a HTML file. OK, looks great, all pictures are included, takes not much time - but how to convert this to PDF?
Anybody any ideas?Hi experts,
after searching the whole forum and internet, I don't find any solution.
Maybe the convertion from Spool to PDF is not possible...
OK, another idea:
I read that the wrong colors result from the different color depth (16/24 bit vs 256 colors). So my last idea is to convert the image before inserting into BDS (SE78), automatically done by SAP.
Is there any function/coding you know which can convert me a image from 24bit to 256 colors? If so, I can convert the image and then insert into BDS... -
Send spool as PDF, error in opening PDF- Could not find the XObject '00014'
Hi
I am sendind a spool as PDF and when opening the PDF I am getting error saying Could not find the XObject named 00014.
Please let me know how I can see the PDF contents proerly.
Regards
BalaHi Bala
Check the sample which can be useful for you.
Pseudo code for sending PDF attachment:
TABLES: tsp01.
TYPES: BEGIN OF t_spool,
Rqident TYPE tsp01-rqident,
END OF t_spool.
DATA: i_spool TYPE STANDARD TABLE OF t_spool,
Wa_spool TYPE t_spool.
SELECT rqident FROM tsp01
INTO TABLE i_spool
WHERE rqowner = sy-uname.
SORT i_spool DESCENDING BY rqident.
LOOP AT i_spool INTO wa_spool.
ENDLOOP.
YPES: l_ty_tab_pdf TYPE tline OCCURS 0.
DATA: l_pdf TYPE l_ty_tab_pdf,
l_spool TYPE tsp01-rqident.
Type for binary attachment table.
TYPES: l_ty_tab_objbin TYPE solisti1 OCCURS 0.
DATA: l_objbin TYPE l_ty_tab_objbin.
l_spool = wa_spool-rqident.
CALL FUNCTION 'CONVERT_OTFSPOOLJOB_2_PDF'
EXPORTING
src_spoolid = l_spool
no_dialog = ' '
TABLES
pdf = l_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.
WRITE: / 'error', sy-subrc.
ENDIF.
**/ Convert the PDF format to the table type required for the attachment.
CALL FUNCTION 'QCE1_CONVERT'
TABLES
t_source_tab = l_pdf
t_target_tab = l_objbin
EXCEPTIONS
convert_not_possible = 1
OTHERS = 2.
IF sy-subrc <> 0.
WRITE: / 'error', sy-subrc.
ENDIF.
TABLES: soli.
DATA: v_email TYPE soli-line. Managers Email
DATA: l_adrnr LIKE kna1-adrnr. Address Number
DATA: l_objky TYPE nast-objky. Object Key
DATA: l_reclist LIKE somlreci1 OCCURS 0 WITH HEADER LINE.
DATA: l_objtxt LIKE solisti1 OCCURS 0 WITH HEADER LINE.
DATA: l_objpack LIKE sopcklsti1 OCCURS 0 WITH HEADER LINE.
DATA: l_doc_chng LIKE sodocchgi1.
DATA: l_objhead LIKE solisti1 OCCURS 0 WITH HEADER LINE.
DATA: l_tab_lines LIKE sy-tabix.
CONSTANTS: k_true TYPE boolean_flg VALUE 'X'.
DATA: l_mail TYPE somlreci1-receiver.
l_mail = v_email.
Creation of the document to be sent as File Name
l_doc_chng-obj_name = 'SENDFILE'.
Mail Subject
l_doc_chng-obj_descr =l_text-001.
Here text-001 will contains Compensation Review Statement for Employee Name
Here we can concatenate employee first name and last name to l_text-001.
Completing the recipient list
l_reclist-receiver = l_mail. Manager Email Address
l_reclist-rec_type = 'U'.
APPEND l_reclist.
Mail Contents
l_objtxt = text-002.
APPEND l_objtxt.
Calculate email size in bytes
DESCRIBE TABLE l_objtxt LINES l_tab_lines.
READ TABLE l_objtxt INDEX l_tab_lines.
l_doc_chng-doc_size = (l_tab_lines - 1 ) * 255 + STRLEN( l_objtxt ).
Creation of the entry for the compressed document for the email text
CLEAR l_objpack-transf_bin.
l_objpack-head_start = 1.
l_objpack-head_num = 0.
l_objpack-body_start = 1.
l_objpack-body_num = l_tab_lines.
l_objpack-doc_type = 'RAW'.
APPEND l_objpack.
Creation of the document attachment
(Assume that the data in OBJBIN is in BMP format)
DESCRIBE TABLE l_objbin LINES l_tab_lines.
l_objhead = text-001.
APPEND l_objhead.
CLEAR l_objpack.
Creation of the entry for the compressed/attached document
l_objpack-transf_bin = k_true.
l_objpack-head_start = 1.
l_objpack-head_num = 1.
l_objpack-body_start = 1.
l_objpack-body_num = l_tab_lines.
l_objpack-doc_type = 'PDF'.
l_objpack-obj_name = text-005.
l_objpack-obj_descr = text-001.
l_objpack-doc_size = l_tab_lines * 255.
APPEND l_objpack. "/ .
Sending the document
CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
EXPORTING
document_data = l_doc_chng
put_in_outbox = 'X'
TABLES
packing_list = l_objpack
object_header = l_objhead
contents_bin = l_objbin
contents_txt = l_objtxt
receivers = l_reclist
EXCEPTIONS
too_many_receivers = 1
document_not_sent = 2
operation_no_authorization = 4
OTHERS = 99.
IF sy-subrc <> 0.
WRITE: / 'unsuccessful', sy-subrc.
ELSE.
WRITE: / 'successful'.
ENDIF.
*Take note it is a requirement to do a commit work for the email to go into transaction
SOST.
COMMIT WORK.
Regards,
Sree -
Problem sending .pdf with email in ECC 6.0
hi there,
we are upgrading from r/3 4.6.c to ECC 6.0.
i have the following problem: in many z-ababs we convert spool-files to pdf-files and send them with function SO_NEW_DOCUMENT_ATT_SEND_API1 via email.
well, this is working okay, BUT: the ending '.pdf' is missing in the filename:
in R/3 4.6.c it looks like the following:
zfl_reporting.pdf
Now it looks like this:
zfl_reporting
So the file is not recognized as pdf-file. You have to add a .pdf manually to open it.
We can't do this as we send the pdf-files thousands of times to our customers.
Any ideas ?
reg, Martinhi
Posted below is the sample code..
find the bolded ones...
REPORT ZMAIL_PDF NO STANDARD PAGE HEADING.
Data for mailing purpose
DATA: OBJPACK LIKE SOPCKLSTI1 OCCURS 2 WITH HEADER LINE.
DATA: OBJHEAD LIKE SOLISTI1 OCCURS 1 WITH HEADER LINE.
DATA: OBJBIN LIKE SOLISTI1 OCCURS 10 WITH HEADER LINE.
DATA: OBJTXT LIKE SOLISTI1 OCCURS 10 WITH HEADER LINE.
DATA: RECLIST LIKE SOMLRECI1 OCCURS 5 WITH HEADER LINE.
DATA: DOC_CHNG LIKE SODOCCHGI1.
DATA: TAB_LINES LIKE SY-TABIX.
Spool table
TABLES : TSP01.
Data required for creating spool
DATA: MSTR_PRINT_PARMS LIKE PRI_PARAMS VALUE 'LP01',
MC_VALID(1),
MI_BYTECOUNT TYPE I,
MI_LENGTH TYPE I,
MI_RQIDENT LIKE TSP01-RQIDENT,
REP LIKE PRI_PARAMS-PLIST.
Internal table for capturing data into PDF format
DATA: MTAB_PDF LIKE TLINE OCCURS 0 WITH HEADER LINE.
File name
DATA : MC_FILENAME LIKE RLGRAP-FILENAME.
SELECTION SCREEN
PARAMETERS : P_REPID LIKE SY-REPID,
P_LINSZ LIKE SY-LINSZ DEFAULT 132,
P_PAART LIKE SY-PAART DEFAULT 'X_65_132'.
START-OF-SELECTION.
<b> CONCATENATE 'C:\'
P_REPID
'.PDF'
INTO MC_FILENAME.</b>
MOVE SY-REPID TO REP.
Get print parameters
PERFORM GET_PRINT_PARAMS.
Send output of the required program to Spool
SUBMIT (P_REPID) TO SAP-SPOOL WITHOUT SPOOL DYNPRO
SPOOL PARAMETERS MSTR_PRINT_PARMS
VIA SELECTION-SCREEN AND RETURN.
Get the the spool number that is just created
PERFORM GET_SPOOL_NUMBER USING SY-REPID SY-UNAME
CHANGING MI_RQIDENT.
Convert Spool to PDF & download the same
PERFORM SPOOL_2_PDF.
Upload downloaded PDF file for mailing
PERFORM UPLOAD_PDF_FILE.
Send mail with PDF attachment
PERFORM SEND_MAIL.
FORM get_spool_number *
Get the most recent spool created by user/report *
form get_spool_number using f_repid
f_uname
changing f_rqident.
data:
lc_rq2name like tsp01-rq2name.
concatenate f_repid
f_uname
into lc_rq2name separated by '_'.
select * from tsp01 where rq2name = sy-repid
order by rqcretime descending.
f_rqident = tsp01-rqident.
exit.
endselect.
if sy-subrc ne 0.
clear f_rqident.
endif.
endform." get_spool_number
*& Form send_mail
text
--> p1 text
<-- p2 text
form send_mail.
Creation of the document to be sent
DOC_CHNG-OBJ_NAME = 'TEST'.
DOC_CHNG-OBJ_DESCR = 'TEST MAIL WITH PDF ATTACHMENT'. "mail subject
OBJTXT = 'Test mail with PDF attachment'.
APPEND OBJTXT.
CLEAR OBJTXT.
APPEND OBJTXT.
APPEND OBJTXT.
OBJTXT = 'Please double click the attachment to verify'.
APPEND OBJTXT.
DESCRIBE TABLE OBJTXT LINES TAB_LINES.
READ TABLE OBJTXT INDEX TAB_LINES.
DOC_CHNG-DOC_SIZE = ( TAB_LINES - 1 ) * 255 + STRLEN( OBJTXT ).
Creation of the entry for the compressed document
CLEAR OBJPACK-TRANSF_BIN.
OBJPACK-HEAD_START = 1.
OBJPACK-HEAD_NUM = 0.
OBJPACK-BODY_START = 1.
OBJPACK-BODY_NUM = TAB_LINES.
OBJPACK-DOC_TYPE = 'RAW'.
APPEND OBJPACK.
DESCRIBE TABLE OBJBIN LINES TAB_LINES.
OBJHEAD = 'Sample PDF attachement'. "
APPEND OBJHEAD.
Creation of the entry for the compressed attachment
OBJPACK-TRANSF_BIN = 'X'.
OBJPACK-HEAD_START = 1.
OBJPACK-HEAD_NUM = 1.
OBJPACK-BODY_START = 1.
OBJPACK-BODY_NUM = TAB_LINES.
<b> OBJPACK-DOC_TYPE = 'PDF'.</b>
OBJPACK-OBJ_NAME = 'TEST'.
OBJPACK-OBJ_DESCR = 'Test.PDF'.
OBJPACK-DOC_SIZE = TAB_LINES * 255.
APPEND OBJPACK.
Completing the recipient list
For sending mail to Internet Address
RECLIST-RECEIVER = '[email protected].
RECLIST-REC_TYPE = 'U'.
APPEND RECLIST.
Sending the document
CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
EXPORTING
DOCUMENT_DATA = DOC_CHNG
PUT_IN_OUTBOX = 'X'
TABLES
PACKING_LIST = OBJPACK
OBJECT_HEADER = OBJHEAD
CONTENTS_BIN = OBJBIN
CONTENTS_TXT = OBJTXT
RECEIVERS = RECLIST
EXCEPTIONS
TOO_MANY_RECEIVERS = 1
DOCUMENT_NOT_SENT = 2
OPERATION_NO_AUTHORIZATION = 4
OTHERS = 99.
CASE SY-SUBRC.
WHEN 0.
WRITE :/ 'MAIL SENT....'.
WHEN 1.
WRITE :/ 'TOO MANY RECEIVERS'.
WHEN 2.
WRITE :/ 'DOCUMENT NOT SENT'.
WHEN 4.
WRITE :/ 'NO SEND AUTHORIZATION'.
WHEN OTHERS.
WRITE :/ 'ERROR OCCURED WHILE SENDING MAIL'.
ENDCASE.
endform. " send_mail
*& Form GET_PRINT_PARAMS
FORM GET_PRINT_PARAMS.
call function 'GET_PRINT_PARAMETERS'
exporting destination = 'LP01'
copies = 1
list_name = rep
list_text = 'LIST ..... TO SAP-SPOOL'
immediately = 'X'
release = 'X'
new_list_id = 'X'
expiration = 1
line_size = 132
line_count = 65
layout = 'X_PAPER'
sap_cover_page = 'X'
cover_page = 'X'
receiver = sy-uname
department = 'System'
no_dialog = 'X'
importing out_parameters = mstr_print_parms
valid = mc_valid.
ENDFORM. " GET_PRINT_PARAMS
*& Form SPOOL_2_PDF
FORM SPOOL_2_PDF.
call function 'CONVERT_ABAPSPOOLJOB_2_PDF'
exporting
src_spoolid = mi_rqident
no_dialog = space
dst_device = mstr_print_parms-pdest
importing
pdf_bytecount = mi_bytecount
tables
pdf = mtab_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.
call function 'WS_DOWNLOAD'
exporting
bin_filesize = mi_bytecount
<b> filename = mc_filename</b>
filetype = 'BIN'
tables
data_tab = mtab_pdf
if sy-subrc <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
endif.
ENDFORM. " SPOOL_2_PDF
*& Form UPLOAD_PDF_FILE
FORM UPLOAD_PDF_FILE.
call function 'WS_UPLOAD'
exporting
<b> filename = mc_filename</b>
filetype = 'BIN'
tables
data_tab = OBJBIN
if sy-subrc <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
endif.
ENDFORM. " UPLOAD_PDF_FILE
**reward if helpful
regards,
madhumitha -
Conversion of spool to pdf format in landscape mode
Hi All,
I have a requirement where I need to print the output from a spool request in SAP to a pdf page .
The page has to be in landscape format. Is it possible to create a pdf page which is always in landscape format?
I am using FM convert abapspool 2pdf for conversion of spool to pdf.
Does this require any setting from BASIS end?
Any ideas/thoughts are welcome..
Thanks -
Harmeet Singh.hi check this...
*& Report ZSPOOLTOPDF *
*& Converts spool request into PDF document and emails it to *
*& recipicant. *
*& Execution *
*& This program must be run as a background job in-order for the write *
*& commands to create a Spool request rather than be displayed on *
*& screen *
REPORT zspooltopdf.
PARAMETER: p_email1 LIKE somlreci1-receiver,
p_sender LIKE somlreci1-receiver,
p_delspl AS CHECKBOX.
*DATA DECLARATION
DATA: gd_recsize TYPE i.
Spool IDs
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.
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.
DATA: w_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.
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.
Binary store for PDF
DATA: BEGIN OF it_pdf_output OCCURS 0.
INCLUDE STRUCTURE tline.
DATA: END OF it_pdf_output.
CONSTANTS: c_dev LIKE sy-sysid VALUE 'DEV',
c_no(1) TYPE c VALUE ' ',
c_device(4) TYPE c VALUE 'LOCL'.
*START-OF-SELECTION.
START-OF-SELECTION.
Write statement to represent report output. Spool request is created
if write statement is executed in background. This could also be an
ALV grid which would be converted to PDF without any extra effort
WRITE 'Hello World'.
new-page.
commit work.
new-page print off.
IF sy-batch EQ 'X'.
PERFORM get_job_details.
PERFORM obtain_spool_id.
Alternative way could be to submit another program and store spool
id into memory, will be stored in sy-spono.
*submit ZSPOOLTOPDF2
to sap-spool
spool parameters %_print
archive parameters %_print
without spool dynpro
and return.
Get spool id from program called above
IMPORT w_spool_nr FROM MEMORY ID 'SPOOLTOPDF'.
PERFORM convert_spool_to_pdf.
PERFORM process_email.
if p_delspl EQ 'X'.
PERFORM delete_spool.
endif.
IF sy-sysid = c_dev.
wait up to 5 seconds.
SUBMIT rsconn01 WITH mode = 'INT'
WITH output = 'X'
AND RETURN.
ENDIF.
ELSE.
SKIP.
WRITE:/ 'Program must be executed in background in-order for spool',
'request to be created.'.
ENDIF.
FORM obtain_spool_id *
FORM obtain_spool_id.
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.
FORM get_job_details *
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.
FORM convert_spool_to_pdf *
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.
FORM process_email *
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 *
--> p_email *
FORM send_email USING p_email.
CHECK NOT ( p_email IS INITIAL ).
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.
FORM delete_spool *
FORM delete_spool.
DATA: ld_spool_nr TYPE tsp01_sp0r-rqid_char.
ld_spool_nr = gd_spool_nr.
CHECK p_delspl <> c_no.
CALL FUNCTION 'RSPO_R_RDELETE_SPOOLREQ'
EXPORTING
spoolid = ld_spool_nr.
ENDFORM.
*& Form SEND_FILE_AS_EMAIL_ATTACHMENT
Send email
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.
regards,
venkat appikonda
Maybe you are looking for
-
View Objects in the shared application module is not refreshing
Hi , I have view objects defined shared apps module. This view objects are used for creating lovs which won't change very frequently. I have set the AutoRefresh=true for this view objects. I do have a UI to update the underline table for these lovs.
-
Hi. I have a preloader on the first frame of my movie timeline. When i go to 'test scene', the preloader works and moves to the next frame to play the MC. When i go to 'test movie' the preloader sticks after all bytes have loaded. It does not move on
-
IDoc transfer error - Message Type Conversion
Hi, While trying to transfer an IDocs from a 46C system, i get the following STATUS message in transaction BD87 Message type RPM_TIME could not be converted Message no. EA 694 Diagnosis Conversion entry between long and short names missing. System Re
-
Ok, here is a goodie for you, I am so sorry but this is driving me mad and I cant find help anywhere. My Flash MX 2004 panel for actions shows in the expert mode, or is there only one mode in this version? i am wanting to go to the non expert mode. C
-
Is it SOP to share my email address with 3rd parties without my explicit permission?
I created a gmail account for an addon. I created a Firefox add-on and submitted it. Within a week I get an email from WordPress, sent to the addon's gmail account. WTF! So, is it standard operating procedure for Mozilla to give my personally identif