Tip: Exportacion hacia Excel bajo SSL

Estuvimos realizando un trabajo de exportación de datos hacia Excel, todo iba de mi maravillas era el típico modo de exportación que se maneja de la siguiente manera:



response.Clear();
response.Buffer = true;
//Tipo Excel
response.ContentType = “application/vnd.ms-excel“;
//Attachment para que aparesca el cuadrito de guardar como
response.AppendHeader(“content-disposition“, “attachment; filename=” + strNombreArchivo);
MemoryStream stream = new MemoryStream();
XmlTextWriter writer = new XmlTextWriter(stream, Encoding.UTF8);
CreateStylesheet(writer, sHeaders, sFileds, FormatType);
writer.Flush();
stream.Seek(0, SeekOrigin.Begin);
//dsExportar es la data a exportar, en este caso un DataSet
XmlDataDocument xmlDoc = new XmlDataDocument(dsExportar);
XslTransform xslTran = new XslTransform();
xslTran.Load(new XmlTextReader(stream), null, null);
System.IO.StringWriter sw = new System.IO.StringWriter();
xslTran.Transform(xmlDoc, null, sw, null);
response.Write(sw.ToString());
sw.Close();
writer.Close();
stream.Close();
response.End();

El código que se muestra es estandar, no hay nada de especial, todo funcionaba de mil maravillas excepto que al hacer pruebas sobre SSL y en especial en Internet Explorer v 6.0 SP 1 (Si, la misma versión que me dió un monton de problemas para ASP.NET Ajax), simplemente el reporte no se generaba, lanzándonos el siguiente mensaje de error:


“No puede descargar …Pagina.aspx de www.website.com.


Internet Explorer no puede abrir este sitio Internet. El sitio pedido no está disponible o no se encuentra. Inténtelo de nuevo.”


Luego de investigar un poco respecto al tema nos encontramos que se debía a un bug dentro del navegador y era referente al manejo del Cache y SSL.

El manejo del cache que tenía estaba generando inconvenientes al momento de intentar descargar el archivo excel desde la zona segura, y era especialmente por una de las cabeceras agregadas: ’Pragma: no-cache’

En si la solución es muy sencilla y consiste en quitar esta cabecera al momento de realizar la exportación y luego si queremos que cada vez que se descargue un archivo sea una nueva versión del mismo podríamos usar la siguiente cabecera: “Cache-Control: max-age=0” con ello nos aseguramos de obtener la última versión de la exportación :).

Ahora en código C# quedaría algo como lo siguiente (Primero limpiamos los headers y luego agregamos la directiva antes definida):



response.Clear();
response.ClearHeaders();
response.ClearContent();
response.AddHeader(“Cache-Control“, “max-age=0“);


Ahora ya tenemos exportando correctamente la información bajo SSL y en Internet Explorer 6.0 SP 1

Espero sea de utilidad,

Ivan Mostacero.

Programa de disponibilidad de HotFixes para Visual Studio 2005

Si te quejabas de no tener acceso a los diversos HotFixes para tu Visual Studio 2005, ahora tienes una ventana donde obtenerlos, los mas recientes de acuerdo a como el equipo de Visual Studio los va liberando, un espacio a tener en cuenta siempre :)

http://connect.microsoft.com/content/content.aspx?ContentID=3705&siteid=210

Ivan Mostacero.

Charla de ASP.NET Ajax, Demos y PPT.

Esta semana que paso estuve tanto en la Universidad Federico Villareal como en la Universidad Las Americas, dando charlas respecto a ASP.NET Ajax, las mejoras en la version Beta 2 asi como consideraciones a tomar en cuenta al implementar aplicaciones basadas en Ajax, ambas fueron charlas muy dinamicas, me da mucho gusto saber la capacidad de investigacion que se esta dando en las diversas instituciones educativas de peru tanto publicas como privadas, mucho de ello gracias a las iniciativas de Microsoft de difundir de manera temprana las diferentes tecnologias que se estan liberando, desde sus versiones Beta, tal como se los prometi adjunto tanto las Demos como la PPT usada en ambas charlas :)

Descargar Demo

Descargar PPT


Espero les sirva para seguir investigando.

Saludos cordiales,

Ivan Mostacero.

Herramientas: de SWF a XAML

Conjunto de herramientas realmente interesantes, XAML es el lenguaje basado en XML que es usado por Windows Presentation Foundation para definir interfaces de usuario el cual forma parte del Framework 3.0 y tiene un soporte total dentro de Windows Vista, actualmente se tienen diversas versiones de este tipo de herramientas para todos los gustos y colores :) aca va un enlace donde pueden encontrar muchas de ellas:

http://blogs.msdn.com/mswanson/articles/WPFToolsAndControls.aspx

Ahora una en especial es la que encontramos en la siguiente dirección:

http://www.mikeswanson.com/SWF2XAML/

Corre bajo el framework 3.0 y tiene toda una lista de características interesantes soportadas tal como el avance frame por frame para navegación, y muchisimas más :) todas ellas la encontrarán en el enlace anterior y cae bien usarlas justo ahora que se nos viene la versión final de vista.

Ivan.

Microsoft Yahoo y google y un protocolo unificado para Sitemaps

Asi es, las grandes compañías coincidieron en utilizar un solo protocolo unificado para Sitemaps, esto significa que ahora podemos utilizar este protocolo para dar una lista completa de los diferentes enlaces que tuviesemos dentro de nuestros sitios Web y que serán reconocidos por los 3 buscadores mas grandes de internet. Por cierto también se lanzó un nuevo sitio web llamado:

http://www.sitemaps.org

En este sitio encontraremos la definición del protocolo común que es muy sencillo de implementar y utilizar, encontrando también múltiples ejemplos de su uso.

Ojala y estas coincidencias se dieran mas a menudo para el bien de todos los internautas.

Ivan Mostacero.

Tip para detectar bloqueador de popup.

Los bloqueadores de popups nos invaden ultimamente, las personas tienen de 1 a más de 5 bloqueadores a veces y eso muchas veces nos genera problemas al intentar mostrar los popups.

Lo ideal sería detectar si se tiene activado algun bloqueador para mostrar alguna alerta a nuestros usuarios respecto a ello y que no se confundan respecto a la no aparición de la ventanita, aca va una función javascript sencilla que nos podría servir para ello:

function DetectarBloqueador()
{
    var blnBloqueado;
    var ventana = window.open('','','width=1,height=1,left=0,top=0,scrollbars=no');
    if(ventana)
        blnBloqueado = false
    else
        blnBloqueado = true
    ventana.close()
   
    return blnBloqueado;
}

Es sencilla de entender y nos devuelve un valor boleano indicando si existe algún bloqueador de popups activado o no.

Saludos cordiales,

Ivan Mostacero.

Problemas comunes con ASP .NET Ajax Beta 1

Wow que semana, tuve que ir lidiando uno a uno con un conjunto de problemas de Ajax en su versión Beta 1 y 2. El problema principal y más complicado que se tuvo fue debido a un bug de Internet Explorer v6 con Service Pack 1 para archivos que son enviados utilizando compresión.

El dilema es el siguiente, ASP .NET Ajax Beta 1 y 2, utilizan un módulo de compresión para enviar los archivos javascript al cliente, si bien es cierto esta funcionalidad reduce a una cuarta parte el tamaño de los archivos, el equipo de asp.net no contó con un pequeño detalle, que con el Service Pack 1 de Internet Explorer habian deshabilitado esta funcionalidad, osea, en otras palabras te van a saltar mil y un errores cuando se corra sobre un internet explorer 6 con service pack 1 sino tienes instalado el Parche KB912812, osea todo cargaría bien en un Firefox, en un Netscape excepto en los IE que no tengan este parche =(, y simplemente no funcionaría casi nada que tengas implementado con ASP .NET Ajax.

Los errores que se obtienen son los siguientes:
* 'Sys' is undefined.
* Expected '}'
* 'Type' is undefined

Bueno la solución es instalar en los internet explorer que boten esos errores el parche requerido: Cumulative Update for Internet Explorer 6 SP1 (KB912812)

Lo pueden descargar desde la siguiente URL:
http://www.microsoft.com/downloads/details.aspx?familyid=033C41E1-2B36-4696-987A-099FC57E0129&displaylang=en

Elijan el lenguaje de su explorer y listo, en si esto no es una solución que se le puede dar a un cliente desde luego, esperemos que la siguiente versión ya todo esto se haya mejorado, no hay duda de esto por la rápida reacción que está adoptando Microsoft y en especial el equipo de ASP .NET, un tip al respecto en caso tengan este problema sin solución aparente, dentro del archivo Web.Config tenemos la siguiente entrada:

<add name="WebResourceCompression" type="Microsoft.Web.Handlers.WebResourceCompressionModule, Microsoft.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>

Retírenla temporalmente hasta que este problema haya sido cubierto, este handler maneja la parte de la compresion en Ajax.

Espero sea de utilidad,

Ivan Mostacero.