Conceptos interesantes BPM Engine
- 1 Introducción
- 2 Conceptos
- 3 Elementos BPMN
- 3.1 Loop
- 3.2 Compensación
- 3.3 Subprocess
- 3.4 Eventos (Attach Events)
- 3.5 Escalation Event (BPMN 2)
- 3.6 Gateways
- 3.6.1 Data-based Exclusive Gateways
- 3.6.2 Parallel Gateways
- 3.6.3 Event-based Gateways
- 3.7 Events
- 3.7.1 Message
- 3.7.2 Timer
- 3.7.3 Timer Events
- 3.8 Link
- 4 Links Camunda
Introducción
En este post incluimos links a diferentes conceptos/funcionalidades del BPM Engine integrado en Plataforma.
Conceptos
External Tasks
Una External Task es una tarea que espera ser completada por algún External Service sin llamar explícitamente a ese servicio. Se configura declarando un Topic (que caracteriza el tipo de servicio). La API de Camunda debe ser consultada (poll) para recuperar las tareas externas abiertas para un determinado Topic de servicio y debe ser informada sobre la finalización de una tarea:
Más info: Invoking services from a Camunda 7 process | Camunda 8 Docs
Ejemplos de uso: https://github.com/camunda/camunda-bpm-examples#external-task-client
Guía de llamadas a APIs REST desde Camunda, (incluido desde External Task): https://github.com/camunda-community-hub/Make-Rest-Calls-From-Camunda-7-Example
Signal Events
Para activar la señal habría que lanzar la llamada post con el nombre de la señal correspondiente, por ejemplo:
Body {"name": "claimsExistence"}
Authorization Poner Bearer access_token de keycloak
Si fuese necesario crear señales con parámetros, el body sería: { "name": "claimsExistence", "variables": { "barchId": { "value": "100" } } }).
Más info: https://docs.camunda.org/manual/7.19/reference/bpmn20/events/signal-events/ Signal event in Camunda | BPMN | Events in camunda
Eventos de Error
Hay dos formas de capturar un error de una External task que llama a un API con un http-connector:
Con un Error Boundary Event.
Aquí tendremos que poner la condición en la external task indicando que si el codigo de error es X envíe una excepción (throw new org.camunda.bpm.engine.delegate.BpmnError("error-boundary-no-respose")).
Con un Conditional Bounday Event.
En este caso en la propia cajita del evento condicional se pondrá la expresión que se debe cumplir para ir por este lado del flujo, por ejemplo ${statusCode!=200}.
En ambas hay que tener en cuenta que el código de error viene informado en la variable ${statusCode}, y podremos tener información de las cabeceras en la variable ${headers}, como la respuesta con S(response).
El ejemplo hace una llamada a un API de plataforma con los campos mal insertados para forzar el estatusCode=500, y con ello pasar a una tarea manual con la que decidir si reintentar la llamada o avanzar en el flujo.
Listener de tareas
Se puede hacer un Listener de Tareas que cuando se asigna una tarea a un operador se envía un correo a este:
https://github.com/camunda/camunda-bpm-examples/tree/7.18/usertask/task-assignment-email
Save Points
Permite crear Save Points
Un plugin para Camunda BPM que añade automáticamente Save Points que permite continuación asíncrona a ciertos elementos BPMN.
El plugin se integra en el parser BPMN y añade un Save Point antes del Evento(s) de Inicio de un Proceso y después de cada Tarea de Usuario. De esta manera, el inicio de una instancia de proceso y el trabajo completado por un usuario no se retroceden si se produce una excepción en el proceso.
Componentes Mail (Leer Mail)
Componente que permite leer emails por IMAP
https://camunda.com/blog/2016/06/camunda-bpm-mail/
https://github.com/camunda-community-hub/camunda-platform-7-mail
Elementos BPMN
Referencia: https://camunda.com/bpmn/reference/
Loop
Compensación
Subprocess
Eventos (Attach Events)
Escalation Event (BPMN 2)
Gateways
Data-based Exclusive Gateways
Parallel Gateways
Event-based Gateways
Events
Message
Timer
Timer Events
Link
Links Camunda
Tuning: https://docs.camunda.io/docs/components/best-practices/operations/performance-tuning-camunda-c7/
Extension Hub: https://github.com/camunda-community-hub/