OooBasic: Copias de respaldo de los documentos de OpenOffice.org en un email con un click
Artículo original del 28/02/07 en inglés en Linux.com de Dmitri Popov
Gmail ofrece unas características inteligentes que lo convierten en algo más que un servicio de correo electrónico. Podemos usar nuestra cuenta de Gmail como un visualizador de documentos, un almacén de ficheros e incluso como una agenda GTD para solucionarlo todo. También podemos convertir Gmail en una ingeniosa solución de copias de respaldo para nuestros documentos de OpenOffice.org usando una macro sencilla del OOoBasic y las propias herramientas de Gmail.
Por supuesto, OOo ofrece enviar un documento como E-mail, pero requiere demasiados pasos para usarlo convenientemente. La macro que vamos a crear nos permite enviar el documento abierto actualmente como un mensaje -email, añadiendo información automáticamente como el nombre del fichero, el tiempo utilizado, todo en background sin ninguna interacción del usuario. Esto es, literalmente, una solución para hacer backups con un click de nuestros documentos OpenOffice.org.
Antes de empezar a escribir el código que manda el documento, hay un par de cosas que hay que tener en cuenta. Primero de todo, la macro debe comprobar si el documento tiene una localización; un documento recién creado en OpenOffice.org no tiene una localización hasta que se ha guardado. Por tanto el primer paso es comprobar si el documento actualmente existe en el disco duro y entonces obtener la dirección donde se encuentra:
ThisDoc=ThisComponent If ThisDoc.hasLocation=False Then MsgBox "¡Debes guardar el documento primero!" :End End If ThisDocURL=ThisDoc.getURL()
A continuación, la macro comprueba si hay cambios sin guardar en el documento, y si los hay, los guarda:
If ThisDoc.isModified Then ThisDoc.storeAsURL(ThisDocURL, Args) End if
Para facilitar el manejo de backups, la línea de asunto de cada mensaje de correo electrónico deberia contener el nombre del fichero así como el tiempo. Describimos cómo obtener el nombre del documento actual en un artítulo anterior. Primero la macro carga la librería de utilidades, que se usa para obtener el nombre del fichero:
If (Not GlobalScope.BasicLibraries.isLibraryLoaded("Tools")) Then GlobalScope.BasicLibraries.LoadLibrary("Tools") End If DocDir=DirectoryNameoutofPath(ThisDocURL, GetPathSeparator()) FileName=Dir(ThisDocURL, 0)
El siguiente paso es especificar la dirección de correo electrónico de destinoy el contenido de la línea de asunto:
MailAddress="backup@email.com" MessageSubject="[BACKUP] " & FileName & " " & CDateToISO(Date) & " - " &_ Hour(Time)& ":" & Minute(Time) & ":" & Second(Time)
Para obtener la fecha actual, la macro usa la función CDateToISO(), la cual obtiene la fecha en formato ISO. Para generar el "sello del tiempo", la macro usa tres funciones: Hour(), Minute(), y Second() (horas, minutos y segundos). Si planeamos usar diferentes cuentas de correo electrónico para mandar las copias de seguridad, deberemos usar un "input box" o ventana de aviso que nos pida la dirección de correo electrónico.
MailAddress=InputBox("Dirección Email")
Ahora ya tenemos todo lo necesario para crear un mensaje nuevo de correo electrónico, añadir ficheros adjuntos, y enviarlo. Inicializar el servicio de email es fácil; se puede hacer usando el siguiente código:
MailAgent=CreateUnoService("com.sun.star.system.SimpleCommandMail")
o en Windows:
MailAgent=CreateUnoService("com.sun.star.system.SimpleSystemMail")
Para hacer que la macro funcione en cualquier plataforma, debemos especificar una condición que comprueba el sistema operativo y usa la instrucción apropiada. Para ello, podemos usar la función GetGUIType, que devuelve un valor numérico que representa la plataforma actual. GetGUIType devuelve 1 si está utilizándose Windows, 3 para Mac OS X, y 4 para Linux. Usando esta función, podemos crear la siguiente condición:
If GetGUIType=1 Then MailAgent=CreateUnoService("com.sun.star.system.SimpleSystemMail") Else MailAgent=CreateUnoService("com.sun.star.system.SimpleCommandMail") End If
Nota: En Linux y Mac OS X, tenemos que especificar explícitamente la aplicación de correo electrónico que usa OpenOffice.org para enviar emails, en Herramientas -> Opciones -> Internet -> Email y especificando la aplicación deseada. Finalmente, la macro crea un nuevo mensaje, especifica la dirección de destino y el asunto, y añade el documento actual como un anexo:
MailClient=MailAgent.querySimpleMailClient() MailMessage=MailClient.createSimpleMailMessage() MailMessage.setRecipient(MailAddress) MailMessage.setSubject(MessageSubject) MailMessage.setAttachement(Array(ThisDocURL))
Una vez hecho esto, la macro puede enviar el mensaje creado:
MailClient.sendSimpleMailMessage(MailMessage, 1)
Esta instrucción envía el mensaje en background, pero si preferimos revisar el mensaje, podemos usar en su lugar la opción 0:
MailClient.sendSimpleMailMessage(MailMessage, 0)
Y aquí está la macro final:
Sub SendMailBackup() Dim MailAddress As String, MessageSubject As String Dim ThisDocURL As String, DocDir As String, FileName As String Dim MailAgent As Object, MailClient As Object, MailMessage As Object, ThisDoc As Object Dim Args()
ThisDoc=ThisComponent If ThisDoc.hasLocation=False Then MsgBox "¡Debes guardar el documento primero!" :End End If ThisDocURL=ThisDoc.getURL()
If ThisDoc.isModified Then ThisDoc.storeAsURL(ThisDocURL, Args) End if
If (Not GlobalScope.BasicLibraries.isLibraryLoaded("Tools")) Then GlobalScope.BasicLibraries.LoadLibrary("Tools") End If
DocDir=DirectoryNameoutofPath(ThisDocURL, GetPathSeparator()) FileName=Dir(ThisDocURL, 0)
MailAddress="backup@email.com" MessageSubject="[OOO_DOC_BACKUP] " & FileName & " " & CDateToISO(Date) & " - " &_ Hour(Time)& ":" & Minute(Time) & ":" & Second(Time)
If GetGUIType=1 Then MailAgent=CreateUnoService("com.sun.star.system.SimpleSystemMail") Else MailAgent=CreateUnoService("com.sun.star.system.SimpleCommandMail") End If MailClient=MailAgent.querySimpleMailClient() MailMessage=MailClient.createSimpleMailMessage()
MailMessage.setRecipient(MailAddress) MailMessage.setSubject(MessageSubject) MailMessage.setAttachement(Array(ThisDocURL))
MailClient.sendSimpleMailMessage(MailMessage, 1) End Sub
| |
|
| Gmail filter - click to enlarge |
Cuando ya tenemos hecha la macro, podemos crear un filtro en Gmail que nos añada la etiqueta a estos emails. Nótese que la instrucción que define la línea de asunto incluye la palabra clave [OOO_DOC_BACKUP]. Esto nos permite crear fácilmente un filtro en Gmail. Vamos a nuestra cuenta de Gmail y pulsamos "Crear un filtro". Escribimos en el campo Asunto [OOO_DOC_BACKUP] y pulsamos el botón "siguiente". Marcar aplicar etiqueta seleccionando una existente o creando una nueva (por ejemplo, "backup") y pulsamos el botón "Crear Filtro" para guardar el filtro. Desde ahora, todos los correos de copias de seguridad desde OpenOffice.org usando la macro creada se nos marcarán con el filtro especificado, y podremos manejarlos fácilmente en Gmail. Esto es todo. Asignamos la macro creada a un atajo de teclado o creamos una nueva entrada de menú, y estará lista nuestra solución para enviar los backups por email con un click. Dmitri Popov es un escritor freelance cuyos artículos han aparecido en revistas de informática en Ruso, Inglés, Alemán, y Danés .
nemrac @ 13:28

Meneame
del.icio.us

