Liste de tous les objets Platform ?Si je génère une plateforme via JSL avec une variable By, la valeur de retour est une liste de tous les objets scriptables générés.
Si j'utilise la commande platform juste pour ouvrir la boîte de dialogue - et plus tard, après que l'utilisateur a cliqué sur OK, quel est un moyen rapide et robuste d'obtenir la liste de tous les objets scriptables générés ?
Quelque chose comme
(current report() << xpath("//OutlineBox")) << get scriptable object()... avec une présélection intelligente d'OutlneBoxes qui ont du sens - une présélection universelle qui ne doit pas être adaptée au cas individuel.
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 )
));Automatisation et scriptsRe : Liste de tous les objets Plateforme ?Je pense que tester différentes plates-formes et essayer de déterminer un XPath robuste serait une option.
Re : Liste de tous les objets Platform ?J'y travaille 
J'espérais que quelqu'un l'ait déjà fait il y a 5 ans et puisse directement fournir la solution...
Re : Liste de tous les objets Plateforme ?Existe-t-il une fonction « supprimer les doublons » pour les listes de zones d'affichage ?
L'approche standard via
associative array () << get keys
ne semble pas fonctionner.
Re : Liste de tous les objets Plateforme ?Si vous êtes presque sûr, vous n'aurez pas vraiment de doublons si vous obtenez toutes les zones de contour, car elles font référence à différents objets.
Si vous jetez un œil à quelques plates-formes différentes créées à l'aide de la variable By, vous verrez probablement des éléments communs.
Distribution:

Sens Unique:

Graph Builder (un peu plus rare à créer en utilisant By variable) :

Vous avez HeadBox, ListBox et OutlineBox (dans Graph Builder, je pense que la zone d'affichage correcte est OwnerBox) et ils ont un ordre spécifique. OutlineBox/OwnerBox a également l'attribut helpKey.
Re : Liste de tous les objets Platform ?Donc:
(current report() << xpath("//OutlineBox[@helpKey]"))Re : Liste de tous les objets Plateforme ?Je suppose que l’utilisation de XPath vous donnera au moins parfois trop de références. Ce que j'essaierais, c'est d'accéder au premier niveau d'OutlineBox qui possède l'attribut helpKey qui se trouve dans ListBox. Je ne sais pas si cela fonctionnera sur chacune des plates-formes JMP, mais j'espère que c'est un point de départ.
obs = (current report() << xpath("//ListBox//OutlineBox[@helpKey and not(ancestor::OutlineBox[@helpKey])]")) << get scriptable object();
Re : Liste de tous les objets Platform ?merci, ça marche 
Mais malheureusement, c'est assez lent.
Alors peut-être vaut-il mieux récupérer tous les éléments, puis demander le parent et la clé d'aide *).
*) ne fonctionne pas encore...
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 Temps() - t0) / 1 000 000 = 0,048218 ; // pas de réstriction
(HP Temps() - t0) / 1 000 000 = 7,204071 ; // XPath tout-en-un
(HP Temps() - t0) / 1 000 000 = 0,152291 ; // post-sélection manuelle
Re : Liste de tous les objets Plateforme ?Vous pouvez très probablement optimiser le deuxième XPath. Quelques suggestions
//ListBox/*/OutlineBox[@helpKey and not(ancestor::OutlineBox[@helpKey])]
ou
//OutlineBox[@helpKey and not(ancestor::OutlineBox[@helpKey])]
Re : Liste de tous les objets Platform ?Supprimez les filtres de données locaux (avec le nom de classe : Filtre de données[] - et pas "Boîte de contour" 
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)));
Re : Liste de tous les objets Platform ?Vous pourrez probablement simplement utiliser XPath pur, car les filtres de données ont une valeur spécifique en tant que helpKey (au moins d'après ma vérification très rapide).
//OutlineBox[@helpKey and not(@helpKey = 'Data Filter') and not(ancestor::OutlineBox[@helpKey])]
tu peux peut-être en avoir juste un, non
//OutlineBox[@helpKey and not(ancestor::OutlineBox[@helpKey] or @helpKey = 'Data Filter')]