Página 1 de 1

necesito definir macro para un formulario

Publicado: Mié Dic 10, 2008 3:52 pm
por nestor
hola, soy un ususrio de Open Office y necesito saber si hay una macro que me ayude para el envio por email de un formulario que ya tengo creado, pero por la poca experiencia en macros no he podido definir cual es la macro adecuada que al oprimir un boton del formulario me lo envie por email a una direccion determinada.
Agradezco en lo que me puedan colaborar.

Re: necesito definir macro para un formulario

Publicado: Jue Dic 11, 2008 8:22 am
por Jose Manuel
El formulario lo haces con base?

Re: necesito definir macro para un formulario

Publicado: Sab Dic 13, 2008 10:59 pm
por QuazzieEvil
en Basic, puedes usar una function de este tipo.

Código: Seleccionar todo

Function sendEmailMessage(mTo As String,mSubject As String, mBody As String, Attachements As Object,Optional UI As Integer)  As Boolean
On Error Goto HandleError
   Dim MailClient As Object
   Dim MailAgent As Object
   Dim MailMessage As Object
   
   sendEmailMessage=False
   If IsMissing(UI) Then
      UI=com.sun.star.system.SimpleMailClientFlags.NO_USER_INTERFACE
   End If
    MailAgent=CreateUnoService("com.sun.star.system.SimpleSystemMail") 
    MailClient=MailAgent.querySimpleMailClient()
    MailMessage=MailClient.createSimpleMailMessage()
   
    MailMessage.setRecipient(mTo)
    MailMessage.setSubject(mSubject)
    MailMessage.setAttachement(Attachements)
    MailClient.sendSimpleMailMessage(MailMessage, UI)
   
    sendEmailMessage=True
   
HandleError:
   If err<>0 Then
      Exit Function
   End If     
End Function 
Pero no he encontrado una manera de enviar el mensaje automaticamente y incluir el mensaje--solamente archivos. puedes incluir el mensaje, pero solo abriendo el programa de coreo (cambia .NO_USER_INTERFACEd a DEFAULTS or 0 ).

---
Otra manera seria usando Python.

Re: necesito definir macro para un formulario

Publicado: Lun Dic 15, 2008 10:32 pm
por nestor
No te entiendo la pregunta, por favor me explicas.

Gracias

Re: necesito definir macro para un formulario

Publicado: Mié Dic 17, 2008 4:05 am
por QuazzieEvil
aca esta un ejemplo. en el archivo adjunto hay instructiones de como salvar los macros, y asignarlos a un evento.

Esto solo funciona si tienes un programa de coreo como MS Outlook, Thunderbird, oh algo por el estilo. O sea de correo POP3.
Function principal

Código: Seleccionar todo

Sub cmdExportSendForm_OnClick(Event As Object)
	Dim URL As String
	Dim FormDoc As Object
	Dim mTo As String
	Dim mSubject As String
	
	mTo="tu direccion de correo electronico"
	mSubject="tema"
	FormDoc=Event.Source.Model.Parent.Parent.Parent
	URL=convertToURL("C:\TempFormExport.pdf")
	exportBaseFormToPDF(FormDoc,URL)
	sendEmailMessage(mTo,mSubject,"",Array(URL) )
	Kill URL 'borrar archivo
End Sub
Esta funcion convierte el formulario de Base a PDF

Código: Seleccionar todo

Sub exportBaseFormToPDF(FormDoc As Object,SaveURL As String)
	Dim Args(0) As New com.sun.star.beans.PropertyValue
	
	Args(0).Name="FilterName" : Args(0).Value="writer_pdf_Export"
	FormDoc.storeToURL(SaveURL,Args)
End Sub
y final mente, la funcion que manda el coreo

Código: Seleccionar todo

Function sendEmailMessage(mTo As String,mSubject As String, mBody As String, Attachements As Object,Optional UI As Integer)  As Boolean
On Error Goto HandleError
   Dim MailClient As Object
   Dim MailAgent As Object
   Dim MailMessage As Object
   
   sendEmailMessage=False
   If IsMissing(UI) Then
      UI=com.sun.star.system.SimpleMailClientFlags.NO_USER_INTERFACE
   End If
    MailAgent=CreateUnoService("com.sun.star.system.SimpleSystemMail") 
    MailClient=MailAgent.querySimpleMailClient()
    MailMessage=MailClient.createSimpleMailMessage()
   
    MailMessage.setRecipient(mTo)
    MailMessage.setSubject(mSubject)
    MailMessage.setAttachement(Attachements)
    MailClient.sendSimpleMailMessage(MailMessage, UI)
   
    sendEmailMessage=True
   
HandleError:
   If err<>0 Then
      Exit Function
   End If     
End Function 
Base solo puede imprimir formularios simples. Si tienes [Grid/Table Controls], esos no impriment bien. otra forma seria de crear un archivo de texto, enves del PDF.

Si prefieres un arhivo de texto, de demuestro despues como cearlo.


Espero que no te haya confundido mas, ya que mi español technico deja mucho que decear.

Re: necesito definir macro para un formulario

Publicado: Dom Dic 21, 2008 8:30 pm
por jza
SimpleMailClient no tiene esa habilidad de enviar mensajes. Es un servicio digamos "hard coded". Alternativamente tengo un script de python para enviar correo de Gmail por linea de comando. Quizas te ayude.

No estaras usando el servicio de SimpleMailClient pero quizas puedas resolver tu correo.

Código: Seleccionar todo

#!/usr/bin/python

import smtplib
from email.MIMEMultipart import MIMEMultipart
from email.MIMEBase import MIMEBase
from email.MIMEText import MIMEText
from email import Encoders
import os

gmail_user = "your_email@gmail.com"
gmail_pwd = "your_password"

def mail(to, subject, text, attach):
   msg = MIMEMultipart()

   msg['From'] = gmail_user
   msg['To'] = to
   msg['Subject'] = subject

   msg.attach(MIMEText(text))

   part = MIMEBase('application', 'octet-stream')
   part.set_payload(open(attach, 'rb').read())
   Encoders.encode_base64(part)
   part.add_header('Content-Disposition',
           'attachment; filename="%s"' % os.path.basename(attach))
   msg.attach(part)

   mailServer = smtplib.SMTP("smtp.gmail.com", 587)
   mailServer.ehlo()
   mailServer.starttls()
   mailServer.ehlo()
   mailServer.login(gmail_user, gmail_pwd)
   mailServer.sendmail(gmail_user, to, msg.as_string())
   # Should be mailServer.quit(), but that crashes...
   mailServer.close()

mail("some.person@some.address.com",
   "Hello from python!",
   "This is a email sent with python",
   "my_picture.jpg")
PD: Si te siver por que no liberar el codigo para que la comunidad aprenda? Necesitamos mas y mas ejemplos de PyUNO. Aqui puedes ver un repositorio de estos trabajos que quiero mantener en el wiki.