Bonjour,
Je suis dans ue architecture de portée complexe.
- Fenêtre1 contient instance Objet1 de Classe1
- Classe1 créer une instance Objet2 (dynamique) de Classe2
- Classe1 Crée des méthodes en dynamique (compilation dynamique dans une classe, les procédures deviennent des méthodes)
- Classe2 Apelle une fenêtre Fenêtre2
Par chance, dans mon cheminement, dans le code de Fenêtre2, j'ai un paramètre qui me permet de connaître le nom de fenêtre1.
J'extrapole notre utilisation des règles de nommage pour déterminer le nom de l'instance de Classe1 : fenêtre1.Objet1
Dans Fenêtre2 je veux lancer les méthodes dynamiques de Fenêtre1.Classe1.
A cet effet, j'ai prévu dans Classe1 une méthode d'exécution qui exécute la méthode dynamique selon l'indice (à la compilation j'alimente un tableau dynamique des méthodes avec leur nom...) :
Classe1:_Execute(indice)
RENVOYER ExecuteTraitement(":"+:tTabMthDyn[inidice],trtProcédure)
Ainsi dans Fenêtre2 j'ai :
info(ExécuteTraitement(cNomFen1+".objet1:_Execute",trtPRocedure,Indice)
et là une erreur un peu bête :
Citation :
Erreur à la ligne xxx du traitement Procédure locale Fenêtre1.Procédure.
Vous avez appelé la fonction ExécuteTraitement.
La méthode '_Execute' de la classe 'Objet1' n'est pas globale.
- Code erreur : 2412
Le hic est que Objet1 est une instance et non une classe...
On ne peut faire un ExecuteTraitement qu'au sein de la classe pour appeler ses méthodes (si, si, j'ai des exemples).
En revanche, quand on en passe par l'instance, il faut utiliser le nom de l'instance et de la méthode :
Instance:Méthode(Parametre1)Comme j'ai une partie ce ce code dans une variable je dois utiliser la compilation dynamique pour pouvoir lancer.
Compile("Exec","PROCEDURE EXEC(cnomFen1,Indice)"+RC+...
"RENVOYER "cNomFen1+".objet1:_Execute("+Indice+")")
suivit de
info(ExécuteTraitement("Exec",trtPRocedure,cNomFen1+Indice)
Ouf, Je confirme si cela marche dans une réponse prochaine.