Data area en CL et travaux asynchrones

BoTTom |    Changer de couleur
 
 
                        DATA AREA
                        ---------
 
 
UNE DATA AREA EST UN OBJET UTILISE POUR TRANSMETTRE DES DONNEES
ENTRE DES PROGRAMMES A L'INTERIEUR D'UN MEME JOB OU ENTRE DES TRAVAUX
DIFFERENTS.
 
UNE DATA AREA PEUT ETRE UTILISE  CHAQUE FOIS QUE VOUS AVEZ BESOIN
 DE STOCKER UNE INFORMATION DE TAILLE LIMITE.
 
 
 
 
 
 
 
 
 
 


|    Changer de couleur
      -----------------------
      !                     !       --------------------
      !      PGM1           !       !                  !
      !                     !       !     PGM2         !
      !                     !       !                  !
      ----------------------        !                  !
              !                     --------------------
              !                               ^
              !                               !
              !                               !
              -------------   -----------------
                          !   !
                          !   !
                 _________!___!__________
                <_________!___!__________>         ######################## 
                !         V   !          !         #  PGM1 écrit dans la  # 
                !      !________!        !         #   Data Area, PGM2    # 
                !                        !         # (qui peut s'exécuter # 
                !       *DTAARA          !         #   plus tard) la lit. # 
                !                        !         ######################## 
                !                        !
                <________________________>


|    Changer de couleur
 
IL EXISTE 2 TYPES DE DATA AREA
------------------------------
 
1 LOCAL DATA AREA (LDA)
-----------------------
 
ELLE EST CREE AUTOMATIQUEMENT PAR LE SYSTEME POUR CHAQUE JOB,
=====> ELLE PERMET SEULEMENT LA COMMUNICATION ENTRE PROGRAMMES D'UN JOB
  TOUTEFOIS QUAND SOUMETTEZ UN TRAVAIL CELUI CI AURA
   COMME VALEUR INITIALE DE SA LDA UNE COPIE DE LDA DU JOB QUI SOUMET.
 
 
LA LONGUEUR DE CETTE DATA AREA EST DE 1024 ET LE TYPE *CHAR.
 
1.1 UTILISATION DE LA LDA DANS UN PROGRAMME EN LANGAGE DE CONTROLE
------------------------------------------------------------------
 
PRENONS L'EXEMPLE DE LA SOUMISSION DU TRAVAIL SOIR.
JE VEUX QUE LA COMMANDE DLYJOB (différer un travail) SOIT EXECUTEE DANS LE
 PROGRAMME SOIR. IL FAUDRA DONC TRANSMETTRE AU PROGRAMME L'HEURE DE DEBUT.
 


|    Changer de couleur
 
REGARDONS LA SOLUTION AVEC LA *LDA
 
 
     PROGRAMME DE LANCEMENT
 
             PGM
             DCL        VAR(&DEPART) TYPE(*CHAR) LEN(6)
             DCLF       FILE(HEURE) RCDFMT(*ALL)
 
             SNDRCVF    RCDFMT(HEURF1)
 
             IF         COND(&IN03) THEN(GOTO CMDLBL(FINCLP))
 
             CHGVAR     VAR(&DEPART) VALUE(&HH *CAT &MM *CAT &SS)
             CHGDTAARA  DTAARA(*LDA (1 6)) VALUE(&DEPART)
 
             SBMJOB     JOB(TRAVSOIR) CMD(CALL SOIR)
 
   FINCLP:   ENDPGM
 
 


|    Changer de couleur
 
 
  PROGRAMME SOIR.
 
 
             PGM
             DCL        VAR(&DEPART) TYPE(*CHAR) LEN(6)
             RTVDTAARA  DTAARA(*LDA (1 6)) RTNVAR(&DEPART)
             DLYJOB     RSMTIME(&DEPART)
             ------     -----------------------------
             ------     -----------------------------
             ------     -----------------------------
             ------     -----------------------------
             ------     -----------------------------
             ------     -----------------------------
             ------     -----------------------------
             ------     -----------------------------
             ------     -----------------------------
             ENDPGM
 
 
 


|    Changer de couleur
 
- NOUS VENONS D'APPRENDRE A UTILISER LA LOCAL DATA AREA (*LDA)
   ET LA COMMANDE QUI PERMET DE LA MANIPULER.
 
LA LDA EST IDENTIFIEE PAR SON NOM *LDA
 
     CHGDTAARA permet de modifier le contenu d'une DTAAREA.
               en spécifiant la position de début de modification et
                             le nombre de caractères à modifier.
 
     RTVDTAARA permet de retrouver une DTAAREA et de placer son contenu
               dans une variable.
 
               les mêmes spécifications sont possibles (pos début et lg)
 
 
- UNE 3EME ET DERNIERE COMMANDE PEUT ETRE UTILISEE POUR VISUALISER LA LDA
 
     DSPDTAARA permet de visualiser le contenu d'une DTAAREA.
 
 
 


|    Changer de couleur
 
2 DATAAREA CREE PAR LE PROGRAMMEUR
----------------------------------
 
CES DATAAREA SONT CREES AVANT D'ETRE UTILISEES
==> ELLES SONT COMMUNES A l'ENSEMBLE DES JOBS (stockées sur disque), DONC,
     ELLES PERMETTENT LA COMMUNICATION ENTRE JOBS DIFFERENTS.
 
 
ELLES SONT CREES GRACE A LA COMMANDE CRTDTAARA.(création définitive)
 
CRTDTAARA DTAARA(Bibliothèque/nom de la DTAAREA)
 
          TYPE(*CHAR ou *DEC ou *LGL)
 
          LEN(2000 maxi si *CHAR
              24 dont 9 maxi si *DEC )
 
          VALUE(valeur initiale de la DTAARA)
 
          TEXT('texte d'information')
 


|    Changer de couleur
 
2.1 UTILISATION DE LA DATAREA CREE PAR UN PROGRAMMEUR
------------------------------------------------------
 
LES COMMANDES QUE VOUS POUVEZ UTILISER POUR MANIPULER CETTE DTAAREA
SONT :
 
       - LES 3 COMMANDES QUE NOUS AVONS DEJA DETAILLEES POUR
         LA LDA :
 
              - CHGDTAARA
 
              - RTVDTAARA
 
              - DSPDTAARA
 
 
 
 
 
 
 


|    Changer de couleur
 
   - EXEMPLE D'UTILISATION DE CETTE DTAAREA
 
     REPRENONS L'EXEMPLE QUE NOUS AVONS VU PRECEDEMMENT:
 
     TOUT D'ABORD JE CREE UNE DTAAREA QUE J'APPELLE SOIR
 
             CRTDTAARA  DTAARA(EXEMPLE/SOIR) TYPE(*CHAR) LEN(6)
 
 
 
 
 
 
 
 
 
 
 
 
 
 


|    Changer de couleur
 
     PROGRAMME DE LANCEMENT
 
 
             PGM
             DCLF       FILE(HEURE) RCDFMT(*ALL)
             DCL        &DEPART *CHAR 6
 
             SNDRCVF    RCDFMT(HEURF1)
 
             IF         COND(&IN03) THEN(GOTO CMDLBL(FINCLP))
 
             CHGVAR     VAR(&DEPART) VALUE(&HH *CAT &MM *CAT &SS)
             CHGDTAARA  DTAARA(SOIR) VALUE(&DEPART)
 
             SBMJOB     JOB(TRAVSOIR) CMD(CALL SOIR)
 
 
  FINCLP:    ENDPGM
 
 
 


|    Changer de couleur
 
 
     PROGRAMME SOIR
 
 
             PGM
             DCL        &SOIR *CHAR 6
             RTVDTAARA  DTAARA(SOIR) RTNVAR(&SOIR)
             DLYJOB     RSMTIME(&SOIR)
             ------     -----------------------------
             ------     -----------------------------
             ------     -----------------------------
             ------     -----------------------------
             ------     -----------------------------
             ------     -----------------------------
             ------     -----------------------------
             ------     -----------------------------
             ENDPGM
 
 
 
 


|    Changer de couleur
 
Une autre façon de faire dialoguer les programmes entre eux est d'utiliser
 
 les DTAQ. ils s'agit d'objets ressemblant à des data area a ceci prés :
 
           + les entrées peuvent êtres multiples.
 
           + les entrées sont classées entre elles FIFO (par défaut)
 
           + chaque lecture de DTAQ provoque la suppression de l'entrée lue.
 
           + il est possible d'être en attente d'informations sur une DTAQ
             (temps d'attente paramètrable)
 
           + la manipulation se fait par l'intermédiaire de pgms systèmes
                (API : QSNDDTAQ - QRCVDTAQ), donc en n'importe quel langage.
 
 
 ATTENTION, la suppression de l'entrée lue, ne récupère pas la place disque.
 
 vous ne devez donc pas faire grossir les DTAQ au dela de  16 Mo, ensuite,
   il faut détruire et recréér la DTAQ.


|    Changer de couleur
 
 
 La version 4.50 offre deux nouveaux paramètres à la cde CRTDTAQ :
...........................................................................
:                                                                         :
:  Taille de la file d'attente:     SIZE                                  :
:    Nombre maximal de postes . . .                *MAX16MB               :
:    Nombre initial de postes . . .                                       :
:  Récupération automatique . . . . AUTORCL        *NO                    :
:                                                                         :
: Le premier permet d'indiquer soit une taille (*MAX16MB / *MAX2GB)       :
:                              soit un nombre de postes                   :
:                                                                         :
: le deuxième (positionné à *YES) indique une récupération automatique de :
:    l'espace de stockage quand la taille est atteinte.                   :
:.........................................................................:
 
 Exemples de programmes utilisant une DTAQ créé par:
 
              CRTDTAQ QGPL/TEST MAXLEN(80)
 
 


|    Changer de couleur
 
A: PGM
   DCL  &lg   *DEC  LEN(5 0)  VALUE(80)
   DCL  &data *CHAR LEN(80)   VALUE('Données à écrire')
   .
   CALL  QSNDDTAQ  PARM(TEST QGPL &LG &DATA)
 
B: PGM
   DCL  &lg   *DEC  LEN(5 0)  VALUE(80)
   DCL  &data *CHAR LEN(80)
   DCL  &WAIT  *DEC  LEN(5 0)  VALUE(3600)   /* 1 heure */
           .
   BCL:   CALL QRCVDTAQ  PARM(TEST QGPL &LG &DATA &WAIT)
           IF    (&DATA *NE ' ') DO   /* recu qqchose */
                  . (traitement)
                  GOTO BCL   /* lecture suivante */
           ENDDO
                                                                            
La dernière possibilité est d'utiliser un fichier en indiquant au système
 de ne pas signaler la fin de fichier au programme qui le lit.
 
AVANT l'APPEL DU PGM : OVRDBF FILE(xxxx) EOFDLY(xx)


|    Changer de couleur
   xx indique au système (en secondes) la fréquence à laquelle il doit
     aller voir si un nouvel enregistrement est arrivé.
 
 Cela permet, en outre, d'utiliser un fichier sans être maître du pgm qui
  va écrire les enregistrements.
 
 Ex: lancement le matin d'un pgm d'impression de commandes fournisseurs
     utilisant le fichier en-tête de commandes fournisseurs avec EOFDLY(30)
 
 Le pgm ne recevra JAMAIS le fin de fichier (prévoir ENDJOB !)
  ====> il est "bloqué" sur l'ordre READ.
 
 Toutes les trentes secondes le système ira voir si un nouvel enregistrement
  est arrivé.    1/ Si oui, il passe la main au programme
                 2/ Si non, nouvelle phase d'attente de trente secondes.
 
Toutes les commandes saisies (donc ajoutées au fichier) seront
 automatiquement imprimées dans les 30 secondes.
 
Attention !!! si le pgm de lecture utilise un index, ne sera considéré comme
 nouvel enregistrement qu'un enregistrement ayant un clé supérieure à la
 dernière clé lue par le pgm (ce qui devrait être le cas dans notre exemple)


|    Changer de couleur
 
 
 Les versions V3R20, V3R60 ammènent un certain nombre de nouveautés
  en matière de communication APPC (SNA).
 
 -DDM : reconnait maintenant les DTAQ et DTAARA éloignées.
 
 
        CRTDTAQ DTAQ(essai) TYPE(*DDM)  RMTDTAQ(QGPL/ESSAI)
                                        RMTLOCNAME(S44xxxxx)
 
   et
 
        CRTDTAARA DTAARA(essai) TYPE(*DDM) RMTDTAARA(QGPL/ESSAI)
                                           RMTLOCNAME(S44xxxxx)
 
 
 
 La version 4.20, elle, implémente DDM sur IP (Data Area et DTAQ comprises)
 




©AF400