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

CreerObjet OXYDEV."$$".PROGRESSION
...
AppliquerMethode OXYDEV."$$".PROGRESSION.AFFICHER_JAUGE (compteur,total)
...
AppliquerMethode OXYDEV."$$".PROGRESSION.SORTIE

Utilisation complète

Variables: Entier pinstance
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

Objet PARCOURS : PARCOURS_CLIENTS
  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