Bonjour à tous,

Je vous propose aujourd’hui l’affichage sur l’AS400 d’une barre de progression, histoire de faire patienter vos utilisateurs lors de traitements assez longs.



Avant toute chose, l’affichage d’une telle barre impose que vous connaissiez par avance le nombre maximal d’itération de votre programme, afin de pouvoir déterminer le pourcentage d’avancement.

Voilà la marche à suivre :

Dans votre écran, rajouter le format suivant :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
     A*=========================================================================
     A          R ££WIN
     A*=========================================================================
     A                                      INVITE
     A                                      OVERLAY
     A                                      WINDOW(10 15 3 50 *NOMSGLIN)
     A                                      WDWTITLE((*TEXT 'Recherche en cour-
     A                                      s ...') (*COLOR RED) (*DSPATR BL))
     A                                      WDWBORDER((*COLOR PNK))
     A            £PRC          50A  O  2  1DSPATR(RI)
Compiler ensuite votre écran avec l’option WAITRCD( *IMMED )

Dans votre programme, voilà les quelques déclarations à rajouter :

Sur la définition de l’écran, rajouter l’option MAXDEV(*FILE)

Code : Sélectionner tout - Visualiser dans une fenêtre à part
     FFIND      CF   E             WORKSTN MAXDEV(*FILE)
On va ensuite déclarer les zones pour l'affichage du pourcentage

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
     D I               S              2  0
     D GRN             C                   X'20'

      * Pourcentage

     D  £PRC           DS
     D   TA                           1    DIM( 50 )
     D   NP                   24     25  0
     D   AP                   26     26    INZ( '%' )
Il ne reste plus ensuite qu’à insérer l'affichage de la fenêtre dans votre boucle

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
     C                   IF        NBACTUEL < NBMAX
     C                   RESET                   £PRC
     C                   EVAL      NP = 100 * NBACTUEL / NBMAX
     C                   EVAL      I = NP / 2 + 1
     C                   EVAL      TA( I ) = GRN
     C                   WRITE     ££WIN                                98
     C                   ENDIF
Et c’est tout. La barre de progression s’affichera progressivement au fur et à mesure de l’avancement de votre traitement.
Dans l'exemple ci-dessus, NBMAX représente le nombre maximal d'itération, NBACTUEL l'itération en cours. A vous de les remplacer par vos propres compteurs.

Attention : Cet affichage est assez gourmand en ressources. Il est généralement préférable de mémoriser la valeur de I et de ne faire le write de la fenêtre que lorsque sa valeur change. Et même dans ce cas, les 100 affichages générés vont vous faire perdre plusieurs secondes au final.

En espérant que ça vous plaise…