* Eae Pessoal, hoje vou mostrar como é facil enviar e-mail pelo sistema
* para qualquer e-mail cadastrado, abaixo fiz um programa que uso sempre* como base quando pedem para enviar e-mail para alguem após algum processo
* somente informativo.
* Nesse nosso exemplo estaremos definindo o destinatario e o remetente
* cadastrados da TVARVC, mas não impede que durante os testes vocês troquem
* colocando fixo ( não recomendo ) ou usando os dados baseado no ID do
* Parceiro ( aih sim heimmm ), outra coisa que está disponivel
* mas nós não estamos usando é a possibilidade de inclusão de anexo no
* formato PDF, para fazer isso o metodo aguarda uma tabela OTF para converter
* e anexar, essa tabela OTF, caso não saibam é o retorno quando você chama
* um Smartforms, num proximo post eu coloco esse exemplo e como anexar outros
* tipos de documentos também, incluindo objetos 'SAP' como item de WorkFlow.
* Codigo abaixo como sempre todo comentado, os nomes dos metodos estão
* intuitivos também.
* Um brinde nesse post é que está codificado de forma 'INLINE', outro post que
* está sendo montado e em breve vamos compartilhar.
* Bons estudos e valeoooo.
REPORT ztrigger_email_interno.
CLASS cl_main DEFINITION.
PUBLIC SECTION.
DATA:
gx_bcs_exception TYPE REF TO cx_bcs.
METHODS:
seleciona_dados
EXPORTING
ev_out TYPE boolean,
sender_email
RETURNING VALUE(rv_sender) TYPE ad_smtpadr,
recipient_email
RETURNING VALUE(rv_recipient) TYPE ad_smtpadr,
subject_email
RETURNING VALUE(rv_subject) TYPE so_obj_des,
body_email
RETURNING VALUE(rt_body) TYPE soli_tab,
envia_email
IMPORTING
iv_sender_email TYPE ad_smtpadr
iv_subject TYPE so_obj_des
iv_recipient_mail TYPE ad_smtpadr
it_body TYPE soli_tab OPTIONAL
iv_attachment_name TYPE sood-objdes OPTIONAL
it_otf TYPE tsfotf OPTIONAL
EXPORTING
ev_sent TYPE boolean.
ENDCLASS.
CLASS cl_main IMPLEMENTATION.
METHOD envia_email.
TRY .
* Criação do objeto e-mail para envio
DATA(ol_send_request) = cl_bcs=>create_persistent( ).
* E-mail remetente
DATA(ol_sender) =
cl_cam_address_bcs=>create_internet_address( iv_sender_email ).
ol_send_request->set_sender( i_sender = ol_sender ).
* E-mail de destino
DATA(ol_recipient) =
cl_cam_address_bcs=>create_internet_address( iv_recipient_mail ).
ol_send_request->add_recipient(
EXPORTING
i_recipient = ol_recipient
i_express = abap_true
).
* Corpo do e-mail
DATA(ol_document) =
cl_document_bcs=>create_document(
i_type = 'HTM'
i_text = it_body
i_length = '90'
i_subject = iv_subject ).
* Anexo do e-mail
IF it_otf[] IS NOT INITIAL.
DATA :
tl_itcoo TYPE STANDARD TABLE OF itcoo,
tl_pdf TYPE STANDARD TABLE OF tline,
vl_len_in TYPE sood-objlen,
vl_bin_file TYPE xstring.
tl_itcoo[] = it_otf[].
CALL FUNCTION 'CONVERT_OTF'
EXPORTING
format = 'PDF'
max_linewidth = 123
IMPORTING
bin_filesize = vl_len_in
bin_file = vl_bin_file
TABLES
otf = tl_itcoo
lines = tl_pdf
EXCEPTIONS
err_max_linewidth = 1
err_format = 2
err_conv_not_possible = 3
err_bad_otf = 4
OTHERS = 5.
DATA(tl_attachment_hex) =
cl_bcs_convert=>xstring_to_solix( vl_bin_file ).
ol_document->add_attachment(
EXPORTING
i_attachment_type = 'PDF'
i_attachment_subject = iv_attachment_name
i_att_content_hex = tl_attachment_hex
).
ENDIF.
* Adiciona o Anexo no e-mail
ol_send_request->set_document( ol_document ).
* Dispara o envio do e-mail
ev_sent = ol_send_request->send( i_with_error_screen = abap_true ).
IF ev_sent IS NOT INITIAL.
* Realiza o envio do e-mail.
COMMIT WORK.
ENDIF.
CATCH cx_bcs INTO me->gx_bcs_exception.
ENDTRY.
ENDMETHOD.
METHOD seleciona_dados.
BREAK-POINT.
* Dentro desse metodo você pode usar a regra que quiser e assim preencher
* o parametro para que dispare o e-mail.
ev_out = abap_true.
ENDMETHOD.
METHOD sender_email.
SELECT SINGLE low FROM tvarvc INTO rv_sender
WHERE name = 'Z_GRC_PC_SENDER'.
ENDMETHOD.
METHOD recipient_email.
SELECT SINGLE low FROM tvarvc INTO rv_recipient
WHERE name = 'Z_GRC_PC_RECIPIENT'.
ENDMETHOD.
METHOD subject_email.
rv_subject = 'Titulo do email de testes - ABAPJuniores'.
ENDMETHOD.
METHOD body_email.
DATA :
lt_lines TYPE TABLE OF tline.
CALL FUNCTION 'READ_TEXT'
EXPORTING
client = sy-mandt
id = 'ST'
language = 'P'
name = 'Z_BODY_DO_EMAIL'
object = 'TEXT'
TABLES
lines = lt_lines[]
EXCEPTIONS
id = 1
language = 2
name = 3
not_found = 4
object = 5
reference_check = 6
wrong_access_to_archive = 7
OTHERS = 8.
IF lt_lines[] IS NOT INITIAL.
LOOP AT lt_lines ASSIGNING FIELD-SYMBOL(<lines>).
APPEND INITIAL LINE TO rt_body ASSIGNING FIELD-SYMBOL(<body>).
CASE <lines>-tdformat.
WHEN '*'.
<body>-line = <lines>-tdline && space.
WHEN '*/'.
WHEN OTHERS.
ENDCASE.
ENDLOOP.
ENDIF.
* Tratativa especial de testes
IF rt_body[] IS INITIAL.
APPEND INITIAL LINE TO rt_body ASSIGNING <body>.
<body>-line = 'Corpo do email teste.'.
ENDIF.
ENDMETHOD.
ENDCLASS.
DATA
o_main TYPE REF TO cl_main.
START-OF-SELECTION.
CREATE OBJECT o_main.
o_main->seleciona_dados(
IMPORTING
ev_out = DATA(lv_out) ).
IF lv_out IS NOT INITIAL.
BREAK-POINT.
o_main->envia_email(
EXPORTING
iv_sender_email = o_main->sender_email( )
iv_subject = o_main->subject_email( )
iv_recipient_mail = o_main->recipient_email( )
it_body = o_main->body_email( )
).
ENDIF.