Décla­ra­tion de DS e…
 
Notifications 
Reti­rer tout

Décla­ra­tion de DS en glo­bale non pris en compte dans une sous-pro­cé­dure ? Pourquoi ?

Posts
Uti­li­sa­teurs
Reac­tions
84  Vu
0
Début du sujet

Une DS est décla­rée en glo­bale dans le module en se basant sur une DS tem­plate qua­li­fiée dans une copie. Et pour­tant quand elle est utli­sée dans une sous-pro­cé­dures, les zones qua­li­fiées ne sont pas reconnues.

Conte­nu de la copie :

      // Prototype retour erreur API
       Dcl-ds ApiError qualified Template;
         BytesProv int(10) inz(%len(ApiError));  // Bytes provided
         BytesAvail int(10);                     // Bytes available
         MsgID char(7);                          // Exception ID
         Reserved char(1);                       // Reserved  data
         MessageData char(32767);                //  Exception data
       end-ds;    

Dans le module, la décla­ra­tion de la copie est faite avent le DCL-pi de la pro­cé­dure d’entrée :

        // inherited variables
        // héritage des types
        /copy Qcpysrc,INHBuilder      

Dans la sous-pro­cé­dure, voi­ci les erreurs de com­pi­la­tion rencontrées :

        Dcl-proc SndAPIMsg Export;
          Dcl-pi SndAPIMsg end-pi;

          Dcl-s LenMsgDta int(10);
          Dcl-s l_MsgKey char(4);

          Select;
          When MyErrCode.BytesAvail <= 16;
RNF7503: L'expression contient un opérande non défini.
RNF7030: Le nom ou l'indicateur BYTESAVAIL n'est pas défini. 
             LenMsgDta = 0;
          When MyErrCode.BytesAvail > %size(MyErrCode);
RNF7503: L'expression contient un opérande non défini. 
             LenMsgDta = %size(MyErrCode.MessageData);
RNF7030: Le nom ou l'indicateur MYERRCO... n'est pas défini.
RNF7030: Le nom ou l'indicateur MESSAGE... n'est pas défini.
RNF7451: La fonction intégrée %SIZE(MYERRCODE.M... n'est pas définie : elle est ignorée.
RNF0623: Le nom qualifié simple n'a pas été spécifié correctement.  
          Other;
             LenMsgDta = MyErrCode.BytesAvail - %size(MyErrCode);
RNF7503: L'expression contient un opérande non défini.  
          Endsl;

          SndPgmMsg( MyErrCode.MsgID :'QCPFMSG   *LIBL'
RNF5410: Le prototype de l'appel n'est pas défini.
RNF7503: L'expression contient un opérande non défini.  
                    :MyErrCode.MessageData :LenMsgDta
                    :'*ESCAPE' :'*PGMBDY' :1 :l_MsgKey :MyErrCode);
        End-proc;                               

1 Réponse 
0

la DS était décla­rée dans 2 copies différentes.

Share :