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

AS/400 Discussion :

Bug sur paramètre défini avec CONST


Sujet :

AS/400

  1. #1
    Membre éclairé
    Bug sur paramètre défini avec CONST
    Bonjour,
    Je viens de tomber sur un bug qui me sidère !
    La machine en l'occurrence est en V6R1, au dernier niveau de PTF.
    J'ai une procédure en RPG ILE, qui reçoit 2 paramètres fixes (un code société et un n° fournisseur), et un 3ème qui est une DS, correspondant à la description d'un enreg qui sera retourné. En bref, c'est un peu un Read, mais version SQL externe.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    D get_FoComp_Inf  PI              n                                        Code retour      
    D   P_CodSoc                          Const Like(FCCODSOC)                 Code société     
    D   P_NumFou                          Const Like(FCNUFO)                   Code fournisseur 
    D   P_FCRecd                          LikeDS(EFOCOMP)                      Enreg Compl.Fourn
                                                                                               
    D Existe          s               n                                        Existe true/false
    
    C* ========================================================================                 
     /Free                                                                                      
                                                                                                
      // Evite que les zones soient remplies si erreur                                          
      Clear  P_FCRecd;
    Dans cette procédure, la première chose qui est faite, c'est initialiser par un "Clear" le 3ème paramètre qui pourrait déjà contenir quelque chose.
    Et bien ce "Clear", efface également... le 2ème paramètre, P_NumFou ! Alors qu'il est défini avec "Const" !
    Si quelqu'un a une idée sur ce mystère, çà m'aiderait, car je n'ai pas envie de devoir initialiser chaque zone individuellement dans toutes mes procédures, pour éviter ce genre de souci !

  2. #2
    Membre habitué
    Bonjour,

    A mon avis lors de l'appel, tu dois passer comme 2ème parm une sous-zone de la DS passée en 3ème parm.
    Le CONST ne protège pas de ça. Avec const le parm est transmis par référence. Il y a simplement un controle supplémentaire qui est fait à la compilation (plus la possibilité de passer des expressions).
    Autre cas : si le const est mis sur la prog principale (le pgm), cela ne protège pas d'un appel par un programme qui ne préciserait pas const (ou tout simplement un OPM qui ne connait pas ça).
    Mais même VALUE ne te protègera pas.

    je ne vois pas d'autre moyen que de passer par une variable intermédiaire lors de l'appel.

    Bonne fin d'année !


    PS : par acquis de conscience je viens de tester en 7.1 TR11, c'est exactement pareil.

  3. #3
    Membre éclairé
    Bonjour,

    La variable est totalement indépendante de la DS. Tous mes paramètres sont des variables indépendantes préfixées P_.
    En l'occurrence, un seul programme (RPG ILE) appelle la procédure. Le CONST y est puisque le programme et la procédure utilisent le même /copy.
    J'y perd vraiment mon latin.

###raw>template_hook.ano_emploi###