March 2009 - Artículos
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:

Exportando
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.
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
Crossposting desde
mi blog en Geeks.ms: http://geeks.ms/blogs/fernandezja
Para los que estamos con esto del “arte de escribir” aquí van algunos tips para utilizar Windows Live Writer (WLW) que es mucho mas fácil de mantener los artículos y dejarlos en borrador por varias semanas
Con WLW tenemos la capacidad de crear plugins, para eso necesitamos su SDK. Algunos de estos que nos pueden ayudar…
- Code Snippet plugin for Windows Live Writer
- SkyDrive Embed Plugin
- Backup con Live Writer Backup Utility (pero el recomendado es Live Mesh)
- Backup y sincronización “constante” con Live Mesh
Con esto podremos colorear nuestros código C#, CSS, HTML, Javascript, MSH, T-SQL, VB.NET
Con esto podremos integrar los archivos disponibles en nuestra cuenta SkyDrive.
Si bien podremos hacer esto con la inclusión de codigo HTML este plugins nos ahorramos ….

3) Backup con Live Writer Backup Utility
Para resguardar nuestra configuración, post en borrador y recientes, plugins todo eso en un archivo .wlwbackup (que renombrando a .rar podremos visualizar su contenido).
Mas info y enlaces de descarga en este articulo:
- Live Writer Backup Utility: Resguardo de mis post publicados, en borrador, plugins y configuración.
Pero este sistema de backup es de la “vieja escuela”, con Live Mesh es una vivir en un mundo sincronizado :)
4) Backup y sincronización “constante” con Live Mesh
Live Mesh se merece otro post (que lo tengo armado… en breve)
Una de las cosas que podemos hacer es sincronizar carpetas entre dispositivos (tipo backup) así que es un buen aliado en estos temas con tener varias maquinas y los post en borrador y recientes sincronizados
La idea es de aquí:
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
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
Luego en la opción de Designers >> "Impedir guardar cambios que requieran volver a crear tablas"
(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
Crossposting desde
mi blog en Geeks.ms
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:
Vamos agregar una carpeta (que es el apuntador al GAC)
(se pueden agregar “carpetas especiales” incluso carpetas personalizadas)
Allí podremos insertar nuestros assemblys
Enlaces
Crossposting desde mi blog en Geeks.ms
Siempre hay papeles que ordenar, libros/revistas que están en cualquier lugar, elementos que colgar… así que en la ultima reunión mensual alguien tiro la idea del OfficeDay, y el sábado (pasado) se cumplió aquí algunas de las fotos que puede delatar que algunos estaban trabajando…
Ordenamiento Lógico
Algunos estaba trabajando para la oficina en la maquina (migrando algunas cosas)… yo estaba entre ellos (créanme!) …me estoy dando cuenta que no salgo en la fotos… !

Ordenamiento Físico
Otros arreglando la biblioteca (no hay fotos de biblioteca), y colgando algunos acrílicos que lo teníamos que colgar (de una vez por todas)






Nuestros servidores de desarrollo y de test les faltaba un toque para arreglar el rack
(bonus track) Regalo by Federico…
No sabíamos donde era el justo lugar para el regalo que trajo a la oficina Federico, …quedo en su escritorio :)

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/
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…
Allí en la configuración de correo, vamos a la configuración de Enviar y Recibir
Podemos hacer grupos de envió y recepción (pero en este caso utilizamos el que nos asocia por defecto)
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.
Enlaces
Crossposting desde
mi blog en Geeks.ms
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:
Solución
Solamente restableciendo al Internet Explorer como el navegador predeterminado se soluciono (por suerte)
Luego se puede volver a utilizar su navegador preferido, que en este caso era Firefox
Crossposting desde mi blog en Geeks.ms