Control de excepciones.
La clase RuleEngine tiene la propiedad CompensationHandlerInfo, que a su vez tiene dos propiedades: CompensationHandler y UserData. La propiedad CompensationHandler es de tipo RuleEngineCompensationHandler y la propiedad UserData es de tipo Object. La definición de RuleEngineCompensationHandler es la siguiente:
public delegate bool RuleEngineCompensationHandler(
Exception ex,
object userData
);
El consumidor del motor de reglas especifica el controlador y los datos de usuario en el motor de reglas mediante la propiedad CompensationHandlerInfo de la clase RuleEngine . El controlador debe tener la misma firma que el delegado RuleEngineCompensationHandler . Si se produce una excepción de tiempo de ejecución, el motor llama al controlador, y le pasa la excepción y los datos de usuario predefinidos como parámetros. Si el controlador devuelve true
, el motor de reglas continúa procesando. De lo contrario, el motor de reglas anula el procesamiento y devuelve la excepción original al usuario. Como puede ver, puede usar este mecanismo de control de excepciones solo si invoca la directiva mediante el método RuleEngine.Execute .
Si usa el método Policy.Execute para ejecutar una directiva, deberá usar un bloque try-catch para detectar las excepciones generadas por el motor de reglas mientras ejecuta la directiva.
Si usa la forma Reglas de llamada para ejecutar una directiva, use el bloque Catch Exception para la forma Ámbito para detectar una excepción generada por el motor de reglas mientras ejecuta la directiva.