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