Impossible d'exécuter des compléments dans ProjectNous avons organisé de nombreux scripts dans un complément pour notre entreprise.Le complément répond mais les scripts ne s'exécutent pas lorsqu'ils sont invoqués dans 'Projet'.Est-ce quelque chose qui peut être résolu via le script d'extension ou le script lui-même doit-il être contenu séparément dans le projet ?
ScriptRe : Impossible d'exécuter des compléments dans ProjectChaque projet dans JMP possède sa propre liste de valeurs globales et d'espaces de noms. Cela est également vrai pour la partie hors projet de JMP. Ainsi, si vous créez un global:a en dehors d'un projet, il ne sera visible dans aucun projet. Et si vous créez un global:b dans Project01, il ne sera pas visible en dehors de ce projet ou dans tout autre projet. De plus, si vous créez un espace de noms "A" en dehors d'un projet, il ne sera visible (par son nom, comme dans A:symbol) à l'intérieur d'aucun projet. Et similaire pour créer un espace de noms dans un projet. Ceci est fait pour garder les projets isolés les uns des autres et des non-projets. Et cela permet d'exécuter plusieurs copies du même script sur plusieurs projets sans qu'ils n'entrent en collision les uns avec les autres, même s'ils utilisent des globals.
Si vous avez besoin de communiquer entre des projets ou entre des non-projets et des projets, le meilleur moyen est d'utiliser l'espace de noms racine (syntaxe ::: ou As Root). Les symboles de cet espace de noms sont uniques dans l'instance JMP en cours d'exécution.
Ainsi, comme Craig l'a suggéré, vous pouvez attribuer un espace de noms à un symbole dans l'espace de noms racine. Utilisez ensuite cet espace de noms par symbole, comme As Root(myNsSym):x, au lieu de par nom.
Si vous n'avez besoin que de réponses aux éléments de menu et aux boutons, la suggestion ci-dessus de retarder l'initialisation du complément jusqu'à ce que chacun d'entre eux soit une bonne option. Ensuite, le complément sera initialisé dans chaque projet lors de sa première utilisation. Et vous pouvez utiliser un global pour vérifier l'initialisation préalable. J'ai fait cela pour plusieurs compléments dans le passé. Cependant, cela signifie que vos scripts de démarrage et de sortie doivent être assez simples, car vous ne faites pas grand-chose au démarrage/à la sortie de JMP. Cela ne fonctionne pas non plus si vous avez besoin de quelque chose au-delà des réponses aux menus ou si vous avez besoin de communiquer entre projets. Dans ces cas, l'espace de noms racine serait probablement le meilleur.
Enfin, vous pouvez également utiliser le script Project OnOpen ou le script Workspace Startup pour initialiser les choses. Voir https://www.jmp.com/support/help/en/16.0/index.shtml#page/jmp/write-a-project-on-open-script-2.shtml et https://www.jmp.com/support/help/en/16.0/index.shtml#page/jmp/run-startup-scripts-to-control-workspaces.shtml#ww632187 pour plus d'informations sur ceux-ci. Si vous ne faites déjà pas grand-chose dans vos scripts de démarrage/sortie pour votre complément, vous pouvez même simplement essayer Try(Get Addin("...")<<
Re : Impossible d'exécuter des compléments dans ProjectJe ne suis pas sûr; @aaron_andersen connaîtra la bonne réponse. Mon test rapide suggère que vous aurez besoin d'un global variable tenir un espace de noms ; les différentes fonctions d'espace de noms (et fonctions de classe) semblent aveugles aux espaces de noms en dehors du projet. Ce que j'ai fait semble fonctionner : depuis l'extérieur du projet, attribuez un fichier global. J'ai utilisé ::: mais je pense que ce n'est que spécial dans un projet.
:::myNameSpace = namespace("myNameSpace"); // "globalize" a namespaceDepuis le projet, :::myNameSpace semble fonctionner.
Je ne sais pas quand le script OnOpen du projet s'exécute et dans quel contexte il s'exécute, mais cela pourrait faire partie de la solution. Il pourrait éventuellement exécuter le complément pour recréer les fonctions dans le cadre du projet. (J'ai joué avec plus tôt et il semblait que cela pourrait être utile pour organiser les fenêtres lorsque le projet a été ouvert. Je n'avais pas besoin de ça.)
Je comprends la raison de garder les fonctions JSL isolées dans un espace de noms sans créer de variable globale. J'espère qu'il y a un moyen de continuer à fonctionner. (Bien sûr, les noms d'espace de noms sont un autre espace global ... et je suppose que c'est ce que le projet peut combattre.)
Re : Impossible d'exécuter des compléments dans ProjectSalut Craig,
J'ai écrit les compléments que Lynn utilise dans sa question.J'ai créé un espace de noms pour chaque complément afin d'éviter les collisions de variables.Ces espaces de noms existent-ils uniquement dans la portée globale hors projet ?Existe-t-il un moyen de créer des espaces de noms dans la portée globale " :: : " ?
Merci beaucoup,
John
Re : Impossible d'exécuter des compléments dans ProjectL'idée de Craige est la première chose que j'examinerais également. (Si cela ne fonctionne pas, j'aurais besoin de voir l'adin-in, ou au moins d'en savoir plus sur ce qu'il fait, pour faire des suggestions supplémentaires).
Aa
Re : Impossible d'exécuter des compléments dans ProjectJ'ai trouvé ça:
https://www.jmp.com/support/help/en/16.0/?os=win&source=application&utm_source=helpmenu&utm_medium=application#page/jmp/running-scripts-in-a-project.shtml
"JMP peut avoir plusieurs projet s ouverts en même temps, ainsi que des articles qui ne sont ouverts dans aucun projet.Chaque projet a sa propre mondial portée, ce qui évite les conflits causés par des variables de même nom dans différents projet s. Dans les rares cas où vous souhaitez partager des variables spécifiques entre tous les projet s, utilisez le ::: opérateur racine."
Je pense que si votre complément charge des scripts que vous souhaitez utiliser à partir d'un projet, le ::: peut être ce dont vous avez besoin. Je ne l'ai pas essayé.
@aaron_andersen
Re : Impossible d'exécuter des compléments dans ProjectJe suppose que votre complément repose sur des variables globales définies lors du chargement du complément et référencées ultérieurement lorsque la fonctionnalité du complément est appelée.Dans les projets, le contexte global est différent de celui des autres projets et du reste de JMP, et tout ce qui est défini par le complément n'est pas accessible depuis le projet.Pour lutter contre cela, vous pouvez définir toutes les options de menu pour ouvrir des fichiers ou exécuter des scripts qui incluent une vérification si le complément est déjà chargé (par exemple : vérifier si les variables globales appropriées existent) et s'il n'est pas chargé, pour recharger le complément. De cette façon, l'espace de noms et les variables du complément sont chargés la première fois que l'utilisateur appelle le complément dans un projet.
Si vous ne comptez pas sur des variables globales dans votre complément, pouvez-vous donner plus de détails sur les fonctionnalités qui ne fonctionnent pas ?
Re : Impossible d'exécuter des modules complémentaires dans ProjectEspaces de noms et projets - malheureusement plus compliqués que ce qui est discuté ici ...
J'ai pensé que ce serait une bonne idée de créer les fonctions de la bibliothèque de fonctions de rappel en tant que fonctions personnalisées et de les charger via un module complémentaire au démarrage de JMP. De cette façon, la fonctionnalité est bien documentée via l'index de script - et aucun utilisateur n'a à se soucier d'inclure la bibliothèque dans son module complémentaire ou son projet - elle est déjà là.
J'ai alors réalisé que l'espace de noms d'origine n'avait été créé que dans l'espace de noms global de JMP - et que je devais globaliser l'espace de noms via
:::myNameSpace = namespace("myNameSpace"); // "globalize" a namespace
Malheureusement, j'ai rencontré des problèmes supplémentaires que j'ai documentés ici :
Espaces de noms et projets
Re : Impossible d'exécuter des modules complémentaires dans ProjectUne astuce sympa, merci @Jasean :
localiser l'espace de noms racine pour l'utiliser dans les projets
myVar = :::myNs
myVar:x // success
Pourquoi mon problème n’a-t-il pas été abordé en 2021 ?
Quelqu'un a-t-il une licence qui fonctionne avec JMP16 et inférieur - et pourrait vérifier s'il y avait un problème en 2021 ?
ou as-tu utilisé l'astuce de @Jasean "par défaut"...