Sei sulla pagina 1di 6

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) execution.getVariable("val1");

// Typed Value API: Get Variable

IntegerValue typedVal2 = execution.getVariableTyped("val2");

Integer val2 = typedVal2.getValue();

Integer diff = val1 - val2;

// Java Object API: Set Variable

execution.setVariable("diff", diff);

// Typed Value API: Set Variable

IntegerValue typedDiff = Variables.integerValue(diff);

execution.setVariable("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: execution.getVariable("input")
execution.setVariable("input", var);

2.2. Activity Behavior


En vez de escribir un JavaDelegate, es posible proporcionar una clase que implemente
la interfaz.

org.camunda.bpm.engine.bpm.delegate.ActivityExecution

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
org.camunda.bpm.engine.delegate.Expression, sin tener en cuenta el tipo del valor
declarado.
Ejemplo.

<serviceTask id="javaService"

name="Java service invocation"

camunda:class="org.camunda.bpm.examples.bpmn.servicetask.ToUpperCaseFi
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="org.camunda.bpm.examples.bpmn.servicetask.ReverseString
sFieldInjected">

<extensionElements>

<camunda:field name="text1">

<camunda:expression>${genderBean.getGenderString(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) text1.getValue(execution);

execution.setVariable("var1", new
StringBuffer(value1).reverse().toString());

String value2 = (String) text2.getValue(execution);

execution.setVariable("var2", new
StringBuffer(value2).reverse().toString());

}
}

Tambin puede establecerse las expresiones como un atributo.


Ejemplo:

<camunda:field name="text1"
expression="${genderBean.getGenderString(gender)}" />

2.4. Delegate Variable Mapping

Completar

2.5. Listener de ejecucin

3. Api del motor de procesos.


Obtener el motor de procesos.

BpmPlatform.getProcessEngineService().getProcessEngine("default"
)

Acceder a los servicios del motor del proceso de cdigo de delegacin

TaskService taskService =
execution.getProcessEngineServices().taskService();

execution.getId()

runtimeService.getVariable(<process_id,<key>);

Crear una instancia de procesos.

ProcessInstance pi =
runtimeService.startProcessInstanceByKey("forkJoin");

Consultar si una instancia esta terminada


pi.isEnded
Obtener el id de una instancia de proceso

pi.getId();

pi.getProcessInstanceId();

Consultar un conjunto de tareas.

//Id del Proceso


TaskQuery query =
taskService.createTaskQuery().processInstanceId(<processId>).orderByTa
skName().asc();

List<Task> tasks = query.list();

//Grupo

List<Task> tasks =
taskService.createTaskQuery().taskCandidateGroup("management").singleR
esult();

Completar una tarea de usuario.

taskService.complete(task.getId,<variables>)

Potrebbero piacerti anche