cancel
Showing results for 
Search instead for 
Did you mean: 

Mail body creation when send as sapscript as pdf attachment

Former Member
0 Kudos

Hello,

I must send a sapscript as pdf file attachment in a mail.

How can I insert a standard text in the body of the same mail ?

Thanks in advance

Regards

Sergio

Accepted Solutions (1)

Accepted Solutions (1)

Former Member
0 Kudos

Hi Sergio,

U want send output of script right? After developing the script you need to use 2 FMs,

'CONVERT_OTF' this is for convert the output into PDF

'SO_NEW_DOCUMENT_ATT_SEND_API1' this is for send output to mail.

Just execute SE37 and enter each function module and press 'where used list' then select programs check box then it will display all the programs where those FMs are used. You may get some idea about how to use these FMs.

Hope this helps you, reply for queries, Shall post you the updates.

Regards.

Kumar. .

Answers (3)

Answers (3)

Former Member
0 Kudos

I have already sent the SAPSCRIPT form as PDF attachment in a mail with the body empty.

My problem is only insert a Text in the body of the same mail.

Thanks

Regards

Sergio

Former Member
0 Kudos

hi

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

in the above 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.

I hope it clear lem know any concerns

smartform to MAIL

https://wiki.sdn.sap.com/wiki/x/a0w

https://wiki.sdn.sap.com/wiki/display/Snippets/SmartformtoMailasPDF+attachment

Please Close this thread.. when u r problem is solved. Reward all Helpful answers

Regards

Naresh Reddy K

Former Member
0 Kudos

Thanks, but my problem is not yet solved because i must use a sapscript.

I think your solution is good when a smartform is used for this.

Regards

Sergio

Former Member
0 Kudos

Hi,

When you call the smartform FM, you can get the OTF data in a tables parameter.

You can convert the OTF data into PDF data using the function module.

CONVERT_OTF_2_PDF or SX_OBJECT_CONVERT_OTF_PDF

.

then you can build the attachment and send a mail using the FM:

SO_NEW_DOCUMENT_ATT_SEND_API1

*----


*

  • Object ID : PTP_TS_FRM_202 *

  • Description : Print Program For PO Goods Receipt Document *

  • Developer : Ganesh Shanker Vidyarthi *

  • Date : 11/06/2006 *

  • Genentech Contact : *

  • Functional Contact : *

  • *

  • Purpose : This program is driver program of Goods Receipt*

  • Printing. *

  • *

  • Program Logic : The Goods Receipt form (Raw material worksheet) *

  • would be created once we entered the values of

  • MBLNR MJAHR ZEILE fields on the selection screen.

*----


*

  • Modification Log *

*----


*

  • Changed On Developer Transport No. Description *

*----


*

  • 11/06/2006 G.S.Vidyarthi Creation *

*----


*

REPORT zptpfrm202p_pogr_pr_instr MESSAGE-ID zmm.

*----


*

  • TABLES *

*----


*

  • Database table made for getting information about PRINTPREVIEW and

  • PRINT command more than one times

TABLES: zgr_table.

TYPE-POOLS:syscr.

*----


*

  • GLOBAL TYPE DECLARATION *

*----


*

DATA: zdoc_output_info TYPE ssfcrespd, "SF:Return Document Inf.

zjob_output_info TYPE ssfcrescl, "SF:Return value at end of

  • form printing

i_control TYPE ssfctrlop ,

i_output_options TYPE ssfcompop,

zjob_output_opts TYPE ssfcresop. "SF:Return value at start

  • of form printing

*This internal table is used for storing Document Segment: Material

DATA: BEGIN OF i_mseg.

INCLUDE STRUCTURE mseg.

DATA: END OF i_mseg.

  • This internal table is used for storing Header: Material Document

DATA: BEGIN OF i_mkpf.

INCLUDE STRUCTURE mkpf.

DATA: END OF i_mkpf.

*Variables

DATA flag(1) TYPE c.

DATA: vfile TYPE string.

*----


*

  • SELECTION-SCREEN *

*----


*

SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-000.

PARAMETERS:p_mblnr TYPE mkpf-mblnr OBLIGATORY MATCHCODE OBJECT zganesh,

p_mjahr TYPE mkpf-mjahr OBLIGATORY MATCHCODE OBJECT zganesh1,

p_zeile TYPE mseg-zeile OBLIGATORY MATCHCODE OBJECT zganesh2.

SELECTION-SCREEN END OF BLOCK b1.

SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text-001.

SELECTION-SCREEN BEGIN OF LINE.

SELECTION-SCREEN POSITION 10.

PARAMETER:r_disp RADIOBUTTON GROUP g1 USER-COMMAND u1 DEFAULT 'X'.

SELECTION-SCREEN:COMMENT 15(10) text-002 .

SELECTION-SCREEN END OF LINE.

SELECTION-SCREEN BEGIN OF LINE.

SELECTION-SCREEN POSITION 10.

PARAMETERS: r_down RADIOBUTTON GROUP g1.

SELECTION-SCREEN:COMMENT 15(10) text-003.

*PARAMETERS: v_file LIKE rlgrap-filename .

*SELECTION-SCREEN:COMMENT 70(50) text-005.

SELECTION-SCREEN END OF LINE.

SELECTION-SCREEN BEGIN OF LINE.

SELECTION-SCREEN POSITION 10.

PARAMETERS: r_print RADIOBUTTON GROUP g1 .

SELECTION-SCREEN:COMMENT 15(10) text-004.

SELECTION-SCREEN END OF LINE.

PARAMETERS: v_file LIKE rlgrap-filename MODIF ID g12.

SELECTION-SCREEN END OF BLOCK b2.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR v_file.

DATA : wlv_field_name LIKE dynpread-fieldname,

wlv_file_name LIKE ibipparms-path.

wlv_field_name = v_file.

CALL FUNCTION 'F4_FILENAME'

EXPORTING

field_name = wlv_field_name

IMPORTING

file_name = wlv_file_name.

IF sy-subrc EQ 0.

vfile = wlv_file_name.

v_file = wlv_file_name.

ENDIF.

AT SELECTION-SCREEN OUTPUT.

LOOP AT SCREEN.

IF screen-name = 'V_FILE'.

IF r_disp EQ 'X' OR r_print EQ 'X'.

screen-input = 0.

ELSE.

screen-input = '1'.

ENDIF.

MODIFY SCREEN.

ENDIF.

ENDLOOP.

*----


*

  • START-OF-SELECTION EVENT *

*----


*

START-OF-SELECTION.

*----


*

  • CALLING CONVERSION FUNCTION MODULE 'CONVERSION_EXIT_ALPHA_INPUT' *

*----


*

*Conversion function module for appending 00 befor MBLNR FIELD

CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'

EXPORTING

input = p_mblnr

IMPORTING

output = p_mblnr.

  • Call subroutine for fetching data from database

PERFORM get_data.

*----


*

  • END-OF-SELECTION EVENT *

*----


*

END-OF-SELECTION.

  • Call subroutine for calling and processing smartform

PERFORM call_smartform.

*&----


*

*& Form get_data

*&----


*

  • Subroutine for fetching data from database

*----


*

FORM get_data .

  • Fetching data from MKPF table with using parameters MBLNR and MJAHR

SELECT SINGLE * FROM mkpf

INTO i_mkpf

WHERE mblnr = p_mblnr

AND mjahr = p_mjahr.

IF sy-subrc EQ 0.

  • Fetching data from MSEG with using parameters MBLNR,ZEILE and MJAHR

SELECT SINGLE * FROM mseg

INTO i_mseg

WHERE mblnr = i_mkpf-mblnr

AND mjahr = i_mkpf-mjahr

AND zeile = p_zeile.

IF sy-subrc NE 0.

CLEAR i_mseg.

ENDIF.

ELSE.

MESSAGE i000.

EXIT.

ENDIF.

ENDFORM. " get_data

*&----


*

*& Form call_smartform

*&----


*

  • Subroutine for calling smartform

*----


*

FORM call_smartform .

  • Local template used in the processing output of smartform

TYPES: BEGIN OF lt_ztable,

mandt TYPE sy-mandt,

mblnr TYPE mseg-mblnr,

flag(1) TYPE c,

END OF lt_ztable.

CONSTANTS: c_x(1) TYPE c VALUE 'X'.

  • Workarea

DATA: lw_ztable TYPE lt_ztable.

*Variable used in the smartform

DATA: lv_form(30) TYPE c,

lv_fm_name(30) TYPE c.

lv_form = 'ZPTPFRM202L_POGR'.

*Calling function module SSF_FUNCTION_MODULE_NAME which gives new name

*to the function module that will generated by smartform.

CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'

EXPORTING

formname = lv_form

IMPORTING

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

*Calling function module that will be generated by smartform

IF r_disp = c_x.

i_output_options-tdimmed = space.

i_output_options-tdnewid = c_x.

i_output_options-tddest = 'LOCL'.

i_control-no_dialog = 'X'.

i_control-preview = 'X'.

ELSEIF r_print = c_x.

i_output_options-tdimmed = c_x.

i_output_options-tddest = 'LOCL'.

i_control-no_dialog = c_x.

ELSE.

i_output_options-tdimmed = space.

i_output_options-tdnewid = c_x.

i_output_options-tddest = 'LOCL'.

i_control-getotf = 'X'.

i_control-preview = space.

i_control-no_dialog = c_x.

flag = c_x.

ENDIF.

CALL FUNCTION lv_fm_name

EXPORTING

control_parameters = i_control

output_options = i_output_options

user_settings = space

zmkpf = i_mkpf

zmseg = i_mseg

IMPORTING

document_output_info = zdoc_output_info

job_output_info = zjob_output_info

job_output_options = zjob_output_opts

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.

  • Modify the database table if it found the print command

IF zjob_output_opts-tdpreview NE c_x.

lw_ztable-mandt = sy-mandt.

lw_ztable-mblnr = p_mblnr.

lw_ztable-flag = c_x.

MODIFY zgr_table FROM lw_ztable.

CLEAR lw_ztable.

ENDIF.

IF flag EQ c_x.

DATA: li_lines LIKE tline OCCURS 100 WITH HEADER LINE.

DATA: lv_file TYPE string,

lbin_fsiz TYPE i.

lv_file = v_file.

CALL FUNCTION 'CONVERT_OTF'

EXPORTING

format = 'PDF'

IMPORTING

bin_filesize = lbin_fsiz

TABLES

otf = zjob_output_info-otfdata

lines = li_lines

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

filename = lv_file

filetype = 'BIN'

TABLES

data_tab = li_lines

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.

ENDIF.

ENDFORM. " call_smartform

Check this sample report

REPORT Ztest_SEND_SMARTFORMS .

  • 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 = 'ZZZ_TEST1'

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.

  • Fehlerhandling

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

  • wa_doc_chng-doc_size = ( v_lines_txt - 1 ) * 255 + strlen( i_objtxt )

*.

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.

  • Länge des Attachment ermitteln

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 = ‘nagarajt44@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'

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.

Hope this resolves your query.

Reward all the helpful answers.

Regards