Documentos de Académico
Documentos de Profesional
Documentos de Cultura
2
Prefacio
El objetivo de los ejercicios es crear un proceso bsico de solicitud de vacaciones.
Para implementar este proceso vamos a seguir un acercamiento iterativo mezclando contenido terico y ejercicios prcticos. Cada
ejercicio le permitir construir un ejecutable y una versin ms completa del proceso.
Instrucciones - Contiene un resumen de los pasos principales requeridos para completar el ejercicio.
Instrucciones paso a paso - Contiene una descripcin detallada de los pasos requeridos para completar el ejercicio.
3
1. Ejercicio: Modelado de proceso bsico
Objetivo
El objetivo de este ejercicio es crear una primera versin bsica 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 an de
formularios o datos. Lo extenderemos en los ejercicios siguientes.
Instrucciones
Para hacer el ejercicio, crea un diagrama "Diagrama Solicitud de Vacaciones" en versin 1.0 que contenga un proceso "Solicitud
de Vacaciones" en versin 1.0.
Haz click en cualquier parte del fondo del diseo 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.
4
Ejercicio: Modelado de proceso bsico
Selecciona la tarea humana, y arrastra el icono de evento (A) desde el men contextual y selecciona el evento de fin (B).
8. Guarda el proceso.
9. Ejecuta el proceso.
Tu navegador debera abrir y mostrar un formulario automticamente generado que inicie el nuevo caso. Haz click en Inicio
para enviar el formulario.
Sers redirigido al listado de tareas dentro del Bonita Portal. Selecciona la tarea "Validar solicitud" y haz click en el botn
"Hacer" de arriba a la derecha.
5
Ejercicio: Modelado de proceso bsico
6
2. Ejercicio: Aadiendo datos y
especificando contratos
Objetivo
El objetivo de este ejercicio es continuar la implementacin del proceso de Solicitud de Vacaciones:
2. especificando contratos para la instanciacin del proceso y para las tareas humanas
Una vez completado, el proceso ser ejecutado con formularios automticamente generados.
Warning
Es obligatorio poner atencin en el caso y en la sintaxis de los nombres tcnicos facilitados en las instrucciones.
No hacerlo podra producir errores.
Instrucciones generales
Duplica el diagrama de procesos del ejercicio anterior para crear la versin 2.0.
Genera un contrato en la instanciacin del proceso desde la variable "solicitud" y que contenga los siguientes elementos:
diaInicio
numDias
return solicitudVacacionesVar
7
Ejercicio: Aadiendo datos y especificando contratos
aprobado (Boolean)
Aade una operacin en la tarea "Validar Solicitud" para enlazar el campo "aprobado" con la "solicitud" BDM con el valor
devuelto por el contrato.
Haz click en "Aadir" (A) en la "Lista de Objetos de Negocio" y nombra al objeto "SolicitudVacaciones" (B) (ste es un
nombre tcnico as que no debera contener espacios o caracteres especiales).
8
Ejercicio: Aadiendo datos y especificando contratos
Selecciona el Pool del proceso y navega hasta la pestaa "Datos / Variables de proceso".
Selecciona la Pool del proceso y navega hasta la pestaa "Ejecucin / Contrato / Entradas".
9
Ejercicio: Aadiendo datos y especificando contratos
Haz click en "Finalizar" y obvia los mensajes de advertencia sobre la instanciacin incompleta de la variable de negocio.
Propiedad Valor
Nombre comienzoSolicitudFuturo
Expresin solicitudInput.diaInicio.compareTo(new Date()) > 0;
Mensaje de error La fecha de comienzo de las vacaciones debe comenzar en el futuro.
Propiedad Valor
Nombre alMenosUnDia
Expresin solicitudInput.numDias > 0;
Mensaje de error La cuenta de das debe ser mayor que cero.
Selecciona la Pool del proceso y navega hasta la pestaa "Datos / Variables de proceso".
Haz click en el icono del "Lpiz" junto al campo "Valor predeterminado" para abrir el editor de expresiones.
10
Ejercicio: Aadiendo datos y especificando contratos
return solicitudVacacionesVar
Esto iniciar el BDM desde las variables del contrato y establecer al iniciador del proceso como el autor de la solicitud.
Selecciona la tarea "Validar solicitud" y navega hasta la pestaa "Ejecucin / Contrato / Entradas".
Haz click en "Aadir" y cambia el nombre por "aprobado" y su tipo por "BOOLEAN".
Con la tarea "Validar solicitud" seleccionada, navega hasta la pestaa "Ejecucin / Operaciones".
Haz click en el link "Toma valor de" y cambia al tipo de operador "Use un mtodo Java".
8. Guarda el proceso.
Ejecuta el proceso y usa el formulario automticamente generado para probar tus restricciones.
Consejos:
11
Ejercicio: Aadiendo datos y especificando contratos
12
3. Ejercicio: Proceso con una puerta
exclusiva
Objetivo
El objetivo de este ejercicio es extender el proceso existente aadiendo una validacin dinmica 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 versin 3.0.
Modifica el diagrama para aadir los siguientes elementos despus de la tarea "Validar Solicitud":
Configura las transiciones salientes de la puerta exclusiva para que puedan controlar dinmicamente el flujo basndose en los
datos del proceso.
3. Aade 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 aceptacin solicitud" despus de la compuerta.
5. Aade un evento de fin llamado "Fin - Solicitud aceptada" seguida de la recin creada tarea automtica.
6. Crea una tarea de servicio llamada "Notificar rechazo de solicitud" despus de la compuerta.
7. Aade un evento de fin llamado "Fin - Solicitud rechazada" seguida de la recin creada tarea automtica.
La transicin que conecta con "Notificar aceptacin 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 "lpiz" junto al selector de "Condicin" para abrir el editor de expresiones.
En el editor de expresiones, selecciona "Java" como tipo de expresin, selecciona la variable "solicitud" y el mtodo "is-
Aprobado".
11.Valida el diagrama.
Cuando las condiciones de los flujos estn definidas, podrs validar el diagrama. Para ello, navega hasta la pestaa "Estado
de validacin" y haz click en "Refrescar". Puedes ignorar con seguridad las 3 advertencias relacionadas con el UI Designer.
14
Ejercicio: Proceso con una puerta exclusiva
Aviso: no hagas click varias veces en el botn "Ejecutar", esto redesplegar el proceso y limpiar el historico. Para crear una
segunda instancia de proceso, debers navegar por el Bonita Portal.
Para ello, navega hasta el men "Procesos" (A) y selecciona el proceso "Solicitud de vacaciones" definido en la versin 3.0
(B) y haz click en "Inicio" (C).
14.Comprueba que el proceso se ha ejecutado correctamente desde la interfaz de administracin del Portal.
Navega hasta el men "BPM / Casos"(A) luego, cambia a la pestaa "Casos Archivados"(B) y haz click en el link "..." en la
columna de acciones (C) para ver los detalles del caso.
15
Ejercicio: Proceso con una puerta exclusiva
16
4. Ejercicio: Creando formularios
Objetivo
El objetivo de este ejercicio es disponer de una interfaz amigable para la ejecucin del proceso.
Instrucciones
Duplica el diagrama de proceso del ejercicio anterior para crear la versin 4.0.
Un formulario de tarea "Validar Solicitud de vacaciones" que muestre los detalles del usuario "solicitante", las variables "di-
aInicio" y "numDias" en solo lectura y permita definir la variable "aprobado".
Esto abrir el UI Designer en un navegador con un formulario automticamente generado desde el contrato de instanciacin.
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 tcnico as que no debera 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 Input".
Consejo: Una zona de lneas discontnuas te permiten insertar una nueva fila cuando te sitas en la separacin entre dos
widgets.
17
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 "Da inicio", arrastra y sultalo dentro del widget "Form container".
Repite la operacin para los widgets "Num das" y "Submit", aadiendo nuevas filas.
Una vez los widgets estn agrupados dentro del Contenedor de formularios, selecciona y elimina las filas vacas.
Consejo: Mantn el ratn 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 Input" y edita las siguientes propiedades:
Propiedad Valor
Texto Rellenar una nueva Solicitud de Vacaciones
Nivel de ttulo Nivel 2
Alineacin Centrado
18
Ejercicio: Creando formularios
Propiedad Valor
Requerido S
Placeholder Fecha de inicio de las vacaciones
Formato de fecha yyyy-MM-dd
Propiedad Valor
Requerido S
Etiqueta Nmero de das
Placeholder Nmero de das de vacaciones
Valor mnimo * 1
9. Limpia los valores iniciales del formulario(esto ensear los placeholders en tiempo de ejecucin)
Haz click en el icono de "lpiz" para la variable de Nombre "formInput" situada en el panel inferior de la pantalla.
10.Aade una variable para manejar potenciales errores al envo del formulario
Establece el nombre de la variable como "error", deja su tipo como "String" y su valor vaco. Haz click en "Guardar".
Introduce el siguiente contenido en el campo de texto que acaba de aparecer (esto deshabilitar el botn cuando el formulario
no pueda ser validado):
$form.$invalid
Reemplaza la propiedad "Valor de la respuesta fallida" con "error" (esto nos permitir recoger los detalles del error al envo
del formulario si es que hubiera alguno).
19
Ejercicio: Creando formularios
Introduce el siguiente contenido en el campo de texto que acaba de aparecer (esto muestra el widget slo cuando haya un error):
error == null
el botn "Enviar" est desactivado por defecto (esto se debe a la validacin proporcionada por el widget "form container")
Nota: el formulario no se puede enviar desde el modo de vista previa aunque sea vlido.
14.Guarda el formulario
En el Studio, selecciona la tarea "Validar solicitud" y navega hasta la pestaa "Ejecucin / Formulario".
20
Ejercicio: Creando formularios
16.Renombra el formulario
formInput
formOutput
Haz click en el botn "Crear una nueva variable" y configura la variable con las siguientes propiedades:
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 vaco. Haz click en "Guardar".
Selecciona el widget checkbox "Aprobado" y brralo con el icono "x" que aparece al seleccionar el widget.
Arrastra un widget "Title" desde la paleta y sultalo en la primera fila del formulario.
21
Ejercicio: Creando formularios
Propiedad Valor
Texto Validar la Solicitud de vacaciones
Nivel de ttulo Nivel 2
Alineacin Centrado
Arrastra un widget "Input" desde la paleta y sultalo en una nueva fila debajo del ttulo del formulario.
Propiedad Valor
Slo lectura S
Etiqueta Solicitante
Valor solicitante.firstname +" "+ solicitante.lastname
Arrastra un widget "Input" desde la paleta y sultalo en una nueva fila debajo del widget con el solicitante.
Propiedad Valor
Slo-lectura s
Etiqueta Comienzo de la vacaciones
Valor solicitud.diaInicio | date
Nota: estamos usando un filtro de AngularJS "| date" para mostrar la fecha en un formato ms amigable para los usuarios.
Arrastra un widget "Input" desde la paleta y sultalo en una nueva fila debajo del widget "Fecha de Inicio".
Propiedad Valor
Slo lectura S
Etiqueta Nmero de das
Valor solicitud.numDias
Arrastra un widget "Button" desde la paleta y sultalo en una nueva fila en la parte de abajo del formulario.
Propiedad Valor
Ancho 6
Etiqueta Rechazar
Alineacin Derecha
Estilo danger
Datos enviados al hacer click {"aprobado" : false}
22
Ejercicio: Creando formularios
Propiedad Valor
Valor de la respuesta fallida error
Direccin URL de destino en xito /bonita
Arrastra un widget "Button" desde la paleta y sultalo en la zona de "6 columnas" situada a la derecha del botn "Rechazar".
Propiedad Valor
Etiqueta Aprobar
Estilo success
Datos enviados al hacer click {"aprobado" : true}
Valor de la respuesta fallida error
Direccin URL de destino en xito /bonita
Arrastra un widget "Text" desde la paleta y sultalo en una nueva fila al final del formulario.
Introduce el siguiente contenidos en el campo de texto que ha aparecido (esto mostrar el widget slo cuando haya un error):
error == null
31.Guarda el formulario
Comprueba que se ha tomado el camino de ejecucin adecuado al final de la ejecucin del proceso mirando el histrico de
casos en el Bonita Portal.
24
5. Ejercicio: Manejo de Actores
Objetivo
El objetivo de este ejercicio es aadir colaboracin 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 versin 5.0.
Aade 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".
25
Ejercicio: Manejo de Actores
Envia el formulario "Solicitar vacaciones". Si los actores estn correctamente definidos, la tarea "Validar solicitud de vaca-
ciones" ya no debera estar disponible.
Desconecta del portal pulsando en el nombre de usuario en la esquina superior derecha y haz click en "Cerrar Sesin".
Si el filtro de actor se ha ejecutado correctamente, la tarea "Validar solicitud de vacaciones" deber estar disponible en la
lista de tareas.
26
6. Ejercicio: Conector de notificacin
Objetivo
El objetivo de este ejercicio es de demostrar la interacin 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.
Warning
Dependiendo de tu configuracin de red, de tu cortafuegos o de la configuracin de seguridad de tu servidor de
correo, puede que no puedas enviar un email desde Bonita BPM.
Para evitar esas restricciones tcnicas, usaremos un programa que simula a un servidor de correo (FakeSMTP).
Instrucciones
Obtn y ejecuta el servidor FakeSMTP.
Duplica el diagrama de proceso del ejercicio anterior para crear la versin 6.0.
Aade un conector de email en las tareas automticas "Notificar aceptacin solicitud" y "Noficar rechazo de solicitud". Estas
tareas enviarn un correo electrnico al solicitante con el estado de la solicitud.
El siguiente cdigo 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();
Ejecuta FakeSMTP haciendo doble click en el archivo JAR o ejecutando este comando en un terminal:
java -jar fakeSMTP-2.0.jar
Una vez se haya mostrado la interfaz de usuario, haz click en el botn "Start server".
2. Duplica el diagrama de proceso del ejercicio anterior para crear la versin 6.0.
Selecciona el conector "Correo electrnico (SMTP)" bien haciendo una bsqueda en el filtro, o seleccionando la categoria
"Mensajera", despues haz clic en "Siguiente".
27
Ejercicio: Conector de notificacin
Propiedad Valor
SMTP host localhost
SMTP port 25
SSL (en la seccin "Security") sin seleccionar
Introduce algunas direcciones de correo (no tienen por qu existir) en los campos "From" y "To" y haz click en "Next".
Introduce "Bonita Test" como asunto y pulse en el botn "Prueba", confirma la siguiente ventana si aadir ninguna depen-
dencia.
28
Ejercicio: Conector de notificacin
Selecciona la tarea, navega hasta la pestaa "Ejecutar / Conectores entrada" y haz click en "Agregar...".
Selecciona como tipo de expresion "Script", nombra el script como "obtenerEmailSolicitante" y pega el siguiente cdigo en
la zona de edicin:
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.
6. Pruebe el proceso
Ejecute el proceso dos veces para probar los diferentes caminos y compruebe que FakeSMTP recibe los emails correctamente.
29