Motor de procesos
1. Variables del proceso
Variables pueden ser accedidos por un proceso en tiempo de ejecucin.
mbitos de Visibilidad
Toda entidad que puede tener variables se les conoce como mbitos de
variable.
El estado en tiempo de ejecucin de una instancia de proceso se representa como
un rbol de ejecuciones.
Una variable que se define en un mbito padre puede ser accedido en todo mbito
hijo a menos que un mbito hijo defina una variable del mismo nombre.
Establecer y recuperar variables
El motor de procesos ofrece un API que permite establecer variables de objetos
java y para recuperarlos en la misma forma. Internamente el motor persiste las
variables en una base de datos y por consiguiente aplica serializacin.
Para recuperar el valor serializado se puede hacer de la siguiente forma.
Java Object Value API: variables son representadas como objeto java.
Typed Value AP.-variables son envueltas en valores tipados.
Ejemplo:
// Java Object API: Get Variable
Integer val1 = (Integer) [Link]("val1");
// Typed Value API: Get Variable
IntegerValue typedVal2 = [Link]("val2");
Integer val2 = [Link]();
Integer diff = val1 - val2;
// Java Object API: Set Variable
[Link]("diff", diff);
// Typed Value API: Set Variable
IntegerValue typedDiff = [Link](diff);
[Link]("diff", typedDiff);
2. Delegacin de cdigo
Delegacin de cdigo permite ejecutar cdigo java externo, scripts o evaluar expresiones
cuando ciertos eventos ocurren durante la ejecucin del cdigo.
Formas de cdigo de delegacin:
Java Delegate (adjuntados a tareas de servicio).
Mapeo de variables delegadas (adjuntadas a call activity).
Listener de ejecucin.
Listener de tareas.
2.1. Java Delegate
Para implementar una clase que pueda ser usada durante el proceso de ejecucin.
Paso 1. Implementar la siguiente interface
JavaDelegate
Paso 2. Definir el mtodo:
public void execute(DelegateExecution execution)
Informacin sobre la instancia del proceso pueden ser accedidos atravez del objeto
DelegateExecution.
Ejemplo: [Link]("input")
[Link]("input", var);
2.2. Activity Behavior
En vez de escribir un JavaDelegate, es posible proporcionar una clase que implemente
la interfaz.
[Link]
Luego se puede tener acceso a la mejor ActivityExecution. Solo se recomienda para
casos de uso avanzado.
2.3. Field Inyection
Permite la inyeccin de valores en campos de las clases delegadas.
Tipos de inyeccin:
Valores Fijos
Se realizan a travez de los mtodos setter.
El tipo del atributo en la clase debe ser
[Link], sin tener en cuenta el tipo del valor
declarado.
Ejemplo.
<serviceTask id="javaService"
name="Java service invocation"
camunda:class="[Link]
eldInjected">
<extensionElements>
<camunda:field name="text" stringValue="Hello World" />
</extensionElements>
</serviceTask>
Valores Dinmicos
Emplean expresiones que pueden ser: variables del proceso, CDI o Spring beans.
Ejemplo:
<serviceTask id="javaService" name="Java service invocation"
camunda:class="[Link]
sFieldInjected">
<extensionElements>
<camunda:field name="text1">
<camunda:expression>${[Link](gender)}</camunda:exp
ression>
</camunda:field>
<camunda:field name="text2">
<camunda:expression>Hello ${gender == 'male' ? 'Mr.' :
'Mrs.'} ${name}</camunda:expression>
</camunda:field>
</extensionElements>
</serviceTask>
Clase Java
public class ReverseStringsFieldInjected implements JavaDelegate {
private Expression text1;
private Expression text2;
public void execute(DelegateExecution execution) {
String value1 = (String) [Link](execution);
[Link]("var1", new
StringBuffer(value1).reverse().toString());
String value2 = (String) [Link](execution);
[Link]("var2", new
StringBuffer(value2).reverse().toString());
}
}
Tambin puede establecerse las expresiones como un atributo.
Ejemplo:
<camunda:field name="text1"
expression="${[Link](gender)}" />
2.4. Delegate Variable Mapping
Completar
2.5. Listener de ejecucin
3. Api del motor de procesos.
Obtener el motor de procesos.
[Link]().getProcessEngine("default"
)
Acceder a los servicios del motor del proceso de cdigo de delegacin
TaskService taskService =
[Link]().taskService();
[Link]()
[Link](<process_id,<key>);
Crear una instancia de procesos.
ProcessInstance pi =
[Link]("forkJoin");
Consultar si una instancia esta terminada
[Link]
Obtener el id de una instancia de proceso
[Link]();
[Link]();
Consultar un conjunto de tareas.
//Id del Proceso
TaskQuery query =
[Link]().processInstanceId(<processId>).orderByTa
skName().asc();
List<Task> tasks = [Link]();
//Grupo
List<Task> tasks =
[Link]().taskCandidateGroup("management").singleR
esult();
Completar una tarea de usuario.
[Link]([Link],<variables>)