Une DS est déclarée en globale dans le module en se basant sur une DS template qualifiée dans une copie. Et pourtant quand elle est utlisée dans une sous-procédures, les zones qualifiées ne sont pas reconnues.
Contenu 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éclaration de la copie est faite avent le DCL-pi de la procédure d’entrée :
// inherited variables
// héritage des types
/copy Qcpysrc,INHBuilder
Dans la sous-procédure, voici les erreurs de compilation 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;
la DS était déclarée dans 2 copies différentes.