Hook initUpdate & synchronisation automatique avec un service externe

Request description

Bonjour,

Nous avons un retour d’expérience et une question de bonnes pratiques concernant l’utilisation du hook initUpdate avec des appels à un service externe.

Contexte

  • À l’ouverture du formulaire d’un objet LegalText en statut DRAFT, nous déclenchons automatiquement une synchronisation avec SharePoint.
  • Cette synchronisation est faite côté back-end (appels API + persistance en base des fichiers PDF/DOCX et de champs métier si nécessaire).
  • Fonctionnellement, cette synchro automatique à l’ouverture est souhaitée.

Problème rencontré

  • Le service externe peut être temporairement indisponible (timeouts / 504).
  • Lorsque cela arrive pendant le initUpdate :
    • l’ouverture du formulaire peut être fortement ralentie (plus d’1 minute),
    • voire échouer, ce qui bloque l’utilisateur sans visibilité sur ce qu’il se passe.

Objectif

Nous souhaitons :

  • conserver une synchronisation automatique à l’ouverture,
  • sans bloquer ni dégrader l’UI,
  • et ajouter une visibilité utilisateur (ex : “synchronisation en cours”, “échec de synchronisation réssayer plus tard etc..”).

Questions

  1. Quelles sont les bonnes pratiques recommandées dans Simplicité pour gérer des appels API externes potentiellement longs ou instables dans un initUpdate ?
  2. Le tracker Simplicité est-il exploitable dans ce contexte (hors action explicite) pour informer l’utilisateur qu’une synchronisation est en cours ?
  3. Est-il préférable de :
  • déclencher ce type de traitement de manière asynchrone,du coup déplacer cette logique du hook initupdate ?
  • ou de le déplacer vers un autre mécanisme (action, job, statut de synchronisation), tout en conservant une UX fluide à l’ouverture du formulaire ?

Merci d’avance pour vos retours . :smiley:

Cordialement,

Hamza

1 Like

Bonjour Hamza,

Il n’y a pas vraiment de bonne pratique. Comme tu l’as constaté, un initUpdate long va mécaniquement ralentir le chargement du formulaire. La question de savoir comment éviter la latence, l’instabilité, tout en respectant les contraintes rendant nécéssaire la synchronisation, est purement applicative.

Le tracker ne s’affiche que pour les jobs lancés via la UI. Il est par contre tout à fait possible de lancer une action de synchronisation en parallène depuis le initUpdate, et afficher un message standard à l’utilisation (“une synchro a été lancée, vous serez notifié à la finalisation du traitement”). L’action en question peut très bien se conclure par une notification à l’utilisateur.

Si ce traitement n’est pas un pré-requis à l’affichage du formulaire, lancer une tâche asynchrone semble pertinent.

1 Like