¿Lista de todos los objetos de la plataforma?Si genero una plataforma a través de JSL con una variable By, el valor de retorno es una lista de todos los objetos programables generados.
Si uso el comando de plataforma solo para abrir el cuadro de diálogo, y luego, después de que el usuario hizo clic en Aceptar, ¿cuál es una forma rápida y sólida de obtener la lista de todos los objetos programables que se generaron?
Algo como
(current report() << xpath("//OutlineBox")) << get scriptable object()... con una inteligente preselección de OutlneBoxes que tienen sentido: una preselección universal que no tiene que adaptarse a cada caso individual.
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 )
));Automatización y secuencias de comandosRe: ¿Lista de todos los objetos de la plataforma?Creo que probar diferentes plataformas e intentar determinar un XPath sólido sería una opción.
Re: ¿Lista de todos los objetos de la plataforma?trabajando en ello 
Esperaba que alguien hiciera esto hace ya 5 años y pudiera proporcionar directamente la solución...
Re: ¿Lista de todos los objetos de la plataforma?¿Existe una opción para "eliminar duplicados" para las listas de cuadros de presentación?
El enfoque estándar a través de
associative array () << get keys
no parece funcionar.
Re: ¿Lista de todos los objetos de la plataforma?Si está bastante seguro, no tendrá duplicados si obtiene todos los cuadros de contorno, ya que se refieren a diferentes objetos.
Si echas un vistazo a algunas plataformas diferentes creadas usando Por variable, lo más probable es que veas cosas comunes
Distribución:

De una sola mano:

Graph Builder (un poco más raro de crear usando Por variable):

Tiene HeadBox, ListBox y OutlineBox (en Graph Builder creo que el cuadro de visualización correcto es OwnerBox) y tienen un orden específico. También OutlineBox/OwnerBox tiene el atributo helpKey.
Re: ¿Lista de todos los objetos de la plataforma?Entonces:
(current report() << xpath("//OutlineBox[@helpKey]"))Re: ¿Lista de todos los objetos de la plataforma?Supongo que usar ese XPath al menos a veces te dará demasiadas referencias. Lo que intentaría es acceder al primer nivel de OutlineBox que tiene el atributo helpKey que está dentro de ListBox. No estoy seguro de si esto funcionará en cada una de las plataformas del JMP, pero esperamos que sea un punto de partida.
obs = (current report() << xpath("//ListBox//OutlineBox[@helpKey and not(ancestor::OutlineBox[@helpKey])]")) << get scriptable object();
Re: ¿Lista de todos los objetos de la plataforma?gracias, funciona 
Pero lamentablemente es bastante lento.
Entonces, tal vez sea mejor obtener todos los elementos y luego preguntar por el padre y la clave de ayuda *).
*) aún no funciona...
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 );
(Tiempo de HP() - t0) / 1000000 = 0,048218; // Sin restricción
(Tiempo de HP() - t0) / 1000000 = 7,204071; // XPath todo en uno
(Tiempo de HP() - t0) / 1000000 = 0,152291; // post-selección manual
Re: ¿Lista de todos los objetos de la plataforma?Lo más probable es que puedas optimizar el segundo XPath. Pocas sugerencias
//ListBox/*/OutlineBox[@helpKey and not(ancestor::OutlineBox[@helpKey])]
o
//OutlineBox[@helpKey and not(ancestor::OutlineBox[@helpKey])]
Re: ¿Lista de todos los objetos de la plataforma?Eliminar filtros de datos locales (con nombre de clase: Filtro de datos[] - y no "Cuadro de esquema" 
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: ¿Lista de todos los objetos de la plataforma?Lo más probable es que pueda utilizar XPath puro, ya que los filtros de datos tienen un valor específico como clave de ayuda (al menos según mi comprobación rápida).
//OutlineBox[@helpKey and not(@helpKey = 'Data Filter') and not(ancestor::OutlineBox[@helpKey])]
tal vez puedas tener solo uno no
//OutlineBox[@helpKey and not(ancestor::OutlineBox[@helpKey] or @helpKey = 'Data Filter')]