[JMP 17.0.0]
J'ai travaillé sur un fichier de projet qui contient de nombreuses tables de données, chacune avec un script relativement long que j'utilise pour générer un journal en sortie.J'ai un script distinct dans une autre table qui appelle chacun des scripts de table individuels, puis rassemble les journaux individuels en un seul journal pour créer un rapport final.[J'aurais probablement pu rendre cette approche beaucoup plus propre, mais je ne suis pas un codeur temporel complet (ni même partiel).]
Je voulais implémenter une sorte de barre de progression/boîte de message de mise à jour « X sur Y terminé » pour suivre la progression de l'exécution après l'exécution de chaque script de table individuel.
C'est l'histoire de la façon dont je suis arrivé à ma solution actuelle.
TL;DR – Après avoir passé une journée à trouver une approche intelligente pour moi seul, je suis tombé sur Caption(), ce qui aurait été la chose la plus simple à faire.
Mais j'ai encore quelques questions générales sur la façon dont les fenêtres peuvent être manipulées dans l'environnement du projet – alors restez avec moi si vous êtes intéressé.
J'ai découvert plusieurs idées de mise en œuvre intéressantes en recherchant dans les discussions, notamment :
https://community.jmp.com/t5/Uncharted/Progress-Bar/ba-p/21160
https://community.jmp.com/t5/Uncharted/Progress-Bar-with-Cancel-Button/ba-p/433560#U433560
https://community.jmp.com/t5/Discussions/Suggestion-on-how-to-script-a-small-update-progress-window-for/mp/250419
Cependant, lorsque j'essaie d'implémenter ces solutions dans un environnement de projet, la nouvelle barre de progression créée est toujours créée en tant que nouvel onglet dans le projet. Lorsque le script suivant de la série démarre, la fenêtre de la barre de progression est recouverte par les manipulations ultérieures de la table de données associées au script, de sorte que vous ne voyez jamais le message de progression mis à jour.
Question générale n°1 : Je n'arrive pas à comprendre comment créer une fenêtre « contextuelle » en tant que boîte de message sans qu'il s'agisse d'une fenêtre modale.Je crois comprendre que les fenêtres modales mettent le script en pause jusqu'à ce que l'utilisateur ait interagi avec la fenêtre, ce que je ne veux pas.Y a-t-il quelque chose qui me manque dans la façon dont je peux créer une nouvelle fenêtre non modale sous forme de « pop-out » plutôt que de nouvel onglet ?
[Encore une fois, je réalise maintenant qu'il existe une chose telle que Caption().Mais j'ai toujours cette question générale de savoir si toutes les nouvelles fenêtres d'un projet doivent être ouvertes sous forme de nouveaux onglets plutôt que de fenêtre contextuelle.]
Question générale n°2 : Ensuite, j'ai pensé… peut-être qu'il existe un moyen d'ancrer cette fenêtre de barre de progression nouvellement créée à un autre emplacement dans la présentation du projet afin qu'elle soit séparée du reste de l'action – par exemple, Nouvelle fenêtre() << Dock( " Droite").Mais je n'ai rien trouvé de tel.Existe-t-il un moyen de scripter l'emplacement d'ancrage d'une fenêtre ?
Ensuite, j'ai passé beaucoup de temps à apprendre comment fonctionnent les présentations de projets et comment elles peuvent être scriptées.J'ai beaucoup appris de cet exercice.En fin de compte, j'ai trouvé un script qui modifie temporairement la présentation du projet pour remplacer la fenêtre « Fichiers récents » par une fenêtre « Mise à jour de progression » personnalisée qui fait ce que je recherche, puis revient à la fenêtre « Fichiers récents ». " fenêtre.Comme vous pouvez l'imaginer, c'est un script assez maladroit, mais il fait le travail.J'ai essayé de le généraliser du mieux que j'ai pu et je l'ai joint ici au cas où quelqu'un serait intéressé de voir comment cela fonctionne.
À un moment donné dans la journée, j'ai réalisé qu'il existait peut-être un moyen de faire fonctionner cela en forçant les nouvelles fenêtres créées par les scripts individuels à être invisibles, afin que la fenêtre de la barre de progression reste en haut.Mais cela aurait été mieux si j’y avais pensé dès le départ.À ce stade, je devrais effectuer quelques centaines de modifications de script pour obtenir cette option (si c'est possible).
Après tout cela, je suis venu travailler ce matin pour vous raconter toute cette histoire, et je suis presque immédiatement tombé sur Caption() – qui fait essentiellement tout ce que je voulais faire en deux lignes de code succinctes.J’aurais juste aimé m’en rendre compte plus tôt.Je suppose que si vous vouliez vraiment avoir une véritable « barre » de progression et pas seulement du texte, peut-être que Caption() ne fonctionnerait pas.Mais je n’avais pas vraiment besoin que ce soit aussi sophistiqué.
Merci de votre attention.
Joël