Envoi d'alerte avec les infos du RedoLog

Version : 5.1.29

Bonjour,

Je souhaite intégrer la log de modification de l’objet dans l’alerte (je récupère le dernier enregistrement de table m_redolog lié à mon objet).
Mon souci, c’est que je n’arrive pas à récupérer la log de la modif en cours mais celle d’avant.

Pouvez-vous svp me dire comment je veux faire ?

Ps :

  • La log est récupérée avec une requête SQL dans le hook preAlert.
  • Le send est asynchrone.

On parle d’une alerte déclenchée sur transition d’état ?

Si oui je pense que l’alerte est envoyée avant que le redo log ne soit constitué.

Vous pouvez, je pense, facilement refabriquer le delta dans le preAlert en itérant sur les fields et en comparant la value et la oldvalue

StringBuilder delta = new StringBuilder();
for (ObjectField f : getFields()) {
  if (!f.getValue().equals(f.getOldValue())
    delta.append(f.getDisplay() + " changed from [" + f.getOldValue() + "] to [" +f.getValue() + ]");
}

C’est bien le cas, ta proposition me va, merci.

Effectivement pour préciser :

L’écriture dans la table m_redolog est asynchrone pour ne pas dégrader le temps d’exécution des mises à jours UI ou API. Cet objet reste un journal / table de “log” d’évènements de mise à jour.

Attention à ne pas aller à contre sens à refaire ce que fait Simplicité, en rendant de nouveau synchrone un temps de fabrication dont l’utilisateur en face peut se passer.

Si votre traitement d’alerte est bien asynchrone (i.e. après la réponse vers l’appelant), alors vous pouvez :

  • gérer une attente (boucle de Thread.sleep de qq secondes) jusqu’à ce que la table m_redolog reçoive le tuple attendu
  • qui sorte en erreur au bout d’un certain temps d’attente

Attention la notion de “dernier” n’a pas de sens dans un traitement multi-sessions / asynchrone. Il faut bien faire la jointure avec le nom de l’objet et le row_id du record, et prendre le plus récent mais sans garantie que ce soit le “bon” si les mises à jour sont nombreuses dans une même seconde par exemple. Il faut surement aussi faire la jointure avec l’utilisateur en cas de concurrence d’accès.

1 Like

This topic was automatically closed 60 minutes after the last reply. New replies are no longer allowed.