|
Herramientas | Buscar en Tema | Desplegado |
#30
|
||||
|
||||
Aqui mando unas rutinas, esto recupera el número de spool, convierte el spool a PDF, abre el Outlook, y agrega el archivo a un mail.
Lo importante de esta rutina son las funciones utilizadas. Saludos CJOG *&---------------------------------------------------------------------* *& Form OKCODE_CPDF *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* FORM okcode_cpdf. REFRESH i_rsporq. CLEAR vc_user. CONCATENATE 'ZSDSAPMV7' sy-uname(3) INTO vc_user. CALL FUNCTION 'RSPO_FIND_SPOOL_REQUESTS' EXPORTING allclients = '410' rq2name = vc_user "'ZSDSAPMV7CIP' rqowner = sy-uname TABLES spoolrequests = i_rsporq. IF i_rsporq[] IS INITIAL. MESSAGE i998(sp01r) WITH 'Es necesario mandar a imprimir previamente'. ELSE. IF s_kunnr-high NE space. MESSAGE i532(ou) WITH text-m01. sy-lsind = sy-lsind - 1. IF NOT i_rsporq[] IS INITIAL. PERFORM borra_spool. ENDIF. EXIT. ENDIF. LOOP AT i_rsporq. MOVE i_rsporq-rqcretime(8) TO vd_fecha. IF vd_fecha LT sy-datum. DELETE i_rsporq INDEX sy-tabix. CONTINUE. ELSE. MOVE: i_rsporq-rqident TO vi_spool, i_rsporq-rqident TO st_spool-rqident. CONCATENATE 'C:\P' i_rsporq-rqident '.PDF' INTO vc_file. * SUBMIT rstxpdft4 * WITH spoolno = vi_spool * WITH download = 'X' * WITH p_file = vc_file "skip selection-screen * AND RETURN. CALL FUNCTION 'CONVERT_ABAPSPOOLJOB_2_PDF' EXPORTING src_spoolid = vi_spool no_dialog = ' ' IMPORTING pdf_bytecount = v_lines pdf_spoolid = vc_spool btc_jobname = vc_jobnm btc_jobcount = vi_jobcn TABLES pdf = i_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 <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ELSE. CALL FUNCTION 'RSPO_IDELETE_SPOOLREQ' EXPORTING spoolreq = st_spool. CONCATENATE 'C:\' i_rsporq-rqident '.PDF' INTO vc_file. CONDENSE vc_file. CALL FUNCTION 'GUI_DOWNLOAD' EXPORTING bin_filesize = v_lines filename = vc_file filetype = 'BIN' TABLES data_tab = i_pdf. IF sy-subrc EQ 0. READ TABLE s_kunnr INDEX 1. MOVE s_kunnr-low TO vc_kunnr. CLEAR: kna1, adr6. SELECT SINGLE adrnr name1 name2 INTO (kna1-adrnr, kna1-name1, kna1-name2) FROM kna1 WHERE kunnr EQ vc_kunnr. IF sy-subrc EQ 0. SELECT SINGLE smtp_addr INTO adr6-smtp_addr FROM adr6 WHERE addrnumber EQ kna1-adrnr AND persnumber EQ space AND date_from GT '00010101' AND consnumber EQ '001'. ENDIF. CLEAR vc_fecha. CONCATENATE sy-datum+6(2) '/' sy-datum+4(2) '/' sy-datum(4) INTO vc_fecha. CONCATENATE 'al' vc_fecha INTO vc_fecha SEPARATED BY space. CONCATENATE text-r01 vc_fecha INTO vc_subject SEPARATED BY space. CONCATENATE kna1-name1 kna1-name2 ':' INTO i_body-line SEPARATED BY space. APPEND i_body. CLEAR i_body. APPEND i_body. MOVE text-r02 TO i_body-line. APPEND i_body. CLEAR i_body. MOVE text-r03 TO i_body-line. APPEND i_body. CLEAR i_body. MOVE text-r04 TO i_body-line. APPEND i_body. CLEAR i_body. MOVE adr6-smtp_addr TO i_address. APPEND i_address. CLEAR i_address. MOVE vc_file TO i_attachs. APPEND i_attachs. CLEAR i_attachs. CALL FUNCTION 'Z_OUTLOOK' EXPORTING subject = vc_subject TABLES email_body = i_body email_address = i_address email_attachments = i_attachs EXCEPTIONS invalid_pathname = 1 download_failed = 2 execution_failed = 3 OTHERS = 4. CLEAR: v_lines, vc_file. REFRESH: i_pdf, i_body, i_address, i_attachs. ENDIF. CLEAR: vd_fecha, v_lines, i_pdf, vc_file. REFRESH i_pdf. ENDIF. EXIT. ENDIF. ENDLOOP. ENDIF. sy-lsind = sy-lsind - 1. ENDFORM. " OKCODE_CPDF ************************************************ ************************************************ FUNCTION z_outlook. *"---------------------------------------------------------------------- *"*"Interfase local *" IMPORTING *" REFERENCE(SUBJECT) TYPE C OPTIONAL *" TABLES *" EMAIL_BODY STRUCTURE SOLI OPTIONAL *" EMAIL_ADDRESS STRUCTURE SOLI OPTIONAL *" EMAIL_ATTACHMENTS STRUCTURE SOLI OPTIONAL *" EXCEPTIONS *" INVALID_PATHNAME *" DOWNLOAD_FAILED *" EXECUTION_FAILED *"---------------------------------------------------------------------- *- Documentación.- * Mediante esta función podemos enviar a través del Outlook un mail * indicando el Asunto, Destinatarios, Cuerpo del mensaje, Archivos adj. * Tan solo es necesario pasar los parámetros que queramos y automát. * nos dejará en la pantalla de envio de mensajes de Outlook con todos * los datos rellenos CONSTANTS: BEGIN OF con_hex, tab(1) TYPE x VALUE '09', END OF con_hex. DATA: g_file(120), g_translate(2), t_vbs LIKE STANDARD TABLE OF soli WITH HEADER LINE, g_last, g_vbs_filename LIKE rlgrap-filename, commandline(1000). *- Prepara un código para traducir una comilla en hexadecimal *- para que pueda ser traducido de nuevo en comillas dobles. CONCATENATE '"' con_hex-tab INTO g_translate. APPEND: 'Dim myolapp ' TO t_vbs, 'Dim olNamespace ' TO t_vbs, 'Dim myItem ' TO t_vbs, 'Dim myRecipient ' TO t_vbs, 'Dim myAttachments ' TO t_vbs, ' ' TO t_vbs, 'Set myolapp = CreateObject("Outlook.Application") ' TO t_vbs, 'Set olNamespace = myolapp.GetNamespace("MAPI") ' TO t_vbs, 'Set myItem = myolapp.CreateItem(olMailItem) ' TO t_vbs, ' ' TO t_vbs. *- Destinatarios del mensaje LOOP AT email_address. IF email_address = space. CONTINUE. ENDIF. CONCATENATE 'Set myRecipient = myItem.Recipients.Add("' email_address '")' INTO t_vbs. APPEND t_vbs. ENDLOOP. *- Asunto del mensaje CONCATENATE 'myItem.Subject = "' subject '"' INTO t_vbs. APPEND t_vbs. *- Archivos adjuntos APPEND 'Set myAttachments = myItem.Attachments' TO t_vbs. *- Chequeo de existencia de archivos adjuntos LOOP AT email_attachments. g_file = email_attachments-line. CALL FUNCTION 'WS_QUERY' EXPORTING filename = g_file query = 'FE' EXCEPTIONS inv_query = 1 no_batch = 2 frontend_error = 3 OTHERS = 4. IF sy-subrc EQ 0. CONCATENATE 'myAttachments.Add("' email_attachments '")' INTO t_vbs. APPEND t_vbs. ELSE. MESSAGE i000(38) WITH 'No se ha podido adjuntar el archivo' email_attachments. ENDIF. ENDLOOP. *- Cuerpo del email CLEAR: g_last, t_vbs. APPEND t_vbs. LOOP AT email_body. AT FIRST. APPEND 'myitem.body = _' TO t_vbs. ENDAT. AT LAST. g_last = 'X'. ENDAT. *- Comillas dobles(") causan un error en VBScript *- Reemplzar con un hexadecimal y luego reemplaza con *- 2 comillas dobles ("") TRANSLATE email_body USING g_translate. WHILE sy-subrc EQ 0. REPLACE con_hex-tab WITH '""' INTO email_body. ENDWHILE. IF g_last = 'X'. CONCATENATE '"' email_body '" &vbCrLf ' INTO t_vbs. ELSE. CONCATENATE '"' email_body '" &vbCrLf &_' INTO t_vbs. ENDIF. APPEND t_vbs. ENDLOOP. APPEND 'myItem.Display' TO t_vbs. * -- Posibilidad de mostrar un MsgBox al abrir el Outlook * APPEND 'Dim myVar' TO t_vbs. * DATA: aux(255). * aux = 'Aquí podemos poner el mensaje que queramos'. * CONCATENATE 'myVar = MsgBox ("' aux '", 0, "Advertencia")' INTO aux. * APPEND aux TO t_vbs. *- Prepara el nombre de archivo vbscript para descargarlo *- y ejecutarlo, llamando a la variable de entorno de Windows *- TEMP CLEAR g_vbs_filename. CALL FUNCTION 'WS_QUERY' EXPORTING environment = 'TEMP' query = 'EN' IMPORTING return = g_vbs_filename EXCEPTIONS inv_query = 1 no_batch = 2 frontend_error = 3 OTHERS = 4. IF sy-subrc GT 0. RAISE invalid_pathname. ENDIF. CONCATENATE g_vbs_filename '\mail.vbs' INTO g_vbs_filename. commandline = g_vbs_filename. PERFORM sapgui_progress(rstxldmc) USING 10 'Realizando download de fichero...'. *- Descarga el archivo vbscript CALL FUNCTION 'WS_DOWNLOAD' EXPORTING filename = g_vbs_filename filetype = 'DAT' mode = 'S' TABLES data_tab = t_vbs EXCEPTIONS file_open_error = 1 file_write_error = 2 invalid_filesize = 3 invalid_table_width = 4 invalid_type = 5 no_batch = 6 unknown_error = 7 OTHERS = 8. IF sy-subrc GT 0. RAISE download_failed. ENDIF. * Abre el Outlook PERFORM sapgui_progress(rstxldmc) USING 50 'Abriendo Outlook... Espere por favor'. CALL FUNCTION 'WS_EXECUTE' EXPORTING commandline = commandline program = 'WSCRIPT.EXE' EXCEPTIONS frontend_error = 1 no_batch = 2 prog_not_found = 3 illegal_option = 4 OTHERS = 5. IF sy-subrc GT 0. RAISE execution_failed. ENDIF. MESSAGE s000(38) WITH 'Abriendo Outlook... Espere por favor'. ENDFUNCTION. |
Herramientas | Buscar en Tema |
Desplegado | |
|
|