Skripterstellung für das ProjektlayoutIch habe ein Skript, das 5 Fenster generiert, und möchte das Skript verwenden, um die Ausgabe in einem Projektformat zu organisieren und das Layout zu gestalten.
Ich hätte gerne die Fensterliste rechts. Auf der linken Seite hätte ich gerne zwei Zeilen:
In der oberen Reihe möchte ich zwei Diagramme nebeneinander haben.
In der unteren Zeile möchte ich, dass drei Tabellen in Tabs angezeigt werden.
Ich habe mir das folgende Skript ausgedacht, aber es macht nicht das, was ich will.Derzeit werden alle fünf in einer einzigen Zeile auf fünf verschiedenen Registerkarten angezeigt, mit der Fensterliste auf der rechten Seite.
Kann mir jemand die richtige Richtung weisen?
Project = new project();
Move to Project( destination( Project ), windows( {"Table1" ,"Table2" , "Table3", "Graph1", "Graph2"} ));
Project << Set Layout(
H Splitter Box(
<<SET sizes=""></SET>Betreff: Skripterstellung für das ProjektlayoutEinfachstes mögliches Beispiel für das Erstellen eines Projekts, das Erstellen einer Datentabelle und das Speichern dieser Tabelle im Projektinhalt:
new Project(
Run Script(
dt = New Table( "My Table",
Add Rows( 3 ),
New Column( "Column 1",
Set Values( [1, 2, 3] )
)
);
dt << Save As("$PROJECT/my table.jmp");
);
);
Die Pfadvariable $PROJECT wird dem Projektinhalt des aktuellen Projekts zugeordnet (und kann daher nur innerhalb eines Projekts verwendet werden). Es wäre völlig in Ordnung, die Tabellen außerhalb des Projekts zu erstellen und sie dann hinein zu verschieben. Wenn dies jedoch aus externen Gründen nicht erforderlich ist, ist es im Allgemeinen effizienter, alles gleich beim ersten Mal direkt im Projekt zu erstellen.
Betreff: Skripterstellung für das ProjektlayoutDer Hauptteil des Skripts generiert drei Datendateien und verknüpft sie miteinander.So wie es jetzt geschrieben ist, werden Dateien im Temp-Ordner des Laufwerks C gespeichert und dann in das Projekt verschoben.Ich möchte einen Inhaltsabschnitt hinzufügen und diese drei Dateien mit dem Skript hinzufügen.Ich denke, dann würde ich die durchgeführte Analyse aktualisieren, um die Dateien im Projekt zu öffnen und Prozessfähigkeitsdiagramme zu erstellen.
Betreff: Skripterstellung für das ProjektlayoutDer Projektlayoutcode sollte (mehr oder weniger) derselbe sein wie zuvor. Der Unterschied in JMP 16 besteht darin, dass Sie Ihre Inhalte beim Speichern auf Wunsch in der Projektdatei speichern können. Wenn Sie möchten, erledigen Sie dies automatisch über ein Skript. Allerdings müsste ich etwas mehr über Ihr Projekt wissen, um eine bestimmte Methode empfehlen zu können.
Betreff: Skripterstellung für das ProjektlayoutJMP 16 verbessert die Projektplattform, indem die Dateien zum Speichern und Übertragen in die Projektdatei integriert werden. Das ist eine schöne Verbesserung. Mein JMP 15-Skript zum Verschieben von Dateien aus einem Bericht in eine Projektdatei funktioniert in 16 immer noch, aber ich möchte ein Update durchführen, um die neuen Funktionen von JMP16 zu nutzen. Ich bin mir nicht sicher, wie die neue Skriptstruktur für diesen Fall aussehen würde. Irgendwelche Vorschläge? Im Anhang sieht mein Skript jetzt aus (nicht lauffähig, da alle Dateien auf meinem PC basieren und die Datenverarbeitung durch einen früheren Teil des Skripts erfolgt ist).
Betreff: Skripterstellung für das ProjektlayoutMithilfe der regulären TabBox-APIs können Sie eine bestimmte TabBox so einstellen, dass sie über eine bestimmte aktuelle Registerkarte verfügt. (Der interaktive JMP Scripting Index ist eine gute Ressource, um diese zu erlernen.) Hier ist eine Möglichkeit, dies mit dem Beispiel zu tun, mit dem wir gearbeitet haben:
Project = new project();
Move to Project( destination( Project ), windows( {table1, table2, table3} ));
Project << Set Layout(
H Splitter Box(
<<SET sizes=""></SET>
Wir speichern das Tab-Feld einfach beim Erstellen in einer Variablen und verwenden diese Variable später, um den Tab festzulegen, der aktuell sein soll.
Betreff: Skripterstellung für das ProjektlayoutHallo Aaron,
Endlich hat es funktioniert, vielen Dank!
Ich habe versucht, die Fenster-ID festzulegen, als ich die Tabellen und das Diagramm erstellt habe, aber ich glaube, das hat nicht funktioniert. Das Layout wird jetzt also korrekt ausgeführt.
Nur eine weitere verwandte Frage: Wie kann ich erreichen, dass eine bestimmte Registerkarte angezeigt wird? Gibt es eine Möglichkeit, sie zu bestellen? Standardmäßig wird immer dieselbe Tabelle angezeigt, aber das ist nicht die, die ich angezeigt haben möchte.
Betreff: Skripterstellung für das ProjektlayoutTut mir leid, dass es immer noch nicht funktioniert.Hier ist ein Beispiel für die erste Methode, bei der (größtenteils) Ihr Skript und einige Beispieldatentabellen verwendet werden:
table1 = Open("$SAMPLE_DATA/Big Class.jmp");
table1 << Set Window ID("Table1");
graph1 = table1 << Run Script("Bivariate");
graph1 << Set Window ID("graph1");
table2 = Open("$SAMPLE_DATA/Iris.jmp");
table2 << Set Window ID("Table2");
graph2 = table2 << Run Script("Graph Builder Contour Plot");
graph2 << Set Window ID("graph2");
table3 = Open("$SAMPLE_DATA/Baseball.jmp");
table3 << Set Window ID("Table3");
Project = new project();
Move to Project( destination( Project ), windows( {table1, table2, table3} ));
Project << Set Layout(
H Splitter Box(
<<SET sizes=""></SET>
Und hier ist eine Möglichkeit, dies zu tun, ohne die IDs festzulegen:
table1 = Open("$SAMPLE_DATA/Big Class.jmp");
graph1 = table1 << Run Script("Bivariate");
table2 = Open("$SAMPLE_DATA/Iris.jmp");
graph2 = table2 << Run Script("Graph Builder Contour Plot");
table3 = Open("$SAMPLE_DATA/Baseball.jmp");
Project = new project();
Move to Project( destination( Project ), windows( {table1, table2, table3} ));
Project << Set Layout(
H Splitter Box(
<<SET sizes=""></SET>
Zuletzt ist hier eine Version, die „Move to Project()“ vermeidet, indem die Fenster im Projekt von Anfang an geöffnet werden:
Project = new project();
Project << Run Script(
table1 = Open("$SAMPLE_DATA/Big Class.jmp");
table1 << Set Window ID("Table1");
graph1 = table1 << Run Script("Bivariate");
graph1 << Set Window ID("graph1");
table2 = Open("$SAMPLE_DATA/Iris.jmp");
table2 << Set Window ID("Table2");
graph2 = table2 << Run Script("Graph Builder Contour Plot");
graph2 << Set Window ID("graph2");
table3 = Open("$SAMPLE_DATA/Baseball.jmp");
table3 << Set Window ID("Table3");
);
Project << Set Layout(
H Splitter Box(
<<SET sizes=""></SET>
Hoffentlich kann eines davon so geändert werden, dass es mit Ihrem Skript funktioniert.
Betreff: Skripterstellung für das ProjektlayoutHallo Aaron,
Ich habe versucht, was Sie vorgeschlagen haben, aber immer noch kein Erfolg, immer noch die gleiche Fehlermeldung.
Was ich nicht verstehe ist: Ich habe ein neues Fenster erstellt und ihm dann mit „Fenster-ID festlegen“ eine ID zugewiesen, aber diese ID scheint von Tab Box() nicht erkannt zu werden.
Betreff: Skripterstellung für das ProjektlayoutMeine Schuld, denke ich. Get Window() muss wissen, wo es suchen muss (da Fenster im Projekt dieselben Titel haben können wie Fenster außerhalb). Also statt
Get Window("Table1")
(whihc sucht nach einem Fenster namens „Table1“, das sich nicht in einem Projekt befindet), müssen wir verwenden
Get Window(Project(Project), "Table1")
wobei das innere „Projekt“ der Name ist, den Sie oben in Ihrem Skript für Ihre Projektvariable ausgewählt haben:
Project = new project();
Alles in allem sollte so etwas funktionieren:
Tab Page Box(
Window ID( Get Window(Project(project), "Table1") << Get Window ID())
)
Und ja, wir hoffen definitiv, dies in einer zukünftigen JMP-Version einfacher zu machen. 
Betreff: Skripterstellung für das ProjektlayoutVielen Dank für Ihre Hilfe. Ich habe immer noch Schwierigkeiten, tut mir leid, dass ich ein Anfänger in JSL bin ...
Wenn ich die zweite Option verwende, erhalte ich eine Fehlermeldung zu skriptfähigen Objekten:
Send erwartet ein skriptfähiges Objekt beim Zugriff oder bei der Auswertung von „Send“, Get Window( „Table1“ ) << /*###*/
Fenster-ID abrufen() /*###*/
Ich gehe davon aus, dass ich diese Objekte skriptfähig machen muss, bin mir aber wiederum nicht sicher, wie das geht?
Ich habe auch die erste Option ausprobiert, von der ich dachte, dass sie funktionieren würde. Es ist mir gelungen, für jeden Bericht neue Fenster zu erstellen und ihnen mit dem Befehl „Fenster-ID festlegen“ eine ID zuzuweisen, aber es funktioniert immer noch nicht.
Betreff: Skripterstellung für das ProjektlayoutSie haben Recht – diese GUIDs wären jedes Mal anders. Ich werde Sie nicht mit den Details langweilen, warum wir nicht nur Fenstertitel verwendet haben, aber es gibt gute (wenn auch komplizierte) Gründe für die IDs. Beim manuellen Erstellen eines Skripts für ein Projekt wie diesem ist es am besten, die Fenster-IDs früher im Skript mithilfe von festzulegen
mywindow << Set Window ID("window1");
oder verwenden Sie Get Window ID() direkt in Ihrem Layout:
Tab Page Box(
Title( "Table1" ),
Window ID( Get Window("Table1") << Get Window ID())
)
Beachten Sie, dass Title() dort nur verwendet wird, um eine freundlichere Nachricht auszudrucken, wenn das Fenster mit der angegebenen ID nicht gefunden werden kann, und um die Dinge etwas lesbarer zu machen. Funktionell hat es keine Auswirkungen, Sie können es also auch weglassen, wenn Ihnen das das Leben erleichtert.
Betreff: Skripterstellung für das ProjektlayoutHallo Aaron,
Danke dafür. Ich wusste nicht, wie ich das Skriptlayout bekomme, also ist das großartig!
Also habe ich das getan und das Problem, das ich habe, ist, dass jede der Registerkarten im Protokoll ungefähr so aussieht:
Tab Page Box(
Title( "Table1" ),
Window ID( "e516a5e8-d5c2-954e-90a6-ba6b719dae98" )
Ich habe alle Fenster-ID-Bits entfernt, aber es funktioniert immer noch nicht, daher gehe ich davon aus, dass das Fenster-ID-Bit erforderlich ist. Diese Fenster-ID-Nummern scheinen jedoch Kombinationen aus zufälligen Buchstaben und Zahlen zu sein, die bei jeder Ausführung des Skripts unterschiedlich sind, sodass ich sie nicht im Voraus angeben kann. Gibt es eine Möglichkeit, die Fenster-IDs der geöffneten Fenster zu ermitteln? Ich habe nach einer Möglichkeit gesucht, kann aber nicht erkennen, wie das geht.
Betreff: Skripterstellung für das ProjektlayoutEine der besten Möglichkeiten, Projektlayouts in JSL zu schreiben, besteht darin, das Projekt zu öffnen, die gewünschte Anordnung per Drag-and-Drop festzulegen und das Layout dann mit JSL zu speichern. Erstellen Sie dazu ein neues JSL-Skript (außerhalb des Projekts) und führen Sie es dann aus
Get Project("Untitled") << Get Layout();
oder
Get Project(1) << Get Layout();
Verwenden Sie den Titel oder Index des Projekts, dessen Layout Sie erhalten möchten. Dadurch wird das Layout des referenzierten Projekts im Protokoll gespeichert, das Sie dann an die Arbeit mit Ihrem Projekterstellungsskript anpassen können.
(Sie können das Gleiche aus einem Projekt heraus tun und sogar die Verknüpfung [dieses Projekt()] verwenden, um den Befehl auszuführen. Das resultierende Layout enthält dann jedoch das Skriptfenster, das Sie dafür geöffnet haben, sodass es oft einfacher ist es von außen zu tun).