viernes, 30 de noviembre de 2007

Reunion del 21 de noviembre del 2007 en la comunidad

Estuvimos con los muchachos de la comunidad compartiendo este tema. Que a mi juicio la estrella y el patrón de moda hoy es Dependency Injection, este fue mi estrella en la presentación, que haré un tema para desarrollar este patron con ejemplos en mi blog.

Tema: Principios de OOP con .NET Framework 2.0

Expositor: Manolo Herrera(MVP Client Application 2007).

Fecha: Miércoles 21 de Noviembre de 2007
Horario: 6:30 P.M. – 8:30 P.M.
Lugar: Hotel Intercontinental Salón Rosul
Costo: Gratis
Otros: Habrá Coffee Break, Parqueo y Premios

Invita: Comunidad de Desarrolladores .NET en Guatemala, con Apoyo de Microsoft de Guatemala


Atentamente,

Manolo Herrera
Coordinador de La Comunidad de Desarrolladores .NET en Guatemala (http://groups.google.com/group/LaComunidadNET/web/memorias-de-las-reuniones-de-la-comunidad)

jueves, 22 de noviembre de 2007

Could not load file or assembly 'CrystalDecisions.CrystalReports.Engine, Version=10.5.3700.0, Culture=neutral, PublicKeyToken=692fbea5521e1304' or one of its dependencies. The system cannot find the file specified.

Could not load file or assembly 'CrystalDecisions.CrystalReports.Engine,
Version=10.5.3700.0, Culture=neutral, PublicKeyToken=692fbea5521e1304' or one of its dependencies.
The system cannot find the file specified.


Este error me dio cuando abri un proyecto vs 2005 en VS2008 y mantuve la compatibilidad al framework 2.0, al parecer no solo me convierte la solucion sino que me agrega unos nuevos dlls del engine de crystal para aplicaciones web y me convierte los archivos de reportes rpt de Crystal.

Que hay que hacer:

agregar en el web config la referencia de los assemblies viejos de 2005 en la seccion runtime como se muestra aquí:

<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="CrystalDecisions.CrystalReports.Engine " publicKeyToken="692fbea5521e1304"/>
<bindingRedirect oldVersion="10.5.3700.0" newVersion="10.2.3600.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="CrystalDecisions.CrystalReports.Shared" publicKeyToken="692fbea5521e1304"/>
<bindingRedirect oldVersion="10.5.3700.0" newVersion=" 10.2.3600.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="CrystalDecisions.Shared" publicKeyToken="692fbea5521e1304"/>
<bindingRedirect oldVersion="10.5.3700.0" newVersion="10.2.3600.0"/>
</dependentAssembly>
</assemblyBinding>
</runtime>


y luego se reemplaza las referencias de los dlls viejos por los nuevos y se copia los archivos rpt del proyecto de 2005 original, Se compila la solución y listo todo funciona como debe.

Por lo demas VS 2008 parece muy estable y si corre lado a lado con las versiones anteriores de 2005. Si intentan instalar el runtime de crystal 2008 necesitan una produc key misterioso que no se sabe cual es o si instalar los de redistribución que viene en la media de VS 2008, les cambia el error por este:

Aquí la referencia de la solución parcial:
http://tim.mackey.ie/default,month,2007-05.aspx (Lo que no incluye me imagino porque no era sobre la version RTM que cambia los archivos rpt de crystal y es necesario copiar los originales a los que le hace backup).

Retrieving the COM class factory for component with CLSID {5FF57840-5172-4482-9CA3-541C7878AE0F} failed due to the following error: 800736b1.

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.Runtime.InteropServices.COMException: Retrieving the COM class factory for component with CLSID {5FF57840-5172-4482-9CA3-541C7878AE0F} failed due to the following error: 800736b1.

Source Error:


An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.


Stack Trace:


[COMException (0x800736b1): Retrieving the COM class factory for component with CLSID {5FF57840-5172-4482-9CA3-541C7878AE0F} failed due to the following error: 800736b1.]    CrystalDecisions.CrystalReports.Engine.ReportDocument..cctor() +182  [TypeInitializationException: The type initializer for 'CrystalDecisions.CrystalReports.Engine.ReportDocument' threw an exception.]    CrystalDecisions.CrystalReports.Engine.ReportDocument..ctor() +0    LaUnion.Sistema.CajaYBancos.ServicioReporte.PreparaReportDocument(String pathReporte, DataSet dataSource, Hashtable fields) in C:\DevProjects\Guatemala\Main\Source\LaUnion.Sistema.CajaYBancos.AplicacionWeb\Code\Servicios\ServicioReporte.cs:260    LaUnion.Sistema.CajaYBancos.ServicioReporte.ReporteEnMemoria(String pathReporte, DataSet dataSource, Hashtable fields, ExportFormatType formatoSalidaImpresion) in C:\DevProjects\Guatemala\Main\Source\LaUnion.Sistema.CajaYBancos.AplicacionWeb\Code\Servicios\ServicioReporte.cs:251    LaUnion.Sistema.CajaYBancos.Operaciones.LiquidacionCajaChicaV3.Imprimir() in C:\DevProjects\Guatemala\Main\Source\LaUnion.Sistema.CajaYBancos.AplicacionWeb\Operaciones\LiquidacionCajaChicaV3.aspx.cs:947    LaUnion.Sistema.CajaYBancos.Operaciones.LiquidacionCajaChicaV3.BotonesLiquidacionCajaChica_Click(Object sender, BotonesLiquidacionCajaChicaEventArgs e) in C:\DevProjects\Guatemala\Main\Source\LaUnion.Sistema.CajaYBancos.AplicacionWeb\Operaciones\LiquidacionCajaChicaV3.aspx.cs:68    LaUnion.Sistema.CajaYBancos.BotonesLiquidacionCajaChicaCOM.OnPresionado(Object sender, BotonesLiquidacionCajaChicaEventArgs e) in C:\DevProjects\Guatemala\Main\Source\LaUnion.Sistema.CajaYBancos.AplicacionWeb\Componentes\CajaYBancos\BotonesLiquidacionCajaChicaCOM.ascx.cs:26    LaUnion.Sistema.CajaYBancos.BotonesLiquidacionCajaChicaCOM.CargarImprimir() in C:\DevProjects\Guatemala\Main\Source\LaUnion.Sistema.CajaYBancos.AplicacionWeb\Componentes\CajaYBancos\BotonesLiquidacionCajaChicaCOM.ascx.cs:314    LaUnion.Sistema.CajaYBancos.BotonesLiquidacionCajaChicaCOM.Opcion_Click(Object sender, EventArgs e) in C:\DevProjects\Guatemala\Main\Source\LaUnion.Sistema.CajaYBancos.AplicacionWeb\Componentes\CajaYBancos\BotonesLiquidacionCajaChicaCOM.ascx.cs:188    System.Web.UI.WebControls.LinkButton.OnClick(EventArgs e) +90    System.Web.UI.WebControls.LinkButton.RaisePostBackEvent(String eventArgument) +76    System.Web.UI.WebControls.LinkButton.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +7    System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +11    System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +177    System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1746 


Y allí no le he encontrado ninguna solución. Si la encuentran me avisan.

Code4Fun!,


Manolo Herrera

miércoles, 21 de noviembre de 2007

VS 2008 RTM una Version Estable

Mi primer dia con la version VS 2008 RTM emocionante y confiable.  Tengo instalado la version 2003, 2005 y ahora la version 2008 RTM y como lo anuncion Scott Gu esta ultima corre "Side by side".  Por el momento estoy ejecutando mis proyectos en 2008 pero con el framework 2.0 y funciona de maravilla. No noto ninguna lentitud y a decir verdad, el webserver de 2008 parace estar mejorado ya que se ejectua con mayor rápides luego de la primera vez generado.  El designer aunque tengo la opcion de split la parte en el diseño aunque me lo muestra mejor pareciera que no entiendie todos los metatags de mi proyecto en 2.0, pero esta por verse si es el disgner o algunas instrucciones no bien definidas del lado del html o css.  Pero el momento me ha asombrado la estabilidad del producto y la correcta funcionalidad que tiene con proyectos de version anterior como lo es 2.0. Algunas opciones de mejora en la optimizacion de los usings (remove and order) he encontrado en la herramiento de VS 2008, pense encontrar mas opciones de refactor pero no fue asi, supongo que continuaré utilizando ReSharper, haber como funciona con 2008?

--
Code4Fun!,


Manolo Herrera

viernes, 16 de noviembre de 2007

Que paso con el buen uso del TryParse(string, out int variable)


En la version 2.0 del framework con el arribo de Generics, vino los nullables  y los TryParse que cada tipo de dato que lo que pretenden es que evitemos el overhead del try catch para castear un valor que normalmente esta en string a un tipo de dato como un entero.  Este sencillo método que lo tienen todos los tipos primitivos de datos del framework 2.0 en adelante me dan una solución elegante y menos cargada para los tipicos casteos de controles que reciben valores string y es necesario convertirlo a un tipo primitivo como entero, decimal, double, etc.
 
Chequen este ejemplo que lo que no debe de hacerse a partir del framework 2.0 y en adelante.
 
int Codigo = 0;
try
{
      Codigo = Convert.ToInt32(CodigoTextBox.Text);
}catch (Excepction)
{
    blablabla..
}
 
Ahora lo que si podemos hacer gracias a este nuevo metodo incorporado en el framework 2.0:
 
int Codigo = 0;
if ( int.TryParse(CodigoTextBox, out Codigo)
{
    Bla..bla..bla.
}
 
Si logra con éxito realizar el parser entrara en las llaves sino sabremos que no lo hizo.  El valor de Codigo si no logra realizar el parseo siempre es cero.
 
Code4Fun!

Manolo Herrera

Failed to update database because the database is read-only.

Este error es muy común cuando no se tiene la costumbre de trabajar con archivos mdf adjuntos al proyecto web asp.net 2.0 si estas corriendo en IIS 6.0 necesitas darle a la carpeta acceso de escritura y lectura a la cuenta NETWORK SERVICE.

Code4Fun!
 
Manolo