[JMP 17.0.0]
Ich habe an einer Projektdatei gearbeitet, die viele Datentabellen enthält, jede mit einem relativ lang laufenden Skript, das ich zum Generieren eines Journals als Ausgabe verwende.Ich habe ein separates Skript in einer anderen Tabelle, das jedes der einzelnen Tabellenskripte aufruft und dann die einzelnen Journale in einem einzigen Journal zusammenfasst, um einen Abschlussbericht zu erstellen.[Ich hätte diesen Ansatz wahrscheinlich viel sauberer gestalten können, aber ich bin kein Vollzeit- (oder auch nur Teilzeit-) Programmierer.]
Ich wollte eine Art Update-Fortschrittsbalken/Meldungsfeld „X von Y abgeschlossen“ implementieren, um den Ausführungsfortschritt nach der Ausführung jedes einzelnen Tabellenskripts zu verfolgen.
Dies ist die Geschichte darüber, wie ich zu meiner aktuellen Lösung gekommen bin.
TL;DR – Nachdem ich einen Tag damit verbracht hatte, mir einen cleveren Ansatz auszudenken, bin ich auf Caption() gestoßen, was am einfachsten gewesen wäre.
Aber ich habe noch einige allgemeine Fragen dazu, wie Fenster innerhalb der Projektumgebung manipuliert werden können – also bleiben Sie bei mir, wenn Sie interessiert sind.
Bei der Suche nach Diskussionen bin ich auf mehrere großartige Implementierungsideen gestoßen, darunter:
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
Wenn ich jedoch versuche, diese Lösungen in einer Projektumgebung zu implementieren, wird der neu erstellte Fortschrittsbalken immer als neue Registerkarte im Projekt erstellt. Wenn das nächste Skript in der Reihe startet, wird das Fortschrittsbalkenfenster durch die nachfolgenden mit dem Skript verbundenen Datentabellenmanipulationen verdeckt, sodass Sie nie die aktualisierte Fortschrittsmeldung sehen.
Allgemeine Frage Nr. 1: Ich kann nicht herausfinden, wie ich ein „Popout“-Fenster als Nachrichtenfeld erstellen kann, ohne dass es ein modales Fenster ist.Ich verstehe, dass modale Fenster das Skript anhalten, bis der Benutzer mit dem Fenster interagiert hat, was ich nicht möchte.Fehlt mir etwas daran, wie ich ein neues nicht-modales Fenster als „Popout“ statt als neuen Tab erstellen kann?
[Jetzt wird mir wieder klar, dass es so etwas wie Caption() gibt.Aber ich habe immer noch diese allgemeine Frage, ob alle neuen Fenster in einem Projekt als neue Registerkarten und nicht als Popout-Fenster geöffnet werden müssen.]
Allgemeine Frage Nr. 2: Dann dachte ich ... vielleicht gibt es eine Möglichkeit, dieses neu erstellte Fortschrittsbalkenfenster an einer anderen Stelle im Projektlayout anzudocken, sodass es vom Rest der Aktion getrennt ist – z. B. New Window() << Dock( „ Rechts").Aber so etwas habe ich noch nicht finden können.Gibt es eine Möglichkeit, den Andockort eines Fensters per Skript festzulegen?
Dann habe ich viel Zeit damit verbracht, zu lernen, wie Projektlayouts funktionieren und wie sie in Skripts geschrieben werden können.Ich habe durch diese Übung eine Menge gelernt.Am Ende habe ich mir ein Skript ausgedacht, das das Projektlayout vorübergehend ändert, um das Fenster „Zuletzt verwendete Dateien“ durch ein benutzerdefiniertes Fenster „Fortschrittsaktualisierung“ zu ersetzen, das das tut, was ich suche, und dann wieder auf „Zuletzt verwendete Dateien“ zurückgreift " Fenster.Wie Sie sich vielleicht vorstellen können, ist es ein ziemlich schwerfälliges Skript, aber es erledigt seinen Zweck.Ich habe versucht, es so gut wie möglich zu verallgemeinern und habe es hier angehängt, falls jemand daran interessiert ist, zu sehen, wie es funktioniert.
Irgendwann im Laufe des Tages wurde mir klar, dass es vielleicht eine Möglichkeit gibt, dies zum Laufen zu bringen, indem man erzwingt, dass neue Fenster, die von den einzelnen Skripten erstellt werden, unsichtbar sind, sodass das Fortschrittsbalkenfenster oben bleibt.Aber das wäre besser gewesen, wenn ich vorher darüber nachgedacht hätte.Zu diesem Zeitpunkt müsste ich ein paar hundert Skriptänderungen vornehmen, um diese Option zu erreichen (sofern möglich).
Nach all dem bin ich heute Morgen zur Arbeit gekommen, um Ihnen die ganze Geschichte zu erzählen, und bin fast sofort auf Caption() gestoßen – das im Grunde alles, was ich tun wollte, in zwei prägnanten Codezeilen erledigt.Ich wünschte nur, ich hätte das früher erkannt.Ich denke, wenn Sie wirklich einen echten Fortschrittsbalken und nicht nur Text haben wollten, würde Caption() vielleicht nicht funktionieren.Aber ich brauchte es nicht wirklich, dass es so schick war.
Danke fürs Zuhören.
Joel