Library that allows you to connect to DecisionSense.io
$ dotnet add package DecisionSense.ClientCon Decision Sense, tienes a tu disposición una potente librería diseñada específicamente para facilitar la gestión y resolución de las complejas reglas de negocio. Desarrollada en .NET/.NET Core, esta herramienta te permite integrar de manera sencilla y efectiva todas las operaciones relacionadas con el manejo y la solución de estas reglas.
Solo tiene que agregar al proyecto el paquete DecisionSense.Client desde nuget.
Los valores necesarios para la configuración se los obtiene en la apliacación Decision Sense (www.decisionsense.io) en la sección Aplicaciones.
Nota La librería debe ser configurada una sola vez y puede hacerse en cualquier lugar, ser recomienda hacerlo al inicio de la aplicación como se muestra a continuación.
Para el ejemplo la configuración la agregamos en el archivo program.cs:
using OD.RuleEngine.Client.Core;
using OD.RuleEngine.Components.Client.Shared.Dto;
HttpExternalApi.SetConfigurationAsync(new SetUpConfigDto
{
ClientId = "<ClientId>",
ClientSecret = "<ClientSecret>",
TenantId = "<TenantId>",
});
Es fundamental definir los elementos que utilizaremos para crear y evaluar nuestras reglas. Como ejemplo, vamos a crear una regla que verifique si una persona es Mayor de Edad. Para lograr esto en nuestro proyecto, necesitaremos una clase que contenga los atributos necesarios para determinar si una persona cumple con estas características, como nombres, edad, fecha de nacimiento, entre otros.
En este caso práctico, abordaremos la situación de la siguiente manera:
Importante En nuestro proyecto, si las clases y sus atributos tienen nombres diferentes a los que necesitamos para nuestra entidad y propiedades, podemos modificarlos utilizando los atributos RuleEntity y RuleField. Como ilustración, consideremos el siguiente ejemplo:
using OD.RuleEngine.Client.Attributes;
[RuleEntity("CLIENTE")]
public class Client
{
[RuleField(code:"NOMBRES", name:"NOMBRES", description:"LOS NOMBRES DEL CLIENTE")]
public string Names { get; set; }
[RuleField(code: "EDAD", name:"EDAD", description: "LA EDAD DEL CLIENTE")]
public string Age { get; set; }
}
Los siguientes campos pueden ser configurados al crear entidades o propiedades:
Consideraciones:
En el código anterior se observa la clase Client. Si no se especifica un código se toma el nombre de la clase o del campo de forma predeterminada.
Agregamos la invocación dentro de un bloque Try/Catch para detectar excepciones.
Para el ejemplo la configuración la agregamos en el archivo program.cs:
try
{
Task.Run(async () =>
{
await EntityHelper.CreateEntities(typeof(Client).Assembly);
}).Wait();
}
catch(Exception ex)
{
app.Logger.LogError(ex, "Se produjo un error al inicializar las entidades creadas.");
throw;
}
Nota
Con las entidades y propiedades ya listas, en el aplicativo Decision Sense se debe crear la regla para lo cual se lo realiza siguiendo los pasos de: Creación Regla
Con la regla creada y publicada pasamos a realizar la evaluación:
var itemRule = new Client
{
Names = "Decision Sense",
Age = "25",
};
var input = new List<EvaluateRuleInput> {
new EvaluateRuleInput
{
Id=16,
TraceId= Guid.NewGuid(),
Values= new List<object> { itemRule }
}
};
var evaluationResult = await EvaluatorHelper.EvaluateRules(input);
{
"CLIENTE": {
"NOMBRES": "Decision Sense",
"EDAD": 25
}
}
Con las entidades y propiedades ya listas, pasamos a realizar la evaluación:
var itemTable = new Client
{
Names = "Decision Sense",
Age = "25",
};
var inputTable = new EvaluateDecisionTableInput
{
Id = 7,
TraceId= Guid.NewGuid(),
Values = new List<object> { itemTable }
};
var evaluationResult = await EvaluatorHelper.EvaluateDecisionTable(inputTable, "a74fba4a-1f39-ccd2-245a-3a11c7852dd8");
{
"CLIENTE": {
"NOMBRES": "Decision Sense",
"EDAD": 25
}
}
Nota Los métodos proporcionados por EvaluatorHelper para evaluar reglas o tablas de decisión pueden recibir: