Application Development Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 

Send mail without attachment using CL_BDS

former_member216168
Active Participant
0 Kudos

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

1 ACCEPTED SOLUTION

VijayaKrishnaG
Active Contributor
0 Kudos

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.

  1. 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'.

  1. ENDIF.

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

  1. ELSE.

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

  1. ENDLOOP.
  2. ENDIF.

* 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

5 REPLIES 5

FredericGirod
Active Contributor

0 Kudos

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.

VijayaKrishnaG
Active Contributor
0 Kudos

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.

  1. 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'.

  1. ENDIF.

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

  1. ELSE.

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

  1. ENDLOOP.
  2. ENDIF.

* 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

former_member216168
Active Participant
0 Kudos

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?    

former_member216168
Active Participant
0 Kudos

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.