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. |
----------------------- ! ! -------------------- ! PGM1 ! ! ! ! ! ! PGM2 ! ! ! ! ! ---------------------- ! ! ! -------------------- ! ^ ! ! ! ! ------------- ----------------- ! ! ! ! _________!___!__________ <_________!___!__________> ######################## ! V ! ! # PGM1 écrit dans la # ! !________! ! # Data Area, PGM2 # ! ! # (qui peut s'exécuter # ! *DTAARA ! # plus tard) la lit. # ! ! ######################## ! ! <________________________> |
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. |
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 |
PROGRAMME SOIR. PGM DCL VAR(&DEPART) TYPE(*CHAR) LEN(6) RTVDTAARA DTAARA(*LDA (1 6)) RTNVAR(&DEPART) DLYJOB RSMTIME(&DEPART) ------ ----------------------------- ------ ----------------------------- ------ ----------------------------- ------ ----------------------------- ------ ----------------------------- ------ ----------------------------- ------ ----------------------------- ------ ----------------------------- ------ ----------------------------- ENDPGM |
- 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. |
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') |
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 |
- 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) |
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 |
PROGRAMME SOIR PGM DCL &SOIR *CHAR 6 RTVDTAARA DTAARA(SOIR) RTNVAR(&SOIR) DLYJOB RSMTIME(&SOIR) ------ ----------------------------- ------ ----------------------------- ------ ----------------------------- ------ ----------------------------- ------ ----------------------------- ------ ----------------------------- ------ ----------------------------- ------ ----------------------------- ENDPGM |
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. |
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) |
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) |
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) |
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) |