Tous les articles par Mr COBOL

CICS – CICS RETURN

Commande CICS RETURN :

La commande RETURN passe le contrôle au niveau supérieur suivant. Lorsque le programme est au niveau logique le plus élevé sous CICS (niveau 1), la commande RETURN redonne le contrôle à CICS.

Syntaxe:

EXEC CICS
           RETURN
           [TRANSID(next-id)]
           [COMMAREA(comm-area)]
           [LENGTH(longueur)]
END-EXEC.
  • TRANSID
    Spécifie le prochain identifiant de transaction à exécuter à partir du terminal associé à la transaction en cours. Il s’agit de la transaction qui est exécutée la prochaine fois que le terminal envoie une entrée. Cela ne peut être émis que par des transactions au niveau logique 1.
  • COMMAREA
    Un paramètre facultatif. C’est le nom de la zone contenant les données à transmettre à la prochaine transaction qui sera exécutée sur ce terminal. LENGTH spécifie la longueur de la COMMAREA.

Lorsque le contrôle est rendu à CICS, deux options supplémentaires de la commande RETURN peuvent être spécifiées :

  • La prochaine transaction peut être spécifiée pour être exécutée lorsque la prochaine entrée provient du même terminal. Cette option permet de développer des applications en mode pseudo conversationnel dont il sera question plus loin.
  • Les données à transmettre à la transaction suivante peuvent être spécifiées.

Exemple:

Retour simplifié :

Le sous-programme vient d’émettre un RETURN sans aucune option comme ci-dessous.

EXEC CICS
    RETURN
END-EXEC.

Par exemple, si certaines données doivent être renvoyées au programme appelant, elles peuvent être renvoyées via commarea. Pour cela, les données requises doivent être remplies dans DFHCOMMAREA avant d’émettre la déclaration.

MOVE WW-CUST-DATA TO DFHCOMMAREA.
EXEC CICS
    RETURN
END-EXEC.

Option de retour avec ID de transaction :

EXEC CICS RETURN
     TRANSID(WS-TRAN-ID)
     COMMAREA(WS-COMM-AREA)
     LENGTH(WS-COMM-LGTH)
END-EXEC.

Cette option est généralement utilisée dans les programmes impliquant des écrans. Une fois que l’écran initial renvoie le contrôle à l’écran et lorsque l’utilisateur saisit des clés d’identification d’attention, l’identifiant de transaction spécifié devient actif et la commarea envoyée sera utilisée dans ce processus.

CICS – CICS LOAD

La commande LOAD est utilisée pour charger un programme ou une table qui est indépendamment compilé ou assemblé et édité par lien et enregistré dans PPT.

Cette commande est utile pour charger dynamiquement une table ou un programme d’application. Autrement dit, en tant qu’application, une table peut être codée dans Assembler, assemblée et éditée en lien. Ensuite, le programme COBOL peut le charger en tant que table.

Syntaxe:

EXEC CICS LOAD
    PROGRAM(Nom Programme)
    SET(Reference Pointer)
    LENGTH(longueur)
    ENTRY(Reference Pointer)
    HOLD
END-EXEC.

Description:

  • PROGRAM
    Programme à charger dans l’espace d’adressage CICS
  • SET
    Référence du pointeur à l’adresse de Table/Programme/Carte
  • LENGTH
    S9(4) COMP. Longueur du module (si longueur < 32 k)
  • HOLD
    Module résidant en mémoire même lorsque la tâche se termine

Exemple:

EXEC CICS LOAD
    PROGRAM(PGM1)
    SET(ADDRESS DE LK-ITEM)
    LENGTH(WS-LONGUEUR)
END-EXEC.

Le programme PGM1 est chargé et l’adresse du programme ou de la table est mappée sur LK-ITEM et ainsi la table peut être accédée en utilisant la liaison sont LK-ITEM. La taille de l’élément de liaison est WS-LONGUEUR.

Si le mot-clé ‘HOLD’ est codé dans la commande LOAD, le programme ou la table chargé(e) sera résident(e) permanent(e) jusqu’à sa libération explicite. S’il n’est pas mentionné, la fin de la tâche libère le programme ou la table.


Exceptions de la commande LOAD :

  1. PGMIDERR – Programme introuvable
  2. LEGERR – Module de charge > 32 K
  3. NOAUTH – Erreur de contrôle de sécurité

CICS – CICS RELEASE

La commande de libération est utilisée pour libérer un programme ou une table qui a été chargé précédemment.

Le nom du programme doit être spécifié dans le paramètre PROGRAMME.

Syntaxe:

EXEC CICS RELEASE
    PROGRAM(Nom Programme)
END-EXEC.

Description:

  • PROGRAM – Nom du programme à lancer

Exemple:

EXEC CICS RELEASE
    PROGRAM(PGM1)
END-EXEC.

La commande RELEASE ci-dessus est utilisée pour libérer le programme PGM1.

CICS – QUEUE

Deux types de files d’attente sont disponibles dans CICS.

  1. File d’attente de stockage temporaire (TSQ : Temporary Storage Queue )
  2. File d’attente de données transitoires (TDQ : Transient Data Queue)

TSQ – Temporary Storage Queue :
(File d’attente de stockage temporaire)

  • Pas besoin de prédéfinir n’importe où. Par défaut, les files d’attente TS sont créées dans la mémoire principale. Ainsi, le contenu ne peut pas être récupéré après un crash du système. Si vous souhaitez récupérer, vous devez les définir dans TST.
  • Les enregistrements peuvent être consultés de manière aléatoire à l’aide de l’option ITEM de READQ. READ n’est pas destructeur.
  • La suppression de la file d’attente supprime tous les enregistrements qu’elle contient. La suppression du TSQ récupérable doit suivre le point de synchronisation avant le prochain WRITEQ.
  • Principalement utilisé comme installation de mémoire de bloc-notes à toutes fins.
  • Exemple : logique de page vers le haut et de page vers le bas, transmission d’énormes données entre les phases de transaction, révision et correction de plusieurs écrans de saisie de commande.

WRITEQ TS :

Il est utilisé pour ajouter des éléments à un TSQ existant. De plus, nous pouvons créer un nouveau TSQ à l’aide de cette commande. Vous trouverez ci-dessous la syntaxe de la commande WRITEQ TS.

EXEC CICS WRITEQ TS
   QUEUE('nom-queue')
   FROM(queue-record)
   [LENGTH(queue-record-longueur)]
   [ITEM(item-numbre)]
   [REWRITE]
   [MAIN/AUXILIARY]
END-EXEC.
  • La QUEUE est identifiée par le nom qui est mentionné dans ce paramètre.
  • Les options FROM et LENGTH sont utilisées pour spécifier l’enregistrement à écrire dans la file d’attente et sa longueur.
  • Si l’option ITEM est spécifiée, CICS affecte un numéro d’élément à l’enregistrement dans la file d’attente et définit la zone de données fournie dans cette option sur le numéro d’élément. Si l’enregistrement démarre une nouvelle file d’attente, le numéro d’article attribué est 1 et les numéros d’article suivants suivent séquentiellement.
  • L’option REWRITE permet de mettre à jour un enregistrement déjà présent dans la file d’attente.
  • L’option MAIN / AUXILIARY est utilisée pour stocker les enregistrements dans la mémoire principale ou auxiliaire. La valeur par défaut est AUXILIARY .

READQ TS :

Il est utilisé pour lire la file d’attente de stockage temporaire. ci-dessous est la syntaxe de READQ TS.

EXEC CICS READQ TS
   QUEUE('nom-queue')
   INTO(queue-record)
   [LENGTH(queue-record-longueur)]
   [ITEM(item-numbre)]
   [NEXT]
END-EXEC.

DELETEQ TS :

Cette commande est utilisée pour supprimer la file d’attente de stockage temporaire. Voici la syntaxe de DELETEQ TS.

EXEC CICS DELETEQ TS
   QUEUE('nom-queue')
END-EXEC.

TDQ – Transient Data Queue :
(File d’attente de données transitoires)

  • TDQ doit être prédéfini dans DCT.
  • READ est destructif et uniquement séquentiel. Une fois l’enregistrement lu, il sera logiquement supprimé et ne pourra plus être relu.
  • Lancement automatique de la tâche : lorsque le nombre d’enregistrements dans la file d’attente dépasse le TRIGLEV défini dans l’entrée DFHDCT de la file d’attente, la transaction codée dans le TRANSID de DFHDCT est automatiquement déclenchée. Cet ATI n’est possible qu’en TDQ.
  • Il existe deux types de TDQ – partition Intra et Extra. L’entrée DCT identifie le type de file d’attente à partir du paramètre TYPE.
  • Les files d’attente intra partition sont utilisées dans une région CICS et DELETEQ supprime physiquement tous les enregistrements de la file d’attente.
  • Des files d’attente de partition supplémentaires sont utilisées dans les régions et les systèmes. Si vous souhaitez transmettre des données de CICS à un lot ou recevoir des données de Batch à CICS, vous devez opter pour une file d’attente de partition supplémentaire.

WRITEQ TD :

Il est utilisé pour écrire des files d’attente de données transitoires et elles sont toujours écrites dans un fichier. ci-dessous la syntaxe de la commande WRITEQ TD.

EXEC CICS WRITEQ TD
   QUEUE('nom-queue')
   FROM(queue-record)
   [LENGTH(queue-record-longueur)]
END-EXEC.

READQ TD :

Il est utilisé pour lire la file d’attente des données transitoires. Vous trouverez ci-dessous la syntaxe de READQ TD.

EXEC CICS READQ TD
   QUEUE('nom-queue')
   INTO(queue-record)
   [LENGTH(queue-record-longueur)]
END-EXEC.

DELETEQ TD :

Il est utilisé pour supprimer la file d’attente des données transitoires. Voici la syntaxe de DELETEQ TD.

EXEC CICS DELETEQ TD
   QUEUE('nom-queue')
END-EXEC.

CICS – Gestion des exceptions

 Une situation anormale peut survenir lors de l’exécution d’une commande CICS. C’est ce qu’on appelle une « condition d’exception ». Chaque commande CICS possède son propre ensemble de conditions d’exception possibles. Il est fortement recommandé de vérifier les éventuelles conditions d’exception après chaque commande CICS.

Une condition exceptionnelle est générée lorsqu’une commande CICS rencontre une situation inhabituelle

  • La tâche est anormalement terminée
  • Un code de fin anormale s’affiche et identifie la condition exceptionnelle

CICS fournit un certain nombre d’options de programmation applicables à chaque choix mentionné ci-dessous,

  1. RESP
    CICS définit un code de réponse principal et parfois un code de réponse secondaire lorsqu’il termine une commande et vous propose des options pour les inspecter.
  2. HANDLE CONDITION
    La condition HANDLE est utilisée pour transférer le contrôle du programme à un paragraphe ou à une étiquette de procédure.
  3. IGNORE CONDITION
    La condition Ignorer est utilisée lorsque nous voulons qu’aucune action ne soit entreprise si une fin anormale ou une erreur particulière se produit, ce qui est mentionné dans la condition Ignorer.
  4. HANDLE ABEND
    Si un programme se termine anormalement pour des raisons telles qu’une erreur d’entrée-sortie, il peut être géré à l’aide de la commande Handle Abend CICS.
  5. ABEND
    La commande Abend est utilisée pour mettre fin intentionnellement à la tâche.
  6. NOHANDLE
    Aucun handle ne peut être spécifié pour n’importe quelle commande CICS.

CICS – Option RESP

L’option RESP peut être spécifiée dans n’importe quelle commande CICS. Sa fonction est similaire au code retour d’un programme batch. Si l’option RESP est spécifiée dans une commande, CICS place un code de réponse à la fin de la commande. Le programme d’application peut vérifier ce code, puis passer au traitement suivant.

CICS a une fonction intégrée appelée DFHRESP qui nous permet de tester symboliquement la valeur RESP. Cela facilite le codage car nous n’avons pas à nous souvenir de la valeur numérique de nombreux codes de réponse.

  • Si WS-RESP = DFHRESP(NORMAL)
  • Si WS-RESP = DFHRESP(LENGERR)

Alternativement, nous pouvons rechercher la valeur numérique de EIBRESP associée à ces conditions et coder les déclarations ci-dessus comme suit :

  • Si WS-RESP = 00
  • Si WS-RESP = 22

Pour une liste des codes EIBRESP avec leurs équivalents symboliques, reportez-vous au tableau ci-dessous :

ConditionValeur
NORMAL00
NOTFND13
DUPREC14
INVREQ16
NOSPACE18
NOTOPEN19
ENDFILE20
LEGERR22
QZERO23
QBUSY25
ITEMERR26
PGMIDERR27
ENDDATA29
MAPFAIL36
QIDERR44
ENQBUSY55
DISABLED84

Cette approche présente un avantage par rapport à l’approche HANDLE CONDITION, car elle rend le programme plus structuré.

Procédure d’utilisation de l’option RESP dans une commande CICS

  1. Définissez un champ binaire de mot complet (S9 (8) COMP) dans la section de stockage de travail comme champ de réponse.
  2. Placez l’option RESP avec le champ de réponse dans une commande.
  3. Après l’exécution de la commande, vérifiez le code de réponse dans le champ de réponse avec DFHRESP(xxxx), où xxxx est :
    • NORMAL pour un achèvement normal
    • Erreur pour toute condition exceptionnelle

Exemple:

...
WORKING-STORAGE SECTION.
77 WS-RETNCODE        PIC S9(8) COMP.

PROCEDURE DIVISION.
..
    EXEC CICS SEND
        FROM(   )
        LENGTH(   )
        ERASE(   )
        RESP(WS-RETNCODE)
    END-EXEC.

    EVALUETE TRUE
        WHEN WS-RETNCODE = DFHRESP(NORMAL)
              GO TO NORMAL-PARA
        WHEN WS-RETNCODE = DFHRESP(LENGERR)
              GO TO LENGERR-PARA
    END-EVALUATE.

Description:

Pendant l’exécution de ce programme, les fonctions suivantes doivent se produire :

  • A la fin de la commande SEND, le champ WS-RETCODE contiendra le code de réponse du résultat d’exécution de la commande.
  • Si la commande SEND se termine normalement, le contrôle sera passé à NORMAL-PARA.
  • Si un LENGERR est rencontré, le contrôle sera passé à LENGERR-PARA.
  • Les autres exceptions sont :
    1. PGMIDERR – Programme introuvable
    2. LEGERR – Module de charge > 32 K
    3. NOAUTH – Erreur de contrôle de sécurité
  • Si une autre condition exceptionnelle est rencontrée, le contrôle sera passé à GENERAL-ERR-PARA.
  • Les EXCEPTIONS générales sont :
    1. LEGERR – Incompatibilité de longueur d’enregistrement avec le fichier
    2. INVREQ – Opération de lecture non autorisée car elle n’est pas mentionnée dans le FCT. L’enregistrement est verrouillé
    3. NOAUTH – L’acquisition de ressources a échoué
    4. NOTFND – Enregistrement introuvable
    5. ENDFILE – Fin du fichier
    6. QIDERR – Entrée DCT introuvable pour le ‘Q’
    7. NOSPACE – pas d’espace disponible dans TDQ
    8. QZERO – plus d’éléments à lire dans le ‘Q’

CICS – HANDLE CONDITION

Pour passer le contrôle à une étiquette spécifiée. Bien que l’utilisation de l’option RESP soit recommandée pour gérer les conditions du programme, la commande CICS HANDLE CONDITION est une autre méthode de gestion de diverses conditions CICS anticipées ou inattendues.

Chaque commande CICS possède sa propre liste d’exceptions. Un exemple est l’exception MAPFAIL de la commande RECEIVE. HANDLE CONDITION est utilisé pour transférer le contrôle à la procédure appropriée sur les exceptions attendues. La condition HANDLE ne peut pas suivre le programme interrompu ABENDS comme S0C4 ou S0C7. Il ne traite que des exceptions des commandes CICS.

Les conditions traitées sont effectives à partir de leur apparition jusqu’à la fin du programme. Une condition de poignée peut être remplacée par une autre condition. Les principales conditions du programme ne seront pas effectives dans les sous-programmes.

Syntaxe:

EXEC CICS HANDLE CONDITION
    ERROR(ERROR-MESSAGE)
END-EXEC

La commande HANDLE Condition est exécutée avant que la condition ne soit rencontrée, tandis que les résultats des résultats de l’option RESP sont testés après l’exécution d’une commande CICS.


HANDLE CONDITION – SCOPE

L’état de la poignée reste actif,

  • Jusqu’à une condition IGNORE
  • Une autre HANDLE CONDITION pour la même erreur
  • Désactivé par NOHANDLE Option dans les commandes

Si vous souhaitez réinitialiser le détournement effectué par la condition HANDLE précédente, codez le nom de la condition mais ne mentionnez pas le nom du paragraphe. Un maximum de 12 conditions peuvent être codées dans une instruction HANDLE CONDITION.


Exemple:

EXEC CICS HANDLE CONDITION
	MAPFAIL(PARA-1)
	PGMIDERR(PARA-2)
	LENGERR(PARA-3)
	ERROR(PARA-X)
END-EXEC.

Description:

Si MAPFAIL alors exécuter le PARA-1, Si PGMIDERR alors exécuter le PARA-2, Si LENGERR alors exécuter le PARA-3.

Toute condition d’erreur autre que MAPFAIL, PGMIDERR et LENGERR transférera le contrôle à PARA-X.

CICS – HANDLE ABEND

La commande HANDLE CONDITION n’intercepte que les conditions anormales de l’exécution de la commande CICS tandis que HANDLE ABEND s’occupe de toute fin anormale dans le programme.

  • Utilisé pour intercepter une terminaison anormale (ABEND) dans un programme
  • Permet d’activer, d’annuler ou de réactiver une sortie pour le traitement ABEND

Syntaxe:

EXEC CICS HANDLE ABEND
       PROGRAM(nom)|LABEL(ABEND-ROUTINE)|RESET|CANCEL
END-EXEC.

PROGRAM ou LABEL est utilisé pour passer le contrôle à un programme ou un paragraphe, respectivement, pour le traitement ABEND.

CANCEL est utilisé pour annuler la demande HANDLE ABEND précédemment établie.

RESET est utilisé pour réactiver la requête HANDLE ABEND précédemment annulée.


Au cours de l’exécution du programme ci-dessous, les activités suivantes auront lieu :

  • Si un ABEND se produit, il sera intercepté par la commande HANDLE ABEND et le contrôle sera passé à ABEND-ROUTINE.
  • A la fin de la commande HANDLE ABEND/CANCEL, la demande HANDLE ABEND précédente sera annulée.
  • A la fin de la commande ABEND, la tâche se terminera avec le code utilisateur ‘9999’.

Exemple:

WORKING-STORAGE SECTION.
77 MSG-LEN           PIC S9(4) COMP.
01 MSG-DATA.
   05 MSG-DATA1      PIC X(15).
   05 MSG-DATA2      PIC X(50).
:
PROCEDURE DIVISION.
      :
      EXEC CICS HANDLE ABEND
                  LABEL(ABEND-ROUTINE)
      END-EXEC.
      :
      ABEND-ROUTINE.
      MOVE ‘ABEND OCCURED.’ TO MSG-DATA1.
      MOVE ‘TASK CANCELLED WITH ABCODE 9999.’ 
                            TO MSG-DATA2.
      MOVE  65 TO MSG-LEN.
      EXEC CICS SEND
                  FROM (MSG-DATA)
                  LENGTH(MSG-LEN)
                  NOHANDLE
      END-EXEC.
      EXEC CICS HANDLE ABEND
                 CANCEL
      END-EXEC.
      EXEC CICS ABEND
                  ABCODE(‘9999’)
      END-EXEC.

Les commandes HANDLE CONDITION et IGNORE CONDITION restent actives jusqu’à la fin du programme.

CICS – IGNORE CONDITION

La commande IGNORE CONDITION n’entraîne aucune action si la condition spécifiée se produit dans le programme. La commande sera transmise à l’instruction suivant la commande qui est rencontrée la condition exceptionnelle.

La syntaxe est la même que HANDLE CONDITION mais elle n’entraîne aucune action si la condition spécifiée se produit dans le programme. Le contrôle sera renvoyé à la prochaine instruction suivant la commande, qui a rencontré la condition exceptionnelle. Il sera effectif à partir de l’endroit où il apparaît jusqu’à la fin du programme ou jusqu’à ce qu’une condition HANDLE l’annule.

Un maximum de 12 conditions peuvent être codées dans une instruction IGNORE CONDITION.

Syntaxe:

EXEC CICS IGNORE CONDITION
        condition
        (condition)
END-EXEC.

La « condition » indique une condition exceptionnelle. Au maximum, seules 16 conditions sont autorisées dans la même commande.


IGNORE CONDITION – SCOPE

  • S’applique uniquement au programme dans lequel il est spécifié
  • Actif pendant l’exécution du programme
  • Actif jusqu’à ce qu’une commande HANDLE CONDITION pour la même condition soit rencontrée

Exemple:

EXEC CICS IGNORE CONDITION
    LENGERR
END-EXEC.

EXEC CICS RECEIVE
    INTO (_______)
    LENGTH (____)
END-EXEC.

Lors de l’exécution de la commande RECEIVE, si l’exception LENGERR se produit, la condition sera ignorée et le contrôle sera passé à l’instruction après la commande RECEIVE.

CICS – Option NOHANDLE

Si vous souhaitez désactiver toutes les conditions d’une commande CICS particulière, codez NOHANDLE.

Cette commande désactive temporairement toutes les autres conditions de poignée. Si une exception survient lors de l’exécution de la commande, le contrôle sera transféré à l’instruction suivante après la commande. Il peut être utilisé avec Lire, Écrire, Supprimer, etc.

L’option NOHANDLE peut être codée sur n’importe quelle commande CICS pour ignorer toute condition qui se produit lors de l’exécution de cette commande. Cette option s’applique uniquement à la commande CICS sur laquelle elle est incluse. L’utilisation de l’option REEE implique NOHANDLE. NOHANDLE remplace la commande HANDLE AID et les tests des touches PF sont ignorés.

EXEC CICS HANDLE CONDITION
	MAPFAIL(PARA-1)
	PGMIDERR(PARA-2)
	LENGERR(PARA-3)
	ERROR(PARA-X)
END-EXEC.

Il existe des possibilités de boucle infinie lorsque la commande CICS dans la routine d’exception de HANDLE CONDITION se termine par la même exception. Dans l’exemple ci-dessus, s’il y a LENGERR dans PARA-3 pour l’une des commandes CICS codées ici, alors le contrôle revient à PARA-3 et forme une boucle infinie. Dans de tels cas, NOHANDLE sera utile (dans les commandes CICS de la routine ABEND).


Syntaxe:

L’option NOHANDLE peut être codée comme suit :

EXEC CICS
   program statements
   NOHANDLE
END-EXEC.

Exemple:

Voici l’exemple de la commande Nohandle. Nous l’utilisons avec une instruction RECEIVE. Si l’instruction RECEIVE échoue, elle n’arrêtera pas le programme.

EXEC CICS RECEIVE
    INTO (WS-INPUT)
    LENGTH (WS-LONGUEUR)
    NOHANDLE
END-EXEC