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/