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. #41
    Expert éminent sénior
    Homme Profil pro
    Ingénieur d'Etude Mainframe/AS400
    Inscrit en
    Novembre 2012
    Messages
    1 765
    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 765
    Points : 10 748
    Points
    10 748
    Par défaut
    Je n'utilise pas les zvars, je nomme directement les variables.

    Donc dans le REXX (REXXNAME) pour récupérer les champs saisissables :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    PARSE ARG OPTION VAR1 VAR2 VAR3
    Dans le PANEL

    => Les variables sont définies en type(input)

    => au niveau de la PROC je déclare :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    )PROC                                               
    &zsel = 'CMD(%REXXNAME &OPTION &VAR1 &VAR2 &VAR3)'
    Pour ce qui est de la sauvegarde des champs saisis (je le fais rarement) cela peut se faire dans le REXX

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ADDRESS ISPEXEC "VPUT (OPTION) PROFILE"    
    ADDRESS ISPEXEC "VPUT (VAR1) PROFILE" 
    ADDRESS ISPEXEC "VPUT (VAR2) PROFILE" 
    ADDRESS ISPEXEC "VPUT (VAR3) PROFILE"
    Et dans le PANEL à l'INIT :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    )INIT                 
    VGET (OPTION) PROFILE   
    VGET (VAR1) PROFILE
    VGET (VAR2) PROFILE
    VGET (VAR31) PROFILE

  2. #42
    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 donc pour résumer :

    1) REXXNAME est lancé.
    2) REXXNAME contient ADDRESS ISPEXEC "SELECT PANEL(PANELNAM)"3) Le panel PANELNAM est appelé, et est affiché
    4) Le panel contient des variables dans le )BODY... l'utilisateur entre des valeurs dans plusieurs champs, puis valide
    5)En )PROC il y a :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    )PROC                                               
    &zsel = 'CMD(%REXXNAME &OPTION &VAR1 &VAR2 &VAR3)'
    ...
    Mais à partir de maintenant, le panel appelle ENCORE une fois REXXNAME ?
    Ca n'est pas un "retour vers REXXNAME" mais l'ouverture d'un 2e REXXNAME.
    (On a : REXXNAME, "... SELECT PANEL(PANELNAM)" -> PANELNAM "...CMD..." -> REXXNAME )
    Il faudrait faire un VPUT en )PROC pour quitter "correctement" et respecter la pile d'appels, puis faire un VGET dans le REXX...
    (On arrive à la fin du panel après avoir VPUT les champs, donc on revient dans le REXX qui peut faire un VGET et continuer son traitement)

    6 et 7) Si on veut ouvrir un autre panel avec des valeurs sauvegarder, utiliser :
    A mettre dans le REXX qui va appeler...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ADDRESS ISPEXEC "VPUT (OPTION) PROFILE"    
    ADDRESS ISPEXEC "VPUT (VAR1) PROFILE" 
    ADDRESS ISPEXEC "VPUT (VAR2) PROFILE" 
    ADDRESS ISPEXEC "VPUT (VAR3) PROFILE"
    A mettre dans le panel appelé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    )INIT                 
    VGET (OPTION) PROFILE   
    VGET (VAR1) PROFILE
    VGET (VAR2) PROFILE
    VGET (VAR31) PROFILE
    --
    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

  3. #43
    Expert éminent sénior
    Homme Profil pro
    Ingénieur d'Etude Mainframe/AS400
    Inscrit en
    Novembre 2012
    Messages
    1 765
    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 765
    Points : 10 748
    Points
    10 748
    Par défaut
    En effet le REXXNAME est appelé à chaque fois. Dans mes PANEL c'est toujours le REXX qui gère l'affichage du panel (et donc des variables associées). En quelque sorte le panel envoie le contexte au REXX.
    (Je ne suis pas certain d'être très clair). J'enverrai un exemple demain d'ensemble REXX/PANEL.

    EDIT : Chose promise chode due. A noter que sur ce panel je n'ai pas le classique "OPTION". Il s'agit d'un panel pour l'accès à des PDS partitionnés selon un enfironnement (une sorte de menu "2").

    LE REXX :

    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
    /* REXX - */                                                  
    /* MODULES DES COMMANDES DU PANEL */                          
                                                                  
    /*----------------------------------------------------------*/
    /*- MAIN PROCESS -------------------------------------------*/
    /*----------------------------------------------------------*/
    MAIN:                                                         
                                                                  
    /* Récuperation des paramètres*/                              
    PARSE ARG PEnv PAction PMbr                                   
    /* Récuperation du USER */                                    
    USER=USERID()                                                 
    MEMBRE=PMbr                                                   
                                                                  
    /* SI LES ARGUMENTS SONT VIDE C'EST LE PREMIER APPEL */       
       ENVIRONNEMENT = ...                                        
       TYPEACTION   = EDIT                                        
                                                                  
    IF Penv ='Q' THEN                                             
       ENVIRONNEMENT = ...                                       
                                                                  
    IF Paction = 'V' THEN                                         
       TYPEACTION = VIEW                                          
                                                                  
                                                                  
       CHEMIN = ENVIRONNEMENT'....('MEMBRE')'                
                                                                  
       ADRESSE = TYPEACTION "DATASET("CHEMIN")"                   
                                                                  
     CALL VPUT_CONTEXTE                                           
                                                                  
     ADDRESS ISPEXEC                                              
       ADRESSE                                                    
     SELECT                                                       
       WHEN RC = 0   THEN EXIT                                    
       WHEN RC = 4   THEN EXIT                                    
       OTHERWISE          SAY "ERREUR ACCES FICHIER"              
     END                                                          
    ;                                                             
    EXIT                                                          
                                                                  
    /*----------------------------------------------------------*/
    /*- Sauvegarde du contexte du panel         ----------------*/
    /*----------------------------------------------------------*/
    VPUT_CONTEXTE:                                                
    ADDRESS ISPEXEC "VPUT (PEnv) PROFILE"                         
    ADDRESS ISPEXEC "VPUT (PAction) PROFILE"                      
    ADDRESS ISPEXEC "VPUT (PMbr) PROFILE"                         
    RETURN                                                        
    ;
    Et le PANEL :
    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
    )ATTR                                                   
     ! type(AB)                                             
     £ type(input)  intens(high) color(turq)  hilite(uscore)
     € type(input)  intens(high) color(Red)  hilite(uscore) 
     § type(output) intens(high) color(turq)                
     % type(text)   intens(low)  color(yellow)              
     + type(text)   intens(low)  color(turq)                
     $ type(text)   intens(low)  color(green)               
     ù type(text)   intens(low)  color(pink) hilite(reverse)
    )BODY                                                   
    %                                                       
    +                                                       
    +                          ù                     +      
    §zpanelid                  ù Accès A 1 PROGRAMME +      
    +                          ù                     +      
    $                                                       
    $                                                       
    $                                                       
    $                                                       
    $Environnement (Q pour qualif D pour Dev) +===>€PEnv    
    $                                                       
    $View ou Edit  (V ou E)                   +===>€PAction 
    $                                                       
    $Membre                                   +===>€PMbr    
    +                                                       
    %                                                       
    )INIT                                                   
    VGET (PEnv) PROFILE                                     
    VGET (PAction) PROFILE                                  
    VGET (PMbr) PROFILE                                     
    )PROC                                                   
    &zsel = 'CMD(%REXXNAME &PEnv &PAction &PMbr)'           
    &ztrail = .trail                                        
    )END
    EDIT : en fait cela ne répond pas à ta question sur le REXXNAME ... Je vais envoyer un autre exemple (le plus long étant d'"anonymiser")

  4. #44
    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
    C'est un exemple qui fonctionne !
    C'est déjà beaucoup mieux que mes 42 expérimentations qui "marchottent" !

    Je suis en train de tout re-écrire pour "en effet" faire le traitement à l'extérieur...
    D'ailleurs je viens de partir sur l'idée de traiter les valeurs max dans le panel... mais NON !
    Je dois faire les tests dans le REXX externe, et renvoyer un message d'erreur + le panel.

    Ma question porte surtout sur la pile d'appel... car ça ressemble beaucoup à un appel récursif terminal plutôt qu'à un simple retour de fonction vers REXX.
    REXX appelle le PANEL, qui appelle REXX, qui appelle PANEL.... et à la fin "prévue", tout les retours de fonction se font.
    Plutôt que :
    REXX appelle le PANEL, PANEL s'affiche et se termine SANS "cmd...", retour vers le REXX qui peut boucler.
    --
    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. #45
    Expert éminent sénior
    Homme Profil pro
    Ingénieur d'Etude Mainframe/AS400
    Inscrit en
    Novembre 2012
    Messages
    1 765
    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 765
    Points : 10 748
    Points
    10 748
    Par défaut
    J'ai le panel suivant (simplifié les variables A B C correspondent aux champs saisissables) :
    En fonction des O/N pour chaque table on a divers traitements selon les options 1 à 4 sachant que les O/N sont sauvegardés.

    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
    )BODY
    §zpanelid              *    JOBS pour ...    +  Date : §DT
    %                                                           +Heure: §Heu  +
    {OPTION ===>€OPTION                                                            +
    %
    }1 OPTION 1
    %
    
    * +%TAB1  ==>µA$ (O/N) $
    * +%TAB2  ==>µB$ (O/N) $
    * +%TAB3  ==>µC$ (O/N) $
    *                                                                              +
    %
    }2 OPTION 2
    
    %
    }3 OPTION 3
    %
    }4 OPTION 4
    
    )INIT
    &OPTION = ' '
    VGET(TAB1) PROFILE
    VGET(TAB2) PROFILE
    VGET(TAB3) PROFILE
    )PROC
    &zsel = 'CMD(%REXXNAME &OPTION &A &B &C)'
    &ztrail = .trail
    )END
    LE REXX (il s'agit d'une CLIST où j'ai enlevé le code des options) :

    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
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    /************************* REXX ********************************/
    "ISREDIT MACRO NOPROCESS"
    "ISREDIT (ETAT) = USER_STATE"
    "ISREDIT (TSESSION) = SESSION"
    "ISREDIT NUMBER OFF"
    /* REXX */
    
    /*----------------------------------------------------------*/
    /*- MAIN PROCESS -------------------------------------------*/
    /*----------------------------------------------------------*/
    MAIN:
    
    /* Récuperation de l'option saisie par l'utilisateur'*/
    /* A = TAB1 B = TAB2 C = TAB3*/
    PARSE ARG OPTION A B C
    TAB1 = A
    TAB2 = B
    TAB3 = C
    
    /* Récuperation du USER */
    USER=USERID()
    
    /* SI LES ARGUMENTS SONT VIDES C'EST LE PREMIER APPEL */
    IF OPTION = ' ' THEN
       DO
         CALL APPEL_INIT
       END
    ELSE DO
    /* SINON ON TRAITE L'OPTION CHOISI A L'ECRAN */
         CALL APPEL_OPT
         CALL VPUT_CONTEXTE
       END
    ;
    EXIT
    
    /*----------------------------------------------------------*/
    /*- OPTION START : Premier appel au PANEL : N dans champs --*/
    /*----------------------------------------------------------*/
    APPEL_INIT:
    A = 'N'
    B = 'N'
    C = 'N'
    CALL VPUT_CONTEXTE
    ADDRESS ISPEXEC "SELECT PANEL(PANELNAME)"
    RETURN
    ;
    
    /*----------------------------------------------------------*/
    /*- APPEL AVEC OPTION A TRAITER ----------------------------*/
    /*----------------------------------------------------------*/
    APPEL_OPT:
    SYSUID = USER
    SELECT
       WHEN OPTION = '1'  THEN CALL OPTION1
       WHEN OPTION = '2'  THEN CALL OPTION2
       WHEN OPTION = '3'  THEN CALL OPTION3
       WHEN OPTION = '4'  THEN CALL OPTION4
       OTHERWISE
         CALL VGET_CONTEXTE
         MSG1='Option invalide : Saisir un des choix proposés'
         MSG2='Appuyer sur une touche pour retour'
         ZEDLMSG= MSG1 MSG2
         ADDRESS ISPEXEC "SETMSG MSG(ISRZ001)"
         ADDRESS ISPEXEC "DISPLAY PANEL(HELP...)"
    END
    RETURN
    ;
    /*----------------------------------------------------------*/
    /*- Sauvegarde du contexte du panel         ----------------*/
    /*----------------------------------------------------------*/
    VPUT_CONTEXTE:
    ADDRESS ISPEXEC "VPUT (A) PROFILE"
    ADDRESS ISPEXEC "VPUT (B) PROFILE"
    ADDRESS ISPEXEC "VPUT (C) PROFILE"
    RETURN
    ;
    
    /*----------------------------------------------------------*/
    /*- Récupération du contexte du panel       ----------------*/
    /*----------------------------------------------------------*/
    VGET_CONTEXTE:
    ADDRESS ISPEXEC "VGET (A) PROFILE"
    ADDRESS ISPEXEC "VGET (B) PROFILE"
    ADDRESS ISPEXEC "VGET (C) PROFILE"
    RETURN
    ;

  6. #46
    Expert éminent sénior
    Homme Profil pro
    Ingénieur d'Etude Mainframe/AS400
    Inscrit en
    Novembre 2012
    Messages
    1 765
    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 765
    Points : 10 748
    Points
    10 748
    Par défaut
    Citation Envoyé par Metalman Voir le message
    Ma question porte surtout sur la pile d'appel... car ça ressemble beaucoup à un appel récursif terminal plutôt qu'à un simple retour de fonction vers REXX.
    REXX appelle le PANEL, qui appelle REXX, qui appelle PANEL.... et à la fin "prévue", tout les retours de fonction se font.
    Plutôt que :
    REXX appelle le PANEL, PANEL s'affiche et se termine SANS "cmd...", retour vers le REXX qui peut boucler.
    Je n'ai jamais rencontré de problème avec cette méthode (tout du moins de boucle "infinie". De toute façon pour tout appel au REXX il faut une action utilisateur qui utilise simplement les variables du PANEL). Après on peut parfois des plantages ISPF assez brutaux mais non liés à cela. Plus que des appels récursifs il s'agit plus d'une notion d'envoi de contexte entre un PANEL et le REXX (qui assure les fonctionnalités du panel).

  7. #47
    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
    Aaaah !
    Mais dans votre cas, on appelle le panel ISPF en premier ?
    Dans tous les cas les 2 se rappellent et "peuvent" boucler si l'utilisateur fais des requêtes bizarres continuellement...

    Je vais tester...
    De mon côté, je suis embêté par le VER (&MYRED ,RANGE,1,4) qui me fait des REINIT tout le temps...
    --
    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. #48
    Expert éminent sénior
    Homme Profil pro
    Ingénieur d'Etude Mainframe/AS400
    Inscrit en
    Novembre 2012
    Messages
    1 765
    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 765
    Points : 10 748
    Points
    10 748
    Par défaut
    En fait on accède au PANEL par le REXX la première fois. Si c'est une CLIST, en tapant TSO REXXNAME. Au premier appel les champs saisissables sont vides ou préremplis en fonction des VGET. Il faut saisir quelque chose ou du moins faire ENTER pour effectuer un nouvel appel au REXX qui accédera par exemple à des PDS, lancera des JOBS. Donc on peut éventuellement se retrouver "hors panel" (mais y revenir par PF3). Mais le REXX ne s'auto-appelle jamais puisqu'il n'est lancé que par le panel ou de l'extérieur la première fois.

  9. #49
    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
    Ca y est...
    J'ai UNE fonctionnalité opérationnelle !!!
    Avec du REXX et de l'ISPF !
    J'ai eu pas mal de problèmes avec les codepages (comme prévu ), donc je suis passé en 1047 (noté Latin-1/Open Systems) évidemment...
    Et j'ai lu pas mal de docs pour les opérateurs, conditions, boucles :
    lien 1
    lien 2
    lien 3
    (optionnellement pour les strings) lien 4

    Voici tout mon code pour LA fonctionnalité très simple de modification (option 3 sur mon menu) :

    Caractéristiques des PDS :
    • METAL.EXEC
      PDS, PO, FB, 80
      1st : 90 trks
      2nd : 15 trks
    • METAL.MESSA
      PDS, PO, FB, 80
      1st : 15 trks
      2nd : 15 trks
    • METAL.PANEL
      PDS, PO, FB, 80
      1st : 45 trks
      2nd : 15 trks
    • METAL.SKELS
      PDS, PO, FB, 80
      1st : 30 trks
      2nd : 15 trks
    • METAL.SYSPROC
      PDS, PO, FB, 80
      1st : 17 trks
      2nd : 1 trks


    FAIRE UN REXX POUR AJOUTER LE PROGRAMME APPELANT A LA SYSEXEC
    Par exemple :
    METAL.REXX(ALTLIB)
    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
    /* REXX */                                                            
                                                                          
      "EXECUTIL SEARCHDD(YES)"   /* TO ENSURE THAT SYSEXEC IS AVAILABLE*/ 
                                                                          
    /*                                                                    
    ** "ALLOC FILE(SYSEXEC) DATASET(REXX.EXEC,",                          
    **       "'ISP.PHONE.EXEC') SHR REUSE"                                
    */                                                                    
                                                                          
      BIBREXX = METAL.SYSPROC                                   
    /* "ALLOC FILE(SYSEXEC) DATASET('"BIBREXX"') SHR REUSE" */            
      "ALLOC FILE(SYSEXEC) DATASET('METAL.SYSPROC',",           
             "'AUTRE.LIB',",                                      
             "'ENCORE.UNE.AUTRE.LIB') SHR REUSE"                                 
                                                                          
      IF RC = 0 THEN                                                      
        SAY 'ALLOCATION TO SYSEXEC COMPLETED.'                            
      ELSE                                                                
        SAY 'ALLOCATION TO SYSEXEC FAILED.'                               
                                                                          
      ADDRESS TSO                                                         
      "ALTLIB ACT APPLICATION(EXEC) DATASET('"BIBREXX"')"                 
    /* "CONCATD FILE(SYSEXEC) DSN('"BIBREXX"') BEFORE" */
    Puis faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tso exec 'METAL.REXX(ALTLIB)'
    Bref l'important :

    METAL.SYSPROC(MYAPP)
    REXX, appel de l'application
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    /* Rexx */                                                       
    ADDRESS ISPEXEC "SELECT CMD(%MYAPPX00) NEWAPPL(APP) SCRNAME(APP)"
    METAL.SYSPROC(MYAPPX00)
    REXX, programme principal appelant le panel puis les traitements en fonction de ZCMD (option choisie). [Pour le moment : une seule option est gérée, la 3, donc seul le membre MYAPPX03 est inclus]
    MSG sert à définir quelle variable sert à afficher les erreurs (il me semble)
    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
    /* Rexx */                                                            
                                                                          
    TRACE O                                                               
     
    ADDRESS ISPEXEC "LIBDEF ISPPLIB DATASET ID('METAL.PANEL')"  
    ADDRESS ISPEXEC "LIBDEF ISPMLIB DATASET ID('METAL.MESSA')"  
    ADDRESS ISPEXEC "LIBDEF ISPSLIB DATASET ID('METAL.SKELS')"  
                                                                          
    /* Initialisation des variables */ 
    userid   = SYSVAR(SYSUID)                                             
    MYRC     = 0                                                          
    MYCOLOR  = '000000'                                                   
    COLORNOM = 'blanc'                                                    
    MYRED    = 000                                                        
    MYGREEN  = 000                                                        
    MYBLUE   = 000                                                        
    MSGERROR = ''                                                         
    
                                                                    
    ADDRESS ISPEXEC "VPUT (MYCOLOR COLORNOM MSGERROR) PROFILE"      
    ADDRESS ISPEXEC "VPUT (MYRED MYGREEN MYBLUE) PROFILE"           
                                                                    
    DO FOREVER                                                      
      ADDRESS ISPEXEC "DISPLAY PANEL(MYAPPP01) MSG("!!MSGERROR!!")" 
      IF RC > 0 THEN EXIT                                           
                                                                    
      ADDRESS ISPEXEC "VGET (ZCMD) PROFILE"                         
      IF ZCMD == 1 THEN MYRC = MYAPPX01()                           
      IF ZCMD == 2 THEN MYRC = MYAPPX02()                           
      IF ZCMD == 3 THEN MYRC = MYAPPX03()                           
      IF ZCMD == 4 THEN MYRC = MYAPPX04()                           
      IF ZCMD == 5 THEN EXIT                                        
      MYRED    = 000                                                
      MYGREEN  = 000                                                
      MYBLUE   = 000                                                
    END
    METAL.SYSPROC(MYAPPX03)
    REXX, option 3 choisie, on va transformer un nombre à 3 chiffres en nombre hexadécimal à 2 caractères, concaténer les 3 valeurs hexa, et chercher si une couleur classique possède ce nom ou non
    [ATTENTION ! Ceci a été extrait en codepage 1147 !!!
    Les ç= sont des \= en 1047 (différent de)
    Les !! sont de || en 1047 (concaténation de string)
    Pour les gens qui viennent du C (comme moi) :
    // calcule le modulo
    % fait la division entière (parce que / fait une division flottante)]
    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
    70
    /* Rexx                                                                
     * --------------------------------------------------------------------
     * User a demande ajout couleur                                        
     * ------------------------------------------------------------------*/
                                                                           
    ADDRESS ISPEXEC "VGET (MYCOLOR MSGERROR) PROFILE"                      
    ADDRESS ISPEXEC "VGET (MYRED MYGREEN MYBLUE) PROFILE"                  
                                                                           
    if VERIFPARM(MYRED) ç= 0 then                                          
      do                                                                   
        MSGERROR = '0 > Rouge > 255'                                       
        return (-1)                                                        
      end                                                                  
                                                                           
    if VERIFPARM(MYGREEN) ç= 0 then                                        
      do                                                                   
        MSGERROR = '0 > Vert > 255'                                        
        return (-1)                                                        
      end                                                                  
                                                                           
    if VERIFPARM(MYBLUE) ç= 0 then                                     
      do                                                               
        MSGERROR = '0 > Bleu > 255'                                    
        return (-1)                                                    
      end                                                              
                                                                       
    TMPRED   = HEXAFIER(MYRED)                                         
    TMPGREEN = HEXAFIER(MYGREEN)                                       
    TMPBLUE  = HEXAFIER(MYBLUE)                                        
    MYCOLOR  = TMPRED !! TMPGREEN !! TMPBLUE                           
                                                                       
    if MYCOLOR == '000000' then COLORNOM = 'Blanc'                     
    if MYCOLOR == 'FFFFFF' then COLORNOM = 'Noir'                      
    if MYCOLOR == 'FF0000' then COLORNOM = 'Rouge'                     
    if MYCOLOR == '00FF00' then COLORNOM = 'Vert'                      
    if MYCOLOR == '0000FF' then COLORNOM = 'Bleu'                      
                                                                       
    ADDRESS ISPEXEC "VPUT (MYCOLOR COLORNOM MSGERROR) PROFILE"         
                                                                       
    return (0)                                                         
                                                                       
    VERIFPARM:                                                   
    parse arg COLOR                                              
    if COLOR > 255 then return (-1)                              
    if COLOR < 0 then return (-1)                                
    return (0)                                                   
                                                                 
    HEXAFIER:                                                    
    parse arg COLOR                                              
    COLRC = ''                                                   
    if COLOR == 000 then return ('00')                           
    do while COLOR > 0                                           
      TMPCOL = COLOR // 16                                       
      COLOR = COLOR % 16                                         
      if TMPCOL >= 10 then                                       
        do                                                       
          if TMPCOL == 10 then TMPRC = "A"                       
          if TMPCOL == 11 then TMPRC = "B"                       
          if TMPCOL == 12 then TMPRC = "C"                       
          if TMPCOL == 13 then TMPRC = "D"                       
          if TMPCOL == 14 then TMPRC = "E"                       
          if TMPCOL == 15 then TMPRC = "F"                       
        end                                                      
      else                                                       
        do                                                       
          TMPRC = TMPCOL                                         
        end                   
      COLRC = TMPRC !! COLRC  
    end                       
    return (COLRC)
    METAL.PANEL(MYAPPP01)
    ISPF, affiche un panel qui gère 5 options (de 1 à 5), et prend en paramètre des nombres entre 0 et 255. (voir les VER tout en bas)
    REINIT est appelée si ces 2 conditions ne sont pas vérifiées.
    Ensuite, les paramètres et ZCMD sont envoyé dans le PROFILE.
    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
    70
    71
    72
    73
    74
    75
    )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) %&MSGERROR   +      
    %Commande ===>_ZCMD                                                     
    +Melange de couleurs :                  Couleur Actuelle :        +*----------*
       %1 +Ajouter une couleur             +*----------------*        +| &user   +|
       %2 +Retirer totalement une couleur  +|   0x&MYCOLOR  +|        +| &system +|
       %3 +Modifier une couleur            +|   &COLORNOM   +|        +| &time   +|
       %4 +Soustraire une couleur          +*----------------*        +*----------*
       %5 +Quitter l application                                            
                                                                            
      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
    £SAREA9                                                                 
    )AREA SAREA9 /* *********************  AREA   ********************** */ 
    +Paramètres de couleur :                                                
    +Rouge  . . . . . :_Z  + (0 à 255)                                      
    +Vert . . . . . . :_Z  + (0 à 255)                                      
    +Bleu . . . . . . :_Z  + (0 à 255)                                     
                                                                           
    )INIT                                                                  
    /* *****************************  INIT   *************************** */
    /* Valoriser les variables locales avec les valeurs du pool PROFILE  */
    /* <PROFILE <LOCALE  <Conversion                                     */
    /* ***************************************************************** */
    &ZCMD = ' '                                                            
                                                                           
    /* Initialisation des variables et valeurs affichees */                
    &MYCOLOR  = '000000'                                                   
    &COLORNOM = 'blanc'                                                    
    &MYRED    = 000                                                        
    &MYGREEN  = 000                                                        
    &MYBLUE   = 000                                                        
    &MSGERROR = ' '                                                        
                                                                           
    /* Rechargement des variables SI elles existent */                     
    VGET (MYCOLOR COLORNOM MYRED MYGREEN MYBLUE MSGERROR) PROFILE          
                                                                           
    .ZVARS  = '(MYRED,MYGREEN,MYBLUE)'                                     
    .CURSOR = ZCMD                                                         
    .HHELP  = MYAPPH00                                                     
    &ZHTOP  = MYAPPH00                                                     
                                                                           
    /* Chargement des informations du cartouche: UserId, Heure, Partition */
    &user     = &ZUSER                                                      
    &time     = &ZTIME                                                      
    &system   = &ZSYSID                                                     
                                                                            
    /* *****************************  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,5)                                                
    VER (&MYRED  ,RANGE,000,255)                                            
    VER (&MYGREEN,RANGE,000,255)                                            
    VER (&MYBLUE ,RANGE,000,255)                                            
                                                                            
    VPUT (ZCMD MYRED MYGREEN MYBLUE) PROFILE                                
          
    )END
    METAL.PANEL(MYAPPH00)
    Ceci est "l'aide"... bref il fallait faire une page pour tester
    Quand on appuie sur F1, ceci est appelé.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    )BODY DEFAULT(%+~) EXPAND(¨`)                                           
     %TUTORIEL --¨-`- ColorApp (Test Fabrice) -¨-`-TUTORIEL                 
     %Sélection ===>~ZCMD                                                  +
    +                                                                       
     % ¨ ` Mode d'emploi de l'outil ColorApp  ¨ `                           
    +                                                                       
      Il suffit d'ecrire des valeurs entre 0 et 255 dans les champs couleur 
     % ¨ ` Certaines combinaisons afficheront le nom de la couleur ¨ `+     
                                                                            
       Ecrit par Fab pour ses tests ISPF.
    )END
    --
    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

  10. #50
    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
    Citation Envoyé par Metalman Voir le message
    Mais dans tous les cas il y aura des VGET/VPUT pour récupérer les "autres" champs du panel ?
    Hormis l'option, si le panel doit contenir des valeurs dans tous les sens... on est bien "obligé" d'utilise VGET/VPUT, non ?

    Et le REXX principal est rappelé automatiquement "tout" le temps si j'ai bien compris (et je le constate)...
    Mais alors REINIT est utilisé à quel moment ? Lors d'un appel à REFRESH ?

    (.CURSOR indique juste l'endroit où l'on placera le curseur lors de l'affichage du panel)
    bonjour Metalman,

    pour répondre à ta question, non, les VPUT/VGET ne sont pas du tout nécessaire et pour aucune variable de ton panel, je n'utilise les VPUT/VGET que quand j'ai des fonctions TSO à appeler depuis mon rexx, mais la, non. Je ne comprends pas pourquoi tu passes par le PROFILE pour les champs de ton panel, tu fais du rexx , pas de la clist.

    Ma methode est differente de celle de Darkzinus, je crois qu'on a chacun nos habitudes sur ces sujets, personnellement je prefere la mienne, je n'ai pas de top de premier entrée ou autre à gerer et je n'ai pas besoin d'utiliser le PROFILE.
    quand d'un panel je veux acceder à un autre panel, je continue à tout gerer dnas le rexx. mon habitude est, 1 Rexx par Panel, aussi l'enchainement se fait simplement du 1er Rexx qui appel le second rexx qui lui meme va afficher le second panel, les variables etants toujours passées de rexx à rexx simplement sur le Call.
    on a donc, REXX1 , DISPLAY PANEL1, en retour si REXX1 detecte que le traitement doit enchainer vers panel2, REXX1 CALL REXX2 en lui passant les paremetres et REXX2 DISPLAY PANEL2....etc

    l'interet du Zvar dans les panel est d'avoir simplement toujours dans ton rexx des variables avec un nom qui veuille dire quelque chose et non pas A,B ou C parceque la zone du panel ne fait qu'1 octet de long.

    enfin le )Init
    n'est utilisé que lors du 1er affichage du panel, effectivement j'y positionne simplement le curseur par defaut sur le bon champs, ici CHOIX. et si je peux me permettre une "remarque" sur tes dev, pour moi il est plus facile d'avoir TOUT le code à un seul endroit, aussi meme l'initialisation des variables du panel sont faites dans le Rexx avant de faire le 1er non pas SELECT PANEL, mais DISPLAY PANEL. Les comportements ne sont pas les memes. D'ailleurs c est ce que tu fais aussi dans ton rexx en initialisant les variables, alors pourquoi le faire 2 fois?

  11. #51
    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
    En effet, c'est cette méthode que j'ai retenu (call REXX1 -> display PANEL1 -> return vers REXX1 -> switch sur l'option choisie -> call REXX2/3/4 ...).

    Comment faites-vous pour passer les variables entre le PANEL et le REXX du coup ?
    Mes variables MYRED, MYGREEN, MYBLUE sont accessibles entre les panels et les scripts rexx sans aucune manip' ? (j'utilise les VGET/VPUT uniquement pour transmettre ces variables en fait...)
    --
    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. #52
    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
    ... Comment faites-vous pour passer les variables entre le PANEL et le REXX du coup ?
    Mes variables MYRED, MYGREEN, MYBLUE sont accessibles entre les panels et les scripts rexx sans aucune manip' ? (j'utilise les VGET/VPUT uniquement pour transmettre ces variables en fait...)
    Et c'est là où c'est magique ...


    Si la fonction est une procédure de commandes (CLIST ou REXX), les variables n'ont pas à être définies :
    • crées par la procédure, elles seront connues de ISPF,
    • crées à l'aide des services de ISPF, elles seront connues de la procédure.



    For functions coded in a programming language other than APL2, the internal
    program variables that are to be used as dialog variables can be identified to ISPF
    and accessed using the ISPF variable services. The use of STEM or COMPOUND
    variables within a REXX procedure is not supported by ISPF. For a function coded
    as CLIST or REXX command procedures or as an APL2 procedure, variables used
    in the procedure are automatically treated as dialog variables. In this case, no
    special action is required to define them to ISPF.
    Source :
    ISPF - Dialog Developer's Guide and Reference.
    Chapitre 1. Introduction to ISPF.

  13. #53
    Expert éminent sénior
    Homme Profil pro
    Ingénieur d'Etude Mainframe/AS400
    Inscrit en
    Novembre 2012
    Messages
    1 765
    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 765
    Points : 10 748
    Points
    10 748
    Par défaut
    Citation Envoyé par Metalman Voir le message
    En effet, c'est cette méthode que j'ai retenu (call REXX1 -> display PANEL1 -> return vers REXX1 -> switch sur l'option choisie -> call REXX2/3/4 ...).

    Comment faites-vous pour passer les variables entre le PANEL et le REXX du coup ?
    Mes variables MYRED, MYGREEN, MYBLUE sont accessibles entre les panels et les scripts rexx sans aucune manip' ? (j'utilise les VGET/VPUT uniquement pour transmettre ces variables en fait...)
    Ah oui effectivement, les variables sont sauvegardées. Pour ma part les VGET VPUT me servent plutôt à garder ses variables quand je sors du panel pour TSO ou que j'en viens (il s'agit souvent d'accès à des PDS ou diverses fonctions TSO) et que je veux retourner vers le PANEL avec ces variables conservées.

  14. #54
    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
    Haha...

    Cette fois, j'ai recopié les panels de test (la fabuleuse application de calcul hexadécimal des couleurs ! ) à la maison pour "tester"...
    Et c'est la catastrophe...

    1) Déjà, le MSG(!!MSGERROR!!) est passé comme "valeur trop grande"... je l'ai remplacé temporairement par un "MSG(LOL)", ce qui a semblé suffire... je verrai plus tard comment transmettre le message d'erreur.

    Hormis les erreurs classiques de recopie (par exemple le /* REXX */ qui est mal passé... les codepages évidemment...), je tombe sur un truc qui me bloque :

    2) Une ISPP111... qui d'après d'autres forums était dûe au "num on".
    J'ai donc passé à "num off".
    J'ai fais la manip' du "bnds" en déplaçant le < sur la colonne 73, puis "((8" en 1ère ligne, "((" sur la dernière...
    Toute la numérotation a disparu, mais maintenant j'ai une :

    ISPP610

    Panel 'MYAPPP01' error
    Width of line in the )AREA section is wider than allowed in the )BODY
    section definition.

    Panel line where error was detected:
    +Parametres de couleur :
    Et je ne sais plus quoi faire... en passant la WINDOW à 80, même chose.
    Et si je mets une valeur au delà de 80, je tombe sur une erreur comme quoi je ne peux pas dépasser la taille de l'écran (normal... 80 colonnes...).

    Avez-vous une idée de l'origine du problème ?
    --
    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

  15. #55
    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
    il doit te manquer un + de fin de zone sur ton panel non?

    regarde les lignes precedentes celle marquée en erreur

  16. #56
    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 essayé de réduire le nombre d'espaces...
    Et même chose...

    ******************************************************************************
    * ISPP610 *
    * *
    * Panel 'MYAPPP01' error *
    * Width of line in the )AREA section is wider than allowed in the )BODY *
    * section definition. *
    * *
    * *
    * *
    * *
    * *
    * Panel line where error was detected: *
    * +Parametres de couleur : + *
    Je suis vraiment... bloqué :s
    Etant donné qu'il s'agit d'une AREA... je me demande si ça n'a pas un rapport...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    000008  £ AREA(SCRL) EXTEND(ON)           /* Scrollable Area */
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    =COLS> ----+----1----+----2----+----3----+----4----+----5----+----6----+----7--
    000020                                                                         
    000021   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
    000022 £SAREA9                                                                 
    000023 )AREA SAREA9 /* *********************  AREA   ********************** */ 
    000024 +Parametres de couleur :                                 +
    Mais je suis vraiment totalement bloqué !
    --
    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

  17. #57
    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
    delimite SAREA9

  18. #58
    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
    C'était ça.
    Ca fonctionne.

    Si un modérateur "peut" éditer mon gigantesque pavé et ajouter dans le code le £ manquant à la ligne 22 du code, ça serait fabuleux pour les suivants ! (ils auront qu'à lire jusqu'ici au pire)

    Merci infiniment !
    Je vais voir pour la variable dans "MSG" maintenant.

    EDIT : Pour le message d'erreur... j'ai trouvé comment contourner le problème...
    Entre les 2 environnements utilisés, la différence semble être que les variables ne sont pas interprétées entre ".

    Il faut donc remplacer dans MYAPPX00 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    /*ADDRESS ISPEXEC "DISPLAY PANEL(MYAPPP01) MSG(!!MSGERROR!!)"*/ 
      DSPLN = "DISPLAY PANEL(MYAPPP01) MSG(" || MSGERROR || ")" 
      ADDRESS ISPEXEC DSPLN
    C'est tortueux, mais comme ça fonctionne.
    Ainsi, la variable MSGERROR est réinterprétée à chaque tour de boucle/avant affichage du panel.
    --
    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. #59
    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
    l'erreur semble venir des quotes (simples ou doubles).

  20. #60
    Expert éminent sénior
    Homme Profil pro
    Ingénieur d'Etude Mainframe/AS400
    Inscrit en
    Novembre 2012
    Messages
    1 765
    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 765
    Points : 10 748
    Points
    10 748
    Par défaut
    Citation Envoyé par Metalman Voir le message
    C'était ça.
    Ca fonctionne.

    Si un modérateur "peut" éditer mon gigantesque pavé et ajouter dans le code le £ manquant à la ligne 22 du code, ça serait fabuleux pour les suivants ! (ils auront qu'à lire jusqu'ici au pire)

    Merci infiniment !
    Je vais voir pour la variable dans "MSG" maintenant.

    EDIT : Pour le message d'erreur... j'ai trouvé comment contourner le problème...
    Entre les 2 environnements utilisés, la différence semble être que les variables ne sont pas interprétées entre ".

    Il faut donc remplacer dans MYAPPX00 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    /*ADDRESS ISPEXEC "DISPLAY PANEL(MYAPPP01) MSG(!!MSGERROR!!)"*/ 
      DSPLN = "DISPLAY PANEL(MYAPPP01) MSG(" || MSGERROR || ")" 
      ADDRESS ISPEXEC DSPLN
    C'est tortueux, mais comme ça fonctionne.
    Ainsi, la variable MSGERROR est réinterprétée à chaque tour de boucle/avant affichage du panel.
    Et en faisant ceci ?
    ADDRESS ISPEXEC "DISPLAY PANEL(MYAPPP01) MSG("MSGERROR")"

+ Répondre à la discussion
Cette discussion est résolue.
Page 3 sur 4 PremièrePremière 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