Saturday, April 28, 2007

DLL Hell? ustedes deciden

Hola de nuevo

No habia publicado esto mientras daba solución al problema:

"Load Report Failed" {"Not enough memory for operation."}

etc etc

Sip todo comenzó en nuestro servidor de pruebas, y luego por arte de magia me ocurrió en mi máquina de desarrollo. Los reportes lanzaban la excepción comentada y ya nada funcionaba.

Como dijo Willy Marroquin, todos los caminos conducen a GooGle y claro, después de 2 semanas de búsqueda y pruebas infructuosas, me encontré con una solución simple.

Correr el comenado regsvr32 para la DLL "crqe.dll" y todo volvió a la normalidad...

Un caso más del infierno de las DLLs? ustedes diran, yo pienso que sip. El problema grave es encontrar la solución pronta a problemas de este tipo.

Felices lineas de código!!

Jugamos a las escondidas?

Hola de nuevo

Esta es una entrada muy breve acerca de un "defecto" en VS.NET respecto de la ventana Field Explorer de Crystal Reports. Si señores, les ha pasado? estamos editando nuestro reporte desde VS.NET y el Field Explorer se oculta y "nunca jamas" como dice Poe en su gran poema, volvemos a ver el Field Explorer.

Les cuento que estando en VS.NET podemos ir a la opción Ver(View) del menú y seleccionar la opción Otras Ventanas y ahi buscar la opción "Esquema del documento" y bingo, ahi aparecerá el Field Explorer como por arte de magia.

Un abrazo y felices lineas de código!!

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.


Saturday, January 20, 2007

.NET News y algo más

En esta entrada dejo un lado lo técnico parar referirles enlaces a temás importantes que nos mantienen al dia con todo o que está pasando con la tecnología .NET.

Para los seguidores de desarrollador 5 Estrellas 2005, ya está la 4ta estrella disponible, con muy buen material acerca
de los temás relevantes del .NET Framwork 3.0
http://www.mslatam.com/latam/msdn/comunidad/dce2005/

Algo que me ha llamado la tención y habia estado esperando es el show para televisión de MSDN latinoamérica. Con temas
de bastante interés es una opción más de aprendizaje a la que tenemos acceso.
http://www.microsoft.com/spanish/msdn/latam/mediacenter/msdntv/default.aspx

Imagina un mundo donde la tecnología facilite el acceso a la educación a todo el mundo...Este es el lema para el Imagine Cup 2007, ya ya está listo para que los estudiantes de todo el mundo se inscriban y participen en el evento tecnológico a nivel de Universidades que Microsoft realiza cada año.

El sitio recomendado para hoy es:
http://www.theserverside.net/, uno de mis sitios favoritos por las grandiosas entradas que hacen expertos en los diferentes temas de la tecnología .NET, además de poder conseguir apartes de libros, artículos, conversatorios, y mucho más.

Más TIPS sobre Crystal Reports

Continuando con la entrada anterior, acerca de tips de interés cuando utilizamos Crystal reports desde nuestras aplicaciones .NET (Windows Forms o ASP.NET), estas son algunas soluciones a ciertos problemas que se pueden presentar:

1. Supongamos que tenemos un reporte el cual contiene varios subreportes. Nuestro reporte principal tiene la orientación del papel de manera vertical, pero uno de los subreportes es demasiado ancho y necesita estar orientado de manera horizontal. Qué se puede hacer en este caso? Aqui está el código y el evento que debemos programar del CrystalReportViewer para alcanzar esta solución:

private void CrystalReportViewer1_DrillDownSubreport(object source, CrystalDecisions.Web.DrillSubreportEventArgs e)
{
if(e.NewSubreportName == "Subreport1")
{
ReportePrincipal.PrintOptions.PaperOrientation = PaperOrientation.Landscape;
}
}

Capturando el evento DrillDownSubreport, le estamos indicando en ese instante al subreporte que tiene asignado en su propiedad "name" el valor Subreport1, que debe utilizar el valor "Landscape" para la orientación del papel. Esta solución es muy efectiva para alcanzar el resultado esperado, además que podemos hacerlo con 1 o más subreportes adicionados al principal.

2. Cunado necesitamos agrupar información dentro de nuestro reporte, y mostrar cada grupo en una página diferente del reporte, Crystal ofrece un solución bastante simple, pero efectiva, que nos lleva a programar los eventos disparados por las diferentes secciones del reporte. En este caso vamos a programar el evento "New Page After" de las secciones GroupHeader y GroupFooter.

Lo primero entonces es indicarle al Group Header, que despligue la información del mismo grupo mientras no encuentre el último registro y el siguiente registro sea igual al que se está leyendo en el momento. Si no se cumple, entonces se ejecutaré el evento "New Page After", causando que se crea la nueva página para el nuevo grupo.

if(NOT OnLastRecord AND {sales.ord_num}=Next ({sales.ord_num}))then false

Pero esta solución causa un problema en el reporte y es que siempre se crea una página en blanco adicional, pero esto tiene una solución igualmente simple.
En la sección Group Footer, en el evento "New Page After" adicionamos la línea:

OnLastRecord

Con esto entonces tenemos dos simples soluciones a algo que en primera instancia parece ser un problema díficil de resolver. Como les decía en la entrada anterior sobre Crystal, esto es solo cuestión de conocer la herramienta y las capacidades que oferece a nível de programación.

Quiero recomendarles:
http://aspadvice.com/blogs/rjdudley/archive/tags/Crystal+Reports+.NET/default.aspx
http://www.crystalreportsbook.com/
Dos exelentes sites, de dos personajes que aportan bastante a dar soluciones efectivas a problemas con Crystal Reports utilizado desde nuestras aplicaciones .NET