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

z/OS Discussion :

Application rexx ispf


Sujet :

z/OS

  1. #1
    Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 61
    Points : 54
    Points
    54
    Par défaut Application rexx ispf
    bonjour,

    j'ai une appli ecrite en REXX à reprendre (une usine à gaz paramétrée à mort). Dans un premier temps, faut faire des ameliorations.
    Par exemple : acces DB2 avec remplissage de panels : acces par appel de DSNTEP2 puis recup dans une sysprint, decodage du sysprint dans des stem à rallonge, alim d'une table mémoire avec ces stems, et affichage du panel à partir de la table memoire ...
    utilisation de nombreux stem (du style : zone.output.i.VAR.j)

    existe-t-il une méthode d'approche, je ne sais pas par quel bout le prendre !!!

    Au secours !

  2. #2
    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 qqoos Voir le message
    ... Par exemple : acces DB2 avec remplissage de panels : acces par appel de DSNTEP2 puis recup dans une sysprint, decodage du sysprint dans des stem à rallonge, alim d'une table mémoire avec ces stems, et affichage du panel à partir de la table memoire ...

    existe-t-il une méthode d'approche, je ne sais pas par quel bout le prendre !!!
    Peut-être faut-il coder les accès DB2 directement dans le programme REXX sans passer par DSNTEP2 et la lourdeur de la récupération des informations ...

    Par ailleurs, ce message ne me semble pas à sa place ( ici nous parlons du COBOL ) il serait mieux dans le sous-forum z/OS.
    Dans ce dernier on trouve justement un fil sur comment coder des ordres DB2 dans un REXX :
    Requête SQL et REXX

  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
    Voici un autre exemple de REXX TSO/ISPF qui exécute du SQL pour éditer le fichier résultant
    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
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    /* - EXEMPLE REXX SQL (EDIT DES TABLES 'SYSIBM.SYS%') */                
    /* -------------------------------------------------- */                
    SUBSYS = 'DB??' /* Nom du DB2 pour CONNECT */                           
                                                                            
    address TSO 'subcom DSNREXX'                                            
    If  rc then s_rc = rxsubcom('ADD','DSNREXX','DSNREXX')                  
    address DSNREXX 'CONNECT' SUBSYS                                        
    If SQLCODE <> 0 then do                                                 
       say "Erreur CONNECT DB2. SQLCODE =" SQLCODE'/'SQLSTATE               
       Exit 8                                                               
    End                                                                     
    /* -------------------------------------------------- */                
    address DSNREXX 'EXECSQL DECLARE C1 CURSOR FOR S1'                      
    SQLSTMT="SELECT DISTINCT NAME,DBNAME,TSNAME,DBID,OBID,COLCOUNT,CARD "  ,
                    "FROM SYSIBM.SYSTABLES  WHERE NAME LIKE 'SYS%' "       ,
                                             "AND CREATOR = 'SYSIBM'"       
    /* -------------------------------------------------- */                
    address DSNREXX 'EXECSQL PREPARE S1 FROM :SQLSTMT'                      
    If SQLCODE <> 0 then do                                                 
       ZEDLMSG = SUBSYS 'Erreur PREPARE SQLCODE='SQLCODE'/'SQLERRMC,        
            !! '/'SQLSTATE 'SQLERRP='SQLERRP ,                              
               'SQLERRD='SQLERRD.1','SQLERRD.2','SQLERRD.3',',              
                      !! SQLERRD.4','SQLERRD.5','SQLERRD.6                  
       Address ISPEXEC "SETMSG MSG(ISRZ001)"  /* message d'erreur ISPF */   
       exit 8                                                               
    End                                                                     
                                                                            
    Address DSNREXX 'EXECSQL OPEN C1'                                       
    If SQLCODE <> 0 then say "OPEN    SQLCODE =" SQLCODE'/'SQLSTATE         
                                                                            
    /* ---- ACCES AUX LIGNES DB2 DU SELECT ------------- */                 
    do I1 = 1 BY 1 while SQLCODE =  0 /* inutile de lire si OPEN KO   */    
       address DSNREXX "EXECSQL FETCH C1 INTO :NAME, :DBNAME, :TSNAME," ,   
                                    ":DBID, :OBID, :COLCOUNT, :CARD"        
       If SQLCODE <> 0 & SQLCODE ^= 100 then do  /* erreur avant la fin ? */
          TAB.I1 = "FETCH SQLCODE =" SQLCODE'/'SQLSTATE                     
          L1     = length(TAB.I1)                                           
          I1 = I1+1                                                         
          TAB.I1 = Copies('!',L1)                                           
          leave                                                             
       End                                                                  
       OUT=Left(NAME,22)!!Left(Strip(DBNAME)'.'TSNAME,20)      ,            
                          Right(DBID,3,'0') ' ' Right(OBID,3,'0') ' ' ,     
                          Right(COLCOUNT,5,'0') Right(CARD,4)               
       If I1 = 1 then do               /* ajout de 2 lignes titre */        
          TAB.I1=Left('  NOM TABLE',23) 'DBNAME  TSNAME      '        ,     
                                      'OBID  DBID  COUNT  CARD'             
          I1 = I1 + 1                                                       
          TAB.I1 = '>' Copies('-',length(OUT)+1) ; I1 = I1 + 1              
       End                                                                  
       TAB.I1 = '-' OUT     /* nouvelle ligne préparée en mémoire */        
       If I1 >= 500 then leave /* on affiche jusqu'à 500 lignes ! */        
    End                                                                     
    Address TSO                                                             
      
    /* ---- LIBERATION DES RESSOURCES DB2 -------------- */    
    TAB.0 = I1                                                 
    address DSNREXX "EXECSQL CLOSE C1"                         
    address DSNREXX "DISCONNECT"                               
                                                                                                            /* ---- EDIT DES COLONNES DB2 SELECTIONNEES -------- */                 
    address ISPEXEC "VGET (ZTEMPF)"                                         
    DDN = "TP"random()                                                      
    "ALLOC DD("DDN") DA('"ZTEMPF"') SHR"                                    
    "EXECIO * DISKW" DDN "(FINIS STEM TAB. FINIS)"                          
    Drop TAB.                                                               
    Address ISPEXEC "EDIT DATASET('"ZTEMPF"')"                              
    "FREE DD("DDN")"                                                        
    Exit

Discussions similaires

  1. Réponses: 4
    Dernier message: 16/03/2015, 10h23
  2. [REXX/ISPF/JCL] Probème réinit LMDINIT
    Par Pico----- dans le forum z/OS
    Réponses: 5
    Dernier message: 24/08/2011, 11h42
  3. Réponses: 2
    Dernier message: 11/08/2009, 17h09
  4. barre d'action ISPF et REXX
    Par qqoos dans le forum z/OS
    Réponses: 2
    Dernier message: 09/02/2009, 10h24
  5. Affichage ispf après erreur rexx
    Par sam01 dans le forum z/OS
    Réponses: 3
    Dernier message: 17/12/2008, 15h54

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