Ya vimos los fundamentos del Plugin Registration Tool en lecciones anteriores. Ahora profundizamos en funcionalidades avanzadas que necesitarás en proyectos reales: gestión de múltiples steps, configuración de imágenes, trabajo con configuración segura, y estrategias de actualización sin tiempo de inactividad.
Objetivos de aprendizaje
- Gestionar steps e imágenes de forma eficiente
- Configurar Filtering Attributes para optimización
- Usar Secure Configuration para credenciales
- Actualizar assemblies sin afectar la configuración
Entendiendo la estructura del PRT
Cuando abres el Plugin Registration Tool y te conectas a un entorno, ves una estructura jerárquica:
Assembly (MiEmpresa.Dataverse.Plugins v1.0.0.0)
├── Plugin1
│ ├── Step: Create of account, Pre-operation
│ │ ├── Pre-Image: PreImg
│ │ └── Post-Image: PostImg
│ └── Step: Update of account, Post-operation
│ └── Pre-Image: BeforeUpdate
└── Plugin2
└── Step: Delete of contact, Pre-operation
Esta estructura refleja exactamente cómo Dataverse almacena la configuración de plugins. Cada assembly puede contener múltiples clases de plugin. Cada plugin puede tener múltiples steps (registros en diferentes mensajes/entidades). Cada step puede tener imágenes asociadas.
Gestión de Steps
Los steps son el corazón de la configuración. Definen cuándo se ejecuta tu plugin y con qué parámetros.
Crear un nuevo Step
Click derecho en la clase del plugin → Register New Step. Los campos principales que configurarás:
Message: El evento que dispara el plugin (Create, Update, Delete, Retrieve, etc.).
Primary Entity: La entidad sobre la que aplica. Dejar en blanco para mensajes globales como SetStateDynamicEntity.
Event Pipeline Stage: Pre-validation, Pre-operation, o Post-operation.
Execution Mode: Synchronous para bloquear al usuario, Asynchronous para ejecutar en background.
Execution Order: Define prioridad cuando hay múltiples plugins en el mismo mensaje/stage. Los números más bajos se ejecutan primero.
Filtering Attributes: optimización clave
Para plugins en el mensaje Update, Filtering Attributes determina qué cambios disparan el plugin. Si no configuras nada, el plugin se ejecuta en CUALQUIER actualización de la entidad. Esto es ineficiente.
Por ejemplo, tienes un plugin que recalcula el total cuando cambia el descuento.
Solo necesitas ejecutarlo cuando cambian estos campos:
- discountpercentage
- discountamount
- new_customdiscount
En Filtering Attributes, escribe:
discountpercentage,discountamount,new_customdiscount
Ahora el plugin solo se ejecuta si al menos uno de esos campos cambió. Actualizaciones al teléfono del cliente o cualquier otro campo no disparan el plugin innecesariamente.
Deshabilitar y eliminar Steps
Para troubleshooting temporal:
- Click derecho en el Step → Disable
- El step permanece registrado pero no se ejecuta
- Útil para aislar problemas sin perder la configuración
Para eliminar permanentemente:
- Click derecho → Unregister
- Esto elimina el step y todas sus imágenes asociadas
- La clase del plugin sigue existiendo en el assembly
Configuración segura para credenciales
Cuando tu plugin necesita credenciales para llamar a servicios externos, no las hardcodees en el código. El PRT permite configurar Secure Configuration y Unsecure Configuration por cada step.
Unsecure Configuration: Visible para cualquiera que pueda ver el step. Usa para configuración no sensible como URLs base o timeouts.
Secure Configuration: Encriptado en reposo, solo visible en runtime. Usa para API keys, contraseñas, tokens.
public class MiPluginConConfiguracion : IPlugin
{
private readonly string _unsecureConfig;
private readonly string _secureConfig;
public MiPluginConConfiguracion(string unsecureConfig, string secureConfig)
{
_unsecureConfig = unsecureConfig;
_secureConfig = secureConfig;
}
public void Execute(IServiceProvider serviceProvider)
{
var trace = (ITracingService)
serviceProvider.GetService(typeof(ITracingService));
// Parsear configuración (JSON, XML, o key=value)
var config = JsonConvert.DeserializeObject(_secureConfig);
string apiKey = config.ApiKey;
trace.Trace($"Configuración cargada: URL base = {_unsecureConfig}");
// Usar las credenciales para llamadas externas...
}
}
Para configurar en PRT: al registrar o modificar el step, verás campos para Secure y Unsecure Configuration. Puedes poner JSON, XML, o cualquier formato que tu plugin sepa parsear.
Actualizaciones sin tiempo de inactividad
Has corregido un bug o añadido una funcionalidad. Necesitas actualizar el assembly sin perder la configuración de steps ni causar errores a usuarios.
El proceso correcto:
- Compila la nueva versión (mantén el mismo nombre de assembly y versión si no hay cambios breaking)
- En PRT, click derecho en el Assembly → Update
- Navega al nuevo DLL
- Click Update Selected Plugins
La actualización preserva todos los steps, imágenes, y configuración. Solo reemplaza el código del assembly.
Estrategia para cambios breaking
Si necesitas hacer cambios significativos que afectan la estructura:
- Registra el nuevo assembly con nombre diferente
- Crea los nuevos steps configurados correctamente
- Deshabilita los steps del assembly antiguo
- Verifica que todo funciona
- Elimina los steps y assembly antiguos
Esto te da un rollback fácil: si algo falla, simplemente reactivas los steps antiguos.
Exportar configuración para CI/CD
La configuración de plugins forma parte de las soluciones de Dataverse. Para incluirla en tu pipeline de CI/CD:
# Exportar solución que incluye plugins
pac solution export --name MiSolucionPlugins --path ./export --managed
# Importar en otro entorno
pac solution import --path ./MiSolucionPlugins_managed.zip
# Publicar cambios
pac solution publish
La solución incluye el assembly y toda su configuración de steps e imágenes. Esto hace el despliegue repetible y automatizable.
Puntos clave
- Usa Filtering Attributes en plugins de Update para evitar ejecuciones innecesarias
- Secure Configuration para credenciales sensibles, nunca en código
- Deshabilitar steps es útil para troubleshooting sin perder configuración
- Actualizar assembly preserva steps e imágenes
- Las soluciones incluyen configuración de plugins para CI/CD