Foro -Documentación -Código fuente -Contacto -Empleo

Buscar

Traducir

Amazon

ENVIO_MAIL_ANEXO PDF Imprimir E-mail
Usar puntuación: / 0
MaloBueno 
Código fuente - Ejemplos
Martes, 22 de Julio de 2003 17:59
Función para enviar mail con anexos

LZGE003TOP 
--------------- 

function-pool zge003. "MESSAGE-ID .. 

*----------------------------------------------------------------------* 
* DEFINICIÓN DE TABLAS * 
*----------------------------------------------------------------------* 
tables: tsp01. " SPOOL: Demandas 

*----------------------------------------------------------------------* 
* DEFINICIÓN DE ESTRUCTURAS * 
*----------------------------------------------------------------------* 
data: e_datos_doc like sodocchgi1. 

*----------------------------------------------------------------------* 
* DEFINICIÓN DE TABLAS INTERNAS * 
*----------------------------------------------------------------------* 
data: i_objpack like sopcklsti1 occurs 0 with header line, 
i_cabecera like solisti1 occurs 0 with header line, 
i_destinatario like somlreci1 occurs 0 with header line, 
i_pdf like tline occurs 0 with header line, 
i_bin like solisti1 occurs 0 with header line, 
i_cont_bin like solisti1 occurs 0 with header line, 
i_texto like solisti1 occurs 0 with header line. 

*----------------------------------------------------------------------* 
* DEFINICIÓN DE VARIABLES * 
*----------------------------------------------------------------------* 
data: v_lineas like sy-tabix, 
v_lineas_tot like sy-tabix, 
v_num_bytes type i, 
v_len like sy-index, 
v_long like sy-index, 
v_queda like sy-index, 
v_offset like sy-index, 
v_indice like sy-index. 

Código 
-------- 


function z_ge_mailspool. 
*"---------------------------------------------------------------------- 
*"*"Interfase local 
*" IMPORTING 
*" REFERENCE(V_DESTINATARIO) LIKE SOMLRECI1-RECEIVER 
*" REFERENCE(V_TIPO) LIKE SOMLRECI1-REC_TYPE DEFAULT 'B' 
*" REFERENCE(V_TITULO) LIKE SODOCCHGI1-OBJ_DESCR 
*" REFERENCE(V_DESCR_TXT) LIKE SOPCKLSTI1-OBJ_DESCR OPTIONAL 
*" TABLES 
*" I_TEXTO STRUCTURE SOLISTI1 
*" I_SPOOLS STRUCTURE ZEGESPOOL 
*" I_ANEXO STRUCTURE SOLISTI1 
*" EXCEPTIONS 
*" SPOOL_NO_EXISTE 
*" SPOOL_NO_ES_UN_FORMULARIO 
*" DOCUMENTO_NO_ENVIADO 
*" SIN_AUTORIZACION 
*" ERROR_INTERNO 
*"---------------------------------------------------------------------- 

* Se indica la información necesaria para la impresión del texto 
describe table i_texto lines v_lineas. 
refresh i_objpack. 
clear i_objpack. 
v_indice = 1. 
i_objpack-transf_bin = ' '. 
i_objpack-head_start = v_indice. 
i_objpack-body_start = 1. 
i_objpack-body_num = v_lineas. 
i_objpack-doc_type = 'RAW'. 
append i_objpack. 

* A la tabla de texto se le añadirá el contenido del anexo 
append lines of i_anexo to i_texto. 
v_indice = v_indice + 1. 
i_objpack-transf_bin = ' '. 
i_objpack-head_start = v_indice. 
i_objpack-body_start = v_lineas + 1. 
i_objpack-obj_descr = v_descr_txt. 
describe table i_anexo lines v_lineas. 
i_objpack-body_num = v_lineas. 
i_objpack-doc_type = 'RAW'. 
append i_objpack. 

* Y las informaciones necesarias para adjuntar los spools indicados 
refresh i_cont_bin. 
v_indice = v_lineas. 
loop at i_spools. 

perform comprobar_orden_spool using i_spools-rqident. 
perform llenar_tabla_bin using i_spools-rqident. 

v_indice = v_indice + 1. 
clear i_objpack. 
i_objpack-transf_bin = 'X'. 
describe table i_cont_bin lines v_lineas_tot. 
i_objpack-head_start = v_lineas_tot + 1. 
i_objpack-body_start = v_lineas_tot + 1. 
describe table i_bin lines v_lineas. 
i_objpack-body_num = v_lineas. 
i_objpack-doc_type = 'PDF'. 
i_objpack-obj_descr = i_spools-nombre. 
i_objpack-doc_size = v_num_bytes. 
append i_objpack. 
append lines of i_bin to i_cont_bin. 

endloop. 

* Información acerca del documento a enviar 
clear e_datos_doc. 
e_datos_doc-obj_descr = v_titulo. 
e_datos_doc-doc_size = ( v_lineas - 1 ) * 255 + strlen( i_cont_bin ). 

* Información del receptor del mensaje 
refresh i_destinatario. 
clear i_destinatario. 
i_destinatario-receiver = v_destinatario. 
i_destinatario-rec_type = v_tipo. 
append i_destinatario. 

* Envio del mail 
call function 'SO_NEW_DOCUMENT_ATT_SEND_API1' 
exporting 
document_data = e_datos_doc 
put_in_outbox = 'X' 
tables 
packing_list = i_objpack 
contents_bin = i_cont_bin 
contents_txt = i_texto 
receivers = i_destinatario 
exceptions 
too_many_receivers = 1 
document_not_sent = 2 
operation_no_authorization = 4 
others = 99. 

case sy-subrc. 
when 2. 
raise documento_no_enviado. 
when 4. 
raise sin_autorizacion. 
when 99. 
raise error_interno. 
endcase. 

endfunction. 

*----------------------------------------------------------------------* 
***INCLUDE LZGE003F01 . 
*----------------------------------------------------------------------* 
*&---------------------------------------------------------------------* 
*& Form comprobar_orden_spool 
*&---------------------------------------------------------------------* 
* Comprobar que la orden spool existe y es un formulario 
*----------------------------------------------------------------------* 
* -->PI_SPOOL Número de orden spool a comprobar 
*----------------------------------------------------------------------* 
form comprobar_orden_spool using pi_spool. 

select single rqdoctype from tsp01 
into tsp01-rqdoctype 
where rqident = pi_spool. 
if not sy-subrc is initial. 
raise spool_no_existe. 
elseif tsp01-rqdoctype <> 'OTF'. 
raise spool_no_es_un_formulario. 
endif. 

endform. " comprobar_orden_spool 

*&---------------------------------------------------------------------* 
*& Form llenar_tabla_bin 
*&---------------------------------------------------------------------* 
* Convertir el spool a PDF (binario) 
*----------------------------------------------------------------------* 
* -->PI_SPOOL Número de orden spool a tratar 
*----------------------------------------------------------------------* 
form llenar_tabla_bin using pi_spool. 

* Recuperar el spool en formato PDF 
call function 'CONVERT_OTFSPOOLJOB_2_PDF' 
exporting 
src_spoolid = pi_spool 
no_dialog = ' ' 
pdf_destination = 'X' 
importing 
pdf_bytecount = v_num_bytes 
tables 
pdf = i_pdf. 

* La tabla PDF tiene 134 caracteres de ancho, se pasa a la I_BIN, de 255 
refresh i_bin. 
clear i_bin. 
v_queda = 255. 
loop at i_pdf. 
if v_queda > 134. 
v_long = 134. 
else. 
v_long = v_queda. 
endif. 
if v_long > 0. 
concatenate i_bin i_pdf+v_offset(v_long) into i_bin. 
endif. 
v_len = strlen( i_bin ). 
if v_len = 255. 
append i_bin. 
clear i_bin. 
v_offset = 134 - v_queda. 
if v_offset > 0. 
concatenate i_bin i_pdf+v_queda(v_offset) into i_bin. 
endif. 
v_len = strlen( i_bin ). 
clear v_offset. 
endif. 
v_queda = 255 - v_len. 
endloop. 
append i_bin. 

endform. " llenar_tabla_bin 
 
Comentarios
Buscar
¡Sólo los usuarios registrados pueden escribir comentarios!

3.26 Copyright (C) 2008 Compojoom.com / Copyright (C) 2007 Alain Georgette / Copyright (C) 2006 Frantisek Hliva. All rights reserved."

 
home search