De principio a fin

Flujo completo de un modulo dentro del CRM

Esta pagina une todo lo anterior en un recorrido unico para que veas que piezas intervienen y en que orden.

Diagrama general

Disenar el modulo
Crear entidades, configuraciones EF y DbContext
Declarar ModuleDescriptor y ModuleInitializer
Crear migracion y seed base
Compilar o desplegar DLL
Copiar a ModulosCompilados
Reiniciar aplicacion
Loader + DI + MVC + DbContext + migraciones + seeds
Menu, hooks, permisos y UI activos

1. Disenar el modulo

  • Definir que responsabilidad tiene.
  • Definir de que modulo depende.
  • Decidir que tablas son propias y cuales referencian maestros existentes.
Primero decide el modelo funcional. No empieces por vistas o botones.

2. Crear estructura de codigo

Modules/MIMODULO
  Controllers/
  Data/
    Configurations/
    Migrations/
    MIMODULODbContext.cs
  Entities/
  Hooks/
  Seed/
  Services/
  Views/
  ModuleDescriptor.cs
  ModuleInitializer.cs

3. Crear entidades y configuracion EF

  • Crear las clases de entidad.
  • Crear configuraciones EF por entidad.
  • Aplicarlas desde el DbContext.

4. Declarar el modulo

En ModuleDescriptor declaras metadatos y dependencias.

requiredModules: new[] { "ENTIDADES" }
dbContextType: typeof(MIMODULODbContext)

5. Registrar servicios

En ModuleInitializer registras:

  • servicios del modulo
  • hooks si extiende otras pantallas
  • seed del modulo

6. Crear migracion inicial

Cuando el modelo ya esta claro, generas la migracion del modulo.

dotnet ef migrations add InitMiModulo ...

7. Crear seed de datos base

  • Registrar modulo en tabla de modulos
  • Crear permisos
  • Crear menu base
  • Sembrar catalogos o configuracion inicial

8. Despliegue del modulo

  • Si lo subes o compilas desde ADMINPANEL, la DLL se deja en ModulosCompilados.
  • El sistema la puede detectar y preparar.
  • El panel debe avisar que el reinicio es requerido para activacion completa.

9. Arranque del CRM

  1. El loader descubre el modulo.
  2. Registra su DbContext y servicios.
  3. El gestor de migraciones aplica Migrate() si hay migraciones.
  4. Si no hay migraciones, entra el modo compatibilidad.
  5. Se ejecutan seeds.

10. Exponer UI o integracion

Segun el tipo de modulo:

  • puede tener su propio Index, Detalle, Nuevo, etc.
  • puede exponer hooks para tabs o acciones en otro host
  • puede registrar menu o MenuEntry

11. Validar permisos, limites y opciones

Antes de darlo por terminado, comprueba:

  • permisos coherentes
  • menu filtrado correctamente
  • limites en backend
  • opciones y configuracion por empresa si aplica

12. Resultado esperado

Modulo creado
-> tablas propias correctas
-> DbContext propio
-> migracion propia
-> seed de datos base
-> servicios registrados
-> permisos consistentes
-> menu visible cuando toca
-> hooks funcionando si existen
-> sin duplicar maestros
Si para que un modulo funcione dependes de SQL manual disperso, claves de permiso distintas o tablas duplicadas, el diseno aun no esta cerrado.