Application Development Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 

Convert Smartform to PDF and send to SAP Workplace user

Former Member
0 Kudos

Hi to all.

I need help of somebody expert in SMARTFORM's.

I need to convert a smartform into PDF format and to send as attachement for SAP workplace

of the user.

I developed the next code.

IT is to function and to send the mail for SAP workplace, but it happens that smartform

contains images (logos) and tables, when the user tries to open the file pdf in inbox gives

to error - "An unrecognized token ' q0 ' was found".

I tried to call a smartform only with text and functioned well.

Somebody can help me?

My code:

  • Begin ***********************************************

REPORT zteste_nsa_send_pdf_sap_office.

DATA: t_print LIKE zeps_fm04 OCCURS 0 WITH HEADER LINE,

v_size TYPE i.

DATA: ls_bil_invoice TYPE lbbil_invoice.

TABLES: nast.

DATA: i_otf TYPE itcoo OCCURS 0 WITH HEADER LINE,

i_tline TYPE TABLE OF tline WITH HEADER LINE,

i_receivers TYPE TABLE OF somlreci1 WITH HEADER LINE,

i_record LIKE solisti1 OCCURS 0 WITH HEADER LINE,

  • Objects to send mail.

i_objpack LIKE sopcklsti1 OCCURS 0 WITH HEADER LINE,

i_objtxt LIKE solisti1 OCCURS 0 WITH HEADER LINE,

i_objbin LIKE solisti1 OCCURS 0 WITH HEADER LINE,

i_reclist LIKE somlreci1 OCCURS 0 WITH HEADER LINE,

  • Work Area declarations

wa_objhead TYPE soli_tab,

w_ctrlop TYPE ssfctrlop,

w_compop TYPE ssfcompop,

w_return TYPE ssfcrescl,

wa_doc_chng TYPE sodocchgi1,

w_data TYPE sodocchgi1,

wa_buffer TYPE string,"To convert from 132 to 255

  • Variables declarations

v_form_name TYPE rs38l_fnam,

v_len_in LIKE sood-objlen,

v_len_out LIKE sood-objlen,

v_len_outn TYPE i,

v_lines_txt TYPE i,

v_lines_bin TYPE i.

START-OF-SELECTION.

CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'

EXPORTING

formname = 'ZFPS_FICHA_VALORIZACAO'

IMPORTING

fm_name = v_form_name

EXCEPTIONS

no_form = 1

no_function_module = 2

OTHERS = 3.

IF sy-subrc <> 0.

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

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

ENDIF.

w_ctrlop-getotf = 'X'.

w_ctrlop-no_dialog = 'X'.

w_compop-tdnoprev = 'X'.

CALL FUNCTION v_form_name

EXPORTING

control_parameters = w_ctrlop

output_options = w_compop

user_settings = 'X'

is_bil_invoice = ls_bil_invoice

is_nast = nast

is_repeat = 'X'

IMPORTING

job_output_info = w_return

TABLES

t_list = t_print

EXCEPTIONS

formatting_error = 1

internal_error = 2

send_error = 3

user_canceled = 4

OTHERS = 5.

IF sy-subrc <> 0.

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

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

ENDIF.

i_otf[] = w_return-otfdata[].

CALL FUNCTION 'CONVERT_OTF'

EXPORTING

format = 'PDF'

max_linewidth = 132

bin_filesize = v_len_in

TABLES

otf = i_otf

lines = i_tline

EXCEPTIONS

err_max_linewidth = 1

err_format = 2

err_conv_not_possible = 3

OTHERS = 4.

IF sy-subrc EQ 0.

ENDIF.

  • Convert PDF from 132 to 255.

LOOP AT i_tline.

TRANSLATE i_tline USING '~'.

CONCATENATE wa_buffer i_tline INTO wa_buffer.

ENDLOOP.

TRANSLATE wa_buffer USING '~'.

DO.

i_record = wa_buffer.

APPEND i_record.

SHIFT wa_buffer LEFT BY 255 PLACES.

IF wa_buffer IS INITIAL.

EXIT.

ENDIF.

ENDDO.

  • -------------------------------------------------------------------- *

          • SEND MAIL

REFRESH: i_reclist,

i_objtxt,

i_objbin,

i_objpack.

CLEAR wa_objhead.

  • Object with PDF.

i_objbin[] = i_record[].

  • Object with main text of the mail.

i_objtxt = 'Fichas de Valorização e Esquemas Tipo'.

APPEND i_objtxt.

  • Document information.

wa_doc_chng-obj_name = 'SMART'.

wa_doc_chng-expiry_dat = sy-datum + 10.

wa_doc_chng-obj_descr = 'Ficha de Valorização'.

wa_doc_chng-sensitivty = 'F'. "Functional object

wa_doc_chng-doc_size = ( v_lines_txt - 1 ) * 255 + STRLEN( i_objtxt ).

  • Pack to main body as RAW.

  • Obj. to be transported not in binary form

DESCRIBE TABLE i_objtxt LINES v_lines_txt.

READ TABLE i_objtxt INDEX v_lines_txt.

CLEAR i_objpack-transf_bin.

i_objpack-head_start = 1.

i_objpack-head_num = 0.

i_objpack-body_start = 1.

i_objpack-body_num = v_lines_txt.

i_objpack-doc_type = 'RAW'.

APPEND i_objpack.

  • Packing as PDF.

  • Obj. to be transported in binary form

DESCRIBE TABLE i_objbin LINES v_lines_bin.

READ TABLE i_objbin INDEX v_lines_bin.

i_objpack-transf_bin = 'X'.

i_objpack-head_start = 1.

i_objpack-head_num = 0.

i_objpack-body_start = 1.

i_objpack-body_num = v_lines_bin.

i_objpack-doc_type = 'PDF'.

i_objpack-obj_name = 'SMART'.

CONCATENATE 'Ficha_Valorizacao' '.pdf' INTO i_objpack-obj_descr.

i_objpack-doc_size = ( v_lines_bin - 1 ) * 255 + STRLEN( i_objbin ).

APPEND i_objpack.

  • e-mail receivers.

CLEAR i_reclist.

i_reclist-receiver = sy-uname.

i_reclist-rec_type = 'B'.

i_reclist-express = 'X'.

APPEND i_reclist.

CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'

EXPORTING

document_data = wa_doc_chng

put_in_outbox = 'X'

commit_work = ' '

TABLES

packing_list = i_objpack

object_header = wa_objhead

contents_bin = i_objbin

contents_txt = i_objtxt

receivers = i_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 EQ 0.

ENDIF.

  • End *************************************************

Thanks very much to all and Happy New year...

Nelson

1 ACCEPTED SOLUTION

Former Member
0 Kudos

Hi

See this report as example:

http://www.sapdevelopment.co.uk/reporting/rep_spooltopdf.htm

I believe before converting the print to pdf, you should print your document, get the spool and convert it.

Max

3 REPLIES 3

Former Member
0 Kudos

Hi

See this report as example:

http://www.sapdevelopment.co.uk/reporting/rep_spooltopdf.htm

I believe before converting the print to pdf, you should print your document, get the spool and convert it.

Max

0 Kudos

No Max.. I don't think it is required to send it to spool..the OTF to PDF convserion should be enough.. also, as the error is only with the graphics,it could be a GUI issue..

Regards,

Suresh Datti

0 Kudos

Hi Max,

Thank's for your reply.

I tried your suggestion to print first smartform in the spool and later converting the spool for OTF and in PDF (FM 'CONVERT_OTFSPOOLJOB_2_PDF').

When I send a mail with attachment file PDF, It's work fine... with graphics ...

Thank you very much.

Happy new to year.

Nelson