Tous les articles par Mr COBOL

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 – 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 – 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 – 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

CICS – AID & HANDLE AID

Il existe certains identificateurs d’attention (AID) associés à chaque écran. Les écrans d’entrée ont des touches ENTER et PF1 (Aide). Les écrans de requête ont PF7 (Page vers le haut), PF8 (Page vers le bas), PF1 (Aide) et ainsi de suite. En fonction de la touche enfoncée par l’utilisateur, le traitement doit se produire dans le programme. EIBAID de DFHEIBLK a la dernière touche appuyée par l’utilisateur. Il peut être vérifié dans le programme après la commande RECEIVE.

DFHAID :

La liste d’identifiants d’attention standard est DFHAID. Il simplifie le test du contenu du champ EIBAID après une opération de prise en charge cartographique de base (BMS) ou d’entrée de contrôle de terminal.

Le contenu suivant est présent dans le copybook DFHAID :

01    DFHAID.
   02  DFHNULL   PIC  X  VALUE IS ' '.
   02  DFHENTER  PIC  X  VALUE IS ''''.
   02  DFHCLEAR  PIC  X  VALUE IS '_'.
   02  DFHCLRP   PIC  X  VALUE IS '¦'.
   02  DFHPEN    PIC  X  VALUE IS '='.
   02  DFHOPID   PIC  X  VALUE IS 'W'.
   02  DFHMSRE   PIC  X  VALUE IS 'X'.
   02  DFHSTRF   PIC  X  VALUE IS 'h'.
   02  DFHTRIG   PIC  X  VALUE IS '"'.
   02  DFHPA1    PIC  X  VALUE IS '%'.
   02  DFHPA2    PIC  X  VALUE IS '>'.
   02  DFHPA3    PIC  X  VALUE IS ','.
   02  DFHPF1    PIC  X  VALUE IS '1'.
   02  DFHPF2    PIC  X  VALUE IS '2'.
   02  DFHPF3    PIC  X  VALUE IS '3'.
   02  DFHPF4    PIC  X  VALUE IS '4'.
   02  DFHPF5    PIC  X  VALUE IS '5'.
   02  DFHPF6    PIC  X  VALUE IS '6'.
   02  DFHPF7    PIC  X  VALUE IS '7'.
   02  DFHPF8    PIC  X  VALUE IS '8'.
   02  DFHPF9    PIC  X  VALUE IS '9'.
   02  DFHPF10   PIC  X  VALUE IS ':'.
   02  DFHPF11   PIC  X  VALUE IS '#'.
   02  DFHPF12   PIC  X  VALUE IS '@'.
   02  DFHPF13   PIC  X  VALUE IS 'A'.
   02  DFHPF14   PIC  X  VALUE IS 'B'.
   02  DFHPF15   PIC  X  VALUE IS 'C'.
   02  DFHPF16   PIC  X  VALUE IS 'D'.
   02  DFHPF17   PIC  X  VALUE IS 'E'.
   02  DFHPF18   PIC  X  VALUE IS 'F'.
   02  DFHPF19   PIC  X  VALUE IS 'G'.
   02  DFHPF20   PIC  X  VALUE IS 'H'.
   02  DFHPF21   PIC  X  VALUE IS 'I'.
   02  DFHPF22   PIC  X  VALUE IS '¢'.
   02  DFHPF23   PIC  X  VALUE IS '.'.
   02  DFHPF24   PIC  X  VALUE IS '<'.

Pour la vérification des valeurs dans EIBAID, copiez le cahier de copie de la liste AID standard fourni par CICS dans votre programme (COPY DFHAID). Maintenant, vous pouvez facilement vérifier la touche enfoncée comme suit.

EVALUATE EIBAID
    WHEN DFHENTER
          PERFORM PARA-1
    WHEN DFHPF1
          PERFORM PARA-2
    WHEN OTHER
          PERFORM PARA-3
END-EVALUATE.

La vérification ci-dessus est effectuée en COBOL et ce type de vérification doit être effectué après chaque commande RECEIVE pour acheminer correctement le flux. CICS fournit son propre traitement de routage basé sur la touche enfoncée par la commande HANDLE AID. Cela sera efficace tout au long du programme et réduira la redondance du code. Le routage sera automatiquement appelé à chaque RECEIVE.

EXEC CICS HANDLE AID
    DFHENTER(PARA-1)
    DFHPF1(PARA-2)
    ANYKEY(PARA-3)
END-EXEC.

CICS – READ

La commande READ lit un enregistrement à partir d’un fichier à l’aide de la clé primaire. La commande READ est utilisée pour le traitement aléatoire.

Syntaxe:

Vous trouverez ci-dessous la syntaxe de la commande READ :

EXEC CICS READ
   FILE('nomfichier')
   INTO(zone-donnee)
   RIDFLD(zone-donnee) [RBA|RRN]
   LENGTH(valeur-donnee)
   KEYLENGTH(valeur-donnee)
END-EXEC.

Pour les commandes UPDATE et non-UPDATE, vous devez identifier l’enregistrement à récupérer par le champ d’identification d’enregistrement spécifié dans l’option RIDFLD. Immédiatement après l’exécution d’une commande READ UPDATE, la zone de données RIDFLD est disponible pour être réutilisée par le programme d’application.


Voyons les paramètres utilisés dans la commande READ :

  • FILE(nomfichier)
    Spécifie le nom du fichier auquel accéder.
  • INTO(zone-donnee)
    Spécifie la zone de données dans laquelle l’enregistrement extrait de l’ensemble de données doit être écrit.Lorsque INTO est spécifié, LENGTH doit être spécifié explicitement ou doit pouvoir être défini par défaut à partir de l’option INTO à l’aide de la référence d’attribut de longueur dans le langage assembleur
  • LENGTH
    Il spécifie le nombre maximum de caractères pouvant être lus dans la zone de données spécifiée. Il doit s’agir d’une valeur binaire demi-mot (PIC S9(4) COMP). Une fois la commande READ terminée, CICS remplace la valeur maximale que nous spécifions par la longueur réelle de l’enregistrement. Pour cette raison, nous devons spécifier LENGTH comme nom d’une zone de données plutôt qu’un littéral et devons réinitialiser cette zone de données si nous l’utilisons pour LENGTH plus d’une fois dans le programme. Un enregistrement plus long déclenchera une condition d’erreur.
  • RIDFLD(zone-donnee)
    Spécifie le champ d’identification de l’enregistrement.Il porte le nom de la zone de données contenant la clé de l’enregistrement que l’on veut lire.
  • KEYLENGTH(valeur-donnee)
    spécifie la longueur (demi-mot binaire) de la clé qui a été spécifiée dans l’option RIDFLD, sauf lorsque RBA ou RRN est spécifié, auquel cas la valeur KEYLENGTH n’est pas valide. Cette option doit être spécifiée si GENERIC est spécifié, et elle peut être spécifiée chaque fois qu’une clé est spécifiée. Cependant, si la longueur spécifiée est différente de la longueur définie pour l’ensemble de données et que l’opération n’est pas générique, la condition INVREQ se produit. La condition INVREQ se produit également si GENERIC est spécifié et que la valeur KEYLENGTH n’est pas inférieure à celle spécifiée dans la définition VSAM.

Exemple:

Voyons un exemple de programme CICS pour la commande READ :

IDENTIFICATION DIVISION.
PROGRAM-ID. IBMMF.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-REC-LEN         PIC S9(4) COMP.
01 WS-KEY-LEN         PIC S9(4) COMP.
01 WS-REC-KEY         PIC 9(6).
01 WS-REC-DATA        PIC X(80).
PROCEDURE DIVISION.
        MOVE +80           TO WS-REC-LEN.
        MOVE ‘502258’      TO WS-REC-KEY.
        MOVE 6             TO WS-KEY-LEN.
        EXEC CICS READ
          FILE('STDLST')
          INTO(WS-REC-DATA)
          LENGTH(WS-REC-LEN)
          RIDFLD(WS-REC-KEY)
          KEYLENGTH(WS-KEY-LEN)
        END-EXEC.

La description:

Ce programme a lu l’enregistrement dans le fichier ‘STDLST’ pour la valeur de clé ‘502258’ et a écrit les données dans WS-REC-DATA.

Nom de fichier-‘STDLST’ est le nom du fichier que nous voulons lire. Il s’agit du nom de fichier symbolique CICS qui identifie l’entrée FCT (table de contrôle des fichiers) pour le fichier. Les noms de fichiers peuvent comporter jusqu’à 8 caractères et doivent être placés entre guillemets s’ils sont littéraux.

Après l’exécution, WS-REC-DATA fera lire l’enregistrement de données à partir de ‘STDLST’ dont la valeur de clé est ‘502258’.


Options de commande de lecture :

Voyons quelques-unes des options fréquemment utilisées avec la commande READ.

  • GENERIC
    Pour les demandes de clé partielles, l’option GENERIC peut être utilisée. La longueur de la clé partielle doit être spécifiée dans l’option KEYLENGTH.Il est utilisé lorsque nous ne connaissons pas la valeur complète de la clé. Par exemple, nous voulons un enregistrement dont la clé primaire commence par ‘999’ et le reste de la clé peut être n’importe quoi. Bien que la longueur de la clé soit de 6 caractères, nous n’en mentionnons que 3. Il est important de mentionner la longueur de la clé qui donne la longueur pour laquelle elle doit faire la correspondance. Le premier enregistrement qui répond aux critères sera sélectionné.
  • UPDATE
    Spécifie que l’enregistrement doit être obtenu pour la mise à jour ou la suppression. Si cette option est omise, une opération en lecture seule est supposée. UPDATE garantit l’intégrité en lecture.Spécifier UPDATE donne à votre transaction le contrôle exclusif de l’enregistrement demandé.
  • EQUAL
    Il précise que nous ne voulons que l’enregistrement dont la clé correspond exactement à ce qui est spécifié par RIDFLD.
  • GTEQ
    Si la recherche d’un enregistrement qui a la même clé (complète ou générique) que celle spécifiée dans l’option RIDFLD échoue, le premier enregistrement qui a une clé supérieure est récupéré. En d’autres termes, il spécifie que nous voulons le premier enregistrement dont la clé est supérieure ou égale à la clé spécifiée dans le RIDFLD.
  • RBA
    Spécifie que le fichier est ESDS et que l’option RIDFLD doit être interprétée comme l’adresse d’octet relative.
  • RRN
    Spécifie que le fichier est RRDS.

Exemples:

L’exemple suivant vous montre comment lire un enregistrement d’un fichier nommé STDFL dans une zone de données spécifiée.

    EXEC CICS READ
         INTO(WS-RECORD)
         FILE('STDFL')
         RIDFLD(WS-ACCTNO)
    END-EXEC

L’exemple suivant vous montre comment lire un enregistrement à mettre à jour à partir d’un fichier VSAM à l’aide d’une clé générique et en spécifiant une recherche de clé supérieure ou égale.

    EXEC CICS READ
         INTO(RECORD)
         LENGTH(RECLEN)
         FILE('STDFL')
         RIDFLD(ACCTNO)
         KEYLENGTH(4)
         GENERIC
         GTEQ
         UPDATE
    END-EXEC


Lire les conditions d’exception de commande :

ExceptionLa description
DISABLEDUn fichier est désactivé
NOTFNDUne tentative de récupération d’un enregistrement en fonction de l’argument de recherche fourni échoue.
FILENOTFOUNDLe nom de fichier fourni dans l’option FILE n’est pas défini pour CICS.
NOTAUTHUne vérification de la sécurité des ressources a échoué sur FILE(filename).(c’est-à-dire que l’utilisateur n’a pas suffisamment d’autorisations pour accéder au fichier).
LEGERRLa longueur d’un enregistrement lu avec l’option INTO spécifiée dépasse la valeur spécifiée dans l’option LENGTH.
DUPKEYSi plus d’un enregistrement satisfait la condition sur la clé alternative.