Вы находитесь на странице: 1из 8

*&---------------------------------------------------------------------*

*& NOME DO PROGRAMA : ZFI_F_ENVIA_EMAIL_SPB


*& TTULO DO PROGRAMA : Envia E-mail SPB
*& PROGRAMADOR
: Bruno Santos(T0695)
*& DATA
: 14/06/2013
*& LTIMA ATUALIZAO : 14/06/2013
*&
*& DESCRIO
*&---------------------------------------------------------------------*
*& LISTA DE MODIFICAES:
*
*& DATA
AUTOR
REQUEST #
DESCRIO
*
*& 14/06/2013 T0695
SPDK900013
CODIFICAO INICIAL *
*&---------------------------------------------------------------------*
FUNCTION zfi_f_envia_email_spb .
*"---------------------------------------------------------------------*"*"Interface local:
*" IMPORTING
*"
REFERENCE(INTERFACE) TYPE ZZ_DE_INTERFACE
*"
REFERENCE(CODPROGRAMA) TYPE ZZDE_CODPROGSPB
*"
REFERENCE(PARAM1) TYPE STRING OPTIONAL
*"
REFERENCE(PARAM2) TYPE STRING OPTIONAL
*"
REFERENCE(PARAM3) TYPE STRING OPTIONAL
*"
REFERENCE(PARAM4) TYPE STRING OPTIONAL
*"
REFERENCE(PARAM5) TYPE STRING OPTIONAL
*"
REFERENCE(PARAM6) TYPE STRING OPTIONAL
*"
REFERENCE(PARAM7) TYPE STRING OPTIONAL
*"
REFERENCE(PARAM8) TYPE STRING OPTIONAL
*"
REFERENCE(PARAM9) TYPE STRING OPTIONAL
*"
REFERENCE(PARAM10) TYPE STRING OPTIONAL
*"
REFERENCE(GERA_TAGS) TYPE XFELD OPTIONAL
*" TABLES
*"
T_NOME_ANEXO STRUCTURE ZSTEFILENAMES OPTIONAL
*"
T_ANEXO STRUCTURE ZFI_E_EMAIL_SPB_ANEXO OPTIONAL
*"
T_MSGSPB_ITM STRUCTURE ZFI_T_MSGSPB_ITM OPTIONAL
*"
T_EMAILS STRUCTURE SOMLRECI1 OPTIONAL
*" EXCEPTIONS
*"
PROGRAMA_NAO_ENCONTRADO
*"
EMAIL_NAO_ENVIADO
*"
CAMPO_OBRIGATORIO_VAZIO
*"---------------------------------------------------------------------DATA: vl_geratags.
" Verifica se a varivel de entrada obrigatria est preenchida
IF codprograma IS NOT INITIAL.
" Inicia tabelas
REFRESH: t_body.
" Seleciona na tabela de cadastro de envio de email
SELECT SINGLE codprograma desc_assunto corpo lista_distrib
INTO wa_emailspb
FROM zfi_t_emailspb
WHERE interface = interface
AND codprograma = codprograma.
" Verifica se a tabela retornou preenchida da seleo
IF sy-subrc = 0.
" Passa a lista de email configurada na tabela

CLEAR wa_emails.
wa_emails-rec_type = c_rec_type.
wa_emails-receiver = wa_emailspb-lista_distrib.
APPEND wa_emails TO t_emails.
t_email[] = t_emails[].
" Monta a tabela de parmentros
CLEAR wa_param.
wa_param-tpcorp = 'HTM'.
wa_param-titulo = wa_emailspb-desc_assunto.
" Retorna o corpo do email criado na transao SO10
CALL FUNCTION 'READ_TEXT'
EXPORTING
client = sy-mandt
id
= 'ST'
language = sy-langu
name
= wa_emailspb-corpo
object = 'TEXT'
TABLES
lines
= t_lines.
" Verifica se existe linhas do corpo de email da tabela ZFI_T_EMAILSPB
CHECK t_lines[] IS NOT INITIAL.
wa_body-line =
APPEND wa_body
wa_body-line =
APPEND wa_body

'<HTML>'.
TO t_body.
'<BODY>'.
TO t_body.

wa_body-line = '<font size=1 color=blue>'.


APPEND wa_body TO t_body.
wa_body-line = 'Classificao: Documento Reservado'.
APPEND wa_body TO t_body.
CONCATENATE '<BR>' 'Restrio de Acesso: Empresas do Sistema BNDES - Uso no mbi
to interno'
INTO wa_body-line RESPECTING BLANKS.
APPEND wa_body TO t_body.
CONCATENATE '<BR>' 'Unidade Gestora: AF/DERES (classificao conforme <u>OS PR
ESI 15/2011-BNDES</u>)'
INTO wa_body-line.
APPEND wa_body TO t_body.
wa_body-line = '</font><BR>'.
APPEND wa_body TO t_body.
wa_body-line = '<font size=2 color=black>'.
APPEND wa_body TO t_body.
" Faz a leitura do corpo do email criado na transao SO10
LOOP AT t_lines INTO wa_tline.
IF wa_tline-tdformat = '*'.
"Pular linha
wa_body-line = '<BR>'.
APPEND wa_body TO t_body.

ENDIF.
wa_body-line = wa_tline-tdline.
" Se os parmetros forem passados na entrada da funo
" devero ser subtituidas os '&x' pelos mesmos
IF param1 IS NOT INITIAL.
REPLACE '&1' WITH param1 INTO wa_body-line.
ENDIF.
IF param2 IS NOT INITIAL.
REPLACE '&2' WITH param2 INTO wa_body-line.
ENDIF.
IF param3 IS NOT INITIAL.
REPLACE '&3' WITH param3 INTO wa_body-line.
ENDIF.
IF param4 IS NOT INITIAL.
REPLACE '&4' WITH param4 INTO wa_body-line.
ENDIF.
IF param5 IS NOT INITIAL.
REPLACE '&5' WITH param5 INTO wa_body-line.
ENDIF.
IF param6 IS NOT INITIAL.
REPLACE '&6' WITH param6 INTO wa_body-line.
ENDIF.
IF param7 IS NOT INITIAL.
REPLACE '&7' WITH param7 INTO wa_body-line.
ENDIF.
IF param8 IS NOT INITIAL.
REPLACE '&8' WITH param8 INTO wa_body-line.
ENDIF.
IF param9 IS NOT INITIAL.
REPLACE '&9' WITH param9 INTO wa_body-line.
ENDIF.
IF param10 IS NOT INITIAL.
REPLACE '&10' WITH param10 INTO wa_body-line.
ENDIF.
IF NOT gera_tags IS INITIAL.
REPLACE '&TAGS' WITH text-015 INTO wa_body-line.
IF sy-subrc = 0.
vl_geratags = 'X'.
ENDIF.
ENDIF.
APPEND wa_body TO t_body.
IF NOT vl_geratags IS INITIAL.
SORT t_msgspb_itm ASCENDING BY indice.
LOOP AT t_msgspb_itm.

wa_body-line = '<BR>'.
APPEND wa_body TO t_body.
CONCATENATE t_msgspb_itm-nometag
'->'
t_msgspb_itm-valortag
INTO wa_body-line SEPARATED BY space.
APPEND wa_body TO t_body.
ENDLOOP.
CLEAR vl_geratags.
ENDIF.
ENDLOOP.
wa_body-line = '</font>'.
APPEND wa_body TO t_body.
wa_body-line =
APPEND wa_body
wa_body-line =
APPEND wa_body

'</BODY>'.
TO t_body.
'</HTML>'.
TO t_body.

PERFORM f_monta_anexo_html TABLES t_nome_anexo


t_anexo
t_filename
t_file.
"Funo de envio de email
CALL FUNCTION 'Z_ENVIAR_EMAIL'
EXPORTING
st_param
= wa_param
it_email
= t_email
it_body
= t_body
it_filename
= t_filename
it_file
= t_file
pe_submit
= 'X'
EXCEPTIONS
erro_ao_enviar_email = 1
OTHERS
= 2.
IF sy-subrc <> 0.
RAISE email_nao_enviado.
ENDIF.
ELSE.
RAISE programa_nao_encontrado.
ENDIF.
ELSE.
RAISE campo_obrigatorio_vazio.
ENDIF.
ENDFUNCTION.
FUNCTION z_enviar_email.
*"---------------------------------------------------------------------*"*"Interface local:
*" IMPORTING

*"
REFERENCE(ST_PARAM) TYPE ZSTPARAM_EMAIL
*"
REFERENCE(IT_EMAIL) TYPE SOMLRECI1_T
*"
REFERENCE(IT_BODY) TYPE CCRCTT_TEXT_TAB
*"
REFERENCE(IT_FILENAME) TYPE ZSTCFILENAMES OPTIONAL
*"
REFERENCE(IT_FILE) TYPE ZSTCFILES OPTIONAL
*"
REFERENCE(PE_SUBMIT) TYPE CHAR1 OPTIONAL
*" TABLES
*"
PACKING_LIST STRUCTURE SOPCKLSTI1 OPTIONAL
*"
CONTENTS_HEX STRUCTURE SOLIX OPTIONAL
*" EXCEPTIONS
*"
ERRO_AO_ENVIAR_EMAIL
*"---------------------------------------------------------------------*

Global data declarations


DATA: it_body_locl
it_packing_list
it_email_int
it_attach

TYPE
TYPE
TYPE
TYPE

ccrctt_text_tab,
STANDARD TABLE OF sopcklsti1,
somlreci1_t,
STANDARD TABLE OF solisti1.

DATA: st_param_locl
st_email
st_body
st_doc_data
st_packing_list
st_attach
st_filename
st_file

TYPE
TYPE
TYPE
TYPE
TYPE
TYPE
TYPE
TYPE

zstparam_email,
somlreci1,
solisti1,
sodocchgi1,
sopcklsti1,
solisti1,
zstefilenames,
zstefiles.

DATA: l_nlines TYPE i,


l_nlines2 TYPE i. "ONDA 3 - 07/02/2013
st_param_locl = st_param.
* Verificar se est em um ambiente diferente de produo
IF sy-sysid NE 'ECP'.
*-- Incluir texto indicando que teste no ttulo e no corpo
CONCATENATE 'E-MAIL DE TESTE'(001) st_param_locl-titulo INTO st_param_locl-t
itulo
SEPARATED BY '-'.
IF st_param-tpcorp = 'HTM'.

CONCATENATE '<table border = "0" cellspacing="0" cellpadding="3"'


'style="font-family: Arial, Verdana;font-weight: normal;'
'font-size: 12pt; border-style:solid;">'
'border-color:#F0FFFF;'
INTO st_body-line SEPARATED BY ' '.
APPEND st_body TO it_body_locl.

APPEND st_body TO it_body_locl.


st_body-line = '<tr>'.
APPEND st_body TO it_body_locl.
st_body-line = '<td align="center"><b>'.
APPEND st_body TO it_body_locl.
st_body-line = '-------------------------------------------------------------------------'(004).
APPEND st_body TO it_body_locl.

st_body-line =
APPEND st_body
st_body-line =
APPEND st_body

'</b></td>'.
TO it_body_locl.
'</tr>'.
TO it_body_locl.

APPEND st_body
st_body-line =
APPEND st_body
st_body-line =
APPEND st_body
st_body-line =
APPEND st_body
st_body-line =
APPEND st_body
st_body-line =
APPEND st_body

TO it_body_locl.
'<tr>'.
TO it_body_locl.
'<td align="center"><b>'.
TO it_body_locl.
'ATENO'(002).
TO it_body_locl.
'</b></td>'.
TO it_body_locl.
'</tr>'.
TO it_body_locl.

APPEND st_body TO it_body_locl.


st_body-line = '<tr>'.
APPEND st_body TO it_body_locl.
st_body-line = '<td align="center"><b>'.
APPEND st_body TO it_body_locl.
st_body-line = 'E-mail proveniente do ambiente de teste. Favor desconsider
ar seu contedo.'(003).
APPEND st_body TO it_body_locl.
st_body-line = '</b></td>'.
APPEND st_body TO it_body_locl.
st_body-line = '</tr>'.
APPEND st_body TO it_body_locl.
APPEND st_body TO it_body_locl.
st_body-line = '<tr>'.
APPEND st_body TO it_body_locl.
st_body-line = '<td align="center"><b>'.
APPEND st_body TO it_body_locl.
st_body-line = '-------------------------------------------------------------------------'(004).
APPEND st_body TO it_body_locl.
st_body-line = '</b></td>'.
APPEND st_body TO it_body_locl.
st_body-line = '</tr>'.
APPEND st_body TO it_body_locl.
st_body-line = '</table>'.
APPEND st_body TO it_body_locl.
st_body-line = '<P>'.
APPEND st_body TO it_body_locl.
ELSE.
CLEAR st_body.
INSERT st_body INTO it_body_locl INDEX 1.
st_body-line = text-004. "Separador INSERT st_body INTO it_body_locl INDEX 2.
st_body-line = text-002. "Ateno
INSERT st_body INTO it_body_locl INDEX 3.

st_body-line = text-003. " E-mail proveniente do ambiente de teste.


" Favor desconsiderar seu contedo.
INSERT st_body INTO it_body_locl INDEX 4.
st_body-line = text-004. "Separador INSERT st_body INTO it_body_locl INDEX 5.
ENDIF.
ENDIF.
APPEND LINES OF it_body TO it_body_locl.
it_email_int[] = it_email[].
* Determinar tamanho do documento
DESCRIBE TABLE it_body_locl LINES l_nlines.
* Incio de Alterao - ONDA 3 - 01/04/2013
* READ TABLE it_body_locl INDEX 1 INTO st_body.
* st_doc_data-doc_size = ( l_nlines - 1 ) * 255 + STRLEN( st_body ).
st_doc_data-doc_size = ( l_nlines - 1 ) * 255 + 255.
* Fim de Alterao - ONDA 3 - 01/04/2013
* Atribuir demais campos
st_doc_data-obj_langu
st_doc_data-obj_name
st_doc_data-obj_descr
st_doc_data-sensitivty

do documento
= sy-langu.
= 'E-MAIL'.
= st_param_locl-titulo.
= ' '.

* Montar a Lista de Pacotes


CLEAR st_packing_list.
st_packing_list-head_start = 1.
st_packing_list-head_num = 0.
st_packing_list-body_start = 1.
st_packing_list-body_num = l_nlines.
st_packing_list-doc_type = st_param_locl-tpcorp.
APPEND st_packing_list TO it_packing_list.
LOOP AT it_file INTO st_file.
AT NEW numarq.
*---- Buscar nome do arquivo
READ TABLE it_filename WITH KEY numarq = st_file-numarq
INTO st_filename.
CLEAR l_nlines2. "ONDA 3 - 07/02/2013
ENDAT.
st_attach = st_file-line.
APPEND st_attach TO it_attach.
ADD 1 TO l_nlines2. "ONDA 3 - 07/02/2013
AT END OF numarq.
DESCRIBE TABLE it_attach LINES l_nlines.
CLEAR st_packing_list.
* Incio de Alterao - ONDA 3 - 07/02/2013
*
st_packing_list-doc_size = ( l_nlines - 1 ) * 255 +
*
STRLEN( st_attach ).
st_packing_list-doc_size = ( l_nlines2 - 1 ) * 255 +
STRLEN( st_attach ).

* Fim de Alterao - ONDA 3 - 07/02/2013


st_packing_list-transf_bin = 'X'.
st_packing_list-head_start = 1.
st_packing_list-head_num = 0.
* Incio de Alterao - ONDA 3 - 07/02/2013
*
st_packing_list-body_start = 1.
*
st_packing_list-body_num = l_nlines.
st_packing_list-body_start = l_nlines - l_nlines2 + 1.
st_packing_list-body_num = l_nlines2.
* Fim de Alterao - ONDA 3 - 07/02/2013
st_packing_list-body_num = l_nlines.
st_packing_list-doc_type = st_param_locl-tpanex.
st_packing_list-obj_name = 'FILE'.
st_packing_list-obj_descr = st_filename-nomarq.
APPEND st_packing_list TO it_packing_list.
ENDAT.
ENDLOOP.
IF it_file[] IS INITIAL.
LOOP AT packing_list.
st_packing_list = packing_list.
APPEND st_packing_list TO it_packing_list.
ENDLOOP.
ENDIF.
CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
EXPORTING
document_data
= st_doc_data
put_in_outbox
= 'X'
commit_work
= 'X'
TABLES
packing_list
= it_packing_list
contents_bin
= it_attach
contents_txt
= it_body_locl
contents_hex
= contents_hex
receivers
= it_email_int
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.
IF sy-subrc EQ 0.
IF pe_submit = 'X'.
WAIT UP TO 2 SECONDS.
SUBMIT rsconn01 WITH mode = 'INT' AND RETURN.
ENDIF.
ELSE.
RAISE erro_ao_enviar_email.
ENDIF.
ENDFUNCTION.

Вам также может понравиться