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.