cancel
Showing results for 
Search instead for 
Did you mean: 

Regardin E-Mail from Smartform

Former Member
0 Kudos

Hi SAP Gurus,

I have developed a smartform for PO.Now it has two radio buttons in the input screen,

one for printing

second for downloading into pdf,

now i got the requirement that ,

I have to add a new radio button 'E-Mail ' on the screen , when the user selects the radio button and executes the form , a mail should be sent to that user with that PDFform.

Plz help!

Regards Pavan.

Accepted Solutions (1)

Accepted Solutions (1)

venkat_o
Active Contributor
0 Kudos

Hi Pavan,

Check the following working program.

REPORT  ztest_smartform.
DATA:it_nfal      TYPE nfal OCCURS 0 WITH HEADER LINE.
DATA:fm_name      TYPE rs38l_fnam.
DATA:ssfctrlop    TYPE ssfctrlop.
DATA:ssfcompop    TYPE ssfcompop.
DATA:it_otf_data  TYPE ssfcrescl.
DATA:it_otf_final TYPE itcoo OCCURS 0 WITH HEADER LINE.
DATA:bin_filesize TYPE i.
DATA:it_pdfdata   TYPE TABLE OF tline.
DATA:it_pdf       TYPE TABLE OF solisti1.
*--------------------------------------------------------*
"  Mail related declarations
*--------------------------------------------------------*
"Variables
DATA :
     g_sent_to_all   TYPE sonv-flag,
     g_tab_lines     TYPE i.
"Types
TYPES:
     t_document_data  TYPE  sodocchgi1,
     t_packing_list   TYPE  sopcklsti1,
     t_attachment     TYPE  solisti1,
     t_body_msg       TYPE  solisti1,
     t_receivers      TYPE  somlreci1,
     t_pdf            TYPE  tline.
"Workareas
DATA :
     w_document_data  TYPE  t_document_data,
     w_packing_list   TYPE  t_packing_list,
     w_attachment     TYPE  t_attachment,
     w_body_msg       TYPE  t_body_msg,
     w_receivers      TYPE  t_receivers,
     w_pdf            TYPE  t_pdf.
"Internal Tables
DATA :
     i_document_data  TYPE STANDARD TABLE OF t_document_data,
     i_packing_list   TYPE STANDARD TABLE OF t_packing_list,
     i_attachment     TYPE STANDARD TABLE OF t_attachment,
     i_body_msg       TYPE STANDARD TABLE OF t_body_msg,
     i_receivers      TYPE STANDARD TABLE OF t_receivers,
     i_pdf            TYPE STANDARD TABLE OF t_pdf.
PARAMETERS p_mail TYPE char120.
*START-OF-SELECTION.
START-OF-SELECTION.
  "select data
  SELECT * FROM nfal INTO TABLE it_nfal UP TO 10 ROWS.

  ssfctrlop-no_dialog = 'X'.
  ssfctrlop-preview   = 'X'.
  ssfctrlop-getotf    = 'X'.

  ssfcompop-tddest = 'LP01'.
  "Get Function module name for given smartform
  CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
    EXPORTING
      formname = 'ZTEST_SMARTFORM'
    IMPORTING
      fm_name  = fm_name.
  "Call Smartform function module.
  CALL FUNCTION fm_name
    EXPORTING
      control_parameters = ssfctrlop
      output_options     = ssfcompop
    IMPORTING
      job_output_info    = it_otf_data
    TABLES
      it_nfal            = it_nfal.

<li> Continued

Answers (3)

Answers (3)

venkat_o
Active Contributor
0 Kudos

<li> from above

    "Write Packing List for Attachment
    w_packing_list-transf_bin = 'X'.
    w_packing_list-head_start = 1.
    w_packing_list-head_num   = 1.
    w_packing_list-body_start = 1.
    DESCRIBE TABLE it_pdf LINES w_packing_list-body_num.
    w_packing_list-doc_type   = 'PDF'.
    w_packing_list-obj_descr  = 'PDF Attachment'.
    w_packing_list-obj_name   = 'PDF_ATTACHMENT'.
    w_packing_list-doc_size   = w_packing_list-body_num * 255.
    APPEND w_packing_list TO i_packing_list.
    CLEAR  w_packing_list.

    "Fill the document data and get size of attachment
    w_document_data-obj_langu  = sy-langu.
    READ TABLE it_pdf INTO w_pdf INDEX g_tab_lines.
    w_document_data-doc_size = ( g_tab_lines - 1 ) * 255 + STRLEN( w_attachment ).

    "Receivers List.
    w_receivers-rec_type   = 'U'."Internet address
    w_receivers-receiver   = p_mail.
    w_receivers-com_type   = 'INT'.
    w_receivers-notif_del  = 'X'.
    w_receivers-notif_ndel = 'X'.
    APPEND w_receivers TO i_receivers .
    CLEAR:w_receivers.

    "Function module to send mail to Recipients
    CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
      EXPORTING
        document_data              = w_document_data
        put_in_outbox              = 'X'
        commit_work                = 'X'
      IMPORTING
        sent_to_all                = g_sent_to_all
      TABLES
        packing_list               = i_packing_list
        contents_bin               = it_pdf
        contents_txt               = i_body_msg
        receivers                  = i_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 .
      MESSAGE i303(me) WITH 'Mail has been Successfully Sent.'.
    ENDIF.
  ENDIF.

Thanks..venkat

venkat_o
Active Contributor
0 Kudos

<li> from above

************appending the otf data into the final table**********************
  it_otf_final[] = it_otf_data-otfdata[].

************ converting OTF data into pdf data**************************
  CALL FUNCTION 'CONVERT_OTF'
    EXPORTING
      format                = 'PDF'
    IMPORTING
      bin_filesize          = bin_filesize
*     bin_file              =
    TABLES
      otf                   = it_otf_final
      lines                 = it_pdfdata[]
    EXCEPTIONS
      err_max_linewidth     = 1
      err_format            = 2
      err_conv_not_possible = 3
      err_bad_otf           = 4
      OTHERS                = 5.
* To send data as email attachment, we need to have a table of SOLISTI1.
* This table contains line size of 255 characters. Below function module
* does the trick of changing the table from X character sized lines into
* any given Y character sized lines.
  REFRESH it_pdf[].

  CALL FUNCTION 'SX_TABLE_LINE_WIDTH_CHANGE'
    EXPORTING
      line_width_dst              = '255'
    TABLES
      content_in                  = it_pdfdata[]
      content_out                 = it_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 <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ELSE.
    "Subject of the mail.
    w_document_data-obj_name  = 'MAIL_TO_HEAD'.
    w_document_data-obj_descr = 'Regarding Mail Program by SAP ABAP'.

    "Body of the mail
    w_body_msg = 'This is body of mail msg.'.
    APPEND w_body_msg TO i_body_msg.
    CLEAR  w_body_msg.
    "Write Packing List for Body
    DESCRIBE TABLE i_body_msg LINES g_tab_lines.
    w_packing_list-head_start = 1.
    w_packing_list-head_num   = 0.
    w_packing_list-body_start = 1.
    w_packing_list-body_num   = g_tab_lines.
    w_packing_list-doc_type   = 'RAW'.
    APPEND w_packing_list TO i_packing_list.
    CLEAR  w_packing_list.

<li> Continued

BGarcia
Active Contributor
0 Kudos

Hi Pavan,

Maybe this WIKI article may help you:

https://wiki.sdn.sap.com/wiki/display/Snippets/SmartformasaPDFtoMailid

Kind regards,

Garcia

Former Member
0 Kudos

Thanks , But I am getting the error

Database error for <ADDR_PERS_COMP_COMM_GET> <0>

Regards ,

Pavan

knitinkumarsethy
Explorer
0 Kudos

HI,

first of all you check up with your basis guy, whether SMTP server is configured or not.

If configured then refer this code.

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

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

DATA: EMAIL_LINE1 TYPE STRING.

DATA: L_PARAB1 LIKE TLINE OCCURS 0 WITH HEADER LINE.

DATA: L_SUB1(20).

DATA: L_SUB2(50).

DATA: L_DATE(10).

DATA: L_NAME LIKE THEAD-TDNAME.

DATA: L_EKGRP LIKE EKKO-EKGRP.

DATA: WA_YMPIT_PUR_GRP LIKE YMPIT_PUR_GRP.

DATA: G_ORT01 LIKE KNA1-ORT01.

LOOP AT GT_FINAL.

L_EKGRP = GT_FINAL-EKGRP.

ENDLOOP.

*===============Calling The smartforms========================

CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'

EXPORTING

FORMNAME = 'YMPIL_RFQ'

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.

CLEAR W_CTRLOP.

CLEAR W_COMPOP.

W_CTRLOP-GETOTF = 'X'.

W_CTRLOP-NO_DIALOG = 'X'.

W_COMPOP-TDNOPREV = 'X'.

CALL FUNCTION FM_NAME

EXPORTING

CONTROL_PARAMETERS = W_CTRLOP

OUTPUT_OPTIONS = W_COMPOP

USER_SETTINGS = 'X'

G_EMAIL = 'Y'

IMPORTING

JOB_OUTPUT_INFO = W_RETURN

TABLES

GT_ITEM = GT_FINAL

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

****======================Read Mail Body========================

****ZFIL_RFQ_MAIL_BODY_PUNE

****ZFIL_RFQ_MAIL_BODY_RATN

CALL FUNCTION 'READ_TEXT'

EXPORTING

ID = 'ST'

LANGUAGE = SY-LANGU

NAME = L_NAME "'PO_MAIL_BODY_PUNE'

OBJECT = 'TEXT'

TABLES

LINES = L_PARAB1

EXCEPTIONS

ID = 1

LANGUAGE = 2

NAME = 3

NOT_FOUND = 4

OBJECT = 5

REFERENCE_CHECK = 6

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

LOOP AT L_PARAB1.

I_OBJTXT = L_PARAB1-TDLINE.

APPEND I_OBJTXT.

ENDLOOP.

*===================Mail Title=============================================

  • Create Message Body Title and Description

*I_OBJTXT = 'test with pdf-Attachment!'.

*APPEND I_OBJTXT.

L_SUB1 = 'FIL RFQ:'.

CONCATENATE L_SUB1 NAST-OBJKY INTO L_SUB2 SEPARATED BY SPACE.

DESCRIBE TABLE I_OBJTXT LINES V_LINES_TXT.

READ TABLE I_OBJTXT INDEX V_LINES_TXT.

WA_DOC_CHNG-OBJ_NAME = L_SUB2."'smartform'.

WA_DOC_CHNG-EXPIRY_DAT = SY-DATUM + 10.

WA_DOC_CHNG-OBJ_DESCR = L_SUB2."'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 = 'FIL_RFQ'.

I_OBJPACK-OBJ_DESCR = 'FIL_RFQ'.

APPEND I_OBJPACK.

CLEAR I_RECLIST.

I_RECLIST-RECEIVER = GT_FINAL-SMTP_ADDR. Email address

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.

After this code Go to se38.

Run the program RSCONN01.

Your email will be sent.