IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JCL - SORT Discussion :

Passage de variable à une carte SYSIN dans un JCL


Sujet :

JCL - SORT

  1. #1
    Membre du Club
    Inscrit en
    Avril 2005
    Messages
    175
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 175
    Points : 59
    Points
    59
    Par défaut Passage de variable à une carte SYSIN dans un JCL
    Je voudrais passer la valeur v1 de la variable var à la carte SYSIN contenue dan le fichier nom_fic_sysin avec le JCL suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    //debut job....
    //proc maproc
    ...
    //SYSIN DD DSN=nom_fic_sysin
    ...
    //PEND
    //EXEC maproc, var=v1
    //fin job.
    ..

    Comment faire ?

  2. #2
    Membre confirmé Avatar de Homer-ac
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    449
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 449
    Points : 586
    Points
    586
    Par défaut
    Il faudrait préciser ce que vous voulez faire exactement.
    Quel est le problème exact ? Récupérer une donnée variabilisée dans le JCL dans un programme ? Le plus simple est alors de passer par le PARM=.

    Un rappel JCL préalable :
    A moins de disposer d'un outil capable d'interpréter des variables (TWS, ISPF Dialog Manager ...) On n'a pas le droit de variabiliser un SYSIN de donnée (type DD *). SYSIN data non permis de plus dans une PROC, il faut créer un fichier.
    Si la question est de passer une ou des variables JCL (variables d'appel de proc ou via l'ordre JCL SET) à un programme, le plus simple est de passer par le PARM qui peut comporter des variables (// EXEC PGM=MYPROG,PARM='&VAR') On a le droit à 100 caractères.
    Maintenant si on veut créer un fichier QSAM repris en SYIN et qui va contenir les variables valorisées, il faudra écrire le programme qui fait ça. Il m'arrive d'utiliser un REXX très simple qui crée un fichier LRECL 80 depuis ce qui est reçu en PARM. Ce n'est pas beaucoup plus compliqué de faire la même chose en COBOL par exemple. Je peux vous donner un exemple de l'un ou l'autre au besoin.
    Maintenant si vous disposez d'un outil comme TWS sur le site, vous avez droit de valoriser un SYSIN DATA, Un simple IEBGENER permettra alors de créer le fichier.
    Enfin, si c'est le nom du fichier lui même que l'on veut valoriser, là c'est du standard (exemple //SYSIN DD DSN=&SYSUID..MY.FIC.SYSIN)

  3. #3
    Membre confirmé Avatar de Homer-ac
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    449
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 449
    Points : 586
    Points
    586
    Par défaut
    Après tout, puisque le forum z/OS est en héritage du forum COBOL, c'est peut-être l'occasion de proposer un exemple basique d'un COBOL et du JCL z/OS correspondant de création d'un fichier destiné à être repris en SYSIN via un PARM valorisé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
           Identification Division.                                         
           Program-id. COBPARM.                                             
          * CREATION D'UN ENREGISTREMENT SYSIN DEPUIS UN PARM RECU          
          * JCL :                                                           
          * //LOADLB SET LOADLB='MY.PGM.LOADLIB'                            
          * //*--------------------------------                             
          * //STEP00   EXEC PGM=IEFBR14      DELETE PREVENTIF               
          * //SYSUT0   DD  DISP=(MOD,DELETE),DSN=&SYSUID..FICHIER.SYSIN,    
          * //            SPACE=(TRK,(1,1)),UNIT=SYSALLDA,                  
          * //            DCB=(BLKSIZE=0,LRECL=80,RECFM=FB)                 
          * //*                                                             
          * //TESTER   EXEC PGM=COBPARM,                                    
          * // PARM='ENREGISTREMENT RESULTANT PROGRAMME COBPARM DE &LOADLB' 
          * //STEPLIB  DD  DISP=SHR,DSN=&LOADLB                             
          * //SYSOUT   DD  SYSOUT=*                                         
          * //SYSUT2   DD  DISP=(NEW,CATLG),DSN=&SYSUID..FICHIER.SYSIN,     
          * //            SPACE=(TRK,(1,1)),UNIT=SYSALLDA,                  
          * //            DCB=(BLKSIZE=0,LRECL=80,RECFM=FB)                 
          * ============================================================    
           Environment Division.                                            
           Input-Output Section.                                            
           File-Control.                                                    
               Select SORTIE Assign To SYSUT2.                              
           Data Division.                                                   
           File Section.                                                    
           FD SORTIE                                                        
               Recording Mode is F    
               Block 0.                                            
           01  ENR-SORTIE               Pic X(80).                 
          *=======================                                 
           Working-Storage Section.                                
          *-----------------------                                 
           Linkage Section.                                        
          *-----------------------                                 
           01  LS-PARM.                                            
               05  LS-PARM-LNG           Pic S9(4) Binary.         
               05  LS-PARM-DATA          Pic x(100).               
          *================================                        
           Procedure Division Using LS-PARM.                       
          *--------------------------------                        
           Main Section.                                           
               Open  Output SORTIE                                 
               If LS-PARM-LNG > 0                                  
                  Move LS-PARM-DATA(1:LS-PARM-LNG) to ENR-SORTIE   
                  Write ENR-SORTIE                                 
               End-If                                              
               Close SORTIE                                        
               Goback.                                             
           End Program COBPARM.

  4. #4
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2005
    Messages
    1 473
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 473
    Points : 3 283
    Points
    3 283
    Par défaut
    Citation Envoyé par marti Voir le message
    Je voudrais passer la valeur v1 de la variable var à la carte SYSIN contenue dan le fichier nom_fic_sysin avec le JCL suivant :

    //debut job....
    //proc maproc
    ...
    //SYSIN DD DSN=nom_fic_sysin
    ...
    //PEND
    //EXEC maproc, var=v1
    //fin job...

    Comment faire ?
    Je pense effectivement que ce n'est pas possible en JCL standard sauf à passer par les différentes "astuces" que décrit fort bien notre ami Homer-ac ... Mais bon ça reste un poil compliqué ...

    Là, clairement, je pense que le JCL du z/OS, que, par ailleurs, nous adorons tous ici, dans ce sous-forum, doit avouer une insigne faiblesse face au SHELL d'un Unix par exemple ...

  5. #5
    Membre habitué
    Homme Profil pro
    Retraité ex-Développeur Grands Systèmes IBM
    Inscrit en
    Août 2008
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Retraité ex-Développeur Grands Systèmes IBM

    Informations forums :
    Inscription : Août 2008
    Messages : 74
    Points : 133
    Points
    133
    Par défaut
    Bonsoir,
    J'ai eu ce problème il y a quelques temps et entre autre pour paramétrer des commandes de IDCAMS dans des gros JCL.
    En prod, il y a TWS (ex OPC) et les paramètres de la forme &USER sont substitués mais en développement et test avec la commande SET en tête de job on paramètre sans problème les commandes JCL mais pas celles IN-LINE des utilitaires et des programmes d'applications.
    L'utilisation de IPOUPDTE ne résout pas le problème les commandes de conversion sont également IN-LINE.
    J'ai du faire réinventer la poudre... un programme simplifié de IPOUPDTE a été développé en Cobol, il peut prendre des ordres de conversion dans le PARM de la commande JCL "EXEC" et une suite en SYSIN.
    Je peux communiquer le source à l'occasion.
    J'accepte également des solutions plus ... académiques
    A+
    Jean-M

  6. #6
    Membre confirmé Avatar de Homer-ac
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    449
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 449
    Points : 586
    Points
    586
    Par défaut
    Méfiance avec IPOUPDTE, Cet utilitaire d'installation IBM s'est appelé ensuite CPPUPDTE et j'en ai personnellement perdu la trace en z/OS 1.9.
    Si le site dispose de TWS, c'est très personnel, mais je trouve dommage de ne pas donner aux études un OPC spécifique à leur disposition. Si le produit est déjà installé, ça ne coûte éventuellement qu'une petite formation et ça peut aider en particulier la recette d'appli.
    Maintenant, mais il faut effectivement connaître un peu REXX et ISPF Dialog Manager, ISPF faif ça très bien, soit via une macro REXX appliquée sur tout un PDS, soit via par des squelettes ISPF, justement faits pour la variabilisation. Pour un équivalent IPOUPDATE, j'ai aussi dans un coin un REXX à tout faire qui lit un fichier des variables et l'applique trivialement sur un fichier en sortie, juste pour éviter la couche ISPF en batch (facile avec l'instruction INTERPRET, mais c'est du gaget).

    Spécifiquent pour les mises à jour paramètres de masse, il serait intéressant d'ouvrir le débat sur des solutions produits non basiques MVS. Certains offrent certainement des solutions de ce type. Par exemple, je sais qu'un utilitaire CORTEX fait ça facilement. En cherchant un peu, des produits comme PDSMAN ou FILEAID, souvent installés doivent bien avoir un module du genre. Perso je peux fournir des exemples REXX/ISPF.

  7. #7
    Membre régulier Avatar de Bragu Demon
    Homme Profil pro
    Intégrateur d'Explopitation
    Inscrit en
    Juin 2013
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Intégrateur d'Explopitation
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2013
    Messages : 125
    Points : 117
    Points
    117
    Par défaut
    Bon OK, je déterre , mais bon ... MVS n'est pas mort !!!

    Citation Envoyé par Luc Orient Voir le message
    Je pense effectivement que ce n'est pas possible en JCL standard sauf à passer par les différentes "astuces" que décrit fort bien notre ami Homer-ac ... Mais bon ça reste un poil compliqué ...

    Là, clairement, je pense que le JCL du z/OS, que, par ailleurs, nous adorons tous ici, dans ce sous-forum, doit avouer une insigne faiblesse face au SHELL d'un Unix par exemple ...
    C'est exactement ce que je pensais aussi.

    Une "astuce" peut être de passer par l'exécution d'un rexx qui ira générer du jcl qui sera exécuter.
    Via un ordonnanceur (genre TWS) avec une appli qui exécute un job qui exécute un rexx qui complète un squelette de jcl puis qui l'exécute .....

    Jusqu'à aujourd'hui ou je suis tombé là dessus :
    As of z/OS 2.1 (released 30 September 2013), using symbols in JES2 in-stream data is possible by adding the SYMBOLS keyword to the DD statement. Possible values are:

    • SYMBOLS=JCLONLY: Replaces JCL symbols and JES symbols in the in-stream data.
    • SYMBOLS=EXECSYS: Replaces JCL symbols, JES symbols, and system symbols defined on the system during job execution.
    • SYMBOLS=CNVTSYS: Replaces JCL symbols, JES symbols, and system symbols defined on the system during JCL conversion.


    The symbols must have been exported.
    An example is as follows, from [2]:

    Code JCL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    // EXPORT SYMLIST=(DSN,VOL)
    // SET DSN='ABC.DATA',VOL='123456'
    //STEP1 EXEC PGM=USERPGM1
    //DATA     DD DSN=&DSN,DISP=SHR
    //SYSIN    DD *,SYMBOLS=EXECSYS
      SYSTEM=&SYSNAME,DSNAME=&DSN,VOLUME=&VOL
      FUNCTION='&APPL_NAME'
    /*

    For more information, including the syntax for configuring where the symbol substitution log goes, see:




    Bon je n'ai pas testé, mais ça à l'air prometteur.

  8. #8
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2005
    Messages
    1 473
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 473
    Points : 3 283
    Points
    3 283
    Par défaut
    Citation Envoyé par Bragu Demon Voir le message
    Bon OK, je déterre , mais bon ... MVS n'est pas mort !!!
    Effectivement, depuis quelques versions du z/OS (en gros la fin des versions en 1.x et les premières versions en 2.x), il y a des évolutions sur ce merveilleux outil du Mainframe qu'est le JCL, et qu'on croyait figé depuis des siècles (à tort semble t il) ...

    Principalement (et j'en oublie sans doute) :
    • possibilité d'avoir des SYSIN en ligne dans les PROC,
    • augmentation de la longueur du champ PARM,
    • extension des possibilités des SYMBOLs.


    J'ai fait un essai avec ce que tu indiques, et effectivement, ça a l'air de fonctionner. Je trouve juste la solution proposée un peu compliquée mais bon ...

    Et donc oui le bon vieux JCL n'est pas mort ...

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 18
    Points : 9
    Points
    9
    Par défaut Information vérifiée
    Bonsoir,

    Je ressors ce sujet pour vous dire que j'ai bien testé.
    ça fonctionne très très bien

    Vous pouvez vous faire des proc si vous n'avez pas le temps de faire un REXX, en utilisant l'exemple ci-dessous, si vous avez plusieurs fois besoin de soumettre quelque chose.

    Dans mon cas c'était pour soumettre une liste de fichiers sur un serveur en une seule fois

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    //ENVOIE   PROC             >>>> Nom de la procédure "ENVOIE" + Début de la procédure par l'ordre PROC                                    
    //* ------------------------------------------------------------------
    //         EXPORT SYMLIST=TITI     >>>> je définie ma variable                               
    //         SET TITI=&TITI.              >>>> je déclare le nom de la variable qu'elle aura dans mon JCL                               
    //* ------------------------------------------------------------------
    //ST03102  EXEC PGM=XXXXXX,PARM=('XXXXX')                         
    //SYSPRINT DD  SYSOUT=*                                               
    //STEPLIB  DD  DISP=SHR,DSN=XXXXX                        
    //DMNETMAP DD  DISP=SHR,DSN=XXXX                                                      
    //DMPRINT  DD  SYSOUT=*                                               
    //SYSIN    DD  *,SYMBOLS=EXECSYS          >>>> C'est la commande à ne pas oublier. elle va vous permettre de dévariabiliser TITI ;)                          
           SIGNON ESF=YES                                                 
            SUBMIT PROC=XXXX  -                                        
            MAXDELAY=UNLIMITED    -                                       
            CASE=YES              -                                       
            SNODE=XXXXXXX          -                                     
            &&TODSN=xxxxP.&TITI._2017001_010000.TXT -           >>>> La variable commence pas "&" et fini par un point "."      
            &&VAR2=CMD    -                                               
            &&VAR3=POWERSHELL.EXE -                                       
            &&VAR4=XXXXXX -                                          
            &&VAR5=-PATH  -                                               
            &&VAR6=-NEWNAME -                                                                                     
            &&SHARE='XXXXXX' -             
            &&FILE2ARC=XXXXX.P&TITI..PS.D170101.H0100                       
           SIGNOFF                                                           
    /*                                                                                                                            
    //*
    //         PEND   >>>> Fin de la procédure par l'ordre PEND                                                        
    //*------- LISTE DES FICHIERS QUE NOUS ALLONS ENVOYER                    
    //FILE001  EXEC ENVOIE,TITI=FICHIER1           >>>> Nom du Step (FILE001) qui sera soumis et déclaration de la valeur qui sera prise par la variable ici TITI va prendre la valeure FICHIER1                          
    //FILE002  EXEC ENVOIE,TITI=FICHIER2

    Le JCL va boucler autant de fois que vous avez de lignes EXEC ENVOIE et TITI sera changé à chaque fois.

    J'espère que ce post vous aidera

    Cordialement

Discussions similaires

  1. Assigner a une variable une valeur lue dans un fichier texte
    Par mapotam dans le forum Shell et commandes GNU
    Réponses: 7
    Dernier message: 22/12/2009, 14h46
  2. Réponses: 4
    Dernier message: 10/12/2009, 15h08
  3. Déplacer une carte rendue dans un JPanel
    Par matthieu637 dans le forum 2D
    Réponses: 7
    Dernier message: 28/08/2008, 23h45
  4. problème de passage de variables à une fonction
    Par franklin626 dans le forum Langage
    Réponses: 2
    Dernier message: 16/12/2007, 14h22
  5. Problème de passage de variable à une fonction
    Par PunkMetal dans le forum Langage
    Réponses: 2
    Dernier message: 26/04/2007, 23h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo