PDA

Ver la Versión Completa : enviar pdf por outlook desde proceso de fonfo


minerva0112
09/07/13, 18:31:05
Hola estoy utilizando lo siguiente:


LOOP AT it_correo.

* Crear objeto OLE : outlook.application
CREATE OBJECT appoutlook 'outlook.application' .
* Mensajes vía MAPI
CALL METHOD OF appoutlook 'GetNameSpace' = namespace
EXPORTING
#1 = 'MAPI'.
* Crea objeto nuevo ITEM ( nuevo mensaje )
CALL METHOD OF appoutlook 'CreateItem' = appitem
EXPORTING
#1 = '0'.
* Propiedades TO , SUBJECT y BODY
SET PROPERTY OF appitem 'To' = it_correo-correo.
SET PROPERTY OF appitem 'Subject' = g_txt.
SET PROPERTY OF appitem 'Body' = g_body.

* Se adjunta el archivo
IF NOT g_file IS INITIAL.
CALL METHOD OF appitem 'Attachments' = attachments.
CALL METHOD OF attachments 'Add'
EXPORTING
#1 = g_file.
ENDIF.

* Envíar directamente
CALL METHOD OF appitem 'Send'.
*Se muestra la pantalla del outlook
******* CALL METHOD OF appitem 'Display'.
* Libera Espacio del objeto
FREE OBJECT attachments.
FREE OBJECT appitem.
FREE OBJECT namespace.
* Cierra Outlook ( solo si se quiere que quede cerrado )
**CALL METHOD OF appoutlook 'Quit'.
FREE OBJECT appoutlook.

ENDLOOP.


me sirve de maravilla cuando corro el reporte en linea, una vez que agendo los jobs simplemente no funciona

por favor alguien me puede indicar un metodo para enviar un pdf por correo en proceso de fondo?

gracias

Mauricio Hidalgo
09/07/13, 18:40:11
Claro por que OLE está en el front-end, no en el servidor de aplicaciones.

Pregunta el PDF lo tienes a partir de que?:

Una lista, un formulario, una orden spool, un PDF en tu disco local?...disco local imposible que lo puedas levantar en proceso de fondo.

Saludos

minerva0112
09/07/13, 20:27:24
Claro por que OLE está en el front-end, no en el servidor de aplicaciones.

Pregunta el PDF lo tienes a partir de que?:

Una lista, un formulario, una orden spool, un PDF en tu disco local?...disco local imposible que lo puedas levantar en proceso de fondo.

Saludos


hola es un formulario (smartforms)

Mauricio Hidalgo
09/07/13, 20:49:47
Fijar lo siguientes atributos a la estructura de control de salida del formulario, parámetros CONTROL_PARAMETERS y OUTPUT_OPTIONS en el llamado del formulario .


control-getotf = 'X'. "con esto tendras el OTF para poder enviar el PDF
control-no_dialog = 'X' "Sin dialogo para selección de impresora
output-tdnoprev = 'X'. "sin vista previa


Te adjunto rutina para armar el envio del correo.

FORM ENVIAR_MAIL_Usuario.
DATA: OBJPACK LIKE SOPCKLSTI1 OCCURS 2 WITH HEADER LINE.
DATA: OBJHEAD LIKE SOLISTI1 OCCURS 1 WITH HEADER LINE.
DATA: OBJBIN LIKE SOLISTI1 OCCURS 10 WITH HEADER LINE.
DATA: OBJTXT LIKE SOLISTI1 OCCURS 10 WITH HEADER LINE.
DATA: RECLIST LIKE SOMLRECI1 OCCURS 5 WITH HEADER LINE.
DATA: DOC_CHNG LIKE SODOCCHGI1.
DATA: TAB_LINES LIKE SY-TABIX.
DATA L_NUM(3).
DATA LARGO TYPE I.
DATA SYSUBRC TYPE N.

Data: v_ADDRNUMBER like ADRC-ADDRNUMBER,
v_PERSNUMBER like ADRP-PERSNUMBER.


DATA: BEGIN OF correo OCCURS 24.
DATA: linea(255).
DATA: END OF correo.

DATA filesize TYPE I.

* TOMAR OTF Y PASARLO A PDF
CALL FUNCTION 'CONVERT_OTF'
EXPORTING
FORMAT = 'PDF'
IMPORTING
BIN_FILESIZE = FILESIZE
TABLES
OTF = T_OTF
LINES = T_LINES
EXCEPTIONS
ERR_CONV_NOT_POSSIBLE = 1.

* File Name
DOC_CHNG-OBJ_NAME = 'MESSAGE'.
* Mail Subject
CONCATENATE 'Reclamo N° ' nast-objky
into DOC_CHNG-OBJ_DESCR
SEPARATED BY SPACE.

* PACKING INFO TEXT DATA
OBJTXT-LINE = 'Ver detalle de reclamo en Documento Adjunto.'.
APPEND OBJTXT.

DESCRIBE TABLE OBJTXT LINES TAB_LINES.
READ TABLE OBJTXT INDEX TAB_LINES.
DOC_CHNG-DOC_SIZE = ( TAB_LINES - 1 ) * 255 + STRLEN( OBJTXT ).

* CLEAR OBJHEAD.
* OBJHEAD = 'MiPDF.PDF'.
* APPEND OBJHEAD.

clear OBJPACK.
OBJPACK-TRANSF_BIN = ''.
OBJPACK-HEAD_START = 1.
OBJPACK-HEAD_NUM = 0.
OBJPACK-BODY_START = 1.
OBJPACK-BODY_NUM = TAB_LINES.
OBJPACK-DOC_TYPE = 'RAW'.
APPEND OBJPACK.

CALL FUNCTION 'QCE1_CONVERT'
TABLES
T_SOURCE_TAB = T_LINES
T_TARGET_TAB = OBJBIN
EXCEPTIONS
CONVERT_NOT_POSSIBLE = 1.


DESCRIBE TABLE OBJBIN LINES TAB_LINES.
READ TABLE OBJBIN INDEX TAB_LINES.

clear OBJPACK.
OBJPACK-TRANSF_BIN = 'X'.
OBJPACK-head_start = 1.
OBJPACK-head_num = 0.
OBJPACK-BODY_START = 1.
OBJPACK-BODY_NUM = TAB_LINES.
OBJPACK-DOC_TYPE = 'PDF'.
OBJPACK-OBJ_NAME = 'COTIPDF'.

CONCATENATE 'Cotizac_' nast-objky Into OBJPACK-OBJ_DESCR.

* OBJPACK-OBJ_DESCR = 'Click para ver archivo'.
OBJPACK-DOC_SIZE = ( TAB_LINES - 1 ) * 255 + STRLEN( OBJBIN ).
APPEND OBJPACK.

* Completing the recipient list target recipent
clear RECLIST.
select single ADDRNUMBER PERSNUMBER
into (v_ADDRNUMBER, v_PERSNUMBER)
from USR21
where BNAME = sy-uname.

if sy-subrc eq 0.
select single SMTP_ADDR into RECLIST-RECEIVER
from ADR6
where ADDRNUMBER = v_ADDRNUMBER
and PERSNUMBER = v_PERSNUMBER.
if sy-subrc eq 0.
RECLIST-REC_TYPE = 'U'.
APPEND RECLIST.
Else.
* Si no encuentra el correo externo del usuario,
* mandamos al correo interno de SAP.
RECLIST-RECEIVER = sy-uname.
RECLIST-REC_TYPE = 'B'.
APPEND RECLIST.
endif.
ENDIF.

*
* Sending the document
CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
EXPORTING
DOCUMENT_DATA = DOC_CHNG
TABLES
PACKING_LIST = OBJPACK
* OBJECT_HEADER = OBJHEAD
CONTENTS_BIN = OBJBIN
CONTENTS_TXT = OBJTXT
RECEIVERS = RECLIST
EXCEPTIONS
TOO_MANY_RECEIVERS = 1
DOCUMENT_NOT_SENT = 2
OPERATION_NO_AUTHORIZATION = 4
OTHERS = 99.
ENDFORM.

Con eso debería poder armar tu programa para que pueda correr en segundo plano.

Saludos

minerva0112
11/07/13, 16:01:39
Fijar lo siguientes atributos a la estructura de control de salida del formulario, parámetros CONTROL_PARAMETERS y OUTPUT_OPTIONS en el llamado del formulario .


control-getotf = 'X'. "con esto tendras el OTF para poder enviar el PDF
control-no_dialog = 'X' "Sin dialogo para selección de impresora
output-tdnoprev = 'X'. "sin vista previa


Te adjunto rutina para armar el envio del correo.

FORM ENVIAR_MAIL_Usuario.
DATA: OBJPACK LIKE SOPCKLSTI1 OCCURS 2 WITH HEADER LINE.
DATA: OBJHEAD LIKE SOLISTI1 OCCURS 1 WITH HEADER LINE.
DATA: OBJBIN LIKE SOLISTI1 OCCURS 10 WITH HEADER LINE.
DATA: OBJTXT LIKE SOLISTI1 OCCURS 10 WITH HEADER LINE.
DATA: RECLIST LIKE SOMLRECI1 OCCURS 5 WITH HEADER LINE.
DATA: DOC_CHNG LIKE SODOCCHGI1.
DATA: TAB_LINES LIKE SY-TABIX.
DATA L_NUM(3).
DATA LARGO TYPE I.
DATA SYSUBRC TYPE N.

Data: v_ADDRNUMBER like ADRC-ADDRNUMBER,
v_PERSNUMBER like ADRP-PERSNUMBER.


DATA: BEGIN OF correo OCCURS 24.
DATA: linea(255).
DATA: END OF correo.

DATA filesize TYPE I.

* TOMAR OTF Y PASARLO A PDF
CALL FUNCTION 'CONVERT_OTF'
EXPORTING
FORMAT = 'PDF'
IMPORTING
BIN_FILESIZE = FILESIZE
TABLES
OTF = T_OTF
LINES = T_LINES
EXCEPTIONS
ERR_CONV_NOT_POSSIBLE = 1.

* File Name
DOC_CHNG-OBJ_NAME = 'MESSAGE'.
* Mail Subject
CONCATENATE 'Reclamo N° ' nast-objky
into DOC_CHNG-OBJ_DESCR
SEPARATED BY SPACE.

* PACKING INFO TEXT DATA
OBJTXT-LINE = 'Ver detalle de reclamo en Documento Adjunto.'.
APPEND OBJTXT.

DESCRIBE TABLE OBJTXT LINES TAB_LINES.
READ TABLE OBJTXT INDEX TAB_LINES.
DOC_CHNG-DOC_SIZE = ( TAB_LINES - 1 ) * 255 + STRLEN( OBJTXT ).

* CLEAR OBJHEAD.
* OBJHEAD = 'MiPDF.PDF'.
* APPEND OBJHEAD.

clear OBJPACK.
OBJPACK-TRANSF_BIN = ''.
OBJPACK-HEAD_START = 1.
OBJPACK-HEAD_NUM = 0.
OBJPACK-BODY_START = 1.
OBJPACK-BODY_NUM = TAB_LINES.
OBJPACK-DOC_TYPE = 'RAW'.
APPEND OBJPACK.

CALL FUNCTION 'QCE1_CONVERT'
TABLES
T_SOURCE_TAB = T_LINES
T_TARGET_TAB = OBJBIN
EXCEPTIONS
CONVERT_NOT_POSSIBLE = 1.


DESCRIBE TABLE OBJBIN LINES TAB_LINES.
READ TABLE OBJBIN INDEX TAB_LINES.

clear OBJPACK.
OBJPACK-TRANSF_BIN = 'X'.
OBJPACK-head_start = 1.
OBJPACK-head_num = 0.
OBJPACK-BODY_START = 1.
OBJPACK-BODY_NUM = TAB_LINES.
OBJPACK-DOC_TYPE = 'PDF'.
OBJPACK-OBJ_NAME = 'COTIPDF'.

CONCATENATE 'Cotizac_' nast-objky Into OBJPACK-OBJ_DESCR.

* OBJPACK-OBJ_DESCR = 'Click para ver archivo'.
OBJPACK-DOC_SIZE = ( TAB_LINES - 1 ) * 255 + STRLEN( OBJBIN ).
APPEND OBJPACK.

* Completing the recipient list target recipent
clear RECLIST.
select single ADDRNUMBER PERSNUMBER
into (v_ADDRNUMBER, v_PERSNUMBER)
from USR21
where BNAME = sy-uname.

if sy-subrc eq 0.
select single SMTP_ADDR into RECLIST-RECEIVER
from ADR6
where ADDRNUMBER = v_ADDRNUMBER
and PERSNUMBER = v_PERSNUMBER.
if sy-subrc eq 0.
RECLIST-REC_TYPE = 'U'.
APPEND RECLIST.
Else.
* Si no encuentra el correo externo del usuario,
* mandamos al correo interno de SAP.
RECLIST-RECEIVER = sy-uname.
RECLIST-REC_TYPE = 'B'.
APPEND RECLIST.
endif.
ENDIF.

*
* Sending the document
CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
EXPORTING
DOCUMENT_DATA = DOC_CHNG
TABLES
PACKING_LIST = OBJPACK
* OBJECT_HEADER = OBJHEAD
CONTENTS_BIN = OBJBIN
CONTENTS_TXT = OBJTXT
RECEIVERS = RECLIST
EXCEPTIONS
TOO_MANY_RECEIVERS = 1
DOCUMENT_NOT_SENT = 2
OPERATION_NO_AUTHORIZATION = 4
OTHERS = 99.
ENDFORM.

Con eso debería poder armar tu programa para que pueda correr en segundo plano.

Saludos


Debo de tener algo de mas o me esta faltando algo porque no me genera el correo ni en linea ni en proceso de fondo, please si me puedes ayudar te anexo el codigo

FORM f_generar_archivo_pdf.


* Funcion para llamar el formulario
CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
EXPORTING
formname = 'ZHRO_LSTD_NTFCCNS'(031)
IMPORTING
fm_name = g_funcion
EXCEPTIONS
no_form = 1
no_function_module = 2
OTHERS = 3.


g_control_parameters-getotf = 'X'.
g_control_parameters-no_dialog = 'X'.
g_output_options-tdnoprev = 'X'.
g_output_options-tddest = 'PDF '.
g_output_options-tdnewid = 'X'.
g_output_options-tdimmed = 'X'.



CALL FUNCTION g_funcion
EXPORTING
indicador = g_indicador
texto = g_texto
output_options = g_output_options
control_parameters = g_control_parameters
user_settings = space
IMPORTING
job_output_info = t_otf_from_fm
TABLES
it_data = it_data
EXCEPTIONS
formatting_error = 1
internal_error = 2
send_error = 3
user_canceled = 4
OTHERS = 5.


IF sy-subrc EQ 0.
t_otf[] = t_otf_from_fm-otfdata[].
ENDIF.

ENDFORM. "f_generar_archivo_pdf



FORM f_enviar_correo.


SELECT *
FROM pa0105
INTO TABLE it_pa0105a
WHERE pernr IN p_remit
AND endda EQ '99991231'
AND subty EQ '0010'.

LOOP AT it_pa0105a.
MOVE: it_pa0105a-usrid_long TO it_correo-correo.
APPEND it_correo.
ENDLOOP.


LOOP AT it_correo.
* TOMAR OTF Y PASARLO A PDF
CALL FUNCTION 'CONVERT_OTF'
EXPORTING
format = 'PDF'
IMPORTING
bin_filesize = filesize
TABLES
otf = t_otf
lines = t_lines
EXCEPTIONS
err_conv_not_possible = 1.

* File Name
doc_chng-obj_name = 'MESSAGE'.
* Mail Subject
CONCATENATE 'Reclamo N° ' sy-datum
INTO doc_chng-obj_descr
SEPARATED BY space.

* PACKING INFO TEXT DATA
objtxt-line = 'Anexo Listado de Notificacion.'.
APPEND objtxt.

DESCRIBE TABLE objtxt LINES tab_lines.
READ TABLE objtxt INDEX tab_lines.
doc_chng-doc_size = ( tab_lines - 1 ) * 255 + STRLEN( objtxt ).

* CLEAR OBJHEAD.
* OBJHEAD = 'MiPDF.PDF'.
* APPEND OBJHEAD.

CLEAR objpack.
objpack-transf_bin = ''.
objpack-head_start = 1.
objpack-head_num = 0.
objpack-body_start = 1.
objpack-body_num = tab_lines.
objpack-doc_type = 'RAW'.
APPEND objpack.

CALL FUNCTION 'QCE1_CONVERT'
TABLES
t_source_tab = t_lines
t_target_tab = objbin
EXCEPTIONS
convert_not_possible = 1.


DESCRIBE TABLE objbin LINES tab_lines.
READ TABLE objbin INDEX tab_lines.

CLEAR objpack.
objpack-transf_bin = 'X'.
objpack-head_start = 1.
objpack-head_num = 0.
objpack-body_start = 1.
objpack-body_num = tab_lines.
objpack-doc_type = 'PDF'.
objpack-obj_name = 'COTIPDF'.

CONCATENATE 'Listado Notificacion' sy-datum INTO objpack-obj_descr.

* OBJPACK-OBJ_DESCR = 'Click para ver archivo'.
objpack-doc_size = ( tab_lines - 1 ) * 255 + STRLEN( objbin ).
APPEND objpack.

* Completing the recipient list target recipent
CLEAR reclist.
* SELECT SINGLE addrnumber persnumber
* INTO (v_addrnumber, v_persnumber)
* FROM usr21
* WHERE bname = sy-uname.
*
* IF sy-subrc EQ 0.
* SELECT SINGLE smtp_addr INTO reclist-receiver
* FROM adr6
* WHERE addrnumber = v_addrnumber
* AND persnumber = v_persnumber.
* IF sy-subrc EQ 0.
* reclist-rec_type = 'U'.
* APPEND reclist.
* ELSE.
** Si no encuentra el correo externo del usuario,
** mandamos al correo interno de SAP.
* reclist-receiver = sy-uname.
* reclist-rec_type = 'B'.
* APPEND reclist.
* ENDIF.
* ENDIF.
reclist-receiver = it_correo-correo.
reclist-rec_type = 'B'.
APPEND reclist.

* Sending the document
CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
EXPORTING
document_data = doc_chng
TABLES
packing_list = objpack
* OBJECT_HEADER = OBJHEAD
contents_bin = objbin
contents_txt = objtxt
receivers = reclist
EXCEPTIONS
too_many_receivers = 1
document_not_sent = 2
operation_no_authorization = 4
OTHERS = 99.

ENDLOOP.

Mauricio Hidalgo
11/07/13, 18:55:58
Quita esto:

g_output_options-tddest = 'PDF '.
g_output_options-tdnewid = 'X'.
g_output_options-tdimmed = 'X'.

Son correos SAP Office?...porque si son externo el tipo debe ser 'U' no 'B'.

Saludos