jueves, 16 de abril de 2009

Could not load type 'System.Web.UI.ScriptReferenceBase'

Este error se ha vuelto muy comun cuando estamos trabajando con .Net Framework 3.5 SP1 y luego montamos nuestra aplicación en un servidor con .Net Framework 3.5 sin SP1.

Could not load type 'System.Web.UI.ScriptReferenceBase' from assembly 'System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'

De modo que hay dos posibles soluciones
1. Actualizar nuestro servidor con .Net Framework 3.5 SP1

2. Compilar nuestra aplicación sin el .Net Framework 3.5 SP1

Por otra parte, si estás trabajando con un provedor de servicio de hospedaje como Mosso y has registrado tus dominios antes de que Mosso haya actualizado los cluster, debes o bien solicitar a Mosso que te vuelva a registrar tu dominio sin el borrado de las cuentas de correo o bien si no te interesan las cuentas de correo, pues seria nada mas de volver a registrar el dominio y este se hospedará en los cluster actualizados con el SP1 y tu problema se resuelve.

Suerte con la actualización a .Net Framework 3.5 SP1.

martes, 7 de abril de 2009

Por que no aparece el icono de Imprimir con Reporting Services (rdlc)?

He estado trabajando ultimamente con Reporting Services 2005 con definición de reportes en el cliente (rdlc), pero me he topado con la sorpresa de que el control ReportViewer que viene incorporado en .Net 2005 no proporciona compatibilidad de impresión.


Lo que Microsoft recomienda es:
1. utilizar la opción de impresión del navegador (IE, Firefox, Safari)
2. exportar a PDF o Excel ya que estos dos brindarían mejores acabados de impresión.

Pero en ocasiones por cuestiones de seguridad y requerimientos del usuario no es posible habilitar la opción de exportación a otro formato.

De modo que aquí tendríamos dos posibles soluciones.

1. Utilizar el servidor de Reporting Services, ya que cuando se está trabajando con dicho servidor si se habilita la funcionalidad del botón de impresión.

2. Imprimir directamente nuestro reporte a una impresora ya predeterminada.

A continuación desarrollaremos un ejemplo pequeño de como enviar directamente a la impresora un Reporte de tipo rdlc.


Primero debemos incluir los siguientes Imports.







Ahora crearemos 3 variables que se utilizaran para almacenar los objetos de tipo stream y los nombres de los archivos temporales a crear.



Se debe crear un botón donde coloquemos la funcionalidad de impresión, de modo que este botón estaría realizando el llamado al reporte, la carga de datos del reporte (pasar el datasource), luego realizar la exportacion del reporte a archivos temporales de tipo emf y posteriormente enviar a impresora cada uno de estos archivos por medio del método Print.








Crearemos un método llamado CreateStream el cual se va a invocar posteriormente en el método render del reporte que están en el método Export.









Posteriormente creamos el método Export, el cual se encarga de enviar los parametros de margenes y tamaño de pagina para los archivos emf y además invoca al método CreateStream.









Ahora se crean los métodos Print y PrintPage los cuales se encargan de enviar todos los archivos emf a la impresora seleccionada.
















Con el codigo anterior se puede enviar sin ningun problema un reporte directamente a impresora, queda pendiente para hacer una solución más elegante, mostrar un cuadro de dialogo donde se listen las impresoras disponibles en la maquina del usuario, pero eso será para una segunda entrega de este artículo.


Cualquier mejora que se le pueda hacer al codigo será bienvenida.

P.D. Si alguien sabe como subir archivos en este blog se lo agradecería para poder subir el ejemplo. De momento me pueden escribir a info@infodotnet.com para enviarles el ejemplo por correo.