Exportar Crystal Report Document ASP.NET dentro de un UpdatePanel

Este articulo se desprende de uno anterior.

y por el pedido de CARLOS A. RESÉNDIZ MARTÍNEZ (que tiene su blog Raptor-NET) y sus recordatorios :)…
Nota: me estoy dando cuenta que tiene un enlace a mi blog así que voy a tener que hacer buena letra y lo invito a que siga posteando en su blog Raptor-NET

 

En el articulo anterior quise mostrar como exportar, aquí vamos a exportar mediante ExportToHTTPResponse y directamente en el objeto Response con un MemoryStream
Este articulo viene con ejemplo para la descarga al final.

 

Exportando dentro de un UpdatePanel

Cuando queremos exportar dentro de un UpdatePanel nos envía el siguiente mensaje por tratar de escribir en el Response, que escribe o intenta escribir fuera del contenedor del UpdatePanel
Mensaje:

Line: 4723
Error: Sys.WebForms.PageRequestManagerParserErrorException: The message received from the server could not be parsed. Common causes for this error are when the response is modified by calls to Response.Write(), response filters, HttpModules, or server trace is enabled.
Details: Error parsing near ‘%PDF-1.2 %�� 1 0 ob’.

La imagen en mi IE8 de Windows 7:

image

 

 

Exportando

Ejemplo 1: con el metodo ExportToHTTPResponse

Aquí obtenemos el reporte y lo exportamos a la salida HTTP, sin necesidad de armar el content-type… damos el tipo de formato de exportación y listo. Como segundo parámetro recibe el objeto Response

protected void btnExportarPDF_Click(object sender, EventArgs e)
   {
       ReportDocument reporteDoc = ReporteCrear();
       reporteDoc.ExportToHttpResponse(ExportFormatType.PortableDocFormat, Response, true, "EjemploExportacion");
   }

 

Ejemplo 2: armando la salida HTTP, utilizando ExportToStream

Aqui hacemos al viejo estilo de exportación, tomando el control del Reponse mediante un MemoryStream donde se encuentra el reporte

Con este MemoryStream también lo podemos enviar por email: String to Stream: para enviarlo como Attachment (tal vez otro post sobre un ejemplo de esto exclusivamente con Crystal Report)

El codigo para armar:

protected void btnExportarPDFv2_Click(object sender, EventArgs e)
   {
       //Cargar reporte. Enlazando a la fuente de datos.
       ReportDocument reporteDoc = ReporteCrear();

       System.IO.Stream streamPDF;
       streamPDF = reporteDoc.ExportToStream(ExportFormatType.PortableDocFormat);

       System.IO.MemoryStream stream = (System.IO.MemoryStream)reporteDoc.ExportToStream(ExportFormatType.PortableDocFormat);

       Response.Buffer = false;
       Response.Clear();

       Response.AddHeader("content-disposition", "attachment;filename=EjemploExportacion.pdf");
       Response.ContentType = "application/pdf";

       Response.BinaryWrite(stream.ToArray());

       Response.End();
   }

 

Pero en el UpdatePanel? No funciona. Hay que agregarlo a la coleccion de Triggers

Debemos agregar el botón en la colección de Triggers.

Esto lo debe hacer automáticamente el Update Panel lo de registrar cada control “interno” pero parece que hay un problema.

from MSDN:

“…Cuando la propiedad ChildrenAsTriggers de un control UpdatePanel se establece en true (valor predeterminado), los controles de devolución de datos que se encuentran dentro del control UpdatePanel se registran automáticamente como controles de devolución de datos asincrónica….”

Pero en este caso parecía que no :(, asi que hay que agregarlo a la colección de Triggers.

image

Así se puede exportar

Registrando el botón por código para actualizar asíncronamente? Tampoco me funciono

Tampoco me funciono registrar el control por codigo con el metodo ScriptManager.RegisterAsyncPostBackControl

En el ejemplo anterior para el botón btnExportarPDFv2 que esta dentro del UP

ScriptManager1.RegisterAsyncPostBackControl(btnExportarPDFv2);

NOTA: Si alguien me puede decir que pasa voy a agradecerlo!

 

Así que la única solución dentro de un Update Panel

Registrar el botón explícitamente (o sea mediante declaración) como Trigger.

 

Ejemplo para descargar

Si no puedes ver click aquí para la descarga

 

 

Enlaces

 

SQL Server 2008: Management Studio … “Impedir guardar cambios que requieran volver a crear tablas”

Esto es mas bien una protección que me gusto encontrarla, pero que no me permitía hacer justamente eso :), desde un diagrama modificar tablas.
En mi reciente instalación de Windows 7 en mi notebook, instalo el SQL 2008 para tenerlo + cerca e ir utilizándolo en mis pruebas, me arrojo el mensaje de protección

Mensaje:
No se se permite guardar los cambios Los cambios que se ha realizado requieren que se quiten y vuelvan a crear las siguientes tablas. Quizá ha realizado cambios en una tabla que no se puede volver a crear o ha habilitado la opción de Impedir guardar cambios que requieran volver a crear tablas

image

Me gusto este tipo de protecciones, pero me hubiera gustado que me dijese donde esta la opción. Pero de puro quisquilloso…

 

Donde esta la opción?

Herramientas >> Opciones

image

Luego en la opción de Designers >> "Impedir guardar cambios que requieran volver a crear tablas"

image

 

(from MSDN)

Evita que un usuario realice modificaciones que requieran volver a crear la tabla. Las acciones siguientes pueden requerir que se vuelva a crear una tabla:

  • Agregar una nueva columna en la mitad de la tabla
  • Quitar una columna
  • Cambiar la nulabilidad de columnas
  • Cambiar el orden de las columnas
  • Cambiar el tipo de datos de una columna

 

Enlaces

Setup Project, ASP.NET: Install Assembly into GAC …

A veces queremos que una de nuestras componentes de un proyecto en particular se instale en la GAC (Global Assembly Cache), por lo menos lo necesitaba en un proyecto ASP.NET

Pero… donde esta la carpeta en el listado que nos brinda el agregar archivos en el setup project?

En el proyecto de setup:

image

Vamos agregar una carpeta (que es el apuntador al GAC)
(se pueden agregar “carpetas especiales” incluso carpetas personalizadas)

image

Allí podremos insertar nuestros assemblys

image

 

Enlaces

Outlook: Descargar email completo con IMAP (y no solo el encabezado)

Enviar un email con una presentación .ppt para salvar al mundo, U$S 0… (1min de tu vida para reenviarlo de otro amigo/a armarlo)
…recibir un SPAM de Viagra o del Bank of America U$S 0 (con 1 segundo de tu vida para eliminarlo)
…Sincronizar nuestras carpetas no tiene precio ni desperdicio :) 


Por aquí en la empresa utilizamos desde que salió a la luz Google Apps desde el primer día que salió a la luz hace unos años (nos costo el cambio porque Francisco no quería dar el brazo a torcer el servidor de correo).
Como esta utilidad les ayuda a mis amigos Fabián y Federico (que todavía son fan del POP3)… que hace un par de días me hicieron recordar de este tema y por eso reflote este post (ya tengo menos en borrador)

Versión by Microsoft…

Aclaremos… en ese momento Live no existía, pero ahora Microsoft también tiene su plataforma Centro de administración de Windows Live (antes llamado Windows Live Custom Domains)
https://domains.live.com/
image

En Geeks.ms ofrece este servicio con dominio @geeks.ms … desde este enlace)
(que me dio oportunidad de probar el Outlook Connector, que será tema de otro post)

 

Seguimos con el tema del post… IMAP y Outlook

Aquí no vamos a ver como configurar IMAP de nuestra cuenta de Google Apps ya que eso lo tenemos por aquí, solo la configuración para forzar la descarga

Primeramente vamos a configurar las cuentas… 

image 

Allí en la configuración de correo, vamos a la configuración de Enviar y Recibir

image

Podemos hacer grupos de envió y recepción (pero en este caso utilizamos el que nos asocia por defecto)

image

Y en nuestra cuenta (del lado derecho) la seleccionamos y configuramos RECIBIR ELEMENTOS DE CORREO
La opcion predeterminada de IMAP es “Descargar encabezados…” yo la cambie en la carpeta Bandeja de Entrada que me descarga el elemento completo, me pareció bueno el comportamiento por carpeta.

image

 

 

Enlaces

Error Outlook: “Operación cancelada debido a restricciones en este equipo. Póngase en contacto con el administrador del sistema”

Un amigo, Seba “Orchi”… me pregunta porque en su notebook los enlaces/hipervínculos dentro de mensajes que lee en su Outlook 2007 arrojaban el siguiente mensaje

Mensaje:

Operación cancelada debido a restricciones en este equipo. Póngase en contacto con el administrador del sistema

La pantalla:

image 

 

Solución

 

Solamente restableciendo al Internet Explorer como el navegador predeterminado se soluciono (por suerte)

image

Luego se puede volver a utilizar su navegador preferido, que en este caso era Firefox