Soporte de Tablas de Decisión en el Rules Engine
Disponible a partir de la versión 3.0.0
Desde hace ya tiempo es posible crear reglas de negocio en la plataforma gracias al módulo Motor de Reglas.
En este Q1 hemos metido varias mejoras significativas en este módulo, cómo el soporte de Tablas de Decisión, un nuevo wrapper para poder ejecutar queries sobre ontologías de manera muy sencilla dentro de la regla y la posibilidad de cargar un JSON desde un fichero en la parte de testeo de las reglas.
Soporte de Tablas de Decisión
Hasta ahora sólo era posible la creación de reglas definidas en lenguaje DRL (Drools Rule Language), a partir de esta versión de Plataforma también se podrán definir reglas basadas en DDT (Drools Decision Tables).
Las Tablas de Decisión en Drools tienen que estar definidas en formato Excel (XLS, XLSX), dónde cada fila es una regla y cada columna en esa fila es una condición o acción para esa regla. Idealmente, las reglas se crean sin tener en cuenta el orden de las filas, lo que facilita su mantenimiento.
Cómo crear una regla basada en DDT
Se recomienda leer la documentación referente a la semántica de las Tablas de Decisión en Drools. Puede consultarlo aquí.
Accede a la opción de menú Development > My Rules y accederás a tu dominio, dentro de tu dominio es dónde podrás encontrar tus reglas. Por defecto estará arrancado, si lo paras tus reglas definidas sobre ontologías no serán ejecutadas automáticamente.
Seleccionando el icono del ojo, acceder al listado de tus reglas dónde si seleccionamos el botón Create accederemos al formulario para la creación de las reglas:
Se ha añadido un check Load Decision Table y al seleccionarlo aparecerá la opción para seleccionar el fichero Excel de nuestro equipo que queremos usar como Tabla de Decisión.
En el caso de que haya problemas con la sintaxis dentro de la tabla, aparecerá un error a la hora de crear la regla.
Para que la regla funcione hay que tener las siguientes consideraciones:
RuleSet: tiene que ser com.minsait.onesait.platform.rulesengine
Import: siempre tiene que importarse la clase com.minsait.onesait.platform.rulesengine.model.OntologyJsonWrapper
Variables: siempre tiene que definirse la variable global output que será del tipo OntologyJsonWrapper ya que va a ser el objeto de salida de la regla.
Condition: en las condiciones siempre tiene que estar definido el objeto input que será del tipo OntologyJsonWrapper ya que va a ser nuestro JSON de entrada a la regla.
Igual que para las reglas definidas en DRL tenemos disponibles los siguientes métodos para la clase OntologyJsonWrapper:
getProperty(“property_name”) para obtener el valor de una propiedad
setProperty(“property_name”, value) para ponerle un valor a una propiedad
setRootNode(“root_node“) elemento raíz de la ontología destino, necesario para que funciona correctamente las reglas de tipo Ontología
removeProperty(“property_name“) para eliminar una propiedad
updateProperty(“property_name“, value) para actualizar una propiedad
copyInputToOutput() para copiar el objeto input en el objeto output
printValues() para pintar en los logs del RulesEngine el valor del objeto
toJson() para convertir el objeto en formato Json
Estas funciones pueden usarse tanto en las condiciones como en las acciones, vamos a analizar una tabla de ejemplo:
En este caso, cuando la propiedad currentSalary del objeto input sea menor que 1000, entonces el objeto de salida quedaría así:
{
"roles": {
"name": "Junior Role",
"role": "junior"
}
}
Mientras que cuando currentSalary sea menor de 2000 tendríamos la siguiente salida:
{
"roles": {
"name": "Consultant Role",
"role": "consultant"
}
}
Gestión de las reglas
Una vez creada la regla definida sobre una DDT podremos gestionarla como una regla definida en DRL. Si accedemos al listado de nuestra reglas:
Al seleccionar una regla definida sobre una Tabla de Decisión, nos aparecerán distintas opciones:
Test: nos dará la posibilidad de testear la regla, dado un JSON de entrada nos dará el JSON de salida resultante de ejecutar la regla.
Edit: para editar la regla será necesario cargar una nueva Tabla de Decisión utilizando el botón Load Decision Table
Download: permite descargar el fichero Excel de la regla asociado.
Además, si hacemos clic con el botón derecho del ratón sobre la regla en el listado aparecerán las opciones:
Disable: desactiva la regla, no se ejecuta
Edit: te mandará a la pantalla de edición de la regla
Remove: elimina la regla.