Jauge de progression OXYDEV-PROGRESSION
Généralités
L'objet PROGRESSION de la librairie OXYDEV (non composant) gère une jauge une progression générique et indépendante.
Elle peut être utilisée depuis tout autre objet. Elle est particulièrement utile pour des objets PARCOURS qui ne savent pas gérer d'écran.
On peut agir sur le titre et les libellés, la jauge, afficher un bouton d'abandon, afficher le temps écoulé/restant estimé.
Utilisation minimale
...
AppliquerMethode OXYDEV."$$".PROGRESSION.AFFICHER_JAUGE (compteur,total)
...
AppliquerMethode OXYDEV."$$".PROGRESSION.SORTIE
Utilisation complète
CreerObjet OXYDEV."$$".PROGRESSION ("Titre fenêtre", CodeObjet, Instance)
pinstance = InstanceCreee
...
AppliquerMethode OXYDEV."$$".PROGRESSION[pinstance].AFFICHER_TOUT ("Titre", "Sous-titre", "Commentaires", compteur)
AppliquerMethode OXYDEV."$$".PROGRESSION[pinstance].ACTIVER_ANNULER (Vrai)
...
AppliquerMethode OXYDEV."$$".PROGRESSION[pinstance].AFFICHER_JAUGE (compteur, total)
AppliquerMethode OXYDEV."$$".PROGRESSION[pinstance].LIBELLE_CONTROLE ("LIB1", "Nouveau titre")
AppliquerMethode OXYDEV."$$".PROGRESSION[pinstance].AFFICHER_JAUGE (pourcentage)
AppliquerMethode OXYDEV."$$".PROGRESSION[pinstance].ACTIVER_TIMER (0) //0:caché, 1:temps écoulé, 2:temps restant
AppliquerMethode OXYDEV."$$".PROGRESSION[pinstance].CACHER_JAUGE (Vrai)
...
AppliquerMethode OXYDEV."$$".PROGRESSION[pinstance].SORTIE
Methode PROGRESSION_ABAND
BoiteMessage "Opération annulée par l'utilisateur"
FinMethode
Ecran
L'écran par défaut est jaugepro.ecr dans OXYDEV.GLB.
Voici les codes des libellés :
Le code de la jauge est JAUGE et celui du bouton Annuler est ABAND.
Vous pouvez le remplacer par un écran personnalisé. Il suffit que les libellés utilisés portent le même code et de mettre le chemin (relatif à oxydev\systeme\bin) en quatrième paramètre à l'objet.
Remarques
Si votre jauge apparaît après le traitement, décalez le CreerObjet dans une méthode plus haut pour laisser le temps à Oxygène d'afficher l'écran avant le début du traitement (dans la méthode AVANT_DEBUT par exemple). Vous pouvez aussi créer cet objet dans un objet précédent.
Pour éviter la gestion de l'instance vous pouvez utiliser CreerUnique.
Si vous traitez plusieurs milliers de fiches, évitez d'envoyer 10 000 messages AFFICHER_JAUGE. Lancez ce message uniquement lorsque le pourcentage (valeur entière) change.
Exemple complet
Declaration
PARAMETRES :
Entier Reference pAnnuleParUtilisateur // on retourne 1 si l'utilisateur abandonne
Chaine pFiltreSQL // filtre récupéré d'un autre objet avec LitRequeteSql()
VARIABLES :
Entier vInstance("Instance de l'objet Progression")
Entier vNbEnreg("Nombre d'enregistrements dans la table")
Entier vCompteur("Compteur incrémenté à chaque enreg.")
Entier vPourcent("Pourcentage de progression")
FinDeclaration
Methode DEBUT_TRI
// si il y a un filtre, on l'applique
Si pFiltreSQL="" Alors
PoseRequeteSql TABLE, "Select * From TABLE "+pFiltreSQL
FinSi
AppliquerDefaut
FinMethode
Methode AVANT_DEBUT
// -1 indique que la jauge n'a pas été créée
vInstance = -1
// nombre d'enregistrements qu'on va parcourir
Si pFiltreSQL="" Alors
vNbEnreg = NbEnreg(TABLE)
Sinon
// la fonction NbEnreg() ne tient pas compte des filtres : nous devons calculer à la main
PositionDebut TABLE
TantQue LireSuivant(TABLE) Faire
vNbEnreg = vNbEnreg + 1
FintantQue
PositionDebut TABLE
FinSi
// on n'active la jauge que si il y a plus de 500 enregistrements
Si vNbEnreg>500 Alors
// création de la jauge
CreerObjet OXYDEV."$$".PROGRESSION ("Titre de la fenêtre", CodeObjet, Instance)
vInstance = InstanceCreee
// changement des libellés
AppliquerMethode OXYDEV."$$".PROGRESSION[vInstance].LIBELLE_CONTROLE ("LIB1", "Traitement des clients")
AppliquerMethode OXYDEV."$$".PROGRESSION[vInstance].LIBELLE_CONTROLE ("LIB2", "Veuillez patienter ...")
// afficher le bouton permettant d'annuler le traitement
AppliquerMethode OXYDEV."$$".PROGRESSION[vInstance].ACTIVER_ANNULER (Vrai)
FinSi
AppliquerDefaut
FinMethode
Methode POUR_TOUT
// Mettre ici votre traitement
// ...
// Gestion de la jauge de progression
vCompteur = vCompteur+1
// On n'affiche la jauge que si le pourcentage a changé
// pour éviter des milliers d'appels si il y a des milliers d'enregistrements
Si vPourcent < Entier(vCompteur*100/vNbEnreg) alors
vPourcent = vCompteur*100/vNbEnreg
Si vInstance<>-1 Alors
AppliquerMethode OXYDEV."$$".PROGRESSION[vInstance].AFFICHER_JAUGE (vPourcent)
FinSi
FinSi
FinMethode
// Evènement reçu par l'objet de jauge après un clic sur le bouton Annuler
Methode PROGRESSION_ABAND
//NettoyerMessage // peut être utile dans certains cas
pAnnuleParUtilisateur = Vrai
Sortir
FinMethode Methode SORTIE
// Sortie de la jauge si elle a été créée
Si vInstance<>-1 Alors
AppliquerMethode OXYDEV."$$".PROGRESSION[vInstance].SORTIE
FinSi
AppliquerDefaut
FinMethode
FinObjet