Projet

Général

Profil

Fonctionnalité #18442

Mis à jour par Cyril VAZQUEZ il y a environ 3 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