Aggiungere un elemento speciale della casella di visualizzazione per l'elenco delle tabelle dati simile alla barra degli strumentiAttualmente è piuttosto complicato scrivere una funzionalità simile a quella già presente nella barra degli strumenti. Aggiungi un nuovo elemento che potrebbe essere utilizzato per questo scopo, dovrebbe anche aggiornarsi automaticamente. Questo è un tipo di elemento abbastanza comune che aggiungo alle mie interfacce utente per consentire all'utente di modificare la tabella dati corrente, portarla in primo piano o semplicemente vedere rapidamente qual è la tabella dati corrente.
Automazione e scriptingRe: Aggiungere un elemento speciale della casella di visualizzazione per l'elenco della tabella dati simile alla barra degli strumentiCon "funzionalità simili a quelle già presenti nella barra degli strumenti" intendo una casella combinata il cui elenco verrebbe aggiornato quando la tabella dati viene aperta, rinominata o chiusa.
La funzionalità sarebbe leggermente diversa da quella della barra degli strumenti perché non dovrebbe cambiare tabella quando cambia la tabella dati corrente, ma dovrebbe attivarsi in modo simile a come fa << Imposta funzione per la casella combinata.
Caso d'uso:
- Ho uno strumento che può eseguire analisi complicate su diversi tipi di tabelle di dati, ma l'avvio di tale strumento richiede molto tempo
- Nel caso "normale" dovresti semplicemente eseguire lo strumento su Current Data Table(). Ma se vuoi eseguirlo su più tabelle, sarebbe utile avere un cambio tabella facile da usare a causa del lungo avvio.
Ad esempio , il componente aggiuntivo Data Table Tools è un componente aggiuntivo dotato di una casella di riepilogo e di un pulsante di aggiornamento dell'elenco della tabella che potrebbero essere sostituiti con questo elemento (se si adattasse all'interfaccia utente).
Re: Aggiungere un elemento speciale della casella di visualizzazione per l'elenco della tabella dati simile alla barra degli strumentiQuello script mi dà un'idea migliore di cosa vuoi, ma ciò che non è ancora chiaro è cosa intendi con " funzionalità simile a quella già trovata nella barra degli strumenti". Vuoi una nuova casella di visualizzazione che mostri tutte le tabelle aperte, che può essere utilizzata in qualsiasi finestra di report con script? La selezione delle colonne nella tabella è importante? Sarebbe utile se potessi descrivere un esempio di dove potrebbe essere utilizzata.
Re: Aggiungere un elemento speciale della casella di visualizzazione per l'elenco della tabella dati simile alla barra degli strumentiIl codice è un po' confuso perché l'ho semplicemente "preso in prestito" da uno dei miei strumenti (molto probabilmente dovrei scriverlo in una classe). Ma fondamentalmente:
- Ho una casella combinata con l'elenco iniziale della tabella dati e la tabella dati corrente impostata come selezione corrente
- Ho impostato la funzione su Combo Box che aggiornerà Filter Col Selector in base alla modifica del valore (modifica tabella dati). Non modifica la Current Data Table o cambia quando la Current Data Table cambia.
- Ho Filter Col Selector che dovrebbe usare la stessa tabella che si può vedere nella casella combinata
- Utilizzo subscribe to data table list per tenere traccia delle nuove tabelle, delle rinominazioni e della chiusura delle tabelle dati. E le funzioni cercano di gestire tutte queste modifiche e il modo in cui influenzano la casella combinata
- Quando la finestra è chiusa rimuovo la mia iscrizione all'elenco delle tabelle dati
Esempio di codice:
Vedi altro...
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"));
)));
Ciò che vorrei avere è un elemento più semplice per gestire questa stessa operazione. Potrei scriverlo come una classe io stesso, ma penso che potrebbe essere utile anche per altri JSL Scripter che creano interfacce utente. Un modo semplice per gestirlo è usare semplicemente i pulsanti invece della sottoscrizione alla tabella dati (aggiorna elenco tabella), ma potrebbe essere un modo molto più pulito.
Re: Aggiungere un elemento speciale della casella di visualizzazione per l'elenco della tabella dati simile alla barra degli strumentiPer i miei scopi, usare la barra degli strumenti non è sufficiente.
Ho scritto una sceneggiatura che "per lo più" fa quello che voglio, ma scriverla è inutilmente complicato (secondo me). La condividerò qui a settembre, quando tornerò al lavoro.
Re: Aggiungere un elemento speciale della casella di visualizzazione per l'elenco della tabella dati simile alla barra degli strumenti - Stato modificato in: Necessita di informazioni@jthi quando parli di barra degli strumenti intendi la barra degli strumenti JMP che può essere visualizzata nella parte superiore di ogni finestra del report?

È possibile personalizzare le barre degli strumenti JMP, come descritto qui: https://www.jmp.com/support/help/en/16.2/index.shtml#page/jmp/customize-toolbars.shtml# . Soddisfa le tue esigenze?
In caso contrario, puoi condividere un mock-up, uno script o un wireframe di ciò che vorresti essere in grado di fare?