---
title: "Notificaciones al BPM Engine desde inserción en Entidades"
canonical: "https://onesaitplatform-es.refined.site/space/ruta/4053106717/Notificaciones%20al%20BPM%20Engine%20desde%20inserci%C3%B3n%20en%20Entidades"
format: markdown
---
> Macro (toc)

> ℹ️ Disponible desde Release 6.0.0

# Introducción

Esta funcionalidad permite lanzar procesos del BPM Engine asociados a la inserción de datos en una Entidad. Para esto se usan las notificaciones del BPM Engine.

# ¿Cómo funciona?

Para dar una idea general de como funciona esta funcionalidad vamos a seguir un ejemplo muy sencillo utilizando el siguiente diagrama:

![image-20240228-103824.png](media://537de136-4c81-4f08-9f11-cad1431ca02c)

# Cargar BPM con Event Messages

Para poder notificar al BPM desde la inserción de entidades,  hay que crearse un proceso que empiece con un *Start Event Message*, vamos a analizar en detalle el diagrama de ejemplo: 

![image-20240228-105503.png](media://3d2e8436-07c5-4edb-9a0f-72acb4199dac)


- **Start Message**: se trata de un *Start Event Message*, es importante darle un nombre al mensaje, ya que es el que utilizaremos para configurar las notificaciones desde la entidad. Este nodo recibirá la variable **platformEntity** con los datos insertados en la entidad en formato JSON.

![image-20240223-093016.png](media://81e09679-6d3d-4a5e-9ade-5d20346e3c48)

- **checkJSON**: comprueba si el JSON recibido por el *Start Message* es un array o no, para ello utiliza las siguiente expresión. Hay que destacar que evaluamos la variable **platformEntity** que es donde nos vendrán los datos insertados:


![image-20240228-105606.png](media://b58a8890-68af-4ec9-9ad7-747c6faadb4f)

- **checkAge**: en este nodo chequeamos si la persona tiene mas de 18 años, para ello volvemos a utilizar la varible platformEntity y chequeamos la propiedad *age*


![image-20240228-105846.png](media://30a4dea5-37a7-44ca-9ab4-fd82c2a96830)

En el caso de que los datos vengan en formato array la expresión seria la siguiente:

```
${JSON(platformEntity).elements().get(0).prop("person").prop("age").numberValue() >= 18}
```

En caso contratrio:

```
${JSON(platformEntity).prop("person").prop("age").numberValue() >= 18}
```

- **doSomething: **aque el proceso queda a la espera de una acción del usuario.

Una vez creado el diagrama lo cargamos en nuestro BPM a través de la opción de menú **Development > My BPM Tenants**

> ℹ️ Para mas información sobre cómo trabajar con el BPM Engine de Plataforma leer la sección [BPM Engine](https://es.onesaitplatform.com/space/DOC/2216113970/BPM+Engine)

# Habilitar notificaciones al BPM Engine desde la entidad

A la hora de crear una entidad hay que marcar la opción **Allow BPM Notifications** que se encuentra en la pestaña de **Advanced Settings**. Al marcar esta opción aparecerá una tabla en la cual habrá que añadir los *Event Messages* que se quieren notificar, para ello primero seleccionamos el proceso BPM correspondiente y se cargarán todos los *Event Messages* existentes en dicho proceso:

![image-20240228-110148.png](media://f65f8162-b1a4-49e3-bffe-cac6bb707533)

Una vez se han añadido todas las relaciones proceso-mensaje a la tabla, creamos la entidad.

Para este ejemplo vamos a crear la entidad **Person** con el siguiente esquema:

```json
{
    "$schema": "http://json-schema.org/draft-07/schema#",
    "title": "person",
    "type": "object",
    "required": [
        "person"
    ],
    "properties": {
        "person": {
            "type": "string",
            "$ref": "#/datos"
        }
    },
    "datos": {
        "description": "Properties for DataModel person",
        "type": "object",
        "required": [
            "name",
            "age",
            "city"
        ],
        "properties": {
            "name": {
                "type": "string"
            },
            "age": {
                "type": "number"
            },
            "city": {
                "type": "string"
            }
        }
    },
    "description": "person",
    "entitydclass": [],
    "additionalProperties": true
}
```

## Visualizar la ejecución del proceso

De esta forma, cada vez que se inserte un dato en una entidad configurada para notificar al BPM, se notificarán a los *Event Messages* configurados y se lanzará el proceso correspondiente con los datos insertados en la entidad.

![image-20240228-110428.png](media://98035c5b-6b38-4c60-ab2a-8329c9aecafa)

Podemos observar varias cosas:

- Los datos vienen almacenados en la variable **platformEntity** en formato JSON
- Los datos siguen el esquema de la ontología *person* que nos hemos creado al principio
- Como los datos no vienen en formato array, el proceso ha evaluado correctamente si es un array o no y ha elegido el camino inferior del diagrama
- El proceso se ha paralizado en la *User Task* a la espera de alguna acción por parte del usuario

A continuación dejamos disponible el BPMN del ejemplo: