martes, 26 de mayo de 2009

Como cambiar la Cultura en Reporting Services (rdlc)

Globalization, Changing Culture of Reporing Services (RDLC)

Hace unos días tuve que hacer un projecto el cual debía trabajar con varios Idiomas (Globalization) y como reporteador utilizamos Reporting Services de forma desconectada o Reporting Services Stand Alone. Los reportes tipo RDLC cuando se trabajan en el diseño es posible cambiar la cultura o el idioma del reporte por medio de la propiedad Language, pero en tiempo de diseño no esta tan sencillo como cambiar una propiedad.

En nuestro caso, la aplicación podría cambiar de cultura al momento de iniciar, lo que nos trajo un problema con los reportes. Este problema yo lo ataque de la sigueinte manera:


'''
''' Este método establece la nueva cultura
''' para el reporte según el parámetro recibido
'''

''' Path del reporte
''' Nueva cultura especificada para el reporte.
'''

Public Shared Sub SetCultureToReport(ByVal ReportPath As String, ByVal Culture As String)
Dim xmlDoc As XmlDocument
xmlDoc = New XmlDocument
'---------------------------------------------
'Read the XML structure of the Report, for get
'the tag 'Language' of the report and
'to modify with the culture of the application.
'---------------------------------------------
xmlDoc.Load(ReportPath)
'---------------------------------------------
'Change the Culture.
'en-US
'---------------------------------------------

xmlDoc.ChildNodes(1).Item("Language").InnerText = Culture
'---------------------------------------------
'Save the Report with the new Culture.
'---------------------------------------------

xmlDoc.Save(ReportPath)
xmlDoc = Nothing
End Sub


Como ven lo que hace el metodo prácticamente es sobreescribir el reporte inicial y con eso se puede trabajar con varios idiomas en tiempo de ejecución. Lo mismo aplica para aplicaciones Asp.Net como aplicaciones Windows Forms.

Espero que sea de utilidad para alguna persona!!!

Saludos!

Visita: InfoDotNet.com y encontraras mucha información acerca de programación con .Net

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.

lunes, 9 de febrero de 2009

Solución al Error “An established connection was aborted by the software in your host machine”

Para iniciar la creación de este blog, voy a desempolvar algunos artículos que tenía por ahi guardados pero que nunca he publicado. Así que comencemos con este, el cual creo que va a ayudar a mas de uno...

El artículo trata sobre el error “An established connection was aborted by the software in your host machine”, este error puede ser ocacionado por varias aplicaciones de seguridad, como firewalls, antivirus, entre otros.

En mi caso este error fue ocacionado por el Antivirus McAfee versión 8, ya que este crea una serie de reglas para bloquear ciertos programas dañinos para nuestros equipos y yo estaba en medio de un desarrollo de una herramienta para envio de correos masivos.

Para solucionarlo hay que seguir los siguientes pasos:

1. Abrir la consola del McAfee


2. Realizar un doble clic sobre Protección de Acceso

3. Luego presionar doble clic sobre la primera regla. En la sección de procesos excluidos debemos agregar el proceso WebDev.WebServer.exe como se muestra en la imagen, ya que este es el proceso involucrado para el desarrollo de aplicaciones web con VS 2005.


Espero que este primer articulo le ayude a alguno, se agradece cualquier comentario para mejorarlo.

Pakko!

InfoDotNet, Sitio de Programación en .Net