10-29-2013 1:52 PM
Hi guys
Does anyone know how can I send a mail without body's message from SODIS transaction?
I'm trying to do that and I tried this code:
http://wiki.scn.sap.com/wiki/display/Snippets/Send+email+from+ABAP+with+class+CL_BCS
When I received this email, my text it's within an attachment text file and in his mail body there is a text from document's SODIS.
I tried some exemples from this link, like SAP standards BCS_EXAMPLE_1 ~ 8 and it doesn't work either.
http://wiki.scn.sap.com/wiki/display/ABAP/Sending+Mails+-+Home+Page
Thanks
10-29-2013 2:15 PM
Hi Thiago,
You can try below code, may help you.
*SELECTION-SCREEN
SELECTION-SCREEN BEGIN OF BLOCK B1.
PARAMETERS : P_EMPID TYPE YTEST_EMP-EMPID.
SELECTION-SCREEN END OF BLOCK B1.
SELECTION-SCREEN BEGIN OF BLOCK B2.
PARAMETERS : CB_MAIL TYPE C AS CHECKBOX,
P_MAILID TYPE AD_SMTPADR.
SELECTION-SCREEN END OF BLOCK B2.
*BCS Data Declarations
DATA : LR_SEND_REQUEST TYPE REF TO CL_BCS,
LR_DOCUMENT TYPE REF TO CL_DOCUMENT_BCS,
LR_RECIPIENT TYPE REF TO IF_RECIPIENT_BCS,
LV_SUBJECT TYPE SO_OBJ_DES, " For Mail Subject from Method
LV_BODY TYPE SOLI. " For Mail Body (Content)
* Ref : CL_DOCUMENT_BCS=>CREATE_DOCUMENT
DATA : TEXT TYPE BCSY_TEXT,
SENT_TO_ALL TYPE OS_BOOLEAN..
* Variable Declarations
DATA : LS_EMP TYPE YTEST_EMP.
* Internal Table to store e-Mail Ids
TYPES : BEGIN OF TY_MAILS,
MAILID TYPE AD_SMTPADR,
END OF TY_MAILS.
DATA : GT_MAILS TYPE STANDARD TABLE OF TY_MAILS,
GS_MAILS TYPE TY_MAILS.
*INITIALIZATION.
* Filling the Mail Ids into internal tables GT_MAILS
GS_MAILS-MAILID = 'test1@gmail.com'.
APPEND GS_MAILS TO GT_MAILS.
CLEAR GS_MAILS.
GS_MAILS-MAILID = 'test2@femail.com'.
APPEND GS_MAILS TO GT_MAILS.
CLEAR GS_MAILS.
*AT SELECTION-SCREEN.
AT SELECTION-SCREEN.
SELECT SINGLE EMPNAME FROM YTEST_EMP
INTO LS_EMP-EMPNAME
WHERE EMPID EQ P_EMPID.
IF SY-SUBRC NE 0.
MESSAGE E000(ZMESSAGES)
WITH 'NO EMPLOYEE AVAILABLE WITH GIVEN ID'.
*START-OF-SELECTION.
START-OF-SELECTION.
CLEAR LS_EMP.
SELECT SINGLE * FROM YTEST_EMP
INTO LS_EMP
WHERE EMPID EQ P_EMPID.
IF SY-SUBRC EQ 0.
IF CB_MAIL EQ 'X'.
* *** SENDING MAIL WITH THE EMPLOYEE DETAILS ***
* 1. Creating Object for 'Persistent Send Request'
* try.
LR_SEND_REQUEST = CL_BCS=>CREATE_PERSISTENT( ).
* catch CX_SEND_REQ_BCS .
* endtry.
* 2. Add Mail Subject
CONCATENATE 'TEST MAIL :: EMP NUMBER -'
P_EMPID
INTO LV_SUBJECT SEPARATED BY SPACE.
* 3. Add Mail Content (Body)
CONCATENATE 'TEST MAIL' LV_BODY
INTO LV_BODY.
APPEND LV_BODY TO TEXT.
CLEAR LV_BODY.
CONCATENATE ' ' LV_BODY
INTO LV_BODY.
APPEND LV_BODY TO TEXT.
CLEAR LV_BODY.
CONCATENATE 'EMPLOYEE NUMBER :'
LS_EMP-EMPID
INTO LV_BODY SEPARATED BY SPACE.
APPEND LV_BODY TO TEXT.
CLEAR LV_BODY.
CONCATENATE 'EMPLOYEE NAME :'
LS_EMP-EMPNAME
INTO LV_BODY SEPARATED BY SPACE.
APPEND LV_BODY TO TEXT.
CLEAR LV_BODY.
CONCATENATE 'EMPLOYEE DEPT :'
LS_EMP-EMPDEPT
INTO LV_BODY SEPARATED BY SPACE.
APPEND LV_BODY TO TEXT.
CLEAR LV_BODY.
CONCATENATE ' ' LV_BODY
INTO LV_BODY.
APPEND LV_BODY TO TEXT.
CLEAR LV_BODY.
CONCATENATE 'This is computer generated report does not'
'require any signature.'
INTO LV_BODY SEPARATED BY SPACE.
APPEND LV_BODY TO TEXT.
CLEAR LV_BODY.
* 4. Add the Subject and Body to a Mail (Document)
* try.
LR_DOCUMENT = CL_DOCUMENT_BCS=>CREATE_DOCUMENT(
I_TYPE = 'RAW'
I_SUBJECT = LV_SUBJECT
* I_LENGTH =
* I_LANGUAGE = SPACE
* I_IMPORTANCE =
* I_SENSITIVITY =
I_TEXT = TEXT
* I_HEX =
* I_HEADER =
* I_SENDER =
).
* catch CX_DOCUMENT_BCS .
* endtry.
* 5. Set Document to be sent
* try.
LR_SEND_REQUEST->SET_DOCUMENT(
I_DOCUMENT = LR_DOCUMENT ).
* catch CX_SEND_REQ_BCS .
* endtry.
* 6. Add Recipent to whom Mail has to be sent
IF P_MAILID IS NOT INITIAL.
* try.
LR_RECIPIENT = CL_CAM_ADDRESS_BCS=>CREATE_INTERNET_ADDRESS(
I_ADDRESS_STRING = P_MAILID
* I_ADDRESS_NAME =
* I_INCL_SAPUSER =
).
* catch CX_ADDRESS_BCS .
* endtry.
LR_SEND_REQUEST->ADD_RECIPIENT( I_RECIPIENT = LR_RECIPIENT ).
LOOP AT GT_MAILS INTO GS_MAILS.
* try.
LR_RECIPIENT = CL_CAM_ADDRESS_BCS=>CREATE_INTERNET_ADDRESS(
I_ADDRESS_STRING = GS_MAILS-MAILID
* I_ADDRESS_NAME =
* I_INCL_SAPUSER =
).
* catch CX_ADDRESS_BCS .
* endtry.
LR_SEND_REQUEST->ADD_RECIPIENT( I_RECIPIENT = LR_RECIPIENT ).
* 7. Send the Document
SENT_TO_ALL = LR_SEND_REQUEST->SEND(
I_WITH_ERROR_SCREEN = ' ' ).
COMMIT WORK.
Thanks & Regards,
- Vijay
Message was edited by: Matthew Billingham
10-29-2013 2:00 PM
Hi Thiago,
look my example
Sending Mail using Oo (2) - Smartforms
Sending Mail using Oo (3) - Result of a report
Regards
Fred
10-29-2013 2:19 PM
Thank you very much, Frédéric. I'm testing it now but I have no idea why my mail isn't going to SODIS now.
I "forced" using RSCONN01 report but nothing changed yet. Maybe I'll need to wait, probably basis are making something now.
10-29-2013 2:15 PM
Hi Thiago,
You can try below code, may help you.
*SELECTION-SCREEN
SELECTION-SCREEN BEGIN OF BLOCK B1.
PARAMETERS : P_EMPID TYPE YTEST_EMP-EMPID.
SELECTION-SCREEN END OF BLOCK B1.
SELECTION-SCREEN BEGIN OF BLOCK B2.
PARAMETERS : CB_MAIL TYPE C AS CHECKBOX,
P_MAILID TYPE AD_SMTPADR.
SELECTION-SCREEN END OF BLOCK B2.
*BCS Data Declarations
DATA : LR_SEND_REQUEST TYPE REF TO CL_BCS,
LR_DOCUMENT TYPE REF TO CL_DOCUMENT_BCS,
LR_RECIPIENT TYPE REF TO IF_RECIPIENT_BCS,
LV_SUBJECT TYPE SO_OBJ_DES, " For Mail Subject from Method
LV_BODY TYPE SOLI. " For Mail Body (Content)
* Ref : CL_DOCUMENT_BCS=>CREATE_DOCUMENT
DATA : TEXT TYPE BCSY_TEXT,
SENT_TO_ALL TYPE OS_BOOLEAN..
* Variable Declarations
DATA : LS_EMP TYPE YTEST_EMP.
* Internal Table to store e-Mail Ids
TYPES : BEGIN OF TY_MAILS,
MAILID TYPE AD_SMTPADR,
END OF TY_MAILS.
DATA : GT_MAILS TYPE STANDARD TABLE OF TY_MAILS,
GS_MAILS TYPE TY_MAILS.
*INITIALIZATION.
* Filling the Mail Ids into internal tables GT_MAILS
GS_MAILS-MAILID = 'test1@gmail.com'.
APPEND GS_MAILS TO GT_MAILS.
CLEAR GS_MAILS.
GS_MAILS-MAILID = 'test2@femail.com'.
APPEND GS_MAILS TO GT_MAILS.
CLEAR GS_MAILS.
*AT SELECTION-SCREEN.
AT SELECTION-SCREEN.
SELECT SINGLE EMPNAME FROM YTEST_EMP
INTO LS_EMP-EMPNAME
WHERE EMPID EQ P_EMPID.
IF SY-SUBRC NE 0.
MESSAGE E000(ZMESSAGES)
WITH 'NO EMPLOYEE AVAILABLE WITH GIVEN ID'.
*START-OF-SELECTION.
START-OF-SELECTION.
CLEAR LS_EMP.
SELECT SINGLE * FROM YTEST_EMP
INTO LS_EMP
WHERE EMPID EQ P_EMPID.
IF SY-SUBRC EQ 0.
IF CB_MAIL EQ 'X'.
* *** SENDING MAIL WITH THE EMPLOYEE DETAILS ***
* 1. Creating Object for 'Persistent Send Request'
* try.
LR_SEND_REQUEST = CL_BCS=>CREATE_PERSISTENT( ).
* catch CX_SEND_REQ_BCS .
* endtry.
* 2. Add Mail Subject
CONCATENATE 'TEST MAIL :: EMP NUMBER -'
P_EMPID
INTO LV_SUBJECT SEPARATED BY SPACE.
* 3. Add Mail Content (Body)
CONCATENATE 'TEST MAIL' LV_BODY
INTO LV_BODY.
APPEND LV_BODY TO TEXT.
CLEAR LV_BODY.
CONCATENATE ' ' LV_BODY
INTO LV_BODY.
APPEND LV_BODY TO TEXT.
CLEAR LV_BODY.
CONCATENATE 'EMPLOYEE NUMBER :'
LS_EMP-EMPID
INTO LV_BODY SEPARATED BY SPACE.
APPEND LV_BODY TO TEXT.
CLEAR LV_BODY.
CONCATENATE 'EMPLOYEE NAME :'
LS_EMP-EMPNAME
INTO LV_BODY SEPARATED BY SPACE.
APPEND LV_BODY TO TEXT.
CLEAR LV_BODY.
CONCATENATE 'EMPLOYEE DEPT :'
LS_EMP-EMPDEPT
INTO LV_BODY SEPARATED BY SPACE.
APPEND LV_BODY TO TEXT.
CLEAR LV_BODY.
CONCATENATE ' ' LV_BODY
INTO LV_BODY.
APPEND LV_BODY TO TEXT.
CLEAR LV_BODY.
CONCATENATE 'This is computer generated report does not'
'require any signature.'
INTO LV_BODY SEPARATED BY SPACE.
APPEND LV_BODY TO TEXT.
CLEAR LV_BODY.
* 4. Add the Subject and Body to a Mail (Document)
* try.
LR_DOCUMENT = CL_DOCUMENT_BCS=>CREATE_DOCUMENT(
I_TYPE = 'RAW'
I_SUBJECT = LV_SUBJECT
* I_LENGTH =
* I_LANGUAGE = SPACE
* I_IMPORTANCE =
* I_SENSITIVITY =
I_TEXT = TEXT
* I_HEX =
* I_HEADER =
* I_SENDER =
).
* catch CX_DOCUMENT_BCS .
* endtry.
* 5. Set Document to be sent
* try.
LR_SEND_REQUEST->SET_DOCUMENT(
I_DOCUMENT = LR_DOCUMENT ).
* catch CX_SEND_REQ_BCS .
* endtry.
* 6. Add Recipent to whom Mail has to be sent
IF P_MAILID IS NOT INITIAL.
* try.
LR_RECIPIENT = CL_CAM_ADDRESS_BCS=>CREATE_INTERNET_ADDRESS(
I_ADDRESS_STRING = P_MAILID
* I_ADDRESS_NAME =
* I_INCL_SAPUSER =
).
* catch CX_ADDRESS_BCS .
* endtry.
LR_SEND_REQUEST->ADD_RECIPIENT( I_RECIPIENT = LR_RECIPIENT ).
LOOP AT GT_MAILS INTO GS_MAILS.
* try.
LR_RECIPIENT = CL_CAM_ADDRESS_BCS=>CREATE_INTERNET_ADDRESS(
I_ADDRESS_STRING = GS_MAILS-MAILID
* I_ADDRESS_NAME =
* I_INCL_SAPUSER =
).
* catch CX_ADDRESS_BCS .
* endtry.
LR_SEND_REQUEST->ADD_RECIPIENT( I_RECIPIENT = LR_RECIPIENT ).
* 7. Send the Document
SENT_TO_ALL = LR_SEND_REQUEST->SEND(
I_WITH_ERROR_SCREEN = ' ' ).
COMMIT WORK.
Thanks & Regards,
- Vijay
Message was edited by: Matthew Billingham
10-29-2013 4:17 PM
Thank you, guys
I tested both codes and the problem still.
I found this post:
https://scn.sap.com/thread/1539087
Does anyone knows if is it true?
10-31-2013 1:51 PM
I found a solution a bit strange for this problem. Maybe it's a workaround...
Our MM functional configured "Standard Disclosures" at SODIS transaction and I can't change it because a lot of mails need to be send with his standard text... If I assign my user on "No disclosures", both methods to send mail works well.
I'm not sure how many users will send this mail, so... I debugged SODIS and I found tables and the way to insert current username on "No disclosures" too.
That's it:
DATA: w_check_assignment TYPE bcst_assignments,
w_sood TYPE sood .
CONSTANTS:
c_atribuir_usuario TYPE bcst_assignments-assignment_type VALUE 'U',
c_visib_geral TYPE c LENGTH 01 VALUE 'C' ,
c_docto_editor TYPE tsotd-objtp VALUE 'RAW' . "Documento editor SAP.
* 'Sem dados Obrigatórios' da SODIS
SELECT SINGLE * FROM sood
INTO w_sood
WHERE objnam = 'DISCLOSURE'
AND objdes = 'NO_DISCLOSURE'.
IF sy-subrc = 0.
SELECT SINGLE * FROM bcst_assignments
INTO w_check_assignment
WHERE objtp = c_docto_editor " RAW
AND objyr = w_sood-objyr
AND objno = w_sood-objno
AND assignment_type = c_atribuir_usuario " U
AND assignment = sy-uname
AND visibility = c_visib_geral. " C
CHECK sy-subrc <> 0.
* Adiciona o usuário no grupo 'Sem dados Obrigatórios' da SODIS
w_check_assignment-objno = w_sood-objno .
w_check_assignment-objtp = c_docto_editor .
w_check_assignment-objyr = w_sood-objyr .
w_check_assignment-assignment_type = c_atribuir_usuario.
w_check_assignment-assignment = sy-uname .
w_check_assignment-visibility = c_visib_geral .
INSERT bcst_assignments FROM w_check_assignment.
ENDIF.