Liste aller Plattformobjekte?Wenn ich über JSL eine Plattform mit einer By-Variable generiere, ist der Rückgabewert eine Liste aller generierten skriptfähigen Objekte.
Wenn ich den Befehl „platform“ verwende, um nur den Dialog zu öffnen – und später, nachdem der Benutzer auf „OK“ geklickt hat, was ist dann eine schnelle und robuste Möglichkeit, die Liste aller generierten skriptfähigen Objekte abzurufen?
Etwas wie
(current report() << xpath("//OutlineBox")) << get scriptable object()... mit einer cleveren Vorauswahl sinnvoller OutlineBoxen – einer universellen Vorauswahl, die nicht auf den Einzelfall angepasst werden muss.
Names Default to Here(1);
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
New Window("test",V List Box(
dist1=Distribution (by( :age ))), // return value: list of the scriptable objects
dist2 = Distribution(
Continuous Distribution(Column( :height )),
By( :age )
));Automatisierung und SkripterstellungBetreff: Liste aller Plattformobjekte?Ich denke, dass das Ausprobieren verschiedener Plattformen und der Versuch, einen robusten XPath zu ermitteln, eine Option wäre.
Betreff: Liste aller Plattformobjekte?arbeiten daran 
Ich habe gehofft, dass das schon mal jemand vor 5 Jahren gemacht hat und direkt die Lösung liefern kann ...
Betreff: Liste aller Plattformobjekte?Gibt es eine Funktion zum Löschen von Duplikaten für Listen mit Anzeigeboxen?
Der Standardansatz über
associative array () << get keys
scheint nicht zu funktionieren.
Betreff: Liste aller Plattformobjekte?Wenn Sie ziemlich sicher sind, werden Sie nicht wirklich Duplikate haben, wenn Sie alle Umrissrahmen erhalten, da diese sich auf verschiedene Objekte beziehen.
Wenn Sie sich einige verschiedene Plattformen ansehen, die mit der Variable By erstellt wurden, werden Sie höchstwahrscheinlich Gemeinsamkeiten feststellen
Verteilung:

Ein Weg:

Graph Builder (wird etwas seltener mit der By-Variable erstellt):

Sie haben HeadBox, ListBox und OutlineBox (im Graph Builder denke ich, dass das richtige Anzeigefeld OwnerBox ist) und sie haben eine bestimmte Reihenfolge. Auch OutlineBox/OwnerBox verfügen über das helpKey-Attribut.
Betreff: Liste aller Plattformobjekte?Also:
(current report() << xpath("//OutlineBox[@helpKey]"))Betreff: Liste aller Plattformobjekte?Ich würde vermuten, dass Sie mit diesem XPath zumindest manchmal zu viele Referenzen erhalten. Ich würde versuchen, auf die erste Ebene von OutlineBox zuzugreifen, die über das Attribut helpKey verfügt, das sich in ListBox befindet. Ich bin mir nicht sicher, ob dies auf jeder JMP-Plattform funktioniert, aber dies ist hoffentlich ein Ausgangspunkt
obs = (current report() << xpath("//ListBox//OutlineBox[@helpKey and not(ancestor::OutlineBox[@helpKey])]")) << get scriptable object();
Betreff: Liste aller Plattformobjekte?Danke, es funktioniert 
Aber leider ist es ziemlich langsam.
Vielleicht ist es also besser, alle Elemente zu besorgen und dann nach dem übergeordneten Element und dem helpKey *) zu fragen.
*) funktioniert noch nicht ...
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
New Window( "test",
Outline Box( "main", Life Distribution( Perspective( Compare Groups ), Y( :weight ), Grouping( :sex ), By( :age ) ) )
);
t0 = HP Time();
list1 = Current Report() << xpath( "//OutlineBox[@helpKey]" );
Show( (HP Time() - t0) / 1000000 );
t0 = HP Time();
list2 = Current Report() << xpath( "//ListBox//OutlineBox[@helpKey and not(ancestor::OutlineBox[@helpKey])]" );
Show( (HP Time() - t0) / 1000000 );
t0 = HP Time();
firstResults = Current Report() << xpath( "//OutlineBox[@helpKey]" );
list3 = {};
For Each( {item, idx}, firstResults[{1, 2}],
found = Regex( (item << parent) << get xml(), "\A.*helpKey" ); //unfortunately not restricted to first line like should be !??!?!
If( Is Empty( item << parent ) | Is Missing( found ),
Insert Into( list3, item )
);
);
Show( (HP Time() - t0) / 1000000 );
(HP Time() - t0) / 1000000 = 0,048218; // keine Einschränkung
(HP Time() - t0) / 1000000 = 7,204071; // Xpath All-in-One
(HP Time() - t0) / 1000000 = 0,152291; // manuelle Nachauswahl
Betreff: Liste aller Plattformobjekte?Sie können höchstwahrscheinlich den zweiten XPath optimieren. Einige Vorschläge
//ListBox/*/OutlineBox[@helpKey and not(ancestor::OutlineBox[@helpKey])]
oder
//OutlineBox[@helpKey and not(ancestor::OutlineBox[@helpKey])]
Betreff: Liste aller Plattformobjekte?Lokale Datenfilter entfernen (mit Klassenname: Datenfilter[] - und nicht „OutlineBox“ 

collectedOutlineBoxObjects = (Current Report() << xpath( "//OutlineBox[@helpKey and not(ancestor::OutlineBox[@helpKey])]" )) << get scriptable object() ;
ListOfPlatFormObjects={};
For Each({item},collectedOutlineBoxObjects, If(item << class name =="OutlineBox", Insert Into(ListOfPlatFormObjects, item)));
Betreff: Liste aller Plattformobjekte?Sie können höchstwahrscheinlich einfach reines XPath verwenden, da Datenfilter einen bestimmten Wert als helpKey haben (zumindest basierend auf meiner sehr kurzen Überprüfung).
//OutlineBox[@helpKey and not(@helpKey = 'Data Filter') and not(ancestor::OutlineBox[@helpKey])]
Du kannst vielleicht nur eins haben, nicht
//OutlineBox[@helpKey and not(ancestor::OutlineBox[@helpKey] or @helpKey = 'Data Filter')]