Archives de catégorie : CICS Cours

CICS – ABEND CODE des Conditions d’exception

ABEND CODES :

Lorsqu’une tâche CICS se termine anormalement, un code ABEND s’affiche avec le message de fin anormale. Tous ces codes ABEND peuvent être regroupés en deux catégories.

  1. ABENDS liés à des conditions d’exception.
  2. ABENDS qui ne sont pas liés à des conditions exceptionnelles.

ABENDS sélectionnés liés aux conditions d’exceptions CICS :

ABENDCondition
AEIAERROR
AEIJNOSTART
AEILDSIDERR
AEINDUPREC
AEIPINVREQ
AEIRNOSPACE
AEI9MAPFAIL
AEYHQIDERR
AEYQSYSIDERR
AEIUILLOGIC
AEIWQZERO
AEI0PGMIDERR
AEI2ENDDATA
AEIDEOF
AEIKTERMIDERR
AEIMNOTFND
AEIODUPKEY
AEIQIOERR
AEISNOTOPEN
AEXLDISABLED
AEYLFUNCERR
AEITENDFILE
AEIVLENGERR
AEIZITEMERR
AEI1TRANSIDERR
AEYYNOTALLOC

ABENDS non lié aux conditions d’exception CICS :

ABENDReason Code
ASRAABEND en raison d’une interruption du programme.
ASRBABEND dû à OS ABEND intercepté par CICS
AKCTDélai de lecture rencontré
AKCSInterruption du délai d’attente rencontrée
AICATransaction abandonnée en tant que tâche incontrôlable
AEY9Commande non prise en charge émise
AEY7Échec RACF
ABMPClé PA/PF non définie pour la récupération de page
ABMGService BMS demandé non inclus chez SYSGEN.

CICS – Processus de compilation de programme

Programme CICS-DB2-COBOL – Compilation

Les programmes COBOL ne peuvent pas reconnaître les commandes CICS. Ainsi, toutes les commandes CICS sont codées dans la portée EXEC CICS et END-EXEC. Le programme est d’abord transmis au traducteur CICS et le traducteur convertira toutes les commandes CICS en instructions d’appel COBOL et cette source modifiée est transmise au compilateur COBOL.

Si votre programme comporte des commandes DB2, la séquence de préparation du module de chargement serait le précompilateur DB2, le traducteur CICS, le compilateur COBOL et l’éditeur de liens. Logiquement parlant, l’ordre du précompilateur DB2 et du traducteur CICS peut également être inversé. Mais en tant que convention, nous faisons d’abord une précompilation.

Si la traduction est effectuée en premier, le traducteur CICS essaie de reconnaître les instructions DB2 et émet des messages de diagnostic. L’autre raison est que la plupart des programmes effectuent beaucoup d’opérations DB2 plutôt que des opérations CICS. Donc, si vous effectuez d’abord la pré-compilation, toutes les instructions DB2 sont converties en instructions d’appel COBOL dans la première phase elle-même et le temps de traduction serait moindre.

Les programmes COBOL-CICS doivent être compilés avec les options RENT RESIDENT NODYNAM et LIB.

Etapes de compilation du programme CICS
  • Traducteur – Vérifie les erreurs de syntaxe, etc., dans les commandes CICS et les traduit en instructions COBOL équivalentes.
    1. Recherche les instructions EXEC CICS …
    2. Commente l’intégralité de l’instruction EXEC CICS … END-EXEC
    3. Remplace les instructions CICS par un ensemble d’instructions MOVE et d’instructions COBOL “CALL” et passe en paramètres, les options de la commande.
    4. Insérez le copybook Execute Interface Block DFHEIBLK dans la section LINKAGE du programme.
    5. Ajoutez le DFHCOMMAREA dans la section de liaison avec une taille de 1 octet s’il n’est pas spécifié.
  • Compilateur – Développe les livres de copie COBOL, vérifie le code source pour les erreurs de syntaxe, etc., et compile.
  • Éditeur de liens – Relie différents modules d’objets pour créer un seul module de chargement.

Noter:

  • Comme le traducteur n’étend pas les livres de copie COBOL, ils ne doivent contenir aucune commande CICS.
  • Comme le module va faire partie du programme CICS, il ne doit contenir aucune commande COBOL restreinte.

Commandes COBOL restreintes dans l’environnement CICS :

  1. Instructions de déclenchement OS SVC :
    ACCEPT, CURRENT-DATE, DATE, DAY, DISPLAY
  2. Instructions d’entrée/sortie :
    OPEN, CLOSE, READ, WRITE, REWRITE, DELETE, START
  3. Instruction SORT :
    RETURN, RELEASE

VS COBOL 2 autorise STOP RUN et cela rend le contrôle à CICS.

CICS – BMS

BMS – Basic Mapping Support
(Prise en charge de la cartographie de base)

  • BMS est une interface entre le programme d’application et le terminal.
  • BMS mappe les données indépendantes de l’appareil dans les données dépendantes de l’appareil pour fournir un écran formaté.
  • BMS identifie l’emplacement et les caractéristiques des champs de données ainsi que les caractéristiques du terminal avec lequel la carte sera utilisée.

Fonctions du BMS :

Pour supprimer les codes dépendants de l’appareil et les informations constantes d’une application et les placer dans des cartes, simplifiant ainsi le travail de programmation.

Maintient le code largement indépendant de :

  • Toute modification du réseau de terminaux
  • Toute modification des types de terminaux

D’autres fonctions incluent :

  • Traitement du texte
  • Création de pages
  • Plusieurs écrans de données
  • Routage des messages

Conception MAP :

Avant d’entrer dans la conception du programme, voyons comment les maps (écrans) sont conçues dans CICS. La plupart des installations utilisent des outils comme SDF pour la conception d’écran. Les outils génèrent des macros BMS pour l’écran conçu. Nous informons les macros BMS impliquées dans la conception de la map. BMS est l’acronyme de Basic Mapping Support.

MAP et MAPSET :

Un écran conçu via BMS est appelé MAP. Une ou un groupe de cartes constitue un MAPSET.

BMS reçoit les données saisies par l’utilisateur puis les formate dans une zone cartographique symbolique. Le programme d’application n’a accès qu’aux données présentes dans la carte symbolique. Le programme d’application traite les données et la sortie est envoyée à la map symbolique. BMS fusionnera la sortie des données symboliques avec la carte physique.

Maps physiques :

Les Maps physiques contrôlent l’alignement de l’écran, l’envoi et la réception de CONSTANTES et de données vers et depuis un terminal. Ils sont codés à l’aide de macros BMS, assemblés et édités en lien dans CICS LOAD LIBRARY. Ils garantissent l’indépendance de l’appareil dans les programmes d’application.

Maps symboliques :

Les Maps symboliques définissent les champs de carte utilisés pour stocker les données VARIABLE référencées dans le programme COBOL. Ils sont également codés en macros BMS utilisées. Mais après assemblage, ils sont placés dans une bibliothèque COPY, puis copiés dans des programmes CICS à l’aide de l’instruction COPY. Ils garantissent l’indépendance de l’appareil et du format vis-à-vis des programmes d’application.


Exemple d’écran CICS :

L’écran ci-dessous est un écran CICS et peut être conçu à l’aide de BMS. Ses points clés sont les suivants.

  1. L’écran peut avoir une date, un titre, une heure et toute autre information à afficher.
  2. Il y a trois valeurs d’entrée requises qui sont répertoriées sur cet écran.
  3. Pour chaque champ à droite, nous devons entrer la valeur d’entrée. Cette valeur d’entrée est ensuite envoyée au programme CICS pour un traitement ultérieur.
  4. Au bas de l’écran, les touches d’action sont affichées. Exemple : PF3 pour quitter l’écran, PF5 pour rafraichir l’écran.
  5. Tous les champs et l’écran lui-même sont définis avec des macros BMS. Lorsque toute la carte est définie, nous pouvons utiliser un JCL pour l’assembler.

CICS – Macros BMS

BMS map est un programme écrit en langage assembleur pour gérer les écrans. Les trois macros utilisées pour définir l’écran sont DFHMSD, DFHMDI et DFHMDF.

Feuille de codage macro BMS

Les définitions de carte BMS sont des macros purement assembleur, la convention de codage suivante doit être maintenue.

ColonnesMacros
1-8Étiquette
10-15Nom de la macro
16-71Opérandes
72Continuation
Tableau des Macros en fonctions des colonnes

  • Étiquette: L’étiquette est le nom de l’opération. Si la macro est DFHMSD, elle spécifie le nom de l’ensemble de cartes. Si la macro est DFHMDF, elle spécifie le nom du champ.
  • Nom de la macro : Trois macros sont utilisées dans le codage BMS.
    1. DFHMSD – Définition du jeu de cartesDFHMDI – Définition des cartesDFHMDF – Définition des champs
    Tout le codage BMS commence par DFHMSD suivi d’un ou plusieurs DFHMDI. Un ou plusieurs DFHMDF suivent DFHMDI.
  • Opérandes : Définissez les paramètres de la macro appelée.
  • Continuation: La suite de la macro est obtenue par ‘X’ dans la 72e colonne de la ligne actuelle et continue à partir de la 16e colonne de la ligne suivante.
  • Commentaires: Les lignes de commentaire sont indiquées par ‘*’ dans la colonne 1. Une ligne de commentaire ne peut pas être placée entre les lignes de continuation et les lignes de commentaire ne peuvent pas être continuées.
  • Lignes vides : Vous ne pouvez pas avoir de lignes vides dans le programme assembleur.

CICS – Macros BMS : DFHMSD

DFHMSD est utilisé pour définir un mapset avec ses caractéristiques et pour terminer un mapset. Vous trouverez donc deux DFHMSD dans n’importe quel codage BMS. Certains des opérandes importants sont ci-dessous :

  • TYPE
    Il doit être DSECT pour la génération de maps symboliques, MAP pour la génération de maps physiques et FINAL pour indiquer la fin de l’ensemble de maps. Alternativement, le paramètre symbolique &SYSPARM peut être codé dans le TYPE de définition de DFHMSD et la valeur peut être remplacée dans le paramètre PARM de la procédure d’assemblage. Cela évite la modification du codage BMS.
  • MODE
    IN pour les maps d’entrée comme les écrans de saisie de commande et OUT pour les maps de sortie comme les écrans d’affichage et INOUT pour les maps d’entrée-sortie comme les écrans de mise à jour.
  • LANG
    Il spécifie le langage dans lequel la map symbolique doit être générée. Il peut s’agir de COBOL, PLI, ASM ou RPG.
  • STORAGE
    AUTO est utilisé pour acquérir une zone de carte symbolique distincte pour chaque jeu de map. BASE=MAP-IOAREA permet à plusieurs maps de plusieurs jeux de maps de partager la même zone de stockage. MAP-IOAREA sera redéfini plusieurs fois pour y parvenir.
  • TIOAPFX
    Il doit être ‘OUI’ pour réserver l’espace de préfixe de 12 octets pour que les commandes BMS accèdent correctement à TIOA. Ceci est requis pour le niveau de commande CICS.
  • CTRL
    Les demandes de contrôle de périphérique sont placées ici. Plusieurs paramètres sont séparés par une virgule. FREEKB est utilisé pour déverrouiller le clavier. FRSET permet de remettre à zéro le MDT de tous les champs de toutes les cartes. ALARM est utilisé pour régler une alarme au moment de l’affichage de l’écran. PRINT est utilisé pour envoyer le jeu de maps à l’imprimante.
  • TERM
    Si autre chose que le terminal 3270 est utilisé pour l’affichage des écrans, il doit être codé ici. Cela garantit l’indépendance de l’appareil en fournissant le suffixe. SUFFIX est utilisé pour spécifier le suffixe du terminal et doit correspondre à l’entrée TCT du terminal.

Exemple

L’exemple suivant montre comment coder une définition de mapset :

MPSET1 DFHMSD TYPE = &SYSPARM, X 
   CTRL = (FREEKB,FRSET), X 
   LANG = COBOL, X 
   STORAGE = AUTO, X 
   TIOAPFX = YES, X 
   MODE = INOUT, X 
   TERM = 3270 
   DFHMSD TYPE = FINAL 
END

CICS – SEND MAP

La commande SEND MAP envoie les données de sortie formatées à un terminal. Il est également utilisé pour envoyer la map au terminal central à partir du programme d’application.

Syntaxe:

Vous trouverez ci-dessous la syntaxe de la commande CICS SEND MAP.

EXEC CICS SEND
   MAP('nom-map')
   MAPSET('nom-mapset')
   [FROM(zone-donnee)]
   [LENGTH(valeur-donnee)]
   [DATAONLY]
   [MAPONLY]
   [FREEKB]
   [FRSET]
   [ERASE/ERASEAUP]
   [CURSOR]
END-EXEC.

Voyons les paramètres utilisés dans la commande SEND MAP.

  • MAP(‘nom-map’)
    Spécifie le nom de la carte à utiliser.
  • MAPSET(‘nom-mapset’)
    Spécifie le nom du mapset à utiliser. Il est nécessaire sauf si le nom de l’ensemble de maps est le même que le nom de la map
  • FROM(zone-donnee)
    Spécifie la zone de données contenant les données à traiter.
  • LENGTH(valeur-donnee)
    Spécifie la longueur des données à formater en tant que valeur binaire de demi-mot. Si la zone de données qui envoie la map est plus longue que les données à mapper, LENGTH doit être spécifié.
  • MAPONLY
    Spécifie que seules les données par défaut de la carte doivent être écrites.
  • DATAONLY
    Spécifie que seules les données du programme d’application doivent être écrites (c’est-à-dire que seules les données de votre programme sont envoyées à l’écran). Toutes les données ou tous les attributs par défaut de la map sont ignorés.
  • FREEKB
    Le clavier doit être déverrouillé après l’écriture des données à l’écran. Si FREEKB n’est pas ajouté, le clavier reste verrouillé.
  • FRSET
    Flag Reset désactive la balise de données modifiée (MDT) dans l’octet d’attribut pour tous les champs de l’écran avant que ce que vous envoyez y soit placé.
  • ERASE
    Ceci est utilisé pour effacer la map à l’écran lors de l’envoi d’une map.
  • ERASEAUP
    Ceci est utilisé pour effacer la valeur précédente sur l’écran lors de l’envoi de données uniquement.
  • CURSOR
    Ceci est utilisé pour positionner le curseur sur l’écran. Le curseur est défini en déplaçant -1 sur la partie L du champ, puis en envoyant la map.

Exemple:

L’exemple suivant vous montre comment envoyer la map uniquement à l’écran.

EXEC CICS
    SEND MAP('nom-map')
         MAPSET('nom-mapset')
         FROM(MAPNOMO)
         ERASE
END-EXEC.

L’exemple suivant vous montre comment envoyer des données uniquement à l’écran à partir de la variable ‘MAPNOMO’.

EXEC CICS
    SEND MAP('nom-map')
         MAPSET('nom-mapset')
         FROM(MAPNOMO)
         DATAONLY
END-EXEC.

CICS – Macro BMS : DFHMDI

DFHMDI est utilisé pour définir une carte avec sa caractéristique dans un mapset. Il peut y avoir n’importe quel nombre de DFHMDI. Certains des opérandes importants de DFHMDI sont ci-dessous :

  • SIZE
    Il a deux arguments, à savoir la longueur et la largeur et, dans son ensemble, la taille de la carte est spécifiée ici.
    SIZE = (Line,Column)
  • LINE
    La ligne de départ de la carte est mentionnée ici.
  • COLUMN
    La colonne de départ de la carte dans la LIGNE est mentionnée ici.
  • JUST
    RIGHT ou LEFT est codé ici pour informer la justification de la map dans le mapset.
  • CTRL
    Les demandes de contrôle de périphérique sont placées ici. Plusieurs paramètres sont séparés par une virgule. FREEKB est utilisé pour déverrouiller le clavier. FRSET permet de remettre à zéro le MDT de tous les champs de toutes les maps. ALARM est utilisé pour régler une alarme au moment de l’affichage de l’écran. PRINT est utilisé pour envoyer le mapset à l’imprimante.
  • TIOAPFX
    Il doit être ‘OUI’ pour réserver l’espace de préfixe de 12 octets pour que les commandes BMS accèdent correctement à TIOA. Ceci est requis pour le niveau de commande CICS.

Exemple

L’exemple suivant montre comment coder une définition de la map:

MAPSTD DFHMDI SIZE = (40,80), X
   LINE = 01, X
   COLUMN = 01, X
   CTRL = (FREEKB,FRSET)

Les paramètres SIZE, LINE, COLUMN, JUST décident de la taille et de l’emplacement de la map dans l’ensemble des maps. CTRL et TIOAPFX peuvent également être codés en DFHMDI. mais la valeur de DFHMDI remplace la valeur de DFHMSD.

CICS – Macro BMS : DFHMDF

DFHMDF est utilisé pour définir un champ avec sa caractéristique dans une map. Le nom du champ est mentionné par rapport auquel la macro DFHMDF est codée. Ce nom de champ est utilisé à l’intérieur du programme. Nous n’écrivons pas le nom du champ contre un champ constant que nous ne voulons pas utiliser dans le programme. Il peut y avoir n’importe quel nombre de DFHMDF dans DFHMDI. Certains des opérandes importants de DFHMDF sont ci-dessous :

  • POS
    Il a deux arguments qui ont décidé de la position du champ. Les deux arguments sont ligne et colonne. C’est la position où commence l’octet d’attribut du champ.
    Donc, si vous codez POS = (1,1), l’octet d’attribut pour ce champ est sur la ligne 1 dans la colonne 1, et les données réelles commencent dans la colonne 2.
  • LENGTH
    La longueur du champ est codée ici. Il exclut le caractère d’attribut.
  • ATTRIB
    Tous les champs d’entrée et de sortie sont préfixés par un champ d’attribut d’un octet qui définit les attributs du champ. Certains des attributs sont :
    1. ASKIP/PROT/UNPROT
      Paramètres mutuellement exclusifs qui définissent le type du champ.
      UNPROT est codé pour les champs d’entrée et d’entrée-sortie.
      PROT est codé pour les champs de sortie et d’arrêt.
      ASKIP est codé pour les littéraux d’écran et les champs de saut. Le curseur saute automatiquement au champ suivant et vous ne pouvez donc pas entrer de données dans le champ de saut.
    2. NUM
      0-9, Période et – sont les seuls caractères autorisés.
    3. BRT/NORM/DRK
      Paramètres mutuellement exclusifs qui définissent l’intensité du champ.
    4. IC
      Insérer le curseur. Le curseur sera positionné sur l’affichage de la carte. Si IC est spécifié dans plus d’un champ d’une carte, le curseur sera placé dans le dernier champ.
    5. FSET
      Que le champ soit modifié ou non, il sera transmis au programme. MDT est défini pour le champ.
  • JUSTIFY
    RIGHT est la valeur par défaut. Code LEFT pour les champs numériques.
  • PICIN et PICOUT
    Il définit la clause Picture de la map symbolique en COBOL et est utile pour l’édition de champs numériques.
  • INITIAL
    La valeur par défaut du champ est codée ici. Lorsque le MAP est envoyé, cette valeur apparaîtra dans le champ. Les informations constantes telles que TITRE sont codées à l’aide du mot-clé INITIAL de la définition de champ.Pour éviter le trafic de données, ces champs d’information constants ne doivent pas être codés sans paramètre LABEL. S’il n’y a pas de paramètre LABEL, la carte symbolique ne sera pas générée pour ces champs car ce sont des champs sans nom.

Exemple

L’exemple suivant montre comment coder une définition de champ :

DFHMDF POS = (01,01), X
   LENGTH = 18, X
   INITIAL = ‘SAMPLE CICS SCREEN’, X
      ATTRB = (PROT,NORM)
      STDID DFHMDF POS = (01,70), X
      LENGTH = 08, X
      ATTRB = (PROT,NORM)

CICS – RECEIVE MAP

La commande RECEIVE MAP est utilisée pour extraire des données d’entrée d’un terminal dans une zone de données dans un programme d’application pour traitement.

Syntaxe:

Vous trouverez ci-dessous la syntaxe de la commande CICS RECEIVE MAP.

EXEC CICS RECEIVE
   MAP('nom-map')
   MAPSET('nom-mapset')
   [INTO(zone-donnee)]
   [FROM(zone-donnee)]
   [LENGTH(valeur-donnee)]
END-EXEC.

Voyons les paramètres utilisés dans la commande RECEIVE MAP.

  • MAP(‘nom-map’)
    Spécifie le nom de la map à utiliser.
  • MAPSET(‘nom-mapset’)
    Spécifie le nom du mapset à utiliser. Il est nécessaire sauf si le nom de l’ensemble de maps est le même que le nom de la map.
  • INTO(zone-donnee)
    Spécifie la zone de données dans laquelle les données mappées doivent être écrites. Si ce champ n’est pas spécifié, le nom par défaut est le nom de la map suffixé par un I.
  • FROM(zone-donnee)
    Spécifie la zone de données contenant les données à mapper par une commande RECEIVE MAP.
  • LENGTH(valeur-donnee)
    Spécifie la longueur des données à formater en tant que valeur binaire de demi-mot. Elle ne doit pas dépasser la longueur de la zone de données FROM.

Exemple:

L’exemple suivant vous montre comment recevoir les données d’entrée dans le champ ‘MAPNOMI’.

EXEC CICS RECEIVE
           MAP('nom-map')
           MAPSET('nom-mapset')
           INTO(MAPNOMI)
END-EXEC.

CICS – EIB

EIB – Executive Interface Block
(Bloc d’interface exécutif)

CICS fournit des informations relatives au système pour chaque tâche sous la forme d’un bloc d’interface Exec. Comme les informations sont automatiquement fournies par CICS, le programme d’application peut les utiliser immédiatement.

Lorsque le traducteur CICS traduit votre programme, il ajoute le copybook DFHEIBLK comme première entrée dans votre section de liaison. Chaque fois qu’une tâche est lancée, les informations relatives à la tâche peuvent être consultées à l’aide des champs du cahier. EIB est l’acronyme de Executive Interface Block.

DFHEIBLK est similaire à SQLCA. mais contrairement à SQLCA, Execute Interface Block (EIB) est chargé automatiquement par le CICS pour chaque programme lors de la compilation.

Certaines des informations de la BEI les plus couramment utilisées sont :

Champ BEIClause PICLa description
EIBAIDX(1)Valeur de la dernière touche d’identification d’attention enfoncée
EIBCALENS9(4) COMPLongueur de la ZONE DFHCOMM
EIBDATES9(4) COMP-3Date à laquelle cette tâche a été lancée
EIBFNX(2)Code de fonction de la dernière commande CICS en HEX
EIBRCODEX(6)Code de la dernière fonction
EIBTASKS9(7) COMP-3Numéro de tâche de la tâche en cours
EIBTIMES9(7) COMP-3Heure de démarrage de la tâche en cours
EIBTRMIDX(4)Terminal-ID à partir duquel la tâche a été lancée
EIBTRNIDX(4)ID de transaction de la tâche en cours