Le script fonctionne jusqu'à ce qu'il soit appelé par un complément !<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Bonjour,
J'ai un script qui acquiert des données à partir d'une interface utilisateur, exécute un ajustement dans JMP et crache un rapport avec les données brutes, des données calculées et divers tracés et des informations sélectionnées à partir de la sortie JMP.
Cela fonctionne bien lorsqu'il est exécuté à partir du script, même une fois chiffré.
Cependant, une fois que j'ai collé le fichier crypté dans un complément simple avec uniquement ce script, tout fonctionne sauf qu'il n'affiche plus l'équation d'ajustement que j'extrait de la sortie JMP.
je suis perplexe !
Pour rendre les choses encore plus déconcertantes, JMP fonctionne parfaitement à partir du complément tant que j'ai exécuté le script une fois à partir de la fenêtre de script avant d'utiliser le complément. Presque comme s'il se rappelait maintenant quoi faire !
Le script obtient l'équation ici :
nlr = nlModel << Rapport ;
pb = nlr[PictBox(1)] ;
modEq = pb << Obtenir l'image ;
Il l'affiche ensuite à l'aide de :
Zone de liste V(
Text Box("Equation du modèle", << Définir la taille de la police (12)),
Boîte d'image (modEq),
Zone de texte(" "),
Avez-vous une idée de la raison pour laquelle ce bit cesse de fonctionner une fois intégré au complément ?
Je joins un vidage d'écran de la sortie exécutée à partir de la fenêtre de script par rapport à l'exécution à partir du complément (juste après l'ouverture de JMP)
Merci
Re : Le script fonctionne jusqu'à ce qu'il soit appelé par un complément !Je soupçonne que le PictBox contenant la formule doit apparaître à l'écran pour créer réellement le bitmap que vous essayez de capturer.Le mieux est de le capturer pendant qu'il est visible.
Vous pourrez peut-être utiliser "caché" plutôt que "privé" avec la table de données.Une table masquée a une fenêtre masquée.Une table privée n'a pas de fenêtre.Les tables privées doivent être fermées tant qu'une variable pointe encore vers elles (ou elles s'accumulent jusqu'à la fermeture de JMP, ce qui consomme de la mémoire).Les tables cachées ne sont pas si faciles à perdre de vue.
Re : Le script fonctionne jusqu'à ce qu'il soit appelé par un complément !J'ai dû utiliser une solution de contournement disgracieuse pour pouvoir lancer mes tests de validation : juste avant de lancer l'analyse JMP non linéaire, j'ouvre une fenêtre vide et je la ferme à la fin du script.
Ça marche. Je m'attends à ce que show then hide log fonctionne également.
J'ai hâte de comprendre pourquoi il fait ça !
Re : Le script fonctionne jusqu'à ce qu'il soit appelé par un complément !Salut Craige,
Tellement... J'ai essayé d'utiliser la fonction newimage (bonne que je ne connaissais pas) et toujours pas de chance.
J'ai essayé de l'ajouter lors de l'extraction de la plateforme de rapport :
nlr = nlModel << Rapport ;
pb = nlr[PictBox(1)] ;
//modEq = pb << Obtenir l'image ;
// Ici : modEq = pb << Obtenir l'image ;
modEq = pb << Obtenir l'image ;
modEq = NouvelleImage(modEq);
Je l'ai également essayé dans ma propre fenêtre de rapport :
Zone de liste V(
Text Box("Equation du modèle", << Définir la taille de la police (12)),
picturebox(nouvelleimage( modEq )),
Et j'ai essayé aux deux endroits pour faire bonne mesure !
Il y a une différence : le rapport JMP en arrière-plan affiche toujours une croix, mais mon rapport ne montre rien, pas même un espace vide.
Cependant, en revenant sur le script et en exécutant de moins en moins, j'ai réalisé que l'endroit où il échoue réellement est ici :
// L'analyse des données
win3 = Nouvelle fenêtre( "Rapport sur le modèle non linéaire",
nlModèle = dt << Non linéaire(
Y( :Nom( "hGH" ) ),
X( :Nom( "Croissance du modèle" ) ),
Deuxième méthode dérivée( 1 ),
Newton,
Finir,
Limites de confiance,
Afficher l'expression de prédiction( 1 )
)
);
win3 est fermé par le script et est remplacé par ma propre fenêtre de rapport avec tout ce que les scientifiques m'ont demandé. Donc, pour une raison quelconque, si aucune fenêtre n'est ouverte dans JMP à l'exception de la fenêtre d'accueil, l'instruction d'affichage de l'équation de prédiction échoue ! Toutes les astuces suggérées dans ce fil concernent les opérations effectuées après l'exécution du NLR et n'affectent donc pas le résultat.
Et la raison pour laquelle je n'ai jamais identifié ce bogue lorsque j'ai écrit l'add-in il y a quelques mois, c'est parce que j'avais la fenêtre de l'astuce du jour. Cela a dû être suffisant pour que le complément fonctionne : toute fenêtre JMP ouverte semble faire l'affaire.
Pour le contexte : hGH est la réponse et les valeurs sont saisies par l'utilisateur plus haut, la croissance du modèle est la colonne utilisant l'équation insaisissable du modèle comme une formule qui prend du temps et modélise la « croissance attendue » qui sera ajustée à la croissance réelle.
Le problème est donc que la fonction non linéaire n'affichera pas l'équation pred où elle est appelée dans mon script lorsqu'aucune autre fenêtre jmp n'est ouverte.
J'ai créé une table plus tôt:
dt = Nouvelle Table( "Données",
privé,
Ajouter des lignes ( 6 ),
Nouvelle colonne( "Time", Numeric, Set Values( lstTimes ) ),
Nouvelle colonne( "hGH", Numérique, Définir les valeurs( lsthGH ) )
);
J'ai retiré l'instruction privée et bien sûr maintenant l'addin fonctionne.
Mais la raison pour laquelle j'ai utilisé private est que c'était la seule façon dont ma sortie fonctionnerait. Si j'essaie de fermer la table de données à la fin, même avec attente, le rapport n'est pas produit.
Quoi qu'il en soit, ce n'est pas une bonne solution, mais s'il y avait un moyen d'ouvrir la table de données lorsque le rapport est produit afin qu'il n'y ait pas de problème, puis de fermer la table de données sans que le script échoue, je me contenterais de cela.
Je me demande si cela fonctionnera dans JMP 13, s'il s'agit d'un bogue ou s'il y a effectivement une erreur quelque part dans la façon dont j'ai écrit...
Re : Le script fonctionne jusqu'à ce qu'il soit appelé par un complément !Essaye ça:
Boîte d'image( Nouvelle image ( modEq ))
Je pense que le X rouge signifie que la boîte à images est connectée aux données d'origine de l'image et que les données n'existent plus .En clonant l'image (avec newImage), je pense que la boîte à images aura sa propre copie privée.
Vous pourriez également être en mesure de laisser de côté la fonction picturebox :
Zone de liste V(
Text Box("Equation du modèle", << Définir la taille de la police (12)),
modEq, // Je pense que l'image fonctionnera sans la fonction PictureBox, mais elle aura peut-être encore besoin de newImage
Zone de texte(" "),
Re : Le script fonctionne jusqu'à ce qu'il soit appelé par un complément !Bonjour,
J'ai essayé quelques scénarios différents maintenant.
Remarques
- le complément et le script utilisent tous les deux des noms par défaut à la clause here (principalement au cas où les gens utilisent JMP pour autre chose en même temps)
- l'équation que je veux importer du rapport JMP dans le mien est une équation personnalisée à partir d'une colonne du tableau qui utilise une formule à remplir et j'ai activé Afficher l'expression de prédiction ( 1 )
- dans l'arborescence, cela apparaît comme un pictbox comme l'a dit craige parce que les équations dans JMP sont des images plutôt que du texte. Et donc dans mon nouveau script j'ai utilisé la suggestion d'Eric et c'est maintenant
nlr = nlModèle << Rapport ;
pb = nlr [ PictBox ( 1 )] ;
modEq = pb << Obtenir une image ;
- le script obtient également une table :
tuberculose = nlr [ TableBox ( 5 )] ;
valeurstbl = tuberculose << Transformer en tableau de données ;
- il récupère également un graphe composé de plusieurs bits regroupés dans une boîte image :
bb = nlr [ Boîte d'image ( 1 )] ;
parcelle = bb << Obtenir une image ;
Il affiche ceux sans aucun problème dans mon propre rapport.
Scénarios :
- fonctionne à partir du script à chaque fois
- fonctionne à partir de l'addin lorsque le script est ouvert même s'il n'a pas été exécuté
- fonctionne si l'addin est appelé une deuxième fois et que le rapport n'a pas été fermé (le rapport sans l'équation s'affiche)
- ne fonctionne pas lorsqu'il est appelé depuis le complément pour la première fois ou à tout moment si la fenêtre de rapport a été fermée
- fonctionne si le journal est ouvert
- fonctionne une fois que le journal a été ouvert même si les fenêtres de journal et de rapport sont fermées au préalable
- fonctionne tant qu'une fenêtre JMP est ouverte (fenêtre d'édition de complément JMP/toute table de données/fenêtre de script) mais une fois celles-ci fermées, cela ne fonctionne plus
On dirait que mon addin a besoin d'un ami pour travailler
Comme vous pouvez le voir sur la photo, il affiche une croix. Je dois également dire que lorsque le script est en cours d'exécution, JMP ouvre sa propre fenêtre de rapport et les tables que j'ai scriptées pour exécuter l'ajustement non linéaire. Ceux-ci s'ouvrent et se ferment en arrière-plan car je ne pouvais pas trouver un moyen de les rendre totalement invisibles. Lorsque cela se produit, j'ai un aperçu du rapport d'analyse JMP ayant également une croix au lieu de l'équation de prédiction.
Si c'était pour moi, cela ne me dérangerait pas mais je dois valider cela pour une utilisation dans cGMP et je ne peux pas très bien dire aux gens de l'exécuter deux fois à chaque fois pour obtenir le bon format !
Je suis perdu là...
D'autres réflexions ?
Re : Le script fonctionne jusqu'à ce qu'il soit appelé par un complément !PictBox et PictureBox sont deux boîtes distinctes.En interne, JMP utilise PictureBox comme marqueur dans une arborescence displaybox.Ce marqueur est utilisé de plusieurs façons pour aider à déterminer quand les boîtes enfants doivent être regroupées en un seul bloc.Les plates-formes placent généralement une PictureBox autour d'un graphique et de ses axes.C'est le point de l'arbre où vous voudriez souvent "prendre une photo".
PictBox est une boîte contenant une image bitmap.
Malheureusement, le PictureBox() fonction crée un PictBox.Il n'y a pas de fonction JSL pour créer un PictureBox, mais les plates-formes les créent.
À moins que vous n'ajoutiez des images à un rapport, vous ne trouverez probablement pas PictBox.Vous trouverez probablement PictureBox s'il y a un graphique.
Re : Le script fonctionne jusqu'à ce qu'il soit appelé par un complément !Bonjour Hardner et merci beaucoup pour vos commentaires.
Merci également pour le conseil de dépannage. Lorsque j'ai écrit ceci pour la première fois, il y a quelques mois, les chiffres L'arborescence ne correspondait pas et j'ai fini par devoir deviner. J'avais oublié cela. C'était vraiment bizarre : l'arborescence disait la case numéro 18, mais pour la sortir et l'afficher dans ma fenêtre de rapport, je devais appeler la case numéro 7 par exemple !!!
Le complément effectuera toujours la même analyse, donc aucun problème de ce côté-là.
Re : Le script fonctionne jusqu'à ce qu'il soit appelé par un complément !Bonjour Eric et merci pour cette réponse.
Quand je suis parti et que j'y ai réfléchi, je me suis également souvenu du problème de la portée et j'ai réalisé que cela devait être un problème.
J'ai essayé vos deux solutions et cela n'a pas fonctionné... la première fois.
Maintenant, cependant, si j'exécute le complément deux fois de suite, l'équation de prédiction s'affiche dans ma deuxième sortie de rapport. Je vais réessayer quand je ne serai pas entre deux réunions !
C'est drôle de voir comment cette boîte d'image particulière m'a posé des problèmes et pourtant d'autres éléments que j'ai également extraits du rapport jmp se sont affichés correctement.
Bon apprentissage ici !
Merci encore 
Re : Le script fonctionne jusqu'à ce qu'il soit appelé par un complément !D'accord, cela ressemble à une portée.
Mais, probablement sans rapport, je suis également surpris que cela fonctionne pour vous: pb = nlr[PictBox(1)] ;
si je n'épele pas [PictureBox(1)], j'obtiens une erreur.me demande si c'est une chose de version JMP.
J'allais également suggérer que vous pourriez ajouter
nlr<
Encore une fois, probablement pas pertinent pour ce problème immédiat, mais je suggérerais que si votre complément va extraire des données différentes à chaque fois (ou être utilisé par d'autres avec peut-être d'autres préférences), vous voulez vous assurer que cette boîte sera toujours là et sera toujours PictureBox (1). Vous voudrez peut-être chercher cela plus spécifiquement basé sur le nom de la boîte de contour sous laquelle il se trouve ou testez pour le trouver.peut-être que vous faites déjà ce dernier puisque votre script n'échoue pas mais continue à faire le rapport.L'échec que je vois avec PictBox arrête tout le script, il ne continue pas à utiliser un blanc à la place.
Re : Le script fonctionne jusqu'à ce qu'il soit appelé par un complément !Hé, Gwenicat,
Y a-t-il des messages dans le journal JMP ?
La plupart des problèmes de ce type ont tendance à se résumer à une portée variable.Votre complément s'exécute très probablement avec Noms par défaut ici(1) , mais le script lorsque vous l'exécutez en dehors du contexte du complément s'exécute probablement sans cela.Ainsi, en dehors du contexte du complément, vos variables sont toutes globales, mais dans le contexte du complément, elles sont ajoutées au Ici espace de noms à la place.Donc je pense modEq à l'intérieur de la zone de liste V est introuvable dans la version complémentaire.Le fait que cela fonctionne lorsque vous exécutez le script en dehors du complément une fois pour la première fois soutient cette théorie, car cela mettra modEq dans l'espace de noms global, permettant au script de complément de le trouver.
Essayez de changer ces deux lignes :
modEq = pb << Obtenir l'image ;
Boîte d'image (modEq),
pour
::modEq = pb << Obtenir l'image ;
Boîte d'image( ::modEq ),
et voir si cela ne fonctionne pas mieux.Cela assure que modEq est placé dans l'espace de noms global.Ou, si vous voulez le garder dans le Ici namespace (probablement une meilleure pratique), faites ceci à la place :
Ici :modEq = pb << Obtenir l'image ;
Boîte d'image( Ici :modEq ),
Faites-moi savoir si cela résout le problème.
Merci,
Éric