Un subproceso evento es un tipo especial de subproceso porque:
se inicia con un evento no indefinido
se define dentro de otro proceso "padre"
tiene acceso a todos los datos del proceso "padre"
El caso que nos ocupa es un "manejador de errores". Durante la ejecución del proceso se pueden modelar errores por la causa que consideremos necesaria.
Este es un ejemplo muy básico en el que se inicia un proceso que nos permite elegir un número del 1 al 3. Si elegimos el 3, significa "que nos hemos equivocado". Si se da esta circunstancia, el proceso termina con un lanzamiento de error.
Ese error es capturado por el subproceso que está escuchando durante la ejecución de su proceso padre. Eso fuerza la ejecución de la tarea "Informar de elección", un texto simple que nos dice que ese valor "no era" el que debíamos haber elegido.
El proceso se inicia con un formulario que nos permite elegir un número, dice, del 1 al 3. En realidad, cualquier valor es "correcto" siempre que no sea el 3. Al enviar nuestra respuesta no pasa nada más, el proceso termina.
Si examinamos los datos almacenados vemos que, efectivamente, el valor guardado es el número 2. Puesto que no se ha ejecutado ninguna tarea, tampoco vemos en la línea de tiempo más que un mensaje de que "nada hay que mostrar".
Sin embargo, si elegimos el número 3:
Tenemos una tarea por "tomar", un formulario sin datos que únicamente nos informa de que la elección "no es la correcta".
Y los datos del caso, una vez pulsado el botón "terminar", como esperábamos, x==3. En este caso sí vemos en la línea temporal la ejecución de la tarea del subproceso de evento.
Los subprocesos de evento se pueden añadir a nuestro diagrama con el elemento de la paleta que mostramos a la izquierda. Este tipo de símbolo es parecido a una llamada a subproceso solo que se muestra con un borde punteado.
Si pulsamos sobre el "+", se expande y podemos añadirle los elementos que necesitemos:
Como hemos elegido un inicio capturador de error, al colapsar de nuevo, podremos observar esta característica en la esquina superior izquierda.
Pasamos ahora a la configuración del proceso y las tareas.
Senyal
valor - INTEGER
x
feventSubp
Saliente de la compuerta exclusiva.
La expresión a introducir es return (x.valor==3).
O su equivalente return (x.getValor()==3).
La configuración de los eventos de error es muy parecida a la de las señales. Simplemente se escribe un texto que identifique un error concreto.
err001
Fíjate que, con el subproceso seleccionado, no la tarea, no hay propiedades de datos o de ejecución.
Si seleccionas la tarea, entonces sí, verás la variable de negocio "x", y definir el contrato. Puesto que esta tarea no tiene datos que introducir, no hace falta crearlo.
feventSubpX
Cuando le pedimos a UI Designer que nos prepare un formulario, este coloca un widget de texto que accede a la descripción de la tarea. Aprovechamos este elemento escribiendo en Bonita Studio, en la descripción de la tarea, el siguiente texto:
Esta tarea se está ejecutando porque has elegido el número 3
Podemos especificar el error concreto que queremos que captura nuestro subproceso. En principio, si no hiciéramos esto, capturaría cualquier error que se lanzara en el proceso.
Ya lo tienes todo preparado, ejecuta y comprueba que funciona como se ha descrito en la introducción al ejercicicio.