Agregar un elemento de cuadro de visualización especial para la lista de tablas de datos similar a la barra de herramientasActualmente, es bastante complicado crear una función similar a la que ya se encuentra en la barra de herramientas. Agregue un nuevo elemento que pueda usarse para este propósito; también debería actualizarse automáticamente. Este es un tipo de elemento bastante común que agrego a mis interfaces de usuario para permitir que el usuario cambie la tabla de datos actual, la traiga al frente o simplemente para ver rápidamente cuál es la tabla de datos actual.
Automatización y scriptingRe: Agregar un elemento de cuadro de visualización especial para la lista de tablas de datos similar a la barra de herramientasPor "funcionalidad similar a la que ya se encuentra en la barra de herramientas" me refiero a un cuadro combinado cuya lista se actualizaría cuando se abre, se renombra o se cierra la tabla de datos.
La funcionalidad sería un poco diferente a la de la barra de herramientas porque no debería cambiar la tabla cuando cambia la tabla de datos actual, sino que se activaría de manera similar a como lo hace << Establecer función para el cuadro combinado.
Caso de uso:
- Tengo una herramienta que puede realizar análisis complicados en diferentes tipos de tablas de datos, pero el inicio de esa herramienta lleva bastante tiempo.
- En un caso "normal", simplemente ejecutaría la herramienta en la tabla de datos actual(). Pero si desea ejecutarla en varias tablas, sería beneficioso tener un cambiador de tablas fácil de usar debido al largo inicio.
Por ejemplo , el complemento Herramientas de tabla de datos es un complemento que tiene un cuadro de lista y un botón para actualizar la lista de la tabla que podría reemplazarse con este elemento (si se ajustara a la interfaz de usuario).
Re: Agregar un elemento de cuadro de visualización especial para la lista de tablas de datos similar a la barra de herramientasEse script me da una mejor idea de lo que quieres, pero lo que todavía no está claro es a qué te refieres con " funcionalidad similar a la que ya se encuentra en la barra de herramientas". ¿Quieres un nuevo cuadro de visualización que muestre todas las tablas abiertas y que se pueda usar en cualquier ventana de informe con script? ¿Es importante la selección de columnas en la tabla? Sería de ayuda si pudieras describir un ejemplo de dónde se podría usar esto.
Re: Agregar un elemento de cuadro de visualización especial para la lista de tablas de datos similar a la barra de herramientasEl código es un poco confuso, ya que lo "tomé prestado" de una de mis herramientas (lo más probable es que deba escribirlo en una clase). Pero básicamente:
- Tengo un cuadro combinado con la lista de tablas de datos iniciales y la tabla de datos actual configurada como selección actual
- He configurado una función en el cuadro combinado que actualizará el selector de columnas de filtro en función del cambio de valor (cambio de tabla de datos). No cambia la tabla de datos actual ni cambia cuando cambia la tabla de datos actual.
- Tengo un selector de columnas de filtro que se supone que utiliza la misma tabla que se puede ver en el cuadro combinado.
- Utilizo la función de suscripción a la lista de tablas de datos para realizar un seguimiento de las nuevas tablas, los cambios de nombre y el cierre de las tablas de datos. Las funciones intentan gestionar todos estos cambios y cómo afectan al cuadro combinado.
- Cuando se cierra la ventana, elimino mi suscripción a la lista de tablas de datos.
Ejemplo de código:
Ver más...
Names Default To Here(1);
// To initialize Combo Box
init_dt_list = Get Data Table List() << Get Name;
If(N Items(init_dt_list) == 0,
Throw("No tables open");
);
dt = Current Data Table();
init_dt_idx = Contains(init_dt_list, dt << get name());
nw = New Window("test",
window:dt = dt;
H List Box(
Lineup Box(N Col(2),
window:cb_table = Combo Box(init_dt_list, << Set(init_dt_idx), << Set Function(function({this},
// must be done this way to recover from no tables open?
If((this << get selected) != "(SELECT TABLE)",
all_items = this << get items;
If(Contains(all_items, "(SELECT TABLE)"),
this << Remove Item(Contains(all_items, "(SELECT TABLE)"));
);
window:dt = Datatable((this << get selected));<BR />
// redo filter col selector
(window:ob_column_selection << child) << Delete Box();
Eval(EvalExpr(nw:ob_column_selection << Append(V List Box(
window:fcs = Filter Col Selector(Datatable(Expr(Datatable(window:dt))), << Set N Lines(5)),
window:fcs[IfBox(1)] << Set(1);
))));
);
)),
<< Set Tip("Data Table")
),
window:btn_table = Button Box("", << Set Function(function({this},
window:dt = Datatable(window:cb_table << Get Selected);
window:dt << Bring Window To Front;
)),
<< Set Icon("ActivateDataTable"),
<< Set Tip("View Data Table")
)
),
window:ob_column_selection = Outline Box("Column Selector",
V List Box( // Necessary evil for easier filter col selector updating
window:fcs = Filter Col Selector(Datatable(dt), << Set N Lines(5)),
window:fcs[IfBox(1)] << Set(1)
)
)
)
);
// Functions for different changes in data table list
Eval(EvalExpr(f_open = function({dtab},
cur_dts = Reverse(Get Data Table List() << Get Name);
cur_dt = Expr(nw:cb_table) << Get Selected;
If(cur_dt == "(no tables)",
nw:dt = Datatable(dtab);
);
Expr(nw:cb_table) << Set Items(cur_dts);
Expr(nw:cb_table) << Set(Contains(cur_dts, cur_dt));
If(N items(cur_dts) == 1,
// add (SELECT TABLE) temp item to recover from empty table situation
Expr(nw:cb_table) << Append Item("(SELECT TABLE)");
Expr(nw:cb_table) << Set(2, Run Script(0));
);
)));
Eval(EvalExpr(f_rename = function({dtab, b},
cur_dts = Reverse(Get Data Table List() << Get Name);
cur_dt = Expr(nw:cb_table) << Get Selected;
Substitute Into(cur_dts, b, (dtab << get name));
If(cur_dt == b,
cur_dt = dtab << get name;
);
Expr(nw:cb_table) << Set Items(cur_dts);
Expr(nw:cb_table) << Set(Contains(cur_dts, cur_dt));
)));
Eval(EvalExpr(f_close = function({dtab},
cur_dts = Reverse(Get Data Table List() << Get Name);
Remove From(cur_dts, Contains(cur_dts, dtab << get name));
cur_dt = Expr(nw:cb_table) << Get Selected;
If(cur_dt == dtab << get name(),
cur_dt = Current Data Table() << get name;
);
nw:cb_table << Set Items(cur_dts);
Expr(nw:cb_table) << Set(Contains(cur_dts, cur_dt));
If(N Items(cur_dts) == 0,
nw:cb_table << Set Items({"(no tables)"});
);
)));
// Subscription to data table list
aSub = Subscribe to Data Table List(, OnOpen(f_open));
Eval(EvalExpr(Subscribe to Data Table List(Expr(aSub), On Rename(f_rename))));
Eval(EvalExpr(Subscribe to Data Table List(Expr(aSub), OnClose(f_close))));
// To remove subscription
Eval(EvalExpr(nw << On Close(
Try(Unsubscribe to Data Table List(Expr(aSub), "ALL"));
)));
Lo que me gustaría tener es algún elemento más simple para gestionar esta misma operación. Podría escribirlo como una clase yo mismo, pero creo que esto podría ser útil para otros programadores de JSL que también creen interfaces de usuario. Una forma sencilla de gestionar esto es simplemente usar botones en lugar de la suscripción a la tabla de datos (actualizar la lista de tablas), pero esta podría ser una forma mucho más clara.
Re: Agregar un elemento de cuadro de visualización especial para la lista de tablas de datos similar a la barra de herramientasUsar la barra de herramientas no es suficiente para mis propósitos.
Escribí un guión que "en su mayor parte" hace lo que quiero, pero escribirlo es innecesariamente complicado (en mi opinión). Lo compartiré aquí en septiembre, cuando vuelva al trabajo.
Re: Agregar elemento de cuadro de visualización especial para la lista de tablas de datos similar a la barra de herramientas: estado cambiado a: Necesita información@jthi cuando dices barra de herramientas, ¿te refieres a la barra de herramientas JMP que se puede mostrar en la parte superior de cada ventana de informe?

Es posible personalizar las barras de herramientas de JMP, que se describen aquí: https://www.jmp.com/support/help/en/16.2/index.shtml#page/jmp/customize-toolbars.shtml# . ¿Cumple con sus necesidades?
Si no es así, ¿podrías compartir una maqueta, un guión o un wireframe de lo que te gustaría poder hacer?