Alle Elemente der Anzeigestruktur finden<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Hallo,
Ich möchte JSL verwenden, um für Skriptzwecke eine Liste aller Objekte in einem Anzeigebaum zu erhalten.Konkret möchte ich eine Liste aller FrameBoxen in einem Fenster erhalten und dann jeweils ein Grafikskript hinzufügen.Oder noch besser: Ich möchte dem Benutzer eine Liste der verfügbaren FrameBoxes zurückgeben und den Benutzer dann auswählen lassen, welches Grafikskript hinzugefügt werden soll.
Wie kann ich eine Liste aller FrameBoxen in einem Fenster erhalten?Ich möchte eine Liste erhalten, die für die Skripterstellung geeignet ist, und nicht nur die Anzeigestruktur anzeigen.Ist das möglich?
Danke!
Betreff: Alle Anzeigebaumelemente findenWelche JMP-Version verwenden Sie?
Laufen Sie auf einer Windows-Box oder auf einem Mac?
Könnten Sie bitte das Protokoll löschen, das Skript erneut ausführen und dann die gesamte Protokollausgabe in Ihre nächste Antwort aufnehmen?
Betreff: Alle Anzeigebaumelemente findenIch versuche, dieses Skript auszuführen, erhalte jedoch die Fehlermeldung:
Send erwartet ein skriptfähiges Objekt{1} beim Zugriff oder bei der Auswertung von „Send“, Knoten << /*###*/className/*###*/
Irgendeine Idee, warum oder was ich tun sollte?
Danke,
Tova
Betreff: Alle Anzeigebaumelemente findenIch versuche, dieses Skript auszuführen, erhalte jedoch die Fehlermeldung:
Send erwartet ein skriptfähiges Objekt{1} beim Zugriff oder bei der Auswertung von „Send“, Knoten << /*###*/className/*###*/
Irgendeine Idee, warum oder was ich tun sollte?
Danke
Betreff: Alle Anzeigebaumelemente findenHallo MS,
Das Problem scheint darin zu liegen, dass „parent << getTitle“ kein Ergebnis für Graph Builder in JMP10 liefert.
Mein Team wird für JMP10 darauf verzichten müssen. Vielen Dank für Ihre Hilfe!
Betreff: Alle Anzeigebaumelemente findenIch kann möglicherweise nicht helfen, da ich keine JMP 10-Lizenz habe. Was geht schief? Gibt es Meldungen im Protokoll?
Graph Builder hat sich mit jeder neuen Version von JMP stark weiterentwickelt. Ich denke, dass sich auch die Skriptunterstützung von Graph Builder verbessert hat. Möglicherweise gibt es im v.10 Graph Builder-Bericht einen speziellen Anzeigefeldtyp, der (noch) nicht „skriptfähig“ ist und dazu führt, dass die While-Schleife angehalten wird, bevor die Suche abgeschlossen ist.
Sie könnten es auch versuchen Einfügen() anstatt Fügen Sie Item() ein.
Betreff: Alle Anzeigebaumelemente findenHallo MS ,
Nochmals vielen Dank für Ihr Skript. es funktioniert wunderbar für JMP12.Ich versuche jetzt, das Skript bis hinunter zu JMP10 kompatibel zu machen, und habe Probleme beim Debuggen des Skripts für GraphBuilder.Wissen Sie, wie Sie Ihr Skript zum Laufen bringen? GraphBuilder in JMP10?
dt = Offen ( „$SAMPLE_DATA/Big Class.jmp“ ) ;
// Das Skript funktioniert für graph1.
graph1 = dt << Modell anpassen (
Y ( : Höhe ) ,
Auswirkungen ( : Sex ) ,
Persönlichkeit ( „Standard kleinste Quadrate“ ) ,
Schwerpunkt ( „Wirkungshebel“ ) ,
Laufen (
: Höhe << { Passt nicht ( 0 ) , Tatsächliche Darstellung durch vorhergesagte Darstellung ( 1 ) ,
Box Cox Y-Transformation ( 1 ) , Plot-Residuum nach Vorhersage ( 1 ) ,
Hebelwirkung des Handlungseffekts ( 1 )}
)
) ;
// Skript stürzt für graph2 ab.
/*
graph2 = dt << Graph Builder(
Systemsteuerung anzeigen( 0 ),
Variablen( X( :height ), Y( :weight ), Wrap( :age ) ),
Elemente (Punkte (X, Y, Legende (1)))
);
*/
Warten ( 1 ) ;
gewinnen = Aktuelles Fenster () ;
// Assoziatives Array, das angezeigte FrameBox-Nummern mit Titeln verknüpft
fbTitles = [ => ] ;
ich = 1 ;
Während ( Ist skriptfähig ( Versuchen ( Elternteil = gewinnen [ Framebox ( ich )] << Elternteil ) ) ,
Während ( parentType = Verkohlen ( Elternteil << Klassenname ) != „OutlineBox“ ,
Elternteil = Elternteil << Elternteil
) ;
fbTitles << Artikel einfügen ( ich , Elternteil << getTitle ) ;
ich ++;
) ;
Zeigen ( fbTitles ) ;
// Fenster auswählen.
gewinnen << Bringen Sie das Fenster nach vorne ;
Für ( ich = 1 , ich <= N Artikel ( fbTitles ) , ich ++,
gewinnen [ FrameBox ( ich )] << Wählen ;
Neues Fenster ( „FrameBox-Titel“ , << Modal , Textfeld ( Bewertung ( fbTitles [ ich ] ) ) ) ;
gewinnen [ FrameBox ( ich )] << Abwählen ;
) ;
Betreff: Alle Anzeigebaumelemente findenDanke, MS.
Wenn Sie Ihre Antwort in der separaten Diskussion für diese Folgefrage veröffentlichen, Suchen Sie nach versteckten oder angezeigten FrameBoxen , ich werde es als richtig markieren.
Sehr beeindruckend.
Betreff: Alle Anzeigebaumelemente findenDas hat bei mir funktioniert, wenn Sie nicht alle anderen Dinge benötigen, die Ian eingebaut hat.Ich weiß nicht, warum Listen mit Listen zurückgegeben werden, aber ich wähle einfach die erste aus.
dt = offen ( „$SAMPLE_DATA/Big Class.jmp“ ) ;
biv = (dt << Bivariat (Y( : Höhe , : Gewicht) , X( : Alter))) ;
Frame_list = biv << xpath ( "//FrameBox" ) ;
Warten ( 2 ) ;
Frame_list[ 1 ][ 1 ] <
Warten ( 2 ) ;
Frame_list[ 2 ][ 1 ] <
Betreff: Alle Anzeigebaumelemente findenInteressante Diskussion. Unten finden Sie ein Beispiel, das stark an die obigen Beispiele angelehnt ist und bei dem ich ein assoziatives Array verwende, um die zu verknüpfen gegenwärtige Zahlen von angezeigte Rahmenfelder mit ihren Titeln.
dt = Offen ( „$SAMPLE_DATA/Big Class.jmp“ ) ;
obj = dt << Modell anpassen (
Y ( : Höhe ) ,
Auswirkungen ( : Sex ) ,
Persönlichkeit ( „Standard kleinste Quadrate“ ) ,
Schwerpunkt ( „Wirkungshebel“ ) ,
Laufen (
: Höhe << { Passt nicht ( 0 ) , Tatsächliche Darstellung durch vorhergesagte Darstellung ( 1 ) , Box Cox Y-Transformation ( 1 ) , Plot-Residuum nach Vorhersage ( 1 ) ,
Hebelwirkung des Handlungseffekts ( 1 )}
)
) ;
Bericht = Bericht ( obj ) ;
// Assoziatives Array, das angezeigte Framebox-Nummern mit Titeln verknüpft
fbTitles = [ => ] ;
ich = 1 ;
Während ( Ist skriptfähig ( Versuchen ( Elternteil = Bericht [ Framebox ( ich )] << Elternteil )) ,
Während ( parentType = Verkohlen ( Elternteil << Klassenname ) != „OutlineBox“ , Elternteil = Elternteil << Elternteil ) ;
fbTitles << Artikel einfügen ( ich , Elternteil << getTitle ) ;
ich ++;
) ;
Zeigen ( fbTitles ) ;
// Fenster auswählen.
obj << Bringen Sie das Fenster nach vorne ;
Für ( ich = 1 , ich <= N Artikel ( fbTitles ) , ich ++,
Bericht [ FrameBox ( ich )] << Wählen ;
gewinnen = Neues Fenster ( „FrameBox-Titel“ , << Modal , Textfeld ( Bewertung ( fbTitles [ ich ]))) ;
Bericht [ FrameBox ( ich )] << Abwählen ;
) ;
Betreff: Alle Anzeigebaumelemente findenOkay.Danke Ian.Ein unglücklicher Nebeneffekt der zurückgegebenen versteckten FrameBoxen besteht darin, dass der FrameBox-Titel möglicherweise nicht mit der FrameBox-Nummer übereinstimmt, wie unten gezeigt.Möglicherweise kann ich mein Skript mithilfe einiger anderer Variationen der Try()-Funktion zum Laufen bringen.
Namen standardmäßig hier ( 1 ) ;
Protokoll löschen () ;
// Diese Funktion durchläuft rekursiv einen Anzeigebaum und erzeugt
// eine Vorbestellungsliste der Namen der Anzeigefelder, aus denen sich zusammensetzt
// der Baum. Es sucht auch nach jeder FrameBox (ob angezeigt oder nicht),
// und erhält den Namen der übergeordneten OutlineBox
Vorbestellung = Funktion ( { Knoten } ,
Lokal ( { Knoten } ,
// Untersuchen Sie den aktuellen Knoten
Knotentyp = Verkohlen ( Knoten << Klassenname ) ;
Drucken ( „Knoten:“ || Knotentyp ) ;
Wenn ( Knotentyp == „FrameBox“ ,
// Den Titel des übergeordneten Gliederungsknotens dieser FrameBox finden
Elternteil = Knoten << Elternteil ;
parentType = Verkohlen ( Elternteil << Klassenname ) ;
Während ( parentType != „OutlineBox“ ,
Elternteil = Elternteil << Elternteil ;
parentType = Verkohlen ( Elternteil << Klassenname ) ;
) ;
Einfügen in ( fbTitles , Elternteil << getTitle ) ;
) ;
// Führen Sie die Rekursion durch
Knoten = Knoten << Kind ;
Während ( Ist skriptfähig ( Knoten ) ,
Rekursion ( Knoten ) ;
Knoten = Knoten << Geschwister ;
) ;
)
) ;
// Probieren Sie „Vorbestellung“ aus. . .
dt = Offen ( „$SAMPLE_DATA/Big Class.jmp“ ) ;
obj = dt << Modell anpassen (
Y ( : Höhe ) ,
Auswirkungen ( : Sex ) ,
Persönlichkeit ( „Standard kleinste Quadrate“ ) ,
Schwerpunkt ( „Wirkungshebel“ ) ,
Laufen (
: Höhe << { Passt nicht ( 0 ) , Tatsächliche Darstellung durch vorhergesagte Darstellung ( 1 ) , Regression darstellen ( 0 ) , Plot-Residuum nach Vorhersage ( 1 ) , Hebelwirkung des Handlungseffekts ( 1 )
}
)
) ;
Bericht = Bericht ( obj ) ;
fbTitles = {} ;
Vorbestellung ( Bericht ) ;
Drucken ( "\!N" , fbTitles ) ;
// Fenster auswählen.
Warten ( 1 ) ;
obj << Bringen Sie das Fenster nach vorne ;
Für ( ich = 1 , ich <= N Artikel ( fbTitles ) , ich ++,
Versuchen (
Bericht [ FrameBox ( ich )] << Wählen ;
gewinnen = Neues Fenster ( „FrameBox-Titel“ , << Modal , Textfeld ( Bewertung ( fbTitles [ ich ] ) ) ) ;
Bericht [ FrameBox ( ich )] << Abwählen ;
)
) ;
Betreff: Alle Anzeigebaumelemente findenIch beantworte Ihre Frage nicht wirklich direkt, aber Sie können den von Ihnen erwähnten Fehler möglicherweise mithilfe der Funktion „Try()“ beheben.
Betreff: Alle Anzeigebaumelemente findenHallo Ian@JMP ,
Nochmals vielen Dank dafür Vorbestellfunktion.Gibt es eine Möglichkeit für die Funktion, nur FrameBoxes zurückzugeben, die tatsächlich angezeigt werden?Oder gibt es für JMP eine Möglichkeit zu erkennen, welche FrameBoxen angezeigt werden und welche nicht?
Ich stelle fest, dass mein Skript einen Fehler verursacht, wenn er versucht, einen Befehl an eine FrameBox zu senden, die nicht angezeigt wird.
Betreff: Alle Anzeigebaumelemente findenDanke Ian.
Betreff: Alle Anzeigebaumelemente findenDas ist durchaus möglich. Der folgende Code verwendet Pre-Order-Traversal, um den Anzeigebaum zu durchlaufen (und wurde, glaube ich, ursprünglich von Joseph Morgan in der JMP-Abteilung geschrieben). Mit ein paar Änderungen (abhängig vom Rest Ihres Codes) sollten Sie in der Lage sein, das zu bekommen, was Sie brauchen.
NamesDefaultToHere ( 1 ) ;
Protokoll löschen () ;
// Diese Funktion durchläuft rekursiv einen Anzeigebaum und erzeugt
// eine Vorbestellungsliste der Namen der Anzeigefelder, aus denen sich zusammensetzt
// der Baum. Es sucht auch nach jeder FrameBox (ob angezeigt oder nicht),
// und erhält den Namen der übergeordneten OutlineBox
Vorbestellung = Funktion ({ Knoten } ,
Lokal ({ Knoten } ,
// Untersuchen Sie den aktuellen Knoten
Knotentyp = Verkohlen ( Knoten << Klassenname ) ;
Drucken ( „Knoten:“ || Knotentyp ) ;
Wenn ( Knotentyp == „FrameBox“ ,
// Den Titel des übergeordneten Gliederungsknotens dieser FrameBox finden
Elternteil = Knoten << Elternteil ;
parentType = Verkohlen ( Elternteil << Klassenname ) ;
Während ( parentType != „OutlineBox“ ,
Elternteil = Elternteil << Elternteil ;
parentType = Verkohlen ( Elternteil << Klassenname ) ;
) ;
Einfügen in ( fbTitles , Elternteil << getTitle )
) ;
// Führen Sie die Rekursion durch
Knoten = Knoten << Kind ;
Während ( IsScriptable ( Knoten ) ,
Rekursion ( Knoten ) ;
Knoten = Knoten << Geschwister ;
) ;
) ;
) ;
// Probieren Sie „Vorbestellung“ aus. . .
dt = Offen ( „$SAMPLE_DATA/Big Class.jmp“ ) ;
obj = dt << Modell anpassen (
Y ( : Höhe ) ,
Auswirkungen ( : Sex ) ,
Persönlichkeit ( „Standard kleinste Quadrate“ ) ,
Schwerpunkt ( „Wirkungshebel“ ) ,
Laufen (
: Höhe << { Passt nicht ( 0 ) , Tatsächliche Darstellung durch vorhergesagte Darstellung ( 1 ) ,
Regression darstellen ( 0 ) , Plot-Residuum nach Vorhersage ( 1 ) ,
Hebelwirkung des Handlungseffekts ( 1 )}
)
) ;
Bericht = Bericht ( obj ) ;
fbTitles = {} ;
Vorbestellung ( Bericht ) ;
Drucken ( "\!N" , fbTitles ) ;