cancel
Showing results for 
Search instead for 
Did you mean: 

smartform pdf mail

Former Member
0 Kudos

hi experts,

i want to learn how to send a pdf as mail. can any one plz help me. plz give me step by step procedure.

thanks in advance for ur responce.

Accepted Solutions (1)

Accepted Solutions (1)

Former Member
0 Kudos

send your Smart Form output via e-mail as a PDF attachment.

How to convert smartform output into pdf?

There is a way to download smartform in PDF format.

Please do the following:

1. Print the smartform to the spool.

2. Note the spool number.

3. Download a PDF file (Acrobat Reader) version of the spool by running Program RSTXPDFT4 and entering the

noted spool number.

or use this program:

data: i_otf LIKE itcoo OCCURS 100 WITH HEADER LINE,

i_pdf LIKE tline OCCURS 100 WITH HEADER LINE.

data: op_option type SSFCTRLOP,

job_output type SSFCRESCL.

op_option-getotf = 'X'.

CALL FUNCTION '/1BCDWB/SF00000005'

EXPORTING

ARCHIVE_INDEX =

ARCHIVE_INDEX_TAB =

ARCHIVE_PARAMETERS =

CONTROL_PARAMETERS = op_option

MAIL_APPL_OBJ =

MAIL_RECIPIENT =

MAIL_SENDER =

OUTPUT_OPTIONS =

USER_SETTINGS = 'X'

itab1 = itab1

IMPORTING

DOCUMENT_OUTPUT_INFO =

JOB_OUTPUT_INFO = job_output

JOB_OUTPUT_OPTIONS =

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.

CALL FUNCTION 'CONVERT_OTF'

EXPORTING

FORMAT = 'PDF'

MAX_LINEWIDTH = 132

ARCHIVE_INDEX = ' '

COPYNUMBER = 0

ASCII_BIDI_VIS2LOG = ' '

PDF_DELETE_OTFTAB = ' '

IMPORTING

BIN_FILESIZE =

BIN_FILE =

TABLES

otf = job_output-otfdata

lines = i_pdf

EXCEPTIONS

ERR_MAX_LINEWIDTH = 1

ERR_FORMAT = 2

ERR_CONV_NOT_POSSIBLE = 3

ERR_BAD_OTF = 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.

CALL FUNCTION 'GUI_DOWNLOAD'

EXPORTING

BIN_FILESIZE =

filename = 'c:\test_pdf_sf.pdf'

FILETYPE = 'BIN'

tables

data_tab = i_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

.

IF sy-subrc 0.

MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

ENDIF.

Reward points if useful.

Answers (4)

Answers (4)

Former Member
0 Kudos

Hi

First convert the smart form into pdf format and then u can attach that pdf file as the attachment file in the mail

1. execute the smart form

click on the TEXT --> PRINT

one spool number will be generated

Then goto se38

program name: RSTXPDFT4

execute that program and it will ask for the spool no

Then it will ask where u want to save that pdf file .

now u can send the pdf file as ur attachment in the mail

Reward if it make sense to u

Thanks

Krushna

Former Member
0 Kudos

this code will help you.

create your own smartfrom first..

&----


*& Report YSMARTFORM_EMAIL

*&

&----


*&

*&

&----


REPORT YSMARTFORM_EMAIL.

TABLES: VBAK.

************************************************************************

  • Constants *

************************************************************************

CONSTANTS:

C_X TYPE C VALUE 'X', " Value X

C_0 TYPE C VALUE '0', " Value 0

C_1 TYPE C VALUE '1'. " Value 1

************************************************************************

  • Work Variables declaration *

************************************************************************

DATA:

W_UCOMM LIKE SY-UCOMM, " Function code

W_TABLN TYPE I, " Lines

W_LINE TYPE SO_TEXT255, " Line of text

W_EADDR(60) TYPE C. " FieldLength for Email

DATA: VBAP_TAB LIKE VBAP OCCURS 0 WITH HEADER LINE.

DATA: W_FUNMOD TYPE RS38L_FNAM.

  • Structure to hold the Attributes of new Document

DATA: FS_DOCDATA TYPE SODOCCHGI1.

  • Internal table for storing OTF data form Smart-Form

DATA: BEGIN OF FS_OTF_DATA.

INCLUDE STRUCTURE ITCOO.

DATA: END OF FS_OTF_DATA,

T_OTF_DATA LIKE STANDARD TABLE OF FS_OTF_DATA.

  • Internal table for storing PDF data form Smart-Form

DATA: BEGIN OF FS_PDF_DATA.

INCLUDE STRUCTURE TLINE.

DATA: END OF FS_PDF_DATA,

T_PDF_DATA LIKE STANDARD TABLE OF FS_PDF_DATA.

  • Internal table to hold the attachment data text of the email

DATA: BEGIN OF FS_ATTACH_DATA.

INCLUDE STRUCTURE SOLISTI1.

DATA: END OF FS_ATTACH_DATA,

T_ATTACH_DATA LIKE STANDARD TABLE OF FS_ATTACH_DATA.

  • Internal table to hold Message body of the email

DATA: BEGIN OF FS_MESSBODY.

INCLUDE STRUCTURE SOLISTI1.

DATA: END OF FS_MESSBODY,

T_MESSBODY LIKE STANDARD TABLE OF FS_MESSBODY.

  • Internal table for packing list for main document

DATA: BEGIN OF FS_OBJPACK.

INCLUDE STRUCTURE SOPCKLSTI1.

DATA: END OF FS_OBJPACK,

T_OBJPACK LIKE STANDARD TABLE OF FS_OBJPACK.

  • Internal table for header text of the attachment

DATA: BEGIN OF FS_OBJHEAD.

INCLUDE STRUCTURE SOLISTI1.

DATA: END OF FS_OBJHEAD,

T_OBJHEAD LIKE STANDARD TABLE OF FS_OBJHEAD.

  • Internal table receiver information

DATA: BEGIN OF FS_RECEIVER.

INCLUDE STRUCTURE SOMLRECI1.

DATA: END OF FS_RECEIVER,

T_RECEIVER LIKE STANDARD TABLE OF FS_RECEIVER.

*Internal table to store data upto 255 lines

DATA: BEGIN OF FS_OBJCONT.

INCLUDE STRUCTURE SOLI.

DATA: END OF FS_OBJCONT,

T_OBJCONT LIKE STANDARD TABLE OF FS_OBJCONT.

*DATA : P_VBELN LIKE VBAK-VBELN.

DATA: P_EADDR(60) TYPE C

VALUE 'SUVARCHALA.CHINTALAPUDI@YASH.COM'.

PARAMETERS : P_VBELN LIKE VBAK-VBELN.

*PARAMETERS:

  • P_EADDR(60) TYPE C. " Email address

SELECT SINGLE *

FROM VBAK

WHERE VBELN EQ P_VBELN.

SELECT *

FROM VBAP

INTO TABLE VBAP_TAB

WHERE VBELN EQ P_VBELN.

CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'

EXPORTING

FORMNAME = 'YSMARTFORM_EMAIL'

  • VARIANT = ' '

  • DIRECT_CALL = ' '

IMPORTING

FM_NAME = W_FUNMOD

EXCEPTIONS

NO_FORM = 1

NO_FUNCTION_MODULE = 2

OTHERS = 3 .

IF SY-SUBRC <> 0.

  • Do nothing

ENDIF.

DATA: FS_CONT_PARM TYPE SSFCTRLOP,

T_JOB_INFO TYPE SSFCRESCL.

CLEAR FS_CONT_PARM.

FS_CONT_PARM-GETOTF = 'X'.

FS_CONT_PARM-NO_DIALOG = 'X'.

FS_CONT_PARM-PREVIEW = ''.

CALL FUNCTION W_FUNMOD

EXPORTING

  • ARCHIVE_INDEX =

  • ARCHIVE_INDEX_TAB =

  • ARCHIVE_PARAMETERS =

CONTROL_PARAMETERS = FS_CONT_PARM

  • MAIL_APPL_OBJ =

  • MAIL_RECIPIENT =

  • MAIL_SENDER =

  • OUTPUT_OPTIONS =

  • USER_SETTINGS = 'X'

VBAK = VBAK

IMPORTING

    • DOCUMENT_OUTPUT_INFO =

JOB_OUTPUT_INFO = T_JOB_INFO

    • JOB_OUTPUT_OPTIONS =

TABLES

VBAP = VBAP_TAB

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.

PERFORM CONVERT_OTF_TO_PDF.

&----


*& Form convert_otf_to_pdf

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM CONVERT_OTF_TO_PDF .

DATA: LV_BYTES TYPE P.

IF FS_CONT_PARM-GETOTF EQ 'X'.

REFRESH T_OTF_DATA.

CLEAR FS_OTF_DATA.

LOOP AT T_JOB_INFO-OTFDATA INTO FS_OTF_DATA.

APPEND FS_OTF_DATA TO T_OTF_DATA.

CLEAR FS_OTF_DATA.

ENDLOOP. " LOOP AT t_outtab-otfdata

CALL FUNCTION 'CONVERT_OTF'

EXPORTING

FORMAT = 'PDF'

MAX_LINEWIDTH = 255

IMPORTING

BIN_FILESIZE = LV_BYTES

TABLES

OTF = T_OTF_DATA

LINES = T_PDF_DATA

EXCEPTIONS

ERR_MAX_LINEWIDTH = 1

ERR_FORMAT = 2

ERR_CONV_NOT_POSSIBLE = 3

OTHERS = 4.

IF SY-SUBRC EQ 0 AND LV_BYTES IS NOT INITIAL.

PERFORM TABLE_SHIFT.

  • To send the output by email

PERFORM SET_UP_EMAIL.

PERFORM SEND_MAIL.

ENDIF. " IF sy-subrc EQ space.

ENDIF. " IF gs_control_pars-getotf

ENDFORM. " convert_otf_to_pdf

----


  • Form set_up_email *

----


  • This subroutine is used to set mail attributes *

----


  • There are no interface parameters to be passed to this subroutine. *

----


FORM SET_UP_EMAIL .

  • To setup attributes of the document

PERFORM SET_EMAIL_HEADER.

  • To set body of email

PERFORM SET_EMAILBODY.

  • To convert output table data with tab delimiter

PERFORM PREPARE_OUTPUT_DATA_FOR_ATTACH.

  • To set the Receipents

PERFORM SET_RECEIPENTS.

ENDFORM. " Set_up_email

----


  • Form set_email_header *

----


  • This subroutine is used to Setup the attributes of the Document *

----


  • There are no interface parameters to be passed to this subroutine. *

----


FORM SET_EMAIL_HEADER.

CONSTANTS :

LC_P TYPE C VALUE 'P', " Production system name

LC_F TYPE C VALUE 'F', " Sensitivity

LC_OBJNAME(6) TYPE C " Object name

VALUE 'SAPRPT'.

CLEAR FS_DOCDATA.

  • Populate the subject/generic message attributes

FS_DOCDATA-DOC_SIZE = 1.

FS_DOCDATA-OBJ_LANGU = SY-LANGU.

FS_DOCDATA-OBJ_NAME = LC_OBJNAME.

FS_DOCDATA-SENSITIVTY = LC_F.

IF SY-SYSID+0(1) NE LC_P.

CONCATENATE 'Test mail'(003)

'Sales Order Details'(002)

INTO FS_DOCDATA-OBJ_DESCR

SEPARATED BY SPACE.

ELSE.

MOVE TEXT-002 TO FS_DOCDATA-OBJ_DESCR.

ENDIF. " IF sy-sysid+0(1)...

ENDFORM. " Set_email_header

----


  • Form set_emailbody *

----


  • This subroutine is used to set body of an email *

----


  • There are no interface parameters to be passed to this subroutine. *

----


FORM SET_EMAILBODY.

CONSTANTS:

LC_DOC_TYPE(3) TYPE C VALUE 'RAW'. " Document type

REFRESH : T_OBJPACK,

T_MESSBODY.

CLEAR : FS_OBJPACK,

FS_MESSBODY.

MOVE:

'Hi,'(004) TO FS_MESSBODY-LINE.

APPEND FS_MESSBODY TO T_MESSBODY.

CLEAR FS_MESSBODY.

MOVE:

  • 'The attachment contains sales order details.'(005)

'www.google.com'

TO FS_MESSBODY-LINE.

APPEND FS_MESSBODY TO T_MESSBODY.

CLEAR W_TABLN.

DESCRIBE TABLE T_MESSBODY LINES W_TABLN.

CLEAR FS_MESSBODY.

READ TABLE T_MESSBODY INTO FS_MESSBODY INDEX W_TABLN.

FS_DOCDATA-DOC_SIZE = ( W_TABLN - 1 ) * 255 + STRLEN( W_LINE ).

MOVE:

SPACE TO FS_OBJPACK-TRANSF_BIN,

C_1 TO FS_OBJPACK-HEAD_START,

C_0 TO FS_OBJPACK-HEAD_NUM,

C_1 TO FS_OBJPACK-BODY_START,

W_TABLN TO FS_OBJPACK-BODY_NUM,

LC_DOC_TYPE TO FS_OBJPACK-DOC_TYPE.

APPEND FS_OBJPACK TO T_OBJPACK.

ENDFORM. " Set_emailbody

----


  • Form prepare_output_data_for_attach *

----


  • To convert the output table data with comma delimiter *

----


  • There are no interface parameters to be passed to this subroutine. *

----


FORM PREPARE_OUTPUT_DATA_FOR_ATTACH.

CONSTANTS:

LC_DOC_TYPE(3) TYPE C VALUE 'PDF', " Document type

LC_OBJNAME(6) TYPE C VALUE 'SAPRPT'. " Object name

REFRESH T_OBJHEAD.

REFRESH T_ATTACH_DATA[].

CLEAR FS_ATTACH_DATA.

T_ATTACH_DATA[] = T_OBJCONT[].

DESCRIBE TABLE T_ATTACH_DATA LINES W_TABLN.

FS_DOCDATA-DOC_SIZE = ( W_TABLN - 1 ) * 255 + STRLEN( W_LINE ).

FS_OBJPACK-BODY_NUM = W_TABLN.

FS_OBJPACK-DOC_SIZE = W_TABLN * 255.

FS_OBJPACK-TRANSF_BIN = C_X.

FS_OBJPACK-HEAD_START = C_1.

FS_OBJPACK-HEAD_NUM = C_1.

FS_OBJPACK-BODY_START = C_1.

FS_OBJPACK-DOC_TYPE = LC_DOC_TYPE.

FS_OBJPACK-OBJ_NAME = 'Attachment'.

FS_OBJPACK-OBJ_DESCR = 'Sales Order Details.PDF'(007).

APPEND FS_OBJPACK TO T_OBJPACK.

ENDFORM. " Prepare_output_data_for_attach

----


  • Form set_receipents *

----


  • This subroutine is used to set the Receipents *

----


  • There are no interface parameters to be passed to this subroutine. *

----


FORM SET_RECEIPENTS .

CONSTANTS

LC_REC_TYPE TYPE C VALUE 'U'. " Receipent type

REFRESH T_RECEIVER.

IF P_EADDR IS NOT INITIAL.

MOVE:

P_EADDR TO FS_RECEIVER-RECEIVER,

LC_REC_TYPE TO FS_RECEIVER-REC_TYPE.

APPEND FS_RECEIVER TO T_RECEIVER.

ENDIF. " IF P_EMAIL IS NOT.....

ENDFORM. " Set_receipents

----


  • Form send_mail *

----


  • This subroutine is used to send output by email *

----


  • There are no interface parameters to be passed to this subroutine. *

----


FORM SEND_MAIL.

CALL FUNCTION 'SO_DOCUMENT_SEND_API1'

EXPORTING

DOCUMENT_DATA = FS_DOCDATA

PUT_IN_OUTBOX = C_X

  • SENDER_ADDRESS = SY-UNAME

  • SENDER_ADDRESS_TYPE = 'B'

COMMIT_WORK = C_X

TABLES

PACKING_LIST = T_OBJPACK

OBJECT_HEADER = T_OBJHEAD

CONTENTS_BIN = T_ATTACH_DATA

CONTENTS_TXT = T_MESSBODY

RECEIVERS = T_RECEIVER

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 NE 0.

MESSAGE I007(CLAIM).

ELSE.

MESSAGE S592(EI).

ENDIF. " IF sy-subrc NE 0.

ENDFORM. " Send_mail

&----


*& Form table_shift

&----


  • The PDF file that is generated out of the above function module

  • cannot be transported as it needs to be of 255 chars.Hence

  • converting the file to get a 255 char single line,internal table.

----


*There are no interface parameters to be passed to this subroutine

----


FORM TABLE_SHIFT .

CONSTANTS:

CNV_HEXCONST_ZERO TYPE X VALUE '00'.

DATA:

LV_BIG_LINES(268) TYPE C

OCCURS 0 WITH HEADER LINE.

DATA:

LFL_FLAG TYPE C,

LV_LEFT_T(268) TYPE C,

LV_LEFT_I TYPE I,

TV_LEFT_I TYPE I,

LV_CURR_I TYPE I.

FIELD-SYMBOLS: <F>.

  • Get the lines into a table of 268 char as the first step to put it in

  • the pdf file of 255 chars

CLEAR LFL_FLAG.

LOOP AT T_PDF_DATA INTO FS_PDF_DATA.

IF LFL_FLAG EQ ' '.

CLEAR LV_BIG_LINES WITH CNV_HEXCONST_ZERO.

ASSIGN LV_BIG_LINES(134) TO <F>.

<F> = FS_PDF_DATA.

LFL_FLAG = 'X'.

ELSE.

LV_BIG_LINES+134 = FS_PDF_DATA.

APPEND LV_BIG_LINES.

CLEAR: LFL_FLAG.

ENDIF. " If lfl_flag = ''..

ENDLOOP. " Loop at t_pdf

IF LFL_FLAG EQ 'X'.

APPEND LV_BIG_LINES.

ENDIF. " If lflf_flag eq 'X'..

  • Next fill it into a 255 char table

CLEAR: LV_LEFT_T, LV_LEFT_I, TV_LEFT_I.

LV_CURR_I = 255.

LOOP AT LV_BIG_LINES.

IF LV_LEFT_I NE 0.

IF LV_CURR_I NE 0.

FS_OBJCONT(LV_LEFT_I) = LV_LEFT_T(LV_LEFT_I).

FS_OBJCONT+LV_LEFT_I(LV_CURR_I) = LV_BIG_LINES(LV_CURR_I).

ELSE.

FS_OBJCONT = LV_LEFT_T(LV_LEFT_I).

ENDIF. " IF lv_curr_i NE 0

ELSE.

FS_OBJCONT = LV_BIG_LINES(LV_CURR_I).

ENDIF. " IF lv_left_i NE 0

APPEND FS_OBJCONT TO T_OBJCONT.

TV_LEFT_I = 268 - LV_CURR_I.

IF TV_LEFT_I > 255.

FS_OBJCONT = LV_BIG_LINES+LV_CURR_I(255).

APPEND FS_OBJCONT TO T_OBJCONT.

LV_LEFT_I = TV_LEFT_I - 255.

TV_LEFT_I = 255 + LV_CURR_I.

LV_CURR_I = 255 - LV_LEFT_I.

LV_LEFT_T = LV_BIG_LINES+TV_LEFT_I.

ELSE.

LV_LEFT_T = LV_BIG_LINES+LV_CURR_I.

LV_LEFT_I = 268 - LV_CURR_I.

LV_CURR_I = 255 - LV_LEFT_I.

ENDIF. " IF tv_left_i > 255

ENDLOOP. " LOOP AT lv_big_lines.

CLEAR FS_OBJCONT WITH CNV_HEXCONST_ZERO.

ASSIGN FS_OBJCONT(LV_LEFT_I) TO <F>.

<F> = LV_LEFT_T(LV_LEFT_I).

APPEND FS_OBJCONT TO T_OBJCONT.

ENDFORM. " Table_shift

praveen_hannu
Contributor
0 Kudos

&----


*& Report ZTEST_PDF_MAIL

*&

&----


REPORT ZTEST_PDF_MAIL.

• Internal Table declarations

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.

CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'

EXPORTING

FORMNAME = 'ZTEST'

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'

IMPORTING

JOB_OUTPUT_INFO = W_RETURN

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

IMPORTING

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 0.

ENDIF.

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.

• Attachment

REFRESH: I_RECLIST,

I_OBJTXT,

I_OBJBIN,

I_OBJPACK.

CLEAR WA_OBJHEAD.

I_OBJBIN] = I_RECORD[.

• Create Message Body Title and Description

I_OBJTXT = 'test with pdf-Attachment!'.

APPEND I_OBJTXT.

DESCRIBE TABLE I_OBJTXT LINES V_LINES_TXT.

READ TABLE I_OBJTXT INDEX V_LINES_TXT.

WA_DOC_CHNG-OBJ_NAME = 'smartform'.

WA_DOC_CHNG-EXPIRY_DAT = SY-DATUM + 10.

WA_DOC_CHNG-OBJ_DESCR = 'smartform'.

WA_DOC_CHNG-SENSITIVTY = 'F'.

WA_DOC_CHNG-DOC_SIZE = V_LINES_TXT * 255.

• Main Text

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.

• Attachment (pdf-Attachment)

I_OBJPACK-TRANSF_BIN = 'X'.

I_OBJPACK-HEAD_START = 1.

I_OBJPACK-HEAD_NUM = 0.

I_OBJPACK-BODY_START = 1.

DESCRIBE TABLE I_OBJBIN LINES V_LINES_BIN.

READ TABLE I_OBJBIN INDEX V_LINES_BIN.

I_OBJPACK-DOC_SIZE = V_LINES_BIN * 255 .

I_OBJPACK-BODY_NUM = V_LINES_BIN.

I_OBJPACK-DOC_TYPE = 'PDF'.

I_OBJPACK-OBJ_NAME = 'smart'.

I_OBJPACK-OBJ_DESCR = 'test'.

APPEND I_OBJPACK.

CLEAR I_RECLIST.

I_RECLIST-RECEIVER = 'nareshreddy.k@gmail.com'.

I_RECLIST-REC_TYPE = 'U'.

APPEND I_RECLIST.

CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'

EXPORTING

DOCUMENT_DATA = WA_DOC_CHNG

PUT_IN_OUTBOX = 'X'

COMMIT_WORK = 'X'

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 0.

WRITE:/ 'Error When Sending the File', SY-SUBRC.

ELSE.

WRITE:/ 'Mail sent'.

ENDIF.

If you want to send some text as Body of the Mail then follow this once

when u r callin the FM'SO_NEW_DOCUMENT_ATT_SEND_API1'.. points to remember

1.u have to pass the body of content in table CONTENTS_TXT(ia m using I_OBJBIN) (each line a record) then. suppose i have appended 11 records to the table CONTENTS_TXT .

2.PACKING_LIST(iam usign I_OBJPACK) table u ahve to append a redord as follows

I_OBJPACK-TRANSF_BIN = ' '.

I_OBJPACK-HEAD_START = 000000000000001.

I_OBJPACK-HEAD_NUM = 000000000000001.

I_OBJPACK-BODY_START = 000000000000002

I_OBJPACK-BODY_NUM = 000000000000010.

I_OBJPACK-DOC_TYPE = 'RAW'.

append I_OBJPACK-.

by the above code system treat the first line in table I_OBJBIN as header and the 2nd line to 10 lines tread as body.

CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'

EXPORTING

DOCUMENT_DATA = WA_DOC_CHNG

PUT_IN_OUTBOX = 'X'

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.[/code]

Reward the points

Regards

Praveen

Former Member
0 Kudos

first convert the smart form output which is in rtf format to otf format using covert_otf FM then use FM convert to PDF and then use Fm API_SEND to send it as a mail..

the following code can be applied...

TABLES: zKTREE_t1,sflight.

DATA: cparam TYPE ssfctrlop,

outop TYPE ssfcompop,

fm_name TYPE rs38l_fnam,

my_tabix TYPE sy-tabix,

file_size TYPE i,

bin_filesize TYPE i.

DATA: tab_otf_data TYPE ssfcrescl,

pdf_tab LIKE tline OCCURS 0 WITH HEADER LINE,

itab LIKE TABLE OF zshail_t1 WITH HEADER LINE,

otab TYPE TABLE OF sflight WITH HEADER LINE,

tab_otf_final TYPE itcoo OCCURS 0 WITH HEADER LINE.

start-of-selection.

suppressing the dialog box****************************

outop-tddest = 'LP01'.

cparam-no_dialog = 'X'.

cparam-preview = space.

cparam-getotf = 'X'.

****************for the first smartform*******************************

CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'

EXPORTING

formname = 'ZSHAIL_SMFORM2'

VARIANT = ' '

DIRECT_CALL = ' '

IMPORTING

fm_name = fm_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.

SELECT my_id my_income my_name FROM zshail_t1 INTO TABLE itab.

CALL FUNCTION fm_name

EXPORTING

ARCHIVE_INDEX =

ARCHIVE_INDEX_TAB =

ARCHIVE_PARAMETERS =

control_parameters = cparam

MAIL_APPL_OBJ =

MAIL_RECIPIENT =

MAIL_SENDER =

output_options = outop

user_settings = space

IMPORTING

DOCUMENT_OUTPUT_INFO =

job_output_info = tab_otf_data

JOB_OUTPUT_OPTIONS =

TABLES

it_tab = itab[]

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.

*********appending the otf data into the final table*********************

tab_otf_final] = tab_otf_data-otfdata[.

**removing the initial and final markers from the OTF data*********

DELETE tab_otf_data-otfdata WHERE tdprintcom = '//'.

searching for the end-of-page in OTF table************

READ TABLE tab_otf_final WITH KEY tdprintcom = 'EP'.

my_tabix = sy-tabix + 1.

appending the modified OTF table to the final OTF table****

INSERT LINES OF tab_otf_data-otfdata INTO tab_otf_final INDEX my_tabix.

converting OTF data into pdf data**************************

CALL FUNCTION 'CONVERT_OTF'

EXPORTING

format = 'PDF'

max_linewidth = 132

ARCHIVE_INDEX = ' '

COPYNUMBER = 0

ASCII_BIDI_VIS2LOG = ' '

IMPORTING

bin_filesize = bin_filesize

BIN_FILE =

TABLES

otf = tab_otf_final

lines = pdf_tab

EXCEPTIONS

err_max_linewidth = 1

err_format = 2

err_conv_not_possible = 3

err_bad_otf = 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.

************downloading the converted PDF data to your local PC*******

CALL FUNCTION 'GUI_DOWNLOAD'

EXPORTING

bin_filesize = bin_filesize

filename = 'D:\TEST.PDF'

filetype = 'BIN'

APPEND = ' '

WRITE_FIELD_SEPARATOR = ' '

HEADER = '00'

TRUNC_TRAILING_BLANKS = ' '

WRITE_LF = 'X'

COL_SELECT = ' '

COL_SELECT_MASK = ' '

DAT_MODE = ' '

CONFIRM_OVERWRITE = ' '

NO_AUTH_CHECK = ' '

CODEPAGE = ' '

IGNORE_CERR = ABAP_TRUE

REPLACEMENT = '#'

WRITE_BOM = ' '

TRUNC_TRAILING_BLANKS_EOL = 'X'

IMPORTING

filelength = file_size

TABLES

data_tab = pdf_tab

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

u can also check the below links

Reward points if useful.