09-12-2008 7:35 AM
Hi,
How to send Internal table data to a mail (outlook or yahoo)
Thanks
09-12-2008 7:36 AM
refer to this link
or else use this code:
REPORT ZTEST_EMAIL.
constants c_internet value 'A'." 'U'.
data:
w_document_data LIKE sodocchgi1, " Mail data
* This internal table is used to hold the content
i_object_content LIKE solisti1 OCCURS 10 WITH HEADER LINE,
* This is to dummy to pass to FM
i_object_parb LIKE soparbi1 OCCURS 10 WITH HEADER LINE,
* This internal table is used to have the email recipients
i_receivers LIKE somlreci1 OCCURS 2 WITH HEADER LINE.
w_document_data-obj_expdat = sy-datum + 1.
w_document_data-expiry_dat = sy-datum + 1.
w_document_data-obj_name = 'Repair Request from Check-in process'.
w_document_data-obj_descr = 'Error desc'.
w_document_data-obj_prio = '1'.
w_document_data-priority = '1'.
w_document_data-obj_langu = sy-langu.
i_object_content-line = 'CMI FAILED'.
APPEND i_object_content.
CLEAR i_object_content.
i_receivers-receiver = 'anup@yash.com'.
i_receivers-rec_type = c_internet.
i_receivers-express = 'X'.
APPEND i_receivers.
CLEAR i_receivers.
i_receivers-receiver = 'snehi@yash.com'.
i_receivers-rec_type = c_internet.
i_receivers-copy = 'X'.
i_receivers-express = 'X'.
COLLECT i_receivers.
CLEAR i_receivers.
*
* i_receivers-receiver = 'anup.k@yash.com'.
* i_receivers-rec_type = c_internet.
* i_receivers-copy = 'X'.
* i_receivers-express = 'X'.
* COLLECT i_receivers.
* CLEAR i_receivers.
CALL FUNCTION 'SO_NEW_DOCUMENT_SEND_API1'
EXPORTING
document_data = w_document_data
TABLES
object_content = i_object_content
object_parb = i_object_parb
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.
09-12-2008 7:51 AM
Hi,
You can also work this way....
if l_contents is not initial. " you internal table
call function 'SO_SOLITAB_TO_SOLIXTAB'
exporting
ip_solitab = l_contents
importing
ep_solixtab = contents_hex.
Create the send request
try.
l_send_request = cl_bcs=>create_persistent( ).
Create the main document
l_doc = cl_document_bcs=>create_document(
i_type = 'RAW'
i_text = l_text
i_subject = p_sub ).
Add attachment to document
l_doc->add_attachment( i_attachment_type = i_attachment_type
i_attachment_subject = p_doc
i_att_content_text = contents_text ).
i_att_content_hex = contents_hex ).
Add document to send request
l_send_request->set_document( l_doc ).
Add recipients to send request
LOOP AT s_to.
l_recipient = cl_cam_address_bcs=>create_internet_address(
p_email1-low ).
l_send_request->add_recipient( i_recipient = l_recipient ).
Send email
l_sent_all = l_send_request->send( ).
if sy-subrc ne 0.
MESSAGE e070.
else.
MESSAGE s074.
endif.
catch cx_bcs into l_err.
MESSAGE e071 WITH l_err->error_type.
endtry.
*
ENDIF.
endif.
*ENDIF.
commit work.
Thanks & Regards,
Madhavi
09-12-2008 7:57 AM
Hi,
search in SE38 for BCS_EXAMPLE*. There are good examples.
Regards, Dieter
09-12-2008 8:11 AM
09-12-2008 8:21 AM
hi,
here is the required code:
REPORT ZVR_CHARGE_BACK_TRIGGER_MAIL.
TABLES: ZVT_CHRGEBCK_QTY, "Custom Table For Charge-Back Quantity
VBRK, "Billing: Header Data
VBRP, "Billing: Item Data
MAKT, "Material Descriptions
KNA1. "General Data in Customer Master
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.
SELECT-OPTIONS:
S_KUNAG FOR VBRK-KUNAG , "CUSTOMER
S_MATNR FOR VBRP-MATNR . "MATERIAL
SELECTION-SCREEN END OF BLOCK B1.
DATA:I_ZVT_CHRGEBCK_QTY LIKE ZVT_CHRGEBCK_QTY OCCURS 0 WITH HEADER LINE,
BEGIN OF I_INFO OCCURS 0,
KUNAG LIKE VBRK-KUNAG,
MATNR LIKE VBRP-MATNR,
CFKIMG LIKE ZVT_CHRGEBCK_QTY-CFKIMG,
AFKIMG LIKE ZVT_CHRGEBCK_QTY-AFKIMG,
STATUS LIKE ZVT_CHRGEBCK_QTY-STATUS,
NETWR LIKE VBRP-NETWR,
COUNT TYPE I,
FLAG(1),
END OF I_INFO.
TYPES: BEGIN OF T_CHAREKPO,
EBLEN(10) TYPE C,
EBELP(5) TYPE C,
AEDAT(8) TYPE C,
MATNR(18) TYPE C,
END OF T_CHAREKPO.
DATA: WA_CHAREKPO TYPE T_CHAREKPO.
DATA: IT_MESSAGE TYPE STANDARD TABLE OF SOLISTI1 INITIAL SIZE 0
WITH HEADER LINE.
DATA: IT_ATTACH TYPE STANDARD TABLE OF SOLISTI1 INITIAL SIZE 0
WITH HEADER LINE.
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,
T_ZEMAILS LIKE ZEMAILS OCCURS 0 WITH HEADER LINE,
W_CNT TYPE I,
W_SENT_ALL(1) TYPE C,
W_DOC_DATA LIKE SODOCCHGI1,
GD_ERROR TYPE SY-SUBRC,
GD_RECIEVER TYPE SY-SUBRC.
DATA: V_MAKTX LIKE MAKT-MAKTX,
V_NAME1 LIKE KNA1-NAME1,
V_CFKIMG(13),
V_AFKIMG(13),
V_DIFF(13),
V_NETWR(16).
************************************************************************
*START_OF_SELECTION
START-OF-SELECTION.
Retrieve sample data from table ekpo
PERFORM DATA_RETRIEVAL.
*END-OF-SELECTION
END-OF-SELECTION.
IF NOT I_INFO[] IS INITIAL.
Populate table with detaisl to be entered into .xls file
PERFORM BUILD_XLS_DATA_TABLE.
Populate message body text
PERFORM POPULATE_EMAIL_MESSAGE_BODY.
Send file by email as .xls speadsheet
PERFORM SEND_FILE_AS_EMAIL_ATTACHMENT
TABLES IT_MESSAGE
IT_ATTACH
USING
'chargebackquantity.xls documnet attachment'
'xls'
'charge back quantity'
' '
' '
' '
CHANGING GD_ERROR
GD_RECIEVER.
Instructs mail send program for SAPCONNECT to send email(rsconn01)
PERFORM INITIATE_MAIL_EXECUTE_PROGRAM.
ENDIF.
&----
*& Form DATA_RETRIEVAL
&----
Retrieve data form EKPO table and populate itab it_ekko
-
FORM DATA_RETRIEVAL.
SELECT * FROM ZVT_CHRGEBCK_QTY INTO TABLE I_ZVT_CHRGEBCK_QTY
WHERE KUNAG IN S_KUNAG
AND MATNR IN S_MATNR.
UPDATE ZVT_CHRGEBCK_QTY SET STATUS = ' '
WHERE KUNAG = S_KUNAG AND
MATNR = S_MATNR.
SORT I_ZVT_CHRGEBCK_QTY BY KUNAG MATNR.
LOOP AT I_ZVT_CHRGEBCK_QTY.
I_INFO-KUNAG = I_ZVT_CHRGEBCK_QTY-KUNAG.
I_INFO-MATNR = I_ZVT_CHRGEBCK_QTY-MATNR.
I_INFO-CFKIMG = I_ZVT_CHRGEBCK_QTY-CFKIMG.
I_INFO-AFKIMG = I_ZVT_CHRGEBCK_QTY-AFKIMG.
I_INFO-NETWR = I_ZVT_CHRGEBCK_QTY-NETWR.
I_INFO-COUNT = 1.
COLLECT I_INFO.
CLEAR I_ZVT_CHRGEBCK_QTY.
ENDLOOP.
for triggering mail
LOOP AT I_INFO .
IF I_INFO-CFKIMG > I_INFO-AFKIMG.
I_INFO-FLAG = 'Y'.
MODIFY I_INFO.
ENDIF.
I_INFO-NETWR = I_INFO-NETWR / I_INFO-COUNT.
MODIFY I_INFO.
ENDLOOP.
DELETE I_INFO WHERE FLAG NE 'Y'.
LOOP AT I_INFO .
UPDATE ZVT_CHRGEBCK_QTY SET STATUS = 'X'
WHERE KUNAG = I_INFO-KUNAG
AND MATNR = I_INFO-MATNR
AND MONAT = SY-DATUM+4(2)
AND GJAHR = SY-DATUM+0(4).
ENDLOOP.
ENDFORM. " DATA_RETRIEVAL
&----
*& Form BUILD_XLS_DATA_TABLE
&----
Build data table for .xls document
-
FORM BUILD_XLS_DATA_TABLE.
CONSTANTS: CON_CRET TYPE X VALUE '0D', "OK for non Unicode
CON_TAB TYPE X VALUE '09'. "OK for non Unicode
CONCATENATE 'Material'
' Material Description'
' Customer'
' Customer Name'
' Chrg Bck Qty'
' Actual Sales Qty.'
' Excess Chrg Bck Qty'
' Avg. Excess Dollar Value'
' '
INTO IT_ATTACH SEPARATED BY CON_TAB.
CONCATENATE CON_CRET IT_ATTACH INTO IT_ATTACH.
APPEND IT_ATTACH.
LOOP AT I_INFO WHERE STATUS 'X'.
SELECT SINGLE MAKTX FROM MAKT INTO V_MAKTX WHERE MATNR = I_INFO-MATNR
AND SPRAS = SY-LANGU.
SELECT SINGLE NAME1 FROM KNA1 INTO V_NAME1 WHERE KUNNR = I_INFO-KUNAG.
V_CFKIMG = I_INFO-CFKIMG.
V_AFKIMG = I_INFO-AFKIMG.
V_DIFF = I_INFO-CFKIMG - I_INFO-AFKIMG.
V_NETWR = I_INFO-NETWR * V_DIFF.
CONCATENATE I_INFO-MATNR V_MAKTX I_INFO-KUNAG V_NAME1
V_CFKIMG V_AFKIMG V_DIFF V_NETWR INTO IT_ATTACH SEPARATED
BY CON_TAB.
CONCATENATE CON_CRET IT_ATTACH INTO IT_ATTACH.
APPEND IT_ATTACH.
CLEAR: I_INFO,V_CFKIMG,V_AFKIMG,V_MAKTX,V_NAME1,V_NETWR.
ENDLOOP.
ENDFORM. " BUILD_XLS_DATA_TABLE
&----
*& Form SEND_FILE_AS_EMAIL_ATTACHMENT
&----
Send email
-
FORM SEND_FILE_AS_EMAIL_ATTACHMENT TABLES PIT_MESSAGE
PIT_ATTACH
USING 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.
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'.
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] = PIT_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.
SELECT * FROM ZEMAILS INTO TABLE T_ZEMAILS WHERE ZGROUP = 'CB'.
LOOP AT T_ZEMAILS.
CLEAR T_RECEIVERS.
REFRESH T_RECEIVERS.
T_RECEIVERS-RECEIVER = T_ZEMAILS-ZEMAIL.
T_RECEIVERS-REC_TYPE = 'U'.
T_RECEIVERS-COM_TYPE = 'INT'.
T_RECEIVERS-NOTIF_DEL = 'X'.
T_RECEIVERS-NOTIF_NDEL = 'X'.
APPEND T_RECEIVERS.
ENDLOOP.
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.
Populate zerror return code
LD_ERROR = SY-SUBRC.
Populate zreceiver return code
LOOP AT T_RECEIVERS.
LD_RECEIVER = T_RECEIVERS-RETRN_CODE.
ENDLOOP.
ENDFORM.
&----
*& Form INITIATE_MAIL_EXECUTE_PROGRAM
&----
Instructs mail send program for SAPCONNECT to send email.
-
FORM INITIATE_MAIL_EXECUTE_PROGRAM.
WAIT UP TO 2 SECONDS.
SUBMIT RSCONN01 WITH MODE = 'INT'
WITH OUTPUT = 'X'
AND RETURN.
ENDFORM. " INITIATE_MAIL_EXECUTE_PROGRAM
&----
*& Form POPULATE_EMAIL_MESSAGE_BODY
&----
Populate message body text
-
FORM POPULATE_EMAIL_MESSAGE_BODY.
REFRESH IT_MESSAGE.
CLEAR:IT_MESSAGE.
APPEND IT_MESSAGE.
CLEAR:IT_MESSAGE.
IT_MESSAGE = 'Dear Sir/Madam,'.
APPEND IT_MESSAGE.
CLEAR:IT_MESSAGE.
APPEND IT_MESSAGE.
CLEAR:IT_MESSAGE.
IT_MESSAGE = 'Charge Back quantity exceeds the actual sales Quantity.'.
APPEND IT_MESSAGE.
CLEAR:IT_MESSAGE.
IT_MESSAGE = 'Please find the attachement for details.'.
APPEND IT_MESSAGE.
CLEAR:IT_MESSAGE.
APPEND IT_MESSAGE.
CLEAR:IT_MESSAGE.
IT_MESSAGE = 'Regards,'.
APPEND IT_MESSAGE.
CLEAR:IT_MESSAGE.
IT_MESSAGE = 'N.Jain'.
APPEND IT_MESSAGE.
CLEAR:IT_MESSAGE.
ENDFORM. " POPULATE_EMAIL_MESSAGE_BODY
hope it will help you
rahul sharma