on 11-27-2012 7:31 AM
Can any one solve the above problem
Moderator message: Moved to Webdynpro ABAP forum.
Message was edited by: Kesavadas Thekkillath
Hi Padma,
You can not achieve the requirement by only using CL_BCS class. You have to take help of another class CL_DOCUMENT_BCS.
Use CREATE_DOCUMENT method to create the office document and then
Use ADD_ATTACHMENT method to create the attachment.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
method ONACTIONSENDMAIL .
* get message manager
data: flag type c.
clear flag.
DATA LO_API_CONTROLLER TYPE REF TO IF_WD_CONTROLLER.
DATA LO_MESSAGE_MANAGER TYPE REF TO IF_WD_MESSAGE_MANAGER.
LO_API_CONTROLLER ?= WD_THIS->WD_GET_API( ).
CALL METHOD LO_API_CONTROLLER->GET_MESSAGE_MANAGER
RECEIVING
MESSAGE_MANAGER = LO_MESSAGE_MANAGER.
DATA LO_ND_MAIL TYPE REF TO IF_WD_CONTEXT_NODE.
DATA LO_EL_MAIL TYPE REF TO IF_WD_CONTEXT_ELEMENT.
DATA LS_MAIL TYPE WD_THIS->ELEMENT_MAIL.
DATA LV_MAIL LIKE LS_MAIL-MAIL.
* navigate from <CONTEXT> to <MAIL> via lead selection
LO_ND_MAIL = WD_CONTEXT->GET_CHILD_NODE( NAME = WD_THIS->WDCTX_MAIL ).
* get element via lead selection
LO_EL_MAIL = LO_ND_MAIL->GET_ELEMENT( ).
* get single attribute
LO_EL_MAIL->GET_ATTRIBUTE(
EXPORTING
NAME = `MAIL`
IMPORTING
VALUE = LV_MAIL ).
data ls_split type string.
data lt_split like table of ls_split.
split LV_MAIL at ',' into table lt_split.
data ADDRESS_email type SX_ADDRess.
* data ADDRESS_NORMAL type SX_ADDRess.
ADDRESS_email-TYPE = 'INT'.
ADDRESS_email-ADDRESS = LV_MAIL.
loop at lt_split into ls_split.
ADDRESS_email-ADDRESS = ls_split.
CALL FUNCTION 'SX_INTERNET_ADDRESS_TO_NORMAL'
EXPORTING
ADDRESS_UNSTRUCT = ADDRESS_email
COMPLETE_ADDRESS = 'X'
* IMPORTING
* ADDRESS_NORMAL = ADDRESS_NORMAL
* LOCAL =
* DOMAIN =
* COMMENT =
* ADDR_NORMAL_NO_UPPER =
* ADDR_NORMAL_NO_UP_WITH_COMMENT =
EXCEPTIONS
ERROR_ADDRESS_TYPE = 1
ERROR_ADDRESS = 2
ERROR_GROUP_ADDRESS = 3
OTHERS = 4
.
IF SY-SUBRC <> 0.
flag = 'X'.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
* report message
CALL METHOD LO_MESSAGE_MANAGER->REPORT_T100_MESSAGE
EXPORTING
MSGID = 'ZMESSAGE'
MSGNO = '016'
MSGTY = 'E'.
endif.
endloop.
*----------------------------------------------------------------------------*
IF flag <> 'X'.
data email like ls_mail-mail.
data subject like ls_mail-subject.
data body like ls_mail-body.
lo_nd_mail = wd_context->get_child_node( name = wd_this->wdctx_mail ).
lo_el_mail = lo_nd_mail->get_element( ).
lo_el_mail->get_static_attributes(
IMPORTING
static_attributes = ls_mail ).
lo_el_mail->get_attribute(
EXPORTING
name = 'MAIL'
IMPORTING
value = email ).
lo_el_mail->get_attribute(
EXPORTING
name = 'SUBJECT'
IMPORTING
value = subject ).
LO_EL_MAIL->GET_ATTRIBUTE(
EXPORTING
NAME = `BODY`
IMPORTING
VALUE = BODY ).
*--------------------------------------------
data sub(50) type c.
sub = subject.
*-----------------------------------------------------------------
DATA lo_nd_it TYPE REF TO if_wd_context_node.
DATA lo_el_it TYPE REF TO if_wd_context_element.
DATA ls_it TYPE wd_this->element_it.
data lt_it like table of ls_it.
lo_nd_it = wd_context->get_child_node( name = wd_this->wdctx_it ).
lo_el_it = lo_nd_it->get_element( ).
lo_el_it->get_static_attributes(
IMPORTING
static_attributes = ls_it ).
CALL METHOD lo_nd_it->get_static_attributes_table
EXPORTING
from = 1
to = 2147483647
IMPORTING
table = lt_it.
DATA : l_o_send_request TYPE REF TO cl_bcs, " email request object
l_o_document TYPE REF TO cl_document_bcs, " documents object
l_o_sender TYPE REF TO cl_cam_address_bcs, " sender object
l_o_recipient TYPE REF TO cl_cam_address_bcs, " recipient object
bcs_exception TYPE REF TO cx_bcs, " exceptions
rc_addr TYPE ADR6-SMTP_ADDR,
" address
sd_addr TYPE ADR6-SMTP_ADDR VALUE 'abc@xyz.com',
* text_body type bcsy_text,
l_it_contents TYPE bcsy_text,
l_wa_contents TYPE LINE OF bcsy_text.
rc_addr = email.
split email at ',' into table lt_split.
DATA T_ATT_CONTENT_HEX TYPE SOLIX_TAB.
loop at lt_it into ls_it.
CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
EXPORTING
buffer = ls_it-source
TABLES
binary_tab = T_ATT_CONTENT_HEX.
DATA LV_NAME(50). " SO_OBJ_DES
TRY.
at first.
" create email objects
l_o_send_request = cl_bcs=>create_persistent( ).
" sender
*------------------------------------------------------------------------------
CALL METHOD cl_cam_address_bcs=>create_internet_address
EXPORTING
i_address_string = sd_addr
RECEIVING
RESULT = l_o_sender.
l_o_send_request->set_sender( i_sender = l_o_sender ).
" recipient TO
loop at lt_split into ls_split.
rc_addr = ls_split.
CALL METHOD cl_cam_address_bcs=>create_internet_address
EXPORTING
i_address_string = rc_addr
RECEIVING
RESULT = l_o_recipient.
l_o_send_request->add_recipient(
i_recipient = l_o_recipient
i_copy = '' " CC indicator
i_blind_copy = 'X'
i_no_forward = ' ' ).
clear rc_addr.
endloop.
* *********************************************************************
CLEAR l_wa_contents.
l_wa_contents-line = body.
APPEND l_wa_contents TO l_it_contents.
" create documents
l_o_document = cl_document_bcs=>create_document(
i_type = 'RAW' " RAW document format
i_text = l_it_contents "text_body
i_subject = SUB"'Simple Email'
).
ENDAT.
LV_NAME = Ls_IT-FILE.
CALL METHOD l_o_document->add_attachment
EXPORTING
i_attachment_type = Ls_IT-type
i_attachment_subject = LV_NAME
i_att_content_hex = T_ATT_CONTENT_HEX.
l_o_send_request->set_document( l_o_document ).
DATA: status_mail TYPE bcs_stml.
status_mail = 'N'.
CALL METHOD l_o_send_request->set_status_attributes
EXPORTING
i_requested_status = status_mail
i_status_mail = status_mail.
CATCH cx_bcs INTO bcs_exception.
data v_message(100).
v_message = bcs_exception->get_text( ).
MESSAGE e000(su) WITH v_message.
cleanup.
ENDTRY.
endloop.
*--------------------------------------------------------
*data lv_result type os_boolean.
try.
L_O_SEND_REQUEST->set_send_immediately( 'X' ).
L_O_SEND_REQUEST->send( ).
commit work .
CATCH cx_send_req_bcs.
data v_message1(100).
v_message1 = bcs_exception->get_text( ).
MESSAGE e000(su) WITH v_message1.
cleanup.
endtry.
if sy-subrc = 0.
* report message
CALL METHOD LO_MESSAGE_MANAGER->REPORT_T100_MESSAGE
EXPORTING
msgid = 'ZMESSAGE'
msgno = '013'
msgty = 'S'.
endif.
ENDIF.
endmethod.
In the above code works only for multiple attachments. Now I want to send the mail without attachment using above code. how to achieve this
Moderator Message : Your question is not complete and is a widely discussed topic in SCN, if it is a technical problem that you are facing, please update it properly. I am leaving this thread free for some time so that you can update it.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
method ONACTIONSENDMAIL .
* get message manager
data: flag type c.
clear flag.
DATA LO_API_CONTROLLER TYPE REF TO IF_WD_CONTROLLER.
DATA LO_MESSAGE_MANAGER TYPE REF TO IF_WD_MESSAGE_MANAGER.
LO_API_CONTROLLER ?= WD_THIS->WD_GET_API( ).
CALL METHOD LO_API_CONTROLLER->GET_MESSAGE_MANAGER
RECEIVING
MESSAGE_MANAGER = LO_MESSAGE_MANAGER.
DATA LO_ND_MAIL TYPE REF TO IF_WD_CONTEXT_NODE.
DATA LO_EL_MAIL TYPE REF TO IF_WD_CONTEXT_ELEMENT.
DATA LS_MAIL TYPE WD_THIS->ELEMENT_MAIL.
DATA LV_MAIL LIKE LS_MAIL-MAIL.
* navigate from <CONTEXT> to <MAIL> via lead selection
LO_ND_MAIL = WD_CONTEXT->GET_CHILD_NODE( NAME = WD_THIS->WDCTX_MAIL ).
* get element via lead selection
LO_EL_MAIL = LO_ND_MAIL->GET_ELEMENT( ).
* get single attribute
LO_EL_MAIL->GET_ATTRIBUTE(
EXPORTING
NAME = `MAIL`
IMPORTING
VALUE = LV_MAIL ).
data ls_split type string.
data lt_split like table of ls_split.
split LV_MAIL at ',' into table lt_split.
data ADDRESS_email type SX_ADDRess.
* data ADDRESS_NORMAL type SX_ADDRess.
ADDRESS_email-TYPE = 'INT'.
ADDRESS_email-ADDRESS = LV_MAIL.
loop at lt_split into ls_split.
ADDRESS_email-ADDRESS = ls_split.
CALL FUNCTION 'SX_INTERNET_ADDRESS_TO_NORMAL'
EXPORTING
ADDRESS_UNSTRUCT = ADDRESS_email
COMPLETE_ADDRESS = 'X'
* IMPORTING
* ADDRESS_NORMAL = ADDRESS_NORMAL
* LOCAL =
* DOMAIN =
* COMMENT =
* ADDR_NORMAL_NO_UPPER =
* ADDR_NORMAL_NO_UP_WITH_COMMENT =
EXCEPTIONS
ERROR_ADDRESS_TYPE = 1
ERROR_ADDRESS = 2
ERROR_GROUP_ADDRESS = 3
OTHERS = 4
.
IF SY-SUBRC <> 0.
flag = 'X'.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
* report message
CALL METHOD LO_MESSAGE_MANAGER->REPORT_T100_MESSAGE
EXPORTING
MSGID = 'ZMESSAGE'
MSGNO = '016'
MSGTY = 'E'.
endif.
endloop.
*----------------------------------------------------------------------------*
IF flag <> 'X'.
data email like ls_mail-mail.
data subject like ls_mail-subject.
data body like ls_mail-body.
lo_nd_mail = wd_context->get_child_node( name = wd_this->wdctx_mail ).
lo_el_mail = lo_nd_mail->get_element( ).
lo_el_mail->get_static_attributes(
IMPORTING
static_attributes = ls_mail ).
lo_el_mail->get_attribute(
EXPORTING
name = 'MAIL'
IMPORTING
value = email ).
lo_el_mail->get_attribute(
EXPORTING
name = 'SUBJECT'
IMPORTING
value = subject ).
LO_EL_MAIL->GET_ATTRIBUTE(
EXPORTING
NAME = `BODY`
IMPORTING
VALUE = BODY ).
*--------------------------------------------
data sub(50) type c.
sub = subject.
*-----------------------------------------------------------------
DATA lo_nd_it TYPE REF TO if_wd_context_node.
DATA lo_el_it TYPE REF TO if_wd_context_element.
DATA ls_it TYPE wd_this->element_it.
data lt_it like table of ls_it.
lo_nd_it = wd_context->get_child_node( name = wd_this->wdctx_it ).
lo_el_it = lo_nd_it->get_element( ).
lo_el_it->get_static_attributes(
IMPORTING
static_attributes = ls_it ).
CALL METHOD lo_nd_it->get_static_attributes_table
EXPORTING
from = 1
to = 2147483647
IMPORTING
table = lt_it.
DATA : l_o_send_request TYPE REF TO cl_bcs, " email request object
l_o_document TYPE REF TO cl_document_bcs, " documents object
l_o_sender TYPE REF TO cl_cam_address_bcs, " sender object
l_o_recipient TYPE REF TO cl_cam_address_bcs, " recipient object
bcs_exception TYPE REF TO cx_bcs, " exceptions
rc_addr TYPE ADR6-SMTP_ADDR,
" address
sd_addr TYPE ADR6-SMTP_ADDR VALUE 'abc@xyz.com',
* text_body type bcsy_text,
l_it_contents TYPE bcsy_text,
l_wa_contents TYPE LINE OF bcsy_text.
rc_addr = email.
split email at ',' into table lt_split.
DATA T_ATT_CONTENT_HEX TYPE SOLIX_TAB.
loop at lt_it into ls_it.
CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
EXPORTING
buffer = ls_it-source
TABLES
binary_tab = T_ATT_CONTENT_HEX.
DATA LV_NAME(50). " SO_OBJ_DES
TRY.
at first.
" create email objects
l_o_send_request = cl_bcs=>create_persistent( ).
" sender
*------------------------------------------------------------------------------
CALL METHOD cl_cam_address_bcs=>create_internet_address
EXPORTING
i_address_string = sd_addr
RECEIVING
RESULT = l_o_sender.
l_o_send_request->set_sender( i_sender = l_o_sender ).
" recipient TO
loop at lt_split into ls_split.
rc_addr = ls_split.
CALL METHOD cl_cam_address_bcs=>create_internet_address
EXPORTING
i_address_string = rc_addr
RECEIVING
RESULT = l_o_recipient.
l_o_send_request->add_recipient(
i_recipient = l_o_recipient
i_copy = '' " CC indicator
i_blind_copy = 'X'
i_no_forward = ' ' ).
clear rc_addr.
endloop.
* *********************************************************************
CLEAR l_wa_contents.
l_wa_contents-line = body.
APPEND l_wa_contents TO l_it_contents.
" create documents
l_o_document = cl_document_bcs=>create_document(
i_type = 'RAW' " RAW document format
i_text = l_it_contents "text_body
i_subject = SUB"'Simple Email'
).
ENDAT.
LV_NAME = Ls_IT-FILE.
CALL METHOD l_o_document->add_attachment
EXPORTING
i_attachment_type = Ls_IT-type
i_attachment_subject = LV_NAME
i_att_content_hex = T_ATT_CONTENT_HEX.
l_o_send_request->set_document( l_o_document ).
DATA: status_mail TYPE bcs_stml.
status_mail = 'N'.
CALL METHOD l_o_send_request->set_status_attributes
EXPORTING
i_requested_status = status_mail
i_status_mail = status_mail.
CATCH cx_bcs INTO bcs_exception.
data v_message(100).
v_message = bcs_exception->get_text( ).
MESSAGE e000(su) WITH v_message.
cleanup.
ENDTRY.
endloop.
*--------------------------------------------------------
*data lv_result type os_boolean.
try.
L_O_SEND_REQUEST->set_send_immediately( 'X' ).
L_O_SEND_REQUEST->send( ).
commit work .
CATCH cx_send_req_bcs.
data v_message1(100).
v_message1 = bcs_exception->get_text( ).
MESSAGE e000(su) WITH v_message1.
cleanup.
endtry.
if sy-subrc = 0.
* report message
CALL METHOD LO_MESSAGE_MANAGER->REPORT_T100_MESSAGE
EXPORTING
msgid = 'ZMESSAGE'
msgno = '013'
msgty = 'S'.
endif.
ENDIF.
endmethod.
In the above code works only for multiple attachments. Now I want to send the mail without attachment using above code. how to achieve this
Refer program BCS_EXAMPLE_1
User | Count |
---|---|
85 | |
10 | |
10 | |
9 | |
7 | |
6 | |
5 | |
5 | |
4 | |
3 |
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.