Das Skript funktioniert, bis es von einem Add-In aufgerufen wird!<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Hallo,
Ich habe ein Skript, das Daten von einer Benutzeroberfläche erfasst, eine Anpassung in JMP ausführt und einen Bericht mit den Rohdaten, einigen berechneten Daten und verschiedenen Diagrammen und ausgewählten Informationen aus der JMP-Ausgabe ausspuckt.
Es funktioniert gut, wenn es aus dem Skript ausgeführt wird, selbst wenn es verschlüsselt ist.
Sobald ich jedoch die verschlüsselte Datei in ein einfaches Add-In mit nur diesem Skript einfüge, funktioniert alles, außer dass die Anpassungsgleichung, die ich aus der JMP-Ausgabe extrahiere, nicht mehr angezeigt wird.
Ich bin verblüfft!
Um die Sache noch verwirrender zu machen, funktioniert JMP vom Add-in aus perfekt, solange ich das Skript einmal im Skriptfenster ausgeführt habe, bevor ich das Add-in verwende. Fast so, als ob es sich jetzt daran erinnert, was zu tun ist!
Das Skript erhält die Gleichung hier:
nlr = nlModel << Bericht;
pb = nlr[PictBox(1)];
modEq = pb << Bild abrufen;
Es zeigt es dann an mit:
V Listenfeld (
Textfeld ("Modellgleichung", << Schriftgröße festlegen (12)),
Picture Box (modEq),
Textfeld(" "),
Irgendeine Idee, warum nur dieses Bit nicht mehr funktioniert, sobald es in das Add-In integriert ist?
Ich hänge einen Bildschirmabzug der Ausgabe an, die vom Skriptfenster ausgeführt wurde, vs. vom Add-In ausgeführt wurde (direkt nach dem Öffnen von JMP).
Danke
Betreff: Skript funktioniert, bis es von einem Add-In aufgerufen wird!Ich vermute, dass die PictBox mit der Formel auf dem Bildschirm erscheinen muss, um tatsächlich die Bitmap zu erstellen, die Sie erfassen möchten.Nehmen Sie es am besten auf, während es sichtbar ist.
Möglicherweise können Sie für die Datentabelle "versteckt" anstelle von "privat" verwenden.Eine versteckte Tabelle hat ein verstecktes Fenster.Ein privater Tisch hat kein Fenster.Private Tabellen müssen geschlossen werden, solange noch eine Variable auf sie zeigt (oder sie sammeln sich an, bis JMP geschlossen wird, und verbrauchen Speicherplatz).Versteckte Tische sind nicht ganz so leicht aus den Augen zu verlieren.
Betreff: Skript funktioniert, bis es von einem Add-In aufgerufen wird!Ich musste einen unansehnlichen Workaround verwenden, um meine Validierungstests ausführen zu können: Kurz bevor ich die nichtlineare JMP-Analyse aufrufe, öffne ich ein leeres Fenster und schließe es am Ende des Skripts.
Es klappt. Ich gehe davon aus, dass das Protokoll anzeigen und dann ausblenden ebenfalls funktionieren würde.
Ich schmerze jedoch zu verstehen, warum es dies tut!
Betreff: Skript funktioniert, bis es von einem Add-In aufgerufen wird!Hallo Craige,
Sooo... Ich habe versucht, die newimage-Funktion zu verwenden (gute, die ich nicht kannte) und immer noch kein Glück.
Ich habe versucht, es beim Extrahieren von der Berichtsplattform hinzuzufügen:
nlr = nlModel << Bericht;
pb = nlr[PictBox(1)];
//modEq = pb << Bild abrufen;
//Hier:modEq = pb << Bild abrufen;
modEq = pb << Bild abrufen;
modEq = NewImage(modEq);
Ich habe es auch in meinem eigenen Berichtsfenster versucht:
V Listenfeld (
Textfeld ("Modellgleichung", << Schriftgröße festlegen (12)),
picturebox(newimage( modEq )),
Und ich habe es zur Sicherheit an beiden Orten versucht!
Es gibt einen Unterschied: Der JMP-Hintergrundbericht zeigt immer noch ein Kreuz, aber mein Bericht zeigt einfach nichts, nicht einmal ein leeres Feld.
Als ich jedoch das Skript noch einmal durchging und immer weniger ausführte, wurde mir klar, dass der Ort, an dem es tatsächlich fehlschlägt, hier ist:
// Datenanalyse
win3 = New Window( "Nichtlinearer Modellbericht",
nlModel = dt << Nichtlinear(
Y( :Name( "hGH" ) ),
X( :Name( "Modellwachstum" ) ),
Zweite Ableitungsmethode( 1 ),
Newton,
Beenden,
Grenzen des Selbstvertrauens,
Vorhersageausdruck anzeigen( 1 )
)
);
win3 wird vom Skript geschlossen und durch mein eigenes Berichtsfenster mit allem ersetzt, worum mich die Wissenschaftler gebeten haben. Wenn also außer dem Startfenster kein Fenster in JMP geöffnet ist, schlägt die Anweisung zum Anzeigen der Vorhersagegleichung aus irgendeinem Grund fehl! Alle Tricks, die in diesem Thread vorgeschlagen wurden, betreffen Operationen, die nach der Durchführung des NLR durchgeführt werden, und wirken sich daher nicht auf das Ergebnis aus.
Und der Grund, warum ich diesen Fehler nie identifiziert habe, als ich das Add-In vor ein paar Monaten geschrieben habe, ist, weil ich das Tipp-des-Tages-Fenster eingeschaltet hatte. Es muss ausgereicht haben, damit das Add-In funktioniert: Jedes geöffnete JMP-Fenster scheint zu funktionieren.
Zum Hintergrund: hGH ist die Antwort und Werte werden vom Benutzer weiter oben eingegeben, Modellwachstum ist die Spalte, die die schwer fassbare Modellgleichung als Formel verwendet, die Zeit in Anspruch nimmt und das "erwartete Wachstum" modelliert, das dem tatsächlichen Wachstum entspricht.
Das Problem ist also, dass die nichtlineare Funktion die Pred-Gleichung nicht dort anzeigt, wo sie in meinem Skript aufgerufen wird, wenn keine anderen JMP-Fenster geöffnet sind.
Ich habe vorher eine Tabelle erstellt:
dt = Neue Tabelle( "Daten",
Privatgelände,
Zeilen hinzufügen ( 6 ),
New Column( "Time", Numeric, Set Values( lstTimes ) ),
Neue Spalte( "hGH", Numerisch, Werte setzen( lsthGH ) )
);
Ich habe den Privatunterricht herausgenommen und natürlich funktioniert jetzt das Addin.
Aber der Grund, warum ich private verwendet habe, ist, dass meine Ausgabe nur so funktionieren würde. Wenn ich versuche, die Datentabelle am Ende zu schließen, wird der Bericht auch mit Wartezeit nicht erstellt.
Wie auch immer, es ist keine richtige Lösung, aber wenn es eine Möglichkeit gäbe, die Datentabelle zu öffnen, wenn der Bericht erstellt wird, damit es keine Störungen gibt, und die Datentabelle dann zu schließen, ohne dass das Skript fehlschlägt, würde ich mich damit zufrieden geben.
Ich frage mich, ob es in JMP 13 funktionieren wird, ob es sich um einen Fehler handelt oder ob tatsächlich irgendwo ein Fehler in der Art und Weise vorliegt, wie ich das Skript erstellt habe ...
Betreff: Skript funktioniert, bis es von einem Add-In aufgerufen wird!Versuche dies:
Bilderkiste( neues Bild ( modGl ))
Ich denke, das rote X bedeutet, dass das Bildfeld mit den Originaldaten für das Bild verbunden ist und diese Daten existieren nicht mehr .Durch das Klonen des Bildes (mit newImage) denke ich, dass die Bildbox eine eigene private Kopie haben wird.
Möglicherweise können Sie die Picturebox-Funktion auch weglassen:
V Listenfeld (
Textfeld ("Modellgleichung", << Schriftgröße festlegen (12)),
modEq, // Ich denke, das Bild wird ohne die PictureBox-Funktion funktionieren, aber es könnte immer noch newImage benötigen
Textfeld(" "),
Betreff: Skript funktioniert, bis es von einem Add-In aufgerufen wird!Hallo,
Ich habe jetzt verschiedene Szenarien ausprobiert.
Anmerkungen
- Das Add-In und das Skript verwenden beide Namen, die standardmäßig auf die Here-Klausel gesetzt sind (meistens, wenn Benutzer JMP gleichzeitig für etwas anderes verwenden).
- Die Gleichung, die ich aus dem JMP-Bericht in meinen importieren möchte, ist eine benutzerdefinierte Gleichung aus einer Spalte in der Tabelle, die eine zu füllende Formel verwendet, und ich habe sie aktiviert Vorhersageausdruck anzeigen ( 1 )
- In der Baumstruktur erscheint dies als Pictbox, wie Craige sagte, weil Gleichungen in JMP eher Bilder als Text sind. Und so habe ich in meinem neuen Drehbuch Erics Vorschlag verwendet und jetzt ist es so
nlr = nlModell << Bericht ;
pb = nlr [ PictBox ( 1 )] ;
modGl = pb << Bild erhalten ;
- Das Skript bekommt auch eine Tabelle:
tb = nlr [ TableBox ( 5 )] ;
tblWerte = tb << In Datentabelle machen ;
- Es erhält auch ein Diagramm, das aus mehreren Bits besteht, die in einem Bildfeld gesammelt sind:
bb = nlr [ Bilderkiste ( 1 )] ;
Parzelle = bb << Bild bekommen ;
Es zeigt diese ohne Probleme in meinem eigenen Bericht an.
Szenarien:
- funktioniert jedes Mal vom Skript
- funktioniert vom Add-in, wenn das Skript geöffnet wird, auch wenn es nicht ausgeführt wurde
- funktioniert, wenn das Add-in ein zweites Mal aufgerufen wird und der Bericht nicht geschlossen wurde (der Bericht ohne die angezeigte Gleichung)
- funktioniert nicht, wenn es zum ersten Mal aus dem Add-In aufgerufen wird oder wenn das Berichtsfenster geschlossen wurde
- funktioniert, wenn das Protokoll geöffnet ist
- funktioniert, nachdem das Protokoll geöffnet wurde, auch wenn sowohl das Protokoll- als auch das Berichtsfenster zuvor geschlossen wurden
- funktioniert, solange ein JMP-Fenster geöffnet ist (JMP-Add-In-Bearbeitungsfenster/jede Datentabelle/Skriptfenster), aber sobald diese geschlossen sind, funktioniert es nicht mehr
Sieht so aus, als ob mein Add-In einen Freund zum Arbeiten braucht
Wie Sie auf dem Bild sehen können, zeigt es ein Kreuz. Ich sollte auch sagen, dass JMP, wenn das Skript ausgeführt wird, sein eigenes Berichtsfenster und die Tabellen öffnet, die ich per Skript erstellt habe, um die nichtlineare Anpassung auszuführen. Diese öffnen und schließen sich im Hintergrund, da ich keinen Weg finden konnte, sie vollständig unsichtbar zu machen. Wenn das passiert, erhalte ich auch einen Blick auf den JMP-Analysebericht mit einem Kreuz anstelle der Vorhersagegleichung.
Wenn dies für mich wäre, hätte ich nichts dagegen, aber ich muss dies für die Verwendung in cGMP validieren, und ich kann den Leuten nicht sehr gut sagen, dass sie es jedes Mal zweimal ausführen sollen, um das richtige Format zu erhalten!
Ich bin hier ratlos...
Irgendwelche weiteren Gedanken?
Betreff: Skript funktioniert, bis es von einem Add-In aufgerufen wird!PictBox und PictureBox sind zwei unterschiedliche Boxen.Intern verwendet JMP PictureBox als Markierung in einer Displaybox-Struktur.Diese Markierung wird auf verschiedene Weise verwendet, um zu bestimmen, wann die untergeordneten Kästchen in einem einzigen Block gruppiert werden sollten.Plattformen legen im Allgemeinen eine PictureBox um einen Graphen und seine Achsen.Das ist der Punkt im Baum, an dem Sie oft "ein Foto machen" möchten.
PictBox ist eine Box, die ein Bitmap-Bild enthält.
Leider ist die PictureBox() Funktion erstellt eine PictBox.Es gibt keine JSL-Funktion zum Erstellen einer PictureBox, aber Plattformen erstellen sie.
Wenn Sie einem Bericht keine Bilder hinzufügen, werden Sie PictBox wahrscheinlich nicht finden.Sie werden PictureBox wahrscheinlich finden, wenn es ein Diagramm gibt.
Betreff: Skript funktioniert, bis es von einem Add-In aufgerufen wird!Hallo Hardner und vielen Dank für Ihre Kommentare.
Danke auch für den Tipp zur Fehlersuche. Als ich dies vor ein paar Monaten zum ersten Mal schrieb, waren die Zahlen in th Die Baumstruktur passte nicht und ich musste raten. Das hatte ich vergessen. Es war wirklich seltsam: Die Baumstruktur würde Nummernfeld 18 anzeigen, aber um es herauszuholen und in meinem Berichtsfenster anzuzeigen, müsste ich zum Beispiel Nummernfeld 7 anrufen!!!
Das Add-in führt immer die gleiche Analyse durch, also keine Probleme auf dieser Seite der Dinge.
Betreff: Skript funktioniert, bis es von einem Add-In aufgerufen wird!Hallo Eric und danke für diese Antwort.
Als ich wegging und darüber nachdachte, erinnerte ich mich auch an das Problem mit dem Umfang und erkannte, dass das ein Problem sein musste.
Ich habe beide Lösungen ausprobiert und es hat nicht funktioniert ... beim ersten Mal.
Wenn ich das Add-In jetzt jedoch zweimal hintereinander ausführe, wird die Vorhersagegleichung in meiner zweiten Berichtsausgabe angezeigt. Ich werde es noch einmal versuchen, wenn ich nicht zwischen zwei Treffen bin!
Es ist lustig, wie mir diese spezielle Bildbox Probleme bereitete und andere Bits, die ich auch aus dem jmp-Bericht herausholte, richtig angezeigt wurden.
Hier lernt man gut!
Danke noch einmal 
Betreff: Skript funktioniert, bis es von einem Add-In aufgerufen wird!Stimmen Sie zu, das sieht nach Scoping aus.
Aber wahrscheinlich unabhängig davon bin ich auch überrascht, dass dies für Sie funktioniert: pb = nlr[PictBox(1)];
Wenn ich [PictureBox(1)] nicht buchstabiere, erhalte ich eine Fehlermeldung.frage mich, ob das eine Sache der JMP-Version ist.
Ich wollte auch vorschlagen, dass Sie hinzufügen könnten
nlr<
Wieder wahrscheinlich nicht relevant für dieses unmittelbare Problem, aber ich würde vorschlagen, dass Sie sicherstellen möchten, dass diese Box immer da ist und immer PictureBox ist, wenn Ihr Add-In jedes Mal andere Daten abrufen wird (oder von anderen mit vielleicht anderen Einstellungen verwendet wird). (1). Vielleicht möchten Sie das mehr suchen speziell basierend auf dem Namen des Gliederungsfelds, unter dem es sich befindet, oder Test, um es zu finden.vielleicht tun Sie bereits Letzteres, da Ihr Skript nicht fehlschlägt, sondern den Bericht erstellt.Der Fehler, den ich bei PictBox sehe, hält das gesamte Skript an, es verwendet stattdessen kein Leerzeichen.
Betreff: Skript funktioniert, bis es von einem Add-In aufgerufen wird!Hallo Gwenicat,
Gibt es Meldungen im JMP-Protokoll?
Die meisten Probleme dieser Art sind in der Regel auf das variable Scoping zurückzuführen.Ihr Add-In wird höchstwahrscheinlich mit ausgeführt Namen standardmäßig hierher(1) , aber das Skript wird wahrscheinlich ohne das ausgeführt, wenn Sie es außerhalb des Kontexts des Add-Ins ausführen.Außerhalb des Add-In-Kontexts sind Ihre Variablen also alle global, aber im Kontext des Add-Ins werden sie dem hinzugefügt Hier stattdessen Namensraum.Also denke ich modGl in der V List Box sind in der Add-In-Version nicht zu finden.Die Tatsache, dass es funktioniert, wenn Sie das Skript einmal außerhalb des Add-Ins ausführen, unterstützt diese Theorie zunächst, da dies zu einem Putting führt modGl in den globalen Namespace, sodass das Add-In-Skript sie finden kann.
Versuchen Sie, diese beiden Zeilen zu ändern:
modEq = pb << Bild abrufen;
Picture Box (modEq),
Zu
::modEq = pb << Bild abrufen;
Bilderkiste( ::modEq ),
und sehen, ob das nicht besser funktioniert.Das versichert das modGl wird in den globalen Namensraum gestellt.Oder, wenn Sie es in der halten möchten Hier Namespace (wahrscheinlich eine bessere Vorgehensweise), tun Sie stattdessen Folgendes:
Hier: modEq = pb << Bild abrufen;
Bilderkiste( Hier: modEq ),
Lassen Sie mich wissen, ob das es behebt.
Danke,
Erich