Documente Academic
Documente Profesional
Documente Cultură
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:
historyService.createHistoricDetailQuery().variableUpdates().orderByVariableName().
orderByTime().list();
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:
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL"
xmlns:activiti="http://activiti.org/bpmn"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.omg.org/spec/BPMN/20100524/MODEL
http://www.omg.org/spec/BPMN/2.0/20100501/BPMN20.xsd"
targetNamespace="HelloWorldActiviti">
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:
package es.com.blogspot.elblogdepicodev.activiti;
import java.math.BigDecimal;
import java.util.HashMap;
import java.util.Map;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.test.ActivitiRule;
import org.activiti.engine.test.Deployment;
import org.junit.Assert;
import org.junit.Rule;
import org.junit.Test;
import es.com.blogspot.elblogdepicodev.activiti.misc.Cliente;
import es.com.blogspot.elblogdepicodev.activiti.misc.Cliente.Tipo;
@Rule
public ActivitiRule activitiRule = new ActivitiRule("activiti-h2.cfg.xml");
@Test
@Deployment(resources = "bpmn/Variables.bpmn20.xml")
public void testNormal() {
Cliente cliente = new Cliente(Tipo.NORMAL);
Map output = new HashMap();
RuntimeService rs = activitiRule.getRuntimeService();
rs.startProcessInstanceByKey("variables", variables);
@Test
@Deployment(resources = "bpmn/Variables.bpmn20.xml")
public void testVIP() {
Cliente cliente = new Cliente(Tipo.VIP);
Map output = new HashMap();
RuntimeService rs = activitiRule.getRuntimeService();
rs.startProcessInstanceByKey("variables", variables);
import java.util.HashMap;
import java.util.Map;
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngineConfiguration;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.runtime.ProcessInstance;
import org.h2.tools.Server;
import es.com.blogspot.elblogdepicodev.activiti.misc.Cliente;
import es.com.blogspot.elblogdepicodev.activiti.misc.Cliente.Tipo;
ProcessEngines.init();
ProcessEngine processEngine =
ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("activiti-
mysql.cfg.xml").buildProcessEngine();
RuntimeService runtimeService =
processEngine.getRuntimeService();
RepositoryService repositoryService =
processEngine.getRepositoryService();
repositoryService.createDeployment().addClasspathResource("bpmn/Variables.bpmn20.xm
l").deploy();
ProcessInstance pi =
runtimeService.startProcessInstanceByKey("variables", variables);