necesito definir macro para un formulario

Desarrollo de Macros y programación en UNO, usar las API, llamar programas externos...

necesito definir macro para un formulario

Notapor nestor » Mié Dic 10, 2008 3:52 pm

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

Re: necesito definir macro para un formulario

Notapor Jose Manuel » Jue Dic 11, 2008 8:22 am

El formulario lo haces con base?
Un saludo
Jose manuel
Jose Manuel
 
Mensajes: 99
Registrado: Vie Nov 21, 2008 8:09 am

Re: necesito definir macro para un formulario

Notapor QuazzieEvil » Sab Dic 13, 2008 10:59 pm

en Basic, puedes usar una function de este tipo.
Código: Seleccionar todo   Expandir vistaContraer vista
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.
QuazzieEvil
 
Mensajes: 99
Registrado: Sab Dic 13, 2008 6:45 pm

Re: necesito definir macro para un formulario

Notapor nestor » Lun Dic 15, 2008 10:32 pm

No te entiendo la pregunta, por favor me explicas.

Gracias
nestor
 
Mensajes: 2
Registrado: Mié Dic 10, 2008 3:45 pm

Re: necesito definir macro para un formulario

Notapor QuazzieEvil » Mié Dic 17, 2008 4:05 am

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   Expandir vistaContraer vista
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   Expandir vistaContraer vista
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   Expandir vistaContraer vista
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) 93 veces
Última edición por QuazzieEvil el Mar Dic 23, 2008 12:44 am, editado 1 vez en total
QuazzieEvil
 
Mensajes: 99
Registrado: Sab Dic 13, 2008 6:45 pm

Re: necesito definir macro para un formulario

Notapor jza » Dom Dic 21, 2008 8:30 pm

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   Expandir vistaContraer vista
#!/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
Avatar de Usuario
jza
 
Mensajes: 133
Registrado: Vie Nov 21, 2008 1:36 am
Ubicación: Cancun, Mexico


Volver a Macros y API UNO

¿Quién está conectado?

Usuarios navegando por este Foro: Majestic-12 [Bot] y 1 invitado