Exécuter un script après avoir effectué une modification. Ne fonctionne pas sans fermer et rouvrir le script -pourquoi ?J'apprends le JSL et j'obtiens un comportement que je ne pense pas avoir eu quand j'ai commencé. Je voudrais savoir si ce comportement est attendu ou s'il se produit en raison d'un changement de paramètre que j'ai peut-être fait par inadvertance.
J'ai un simple script "principal" qui appelle une fonction et un autre script. Lorsque j'ouvre JMP fresh et que j'exécute le script principal ou les autres fonctions/scripts qu'il appelle, tous s'exécutent correctement et produisent les résultats attendus. Cependant, ils ne fonctionnent pas lorsque j'apporte une modification à l'un d'entre eux (par exemple, si je commente le script qui est inclus dans le script principal, par exemple la dernière ligne ci-dessous). Si je ferme tous les scripts ouverts, puis les relancer, ils fonctionnent à nouveau. Venant d'autres langages de programmation, je ne m'attends pas à un tel comportement. Toute direction est très appréciée
Exemples de mon mainscript ci-dessous (je suis sur JMP13).
//clear log ();<BR />getDataTable = getDataTable4partID("partID","partIDname");
include ("plotallcharts.jsl");
include ("generateJournal.jsl");Commentant la dernière ligne ci-dessus (ou si je décommente clear log ()) c'est-à-dire
//clear log ();
getDataTable = getDataTable4partID("partID","partIDname");
include ("plotallcharts.jsl");
//include ("generateJournal.jsl");me donne l'erreur suivante dans le script ci-dessus
Name Unresolved: getDataTable4partID in access or evaluation of 'getDataTable4partID' , getDataTable4partID( "partID", "partIDname" ) /*###*/
Toute direction est très appréciée.
ScriptRe : Exécuter un script après avoir effectué une modification. Ne fonctionne pas sans fermer et rouvrir le script -pourquoi ?Dans votre exemple, je ne vois pas où vous définissez la fonction
getDataTable4partID
JSL est un langage interprété et nécessite la création de tout élément référencé dans le code, avant son appel.Ce n'est pas un langage compilé, qui passe d'abord par tout le code et les fonctions d'identification, etc. Maintenant, ce qui peut prêter à confusion, c'est qu'une fois la fonction définie, elle restera en mémoire et disponible jusqu'à ce qu'elle soit effacée avec un
clear symbols();<BR />// or<BR />clear globals();
Si vous suivez votre code dans cet esprit, vous comprendrez peut-être pourquoi votre JSL ne trouve pas la fonction.
Re : Exécuter un script après avoir effectué une modification. Ne fonctionne pas sans fermer et rouvrir le script -pourquoi ?Merci @txnelson .
Voici la fonction
getDataTable4partID
Suggérez-vous que j'utilise
clear symbols();
// clear globals();
en haut de mon script principal ?
Si oui, alors je l'ai fatigué sans aucun changement de comportement.
De plus, j'ai oublié de mentionner ci-dessus que lorsque le script principal ne s'exécute pas (après y avoir apporté une modification) et que je dois redémarrer JMP pour que le script s'exécute à nouveau comme prévu, je dois également exécuter la fonction que mon script principal appelle , une fois, sans laquelle mon script principal ne s'exécute pas. C'est clairement un comportement indésirable et je crains de ne pas faire les choses correctement.
Re : Exécuter un script après avoir effectué une modification. Ne fonctionne pas sans fermer et rouvrir le script -pourquoi ?Vous devriez commencer tout votre script avec :
Names Default to Here( 1 );
Clear Symbols();
Cela stabilisera l'environnement de l'espace de noms et effacera toutes les valeurs précédentes, vous redémarrant ainsi chaque fois que vous exécutez le code à partir du haut.
Re : Exécuter un script après avoir effectué une modification. Ne fonctionne pas sans fermer et rouvrir le script -pourquoi ?Merci @txnelson . OK, c'est ce que j'ai fait et maintenant mes scripts et fonctions ne fonctionnent pas même après la fermeture et la réexécution ou après le redémarrage de JMP.
Mon script principal
Names Default to Here( 1 );
Clear Symbols();
getDataTable = getDataTable4partID("partID","partIDname");
include ("plotallcharts.jsl");
include ("generateJournal.jsl");Ma fonction est (sans les détails de la base de données)
Names Default to Here (1)
getDataTable4PartID = Function({PartID}, {dtTemp},
dtTemp = Open Database("connectionstring",
"select '" || PartID || "' as value
from dual",
PartID
);
return(dtTemp);
);et mon scénario
plotallcharts.jsl;
a aussi sa ligne de poing comme
Names Default to Here (1)
je reçois toujours l'erreur
Name Unresolved: getDataTable4partID in access or evaluation of 'getDataTable4partID' , getDataTable4partID( "partID", "partIDname" ) /*###*/
mais parfois, le journal n'affiche rien lors de l'exécution du script principal.
Re : Exécuter un script après avoir effectué une modification. Ne fonctionne pas sans fermer et rouvrir le script -pourquoi ?Names Default to Here( 1 );
Clear Symbols();
getDataTable = getDataTable4partID("partID","partIDname");
include ("plotallcharts.jsl");
include ("generateJournal.jsl");
Je suppose qu'il s'agit de votre première section de votre code. Correct?
Votre troisième ligne dans le code recherche une fonction appelée "getDataTable4partID".Cette fonction n'a pas été définie lorsque le code tente d'exécuter cette ligne.Vous devez avoir exécuté la définition de la fonction avant de pouvoir l'appeler.