Más o menos lo mismo que en el anterior PP09 se puede hacer con un evento interruptor de tarea. Esta solución no es tan flexible como la anterior, pero es igualmente válida, y necesaria en ocasiones.
La idea es que un usuario inicia una reclamación que es recibida por nuestro sistema. La revisión de esa reclamación es encargada al proceso antes mencionado, que decide si responde —la reclamación es aceptada— o la desestima "por datos insuficientes".
La novedad aquí, para nosotros, es que esa condición de salida se maneja con un evento final de lanzamiento de error. Ese lanzamiento es capturado por "procesar reclamación", que se interrumpe y deriva el flujo hacia "informar desestimiento".
En este caso tenemos un proceso con una tarea de llamada a actividad: "procesar reclamación". Esta tarea llama al proceso RESPUESTA A RECLAMACIÓN.
El proceso se inicia tras rellenar el usuario un formulario de reclamaciones.
A continuación, se nos informa de que tenemos una tarea por realizar.
Si respondemos positivamente, es decir, no marcamos el check de desestimación y escribimos algo en la respuesta, el proceso termina.
Sin embargo, si hubiéramos marcado ese check (tienes que refrescar la lista de tareas):
Y los datos, evidentemente, serán otros.
Este es el proceso principal, por donde iniciaremos la ejecución. Se supone que, entre otras cosas, Bonita ya ha definido actores por lo que no nos preocupamos de eso —hemos aprovechado el esqueleto que nos da el programa al abrir nuevo diagrama—.
Reclamacion
quien STRING
reclama STRING
respuesta STRING
desestimada BOOLEAN
vnreclama
Definida desde el objeto de negocio com.company.model.Reclama
En este caso, vamos a proporcionar datos iniciales al proceso (instanciación) por lo que necesitamos un contrato de instanciación —con el pool RECLAMACIÓN seleccionado—. Solo necesitamos quien y reclama.
No definiremos formulario de instanciación, dejamos que Bonita lo genere cada vez que ejecutamos.
Este es el proceso que se llama desde la tarea procesar reclamación.
En Bonita, cuando se crea un nuevo pool, la información de actores no está definida —cosa que sí ocurre con el primero que nos ofrece al crear un diagrama—. El nombre puede ser cualquiera, aquí proponemos Empleado. No te olvides de marcarlo como iniciador.
Mapeo a grupo /acme. La autenticación debe hacerla walter.bates.
vnrespreclam
Definida desde el objeto de negocio com.company.model.Reclamacion.
Este paso es el más importante. Se trata de definir qué datos se transmiten desde el proceso principal al llamado. Para eso tenemos que volver al proceso RECLAMACIÓN y a la tarea procesar reclamación.
Establecemos a qué proceso llama la tarea y pasamos a configurar los datos para enviar.
Haciéndolo fácil, como las variables de negocio de ambos procesos tiene el mismo modelo de datos de negocio, enviaremos y recibiremos esas variables al completo.
Enviamos vnreclama y sus datos se copiarán* en vnrespreclam.
Necesitas seleccionar "asignado a dato".
*El siguiente paso sería configurar la acción contraria, recibir los datos del proceso RESPUESTA A RECLAMACIÓN cuando termine. Pero cuando enviamos variables de negocio completas Bonita trabaja por referencia, y los datos se actualizan en la variable de negocio de orgen. Por eso, la expresión "los datos se copiarán en..." no es correcta, pero lo hemos dejado así para simplificar la explicación.
Si que habría que definir los "datos a recibir" si trabajáramos con variables temporales de proceso, no de negocio.
Volviendo al proceso llamado y a la tarea decidir sobre reclamación, escribimos este texto que se mostrará automáticamente en el formulario.
Recibida la reclamación, se puede responder —lo que implica aceptarla— o desestimarla por datos insuficientes.
No hemos creado senda en este pool, por lo que la tarea no sabe qué actor utilizar, debemos dárselo nosotros.
Solo utilizamos respuesta y desestimada.
fDecidir
Al generar un formulario, Bonita mostrará en él, cuando se ejecute, los valores ya almacenados en la variable de negocio del proceso.
Debemos definir un script para la condición de este flujo.
vnrespreclam.desestimada
Este atributo es un booleano, el script devolverá el valor true o false almacenado en ella.
La expresión anterior es intercambiable por
return vnrespreclam.isDesestimada()
Vale cualquier texto; nosotros pondremos:
err001
Este evento se encuentra en el proceso principal, adjunto a la tarea procesar reclamación. La intención es que detenga esta tarea cuando se reciba el código de error establecido, el mismo de antes_
err001
Simplemente generarlo y guardarlo sin modificaciones.
La función del evento adjunto interruptor de error es llevarnos a la tarea informar desestimiento y mostrar un formulario informativo. Como no vamos a introducir nuevos datos ni a mostrar nada de la variable de negocio, no hace falta contrato.
El texto que se va a mostrar es el que introduciremos en la descripción de la tarea.
Le informamos de que su reclamación ha sido desestimada por datos insuficientes. Inicie una nueva reclamación si lo desea. O si se atreve.
Ejecuta dos veces, una aceptando y otra rechazando la reclamación, y comprueba en los casos archivados los datos almacenados.