PDA

Ver la Versión Completa : Mandar un pdf en mail


Hasurac
18/12/09, 10:22:01
Hola mi consulta es como puedo enviar un pdf por mail, ósea yo trasformo el smanfromts en pdf pero ahora debo enviarlo por mail y no se como e visto por la red unas opciones pero no logro entenderlas bien si alguien me podria ayudar se lo agradecería hai les pongo el código donde trasformo a pdf


DATA: lv_solicitud TYPE zthr_0004-num_solicitud,
i_pdf LIKE tline OCCURS 100 WITH HEADER LINE,
W_CTRLOP TYPE SSFCTRLOP,
V_LEN_IN LIKE SOOD-OBJLEN,
I_OTF TYPE ITCOO OCCURS 0 WITH HEADER LINE,
W_COMPOP TYPE SSFCOMPOP,
I_TLINE TYPE TABLE OF TLINE," WITH HEADER LINE,
W_RETURN TYPE SSFCRESCL,
SPOOLNO type TSP01-RQIDENT. " Orden Spool


W_CTRLOP-GETOTF = 'X'.
W_CTRLOP-NO_DIALOG = 'X'.
W_COMPOP-TDNOPREV = 'X'.
W_COMPOP-TDDEST = 'LOCL'.
W_COMPOP-TDARMOD = '1'.
W_COMPOP-TDCOPIES = '1'.
W_COMPOP-TDPRINTER = 'SAPWIN'.
W_COMPOP-TDLIFETIME = '8'.

CALL FUNCTION '/1BCDWB/SF00000006'

EXPORTING
CONTROL_PARAMETERS = W_CTRLOP
OUTPUT_OPTIONS = W_COMPOP
USER_SETTINGS = 'X'
"Aca los parametros que necesita el smartform
gp_logo = p_logo
gp_n_solicitud = p_n_solicitud
gp_nom_tra = p_nom_tra
gp_rut_tra = p_rut_tra
gp_empresa = p_empresa
gp_fech_ing_emp = p_fech_ing_emp
gp_sindicato = p_sindicato
gp_tip_boni = p_tip_boni
gp_fech_soli = p_fech_soli
gp_rut_bene = p_rut_ben
gp_nom_famil = p_nom_hc
gp_ap_paterno = p_ap_paterno
gp_ap_materno = p_ap_materno

IMPORTING
JOB_OUTPUT_INFO = W_RETURN "aca me devuelve el smartform
TABLES
tp_for001 = tp_001
EXCEPTIONS
FORMATTING_ERROR = 1
INTERNAL_ERROR = 2
SEND_ERROR = 3
USER_CANCELED = 4
OTHERS = 5.
IF SY-SUBRC NE 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.

I_OTF[] = W_RETURN-OTFDATA[].

CALL FUNCTION 'CONVERT_OTF'
EXPORTING
FORMAT = 'PDF'
MAX_LINEWIDTH = 132
IMPORTING
BIN_FILESIZE = V_LEN_IN
TABLES
OTF = I_OTF
LINES = I_TLINE
EXCEPTIONS
ERR_MAX_LINEWIDTH = 1
ERR_FORMAT = 2
ERR_CONV_NOT_POSSIBLE = 3
OTHERS = 4.
IF SY-SUBRC EQ 0.
ENDIF.

The_best_for_less
18/12/09, 12:31:30
Estimado prueba con este código, a mi me funko
Saludos.

REPORT zkpi0020.
***
TABLES: usr01. "Maestro de usuarios
*
DATA: d_lineas LIKE sy-tabix,
i_pdf LIKE tline,
fich_p_borrar LIKE tsp01-rqtitle,
pbyte TYPE i,
i_spoolreq LIKE rsporq,
spool_id LIKE tsp01-rqident,
respuesta LIKE sy-tabix,
i_otf,
fecha_w(16),
indice LIKE sy-tabix,
datc LIKE rsporq-rqcretime,
l_comando LIKE sxpgcolist-name.
* Tablas Internas
DATA: t_pdf LIKE tline OCCURS 0,
tspoolreq LIKE rsporq OCCURS 0,
lista_sel LIKE spopli OCCURS 0 WITH HEADER LINE.

DATA: BEGIN OF i_output OCCURS 10.
INCLUDE STRUCTURE btcxpm.
DATA: END OF i_output.
DATA: d_status LIKE extcmdexex-status,
d_exit LIKE extcmdexex-exitcode.

DATA : p_to(60),
p_subj(30),
p_body(50).

* Include Objetos OLE para envio de mensajes
INCLUDE ole2incl.

***-------------------------------------------------------------------**
** PANTALLA DE SELECCION

SELECTION-SCREEN SKIP.
SELECTION-SCREEN BEGIN OF BLOCK datos WITH FRAME TITLE text-000.
PARAMETERS:
p_arch LIKE tsp01-rqtitle,
p_fich LIKE rlgrap-filename OBLIGATORY
DEFAULT 'C:\Envios\',
usernam LIKE sy-uname DEFAULT sy-uname,
disp LIKE rspotype-device OBLIGATORY,
datum LIKE sy-datum DEFAULT sy-datum OBLIGATORY.
SELECTION-SCREEN END OF BLOCK datos.
*
INITIALIZATION.
PERFORM recuperar_impresora.
***------------------------------------------------------------------***
START-OF-SELECTION.
PERFORM buscar_datos_seleccion.
*
IF respuesta NE 0.
PERFORM tratamiento_pdf.
DESCRIBE TABLE t_pdf LINES d_lineas.
IF d_lineas NE 0. "solo hago el download si tengo datos
PERFORM bajar_archivo.
PERFORM envia-mail.
OPEN DATASET p_fich FOR INPUT IN BINARY MODE. "IN TEXT MODE.
DELETE DATASET p_fich.
ENDIF.
ENDIF.

END-OF-SELECTION.
*---------------------------------------------------------------------*
* Form BUSCAR_DATOS_SELECCION
*---------------------------------------------------------------------*
FORM buscar_datos_seleccion.
CONCATENATE sy-datum '00000000' INTO fecha_w.
CALL FUNCTION 'RSPO_FIND_SPOOL_REQUESTS' " Leemos los spools
EXPORTING
allclients = ' '
authority = 'X'
datatype = '*'
has_output_requests = '*'
rq0name = '*'
rq1name = '*'
rq2name = '*'
rqdest = disp
rqident = 0
rqowner = usernam
* rqcretime = fecha_w
TABLES
spoolrequests = tspoolreq
EXCEPTIONS
no_permission = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE ID 'Z1' TYPE 'E' NUMBER 000 WITH text-001.
respuesta = 4.
ELSE.
PERFORM elegir-spool.
ENDIF.

ENDFORM. " BUSCAR_DATOS_SELECCION
*---------------------------------------------------------------------*
* Form TRATAMIENTO_PDF
*---------------------------------------------------------------------*
FORM tratamiento_pdf.
* Miramos qué tipo de spool tenemos
CALL FUNCTION 'RSPO_GET_TYPE_SPOOLJOB'
EXPORTING
rqident = spool_id
IMPORTING
is_otf = i_otf
EXCEPTIONS
can_not_access = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE ID 'Z1' TYPE 'E' NUMBER 000
WITH text-002.
ELSEIF i_otf EQ 'X'.
* Generar PDF de OTF
CALL FUNCTION 'CONVERT_OTFSPOOLJOB_2_PDF'
EXPORTING
src_spoolid = spool_id
IMPORTING
pdf_bytecount = pbyte
TABLES
pdf = t_pdf
EXCEPTIONS
err_no_otf_spooljob = 1
err_no_spooljob = 2
err_no_permission = 3
err_conv_not_possible = 4
err_bad_dstdevice = 5
user_cancelled = 6
err_spoolerror = 7
err_temseerror = 8
err_btcjob_open_failed = 9
err_btcjob_submit_failed = 10
err_btcjob_close_failed = 11
OTHERS = 12.
ELSE. " Generar PDF de Abap
CALL FUNCTION 'CONVERT_ABAPSPOOLJOB_2_PDF'
EXPORTING
src_spoolid = spool_id
IMPORTING
pdf_bytecount = pbyte
TABLES
pdf = t_pdf
EXCEPTIONS
err_no_abap_spooljob = 1
err_no_spooljob = 2
err_no_permission = 3
err_conv_not_possible = 4
err_bad_destdevice = 5
user_cancelled = 6
err_spoolerror = 7
err_temseerror = 8
err_btcjob_open_failed = 9
err_btcjob_submit_failed = 10
err_btcjob_close_failed = 11
OTHERS = 12.
IF sy-subrc EQ 0.
* Iniciamos la traducción por error en la funcion de conversion ABAP-PDF
LOOP AT t_pdf INTO i_pdf.
TRANSLATE i_pdf USING ',.'.
MODIFY t_pdf FROM i_pdf.
ENDLOOP.
ENDIF.
ENDIF. "De if sy-subrc

ENDFORM. " TRATAMIENTO_PDF

*---------------------------------------------------------------------*
* Form BAJAR_ARCHIVO
*---------------------------------------------------------------------*
FORM bajar_archivo.
CONCATENATE p_fich p_arch '.pdf' INTO p_fich.
CALL FUNCTION 'WS_DOWNLOAD'
EXPORTING
bin_filesize = pbyte
filename = p_fich
filetype = 'BIN'
TABLES
data_tab = t_pdf
EXCEPTIONS
invalid_filesize = 1
invalid_table_width = 2
invalid_type = 3
no_batch = 4
unknown_error = 5
gui_refuse_filetransfer = 6.

IF sy-subrc <> 0.
MESSAGE ID 'Z1' TYPE 'E' NUMBER '000' WITH text-003.
ENDIF.
ENDFORM. " BAJAR_ARCHIVO
*---------------------------------------------------------------------*
* Form RECUPERAR_IMPRESORA
*---------------------------------------------------------------------*
FORM recuperar_impresora.
SELECT SINGLE spld FROM usr01
INTO CORRESPONDING FIELDS OF usr01
WHERE bname = sy-uname.
IF sy-subrc = 0.
disp = usr01-spld.
ENDIF.
ENDFORM. " RECUPERAR_IMPRESORA
*---------------------------------------------------------------------*
* Form ELEGIR-SPOOL
*---------------------------------------------------------------------*
FORM elegir-spool.
* Definimos la lista para elegir la orden spool
SORT tspoolreq.
LOOP AT tspoolreq INTO i_spoolreq.
IF i_spoolreq-rqcretime+0(8) = datum.
IF i_spoolreq-rqtitle IS INITIAL.
CONCATENATE i_spoolreq-rqident i_spoolreq-rq0name
i_spoolreq-rq1name i_spoolreq-rq2name INTO
lista_sel-varoption SEPARATED BY space.
ELSE.
CONCATENATE i_spoolreq-rqident i_spoolreq-rqtitle
INTO lista_sel-varoption SEPARATED BY space.
ENDIF.
APPEND lista_sel.
ELSE.
DELETE tspoolreq.
ENDIF.
ENDLOOP.

* Y Pedimos que se seleccione la orden spool
SORT lista_sel BY varoption+0(10) AS TEXT.
IF sy-subrc = 0.
respuesta = 0.
CALL FUNCTION 'POPUP_WITH_TABLE_DISPLAY'
EXPORTING
endpos_col = 60
endpos_row = 10
startpos_col = 1
startpos_row = 1
titletext = text-010
IMPORTING
choise = respuesta
TABLES
valuetab = lista_sel
EXCEPTIONS
break_off = 1
OTHERS = 2.
IF ( sy-subrc = 1 ) OR ( sy-subrc = 2 ).
LEAVE TO SCREEN 0.
ELSE.
IF respuesta NE 0.
MOVE respuesta TO indice.
ENDIF.
READ TABLE lista_sel INTO i_spoolreq INDEX indice.
SHIFT i_spoolreq LEFT DELETING LEADING space.
spool_id = i_spoolreq-rqident.
ENDIF.
ENDIF.

ENDFORM. " ELEGIR-SPOOL

*&---------------------------------------------------------------------*
*& Form ENVIA-MAIL
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM envia-mail.
DATA: appoutlook TYPE ole2_object.
DATA: appout2 TYPE ole2_object.
DATA: appitem TYPE ole2_object.
DATA: namespace TYPE ole2_object.
DATA: attachments TYPE ole2_object.
* 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' = p_to.
SET PROPERTY OF appitem 'Subject' = p_subj.
SET PROPERTY OF appitem 'Body' = p_body.

****************************************
*Se adjunta el fichero
IF NOT p_fich IS INITIAL.
CALL METHOD OF appitem 'Attachments' = attachments.
CALL METHOD OF attachments 'Add'
EXPORTING #1 = p_fich.
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.
ENDFORM. "ENVIA-MAIL

Hasurac
18/12/09, 12:40:58
Gracia s por tu ayuda pero no e s lo que estoy buscando en si lo que pasaste usa el Outlook lo cual no necesariamente van a usar, y la parte de pdf ya esta echa solo deseo saber como mandar el mail con el archivo pdf adjunto pero gracias de todas forma XD

Hasurac
18/12/09, 13:30:33
Buscando por Internet lo que encuentro es esta función pero no entiendo bien como ago para cargarle el archivo pdf dado que en algunos lados lo convierten a bin y en otros no pero definen siempre una estructura objekpack o algo así pero n entiendo bien donde cargan ahí si me podrían ayudar agradecería