cancel
Showing results for 
Search instead for 
Did you mean: 

How to send output by mail?

Former Member
0 Kudos

Hi Experts,

Current output type in our system:

Document: SD delivey note

Output type: LD00

Medium: 1

Form: Smartforms.

Now we are printing delivery note by LD00 and Medium 1.

In the future, we need to send ducument output to customer by mail, format still as original smartforms.

Would you please give me a guide line to do this?

Thank you.

Richard.

Accepted Solutions (0)

Answers (4)

Answers (4)

Former Member
0 Kudos

Hi All,

Thank you for your replys.

I created a new output type named ZMAL using Medium 5.

Also created a print program ZDELNOTE_TW_MAIL and assign it to ZMAL.

This program is based on the old print program used for paper printing.

I add below logic to this program.


CALL FUNCTION LF_FM_NAME
IMPORTING
                 JOB_OUTPUT_INFO = W_RETURN

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.
   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 = 'aaa aaa.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'
           SENDER_ADDRESS                   = 'xxx  xxx.com'
   SENDER_ADDRESS_TYPE              = 'SMTP'

      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 end
  ENDIF.

But when I use ZMAL to test, the program didn't stop in print program, and in the log below message diplayed;

Object 0080193139

Output type: DN TW-mail

Processing log for program ZDELNOTE_TW_MAIL routine ENTRY

Error during reading T001G (Return code 4)

Would anybody help me out?

Thank you.

Richard.

nabheetscn
Active Contributor
0 Kudos

Hi

We have implemented it in our various projects. The best approach is as follow.

In case you can have a printout/fax/email etc there is no point in creating a new output type and driver for each medium. Secondly just create one output type and attach your driver and subroutine to it. Thirdly in NAST structure you will come to know from a field ' medium' that whether user wants an email or print. Based on it you can trigger your code. It will a small code which you have to write and no need to convert OTF to PDF. SAP standard peovides this functionality of emailing and all.

Please let me know if you want the sample code to implement the same.

Nabheet

Former Member
0 Kudos

Hello Nabheet,

I got the requirement to send the sales order as the Pdf attachment in the Email. Rightnow i m using the technique of converting OTF to PDF and sending email using the function module.

As you suggested, in the above post if we able to do in the better way then i can use that itself.

So provide sample code to implement the same. 

former_member193284
Active Participant
0 Kudos

Hi Richard,

you need to do following things to send output as an email.

The output type should have medium 5. thats to send an email. Along with this you need to check following two things.

if you are using a copy of a standard program it should have code to send an email. Then you just need to configure following output type with medium '5' to send an email.

If you dont have code to send it as an email you can use FM to send it as an email.

you can use following FM if its an adobe form.

CALL FUNCTION 'SD_PDF_SEND_DATA'

EXPORTING

iv_device = p_w_device

iv_email_subject = w_lv_subject

it_email_text = w_mail_text

is_main_data = p_wa_fp_formoutput

iv_language = w_langu

is_address = w_ls_address

IMPORTING

ev_send_to_all = w_lv_send_to_all

EXCEPTIONS

exc_document = 1

exc_send_request = 2

exc_address = 3

OTHERS = 4.

Else for smart form you need to convert it to PDF format first and send it as an email. Refer below code.

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.

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

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

Edited by: Sumit Naik on Oct 13, 2010 11:20 PM

Former Member
0 Kudos

Hi Sumit,

Would you please have a look at my code above and inform me where is wrong?

Thank you.

Richard

former_member193284
Active Participant
0 Kudos

Hi Rich,

Couple of things i would suggest you here..

Check the name of the Entry routine in NACE for the output type you have configured? you need to create same form rountine in your print program...

Refer below example.

The form routine entry_neu(This can be any name) should be configured in NACE... and your entire logic should reside in this form routine.

Put a break point in this routine and execute your application in foreground in background it will not stop... if you want to debug it in background...Put a endless loop in this form routine. Then go to SM50 and debug it from there...

*Endless loop.

Data A type i.

Do.

if A = '2'.

exit.

endif.

Enddo

&----


*& Form adobe_entry_neu

&----


  • Entry Form to call Contract Form

----


  • -->ENT_RETCO text

  • -->ENT_SCREEN text

----


FORM entry_neu USING ent_retco LIKE sy-subrc

ent_screen TYPE c.

*Clearing Work Areas and internal Table

CLEAR: w_formname,wa_function.

  • Fetch contract data

PERFORM z_get_data.

  • Print the form

IF sy-subrc = 0.

PERFORM z_print_form CHANGING ent_retco.

ENDIF.

ENDFORM. " entry_neu

aidan_black
Active Contributor
0 Kudos

Hi,

In general, to send a Smartform as an email PDF attachment, when calling the function module of the Smartform, the application print program needs to set CONTROL_PARAMETERS-DEVICE = 'MAIL' and the correspomding mail parameters.

Then if the Sapconnect node is defined correctly you can create emails in PDF format directly from the application. There is more information in the Smrtforms online documentation.(see link below)

http://help.sap.com/saphelp_470/helpdata/en/a9/de6838abce021ae10000009b38f842/frameset.htm -> Form Output -> Output Media

Regards,

Aidan

brad_bohn
Active Contributor
0 Kudos

In general, to send a Smartform as an email PDF attachment, when calling the function module of the Smartform, the application print program needs to set CONTROL_PARAMETERS-DEVICE = 'MAIL' and the correspomding mail parameters

True, but it's a very old and inflexible format for sending mails. I would opt for a more customized approach with CL_BCS. To the poster, there must be thousands of forum posts with code, blogs, wikis, etc. regarding this topic on this site and others - did you search? You might want to invest some time in that...

Former Member
0 Kudos

Hi,

Change the medium to 5: External Send,

Get help form your BASIS team to configure in txn. SCOT, SMTP settings

Regards

GK..

Edited by: Gnana Kumar on Oct 13, 2010 1:01 PM

Edited by: Gnana Kumar on Oct 13, 2010 1:02 PM