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  2000

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 -----------------------------------*