So schließen Sie einen vorhandenen Tabellendatenfilter am Anfang eines neuen SkriptsIch habe ein Skript, das einer bereits geöffneten Datentabelle einen Filter hinzufügt. Manchmal hat ein Benutzer bereits (manuell) einen Datenfilter für diese Tabelle geöffnet, bevor das Skript aufgerufen wird.
Ein solcher vorhandener Datenfilter scheint die Wirkung meines neuen, skriptgesteuerten Filters zu beeinträchtigen - obwohl ich am Anfang meines Skripts ein dt << Clear Row States mache.
Ich möchte also am Anfang meines Skripts eine Anweisung haben, die alle vorhandenen Tabellenfilter schließt. Aber ich kann nicht herausfinden, wie ich auf einen beliebigen offenen Datenfilter verweisen kann, den jemand anderes bereits außerhalb meines eigenen Skripts erstellt hat. Anregungen?
Betreff: So schließen Sie einen vorhandenen Tabellendatenfilter am Anfang eines neuen SkriptsIch habe im Scripting Index gefunden, dass man über eine Datentabelle referenzieren kann
dt = data table(i);
dt = data table(name);
und erhalten Sie den Namen über
dt << get name();
Gibt es auch eine Funktion um "i" zu bekommen.
Ich meine direkt, nicht über
Loc(Get Data Table List(),data table(2))
Oh, mir ist gerade aufgefallen, dass Datenfilter einen eigenen Index haben - unabhängig von den jeweiligen Datentabellen ...
Damit Datenfilter[i] kann nicht verwendet werden, um auf einen bestimmten Datenfilter zuzugreifen (über Datentabelle-> i --> Datenfilter) ?
Betreff: So schließen Sie einen vorhandenen Tabellendatenfilter am Anfang eines neuen SkriptsData Filter[i]
cool!
Wo ist das dokumentiert?
Betreff: So schließen Sie einen vorhandenen Tabellendatenfilter am Anfang eines neuen SkriptsBeim Herumalbern habe ich eine einfache Lösung gefunden:
For( i = N Items( Get Window List() ), i >= 1, i--,
Try(
Data Filter[i] << Close;<BR /> Data Table[i] << Clear Row States // optional, if you want to<BR /> )<BR />);Ich hatte keine Ahnung von der Data Filter[i]-Syntax. Macht es einfach.
Betreff: So schließen Sie einen vorhandenen Tabellendatenfilter am Anfang eines neuen SkriptsVielen Dank, gz.
Die xpath-Funktion ist großartig! Zufällig komme ich aus einem XML-Hintergrund und habe in der Vergangenheit xpath verwendet. Aber ich war mir überhaupt nicht bewusst, dass Sie es auf diese Weise in JMP verwenden können.Und ich fand es bis jetzt schwierig, in Anzeigebäumen zu navigieren. Das ist also ein echter Fund. Sehr hilfreich!
Betreff: So schließen Sie einen vorhandenen Tabellendatenfilter am Anfang eines neuen Skripts@John madden ,
Wenn Sie nur möchten, dass die Schaltfläche zum Zurücksetzen der Auswahl irgendwann gedrückt wird, finden Sie hier ein Skript.
Dieses Skript
- sucht nach einem Tabellendatenfilter.
- Wenn gefunden, wird nach einer sichtbaren Schaltfläche mit dem Titel "Auswahl zurücksetzen" gesucht.
- Wenn die Schaltfläche gefunden wird, klicken Sie darauf.
Names Default to Here(1);
dt = current data table();
dtname = dt << get name;
winList = get window List();
found = 0; _xzz=empty();
For(i=nitems(winList), i>=1 & !found, i--,
nme = winList[i] << Get Window Title;
If(Starts With(nme,"Data Filter") & Contains(nme,dtname),
found =1;
_xzz = winList[i] <<XPATH> 0, _xzz[1] << Click);
);
);</XPATH>
Wenn Sie möchten, dass diese Aktion häufiger als am Anfang Ihres Skripts ausgeführt wird, benötigen Sie einen Handler oder ein Abonnement, um zu definieren, wann es ausgeführt werden muss.
Ich hoffe, das hilft.
Die XPath-Syntax kann etwas seltsam aussehen, ist aber sehr leistungsfähig, da die JMP-Berichtsbaumstruktur eine zugeordnete XML-Beschreibung hat.Ich habe ein Skript angehängt, das für Kapitel 6, Abschnitt „Skriptfähiges Objekt und XPath“ geschrieben wurde JSL Companion, Anwendungen der JMP-Skriptsprache, zweite Ausgabe . Das Skript bietet eine begrenzte Einführung, einige einfache Beispiele und Links, um mehr zu erfahren.
Betreff: So schließen Sie einen vorhandenen Tabellendatenfilter am Anfang eines neuen Skripts@John madden ,
Es ist mir nicht klar, welche Aktion Sie wollen. Zum Beispiel:
- Bsp. 1: Angenommen, „Große Klasse“ war geöffnet, der zugehörige Datenfilter war auf die Spalte „Alter“ eingestellt, und im Filter wurden 13- und 14-Jährige ausgewählt. Dann wählte eine andere Bewerbung weibliche 15-Jährige aus. Die Schaltfläche Zurücksetzen wird angezeigt. Wenn Sie darauf klicken, wird die im Tabellendatenfilter definierte Tabellenauswahl zurückgegeben. Ist es das was du willst?
- Ex2: gleiches Ausgangsszenario wie Ex1, aber ein Benutzer löscht einige Zeilen aus der Datentabelle. Die Schaltfläche „Zurücksetzen“ wird nicht angezeigt und die vorherige Auswahl wird nicht mehr im Datenfilter angezeigt.
Es gibt Methoden/Funktionen, die "Handler" für einen Datenfilter und eine Tabelle genannt werden
- Erstellen Sie einen Datenfilter-Handler
- Erstellen Sie einen Row State Handler
- Abonnieren (für eine Datentabelle)
Nach der Definition/Aktivierung können Maßnahmen ergriffen werden, wenn sich der Zeilenstatus ändert, Zeilen gelöscht werden und mehr.
Wenn Sie nur an der Schaltfläche "Zurücksetzen" interessiert sind, vermute ich (habe es noch nicht getestet), kann das vorherige Skript, das ich gesendet habe, geändert werden, um den Datenfilter zu finden, und wenn die Schaltfläche "Zurücksetzen" nicht eingeklappt (sichtbar) ist, kann ein Klick erfolgen dazu geschickt. Bevor Sie jedoch ein modifiziertes Skript senden, eine bessere Beschreibung der erwarteten Aktion wäre hilfreich.
Eine weitere Überlegung: Wenn ein Benutzer einem Bericht einen lokalen Datenfilter hinzufügt, spiegelt die Tabelle, und wenn sie einen Datenfilter hat, keine Benutzerauswahl aus dem lokalen Datenfilter des Berichts wider.
Betreff: So schließen Sie einen vorhandenen Tabellendatenfilter am Anfang eines neuen SkriptsDas funktioniert, aber ich glaube, ich habe etwas detaillierter erkannt, was passiert, was auf eine andere Lösung hindeuten könnte.
Wenn Sie eine Tabelle mit einem Filter erstellen und dann die Tabellenzeilenauswahl an anderer Stelle ändern (bei mir ist dies der Fall), erscheint im Datenfilter Folgendes:


Ich denke, was ich brauche, ist das Skriptäquivalent zum Drücken der Schaltfläche "Auswahl zurücksetzen".
Ist das möglich?
Betreff: So schließen Sie einen vorhandenen Tabellendatenfilter am Anfang eines neuen Skripts@John madden ,
Ab JMP 14 ist die einzige Methode, die ich kenne, die über Brute Force. Siehe unten. Notiz Von vorn anfangen löscht den Tabellenauswahlstatus
Names Default to Here(1);
dt = current data table();
dtname = dt << get name;
winList = get window List();
found = 0;
For(i=nitems(winList), i>=1 & !found, i--,
nme = winList[i] << Get Window Title;
If(Starts With(nme,"Data Filter") & Contains(nme,dtname),
found =1;
(winList[i] << child << get scriptable object) << Start Over;
window(nme) << close window();
);
show(i, nme, found);
);
Wenn Sie mit einer Anwendung arbeiten und der Benutzer einen lokalen Datenfilter hinzufügt und Ihre Analysen ihn entfernen müssen, können Sie XPath verwenden, um ihn zu finden, das Skript abzurufen, den gefundenen Filter zu löschen, Ihre Analyse herunterzuladen und über das gespeicherte Skript wiederherzustellen.
Die angehängte JSL unten zeigt, wie man XPath verwendet, um einen Zugriff auf einen Datenfilter für eine bestimmte Analyse zu erhalten.
Ich hoffe, das hilft.