necesito definir macro para un formulario

Desarrollo de Macros y programación en UNO, usar las API, llamar programas externos...
Responder
nestor
Mensajes: 2
Registrado: Mié Dic 10, 2008 3:45 pm

necesito definir macro para un formulario

Mensaje 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.
Jose Manuel
Mensajes: 99
Registrado: Vie Nov 21, 2008 8:09 am

Re: necesito definir macro para un formulario

Mensaje por Jose Manuel »

El formulario lo haces con base?
Un saludo
Jose manuel
QuazzieEvil
Mensajes: 99
Registrado: Sab Dic 13, 2008 6:45 pm

Re: necesito definir macro para un formulario

Mensaje 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.
nestor
Mensajes: 2
Registrado: Mié Dic 10, 2008 3:45 pm

Re: necesito definir macro para un formulario

Mensaje por nestor »

No te entiendo la pregunta, por favor me explicas.

Gracias
QuazzieEvil
Mensajes: 99
Registrado: Sab Dic 13, 2008 6:45 pm

Re: necesito definir macro para un formulario

Mensaje 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.
Adjuntos
MacroAsignSteps.zip
(84.92 KiB) Descargado 333 veces
Última edición por QuazzieEvil el Mar Dic 23, 2008 12:44 am, editado 1 vez en total.
Avatar de Usuario
jza
Mensajes: 142
Registrado: Vie Nov 21, 2008 1:36 am
Ubicación: Cancun, Mexico
Contactar:

Re: necesito definir macro para un formulario

Mensaje 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.
Alexandro Colorado
http://es.openoffice.org
Responder