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.


4 comments:

Anonymous said...

Hola Andrés, buen artículo sobre el tema, me tome la libertad de publicarlo también en mi blog.

Al igual que tu, yo soy desarrollador en .Net con C#, te comento un problema a ver si te ha pasado: cree un complemento para outlook y al recibir un correo guardaba el mail en un archivo de texto. Funcionaba bien hasta ahí

Al dia siguiente no reconocia ningun evento, el mismo codigo del dia anterior, sin cambiar nada, ahora no responde ningun evento, ni el constructor ni nada, carga el outlook, pero no reconoce nada! ni un messagebox en el método InternalStartup()... alguna vez te ha pasado?

Si sabes algo sobre como solucionarlo, te agradeceré si me das una mano.

Saludos.

Anonymous said...

Hola Andrés, gracias por la respuesta, aún no he podido resolverlo, pero para no perder tiempo tuve que hacer esa parte programando en el VBA de Outlook, pero me gustaría resolver el problema desde el .Net

Saludos.

Dan said...

Buenas, acabo de llegar a este post buscando información sobre l creación de instalables para los add-in y me preguntaba si te podría consultar una duda que tengo. Consiste en como poder añadir archivos del proyecto (xml en mi caso) al instalable apra que los guarde ne la carpeta destino junto con la dll de la aplicación.

Si supiers del tema te agradecería mucho tu ayuda.

Muchas gracias.

sinmaker(at)gmail(dot)com

Andrés Ortíz said...

Hola Amigo

Checate esto por favor, ahi te explican como agregar archivos adicionales al proyecto

http://support.microsoft.com/kb/307353/es