A pesar de que un correo electrónico puede ser enviado utilizando una acción de SPD, en este caso particupar para la plantilla de formulario de InfoPath 2010 fue necesario incluir código C# dentro de las acciones de un botón para poder enviar el correo de notificación junto con el enlace adjunto de la página con los parámetros necesarios para poder hacer la aprobación de un item desde el correo electrónico.
El código C# ingresado es el siguiente:
try
{
/*Recupera algunos campos para enviar por correo electrónico desde INFOPATH*/
XPathNavigator CamposFormulario = this.MainDataSource.CreateNavigator().SelectSingleNode(“//my:myFields/my:CAMPOS_APOYO/my:IDForm”, this.NamespaceManager);
String IDFormulario = CamposFormulario.Value;
XPathNavigator NombreF = this.MainDataSource.CreateNavigator().SelectSingleNode(“//my:myFields/my:GENERAL/my:NoOrdenCompra”, this.NamespaceManager);
String OrdenCompra = NombreF.Value;
XPathNavigator CorreoGerenteUno = this.MainDataSource.CreateNavigator().SelectSingleNode(“//my:myFields/my:APROBACION_METALICOS/my:CorreoGerente1”, this.NamespaceManager);
String CorreoGerente1 = CorreoGerenteUno.Value;
XPathNavigator CorreoGerenteDos = this.MainDataSource.CreateNavigator().SelectSingleNode(“//my:myFields/my:APROBACION_METALICOS/my:CorreoGerente2”, this.NamespaceManager);
String CorreoGerente2 = CorreoGerenteDos.Value;
/*Crea un document PDF con la vista actual*/
this.CurrentView.Export(@”c:\temp\” + OrdenCompra + “_MemoMetalicos.pdf”, ExportFormat.Pdf);
/*Importante detener al menos por 10 segundos mientras se crea el documento caso contrario genera un error*/
Thread.Sleep(10000);
/*Crea un nuevo objeto del tipo mail*/
MailMessage mail = new MailMessage();
SmtpClient SMTPServer = new SmtpClient(“<servidor de correo>”);
mail.From = new MailAddress(“<dirección de correo del remitente>”);
mail.To.Add(CorreoGerente1);
mail.Subject = “Aprobación de Orden de Compra – ” + OrdenCompra;
AlternateView av = AlternateView.CreateAlternateViewFromString(“Se ha generado una nueva Orden de Compra que requiere ser aprobada por usted. <br> En el documento adjunto encontrar los detalles de la Orden de Compra. <br><br> Para APROBAR la Orden de Compra hacer clic <a href=’http://<URL del servidor y la biblioteca>/paginaWebService.aspx?ID=” + IDFormulario + “&Gerente=1&Estado=1′>AQUÍ</a> <br><br> Para NO APROBAR la Orden de Compra hacer clic <a href=’http://<URL del servidor y la biblioteca>/paginaWebService.aspx?ID=” + IDFormulario + “&Gerente=1&Estado=2′>AQUÍ</a>”, null, “text/html”); Attachment adjunto;
adjunto = new Attachment(@”c:\temp\” + OrdenCompra + “_MemoMetalicos.pdf”);
mail.Attachments.Add(adjunto);
SMTPServer.Send(mail);
MessageBox.Show(“Correo enviado exitosamente. El formulario se cerrar automticamente en 5 segundos.”);
}
catch (Exception ex)
{
MessageBox.Show(“Error: ” + ex.Message);
}
finally
{
Thread.Sleep(5000);
Application.Quit(true);
}
mail.AlternateViews.Add(av);
La parte clave de este código es la creación del objeto AlternateView ya que el cuerpo del mensaje debe ser enviado en formato HTML para poder incluir los enlaces de aprobación, en el caso de que se requiera enviar únicamente texto plano se puede utilizar el método “mail.body(“cuerpo del mensaje”);.
El formato de los enlaces de aprobación es: <a href=’http://<URL del servidor y la biblioteca>/paginaWebService.aspx?ID=” + IDFormulario + “&Gerente=1&Estado=1′>AQUÍ</a> , en este enlace se hace referencia a la página de webparts “paginaWebService.aspx” en donde se encuentra incluido un CEW con el código javascript necesario para hacer la actualización del item de la biblioteca de formularios InfoPath.
Adicionalmente se envían los parámetros necesarios para hacer el llamado al servicio web de actualización de items.
En la siguiente parte revisaremos el código JavaScript incluido en el CEW que hace el llamado al servicio web para hacer la actualización del item de la biblioteca de documentos.
Tengo algo parecido, te hago una consulta, el cliente me comunica que su llegada de notificaciones en un comienzo demoraba maximo 1 minuto, ahora demora entre 8 a 9 minutos y es demasiado, hace poco la empresa ha cambiado de servidor de correo de lotus a exchange y por lo que me comunican la demora comenzó al momento de cambiar a exchange, a que se debería? tambien me comunican que todo funciona bien en el ambiente de desarrollo pero cuando esta en producción se da la demora? algunas sugerencias, estaría muy agradecido
Roberto,
Posiblemente el problema se debe a un tema de recursos del servidor o si estás enviando algún adjunto con el correo. Sería importante también revisar los logs de Exchange y verificar en que momento llego la peitición de envío del correo y en que momento se despachó.