Skip to Content

Samrtform sending to mail as pdf attachment Issue

Hi all,

Please see my code for sending mail attachment of samrtform converted to PDF format using CONVERT_OTF function module .

CALL FUNCTION 'CONVERT_OTF'

EXPORTING

format = 'PDF'

max_linewidth = 132

  • ARCHIVE_INDEX = ' '

  • COPYNUMBER = 0

  • ASCII_BIDI_VIS2LOG = ' '

pdf_delete_otftab = ' '

IMPORTING

bin_filesize = v_binsize

  • BIN_FILE =

TABLES

otf = it_otf[]

lines = it_line[]

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

*Send converted pdf to email as attachment .

DATA :wa_buffer TYPE string, "To convert from 132 to 255

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

v_lines_txt TYPE i,

v_lines_bin TYPE i,

wa_doc_chng TYPE sodocchgi1,

w_data TYPE sodocchgi1,

wa_objhead TYPE soli_tab,

I_objbin type table of solix with header line.

data:objbin type table of solix with header line.

REFRESH: i_reclist,

i_objtxt,

i_objbin,

i_objpack.

CLEAR wa_objhead.

i_objbin[] = objbin[].

  • 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 = 'shishupal.reddy@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

contents_hex = i_objbin

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.

<b>I am getting sy-subrc = 3 and document could nto be send .</b>

Please provide me the correct place where iam commiting mistake in the above code .

Regards,

Add a comment
10|10000 characters needed characters exceeded

Related questions

4 Answers

  • author's profile photo Former Member
    Former Member
    Posted on Nov 30, 2007 at 11:55 AM

    Hi,

    The problem is this line.

    i_objpack-doc_type = 'PDF'. wrong,

    correct it to i_objpack-doc_type = 'OTF'.

    regards,

    Santosh Thorat

    Add a comment
    10|10000 characters needed characters exceeded

  • author's profile photo Former Member
    Former Member
    Posted on Dec 03, 2007 at 05:55 AM

    Procedure

    When we activate the Smartform the system generates a Function Module. The function module name we can get from Smartfrom screen from menubar

    “Environment => Function Module_Name” . In a report we can get this Function module name by calling a Function Module standard SSF_FUNCTION_MODULE_NAME. This function module at runtime calls the FM generated by smartform, which in turn is then used to pass data from the report to Smartform. In the report given below the FM generated is “ /1BCDWB/SF00000152 ”. In this FM we can see CONTROL_PARAMETERS in import tab. This is of type SSFCTRLOP. We need to set the GETOTF of this to be ‘X’. Setting this field will activate the OTF field in smartform.

    In export tab of the FM generated by smartform we can see a parameter JOB_OUTPUT_INFO which is of type SSFCRESCL. The SSFCRESCL is a structure of having one of fields as OTFDATA. OTFDATA in turn is a table of type ITCOO. ITCOO has two fields TDPRINTCOM and TDPRINTPAR. TDPRINTCOM represents command line of OTF format data and TDPRINTPAR contains command parameters of OTF format data.

    In every Smartform output in OTF format, TDPRINTCOM begins and ends with ‘//’. ‘EP’ represents the end-of-page value for TDPRINTCOM field.

    In addition we need to set few fields at the place where we call this FM(generated by smartform) in our program. While calling this FM we should set control_parameters, output_options, user_settings and job_putput_info fields as shown in program.

    Once these settings are done we can call Function Module CONVERT_OTF to convert the OTF data of smartfrom output to PDF data format. Once these are done we can call method “cl_gui_fronted_services=>file_save_dialog” to specify the directory path where we want to save the output PDF file. After this we can call Function Module GUI_DOWNLOAD to download the PDF file on our local system.

    Here is a sample code of program to perform the function.

    SAMPLE CODE

    &----


    *& Report ZAMIT_SMART_FORM_PDF *

    *& *

    &----


    *& *

    *& *

    &----


    REPORT ZAMIT_SMART_FORM_PDF .

    data: carr_id type sbook-carrid,

    cparam type ssfctrlop,

    outop type ssfcompop,

    fm_name type rs38l_fnam.

    DATA: tab_otf_data TYPE ssfcrescl,

    pdf_tab LIKE tline OCCURS 0 WITH HEADER LINE,

    tab_otf_final TYPE itcoo OCCURS 0 WITH HEADER LINE,

    file_size TYPE i,

    bin_filesize TYPE i,

    FILE_NAME type string,

    File_path type string,

    FULL_PATH type string.

    parameter: p_custid type scustom-id default 1.

    select-options: s_carrid for carr_id default 'LH' to 'LH'.

    parameter: p_form type tdsfname default 'ZAMIT_SMART_FORM'.

    data: customer type scustom,

    bookings type ty_bookings,

    connections type ty_connections.

    start-of-selection.

    • suppressing the dialog box for print preview****************************

    outop-tddest = 'LP01'.

    cparam-no_dialog = 'X'.

    cparam-preview = SPACE.

    cparam-getotf = 'X'.

    select single * from scustom into customer where id = p_custid.

    check sy-subrc = 0.

    select * from sbook into table bookings

    where customid = p_custid

    and carrid in s_carrid

    order by primary key.

    select * from spfli into table connections

    for all entries in bookings

    where carrid = bookings-carrid

    and connid = bookings-connid

    order by primary key.

    call function 'SSF_FUNCTION_MODULE_NAME'

    exporting formname = p_form

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

    exit.

    endif.

    • calling the generated function module

    call function fm_name

    exporting

    • archive_index =

    • archive_parameters =

    control_parameters = cparam

    • mail_appl_obj =

    • mail_recipient =

    • mail_sender =

    output_options = outop

    user_settings = SPACE

    bookings = bookings

    customer = customer

    connections = connections

    importing

    • document_output_info =

    job_output_info = tab_otf_data

    • job_output_options =

    exceptions formatting_error = 1

    internal_error = 2

    send_error = 3

    user_canceled = 4

    others = 5.

    if sy-subrc <> 0.

    • error handling

    message id sy-msgid type sy-msgty number sy-msgno

    with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

    endif.

    tab_otf_final[] = tab_otf_data-otfdata[].

    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.

    CALL METHOD cl_gui_frontend_services=>file_save_dialog

    • EXPORTING

    • WINDOW_TITLE =

    • DEFAULT_EXTENSION =

    • DEFAULT_FILE_NAME =

    • FILE_FILTER =

    • INITIAL_DIRECTORY =

    • WITH_ENCODING =

    • PROMPT_ON_OVERWRITE = 'X'

    CHANGING

    filename = FILE_NAME

    path = FILE_PATH

    fullpath = FULL_PATH

    • USER_ACTION =

    • FILE_ENCODING =

    • EXCEPTIONS

    • CNTL_ERROR = 1

    • ERROR_NO_GUI = 2

    • NOT_SUPPORTED_BY_GUI = 3

    • others = 4

    .

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

    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

    .

    IF sy-subrc <> 0.

    ENDIF.

    refer this thread

    conversion of smartform to pdf souce code its urgent pls

    also refer these

    https://www.sdn.sap.com/irj/sdn/advancedsearch?query=smartform%20to%20pdf%20%20%20&cat=sdn_forums

    Add a comment
    10|10000 characters needed characters exceeded

  • author's profile photo Former Member
    Former Member
    Posted on Dec 03, 2007 at 09:13 AM

    Here is the code to send the Smartform to mail as PDF attachment.

    &----


    *& Report ZTEST_NREDDY_PDF_MAIL

    *&

    &----


    REPORT ZTEST_NREDDY_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.

    Add a comment
    10|10000 characters needed characters exceeded

  • Posted on Dec 03, 2007 at 09:54 AM

    Hi all,

    Please tell me where iam comiting mistake int he code posted .

    regards,

    Add a comment
    10|10000 characters needed characters exceeded

    • HI ,

      Please see my code and tell me where iam going wrong .

      Ia m getting Document could not send error withthis .i have taken the code from sdn and trying to send samrtform as email attachment .

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

      *APPEND w_doc_data.

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

      thanks for spending your valuable time on this .

      very urgent

      thanks

Before answering

You should only submit an answer when you are proposing a solution to the poster's problem. If you want the poster to clarify the question or provide more information, please leave a comment instead, requesting additional details. When answering, please include specifics, such as step-by-step instructions, context for the solution, and links to useful resources. Also, please make sure that you answer complies with our Rules of Engagement.
You must be Logged in to submit an answer.

Up to 10 attachments (including images) can be used with a maximum of 1.0 MB each and 10.5 MB total.