lunes, 9 de mayo de 2022

Páginas en blanco al exportar a PDF un Informe con matrices

 Problema

En MS SQL Report Server, al exportar un PDF que incluye matrices  se producen páginas en blanco.

Solución

Establece en Cierto la propiedad ConsumeContainerWhitespace  del informe mismo.

Agradecimientos

Respuesta de Nicholas Roeder en StackOferflow

viernes, 21 de enero de 2022

Formulario en muddialog en linea y parpadeos

 Sintomas

Usas el componente Dialog de MudBlazor para abrir un formulario simple, el problema es que cada vez que teclean algo el formulario parpadea.

Detalles

  • El código del dialogo lo has incluido en línea, usando la propiedad visible del componente
  • Los campos tiene validación simple (requerido y máxima longitud).

Motivo

Por algún motivo al validar cada tecla se lanza un renderizado de página y el dialogo realiza la transición de apertura.

Solución (o parche)

Debes detener el renderizado con una variable y sobrecargando el evento 

        private bool _renderizar = true;
        protected override bool ShouldRender()
        {
            return _renderizar && base.ShouldRender();
        }

El valor de _renderizar debe cambiar a falso después de haber renderizado el dialogo, para lo que usamos el evento IsVisibleChanged del componente muddialog

<MudDialog IsVisible="@visible" Options="opcionesDlg" IsVisibleChanged="CambioVisibleDialogo">...

private void CambioVisibleDialogo(bool visible)
{
    if (visible) _renderizar = false;
}

Deberemos reactivar el renderizado antes de ocultar el dialogo, por ejemplo:

<MudIconButton Icon="@Icons.Material.Outlined.Cancel 
       OnClick="@(()=>{_renderizar=true; visible=false;})"/>


miércoles, 5 de enero de 2022

Mayúsculas, Minúsculas y "Exception: '<' is an invalid start of a value" en ReadFromJsonAsync (Blazor)

 Sintomas

La operación de conversión JSON a Objeto 

_datos = await q.Content.ReadFromJsonAsync<EdiProyecto.Edicion>()

Provoca el error 

"Exception: '<' is an invalid start of a value"

Por experiencia supones que está recibiendo Html en lugar de JSON, revisas la petición

var q = await Http.GetAsync($"API/Proyectos/{Id}");

Escribes en el navegador  loalhost:23234API/proyectos/ 22 y recibes JSON

¿Qué pasa?

Causa y Solución

El nombre de controlador en la URL de WEBAPI debe estar en minúsculas.

var q = await Http.GetAsync($"API/proyectos/{Id}");


martes, 30 de noviembre de 2021

Error al usar await q.Content.ReadFromJsonAsync

 Sintomas:

En Blazor WASM  se produce un error  

Microsoft.AspNetCore.Components.WebAssembly.Rendering.WebAssemblyRenderer[100]       Unhandled exception rendering component: Each parameter in the deserialization constructor on type 'CRM.Shared.Models.Notas.FilaTabla' must bind to an object property or field on deserialization. Each parameter name must match with a property or field on the object. The match can be case-insensitive.

Al convertir la respuesta de JSON a un objeto C# mediante q.Content.ReadFromJsonAsync .

Lo que te sorprende es que la clase esta definida en el proyecto Shared usado tanto por el proyecto Server del controlador Web API que envia la respuesta como por la parte del cliente donde se realiza la llamada a Content.ReadFromJsonAsync. Entonces, ¿por qué difieren los nombres?

Solución:

La clase no tiene un constructor vacio.

Observaciones

Es fácil olvidarse del constructor vacío cuando creas un construtor con parametro un entidad de EF.

viernes, 12 de noviembre de 2021

Error "Data is Null. This method or property cannot be called on Null values" en Entity Framework 6

 Descripción del problema

Acabas de instalar VS2022 y .NET6 SDK, creas un proyecto que accede a una base de datos  Para generar los modelos y mapeos usas ingeniería inversa, por ejemplo Entity Framework Generator

Creas un controlador API Get para obtener una lista de fabricas desde Blazor. ¡Oh sorpresa! La cosa no funciona. 

El mensaje de error es: "Data is Null. This method or property cannot be called on Null values"

Resolución

Debes deshabilitar Admite valores NULL en Compilación/general del proyecto donde tienes los modelos y dbcontext para acceder a la base de datos.

Explicación

En C#8 cuando habilitas la característica NRT debes usar string? para una propiedad de cadena que admita nulos y string para una que no los admita.

EF6 CORE implementa NRT mediante anotaciones, pero los generadores databasefirst no asocian el tipo string? a las propiedades mapeadas a columnas varchar nullables.


lunes, 25 de enero de 2021

No se inicia la depuraración blazor Wasm con Chrome desde VS2019

Síntomas

En Visual Studio 2019 al iniciar la depuración de una solución blazor WebAssembly .net core hospedada salta una ventana que dice:
No se puede iniciar el depurador .
Habla de un error en microsoft.visualstudio.shared.vscode debug protocol.protocolexception 

Dándole vueltas

La solución podía depurarse hasta que aparece el error ,entonces la única solución es cambiar de browser. 
El problema aparece en los navegadores de la familia chromium (Chrome, Edge,...).
Sin embargo se puede depurar con Firefox. 
Ocurre con otro tipo de soluciones aparte de Blazor Wasm

Solución

Eliminar el archivo en /.vs/[project name]/config/debuggerConfiguration-{guid}.json de la solución
Si tienes Chrome abierto cierralo.
Ya puedes depurar durante un rato.

Consejo:

Deja abierta la carpeta /.vs/[project name]/config/ para ir eliminando el archivo cada cierto tiempo.

jueves, 7 de noviembre de 2019

QRCode.js y Code Length OverFlow Error

El problema

Estoy generando QRCodes mediante  QRCode.js
https://github.com/davidshimjs/qrcodejs
Sin embargo según el contenido algunos se visualizan y otros no.
Mirando en la ventana del navegador veo:
Code Length Overflow Error
por algún problema en el código de QRCode.js

Solución

Usar la bifurcación del proyecto que realizó la compañía Keepx
https://github.com/KeeeX/qrcodejs
dado que el proyecto original no tiene mantenimiento desde hace años.

Referencias

https://github.com/davidshimjs/qrcodejs/issues/78#issuecomment-278567765