J’ai un bouton qui exécute une méthode pour parcourir toutes les lignes de la table et les synchroniser avec les données du contrôle des habitants.
Comme ce processus est long, j’aimerai empêcher les autres utilisateurs (qui ne voient pas que le processus est en cours d’exécution) de cliquer sur le bouton pour relancer le processus.
Y a-t-il une manière de faire que vous préconisez?
En v5 et v6 (pour rappel la v4 n’est plus maintenue depuis Janvier 2024), pour plus de robustesse il faudrait aussi supprimer le param dans le platform hook postPlatformInit (= au (re)démarrage de l’instance) pour gérer le cas d’un éventuel plantage de l’instance alors que le processus est en cours (et que donc le finally n’a pas été atteint)
Ou alors, si vous êtes sur un noeud unique Simplicité, vous pouvez utiliser un param système mémoire (via get/set/removeParameter) plutôt qu’un param système persistant en base
Un sys.setSystemParam(param, "" /*ou null*/) doit faire l’affaire dans le contexte mais si vous êtes en mono-noeud autant utiliser un paramètre en mémoire :
Grant sys = Grant.getSystemAdmin();
String param = "MON_PROCESSUS";
String val = sys.getParameter(param);
if (Tool.isEmpty(val)) {
sys.setParameter(param, Tool.getCurrentDateTime());
try {
// ici le processus long...
return Message.formatSimpleInfo("Le processus est terminé");
} finally {
sys.removeParameter(param);
}
} else {
return Message.formatSimpleInfo("Un processus est déjà en cours depuis: " + val);
}