Utiliser un sous fichier à cocher
Vous pouvez utilisez des sous fichiers pour faire des sélections par case à cocher, ce qui améliore la gestion des écrans pour les utilisateurs
Voici 2 exemples
Sélection unique
Mot clé SFLSNGCHC,
https://www.ibm.com/docs/en/i/7.4?topic=dkedfp4t8-sflsngchc-subfile-single-choice-selection-list-keyword-display-files
Le DSPF
A*%%TS SD 20231024 203749 QSECOFR REL-V7R4M0 5770-WDS
A* SOUS FICHIER À CHOIX MULTIPLE
A*
A*%%EC
A DSPSIZ(24 80 *DS3)
A CA03(03)
A R SFL01 SFL
A* ZONE À COCHER
A ZONCTL 1Y 0H SFLCHCCTL
A ZONE 10A O 4 10
A R CTL01 SFLCTL(SFL01)
A*%%TS SD 20231024 203749 QSECOFR REL-V7R4M0 5770-WDS
A SFLPAG(0005)
A WINDOW(5 5 9 31)
A* SOUS FICHIER A SELECTION UNIQUE
A SFLSNGCHC(*SLTIND *AUTOSLT)
A* TAILLE DYNAMIQUE À FOURNIR
A SFLSIZ(&SFLSIZ)
A SFLDSP
A SFLDSPCTL
A 41 SFLCLR
A 45 SFLEND(*SCRBAR *SCRBAR)
A* LIGNE EN COURS < FOURNIT PAR LE SYSTÈME
A DEMANDE 5S 0H SFLSCROLL
A* LIGNE DE LA PAGE À AFFICHER > A FOURNIR PAR LE PROGRAMME
A LIGNE 4S 0H SFLRCDNBR(*TOP)
A* TAILLE DU SOUS FICHIER > A FOURNIR PAR LE PROGRAMME
A SFLSIZ 5S 0P
A* CLÉ DU SOUS FICHIER
A CLE01 4Y 0H
A 2 01'Sous Fichier Sélection Simple'
Le RPGLE
**free
// sous fichier à choix unique
ctl-opt DFTACTGRP(*NO) ;
dcl-f BOUTON8 WORKSTN
SFILE(sfl01:cle01) ;
dcl-s i int(10) ;
// Initialisation du sous fichier
SFLSIZ = 10;
LIGNE = 1;
cle01 = 0 ;
*in41 = *on ;
write ctl01 ;
*in41 = *off ;
// Chargement du sous fichier
cle01 = cle01+1 ;
zone = 'AAAAAAAAA' ;
Write sfl01;
cle01 = cle01+1 ;
zone = 'BBBBBBBBB' ;
Write sfl01;
cle01 = cle01+1 ;
zone = 'CCCCCCCCC' ;
Write sfl01;
cle01 = cle01+1 ;
zone = 'DDDDDDDDD' ;
Write sfl01;
cle01 = cle01+1 ;
zone = 'EEEEEEEEE' ;
Write sfl01;
cle01 = cle01+1 ;
zone = 'FFFFFFFFF' ;
Write sfl01;
cle01 = cle01+1 ;
zone = 'GGGGGGGGG' ;
Write sfl01;
cle01 = cle01+1 ;
zone = 'HHHHHHHHH' ;
Write sfl01;
cle01 = cle01+1 ;
zone = 'IIIIIIIII' ;
Write sfl01;
cle01 = cle01+1 ;
zone = 'JJJJJJJJJ' ;
Write sfl01;
cle01 = cle01+1 ;
zone = 'KKKKKKKKK' ;
Write sfl01;
// Boucle d'affichage
dou *in03 ;
exfmt ctl01 ;
if not *in03;
// Lecture de l'enregistrement sélectionné
readc sfl01 ;
if not %eof() ;
dsply zone ;
ZONCTL = 0 ;
update(e) sfl01 ;
LIGNE = demande ;
endif ;
endif ;
enddo ;
*inlr = *on ;
Sélection multiple
Mot clé SFLMLTCHC
https://www.ibm.com/docs/en/i/7.4?topic=dkedfp4t8-sflmltchc-subfile-multiple-choice-selection-list-keyword-display-files
Le DSPF
A*%%TS SD 20231025 044340 QSECOFR REL-V7R4M0 5770-WDS
A* SOUS FICHIER À CHOIX MULTIPLE
A*
A*%%EC
A DSPSIZ(24 80 *DS3)
A CA03(03)
A R SFL01 SFL
A* ZONE À COCHER
A ZONCTL 1Y 0H SFLCHCCTL
A ZONE 10A O 4 10
A R CTL01 SFLCTL(SFL01)
A*%%TS SD 20231025 043531 QSECOFR REL-V7R4M0 5770-WDS
A SFLDSP
A SFLDSPCTL
A 41 SFLCLR
A 45 SFLEND(*SCRBAR *SCRBAR)
A* TAILLE DYNAMIQUE À FOURNIR
A SFLSIZ(&SFLSIZ)
A SFLPAG(0005)
A WINDOW(5 5 9 31)
A* SOUS FICHIER A SELECTION MULTIPLE
A SFLMLTCHC(&NBSEL *SLTIND)
A* LIGNE EN COURS < FOURNIT PAR LE SYSTÈME
A DEMANDE 5S 0H SFLSCROLL
A* LIGNE DE LA PAGE À AFFICHER > A FOURNIR PAR LE PROGRAMME
A LIGNE 4S 0H SFLRCDNBR(*TOP)
A* TAILLE DU SOUS FICHIER > A FOURNIR PAR LE PROGRAMME
A SFLSIZ 5S 0P
A* NOMBRE DE SELECTIONS < FOURNIT PAR LE SYSTÈME
A NBSEL 4Y 0H
A* CLÉ DU SOUS FICHIER
A CLE01 4Y 0H
A 2 1'Sous Fichier Sélection Multiple'
A DSPATR(HI)
Le RPGLE
**free
// sous fichier à choix multiple
ctl-opt DFTACTGRP(*NO) ;
dcl-f BOUTON7 WORKSTN
SFILE(sfl01:cle01) ;
dcl-s i int(10) ;
// Initialisation du sous fichier
SFLSIZ = 10;
LIGNE = 1;
cle01 = 0 ;
*in41 = *on ;
write ctl01 ;
*in41 = *off ;
// Chargement du sous fichier
cle01 = cle01+1 ;
zone = 'AAAAAAAAA' ;
Write sfl01;
cle01 = cle01+1 ;
zone = 'BBBBBBBBB' ;
Write sfl01;
cle01 = cle01+1 ;
zone = 'CCCCCCCCC' ;
Write sfl01;
cle01 = cle01+1 ;
zone = 'DDDDDDDDD' ;
Write sfl01;
cle01 = cle01+1 ;
zone = 'EEEEEEEEE' ;
Write sfl01;
cle01 = cle01+1 ;
zone = 'FFFFFFFFF' ;
Write sfl01;
cle01 = cle01+1 ;
zone = 'GGGGGGGGG' ;
Write sfl01;
cle01 = cle01+1 ;
zone = 'HHHHHHHHH' ;
Write sfl01;
cle01 = cle01+1 ;
zone = 'IIIIIIIII' ;
Write sfl01;
cle01 = cle01+1 ;
zone = 'JJJJJJJJJ' ;
Write sfl01;
cle01 = cle01+1 ;
zone = 'KKKKKKKKK' ;
Write sfl01;
// Boucle d'affichage
dou *in03 ;
exfmt ctl01 ;
if not *in03;
// Traitement des enregistrements cochés
for i = 1 to nbsel ;
readc sfl01 ;
if not %eof();
dsply zone ;
ZONCTL = 0 ;
update(e) sfl01 ;
LIGNE = demande ;
endif ;
endfor;
endif ;
enddo ;
*inlr = *on ;
Remarques:
Vous devez compiler avec l’option ENHDSP(*YES)
Pour les sélection simple , vous pouvez utiliser une alternative aux cases à cocher, SFLCSRRRN qui renvoit la clé de l’enregistrement lu sans faire un READC