Wednesday, February 28, 2007

Artículo recomendado y algo más

Hola, en esta ocasión quiero recomendarles un artículo que me ha parecido excelente, totalmente en español, tema del número de MSDN Magazine de Marzo de 2007, donde el autor habla de manera muy interesante acerca de las nuevas caracteristicas de IIS 7.0. en resumen, tenemos un servidor Web que viene en su versión completa con Windows Vista, la misma que se utilizará en el Servidor Windows "LongHorn", un IIS totalmente modular, interrelacionado con nuestras aplicaciones ASP.NET, desde las cuales podemos automatizar casi por completo las funcionalidades existentes del IIS, y por supuesto crear nuestros propios modulos. Solo quiero decirles que le doy un 10 ha este artículo y sería bueno que le den un vistaso.

http://msdn.microsoft.com/msdnmag/issues/07/03/IIS7/default.aspx?loc=es

Quiero invitarlos nuevamente a escuchar MSDN radio
http://www.microsoft.com/spanish/msdn/latam/mediacenter/radio/default.aspx
Pueden encontrar mi entrada acerca de las ventanas de VS.NET, su utilidad y teclas rápidas y mucho más.

Para los amantes de ASP.NET no olviden visitar el Blog del señor Scott Guthrie, tiene unas entradas excelentes.
http://weblogs.asp.net/scottgu/rss.aspx

Wednesday, February 07, 2007

MSDN Radio

Amigos, les quiero compartir un link a un sitio de MSDN latinoámerica, que presenta contenido muy bueno y variado acerca de la tecnología .NET y totalmente en español, justo para la comunidad latinoaméricana.
http://www.microsoft.com/spanish/msdn/latam/mediacenter/default.aspx

Quiero invitarlos a escuchar una de mis entradas en MSDN Radio en:
http://www.microsoft.com/spanish/msdn/latam/mediacenter/radio/default.aspx
donde toco el tema de los Proyectos de SQL Server 2005 y su integración con el CLR.

Saturday, February 03, 2007

Programando OutlookAddin con VSTOs

Hola, esta ves quiero mostrarles cómo podemos programar fácilmente un addin para outlook.

Para los que no saben qué es un addin, básicamente es funcionalidad extra que podemos añadirle a las aplicaciones como Word, Excel, Oulook y todas las demás herramientas de la suite office, incluso el mismo Visual Studio .NET, para que se ejecute dentro del ambiente de estas aplicaciones y provea tareas que nosotros mismos programamos, y podemos ejecutar desde alguna de las opciones del menú de cada una de estas aplicaciones, como si fuera una funcionalidad cualquiera.

En esta ocasión quiero mostrales cómo crear un proyecto de addin de outlook y con esto adicionar una funcionalidad extra a esta herramienta de office system 2003, con la cual se ejecuta este ejemplo.

Para esto es necesario instalar las Visual Stuio Tools for Office, con lo cual podemos crear proyectos para office System 2003 e incluso office system 2007. En esta ocasión utilizo OutLook 2003 para correr el ejemplo.

Habiendo instalado las VSTOs, procedemos a crear un proyecto de Office y seleccionamos la plantilla Complemento de Outlook, como se puede apreciar en la figura.

Cómo con cualquier proyecto de Visual Studio .NET podemos asignarle un nombre, una ubicación y un nombre para la solución del proyecto.
Al dar clic en aceptar, visual studio crea para nosotros un archivo .cs llamado ThisApplication, en el cual adiciona dos métodos que son los puntos de entrada y salida de nuestro AddIn respectivamente:
ThisApplication_Startup y ThisApplication_Shutdown.
Lo primero que vamos a crear son 2 atributos privados de la clase:
private Office.CommandBarPopup miAddinMenu;
private Office.CommandBarButton miMostrarVentana;
El primero de tipo CommandBarPopup, sirve para asociar en cualquiera de las opciones del menú de OutLook, nuestro addin. El segundo de tipo CommandBarButton, nos sirve para asociar una de las opciones del menú del Addin.
A continuación creamos un método para que cree el menú del Addin, utilizando como contenedor, el menú Tools del Outlook.

private void CrearMenu()
{
// Obtiene una referencia a la ventana del explorador de outlook activa.
Outlook.Explorer miExplorador = this.ActiveExplorer();
// La adci¢n se hace al men£ tools
Office.CommandBar miMenu = miExplorador.CommandBars["Tools"];
// Crea el item en el men£ para el AddIn
miAddinMenu = miMenu.Controls.Add(Office.MsoControlType.msoControlPopup, 1, "", 1, true) as
Office.CommandBarPopup;
miAddinMenu.Visible = true;
miAddinMenu.Caption = "Mi primer Addin";
// Crea una opci¢n del men£.
miMostrarVentana = miAddinMenu.CommandBar.Controls.Add(Office.MsoControlType.msoControlButton, 1,
"", 1, true) as Office.CommandBarButton;
miMostrarVentana.Caption = "Mi opci¢n";
miMostrarVentana.Style = Office.MsoButtonStyle.msoButtonIconAndCaption;
//Despliega un icono de opciones
miMostrarVentana.FaceId = 1664;
miMostrarVentana.Click += new Office._CommandBarButtonEvents_ClickEventHandler(MiEventoButtonClick);
}
El método anterior se puede invocar desde el método ThisApplication_Startup, con esto tendremos nuestro Addin desplegado en el OutLook como una funcionalidad más del menú Tools.
Ya que se ha asociado un evento a la opción del AddIn, es necesario adicionar el siguiente evento a la clase:

private void MiEventoButtonClick(Office.CommandBarButton ctrl, ref bool cancelDefault)
{
//MessageBox.Show("Mi primer Addin de Outlook");
using (FormularioAddin miForma = new FormularioAddin())
{
if (miForma.ShowDialog() == DialogResult.OK)
{
Application.Exit();
}
}
}
Para el evento se debe haber creado una forma de windows con un botón, al cual se le asocia la propiedad DialogResult con el valor OK. La forma es instanciada dentro de la clausula using, la cual indica que todo recurso utilizado será liberado, como si fuera un bloque Try-Finally, y al dar click en el botón sobre la forma, simplemente se cierra el OutLook con la llamada al método Exit.
El poder adicionar formas de windows, hace de nuestro Addin una herramienta muy poderosa para extender la funcionalidad de Outlook, además el poder enlazar eventos y tener a mano todo el poder de programación del .NET Framework.
Espero este sencillo ejemplo pueda servirles para iniciar proyectos más complejos que aprovechen la funcionalidad de OutLook e igualmente la extiendan.