Ejercicios Bonita
Ejercicios Bonita
Ejercicios Bonita
Tabla de contenidos
Prefacio..............................................................................................................................................................................................3
1. Ejercicio: Modelado de proceso básico.......................................................................................................................................4
2. Ejercicio: Añadiendo datos y especificando contratos................................................................................................................7
3. Ejercicio: Proceso con una puerta exclusiva.............................................................................................................................13
4. Ejercicio: Creando formularios..................................................................................................................................................16
5. Ejercicio: Manejo de Actores....................................................................................................................................................23
6. Ejercicio: Conector de notificación...........................................................................................................................................25
2
1. Ejercicio: Modelado de proceso básico
Objetivo
El objetivo de este ejercicio es crear una primera versión básica del diagrama de proceso de solicitud de vacaciones.
En esta fase el proceso es ejecutable, pero tiene un valor limitado desde el punto de vista de negocio ya que no dispone aún de
formularios o datos. Lo extenderemos en los ejercicios siguientes.
Instrucciones
Para hacer el ejercicio, crea un diagrama "Diagrama Solicitud de Vacaciones" en versión 1.0 que contenga un proceso
"Solicitud de Vacaciones" en versión 1.0.
Haz click en cualquier parte del fondo del diseño del diagrama pero fuera del pool (esto seleccionará el diagrama).
Introduce "Diagrama Solicitud de Vacaciones" como nombre de diagrama y "Solicitud de Vacaciones" como nombre de
proceso.
Selecciona la tarea humana, y arrastra el icono de evento (A) desde el menú contextual y selecciona el evento de terminación
(B).
8. Guarda el proceso.
9. Ejecuta el proceso.
Tu navegador debería abrir y mostrar un formulario automáticamente generado que inicie el nuevo caso. Haz click en Inicio
para enviar el formulario.
Serás redirigido al listado de tareas dentro del Bonita Portal. Selecciona la tarea "Validar solicitud" y haz click en el botón
"Hacer" de arriba a la derecha.
Envía el formulario de la tarea "Validar solicitud" para completar el caso.
2. Ejercicio: Añadiendo datos y
especificando contratos
Objetivo
El objetivo de este ejercicio es continuar la implementación del proceso de Solicitud de Vacaciones:
2. especificando contratos para la instanciación del proceso y para las tareas humanas
Una vez completado, el proceso será ejecutado con formularios automáticamente generados.
Warning
Es obligatorio poner atención en el caso y en la sintaxis de los nombres técnicos facilitados en las instrucciones.
No hacerlo podría producir errores.
Instrucciones generales
Duplica el diagrama de procesos del ejercicio anterior para crear la versión 2.0.
Añade un contrato a la instanciación del proceso con una nueva entrada "solicitudContrato" de tipo "complex" que contenga los
siguientes elementos:
• diaInicio (Date)
• numDias (Integer)
import org.bonitasoft.engine.api.ProcessAPI;
import org.bonitasoft.engine.bpm.process.ProcessInstance;
import com.company.model.SolicitudVacaciones;
7
Ejercicio: Añadiendo datos y especificando contratos
return nuevaSol;
• aprobado (Boolean)
Añade una operación en la tarea "Validar Solicitud" para enlazar el campo "aprobado" con la "solicitud" BDM con el valor
devuelto por el contrato.
Haz click en "Añadir" (A) en la "Lista de Objetos de Negocio" y nombra al objeto "SolicitudVacaciones" (B) (éste es un
nombre técnico así que no debería contener espacios o caracteres especiales).
Selecciona el Pool del proceso y navega hasta la pestaña "Datos / Variables de proceso".
Selecciona la Pool del proceso y navega hasta la pestaña "Ejecución / Contrato / Entradas".
Propiedad Valor
Nombre comienzoSolicitudFuturo
Expresión import java.time.LocalDate
return solicitudContrato.diaInicio.compareTo(LocalDate.now()) > 0;
Mensaje de error La fecha de comienzo de las vacaciones debe comenzar en el futuro.
Propiedad Valor
Nombre alMenosUnDia
Expresión return solicitudContrato.numDias > 0;
Mensaje de error La cuenta de días debe ser mayor que cero.
Selecciona la Pool del proceso y navega hasta la pestaña "Datos / Variables de negocio".
Haz click en el icono del "Lápiz" junto al campo "Valor predeterminado" para abrir el editor de expresiones.
import org.bonitasoft.engine.api.ProcessAPI;
import org.bonitasoft.engine.bpm.process.ProcessInstance;
import com.company.model.SolicitudVacaciones;
return nuevaSol;
Con la tarea "Validar solicitud" seleccionada, navega hasta la pestaña "Ejecución / Operaciones".
Haz click en el link "Toma valor de" y cambia al tipo de operador "Use un método Java".
8. Guarda el proceso.
Ejecuta el proceso y usa el formulario automáticamente generado para probar tus restricciones.
Consejos:
• para la entrada "aprobado", introduce un valor booleano: "true" ó "false" (cualquier otro valor será resuelto como "false").
3. Ejercicio: Proceso con una puerta
exclusiva
Objetivo
El objetivo de este ejercicio es extender el proceso existente añadiendo una validación dinámica a la solicitud de vacaciones.
Para alcanzar dicho objetivo usaremos una compuerta exclusiva que derivará en dos caminos distintos: el primero cuando la
solicitud se acepte, y la otra se rechace.
Instrucciones
Duplica el diagrama de proceso del ejercicio anterior para crear la versión 3.0.
Modifica el diagrama para añadir los siguientes elementos después de la tarea "Validar Solicitud":
Configura las transiciones salientes de la puerta exclusiva para que puedan controlar dinámicamente el flujo basándose en los
datos del proceso.
3. Añade una puerta exclusiva llamada "¿Aceptado?" seguida de la tarea humana "Validar Solicitud".
Selecciona la tarea "Validar Solicitud", pincha y arrastra del icono de compuerta del menú contextual.
Cuando hayas creado la compuerta, utiliza el icono "herramientas"(1) para modificar el tipo a "Exclusiva"(2).
13
Ejercicio: Proceso con una puerta exclusiva
4. Crea una tarea de servicio llamada "Notificar aceptación solicitud" después de la compuerta.
5. Añade un evento de terminación llamado "Fin - Solicitud aceptada" seguida de la recién creada tarea automática.
6. Crea una tarea de servicio llamada "Notificar rechazo de solicitud" después de la compuerta.
7. Añade un evento de terminación llamado "Fin - Solicitud rechazada" seguida de la recién creada tarea automática.
La transición que conecta con "Notificar aceptación solicitud" deberá llamarse "Si" y la otra "No".
9. Configura la condicion en la transicion "Si" usando el atributo "aprobado" del BDM "solicitud".
Selecciona el flujo y haz click en el icono del "lápiz" junto al selector de "Condición" para abrir el editor de expresiones.
En el editor de expresiones, selecciona "Java" como tipo de expresión, selecciona la variable "solicitud" y el método "is-
Aprobado".
Cuando las condiciones de los flujos estén definidas, podrás validar el diagrama. Para ello, navega hasta la pestaña "Estado
de validación" y haz click en "Refrescar".
13. Ejecuta varias veces el proceso para comprobar los distintos caminos.
Aviso: no hagas click varias veces en el botón "Ejecutar", esto redesplegará el proceso y limpiará el historico. Para crear una
segunda instancia de proceso, deberás navegar por el Bonita Portal.
Abre el Portal con el botón con dicho nombre en la barra de iconos superior o desde el link de la esquina superior derecha
del entorno web:
Después, navega al menú "Procesos" y selecciona la definición de proceso "Solicitud de Vacaciones" con versión 3.0 y haz
click en "Iniciar".
14. Comprueba que el proceso se ha ejecutado correctamente desde la interfaz de administración del Portal.
Navega hasta el menú "BPM / Casos"(A) luego, cambia a la pestaña "Casos Archivados"(B) y haz click en el link "..." en la
columna de acciones (C) para ver los detalles del caso.
Instrucciones
Duplica el diagrama de proceso del ejercicio anterior para crear la versión 4.0.
• Un formulario de tarea "Validar Solicitud de vacaciones" que muestre las variables "diaInicio" y "numDias" en solo lectura
y permita definir la variable "aprobado".
Esto abrirá el UI Designer en un navegador con un formulario automáticamente generado desde el contrato de instanciación.
3. Renombra el formulario.
Usa el campo de texto de arriba de la pantalla para renombrar el formulario con el nombre "rellenarSolicitud" (éste es un
nombre técnico así que no debería contener espacios ni caracteres especiales).
Arrastra y suelta un widget de "Form container" desde la paleta de widgets de la izquierda en una nueva fila debajo del
widget "Solicitud contrato".
Consejo: Una zona de líneas discontínuas te permiten insertar una nueva fila cuando te sitúas en la separación entre dos
widgets.
16
Ejercicio: Creando formularios
El widget "Form container" permite validar el contenido intruducido en el formulario (campos requeridos y formato de los
campos).
Selecciona el widget "Día inicio", arrastra y suéltalo dentro del widget ""Form container".
Repite la operación para los widgets "Num días" y "Submit", añadiendo nuevas filas.
Una vez los widgets estén agrupados dentro del Contenedor de formularios, selecciona y elimina las filas vacías.
Consejo: Mantén el ratón en la barra gris situada a la izquierda de una fila (A) para mostrar las acciones incluyendo la de
eliminar (B).
Selecciona el widget "Title" con texto "Solicitud Contrato" y edita las siguientes propiedades:
Propiedad Valor
Texto Rellenar una nueva Solicitud de Vacaciones
Nivel de título Nivel 2
Alineación Centrado
Propiedad Valor
Requerido Sí
Etiqueta Número de días
Placeholder Número de días de vacaciones
Valor mínimo * 1
9. Limpia los valores iniciales del formulario(esto enseñará los placeholders en tiempo de ejecución)
Haz click en el icono de "lápiz" para la variable de Nombre "formInput" situada en el panel inferior de la pantalla.
{
"solicitudContrato" : {
"diaInicio" : null,
"numDias" : null
}
}
10. Añade una variable para manejar potenciales errores al envío del formulario
Establece el nombre de la variable como "error", deja su tipo como "String" y su valor vacío. Haz click en "Guardar".
Propiedad Valor
Etiqueta Enviar
Valor de la error
respuesta fallida
Asignando a la propiedad "Valor de la respuesta fallida" la variable "error" permitirá recibir los detalles del error (si los
hubiera).
Introduce el siguiente contenido en el campo de texto que acaba de aparecer (esto muestra el widget sólo cuando haya un error):
error == null
• el botón "Enviar" debería estar desactivado (esto se debe a la validación proporcionada por el widget "form container")
Usa la vista previa para comprobar la validación de los campos del formulario.
Nota: el formulario no se puede enviar desde el modo de vista previa aunque sea válido.
14.Guarda el formulario
En el Studio, selecciona la tarea "Validar solicitud" y navega hasta la pestaña "Ejecución / Formulario".
16.Renombra el formulario
Haz click en el botón "Crear una nueva vairable" en la sección inferior de "Variables" en la pantalla.
Propiedad Valor
Nombre solicitud
Tipo External API
API URL ../{{context.solicitud_ref.link}}
Nota: aquí, estamos llamando al API REST de Bonita para recuperar nuestra variable de negocio "solicitud" BDM. Usamos
la variable "context" que proporciona enlaces a las variables de la instancia de proceso incluyendo nuestra solicitud de la
forma "solicitud_ref". Podemos recuperar la solicitud gracias al atributo "link" que nos proporciona la URL necesaria para
recuperar el objeto.
Crea una nueva variable llamada "error", deja su tipo como "String" y su valor vacío. Haz click en "Guardar".
Selecciona el widget checkbox "Aprobado" y bórralo con el icono "x" que aparece al seleccionar el widget.
Arrastra un widget "Title" desde la paleta y suéltalo en la primera fila del formulario.
Propiedad Valor
Texto Validar la Solicitud de vacaciones
Nivel de título Nivel 2
Alineación Centrado
Arrastra un widget "Input" desde la paleta y suéltalo en una nueva fila debajo del título del formulario.
Propiedad Valor
Sólo lectura Sí
Etiqueta Fecha de Inicio
Valor solicitud.diaInicio | date
Nota: estamos usando un filtro de AngularJS "| date" para mostrar la fecha en un formato más amigable para los usuarios.
Arrastra un widget "Input" desde la paleta y suéltalo en una nueva fila debajo del widget "Fecha de Inicio".
Propiedad Valor
Sólo lectura Sí
Etiqueta Número de días
Valor solicitud.numDias
Arrastra un widget "Button" desde la paleta y suéltalo en una nueva fila en la parte de abajo del formulario.
Propiedad Valor
Ancho 6
Etiqueta Rechazar
Alineación Derecha
Estilo danger
Datos enviados al hacer click {"aprobado" : false}
Valor de la respuesta fallida error
Dirección URL de destino en éxito /bonita
Arrastra un widget "Button" desde la paleta y suéltalo en la zona situada a la derecha del botón "Rechazar".
Propiedad Valor
Etiqueta Aprobar
Estilo success
Datos enviados al hacer click {"aprobado" : true}
Valor de la respuesta fallida error
Dirección URL de destino en éxito /bonita
21
27. Muestra dinámicamente errores de envío potenciales
Arrastra un widget "Text" desde la paleta y suéltalo en una nueva fila debajo del formulario.
Introduce el siguiente contenidos en el campo de texto que ha aparecido (esto mostrará el widget sólo cuando haya un error):
error == null
29.Guarda el formulario
Comprueba que se ha tomado el camino de ejecución adecuado al final de la ejecución del proceso mirando el histórico de
casos en el Bonita Portal.
22
5. Ejercicio: Manejo de Actores
Objetivo
El objetivo de este ejercicio es añadir colaboración al proceso existente repartiendo los formularios (tareas) entre 2 actores: un
solicitante y un validador.
Instrucciones
Duplica el diagrama de proceso del ejercicio anterior para crear una versión 5.0.
Añade una senda "Validador" al diagrama y mueve la tarea "Validar solicitud" a ella.
Con la senda seleccionada, navega a "General / Senda" y define su nombre como "Validador".
23
Ejercicio: Manejo de Actores
Envia el formulario "Solicitar vacaciones". Si los actores están correctamente definidos, la tarea "Validar solicitud de vaca-
ciones" ya no debería estar disponible.
Desconecta del portal pulsando en el nombre de usuario en la esquina superior derecha y haz click en "Cerrar Sesión".
Si el filtro de actor se ha ejecutado correctamente, la tarea "Validar solicitud de vacaciones" deberá estar disponible en la
lista de tareas.
24
6. Ejercicio: Conector de notificación
Objetivo
El objetivo de este ejercicio es de demostrar la interación de Bonita BPM con un sistema externo mediante el uso de un
conector. En este contexto, vamos a notificar al solicitante de vacaciones sobre el estado de su solicitud con un conector de
email.
Instrucciones
Duplica el diagrama de proceso del ejercicio anterior para crear la versión 6.0.
Añade un conector de email en las tareas automáticas "Notificar aceptación solicitud" y "Noficar rechazo de solicitud". Estas
tareas enviarán un correo electrónico al solicitante con el estado de la solicitud.
El siguiente código será utilizado para obtener el email del solicitante en el conector:
import org.bonitasoft.engine.api.IdentityAPI;
import org.bonitasoft.engine.api.ProcessAPI;
import org.bonitasoft.engine.bpm.process.ProcessInstance;
import org.bonitasoft.engine.identity.ContactData;
// Get APIs
ProcessAPI processAPI = apiAccessor.getProcessAPI();
IdentityAPI identityAPI = apiAccessor.getIdentityAPI();
// Get process initiator
ProcessInstance processInstance = processAPI.getProcessInstance(processInstanceId);
long initiatorUserId = processInstance.getStartedBy();
// Get email from process initiator
ContactData contactData = identityAPI.getUserContactData(initiatorUserId, false);
return contactData.getEmail();
Selecciona el conector "Correo electrónico (SMTP)" bien haciendo una búsqueda en el filtro, o seleccionando la categoria
"Mensajería", despues haz clic en "Siguiente".
Rellena los parámetros de conexión basados en tu cuenta de correo electrónico y pulse en "Siguiente".
Introduce "Bonita Test" como asunto y pulse en el botón "Prueba", confirma la siguiente ventana si añadir ninguna depen-
dencia.
25
Ejercicio: Conector de notificación
Asegúrate que se recibe el email, (puede tomar unos minutos). Si no se recibe, modifica la configuración del conector y re-
ejecútalo.
Selecciona como tipo de expresion "Script", nombra el script como "obtenerEmailSolicitante" y pega el siguiente código en
la zona de edición:
import org.bonitasoft.engine.api.IdentityAPI;
import org.bonitasoft.engine.api.ProcessAPI;
import org.bonitasoft.engine.bpm.process.ProcessInstance;
import org.bonitasoft.engine.identity.ContactData;
// Get APIs
ProcessAPI processAPI = apiAccessor.getProcessAPI();
IdentityAPI identityAPI = apiAccessor.getIdentityAPI();
// Get process initiator
ProcessInstance processInstance = processAPI.getProcessInstance(processInstanceId);
long initiatorUserId = processInstance.getStartedBy();
// Get email from process initiator
ContactData contactData = identityAPI.getUserContactData(initiatorUserId, false);
return contactData.getEmail();
Repite los pasos previos nombrando el conector como "enviarEmailRechazoSolicitud" y configurando "Solicitud de Vaca-
ciones Rechazada" como asunto.
5. Modifica el email del usuario "Walter Bates" que usaremos para la prueba.
6. Ejecuta varias veces el proceso para comprobar los distintos caminos, y comprobar que recibe el email correspondiente.