Use this example as a basis for your processing program, if you are creating it from scratch. Please see the instructions in
Writing ABAP Processing Program for Mail-to-Fax (start from step 5 in the instructions) to see how to modify this example to suit your needs.
NOTE: This example does not contain a full processing program, rather it starts from the FORM_CLOSE
statement. Take the code up to the FORM_CLOSE
statement from an existing program, preferably one used for regular printing.
*---------------------------------------------------------------------*
* FORM FORM_CLOSE *
*---------------------------------------------------------------------*
* End of printing the form *
*---------------------------------------------------------------------*
FORM form_close.
*>>>>>>>>>>>>>>>>>>>>>>>>>>>> EFAX/EMAIL our PDF : data declaration
DATA : BEGIN OF lt_otf OCCURS 0.
INCLUDE STRUCTURE itcoo.
DATA : END OF lt_otf.
DATA : BEGIN OF lt_doctab OCCURS 0.
INCLUDE STRUCTURE docs.
DATA : END OF lt_doctab.
DATA : BEGIN OF lt_pdfdata OCCURS 0.
INCLUDE STRUCTURE tline.
DATA : END OF lt_pdfdata.
DATA : v_bin.
*<<<<<<<<<<<<<<<<<<<<<<<<<<<
CALL FUNCTION 'CLOSE_FORM'
TABLES
otfdata = lt_otf
EXCEPTIONS
unopened = 1
bad_pageformat_for_print = 2
send_error = 3
spool_error = 4
codepage = 5
OTHERS = 6.
ENDFORM. "FORM_CLOSE
*---------------------------------------------------
* FORM MAIL_OBJECT *
*---------------------------------------------------------
* This routine receives OTF data. OTF data is converted to PDF
* format and send to the Partner's email address
*---------------------------------------------------------
FORM mail_object TABLES otf_data STRUCTURE itcoo .
DATA: pdf_size TYPE i, " PDF Size
pdf_itab_size TYPE i, " Attachment size
mailtxt_size TYPE i, " Text in mail size
l_vbeln LIKE vbdka-vbeln. " Order Doc
DATA:
it_mailtxt LIKE solisti1 OCCURS 0 WITH HEADER LINE, " Mail Text
it_pdf TYPE TABLE OF tline WITH HEADER LINE, " OTF output
it_mailpack LIKE sopcklsti1 OCCURS 0 WITH HEADER LINE, " Dist details
it_mailhead LIKE solisti1 OCCURS 1 WITH HEADER LINE," Header data
it_reclist LIKE somlreci1 OCCURS 0 WITH HEADER LINE, " Rec List
it_pdfdata LIKE solix OCCURS 0 WITH HEADER LINE. " Attachment data
DATA: it_doc_att LIKE sodocchgi1. " Attri of new doc
DATA: BEGIN OF it_pdfout OCCURS 0, " PDF in 255 length
tline TYPE char255,
END OF it_pdfout.
* Sales doc and Customer
DATA: BEGIN OF i_vbeln OCCURS 0,
vbeln LIKE vbpa-vbeln, " Sales Document
adrnr LIKE vbpa-adrnr, " Customer
END OF i_vbeln.
* Sender Address no and SMTP address
DATA: BEGIN OF i_addrs OCCURS 0,
addrnumber LIKE adr6-smtp_addr,
smtp_addr LIKE adr6-smtp_addr,
END OF i_addrs.
DATA: otfdata LIKE soli OCCURS 0 WITH HEADER LINE.
DATA: pdfdata LIKE solisti1 OCCURS 0 WITH HEADER LINE.
DATA: pdf_filesize LIKE sood-objlen.
DATA: bin_filesize TYPE i.
DATA: w_otf TYPE itcoo. "For OTF
DATA: w_pdf TYPE solisti1. "For PDF
DATA: i_content_txt TYPE soli_tab. "Content
DATA: w_transfer_bin TYPE sx_boolean. "Content
DATA: i_content_bin TYPE solix_tab, "Content
i_objhead TYPE soli_tab.
DATA: v_len_in TYPE so_obj_len,
v_size TYPE i.
* Convert OTF to PDF
LOOP AT otf_data INTO w_otf.
CONCATENATE w_otf-tdprintcom w_otf-tdprintpar
INTO w_pdf.
APPEND w_pdf TO i_content_txt.
ENDLOOP.
CALL FUNCTION 'SX_OBJECT_CONVERT_OTF_PDF'
EXPORTING
format_src = 'OTF'
format_dst = 'PDF'
CHANGING
transfer_bin = w_transfer_bin
content_txt = i_content_txt
content_bin = i_content_bin
objhead = i_objhead
len = v_len_in
EXCEPTIONS
err_conv_failed = 1
OTHERS = 2.
v_size = v_len_in.
pdf_itab_size = v_size.
it_pdfout[] = it_pdf[].
* Create the PDF File
CLEAR it_pdfdata.
REFRESH it_pdfdata.
LOOP AT it_pdfout.
MOVE it_pdfout-tline TO it_pdfdata-line.
APPEND it_pdfdata.
CLEAR it_pdfdata.
ENDLOOP.
*---------------------------------------------------------
* EMAIL BODY TEXT STARTS HERE
it_mailtxt-line = 'ORDER ACKNOWLEDGEMENT'.
APPEND it_mailtxt.
* empty line
CLEAR it_mailtxt-line. APPEND it_mailtxt.
it_mailtxt-line = 'Dear customer,'.
APPEND it_mailtxt.
it_mailtxt-line = 'We received your order. ' &
'Thank you for your confidence.'.
APPEND it_mailtxt.
it_mailtxt-line = 'Attached you will find our confirmation.' &
' '.
APPEND it_mailtxt.
* empty line x 3
CLEAR it_mailtxt-line. APPEND it_mailtxt.
CLEAR it_mailtxt-line. APPEND it_mailtxt.
CLEAR it_mailtxt-line. APPEND it_mailtxt.
APPEND it_mailtxt.
it_mailtxt-line = 'Best Regards'.
APPEND it_mailtxt.
DESCRIBE TABLE it_mailtxt LINES mailtxt_size.
* EMAIL BODY TEXT ENDS HERE
*---------------------------------------------------------
* Document Number for Output
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
EXPORTING
input = vbdka-vbeln
IMPORTING
output = l_vbeln.
* Attributes of new doc
CONCATENATE 'Email to InterFAX' l_vbeln
INTO it_doc_att-obj_descr SEPARATED BY space.
it_doc_att-sensitivty = 'F'.
it_doc_att-doc_size = mailtxt_size * 255.
* Create Pack to text in mail body.
CLEAR it_mailpack-transf_bin.
it_mailpack-head_start = 1.
it_mailpack-head_num = 0.
it_mailpack-body_start = 1.
it_mailpack-body_num = mailtxt_size.
it_mailpack-doc_type = 'RAW'.
APPEND it_mailpack.
* Create Pack to PDF Attach.
it_mailpack-transf_bin = 'X'.
it_mailpack-head_start = 1.
it_mailpack-head_num = 1.
it_mailpack-body_start = 1.
it_mailpack-body_num = pdf_itab_size.
it_mailpack-doc_type = 'PDF'.
CONCATENATE l_vbeln '.pdf' INTO it_mailpack-obj_name.
CONCATENATE 'Order' space l_vbeln INTO it_mailpack-obj_descr.
it_mailpack-doc_size = pdf_itab_size * 255.
APPEND it_mailpack.
*Get email addresses based on Sales document.
SELECT vbeln adrnr INTO TABLE i_vbeln
FROM vbpa
WHERE vbeln = vbdka-vbeln AND
parvw = nast-parvw.
IF NOT i_vbeln[] IS INITIAL.
SELECT addrnumber extension2 INTO TABLE i_addrs
FROM adrc FOR ALL ENTRIES IN i_vbeln
WHERE addrnumber = i_vbeln-adrnr AND
extension2 NE space.
ENDIF.
IF i_addrs[] IS NOT INITIAL.
LOOP AT i_addrs.
it_reclist-receiver = i_addrs-smtp_addr.
it_reclist-express = 'X'.
it_reclist-rec_type = 'U'.
it_reclist-notif_del = 'X'. " request delivery notification
it_reclist-notif_ndel = 'X'. " request not delivered notification
APPEND it_reclist.
CLEAR: i_addrs.
ENDLOOP.
ELSE.
MESSAGE e999(re) WITH 'Email not found !'.
EXIT.
ENDIF.
* Call FM to send email
CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
EXPORTING
document_data = it_doc_att
put_in_outbox = 'X'
TABLES
packing_list = it_mailpack
object_header = it_mailhead
contents_txt = it_mailtxt
contents_hex = i_content_bin" it_pdfdata
receivers = it_reclist
EXCEPTIONS
too_many_receivers = 1
document_not_sent = 2
document_type_not_exist = 3
operation_no_authorizationfiltered = 4
parameter_error = 5
x_error = 6
enqueue_error = 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.
ENDFORM. " MAIL_OBJECT