Pour revenir à la question de base, on parle bien de COBOL mais de techniques de programmation spécifiques à CICS, donc effectivement sous z/OS.
Comme l'on fait des EXEC SQL pour DB2, la compilation d'un COBOL CICS passera par l'appel du précompilateur CICS pour traduire les ordres EXEC CICS en ordres, CALL notamment reconnus par le compilateur COBOL.
S'agissant de techniques de programmation, l'utilisation d'une commarea comme zone de communication pourra en fonction de besoins fonctionnels être complétée par l'utilisation de TS qui représentent en fait des segments mémoires accessibles à tout programme s'exécutant sous CICS.
- La commarea tout d'abord.
C'est la zone de communication que l'on passe pour appeler un programme :
1 2 3 4 5 6
| EXEC CICS LINK
PROGRAM (WS-MYPGM)
COMMAREA (WS-COMMAREA)
LENGTH (length of WS-COMMAREA)
RESP (WS-CICS-RESP)
END-EXEC. |
ou une transaction :
1 2 3 4 5 6
|
EXEC CICS RETURN
TRANSID (WS-TRANSID)
COMMAREA (WS-COMMAREA)
LENGTH (length of WS-COMMAREA)
END-EXEC. |
Le précompilateur va ajouter un using de deux groupes dans la procédure division, donc 2 niveaux 01 déclarés en Linkage Section.
Un 01 DFHCOMMAREA, en géneral suivi d'une copy COBOL pour détail des données fonctionnelles contenues. Le second, ajouté par le pré-compilateur CICS est un bloc EIB, alimenté par CICS qui contient un certain nombre d'informations de gestion CICS qui pourront être ensuite utilisées par le programme.
EIBCALEN en particulier qui permet de connaitre la taille de la COMMAREA reçue, souvent utilisé en programmation pseudo conversationnelle pour savoir si on est en premier appel ou non (EIBCALEN = ou > 0).
EIBTRMID et EIBTRNID également, qui permettent de connaître le code transaction el le terminal d'exécution, couple souvent utilisé comme identifiant constitutif du nom d'une TS.
- La TS ensuite.
Il s'agit de blocs de mémoire dont la création à été demandée à CICS exemple :
1 2 3 4 5
|
EXEC CICS WRITEQ TS QUEUE (WS-TS-NOM)
FROM (WS-TS-DATA)
LENGTH (WS-TS-LENGTH)
END-EXEC. |
L'intérêt fonctionnel :
- La TS crée sera accessible par tout programme s'exécutant dans le CICS. A commencer par le test d'un code retour au READQ TS
(l'info d'existance ou pas d'une TS peut également être une information de gestion utile)
- On peut créer des TS à ITEM que l'on peut voir comme autant d'enregistrements (en mémoire) de communication.
Bien entendu si la logique des TS à un intérêt fonctionnel évident pour stoquer des informations en mémoire donc plus performant que des accès fichiers, la multiplication de ces TS en mémoire virtuelle accessible par CICS finira par se faire au détriment du reste de ce qui devra être chargé en mémoire par CICS, à commencer par le code d'exécution des programmes et leurs différentes Working Storage Section utilisées, chargées distinctement en mémoire virtuelle.
Il faudra donc fonctionnellement éviter les TS à ralonge inutiles et penser à faire un EXEC CICS DELETQ des TS dont on n'a plus besoin. Souvent sur les sites les gestionnaires CICS ont mis en place des outils pout éviter cette inflation. Par exemple delete de toutes les TS dont le nom comporte un indentifiant terminal qui n'est plus connecté.
L'autre inconvénient est qu'en cas d'arrêt/relance d'un CICS, les TS sont perdues puisque c'est de la mémire CICS.
Partager