domingo, 10 de marzo de 2013

Informes, reports..


Lo reconozco odio hacer informes, me da igual el método

Hoy tenía 5min de descanso y he visto un link muy interesante
Generar archivos Excel como un señor con ClosedXml

Yo también lo reconozco en modo web también he cambiado el content-type

Para generar Word en el CodePlex Docx

Hace algunos años (más de 3) estos link me salvaron de un apuro
http://www.codeproject.com/KB/reporting-services/Reporting_ServicesByalifaraze.aspx

Para exportar a Word el report
http://www.codeproject.com/KB/reporting-services/report-viewer-hack.aspx

Localizador o multidioma en los report generados con el .net
http://www.codeproject.com/KB/aspnet/RDLC_Localization.aspx

Este link genial, uno se da cuenta lo que desconoce el office, lo reconozco es una locura, pero funciona.
Resumen: creas lo objetos, con ellos obtienes  el xsd para asociar al word. Hasta imágenes inserte en su día
http://www.codeproject.com/Articles/20287/Generating-Word-Reports-Documents
Más info
http://sophinet.wordpress.com/2011/03/10/open-xml/

Por si no lo sabes el Open Office no deja de ser un fichero comprimido. Apuesto que alguno no se lo cree…
Haz la prueba:
  1. Guarda un documento (me da igual Word o Excel, con la extensión .docx o .xlsx)
  2. Cambia la extensión por .zip
  3. Luego dar a ver que hay dentro.

viernes, 15 de febrero de 2013

VS & Nuget


NuGet es un add-in para Visual Studio 2010 y es un gestor de paquetes que permite instalar y configurar librerias y herramientas para utilizarlas dentro de nuestros proyecto

Información :
http://eduardosojo.com/2011/07/19/usuando-nuget-que-es-nuget/

http://docs.nuget.org/docs/start-here/using-the-package-manager-console

Cuando hay problemas que los tendremos

http://geeks.ms/blogs/fernandezja/archive/2012/05/22/vs2010-sp1-nuget-actualizaci-243-n-manual-de-nuget-copiando-y-pegando-archivos-cuando-tenemos-problemas-en-la-instalaci-243-n-actualizaci-243-n-en-vs2010-sp1.aspx

Muy útil para descargar el Sandcastle

La primera versión me instale el Sandcastle con el NutGet pero he querido hacer lo mismo en las máquinas de mis compañeros y fue imposible .. claro esto fue 3 años después

La buena noticia es que hay un msi
https://github.com/EWSoftware/SHFB/releases

1 el SandcastleHelpFileBuilder.msi
2 SHFBVisualStudioPackage.vsix

documentación : http://ewsoftware.github.io/SHFB/html/8c0c97d0-c968-4c15-9fe9-e8f3a443c50a.htm

Sinceramente, soy partidaria de hacer documentación, sobre todo para luego funcione el IntelliSense. Pero para que será útil, hay que hacerla según se hace el código. Pero si tu jefe quiere documentación para entregar esto es una buena solución


TFS - Team Foundation Sidekicks

Ahora trabajamos con TFS, en realidad y de momento únicamente lo usamos con control de código, antes usamos el Visual Source Safe (o VSS). Hay cosas que das por hechas, en el VSS nunca función bien a la hora de buscar quien tenía las cosas protegidas, pero con el paquete básico de TFS esa posibilidad ni siquiera la tienes ups!!!!. No queda más remedio que instalar una utilidad Team Foundation Sidekicks.. y problema resuelto Ok






viernes, 18 de enero de 2013

Super control de usuario

Los controles de usuario de Windows

Hoy ha pasado una cosa curiosa, un compi había creado una control de usuario que en el load hacia una consulta a la base de datos. Hasta aquí todo parece normal. Lo que ya no lo era tanto era si:
  1. Compilabas el proyecto
  2. En el Designer del formulario que lo contenía, en modo diseño se ejecutaba la consulta!!!
Por lo visto no es tan novedoso, aquí un ejemplo explicado lo mismo pero para el evento paint http://el-blog-de-thor.blogspot.com.es/2009/09/infectar-codigo-fuente.html

lunes, 14 de enero de 2013

DateTime.Parse & Marzo

Hoy hemos visto un error super curioso, leemos un fichero plano donde las fechas llegan con el formato dd-MMM-yy ( el formato no está decidió por nosotros)

Resulta que en una aplicación

fecha = DateTime.Parse("20-JAN-09") funciona
fecha = DateTime.Parse("20-MAR-09") falla No se puede reconocer la cadena como valor DateTime válido.

El problema parece ser en que no sabe si “MAR” es Marzo o Martes y da un error que no puede convertir la fecha, puesto que nuestro sistema operativo está en español la referencia cultural que está usando es “es”

Solución , usar DateTime.Parse con referencia cultural o DateTime.ParseExact (incluye el formato)

https://connect.microsoft.com/VisualStudio/feedback/details/729674/datetime-parse-fails-to-parse-correct-dates-or-accepts-incorrect-dates


Por si aun tienes curiosidad

Try
Dim fecha As DateTime
fecha = DateTime.Parse("20-JAN-09")
' falla ---> fecha = DateTime.Parse("20-MAR-09")
fecha = DateTime.ParseExact("20-MAR-09", "dd-MMM-yy", System.Globalization.CultureInfo.GetCultureInfo("en-US"), System.Globalization.DateTimeStyles.None)
fecha = DateTime.Parse("20-MAR-09", System.Globalization.CultureInfo.GetCultureInfo("en"), System.Globalization.DateTimeStyles.None)
fecha = DateTime.Parse("20-MAR-09", System.Globalization.CultureInfo.GetCultureInfo("en"))
fecha = DateTime.Parse("20-JAN-09", System.Globalization.CultureInfo.GetCultureInfo("es"))
' falla fecha = DateTime.Parse("20-MAR-09", System.Globalization.CultureInfo.GetCultureInfo("es"))
fecha = DateTime.ParseExact("20-MAR-09", "dd-MMM-yy", System.Globalization.CultureInfo.GetCultureInfo("es"), System.Globalization.DateTimeStyles.None)
fecha = DateTime.Parse("20-APR-09", System.Globalization.CultureInfo.GetCultureInfo("es"))
'falla --> fecha = DateTime.Parse("20-AVR.-09", System.Globalization.CultureInfo.GetCultureInfo("es"))
fecha = DateTime.Parse("20-APR-09", System.Globalization.CultureInfo.GetCultureInfo("fr"))
Catch ex As Exception

End Try

Me sorprendió que
fecha = DateTime.Parse("20-APR-09", System.Globalization.CultureInfo.GetCultureInfo("es"))

Funciona!!!!   El formato no es español, pero según la documentación

Este método intenta analizar s completamente para evitar que se produzca FormatException. Si es posible, omite los datos no reconocidos y rellena la información que falta acerca de mes, día y año con la hora actual. Si s contiene sólo una fecha y ninguna hora, este método supone que es medianoche (00:00). Se omiten los caracteres de espacio en blanco iniciales, centrales o finales que pueda haber en s. La fecha y la hora pueden ir entre corchetes con un par de caracteres NUMBER SIGN iniciales y finales ('#', U+0023) y pueden terminar con uno o más caracteres NULL (U+0000).”


Para evitar el FormatException, termina usando la InvariantCulture (que está en inglés) y por eso funciona

viernes, 11 de enero de 2013

sys.syscolumns o sys.columns parece lo mismo pero no lo es

Hoy he tenido un problema con   sys.syscolumns, la primera vez que lo vi pensaba que era sys.columns (parecido pero no es lo mismo)

La documentación del msdn deja mucho que desear para el sys.syscolumns
xtype - tinyint - Physical storage type from sys.types.
type - tinyint - Physical storage type from sys.types

Con esa explicación parece que debería tener el mismo valor , pero no es cierto en la columna type del sys.syscolumns hay valores como 0 o 39 que no están en el sys.types, en realidad esta en el sys.systypes (otra vez parece lo mismo pero no lo és)

Después de dar unas vueltas encontré las diferencias y cual tenia que usar

Catalog View es lo que se debería usar

En sys.syscolumns (Transact-SQL)
Tenia la siguiente nota :
"This SQL Server 2000 system table is included as a view for backward compatibility. We recommend that you use the current SQL Server system views instead. To find the equivalent system view or views, see Mapping SQL Server 2000 System Tables to SQL Server 2005 System Views. This feature will be removed in a future version of Microsoft SQL Server. Avoid using this feature in new development work, and plan to modify applications that currently use this feature."

MSDN equivalencias

Ejemplos para obtener información del catalogo

viernes, 4 de enero de 2013

Documentar si o si

Hoy hemos tenido una charla sobre el xml que se genera cuando compilamos, resulta que aun mucha gente no sabe que esto genera la documentación. Casi nunca documentamos, porque no vemos ningún fruto a los comentarios.

Para el que no sepa que es la documentación del código y para que vale, lee esto: MSDN

Depende de la versión del visual studio que tengas puede que tengas que instalar algún complemento para la documentación. La buena noticia es que las nuevas versiones del visual ya tiene la documentación para VB (antes solo estaba para C#)

Hasta el framework 3.5, prueba el NDoc, yo lo he usado y es fantástico. Super fácil de instalar y probar, con un montón de opciones para configurar.

También está disponible el Sandcastel (es válido para framework 4.0)
- Ayuda
- Instalarlo

Es útil, pero como todo si no lo has usado nunca vas a tardar un poco en verlo, para mi un pega es que es lento. Si no haces documentación empieza a escribirla según haces el código y prueba como sale la documentación para ver que sirve para algo y lo que puedes mejorar en tus comentarios.