Accueil du site > Les articles > Utilisation d’une barre de progression sous Adélia.
Version à imprimer Enregistrer au format PDF

Utilisation d’une barre de progression sous Adélia.

mardi 18 mai 2004, par Didier Encinas Visites  2404 |Popularité : 21% 

Le principe de la barre de progression, très répandu en environnement micro, est appréciable dans le sens où l’utilisateur est progressivement informé de l’état d’avancement d’une tâche.

En effet, à partir du moment où le programmeur dispose de l’information numérique (cruciale en l’occurrence) représentant 100 % d’un traitement, afficher sous forme de pourcentage l’état d’avancement de ce même traitement tend vers le jeu d’enfant. Si en plus, le processus de codage est simplifié par l’utilisation de macro-instructions ADELIA paramétrées, cela devient un jeu d’enfant.


Mise en place de la barre de progression.

Il est recommandé de définir dans un environnement de référence Adélia 2 macro-instructions simulant une barre de progression (ces 2 macros seront ainsi partagées entre plusieurs environnements) :

- INITIALISER_BARRE_PROGRESSION
- AFFICHER_BARRE_PROGRESSION

INITIALISER_BARRE_PROGRESSION( 1 ; 2 ; 3 )

1 : Valeur représentant 100% du traitement 2 : Tranche d’évolution d’affichage du pourcentage 3 : Texte à afficher

AFFICHER_BARRE_PROGRESSION( 1 )

1 :Valeur à afficher sous forme de pourcentage

Exemple d’utilisation :

On suppose que W_NBR_ENR représente le nombre d’enregistrements que l’on s’apprête à traiter.

SI W_NBR_ENR > 0
 &INITIALISER_BARRE_PROGRESSION( W_NBR_ENR ; 5 ; 'Recherche en cours' )
 · W_NBR_ENR représente 100 % du traitement
 · On désire voir évoluer le pourcentage par tranche minimum de 5 %
 · Le texte affiché sera 'Recherche en cours'
 POSITIONNER_AV VUE
 LIRE_AVANT VUE
 W_COMPTEUR = 0
 TANT_QUE VUE EXISTE
   W_COMPTEUR = W_COMPTEUR + 1
   &AFFICHER_BARRE_PROGRESSION( W_COMPTEUR )
   · On affiche la barre de progression dès que W_COMPTEUR atteint
   · une nouvelle tranche de 5 %
   ... traitement
   LIRE_AVANT VUE
 REFAIRE
FIN

Pré-requis : la macro-instruction DECLARER_VARIABLES_API devra être déclarée une (et une seule) fois dans le modèle.

Macro : AFFICHER_BARRE_PROGRESSION
Thème : API              Type : MESSAGE         Membre source : DSPPRGBAR
Description : Affiche une barre de progression en message *STATUS

                                 Paramètres
N°     Désignation                          Lg.  Nd.   Contrôle
 1     Nombre en cours              E         8   0      OBLI

*-------- DEBUT MACRO-INSTRUCTION ---------------------------------*
* BPG_CUR_NBR : nombre en cours
BPG_CUR_NBR = :01
* BPG_CALC_PCT : pourcentage représenté par BPG_CUR_NBR
SI BPG_100_PCT > 0
 BPG_CALC_PCT H = BPG_CUR_NBR / ( BPG_100_PCT / 100 )
 BPG_CALC_PCT   = BPG_CALC_PCT / BPG_TRANCHE
 BPG_CALC_PCT   = BPG_CALC_PCT * BPG_TRANCHE
SINON
 BPG_CALC_PCT = 0
FIN
* ON N'AFFICHE QUE SI ON ATTEINT UNE NOUVELLE TRANCHE DE %
SI BPG_CALC_PCT >= BPG_NXT_PCT_DSP
 * Formater pourcentage --> BPG_FMT_PCT
 BPG_ALPHA_03 = BPG_CALC_PCT
 PLACER_TABLE BPG_ALPHA_03 BPG_FMT_PCT(1)
 BPG_I        = 1
 TANT_QUE BPG_FMT_PCT(BPG_I) = '0' ET BPG_I < 3
   BPG_FMT_PCT(BPG_I) = *BLANK
   BPG_I              = BPG_I + 1
 REFAIRE
 * Charger la table des points
 BPG_POINTS = *BLANK
 BPG_I      = BPG_CALC_PCT / 10
 BPG_J      = 0
 TANT_QUE BPG_J < BPG_I
   BPG_J             = BPG_J + 1
   BPG_POINTS(BPG_J) = '...'
 REFAIRE
 BPG_TEXTE = *BLANK
 BPG_TEXTE = BPG_TXT_40 /// ' : ' // BPG_FMT_PCT /// ' %' // BPG_X23 // BPG_POINTS // BPG_X22
 &ENVOYER_MESSAGE_STATUT(BPG_TEXTE)
 BPG_PRV_PCT_DSP = BPG_CALC_PCT
 BPG_NXT_PCT_DSP = BPG_PRV_PCT_DSP + BPG_TRANCHE
FIN
*-------- FIN MACRO-INSTRUCTION -----------------------------------*


Macro : ENVOYER_MESSAGE_STATUT
Thème : API              Type : MESSAGE         Membre source : SNDSTSMSG
Description : Envoi de message *STATUS

*-------- DEBUT MACRO-INSTRUCTION ---------------------------------*
*
* Identificateur message = CPF9898
MSG_MSG_ID      = *BLANK
MSG_MSG_ID      = 'CPF9898'
*
* Fichier de messages = *LIBL/QCPFMSG
MSG_MSGF_NAME   = *BLANK
MSG_MSGF_NAME   = 'QCPFMSG'
MSG_MSGF_LIB    = *BLANK
MSG_MSGF_LIB    = '*LIBL'
*
* Données du message = :01
MSG_MSG_DTA     = *BLANK
MSG_MSG_DTA     = :01
SI MSG_MSG_DTA  = *BLANK
 MSG_MSG_DTA   = 'Traitement en cours, veuillez patienter ...'
FIN
*
* Longueur données message = 130
VAR_BIN_API_01  = 130
*
* Type de message = *STATUS
MSG_MSG_TYPE    = *BLANK
MSG_MSG_TYPE    = '*STATUS'
*
* Call stack entry = *EXT
MSG_MSG_QUEUE   = *BLANK
MSG_MSG_QUEUE   = '*EXT'
*
* Call stack counter = 0
VAR_BIN_API_02  = 0
*
* Clé message = non utilisé
MSG_MSG_KEY     = *BLANK
*
* API à appeler = QMHSNDPM
PGM_API_01      = *BLANK
PGM_API_01      = 'QMHSNDPM'
*
ERRAPI_EXCPT_ID = *BLANK
ERRAPI_OCTETS_I = 116
ERRAPI_OCTETS_O = 0
APPELER &PGM_API_01 MSG_MSG_ID MSG_QUAL_MSGF MSG_MSG_DTA VAR_BIN_API_01 MSG_MSG_TYPE
    MSG_MSG_QUEUE VAR_BIN_API_02 MSG_MSG_KEY CODE_ERREUR_API
*-------- FIN MACRO-INSTRUCTION -----------------------------------*


                 
                                                                             
Macro : INITIALISER_BARRE_PROGRESSION                                      
Thème : API              Type : MESSAGE         Membre source : INZPRGBAR
Description : Initialise barre de progression
 
                                 Paramètres
N°     Désignation                          Lg.  Nd.   Contrôle
 1     Nombre représentant 100 %    E         8   0      OBLI
 2     Tranche d'évolution %        E         2   0      OBLI
 3     Texte                        E        40          OBLI


*-------- DEBUT MACRO-INSTRUCTION ---------------------------------*
DECLARER_TAB  £BPG01;BPG_FMT_PCT       1    3
DECLARER_TAB  £BPG02;BPG_POINTS        3   10
DECLARER      £BPG03;BPG_100_PCT       8;0
DECLARER      £BPG04;BPG_CALC_PCT      3;0
DECLARER      £BPG05;BPG_PRV_PCT_DSP   3;0
DECLARER      £BPG06;BPG_NXT_PCT_DSP   3;0
DECLARER      £BPG07;BPG_CUR_NBR       8;0
DECLARER      £BPG08;BPG_TRANCHE       2;0
DECLARER      £BPG09;BPG_I             2;0
DECLARER      £BPG10;BPG_J             2;0
DECLARER      £BPG11;BPG_TEXTE       130
DECLARER      £BPG12;BPG_X23           1
DECLARER      £BPG13;BPG_X22           1
DECLARER      £BPG14;BPG_ALPHA_03      3
DECLARER      £BPG15;BPG_TXT_40       40
*
BPG_X23 = &CONVERSION_CAR('23')
BPG_X22 = &CONVERSION_CAR('22')
* Nombre représentant 100 %
BPG_100_PCT = :01
* Tranche de pourcentages à afficher
BPG_TRANCHE = :02
SI BPG_TRANCHE < 1
 BPG_TRANCHE = 5
FIN
BPG_TXT_40 = *BLANK
BPG_TXT_40 = :03
SI BPG_TXT_40 = *BLANK
 BPG_TXT_40 = 'Traitement en cours'
FIN
* Précédent % affiché : n'importe quelle valeur < 0
BPG_PRV_PCT_DSP = 0 - 1
* Prochain % à afficher : 0
BPG_NXT_PCT_DSP = 0
*
&AFFICHER_BARRE_PROGRESSION(0)
*-------- FIN MACRO-INSTRUCTION -----------------------------------*



Macro :  DECLARER_VARIABLES_API                                              
Thème :  API              Type :                 Membre source :  DCLVARAPI  
Description : Déclaration variables et DS pour API

*-------- DEBUT MACRO-INSTRUCTION ---------------------------------*
*
* CODE ERREUR RETOURNÉ PAR L'API
DECLARER ERRC££;CODE_ERREUR_API   116
DECLARER £EBPR;ERRAPI_OCTETS_I      4;0
DECLARER £EBAV;ERRAPI_OCTETS_O      4;0
DECLARER £EXID;ERRAPI_EXCPT_ID      7
DECLARER £ERSV;ERRAPI_RESERVE       1
DECLARER £EDTA;ERRAPI_DATA        100
*
* NOM QUALIFIÉ D'OBJET (1)
DECLARER £QO01;OBJET_QUALIFIE     20
DECLARER £QO1N;QOBJ_NOM_OBJET     10
DECLARER £QO1L;QOBJ_BIB_OBJET     10
DECLARER £QO1T;QOBJ_TYP_OBJET     10
*
* NOM QUALIFIÉ D'OBJET (2)
DECLARER £QO02;OBJ_QUALIFIE_2     20
DECLARER £QO2N;QOBJ_NOM_OBJ_2     10
DECLARER £QO2L;QOBJ_BIB_OBJ_2     10
DECLARER £QO2T;QOBJ_TYP_OBJ_2     10
*
* NOM QUALIFIÉ DE JOB
DECLARER £QJB01;QJB_QUAL_JOB      26
DECLARER £QJB02;QJB_NAME          10
DECLARER £QJB03;QJB_USER          10
DECLARER £QJB04;QJB_NUMBER         6
*
* QUELQUES VARIABLES BINAIRES
DECLARER £BIN1;VAR_BIN_API_01      4;0
DECLARER £BIN2;VAR_BIN_API_02      4;0
DECLARER £BIN3;VAR_BIN_API_03      4;0
DECLARER £BIN4;VAR_BIN_API_04      4;0
DECLARER £BIN5;VAR_BIN_API_05      4;0
DECLARER £BIN6;VAR_BIN_API_06      4;0
DECLARER £BIN7;VAR_BIN_API_07      4;0
DECLARER £BIN8;VAR_BIN_API_08      4;0
DECLARER £BIN9;VAR_BIN_API_09      4;0
DECLARER £BINA;VAR_BIN_API_10      4;0
*
* NOM FORMAT API
DECLARER £FNAME;NOM_FORMAT_API     8
*
* NOMS PROGRAMMES API
DECLARER £PGM1;PGM_API_01         10
DECLARER £PGM2;PGM_API_02         10
DECLARER £PGM3;PGM_API_03         10
DECLARER £PGM4;PGM_API_04         10
DECLARER £PGM5;PGM_API_05         10
*
* VARIABLES POUR MANIPULATION USRSPC
DECLARER £USP01;USP_ATTRIBUTE     10
DECLARER £USP02;USP_INL_VALUE      1
DECLARER £USP03;USP_PUB_AUTH      10
DECLARER £USP04;USP_TEXTE         50
DECLARER £USP05;USP_REPLACE       10
DECLARER £USP06;USP_FIRST_RTV     16
DECLARER £USP07;USP_OFFSET         4;0
DECLARER £USP08;USP_ENTRY_NBR      4;0
DECLARER £USP09;USP_ENTRY_SIZE     4;0
DECLARER £USP10;USP_ATT_TO_CHG    16
DECLARER £USP11;USP_NBR_VLR        4;0
DECLARER £USP12;USP_KEY_TO_CHG     4;0
DECLARER £USP13;USP_KEY_LENGTH     4;0
DECLARER £USP14;USP_KEY_VALUE      4
DECLARER £USP15;USP_FRCAUXSTG      1
*
* VARIABLES POUR ENVOI MESSAGES
DECLARER £MSG01;MSG_MSG_ID         7
DECLARER £MSG02;MSG_MSGF_NAME     10
DECLARER £MSG03;MSG_MSGF_LIB      10
DECLARER £MSG04;MSG_QUAL_MSGF     20
DECLARER £MSG05;MSG_MSG_DTA      130
DECLARER £MSG06;MSG_MSG_TYPE      10
DECLARER £MSG07;MSG_MSG_QUEUE     10
DECLARER £MSG08;MSG_MSG_KEY        4
DECLARER £MSG09;MSG_ACTION        10
*
* VARIABLES POUR QUSRMBRD (DESCRIPTION MEMBRE)
DECLARER £MBD01;MBD_MBRD0200     244
DECLARER £MBD02;MBD_TEXTE         50
DECLARER £MBD03;MBD_NBR_CUR_RCD   4;0
DECLARER £MBD04;MBD_NBR_DLT_RCD   4;0
DECLARER £MBD05;MBD_NOM_MEMBRE   10
DECLARER £MBD06;MBD_OVR_PROCESS   1
DECLARER £MBD07;MBD_LIB          10
DECLARER £MBD08;MBD_MBR_NAME     10
DECLARER £MBD09;MBD_FILLER        1
*
* VARIABLES POUR QWCRJBST (STATUT JOB)
DECLARER £JST01;JST_RCV_VAR       60
*
* VARIABLES POUR API HFS
DECLARER £HFS01;HFS_PATH_NAME    75
DECLARER £HFS02;HFS_OPEN_INFO     6
DECLARER £HFS03;HFS_ATT_SLT_TBL   4
DECLARER £HFS04;HFS_DATA_BUFFER  45
*
* LES DATA STRUCTURES
DSI CODE_ERREUR_API ERRAPI_OCTETS_I,1B ERRAPI_OCTETS_O,5B ERRAPI_EXCPT_ID,9
     ERRAPI_RESERVE,16 ERRAPI_DATA,17
DSI OBJET_QUALIFIE  QOBJ_NOM_OBJET,1 QOBJ_BIB_OBJET,11
DSI OBJ_QUALIFIE_2  QOBJ_NOM_OBJ_2,1 QOBJ_BIB_OBJ_2,11
DSI QJB_QUAL_JOB    QJB_NAME,1 QJB_USER,11 QJB_NUMBER,21
DSI BINY££          VAR_BIN_API_01,1B VAR_BIN_API_02,5B VAR_BIN_API_03,9B
     VAR_BIN_API_04,13B VAR_BIN_API_05,17B VAR_BIN_API_06,21B VAR_BIN_API_07,25B
     VAR_BIN_API_08,29B VAR_BIN_API_09,33B VAR_BIN_API_10,37B
DSI USP_FIRST_RTV   USP_OFFSET,1B USP_ENTRY_NBR,9B USP_ENTRY_SIZE,13B
DSI USP_ATT_TO_CHG  USP_NBR_VLR,1B USP_KEY_TO_CHG,5B USP_KEY_LENGTH,9B USP_KEY_VALUE,13
DSI MSG_QUAL_MSGF   MSG_MSGF_NAME,1 MSG_MSGF_LIB,11
DSI MBD_MBRD0200    MBD_LIB,19 MBD_MBR_NAME,29 MBD_TEXTE,85 MBD_NBR_CUR_RCD,141B
     MBD_NBR_DLT_RCD,145B MBD_FILLER,244
*
* LONGUEUR CODE ERREUR API
ERRAPI_OCTETS_I = 116
*-------- FIN MACRO-INSTRUCTION -----------------------------------*