14 avril 2007

Jauge en lieu et place du sablier lors de l'exécution d'une requête, la "soluce" !?

Les utilisateurs ne supportent pas les écrans figés avec un sablier, pourtant imposés lorsqu'une requête importante doit être exécutée.

Afin d'afficher une jauge durant le traitement d'une requête, il faut bien récupérer en premier lieu le nombre d'enregistrements à traiter avec la fonction "HNbEnr", et cette dernière fige l'application avec le sablier tant que toute la requête n'est pas exécutée dans sa totalité.

Et bien cela n'est plus vrai, après consultation des dernières nouveautés !!!

La fonction "HNbEnr" a été dotée d'une option "hNonBloquant". Elle permet de connaître immédiatement après l'appel de la requête, le nombre d'enregistrements déjà récupérés. Il est donc possible de débuter le traitement de la requête par son parcours, tout en affichant une jauge certes approximative, mais une jauge. Au fur et à mesure du parcours, si la propriété "..ExécutionTerminée" retourne faux, il est possible de réajuster la jauge avec le nombre d'enregistrements récupérés en rappelant "HNbEnr".

Tous ceux qui aiment observer les utilisateurs de nos applications, savent déjà que le traitement sera jugé plus rapide, du moment qu'une progression est visible !

2 commentaires:

Anonyme a dit…

Pour être sûr, j'ai construit le code correspondant.
Pouvez-vous le valider ?

hExécuteRequête(MaRequête)
nMaxim est un entier = HNbEnr(MaRequête, hNonBloquant)
i est un entier
TANTQUE MaRequête..ExécutionTerminée = Faux
i = HNbEnr(MaRequête, hNonBloquant)
Jauge(i, nMaxim, PartieEntière(i*100/nMaxim) + "%")
FIN

Anonyme a dit…

Je me permet de laisser un commentaire sur votre code, étant un grand utilisateur de jauge dans nos applis clients...
Dans votre code, i va s'incrémenter progressivement du nombre d'enregistrements déjà traités, alors que nMaxim ne bouge pas est sera très certainement égal à 0 ou 1 j'imagine.
La jauge sera pleine dés le début et affichera un pourcentage démesuré, enfin sous toutes réserve, à tester...
J'utilise souvent le paramètre hNonBloquant, mais je n'affiche pas de jauge tant que ExecutionTerminée=Faux...