sábado, 6 de octubre de 2012

Usar variables en un proceso de negocio con Activiti

Activiti
Un proceso de negocio en Activiti o en cualquier otro BPMS para ejecutarse es muy probable que necesite información de entrada que usarán las tareas y que también podrán modificar, además es posible que el proceso genere datos de salida como resultado de la ejecución de las tareas.

Vamos a ver un ejemplo de como es esto en Activiti. Para obtener el valor de una variable mientras el proceso aún está en ejecución se puede conseguir con:

Sin embargo, hay que tener en cuenta que una vez finalizado el proceso las variables son descartadas no pudiéndose recuperar de la forma anterior ya que la instancia del proceso ya no existirá con lo que si id no nos servirá. Una vez finalizado el proceso únicamente permanecen en los datos históricos del proceso siempre y cuando el nivel de histórico de datos está indicado como «full» en la configuración de Activiti. La siguiente sentencia nos dará las modificaciones de la variables ordenadas por tiempo de modificación en una lista de elementos HistoricVariableUpdate:

Pero hay que tener en cuenta que activar el nivel de histórico a nivel full puede dar como resultado que en las tablas de histórico se inserten muchos datos lo cual puede afectar al rendimiento. Una solución posible es pasar al proceso una variable que el proceso modificará y en el que recuperaremos los datos una vez haya finalizado. Veamos el ejemplo. Primero el proceso que tomará una decisión en base a un dato de entrada:

En una tarea scriptTask las variables del proceso pueden ser usadas como variables del script, en este script groovy de la tarea si el cliente es VIP se asigna a una variable un descuento de 10. Lo siguiente es el caso de prueba:

El proceso se inicia con rs.startProcessInstanceByKey pasándole al proceso un mapa con la variable cliente que usará el proceso para calcular el descuento y también un mapa, output, donde recogeremos el descuento que calculará el proceso. Finalmente, lo que sería el programa independiente:




Referencia:
Conceptos sobre procesos de negocio (BP, BPM, BPMS, ...)
Procesos de negocio con Activiti
Tratamiento de errores en procesos de negocio con Activiti
Reglas de negocio con Drools y Activiti
Código fuente del ejemplo Usando variables con Activiti