Cuadro de lista que muestra todas las tablas abiertasEstoy intentando crear un cuadro de lista que enumere todas las tablas de datos abiertas y se actualice automáticamente con la tabla recién abierta/cerrada. Comencé con el siguiente script, pero por alguna razón la función onClose no funciona.
Agradezco la ayuda 
names default to here(1);
f1 = function ({Temp_list},
T_list = Temp_list << get name();
lb << remove all;
lb << append (T_list)
);
f2 = function ({Temp_list},
T_list = Temp_list << get name();
lb << remove all;
lb << append (T_list)
);
asub = Subscribe to data table list( , onopen(f1));
Subscribe to data table list(asub , onclose(f2));
nw = new window("Trial",show menu(0),
vlistbox(
T_list = get data table list ();
lb = listbox(T_list);
)
);
Modelado estadístico avanzadoAutomatización y secuencias de comandosInvestigación de Consumidores y MercadosAcceso a los datosCombinación y limpieza de datosDiseño de experimentosLa personalización en masaRe: Cuadro de lista que muestra todas las tablas abiertasDespués de probar un poco más Suscribirse a la lista de tablas de datos, lo evitaría si fuera posible. No parece funcionar nada bien, los eventos no se activan, la documentación es bastante mala sobre cómo debe usarse, etc. Estoy usando JMP16.1.0 Pro en Windows 10.
Tengo una aplicación en la que me gustaría tener algo como esto, pero creo que simplemente agregaré Actualizar lista de tablas de datos o algo similar.
Re: Cuadro de lista que muestra todas las tablas abiertasGracias @jthi ! ¡Eso funciona!
Si no le importa, ¿podría mostrar también cómo configuraría la cláusula "OnRename"?
Re: Cuadro de lista que muestra todas las tablas abiertasDebería poder agregar nuevos valores a lb y ellos eliminar solo el cerrado con índice (usando Contiene() para obtener el índice) y también agregar variables locales a las funciones.
Names Default To Here(1);
f1 = function ({Temp_list}, {tableList},
tableList = Temp_list << get name();
lb << append (tableList)
);
f2 = function ({Temp_list}, {tableList},
tableList = Temp_list << get name();
lb << Remove Item(Contains(lb << get items, tableList));
);
asub = Subscribe to data table list( , onopen(f1));
Subscribe to data table list(asub , OnClose(f2));
nw = new window("Trial",show menu(0),
vlistbox(
lb = listbox(get data table list ());
)
);Re: Cuadro de lista que muestra todas las tablas abiertasGracias @txnelson !! Ese es exactamente el error que encontré. Supongo que mientras tanto tendré que encontrar una solución para esto.
Re: Cuadro de lista que muestra todas las tablas abiertasUsando el siguiente JSL, esto es lo que descubrí.
Names Default To Here( 1 );
f2 = Function( {Temp_list},
T_list = Get Data Table List();
lb << remove all;
lb << append( T_list );
show("Close");
);
f1 = Function( {Temp_list},
T_list = Get Data Table List();
lb << remove all;
lb << append( T_list );
show("add");
);
asub = Subscribe to Data Table List( , onopen( f1 ) );
Subscribe to Data Table List(asub , onclose( f2 ) );
nw = New Window( "Trial",
Show Menu( 0 ),
V List Box(
T_list = Get Data Table List();
lb = List Box( T_list );
)
);
- El cuadro de lista creado agregará nuevas tablas de datos sin errores.
- La función f1 se ejecuta una vez por cada suma.
- Si cierra una tabla de datos, no se eliminará del cuadro de lista.
- Si cierra una segunda tabla de datos, la tabla de datos cerrada anterior se eliminará del cuadro de lista.
- Si cierra el cuadro de lista, ejecuta JSL por segunda vez y cierra una tabla de datos, se ejecutará una función f2 dos veces.Se ejecutará la función f2 de la primera ejecución de JSL, seguida de la ejecución de la segunda instancia de la función f2.Esto se puede mostrar cambiando la declaración Show().Si la declaración Mostrar se cambió de
Show( "Close" );
aShow( "Close 2" );
al cerrar una tabla de datos, se mostrarán ambas versiones de la declaración Show(),
- Las ejecuciones posteriores del JSL agregan copias adicionales de la función f2, y cada copia se ejecuta para cada cierre de la tabla de datos.
- Borrar globales y borrar símbolos no elimina las versiones anteriores de la función f2.
Esto es claramente un error de JMP y debe enviarse al personal de soporte de JMP.
Les he enviado el error.
Re: Cuadro de lista que muestra todas las tablas abiertasEstoy retomando este tema con algunos nuevos hallazgos, tal vez ayuden a alguien. Estaba tratando de hacer algo similar a lo que dijo @Djtjhin y me encontré con los mismos problemas que se describen aquí, que resolví en su mayoría gracias a la discusión aquí.
Lo que puedo agregar es la explicación del comportamiento extraño que describe @txnelson . El problema es que si te suscribes sin indicar explícitamente el nombre de la suscripción, como se muestra a continuación:
asub = Subscribe to data table list( , OnOpen( Show("opening...") ) )Cada vez que se ejecuta el script se crea una nueva suscripción con un nuevo nombre genérico ("_DTListSubscriber123"), aumentando el contador al final.
El truco consiste en nombrar explícitamente al suscriptor para sobrescribir el mismo cada vez que se ejecuta el script, por ejemplo:
asub = Subscribe to data table list( "MyDTLSub1", OnOpen( Show("opening...") ) )o darse de baja al final, por ejemplo en el < <>
Unsubscribe to data table list( asub, "ALL" )
En otras noticias, @Djtjhin , para cambiar el nombre funciona de manera bastante simple, parece que el evento se activa DESPUÉS del cambio de nombre, por lo que Get Data Table List() le obtiene el nuevo nombre (s). Pero me estaba arrancando el pelo por una razón diferente, antes de hacerlo funcionar, debido a la falta de documentación . A diferencia de OnOpen y OnClose, la función OnRename necesita 2 argumentos (nombre / tabla nuevo y antiguo), de lo contrario obtendrá errores. Y aunque en este ejemplo de cuadro de lista en particular en realidad no los necesita, si los necesita, también debe tener en cuenta que son de diferente tipo de variable, una es una tabla, la otra una cadena (ver a continuación).
Names Default To Here(1);
f = Function ( { new_name_as_table, old_name_as_string },
print(asub||" renaming: "|| old_name_as_string || " to " || (new_name_as_table << get name) );
lb << set items( Get Data table List() );
);
asub = Subscribe to data table list( "MySub", OnRename( f ) );
nw = new window("Trial",show menu(0),
<< On Close(Unsubscribe to data table list( asub, "ALL")),
vlistbox(
lb = listbox(get data table list ());
)
);
dt = Open( "$SAMPLE_DATA/Tiretread.jmp" );
dt << set name( (dt<<GET name=""></GET>Otherwise I agree with general sentiment that the subscriber it's very hard to work with, you have to be really careful to tie up all the loose ends. Better documentation would be much appreciated.