Soporte de Queries en el Rules Engine

ES | EN

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 Rules Engine

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 Queries

Para la ejecución de queries sobre Ontologías en la regla, se utiliza una clase Wrapper (QueryWrapper), este Wrapper tiene que ser importado en la regla para poder ser usado.

Para poder operar con esta nueva clase hay que tener en cuenta que la conexión se realizará a través de un Digital Client, por lo que solo las ontologías asociados al Digital Client utilizado podrán ser consultadas. Para crear un objeto QueryWrapper necesitamos indicar:

  • Ontología que queremos consultar

  • Query a ejecutar

  • Digital Client en el que tenemos la Ontología asociada

  • Token del Digital Client

  • URL de conexión para especificar el entorno en el que se está trabajando

1 QueryWrapper queryWrapper = new QueryWrapper(<ontologyName>, <query>, <digitalClientName>, <token>, <URL_conection>);

En el caso de que el Digital Client no tenga permisos sobre la Ontología consultada o que la Query de error, la regla no se ejecutará

Una vez creado el objeto queryWrapper procedemos a ejecutar la query, para ello basta con llamar al método run()

1 queryWrapper.run();

Una vez ejecutada la query, en el parámetro queryResult del objeto queryWrapper tendremos el resultado de la Query, que será una lista de OntologyJsonWrapper.

1 List<OntologyJsonWrapper> result = queryWrapper.getQueryResult();

Ejemplo regla definida en DRL

Vamos a analizar el siguiente ejemplo:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 package com.minsait.onesait.platform.rulesengine; import com.minsait.onesait.platform.rulesengine.model.OntologyJsonWrapper; import com.minsait.onesait.platform.rulesengine.model.QueryWrapper; global com.minsait.onesait.platform.rulesengine.model.OntologyJsonWrapper output; dialect "mvel" function Boolean existEmployee(Object id){ QueryWrapper queryWrapper = new QueryWrapper("employee", "select * from employee as c where c.employee.id = " + Integer.parseInt(id.toString()), "client", "917069adcdf94d96832e711acc9c6631", "http://localhost:19000"); queryWrapper.run(); return !queryWrapper.getQueryResult().isEmpty(); } rule "Create new employee" when input: OntologyJsonWrapper() eval( !existEmployee(input.getProperty("id"))) then output.setRootNode("employee") output.setProperty("id", input.getProperty("id")); output.setProperty("rol", "Consultant"); end
  • Línea 2 y 3: se importan los Wrappers

  • Línea 4: se define la variable global output

  • Línea 8: se define la función existEmployee, donde se lanza una query sobre la ontología employee para consultar si existe un empleado con un determinado identificador

  • Línea 18: se evalúa el resultado de la función existEmployee para el parámetro id de la variable input. En el caso de que no exista el empleado seleccionado, se ejecuta la regla y se crea el empleado en la ontología destino.

Ejemplo regla definida en DDT

También se puede utilizar este nuevo Wrapper en las Tablas de Decisión. A continuación, vemos el mismo ejemplo anterior pero esta vez definido con una Tabla de Decisión: