on 07-11-2007 7:50 PM
Hi,
I need to send an error log(80 character with multiple lines) to user's internet mail id using SMARFORM. I like to know whether any Standard smartform i can use for this?
Thanks
Sa_R
Gabriel,
Thanks for your reply.
In your second thread , the code you pasted is not readable, can you please repaste the same.
Thanks
Sa_R
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Hi,
My email id arsmony@rediffmail.com.
Points awarded .
Thanks
Sa_R
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Hi,
Check this link.
https://www.sdn.sap.com/irj/sdn/wiki?path=/display/snippets/smartformtoMailasPDF+attachment&
Regards
Aneesh.
Hello Again
you can do it also like this on smartforms:
Notice that you have to talk with your basis team in order to be able to send external mails.
REPORT ymail2.
DATA:
tablas
et_return TYPE bapiret2_tab,
receivers TYPE somlreci1 OCCURS 0 WITH HEADER LINE , "receivers
vriables
iv_smartform TYPE tdsfname,
send_partner TYPE bu_partner, "from address
mail_subject TYPE so_obj_des.
send_partner = 'gpulido'.
MAIL_SUBJECT = 'TEST FORM MADE IN SMARTFORM'.
receivers-receiver = 'bgiraldo'.
receivers-rec_type = 'B'.
APPEND receivers.
receivers-receiver = 'gabe_pu@hotmail.com'.
receivers-rec_type = 'U'.
APPEND receivers.
receivers-receiver = 'gpulido'.
receivers-rec_type = 'B'.
APPEND receivers.
iv_smartform = 'YSEND_MAIL'.
PERFORM send_smartform_html_email
TABLES et_return receivers
USING iv_smartform send_partner mail_subject .
WRITE 'done?'.
&----
*& Form SEND_SMARTFORM_HTML_EMAIL
&----
RETREIVES CONTENT FROM SMARTFORM AND SENDS EMAIL TO THE RECEIVERS
----
-->ET_RETURN ERROR OR INFORMATIONAL MESSAGES
-->RECEIVERS EMAIL RECEPIENTS
-->FORM_NAME FORM NAME
-->MAIL_SUBJECT EMAIL SUBJECT
----
FORM send_smartform_html_email
TABLES
et_return TYPE bapiret2_tab
receivers STRUCTURE somlreci1 "receivers
USING
iv_smartform TYPE tdsfname
send_partner TYPE bu_partner "from address
mail_subject TYPE so_obj_des.
DATA: control_parameters TYPE ssfctrlop,
output_options TYPE ssfcompop,
document_output_info TYPE ssfcrespd,
job_output_info TYPE ssfcrescl,
job_output_options TYPE ssfcresop,
xsfparam_line TYPE ssfxsfp,
p_html TYPE trfresult,
p_graphics TYPE tsf_xsf_gr,
form_name TYPE rs38l_fnam. " generated function module name
DATA: wa_return TYPE bapiret2.
CONSTANTS: c_gr_dir TYPE tdtext VALUE 'MYGRAPHICS/'. "#EC NOTEXT
*SET SMARTFORM OUTPUT OPTIONS
output_options-xsfcmode = 'X'. "#EC NOTEXT
output_options-xsf = 'X'. "#EC NOTEXT
output_options-xsfoutmode = 'A'. "#EC NOTEXT
output_options-xsfformat = 'X'. "#EC NOTEXT
CLEAR output_options-xsfoutdev.
xsfparam_line-name = 'GRAPHICS'. "#EC NOTEXT
xsfparam_line-value = 'EXTRACT'. "#EC NOTEXT
APPEND xsfparam_line TO output_options-xsfpars.
xsfparam_line-name = 'GRAPHICS-DIRECTORY'. "#EC NOTEXT
xsfparam_line-value = c_gr_dir.
APPEND xsfparam_line TO output_options-xsfpars.
xsfparam_line-name = 'CONTENT-ID'. "#EC NOTEXT
xsfparam_line-value = 'ENABLE'. "#EC NOTEXT
APPEND xsfparam_line TO output_options-xsfpars.
SILENT MODE ON
output_options-tdimmed = space.
output_options-tdnewid = space.
control_parameters-no_dialog = 'X'. "#EC NOTEXT
Get the generated function name of the smartform
CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME' "#EC NOTEXT
EXPORTING
formname = iv_smartform
IMPORTING
fm_name = form_name
EXCEPTIONS
no_form = 1
no_function_module = 2
OTHERS = 3.
IF sy-subrc <> 0.
Error receiving the generated function module
CLEAR wa_return.
BREAK gpulido.
MESSAGE E005 WITH IV_SMARTFORM INTO WA_RETURN-MESSAGE. gpulido
WRITE /'ERROR 1'.
wa_return-type = 'E'. "#EC NOTEXT
INSERT wa_return INTO TABLE et_return.
EXIT.
ENDIF.
Get the smartform content
CALL FUNCTION form_name
EXPORTING
control_parameters = control_parameters
output_options = output_options
*pass other application specific parameters (eg order number, items ).
IMPORTING
document_output_info = document_output_info
job_output_info = job_output_info
job_output_options = job_output_options
EXCEPTIONS
formatting_error
=1
internal_error
=2
send_error
=3
user_canceled = 4.
IF sy-subrc <> 0.
FAILED TO GET CONTENT FROM SMARTFORM
CLEAR wa_return.
MESSAGE E012 WITH FORM_NAME SY-SUBRC INTO gpulido
WRITE /'FAILED TO GET CONTENT FROM SMARTFORM'.
*WA_RETURN-MESSAGE.
INSERT wa_return INTO TABLE et_return.
EXIT.
ENDIF.
p_html = job_output_info-xmloutput-trfresult.
p_graphics[] = job_output_info-xmloutput-xsfgr[].
send the extracted content all the recipients
PERFORM send_html_email
TABLES
et_return
receivers
USING
p_html
p_graphics[]
send_partner
mail_subject.
ENDFORM. "SEND_SMARTFORM_HTML_EMAIL
&----
*& Form SEND_HTML_EMAIL
&----
Send the email provided the content and other details
----
-->P_RETURN Error messages
-->P_RECEIVERS emailr recipients
-->P_HTML html text
-->P_GRAPHICS html graphics if any
-->P_SUBJECT subject of the email
----
FORM send_html_email
TABLES
p_return TYPE bapiret2_tab
p_receivers STRUCTURE somlreci1
USING p_html TYPE trfresult
p_graphics TYPE tsf_xsf_gr
send_partner TYPE bu_partner
p_subject TYPE so_obj_des.
DATA: l_graphic TYPE ssf_xsf_gr.
CONSTANTS: c_gr_dir TYPE tdtext VALUE 'MYGRAPHICS/'. "#EC NOTEXT
DATA: html_data TYPE trfresult,
graphics TYPE tsf_xsf_gr,
lv_sent_to_all TYPE boolean,
lv_send_address TYPE adr6-smtp_addr,
li_sender TYPE REF TO if_sender_bcs,
receiver TYPE somlreci1.
DATA: lo_bcs TYPE REF TO cl_bcs,
lo_doc_bcs TYPE REF TO cl_document_bcs,
lo_mime_helper TYPE REF TO cl_gbt_multirelated_service,
lo_recipient TYPE REF TO if_recipient_bcs.
DATA: l_filename TYPE string,
lt_soli TYPE soli_tab,
lt_solix TYPE solix_tab,
ls_soli TYPE soli,
ls_solix TYPE solix.
DATA: l_html_raw LIKE LINE OF html_data-content,
html_xstr TYPE xstring,
html_str TYPE string,
html_len TYPE i,
l_offset TYPE i,
l_length TYPE i,
l_diff TYPE i,
l_content_id TYPE string,
l_content_type TYPE w3conttype,
l_obj_len TYPE so_obj_len,
gr_xstr TYPE xstring,
l_gr_raw TYPE bapiconten,
l_username TYPE uname,
l_mail_address TYPE ad_smtpadr,
wa_return TYPE bapiret2.
DATA: lv_send_req_bcs TYPE REF TO cx_send_req_bcs,
lv_address_bcs TYPE REF TO cx_address_bcs,
lv_gbt_mime TYPE REF TO cx_gbt_mime,
lv_bcom_mime TYPE REF TO cx_bcom_mime,
lv_document_bcs TYPE REF TO cx_document_bcs.
CLEAR html_xstr.
LOOP AT p_html-content INTO l_html_raw.
CONCATENATE html_xstr l_html_raw INTO html_xstr IN BYTE MODE.
ENDLOOP.
html_xstr = html_xstr(p_html-length).
CALL FUNCTION 'SCP_TRANSLATE_CHARS' "#EC NOTEXT
EXPORTING inbuff = html_xstr
incode = '4110' " UTF-8 "#EC NOTEXT
OUTCODE = '0000' " ACTUAL CODEPAGE
csubst = 'X' "#EC NOTEXT
substc_space = 'X' "#EC NOTEXT
IMPORTING outbuff = html_str
outused = html_len
EXCEPTIONS OTHERS = 1.
CHANGE ENCODING UTF-8 TO LATIN1
REPLACE ALL OCCURRENCES OF 'UTF-8' IN html_str WITH 'iso-8859-1'
IGNORING CASE. "#EC NOTEXT
*HACK THE HTML CODE GENERATED BY SARTFORM TO MAKE THE
*EXTERNAL IMAGES APPEAR AS <IMG> TAG IN HTML
REPLACE ALL OCCURRENCES OF '<IMG' IN html_str WITH '<IMG' IGNORING
CASE. "#EC NOTEXT
REPLACE ALL OCCURRENCES OF '/>' IN html_str WITH '/>' IGNORING
CASE. "#EC NOTEXT
REPLACE ALL OCCURRENCES OF '</A>' IN html_str WITH ''
IGNORING CASE. "#EC NOTEXT
REPLACE ALL OCCURRENCES OF '<' IN html_str WITH '<'
IGNORING CASE. "#EC NOTEXT
REPLACE ALL OCCURRENCES OF '>' IN html_str WITH '>'
IGNORING CASE. "#EC NOTEXT
html_len = STRLEN( html_str ).
l_offset = 0.
l_length = 255.
WHILE l_offset < html_len.
l_diff = html_len - l_offset.
IF l_diff > l_length.
ls_soli-line = html_str+l_offset(l_length).
ELSE.
ls_soli-line = html_str+l_offset(l_diff).
ENDIF.
APPEND ls_soli TO lt_soli.
ADD l_length TO l_offset.
ENDWHILE.
CREATE OBJECT lo_mime_helper.
CALL METHOD lo_mime_helper->set_main_html
EXPORTING
content = lt_soli
filename = 'SAPWEBFORM.HTM' "#EC NOTEXT
description = 'SAP WEB FORM'. "#EC NOTEXT
LOOP AT p_graphics INTO l_graphic.
CLEAR gr_xstr.
LOOP AT l_graphic-content INTO l_gr_raw.
CONCATENATE gr_xstr l_gr_raw-line INTO gr_xstr IN BYTE MODE.
ENDLOOP.
gr_xstr = gr_xstr(l_graphic-length).
l_offset = 0.
l_length = 255.
CLEAR lt_solix[].
WHILE l_offset < l_graphic-length.
l_diff = l_graphic-length - l_offset.
IF l_diff > l_length.
ls_solix-line = gr_xstr+l_offset(l_length).
ELSE.
ls_solix-line = gr_xstr+l_offset(l_diff).
ENDIF.
APPEND ls_solix TO lt_solix.
ADD l_length TO l_offset.
ENDWHILE.
CONCATENATE c_gr_dir l_graphic-graphics
'.BMP' INTO l_filename. "#EC NOTEXT
CONCATENATE c_gr_dir l_graphic-graphics
'.BMP' INTO l_content_id. "#EC NOTEXT
l_content_type = l_graphic-httptype.
l_obj_len = l_graphic-length.
*Add images to the email
CALL METHOD lo_mime_helper->add_binary_part
EXPORTING
content = lt_solix
filename = l_filename
extension = 'BMP' "#EC NOTEXT
description = 'GRAPHIC IN BMP FORMAT' "#EC NOTEXT
content_type = l_content_type
length = l_obj_len
content_id = l_content_id.
ENDLOOP.
TRY.
lo_doc_bcs = cl_document_bcs=>create_from_multirelated(
i_subject = p_subject
i_multirel_service = lo_mime_helper ).
CATCH cx_document_bcs INTO lv_document_bcs.
ERROR HANDLING
CLEAR wa_return.
wa_return-type = 'E'. "#EC NOTEXT
MOVE lv_document_bcs->get_longtext( ) TO wa_return-message.
INSERT wa_return INTO TABLE p_return.
EXIT.
CATCH cx_bcom_mime INTO lv_bcom_mime.
CLEAR wa_return.
wa_return-type = 'E'. "#EC NOTEXT
MOVE lv_bcom_mime->get_longtext( ) TO wa_return-message.
INSERT wa_return INTO TABLE p_return.
EXIT.
CATCH cx_gbt_mime INTO lv_gbt_mime.
CLEAR wa_return.
wa_return-type = 'E'. "#EC NOTEXT
MOVE lv_gbt_mime->get_longtext( ) TO wa_return-message.
INSERT wa_return INTO TABLE p_return.
EXIT.
ENDTRY.
REUSE THE CONTENT PREPARED FOR ALL RECEIVERS
LOOP AT p_receivers INTO receiver.
l_mail_address = receiver-receiver.
CREATE SEND_REQUEST
TRY.
lo_bcs = cl_bcs=>create_persistent( ).
lo_bcs->set_document( i_document = lo_doc_bcs ).
CATCH cx_send_req_bcs INTO lv_send_req_bcs.
CLEAR wa_return.
wa_return-type = 'E'. "#EC NOTEXT
MOVE lv_send_req_bcs->get_longtext( ) TO wa_return-message.
INSERT wa_return INTO TABLE p_return.
EXIT.
ENDTRY.
CREATE SENDER
CLASS cl_cam_address_bcs DEFINITION LOAD.
TRY.
IF l_username NS '@'. "#EC NOTEXT
l_username = send_partner .
TRANSLATE l_username TO UPPER CASE. "#EC TRANSLANG
li_sender ?= cl_sapuser_bcs=>create( l_username ).
ELSE.
DATA: l_from_mail_address TYPE ad_smtpadr.
l_from_mail_address = l_username.
li_sender ?=
cl_cam_address_bcs=>create_internet_address(
i_address_string = l_from_mail_address ).
ENDIF.
CALL METHOD lo_bcs->set_sender
EXPORTING
i_sender = li_sender.
CATCH cx_address_bcs INTO lv_address_bcs.
ERROR HANDLING
CLEAR wa_return.
wa_return-type = 'E'. "#EC NOTEXT
MOVE lv_address_bcs->get_longtext( ) TO wa_return-message.
INSERT wa_return INTO TABLE p_return.
EXIT.
CATCH cx_send_req_bcs INTO lv_send_req_bcs.
FAILED TO ADD A SENDER
CLEAR wa_return.
wa_return-type = 'E'. "#EC NOTEXT
MOVE lv_send_req_bcs->get_longtext( ) TO wa_return-message.
INSERT wa_return INTO TABLE p_return.
EXIT.
EXIT.
ENDTRY.
CREATE RECIPIENT
TRY.
lo_recipient = cl_cam_address_bcs=>create_internet_address(
i_address_string = l_mail_address ).
CATCH cx_address_bcs INTO lv_address_bcs.
ERROR HANDLING
CONTINUE.
ENDTRY.
TRY.
lo_bcs->add_recipient( i_recipient = lo_recipient ).
CATCH cx_send_req_bcs INTO lv_send_req_bcs.
FAILED TO ADD A RECIPIENT
CONTINUE.
ENDTRY.
SEND
TRY.
RECEIPTS ONLY FOR ERRORS
CALL METHOD lo_bcs->send_request->set_requested_status
EXPORTING
i_requested_status = 'N'. "#EC NOTEXT
lv_sent_to_all = lo_bcs->send( ).
CATCH cx_send_req_bcs INTO lv_send_req_bcs.
CLEAR wa_return.
wa_return-type = 'E'. "#EC NOTEXT
MOVE lv_send_req_bcs->get_longtext( ) TO wa_return-message.
INSERT wa_return INTO TABLE p_return.
ERROR HANDLING
EXIT.
ENDTRY.
ENDLOOP. " END LOOP AT P_RECEIVERS
COMMIT WORK.
set the success information
CLEAR wa_return.
MESSAGE i013 INTO WA_RETURN-MESSAGE. "Email sent successfully
*gpulido
WRITE /'Email sent successfully '.
*gpulido
INSERT wa_return INTO TABLE p_return.
ENDFORM. "SEND_HTML_EMAIL
Bye again
Gabriel
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Hello,
You can do it like this...using SapScript:
REPORT YMAIL.
DATA: ITCPO LIKE ITCPO,
TAB_LINES LIKE SY-TABIX.
Variables for EMAIL functionality
DATA: MAILDATA LIKE SODOCCHGI1.
DATA: MAILPACK LIKE SOPCKLSTI1 OCCURS 2 WITH HEADER LINE.
DATA: MAILHEAD LIKE SOLISTI1 OCCURS 1 WITH HEADER LINE.
DATA: MAILBIN LIKE SOLISTI1 OCCURS 10 WITH HEADER LINE.
DATA: MAILTXT LIKE SOLISTI1 OCCURS 10 WITH HEADER LINE.
DATA: MAILREC LIKE SOMLREC90 OCCURS 0 WITH HEADER LINE.
DATA: SOLISTI1 LIKE SOLISTI1 OCCURS 0 WITH HEADER LINE.
PERFORM SEND_FORM_VIA_EMAIL.
***********************************************************************
FORM SEND_FORM_VIA_EMAIL *
***********************************************************************
FORM SEND_FORM_VIA_EMAIL.
CLEAR: MAILDATA, MAILTXT, MAILBIN, MAILPACK, MAILHEAD, MAILREC.
REFRESH: MAILTXT, MAILBIN, MAILPACK, MAILHEAD, MAILREC.
Creation of the document to be sent File Name
MAILDATA-OBJ_NAME = 'TEST'.
Mail Subject
MAILDATA-OBJ_DESCR = 'Subject'.
Mail Contents
MAILTXT-LINE = 'Here is your file, would you check it?'.
APPEND MAILTXT.
Prepare Packing List
PERFORM PREPARE_PACKING_LIST.
BREAK gpulido.
Set recipient - email address here!!!
*MAILREC-RECEIVER = 'gabe_pu@hotmail.com'.
MAILREC-RECEIVER = 'rafamarfer@gmail.com'.
MAILREC-REC_TYPE = 'U'.
APPEND MAILREC.
Set recipient - email address here!!!
*MAILREC-RECEIVER = 'BGIRALDO'.
*MAILREC-REC_TYPE = 'B'.
*APPEND MAILREC.
Sending the document
CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
EXPORTING
DOCUMENT_DATA = MAILDATA
PUT_IN_OUTBOX = 'X'
TABLES
PACKING_LIST = MAILPACK
OBJECT_HEADER = MAILHEAD
CONTENTS_BIN = MAILBIN
CONTENTS_TXT = MAILTXT
RECEIVERS = MAILREC
EXCEPTIONS
TOO_MANY_RECEIVERS = 1
DOCUMENT_NOT_SENT = 2
OPERATION_NO_AUTHORIZATION = 4
OTHERS = 99.
submit rsconn01 with mode = 'INT' and return.
CASE SY-SUBRC.
WHEN 0.
WRITE: / 'Result of the send process:'.
LOOP AT MAILREC.
WRITE: / mailrec-RECEIVER(48), ':'.
IF mailrec-RETRN_CODE = 0.
WRITE 'sent successfully'.
ELSE.
WRITE 'not sent'.
ENDIF.
ENDLOOP.
WHEN 1.
WRITE: / 'no authorization to send to the specified number of'
.
WHEN 2.
WRITE: / 'document could not be sent to any of the recipients!'.
WHEN 4.
WRITE: / 'no authorization to send !'.
WHEN OTHERS.
WRITE: / 'error occurred during sending !'.
ENDCASE.
ENDFORM.
***********************************************************************
Form PREPARE_PACKING_LIST
***********************************************************************
FORM PREPARE_PACKING_LIST.
CLEAR: MAILPACK, MAILBIN, MAILHEAD.
REFRESH: MAILPACK, MAILBIN, MAILHEAD.
DESCRIBE TABLE MAILTXT LINES TAB_LINES.
READ TABLE MAILTXT INDEX TAB_LINES.
MAILDATA-DOC_SIZE = ( TAB_LINES - 1 ) * 255 + STRLEN( MAILTXT ).
Creation of the entry for the compressed document
CLEAR MAILPACK-TRANSF_BIN.
MAILPACK-HEAD_START = 1.
MAILPACK-HEAD_NUM = 0.
MAILPACK-BODY_START = 1.
MAILPACK-BODY_NUM = TAB_LINES.
MAILPACK-DOC_TYPE = 'RAW'.
APPEND MAILPACK.
Creation of the document attachment
This form gets the OTF code from the SAPscript form.
If you already have your OTF code, I believe that you may
be able to skip this form. just do the following code, looping thru
your SOLISTI1 and updating MAILBIN.
PERFORM GET_OTF_CODE.
LOOP AT SOLISTI1.
MOVE-CORRESPONDING SOLISTI1 TO MAILBIN.
APPEND MAILBIN.
ENDLOOP.
DESCRIBE TABLE MAILBIN LINES TAB_LINES.
MAILHEAD = 'TEST.OTF'.
APPEND MAILHEAD.
Creation of the entry for the compressed attachment
MAILPACK-TRANSF_BIN = 'X'.
MAILPACK-HEAD_START = 1.
MAILPACK-HEAD_NUM = 1.
MAILPACK-BODY_START = 1.
MAILPACK-BODY_NUM = TAB_LINES.
MAILPACK-DOC_TYPE = 'OTF'.
MAILPACK-OBJ_NAME = 'TEST'.
MAILPACK-OBJ_DESCR = 'Subject'.
MAILPACK-DOC_SIZE = TAB_LINES * 255.
APPEND MAILPACK.
ENDFORM.
***********************************************************************
Form GET_OTF_CODE
***********************************************************************
FORM GET_OTF_CODE.
DATA: BEGIN OF OTF OCCURS 0.
INCLUDE STRUCTURE ITCOO .
DATA: END OF OTF.
DATA: ITCPO LIKE ITCPO.
DATA: ITCPP LIKE ITCPP.
CLEAR ITCPO.
ITCPO-TDGETOTF = 'X'.
Start writing OTF code
CALL FUNCTION 'OPEN_FORM'
EXPORTING
FORM = 'YSEND_MAIL'
LANGUAGE = SY-LANGU
OPTIONS = ITCPO
DIALOG = ' '
EXCEPTIONS
OTHERS = 1.
CALL FUNCTION 'START_FORM'
EXCEPTIONS
ERROR_MESSAGE = 01
OTHERS = 02.
CALL FUNCTION 'WRITE_FORM'
EXPORTING
WINDOW = 'MAIN'
EXCEPTIONS
ERROR_MESSAGE = 01
OTHERS = 02.
Close up Form and get OTF code
CALL FUNCTION 'END_FORM'
EXCEPTIONS
ERROR_MESSAGE = 01
OTHERS = 02.
MOVE-CORRESPONDING ITCPO TO ITCPP.
CALL FUNCTION 'CLOSE_FORM'
IMPORTING
RESULT = ITCPP
TABLES
OTFDATA = OTF
EXCEPTIONS
OTHERS = 1.
Move OTF code to structure SOLI form email
CLEAR SOLISTI1. REFRESH SOLISTI1.
LOOP AT OTF.
SOLISTI1-LINE = OTF.
APPEND SOLISTI1.
ENDLOOP.
Bye...
Gabriel
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
81 | |
10 | |
10 | |
9 | |
7 | |
6 | |
6 | |
5 | |
4 | |
4 |
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.