, Mettre un délai sur un programme 5250

Vous avez tous des enregistrements qui restent verrouillés dans vos traitements 5250, par exemple parce que la personne à quitter son poste.

Vous voulez donc qu’au bout d’un certain temps, votre programme déverrouille l’enregistrement

Vous avez une première solution qui est système

Elle se base sur les valeurs systèmes

QINACTITV qui indique un délai en seconde
QINACTMSGQ ou vous indiquez:
Une MSGQ, un message CPI1126 sera envoyé, à vous de mettre en place un watcher qui analyse et traite ces messages
*DSCJOB votre travail sera déconnecté et le système tentera de vous reconnecter (attention ca ne déverrouille pas toutes les ressources)
*ENDJOB votre travail sera arrêté, et donc tous sera libéré avec risques de déphasage dans votre base de données.

Mais vous pouvez être plus précis en le prévoyant dans les développements que vous ciblerez comme étant sensible, voici un exemple ci-dessous .

Notre exemple commenté

Dans le DSPF, vous devrez compiler votre écran avec un paramètre WAITRCD(délai en secondes), passer ce délai le système quittera le READ en attente.

Vous pouvez également indiquer ce paramètre temporairement par la commande OVRDSPF

Dans le programme RPGLE

Vous devrez indiquer l’option maxdev(*file) sur votre écran (c’est celle qui vous permet d’avoir plusieurs travails sur le même écran, pour faire une bataille navale par exemple)

Dans votre traitement vous ne pouvez pas utiliser l’instruction EXFMT (qui est un condensé d’un write et d’un read)

Vous devez explicitement indiquer les 2 instructions

WRITE du format ;
READ du fichier ;

Pour tester et savoir si vous avez dépassé le delai, vous pouvez tester la fonction %status qui vous renverra la valeur 01331 si vous avez débordé, vous pouvez également utiliser L’infds de votre écran.

Voici un exemple ou on a mis que ce qui est indispensable, à vous d’ajouter ce qui sera nécessaire à votre cas .

L’écran DSPF

A* OPTIONS DE COMPILE pour GDDS -------------------->          
A*<COMP>WAITRCD(60)</COMP>                                      
A* ------------------------------------------------->          
A*                                                         
A                                      DSPSIZ(24 80 *DS3)      
A                                      CA03(03)                
A                                      INDARA                  
A          R FMT01                                             
A* 
A                                      INVITE                  
A                                  5  3'Votre format de saisie'
A                                  7 12'Zone 1 :'              
A            ZONE1          4   B  7 23                        
A                                 22  2'F3=Exit'               

Dans notre exemple nous utilisons GDDS qui permet de mémoriser les options de compile pour les DSPF chez vous, vous devrez le mettre dans la commande de création de votre écran

==>CRTDSPF … WAITRCD(60) …

Le RPGLE

**free                                                    
// Ecran compiler avec WAITRCD(60)                          
dcl-f TESTDSPF workstn                                    
 maxdev(*file) ;                                          
 //                                                       
   dou     *in03        ;                                 
  // remplace un EXFMT insensible au Paramètre WAITRCD    
       write FMT01   ;                                    
       read(e) TESTDSPF ;                                 
  // 11331 indique que le temps est dépassé               
  select  ;                                               
  when  (%status  = 01331) ;                              
       dsply  'temps dépassé ...' ;                       
       *in03  = *on ;                                     
  // F3 activé                                            
  when *in03   ;                                          
       dsply  'sortie demandée .' ;                       
  // Touche entrée avec  lecture des zones                                      
  other    ;                                              
       dsply  'validation ok ...' ;
  endsl    ;                       
 enddo  ;                          
//                                 
*inlr = *on ;

Conclusion :

C’est simple et efficace et certains traitements devraient avoir cette option

Vous pouvez aussi utiliser facilement cette technique pour faire du rafraichissement auto, par exemple un tableau de bord toutes les 3 minutes …

Voir également cet exemple en CLP dans un article précédent ici : https://www.gaia.fr/reaffichage-automatique-dun-dspf/