Conceptos interesantes BPM Engine

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:

  1. 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")).

  1. 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

https://github.com/camunda/camunda-bpm-examples/blob/7.18/usertask/task-assignment-email/src/main/java/org/camunda/bpm/quickstart/TaskAssignmentListener.java

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.

https://github.com/camunda-consulting/camunda-7-code-examples/tree/main/snippets/engine-plugin-add-save-points

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/

Ejemplos: https://github.com/camunda/camunda-bpm-examples