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 :
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)
FFIND CF E WORKSTN MAXDEV(*FILE)
On va ensuite déclarer les zones pour l'affichage du pourcentage
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
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…
Partager