Projet

Général

Profil

Fonctionnalité #18442

Mis à jour par Cyril VAZQUEZ il y a plus de 2 ans

En tant qu'utilisateur, je veux recevoir des notifications d'événements survenant dans l'application afin de savoir quelles actions sont à mener et quand.

**Analyse**
Un embryon de système existe déjà pour les événements de l'application. cf contrôleur audit/event.

Il faut appliquer le même système au journal du cycle de vie et le faire évoluer pour répondre à la demande de personnalisation du contenu de message.

Le processus global est le suivant :

* à l'enregistrement d'un message, le contrôleur détermine si une notification doit être envoyée.

* si oui, le processus détermine le ou les destinataires

* si au moins 1 destinataire a été trouvé, le processus produit le message et l'enregistre dans la file d'attente d'envoi

* une tâche planifiée dépile la liste des messages à envoyer et les traite

La configuration définit 4 points:

* les événements qui doivent déclencher l'envoi d'une notification

* les modes de notification (email dans le périmètre initial)

* les règles de détermination des destinataires

* le modèle de message : texte simple ou HTML en cible du mail

## Sélection des événements

Un système de filtre permet au moteur de déterminer si une notification doit êtr envoyée.
Il utilise les valeurs d'en-tête et de détail du message avec des tests LQL (égalité, liste entre crochets principalement)

Exemple pour notifier d'un dépôt pour les producteurs CPTA et RH :

~~~
filter:
eventType : "recordsManagement/deposit"
operationResult : false
eventInfo.originatorOrgRegNumber : ["CPTA", "RH"]
~~~

## Destinataires
Les destinataires sont indiqués

* en dur dans la configuration par leur identifiant unique ou leur adresse email (si plusieurs utilisateurs ont la même adresse les notifications in app seront impossibles)

* déduit de règles utilisant les acteurs de l'événement

* par un script spécifique (hors périmètre V2)

Exemple pour notifier un utilisateur défini dans la configuration :

~~~
recipients : ["info@maarch.org", "bblier"]
~~~

Exemple pour notifier des utilisateurs dynamiques :

~~~
recipients : @accountId // Utilisateur initiateur de l'opération
recipients : @orgUnitRegNumber // Tous les utilisateurs du service
recipients : @eventInfo.originatorOrgRegNumber // Tous les utilisateurs du service producteur indiqué dans les infos compélmentaires (le moteur recherchera la valeur dans les utilisateurs et dans les services)
~~~

Exemple pour notifier des utilisateurs dynamiques par script :

~~~
recipients : /bundle/api/command // Service personnalisé qui va recevoir le sinformations de l'événement et retourner un tableau d'identifiants d'utilsiateurs
~~~

## Message

La configuration fournit un texte ou un lien vers un modèle de contenu de message.

Le processus utilise le moteur de fusion XML/HTML du framework avec la syntaxe <?merge ?> et [?merge ?].

Exemple pour un texte simple avec variable :

~~~
message : "Bonjour, une erreur est survenue lors du versement de l'archive du service [?merge eventInfo.originatorOrgRegNumber ?]"
~~~

exemple pour un modèle externe (html ou texte) :

~~~
message : /data/maarchRM/notifications/template1.html
~~~

## Inscription

Le processus inscrit le message dans la file d'attente "notification" (contrôleur batchProcessing/notification::create())

## Traitement d'envoi

Le processus réalise l'envoi par le connecteur approprié (email pour 'instant) (contrôleur batchProcessing/notification::process())

Retour