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 :

Question développement panel ISPF


Sujet :

z/OS

  1. #1
    Membre expert
    Avatar de Metalman
    Homme Profil pro
    Enseignant-Chercheur
    Inscrit en
    Juin 2005
    Messages
    1 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Enseignant-Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 049
    Points : 3 532
    Points
    3 532
    Par défaut Question développement panel ISPF
    Bonjour,

    Cette fois, ça n'a rien à voir avec mes envies "personnelles" de faire du C ou du COBOL à la maison.
    J'ai obtenu une fonction supplémentaire au travail : devoir maintenir un petit logiciel "fait maison".

    Ce logiciel est une suite de programmes entre PC et Mainframe.
    Côté Mainframe : des panels ISPF proposent de récupérer des données dans divers outils, et de les agréger.

    On m'a indiqué des PDS (PANELS, SKELS, SYSIN, MESSA, JCL....) où se trouvent des ressources, mais sans trop de précisions.
    N'étant pas du tout un expert en dév ISPF (et mainframe en général), je souhaiterais savoir s'il existe des tutoriaux plus rapides/moins impressionnants que la doc IBM ISPF.

    Je vais me jeter là dedans en attendant.
    Je n'hésiterai pas à venir poster ici si je suis bloqué par "quelque chose".
    Merci d'avance pour vos liens/tutos/aide !

    PS : On m'a expliqué que des fonctionnalités seraient codées en C.
    Est-il vraiment possible de lier un "truc" (case, bouton, ...) dans ISPF à un load module ?
    Comment cela fonctionne-t-il ? Une simple ligne TSO + JCL cachée derrière un bouton ISPF ?


    EDIT : J'oubliais le plus important dans l'histoire : je travaille plutôt en "prod"/"préprod", donc peu de gens ont développé "récemment".
    Celui qui s'occupait de ce logiciel a quitté l'entreprise, et quelqu'un d'autre a obtenu la charge de le gérer.
    Je dois faire de même en suppléant, et si possible ajouter des fonctionnalités (personne ne les a réclamé jusque là).


    EDIT2 : On me souffle "Dialog Manager" dans le bureau.
    Je vais "aussi" chercher ça du coup.
    (mais ça ne retire pas la demande de liens "simplifiés"/résumé global pour débutants ! )


    EDIT3 : On vient de me répéter des bouts. Il n'y a pas de C sur la partie mainframe dans les panels... mais juste du REXX, CLIST et JCL.
    Si quelqu'un peut me donner une description rapide de "l'archi" des panels ISPF, je prends !


    EDIT4 : ISPF Productivity Tools for z/OS
    Le 1er guide m'a été indiqué.
    Dès que je saurai comment tout faire...
    J'essayerai de faire un joli résumé comme pour l'autre topic ! ^^'
    --
    Metalman !

    Attendez 5 mins après mes posts... les EDIT vont vite avec moi...
    Les flags de la vie : gcc -W -Wall -Werror -ansi -pedantic mes_sources.c
    gcc -Wall -Wextra -Werror -std=c99 -pedantic mes_sources.c
    (ANSI retire quelques fonctions comme strdup...)
    L'outil de la vie : valgrind --show-reachable=yes --leak-check=full ./mon_programme
    Et s'assurer que la logique est bonne "aussi" !

    Ma page Developpez.net

  2. #2
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 464
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 464
    Points : 4 311
    Points
    4 311
    Par défaut
    En fait, ce qu'il faut comprendre, c'est qu'ISPF est un service d'affichage. Un peu comme un Window Manager sous Linux... Autrement dit, une application demande d'afficher tel ou tel écran (panel) dans l'environnement ISPF, qui s'exécute dans une session TSO.

    Pour qu'un programme demande l'affichage d'un panel, il utilise le service ISPEXEC, avec la sous-commande DISPLAY. ISPF va ensuite chercher ce panel dans les libs ISPF. Il est possible de spécifier des libs dynamiquement, au moyen d'une CLIST, dont le but est de charger ces libs puis de l'ancer le module d'entré de l'application.

    Une recherche sur ISPEXEC te mettra sur la voie
    Et ca marche aussi bien en REXX qu'en C.
    M.Dlb - Modérateur z/OS - Rédacteur et Modérateur Pascal

  3. #3
    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 Metalman Voir le message
    ...

    EDIT2 : On me souffle "Dialog Manager" dans le bureau.
    Je vais "aussi" chercher ça du coup.
    Pour moi, DIALOG MANAGER, c'est le nom du composant sous ISPF qui permet d'écrire, de tester, puis d'exécuter des "scripts" à base de "panels" ISPF.

    C'est effectivement une architecture et un mode de développement assez particuliers, mais beaucoup de produits IBM ou d'autres vendeurs, sans compter les innombrables produits "maison" utilisent DIALOG MANAGER.

  4. #4
    Membre expert
    Avatar de Metalman
    Homme Profil pro
    Enseignant-Chercheur
    Inscrit en
    Juin 2005
    Messages
    1 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Enseignant-Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 049
    Points : 3 532
    Points
    3 532
    Par défaut
    OK !
    Alors, après avoir checké quelques liens et vos explications...
    Si je comprends bien :

    - On écrit des panels avec l'outil DIALOG MANAGER ou PDF.
    - Il y a un "Primary Option Menu", qui est optionnellement relié à des "Lower-Level Menu". Et tout cela appelle des "Dialog Functions" et affiche des informations via des "Data Entry Panels".
    - Pour faire "avancer" les infos dans les menus, on a des variables "Dialog".

    ISPEXEC DISPLAY, c'est... pour afficher un primary option menu depuis la lib contenant tous les panels.

    C'est bien résumé ?
    Ou je suis à côté de la plaque ?

    Le programme "maison" est appelé depuis le 1er panneau ISPF (celui qui est customizé) par une commande. La commande est probablement un ISPEXEC DISPLAY vers un menu ?
    Il faut donc que je cherche le panneau principal ISPF (qui du coup a été personnalisé) pour voir ce qui est appelé quand la commande est tapée ?
    --
    Metalman !

    Attendez 5 mins après mes posts... les EDIT vont vite avec moi...
    Les flags de la vie : gcc -W -Wall -Werror -ansi -pedantic mes_sources.c
    gcc -Wall -Wextra -Werror -std=c99 -pedantic mes_sources.c
    (ANSI retire quelques fonctions comme strdup...)
    L'outil de la vie : valgrind --show-reachable=yes --leak-check=full ./mon_programme
    Et s'assurer que la logique est bonne "aussi" !

    Ma page Developpez.net

  5. #5
    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 Metalman Voir le message
    ...
    - On écrit des panels avec l'outil DIALOG MANAGER ou PDF.
    Pour moi DIALOG MANAGER, c'est le concept, les principes d'architecture et surtout le composant à qui on adresse les bonnes API (les ISPEXEC).

    PDF n'est que l'éditeur fourni avec ISPF.

    Ceci étant, les "objets" manipulés par DIALOG MANAGER et présentés sous forme de code sont écrits avec PDF (mais comme tous les autres langages du z/OS).

  6. #6
    Membre chevronné Avatar de bernard59139
    Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2006
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Octobre 2006
    Messages : 950
    Points : 2 064
    Points
    2 064
    Par défaut
    Bonjour
    ISPF, c'est le nom du logiciel,
    Dialog Manager, ce n'est qu'une partie de ce que fait ISPF, l'interface entre homme et machine.

    Le menu "primaire" est, normalement, le 1er menu (ou PANEL) d'une application. Il est appelé par la commande "ISPSTART PANEL...".
    Mais applicativement parlant, ce peut être n'importe quel PANEL.

    sans vouloir écrire un cours, et en résumé simpliste:
    • REXX ==> ce sont des programmes
    • PANEL ==> affichage/saisie/choix utilisateurs; stockés dans le ddname ISPPLIB.
    • SKELETON ==> skelette, souvent de JCL ou de SYSIN, stockés dans le ddname ISPSLIB.
    • MESSAGE ==> gestion de messages via ISPF. Je ne connais pas bcp de monde qui exploitent correctement ce point. stockés dans le ddname ISPMLIB.


    Selon des choix programmés, un PANEL peut afficher un autre panel, déclencher un rexx, appeler un programme, ....

    Le programme "maison" est appelé depuis le 1er panneau ISPF (celui qui est customizé) par une commande. La commande est probablement un ISPEXEC DISPLAY vers un menu ?
    Il faut donc que je cherche le panneau principal ISPF (qui du coup a été personnalisé) pour voir ce qui est appelé quand la commande est tapée ?
    Le 1er panneau peut appeler n'importe quoi (programme , rexx, panel,...). Il te faut enquêter et analyser.

  7. #7
    Membre expert
    Avatar de Metalman
    Homme Profil pro
    Enseignant-Chercheur
    Inscrit en
    Juin 2005
    Messages
    1 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Enseignant-Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 049
    Points : 3 532
    Points
    3 532
    Par défaut
    De retour au boulot, j'avais oublié la commande pour lancer, mais maintenant j'arrive à mieux voir.

    Sur le panneau ISPF principal (et générique) il fallait taper une commande TSO (je modifie TOUS les noms pour éviter tout problème...).
    J'ai demandé comment se nommaient les PDS avec les procédures et autres...
    Tous ont le même préfixe : LE.PREFIXE.*

    Dans LE.PREFIXE.SYSPROC, il y a un membre LEPROG.
    En l'ouvrant j'ai ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    /* Rexx */                                                       
    ADDRESS ISPEXEC "SELECT CMD(%LEPROGX00) NEWAPPL(PROG) SCRNAME(PROG)"
    Donc, quand on lance la commande, on demande un écran spécifique pour une application spécifique, et on fait tourner dedans la commande "LEPROGX00".

    En allant voir le membre LEPROGX00 (toujours du REXX), également dans LE.PREFIXE.SYSPROC, il y a plusieurs ISPEXEC "LIBDEF ..." :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ADDRESS ISPEXEC "LIBDEF ISPPLIB DATASET ID('LE.PREFIXE.PANEL')"     
    ADDRESS ISPEXEC "LIBDEF ISPMLIB DATASET ID('LE.PREFIXE.MESSA')"     
    ADDRESS ISPEXEC "LIBDEF ISPSLIB DATASET ID('LE.PREFIXE.SKELS')"
    J'ai compris que ça ajoute les différents PDS dans ce que l'on pourrait appeler le "LD_LIBRARY_PATH" dans le monde UNIX (je n'ai plus le nom en tête dans le monde Mainframe IBM de cette notion).

    Puis un ISPEXEC "VPUT..." (précédé de plusieurs déclarations).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ADDRESS ISPEXEC "VPUT (PROGSEL,PROGCSV,PROGEXT) PROFILE"
    Je suppose que ça crée un profile par utilisateur, vu que dans les déclarations ça utilise "userid".

    Et finalement, le plus important :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    DO FOREVER                                                       
      ADDRESS ISPEXEC "DISPLAY PANEL(LEPROGP01) MSG("!!mon_msg!!")"   
      mon_msg = ''                                                   
        IF RC>0 THEN EXIT                                            
        IF ZCMD=1 THEN mon_msg=LEPROGX01()                            
        IF ZCMD=2 THEN mon_msg=LEPROGX02()                            
        IF ZCMD=3 THEN mon_msg=LEPROGX03()                            
        IF ZCMD=4 THEN mon_msg=LEPROGX04()                            
        IF ZCMD=5 THEN mon_msg=LEPROGX05()                            
        IF ZCMD=6 THEN mon_msg=LEPROGX06()                            
    END
    Là...
    Là ça affiche le panel LEPROGP01 (probablement dans un des PDS mis en LIBDEF), et en fonction du choix (retourné par ZCMD ?), on appelle une autre procédure REXX.

    Dans LEPROGP01, il y a une partie BODY :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    /* *****************************  BODY   *************************** */ 
    )BODY WINDOW(79,24) CMD(ZCMD)                                           
                                MON SUPER PROGRAMME (PROG)               
     Commande ===> Z                                                        
     Action...                                                +----------+
        1  Option1 très très très longue avec plein de blabla | &user$$$ |
     Qui dépasse ici...                                       | &system$ |
        2  Option2                                            | &time$   |
        3  Option3                                            +----------+
        4  Option4                  
        5  Option5                  
        6  Option6
    Le Z désigne-t-il bien une zone "inscriptible" ?
    Pourquoi la valeur du Z se retrouve-t-elle dans ZCMD ? Parce qu'il y a cette ligne : )BODY WINDOW(79,24) CMD(ZCMD) ?
    Plus loin il y a un ")AREA" avec d'autres Z, comment sont-ils "connus" ? (cochés/pas cochés)
    Vers la fin il y a un ")INIT", ")REINIT" et un ")PROC", ils font eux aussi du traitement, mais avant ou après avoir affiché le PANEL ?
    Toute cette partie est écrite en PDF je suppose ?

    Merci à tous !
    Je pense avoir déjà beaucoup progressé dans le fonctionnement global des panels depuis vendredi.
    --
    Metalman !

    Attendez 5 mins après mes posts... les EDIT vont vite avec moi...
    Les flags de la vie : gcc -W -Wall -Werror -ansi -pedantic mes_sources.c
    gcc -Wall -Wextra -Werror -std=c99 -pedantic mes_sources.c
    (ANSI retire quelques fonctions comme strdup...)
    L'outil de la vie : valgrind --show-reachable=yes --leak-check=full ./mon_programme
    Et s'assurer que la logique est bonne "aussi" !

    Ma page Developpez.net

  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 Metalman Voir le message
    ...
    Puis un ISPEXEC "VPUT..." (précédé de plusieurs déclarations).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ADDRESS ISPEXEC "VPUT (PROGSEL,PROGCSV,PROGEXT) PROFILE"
    Je suppose que ça crée un profile par utilisateur, vu que dans les déclarations ça utilise "userid".
    Plus exactement, ça écrit dans le profil de l'utilisateur (au sens ISPF) les 3 variables citées. L'idée générale est de mémoriser un contexte qui pourra être retrouvé lors d'une connexion ultérieure. Ce qui est curieux ici c'est que les variables sont écrites tout de suite, mais bon ...


    Là ça affiche le panel LEPROGP01 (probablement dans un des PDS mis en LIBDEF)
    Oui. Issu du ISPPLIB donc du fichier LE.PREFIXE.PANEL


    , et en fonction du choix (retourné par ZCMD ?)
    Oui. Le choix est retourné dans ZCMD.



    Dans LEPROGP01, il y a une partie BODY :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    /* *****************************  BODY   *************************** */ 
    )BODY WINDOW(79,24) CMD(ZCMD)                                           
                                MON SUPER PROGRAMME (PROG)               
     Commande ===> Z                                                        
     Action...                                                +----------+
        1  Option1 très très très longue avec plein de blabla | &user$$$ |
     Qui dépasse ici...                                       | &system$ |
        2  Option2                                            | &time$   |
        3  Option3                                            +----------+
        4  Option4                  
        5  Option5                  
        6  Option6
    Le Z désigne-t-il bien une zone "inscriptible" ?

    Pourquoi la valeur du Z se retrouve-t-elle dans ZCMD ? Parce qu'il y a cette ligne : )BODY WINDOW(79,24) CMD(ZCMD) ?
    Plus loin il y a un ")AREA" avec d'autres Z, comment sont-ils "connus" ? (cochés/pas cochés)
    Là je sèche sur la signification du Z ...
    Peut être est une définition de type dans la section )ATTR


    Vers la fin il y a un ")INIT", ")REINIT" et un ")PROC", ils font eux aussi du traitement, mais avant ou après avoir affiché le PANEL ?
    De mémoire ...
    La section )INIT c'est l'affichage initial du panneau
    )REINIT c'est le ré affichage du panneau
    )PROC c'est le traitement du panneau



    Toute cette partie est écrite en PDF je suppose ?
    Oui sans doute ... mais là il n'y a rien de particulier à DIALOG MANAGER ... tout code ou autre sous ISPF est écrit avec PDF je dirais ...

  9. #9
    Membre chevronné Avatar de bernard59139
    Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2006
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Octobre 2006
    Messages : 950
    Points : 2 064
    Points
    2 064
    Par défaut
    Dans un panel; la variable Z est très particulière.

    Cette variable Z fait référence un une liste de variables:
    • stockée dans la variable .ZVARS
    • indexée par la position de lecture dans le PANEL (en lisant de haut en bas, et de gauche à droite)

  10. #10
    Membre expert
    Avatar de Metalman
    Homme Profil pro
    Enseignant-Chercheur
    Inscrit en
    Juin 2005
    Messages
    1 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Enseignant-Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 049
    Points : 3 532
    Points
    3 532
    Par défaut
    bernard59139 a raison !
    J'ai posé la question à mon responsable qui ne s'en souvenait plus non plus, nous avons commencé à lire les docs... et il a trouvé ceci :

    Dialog Developper's Guide and Reference, Page 167 (PDF)/Page 145 (Imprimé) :
    If Z variables occur as name placeholders within the model lines or the fixed portion, an )INIT section is needed. The real names of these fields are defined by assigning a name list, enclosed in parentheses if more than one name is given, to the control variable, .ZVARS. For example:
    )INIT
    .ZVARS = ’(NAME1,NAME2,NAME3)’
    Donc en effet, chaque case "Z" sera stockée dans ce que l'on pourrait nommer le "tableau .ZVARS", en fonction de sa position.
    Le 1er Z sera à la première case, le 2e à la deuxième case, ...
    Et il suffit d'utiliser la ligne du dessus en mettant les noms de variable au fur et à mesure pour récupérer chaque Z.

    Et plus loin dans le code on peut voir un "gros" déchargement de .ZVARS dans "beaucoup" de variables, puis des tests coché/pas coché.


    &ZCMD est initialisée avec la valeur de &z dans )INIT.
    On m'a expliqué que cela sert à "remettre à zéro".
    Je pense que ZCMD est modifiée dans la section )PROC en fonction des cases cochées avant, et/ou des variables sont mises dans des pools (comme le profile) pour pouvoir passer des paramètres entre panels.


    Donc ça va, dans pas trop longtemps je pense que je pourrai m'inspirer de tout ça pour écrire mes propres panels si nécessaire.
    --
    Metalman !

    Attendez 5 mins après mes posts... les EDIT vont vite avec moi...
    Les flags de la vie : gcc -W -Wall -Werror -ansi -pedantic mes_sources.c
    gcc -Wall -Wextra -Werror -std=c99 -pedantic mes_sources.c
    (ANSI retire quelques fonctions comme strdup...)
    L'outil de la vie : valgrind --show-reachable=yes --leak-check=full ./mon_programme
    Et s'assurer que la logique est bonne "aussi" !

    Ma page Developpez.net

  11. #11
    Membre expert
    Avatar de Metalman
    Homme Profil pro
    Enseignant-Chercheur
    Inscrit en
    Juin 2005
    Messages
    1 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Enseignant-Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 049
    Points : 3 532
    Points
    3 532
    Par défaut
    J'ai une autre question liée au "test" des panneaux.

    Pour le moment je n'ai fais qu'analyser l'existant pour bien comprendre l'organisation interne des PDS pour créer les panneaux.
    J'ai finalement copié ceux-ci pour "tester" mes modifications mais je suis un peu bloquer.

    J'ai copié :
    LE.PREFIXE.SYSPROC => METAL.LIB.SYSPROC
    LE.PREFIXE.SKELS => METAL.LIB.SKELS
    LE.PREFIXE.PANEL => METAL.LIB.PANEL
    LE.PREFIXE.MESSA => METAL.LIB.MESSA
    LE.PREFIXE.EXEC => METAL.LIB.EXEC

    En ne prenant QUE les membres liés au programme "maison".
    J'ai modifié les membres pour qu'ils renvoient vers METAL.LIB.* au lieu de LE.PREFIXE.*, et j'ai changé le nom du programme (et de tous les membres) de LEPROG vers MYPROG.

    Et j'ai ajouté un petit REXX ainsi :
    METAL.LIB.REXX(ALTLIB)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    /*REXX*/                                           
    ADDRESS TSO                                        
    BIBREXX = METAL.LIB.SYSPROC                  
    "ALTLIB ACT APPLICATION(EXEC) DATASET('"BIBREXX"')"
    Que je lance via la commande :
    tso exec 'METAL.LIB.REXX(ALTLIB)'

    Je peux ainsi lancer le panel en tapant :
    tso myprog

    Problème :
    METAL.LIB.SYSPROC(MYPROG) contient ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    /* Rexx */                                                       
    ADDRESS ISPEXEC "SELECT CMD(MYPROGX00) NEWAPPL(PROG) SCRNAME(PROG)"
    MYPROGX00 est aussi présent dans le PDS METAL.LIB.SYSPROC (ne faites pas attention au nom trop long, en vrai il ne dépasse pas la taille max... c'est juste pour ici), mais après avoir tapé tso myprog j'ai un :
    COMMAND MYPROGX00 NOT FOUND
    ***
    Et le classique :
    ******************************************************************************
    * ISPD223 *
    * *
    * Invalid command *
    * Command 'MYPROGX00' not found or contains invalid syntax. *
    * *
    * *
    * *
    * *
    * *
    * *
    * Current dialog statement: *
    * SELECT CMD(MYPROGX00) NEWAPPL(PROG) SCRNAME(PROG) *
    * *
    * Enter HELP command for further information regarding this error. *
    * Press ENTER key to terminate the dialog. *
    * *
    * *
    * *
    * *
    ******************************************************************************
    Que me manque-t-il pour qu'ISPF aille chercher dans le METAL.LIB.SYSPROC ?
    Quand je fais un tso isrddn, je vois mon METAL.LIB.SYSPROC dans la section SYSPROC, cela n'est pas suffisant ?
    Le MYPROGX00 est aussi en REXX.

    Merci !

    EDIT :
    En retirant de la section SYSPROC pour mettre le PDS en SYSEXEC via la commande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    =6
    allocate dataset('METAL.LIB.SYSPROC') FILE(SYSEXEC) SHR
    Et en répondant "free"...
    Ca fonctionne !!!!
    Mais !
    Les PDS qui étaient dans la SYSEXEC "avant" que je tape ma commande disparaissent...
    Je n'arrive pas à trouver comment concaténer en SYSEXEC (en fouinant ici, j'ai vu les commandes CONCAT et CONCATD, mais le système où je suis ne les connais pas)...
    Peut être ça du coup !

    EDIT2 : Avec le lien IBM, j'ai au moins un script REXX pour ajouter en SYSEXEC.
    Mais cela écrase aussi les SYSEXEC précédentes.... n'y a-t-il aucune commande pour concaténer du coup ?
    --
    Metalman !

    Attendez 5 mins après mes posts... les EDIT vont vite avec moi...
    Les flags de la vie : gcc -W -Wall -Werror -ansi -pedantic mes_sources.c
    gcc -Wall -Wextra -Werror -std=c99 -pedantic mes_sources.c
    (ANSI retire quelques fonctions comme strdup...)
    L'outil de la vie : valgrind --show-reachable=yes --leak-check=full ./mon_programme
    Et s'assurer que la logique est bonne "aussi" !

    Ma page Developpez.net

  12. #12
    Membre chevronné Avatar de bernard59139
    Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2006
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Octobre 2006
    Messages : 950
    Points : 2 064
    Points
    2 064
    Par défaut
    1. ALLOC+FREE, c'est normal. Les alloc en cours sont libérées pour satisfaire le demandeur
    2. je ne connais pas de méthode standard pour concatener en dynamique
    3. mais le plus important, c'est qu'au départ, c'était presque bon. code ceci:
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      /* Rexx */                                                       
      ADDRESS ISPEXEC "SELECT CMD(MYPROGX00) NEWAPPL(PROG) SCRNAME(PROG) PASSLIB"
      .
      je ne vois pas l'utilité de SCRNAME(PROG); suppression possible à envisager.

  13. #13
    Membre expert
    Avatar de Metalman
    Homme Profil pro
    Enseignant-Chercheur
    Inscrit en
    Juin 2005
    Messages
    1 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Enseignant-Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 049
    Points : 3 532
    Points
    3 532
    Par défaut
    Question probablement stupide... mais mieux vaut la poser !

    Quand je déclare un champ (avec un 'Z'), il est possible de limiter la taille du champ ?
    D'après mon exemple, le précédent dév a mis des caractères non-affichables pour cela (donc je ne peux pas les effacer sans faire de "c p'.' '$' all"...)

    Bref... comment est gérer la longueur max des variables Z entrées par l'utilisateur ? En mettant un caractère "interdit d'écrire" au niveau de la colonne qui suffit ? Comment puis-je définir ce caractère ? (c'est le ATTR( ) du début ?)

    Merci !
    --
    Metalman !

    Attendez 5 mins après mes posts... les EDIT vont vite avec moi...
    Les flags de la vie : gcc -W -Wall -Werror -ansi -pedantic mes_sources.c
    gcc -Wall -Wextra -Werror -std=c99 -pedantic mes_sources.c
    (ANSI retire quelques fonctions comme strdup...)
    L'outil de la vie : valgrind --show-reachable=yes --leak-check=full ./mon_programme
    Et s'assurer que la logique est bonne "aussi" !

    Ma page Developpez.net

  14. #14
    Expert éminent sénior
    Homme Profil pro
    Ingénieur d'Etude Mainframe/AS400
    Inscrit en
    Novembre 2012
    Messages
    1 767
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur d'Etude Mainframe/AS400
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2012
    Messages : 1 767
    Points : 10 765
    Points
    10 765
    Par défaut
    Citation Envoyé par Metalman Voir le message
    Question probablement stupide... mais mieux vaut la poser !

    Quand je déclare un champ (avec un 'Z'), il est possible de limiter la taille du champ ?
    D'après mon exemple, le précédent dév a mis des caractères non-affichables pour cela (donc je ne peux pas les effacer sans faire de "c p'.' '$' all"...)

    Bref... comment est gérer la longueur max des variables Z entrées par l'utilisateur ? En mettant un caractère "interdit d'écrire" au niveau de la colonne qui suffit ? Comment puis-je définir ce caractère ? (c'est le ATTR( ) du début ?)

    Merci !
    Bonjour,

    Pour ma part je contrôle la taille et le contenu des champs dans le REXX associé au Panel, je ne sais pas s'il est possible de le spécifier directement au niveau du panel.

  15. #15
    Membre expert
    Avatar de Metalman
    Homme Profil pro
    Enseignant-Chercheur
    Inscrit en
    Juin 2005
    Messages
    1 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Enseignant-Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 049
    Points : 3 532
    Points
    3 532
    Par défaut
    Ah !

    Dans mon cas j'ai juste bidouillé vite fait quelques modifs :

    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
    )BODY WINDOW(79,24) CMD(ZCMD)                                           
                                Application Test (FABAPP ?)                 
     Commande ===> Z                                                        
     Melange de couleurs :                  Couleur Actuelle :         +----------+
        A  Ajouter une couleur              *----------------*         | &user$$$ |
        R  Retirer totalement une couleur   |   0x&my-color  |         | &system$ |
        M  Modifier une couleur             |   &color-name  |         | &time$   |
        S  Soustraire une couleur           *----------------*         +----------+
    
      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
     SAREA9                                                                 
    )AREA SAREA9 /* *********************  AREA   ********************** */ 
     Paramètres de couleur :                                                
    $Rouge  . . . . . :$Z               $$                                  
    $Vert . . . . . . :$Z   $            $                                  
    $Bleu . . . . . . :$Z $ $  $ $    $  $
    Sachant que les $ sont issus du "c p'.' '$'"
    --
    Metalman !

    Attendez 5 mins après mes posts... les EDIT vont vite avec moi...
    Les flags de la vie : gcc -W -Wall -Werror -ansi -pedantic mes_sources.c
    gcc -Wall -Wextra -Werror -std=c99 -pedantic mes_sources.c
    (ANSI retire quelques fonctions comme strdup...)
    L'outil de la vie : valgrind --show-reachable=yes --leak-check=full ./mon_programme
    Et s'assurer que la logique est bonne "aussi" !

    Ma page Developpez.net

  16. #16
    Membre chevronné Avatar de bernard59139
    Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2006
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Octobre 2006
    Messages : 950
    Points : 2 064
    Points
    2 064
    Par défaut
    Metal, je ne connais que ce moyen!

    Il faudrait vérifier ce que sont les ATTRibuts des variables, mais je fais comme ça.

    edit: j'ai répondu un peu trop vite. le statement VER avec LEN, permet de vérifier plein de choses, dont la longueur. Mais c'est plus pour de la saisie, je n'ai jamais utiliser.

  17. #17
    Membre averti
    Femme Profil pro
    Architecte technique
    Inscrit en
    Janvier 2008
    Messages
    179
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2008
    Messages : 179
    Points : 350
    Points
    350
    Par défaut
    en fait, la fin d'une zone &Z est déterminée par la présence d'un caractere attribut.
    sur mon site l'usage est de mettre un + , meme fonction que ton $
    je crois que le + est un defaut cependant mais je n'en suis pas sure

    ex :

    %Q console : çZ +

  18. #18
    Membre expert
    Avatar de Metalman
    Homme Profil pro
    Enseignant-Chercheur
    Inscrit en
    Juin 2005
    Messages
    1 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Enseignant-Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 049
    Points : 3 532
    Points
    3 532
    Par défaut
    Je vais tester ça demain...
    Je vais changer le ATTR tout en haut par un autre caractère ($ par exemple).

    Donc si je veux limiter les entrées "rouge, vert bleu" à 3 caractères, je dois déclarer sur le panel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $Rouge  . . . . . :$Z  $
    $Vert . . . . . . :$Z  $
    $Bleu . . . . . . :$Z  $
    Soit en gros : $Zxx$
    Z suivi de 2 espaces et de mon caractère ATTR.
    Je limiterai à 255 la valeur max, mais ça, ce sera dans la partie PROC.

    Donc je note que VER et LEN seront plus appropriés pour des champs à longueur variable/indéterminé.
    --
    Metalman !

    Attendez 5 mins après mes posts... les EDIT vont vite avec moi...
    Les flags de la vie : gcc -W -Wall -Werror -ansi -pedantic mes_sources.c
    gcc -Wall -Wextra -Werror -std=c99 -pedantic mes_sources.c
    (ANSI retire quelques fonctions comme strdup...)
    L'outil de la vie : valgrind --show-reachable=yes --leak-check=full ./mon_programme
    Et s'assurer que la logique est bonne "aussi" !

    Ma page Developpez.net

  19. #19
    Membre chevronné Avatar de bernard59139
    Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2006
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Octobre 2006
    Messages : 950
    Points : 2 064
    Points
    2 064
    Par défaut
    en résumé, une zone se termine là où commence une autre zone.

    Quelque soit le type de chacune de ces zones (text, saisie, ..).

  20. #20
    Membre expert
    Avatar de Metalman
    Homme Profil pro
    Enseignant-Chercheur
    Inscrit en
    Juin 2005
    Messages
    1 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Enseignant-Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 049
    Points : 3 532
    Points
    3 532
    Par défaut
    J'ai bien avancé !
    Mais j'ai un peu butté sur le ATTR... déjà je n'ai mis qu'un seul caractère et ça a crashé (évidemment !), j'ai cherché, et j'ai trouvé toutes ces réponses :

    )ATTR(%+_)
    ATTR doit recevoir 3 caractères en paramètre :
    1er : pour définir début de zone "highlight"
    2e : début de zone "lowlight"
    3e : début de zone de saisie/entrée

    IBM InfoCenter ATTR

    Ensuite, j'ai eu un crash sur la dynamic area mal définie.... (à cause des caractères non affichables que j'ai remplacé par les valeurs par défaut %+_) :
    )AREA SAREA9

    Une area doit être définie après qu'une section lui soit allouée dans le BODY.
    Et ATTR contient aussi le délimiteur.

    ATTR :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    )ATTR DEFAULT(%+_) FORMAT(MIX)
    £ AREA(SCRL) EXTEND(ON)           /* Scrollable Area */
    BODY :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    )BODY WINDOW(79,24) CMD(ZCMD)
    %                      +  MY BODY'S READY
    %Commande ===>+Z 
    +Melange de couleurs :                  Couleur Actuelle :        
       %A +Ajouter une couleur              *----------------*        
       %R +Retirer totalement une couleur   |   0x&my-color  |        
       %M +Modifier une couleur             |   &color-name  |        
       %S +Soustraire une couleur           *----------------*        
      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
    £SAREA9                                                         £
    Le £ défini la zone où sera mise la dynamic area.
    On peut en définir plusieurs (voir le lien de l'infocenter IBM)

    Et finalement on déclare la dynamic area :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    )AREA SAREA9 /* *********************  AREA   ********************** */ 
    +Paramètres de couleur :                                                
    +Rouge  . . . . . :+Z  +                                                
    +Vert . . . . . . :+Z  +                                                
    +Bleu . . . . . . :+Z  +
    Il ne reste plus qu'à tout écrire dans INIT, REINIT et PROC.

    IBM InfoCenter AREA

    Par contre j'ai un autre problème....
    J'ai gardé la vieille définition de ZVARS dans INIT et PROC... et quand je lance mon panel (tso myapp), ça crash en me disant que le compteur n'est pas bon.

    Même dans INIT il faut avoir le nombre correct de paramètres/champs ?
    C'est dans INIT que l'on va dire quel Z est associé à quelle variable ?

    Merci à tous ! J'avance bien bien !

    EDIT :
    Je commence à sécher... j'ai ajouté des variables dans .ZVARS... j'en ai retiré.... j'ai changé la syntaxe pour suivre strictement ce qu'il y avait dans la doc...
    Ca ne fonctionne pas.
    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
    )ATTR DEFAULT(%+_) FORMAT(MIX)                                          
    /* ------------------------------------------------------------------*/ 
    /* PANEL MYAPPP01                                                    */ 
    /* ------------------------------------------------------------------*/ 
    /* Panel de test                                                     */ 
    /* ------------------------------------------------------------------*/ 
                                                                            
     £ AREA(SCRL) EXTEND(ON)           /* Scrollable Area */                
                                                                            
    /* *****************************  BODY   *************************** */ 
    )BODY WINDOW(79,24) CMD(ZCMD)                                           
    %                        +  ColorApp (Test Fabrice)                     
    %Commande ===>+Z                                                        
    +Melange de couleurs :                  Couleur Actuelle :        +*----------*
       %1 +Ajouter une couleur              *----------------*        +| &user++++|
       %2 +Retirer totalement une couleur   |   0x&my-color  |        +| &system++|
       %3 +Modifier une couleur             |   &color-name  |        +| &time++++|
       %4 +Soustraire une couleur           *----------------*        +*----------*
      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
    £SAREA9                                                                 
    )AREA SAREA9 /* *********************  AREA   ********************** */ 
    +Paramètres de couleur :                                                
    +Rouge  . . . . . :+Z  +                                                
    +Vert . . . . . . :+Z  +                                                
    +Bleu . . . . . . :+Z  +                                                
    
                                                                            
    /* *****************************  INIT   *************************** */ 
    )INIT                                                                   
    /* Valoriser les variables locales avec les valeurs du pool PROFILE  */ 
    /* <PROFILE <LOCALE  <Conversion                                     */ 
    /**/                                                                    
    &ZCMD = ' '                                                             
    VGET (MYRED MYGREEN MYBLUE) PROFILE                                     
    
    /* Chargement des informations du cartouche: UserId, Heure, Partition */
    &user    = &ZUSER    
    &time    = &ZTIME    
    &system  = &ZSYSID   
    
    /* .ZVARS = '(ZCMD MYRED MYGREEN MYBLUE TESTMOI)' */   
    .ZVARS = '(ZCMD,MYRED,MYGREEN,MYBLUE)'                 
    .CURSOR = ZCMD                                         
    .HHELP  = MYAPPH00                                     
    &ZHTOP  = MYAPPH00   
    
    /* *****************************  REINIT *************************** */ 
    )REINIT                                                                 
                                                                            
    &MYRED = 000                                                            
    &MYBLUE = 000                                                           
    &MYGREEN = 000                                                          
                                                                            
    /* *****************************  PROC   *************************** */ 
    )PROC                                                                   
    /* ===========  VERIFICATION DES VALEURS ENTREES =================== */ 
    /* -> VERIF <- l'option doit être comprise entre 1 et 4.             */ 
    VER (&ZCMD,RANGE,1,4)                                                   
    
    VPUT (MYRED MYGREEN MYBLUE) PROFILE                                     
    )END
    Je continue à avoir un :
    Panel 'MYAPPP01' error
    Number of .ZVARS field names does not equal number of "Z" in/out fields.
    --
    Metalman !

    Attendez 5 mins après mes posts... les EDIT vont vite avec moi...
    Les flags de la vie : gcc -W -Wall -Werror -ansi -pedantic mes_sources.c
    gcc -Wall -Wextra -Werror -std=c99 -pedantic mes_sources.c
    (ANSI retire quelques fonctions comme strdup...)
    L'outil de la vie : valgrind --show-reachable=yes --leak-check=full ./mon_programme
    Et s'assurer que la logique est bonne "aussi" !

    Ma page Developpez.net

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 4 1234 DernièreDernière

Discussions similaires

  1. Définition de panels ISPF
    Par tsukasa_ dans le forum z/OS
    Réponses: 2
    Dernier message: 09/04/2010, 09h20
  2. panel ISPF et rexx
    Par qqoos dans le forum z/OS
    Réponses: 2
    Dernier message: 24/02/2010, 10h54
  3. Réponses: 2
    Dernier message: 11/08/2009, 17h09
  4. Réponses: 0
    Dernier message: 17/02/2009, 15h37
  5. Réponses: 4
    Dernier message: 03/02/2009, 14h02

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