Ready To Blazor

Bienvenido a Ready To Blazor, un starter-kit basado en Blazor Server que acelera la creación de aplicaciones empresariales conectadas a Dinaup. En este artículo encontrarás una introducción gradual—desde la pila de componentes hasta ejemplos de código listos para copiar—para que puedas publicar tu primera pantalla en minutos.
Conceptos
Ready To Blazor usa Radzen
Ready To Blazor adopta la colección de componentes Radzen Blazor para proporcionar :
DataGrid, Tabs, DialogService, notificaciones y decenas de controles preparados para producción.
Un look & feel consistente y personalizable mediante los temas de Radzen.
Integración directa con código C# (sin generadores externos).
DinaZen → puente entre Radzen y Dinaup
Para simplificar la comunicación con la API de Dinaup hemos publicado DinaZen: un paquete NuGet que añade helpers de extensión y componentes visuales que encajan como un guante con Radzen.
Basta con añadir la referencia y un @using DinaZen para disponer de:
LoaderU: indicador de carga reactivo.
Extensiones como
Extensions.LoadReportDataAsyncpara rellenar DataGrids en una línea.Conversores y validadores listos para usar.
Autenticación integrada (login / alta / recuperación)
Ready To Blazor trae el flujo de identidad completo:
Inicio de sesión
Pages/Sesion/LoginForm.razor
Inicia sesión y recuerda al usuario.
Alta de cuenta
LoginForm.razor (pestaña Crear Cuenta)
Valida email, fuerza política de contraseña y envía correo de activación.
Recuperar contraseña
LoginForm.razor (pestaña Recuperar Contraseña)
Envía enlace de recuperación y permite cambiarla con código.
Todo el flujo se apoya en los servicios CurrentUserService y SMTPService, comentados más abajo.
Configura tus credenciales SMTP
El envío de correos (activación y recuperación) requiere un servidor SMTP válido; esto se configura desde appsettings.json .
Conecta tu instancia MyDinaup
Ready To Blazor asume que tu organización dispone de un entorno MyDinaup. Solo necesitas:
URL base de tu API Dinaup.
Un API Key / Secret con permisos de lectura y escritura.
Ejemplos
Archivo de Configuración
Ejemplo de archivo appsettings.json
Cargar Informe Manual
Antes de entrar en herramientas de más alto nivel, en Dinaup casi todo se basa en "Reports" o "Informes" APIPaisesC es una clase de MyDinaup , es decir, no tendrás que programarla simplemente instanciarla.
Ejemplo de como cargar 100 países.
Ejemplo 1 – Carga directa en memoria
Este ejemplo muestra cómo cargar todos los registros de un informe de Dinaup de una sola vez al iniciar la página. Es una opción sencilla y rápida para conjuntos de datos pequeños o medianos que se consulten con poca frecuencia.

⚠️ Solo se cargan los primeros 100 registros; el resto se omite si no hay paginación.
⚠️ Los datos se cargan al entrar en la página, lo que puede facilitar ataques o sobrecarga.
Más adelante veremos métodos más óptimos para cargar datos de forma segura y eficiente
Ejemplo 2 – Carga bajo demanda
En este caso, el RadzenDataGrid se conecta al informe Dinaup usando el evento LoadData. Solo se recuperan los datos necesarios para la página actual, y se aplican filtros y ordenaciones desde el servidor. Ideal para trabajar con grandes volúmenes de datos de forma eficiente.

⚠️ Advertencia de rendimiento: Si la sección contiene muchos datos, permitir ordenación y filtrado desde el servidor puede afectar al rendimiento si no se han creado índices adecuados en la base de datos.
✅ Recomendación: Asegúrate de tener índices sobre las columnas que se utilizan frecuentemente para filtrar o ordenar, especialmente en entornos con grandes volúmenes de registros.
Operaciones de Escritura
Las operaciones de escritura se realiza utilizando WriteOperation. Aquí un ejemplo mínimo.
Ejemplo 3 - Agregado rápido
Aquí tienes un ejemplo mínimo y claro para ejecutar una WriteOperation
Anotaciones Internas [Subir archivo + añadir comentario]
Este ejemplo permite escribir un comentario al usuario, adjuntar una imagen desde cámara o galería, y vincular ambos a una fila (rowId) y sección (sectionId). Al guardar, se ejecuta Annotation_PutAsync, y se notifica al componente padre con OnAnnotationSended.
El tipo de anotación se define con AnnotationTypeE, que puede ser:
Files: para documentación interna, como fichas técnicas o manuales.Comments: para notas internas o interacción entre miembros del equipo.PublicGallery: para archivos públicos como fotos de un producto. Cuidado: pueden ser accesibles públicamente e indexados por buscadores.
Ideal para añadir contexto o evidencias visuales en cualquier flujo de trabajo.
Convención
✅ Uso de
nameofSiempre que se indique una propiedad por su nombre (por ejemplo, en columnas, filtros o bindings), debe usarsenameofpara mantener el código seguro ante refactors y facilitar la navegación.✅ Botones asíncronos con
IsBusyTodos los botones que ejecuten acciones asíncronas mediante el eventoClickdeben incluir el indicadorIsBusypara proporcionar feedback visual al usuario mientras se procesa la acción.✅ Nombres de secciones según licencia del usuario Se deben conservar los nombres de las secciones tal como aparecen en la licencia del usuario. Por ejemplo:
GetPaiseses correcto y no se considera una mezcla de idiomas, ya que"Paises"es el identificador personalizado del usuario en su entorno MyDinaup.✅ Fechas y Horas siempre UTC
✅ Fechas sin Horas Siempre DateOnly
Última actualización