Fügen Sie ein spezielles Anzeigefeldelement für die Datentabellenliste hinzu, das der Symbolleiste ähneltDerzeit ist es ziemlich mühsam, ähnliche Funktionen zu skripten, wie sie bereits in der Symbolleiste zu finden sind. Fügen Sie ein neues Element hinzu, das für diesen Zweck verwendet werden könnte. Es sollte sich auch automatisch aktualisieren. Dies ist ein recht häufiger Elementtyp, den ich zu meinen Benutzeroberflächen hinzufüge, damit Benutzer die aktuelle Datentabelle ändern, in den Vordergrund bringen oder einfach schnell sehen können, was die aktuelle Datentabelle ist.
Automatisierung und SkriptingBetreff: Spezielles Anzeigefeldelement für Datentabellenliste ähnlich der Symbolleiste hinzufügenMit „ähnlicher Funktionalität, wie sie bereits in der Symbolleiste vorhanden ist“ meine ich eine Kombinationsbox, deren Liste aktualisiert wird, wenn die Datentabelle geöffnet, umbenannt oder geschlossen wird.
Die Funktionalität wäre etwas anders als bei der Symbolleiste, da sie die Tabelle nicht ändern sollte, wenn sich die aktuelle Datentabelle ändert, sondern auf ähnliche Weise ausgelöst werden sollte wie die << Set-Funktion für das Kombinationsfeld.
Anwendungsfall:
- Ich habe ein Tool, das komplizierte Analysen für verschiedene Arten von Datentabellen durchführen kann, aber der Start dieses Tools dauert ziemlich lange
- Im „normalen“ Fall würden Sie das Tool einfach auf Current Data Table() ausführen. Wenn Sie es jedoch auf mehreren Tabellen ausführen möchten, wäre es aufgrund des langen Startvorgangs von Vorteil, einen benutzerfreundlichen Tabellenwechsler zu haben.
Beispielsweise ist das Data Table Tools-Add-In ein Add-In, das über eine Listbox und eine Schaltfläche zum Aktualisieren der Tabellenliste verfügt, die durch dieses Element ersetzt werden könnten (wenn es in die Benutzeroberfläche passen würde).
Betreff: Spezielles Anzeigefeldelement für Datentabellenliste ähnlich der Symbolleiste hinzufügenDieses Skript gibt mir eine bessere Vorstellung davon, was Sie wollen, aber es ist immer noch unklar, was Sie mit „ ähnliche Funktionalität, wie sie bereits in der Symbolleiste vorhanden ist“ meinen. Möchten Sie ein neues Anzeigefeld, das alle offenen Tabellen anzeigt und in jedem Skript-Berichtsfenster verwendet werden kann? Ist die Auswahl der Spalten in der Tabelle wichtig? Es wäre hilfreich, wenn Sie ein Beispiel beschreiben könnten, wo dies verwendet werden könnte.
Betreff: Spezielles Anzeigefeldelement für Datentabellenliste ähnlich der Symbolleiste hinzufügenDer Code ist etwas chaotisch, da ich ihn einfach von einem meiner Tools „ausgeliehen“ habe (wahrscheinlich sollte ich ihn in eine Klasse schreiben). Aber im Grunde:
- Ich habe eine Kombinationsbox mit der anfänglichen Datentabellenliste und der aktuellen Datentabelle als aktuelle Auswahl festgelegt.
- Ich habe die Funktion auf die Combobox eingestellt, die den Filter Col Selector basierend auf einer Wertänderung (Änderung der Datentabelle) aktualisiert. Die aktuelle Datentabelle wird dadurch nicht geändert und auch nicht, wenn sich die aktuelle Datentabelle ändert.
- Ich habe einen Filter Col Selector, der dieselbe Tabelle verwenden soll, die in der Combo Box zu sehen ist
- Ich verwende „subscribe to data table list“, um neue Tabellen, Umbenennungen und das Schließen von Datentabellen zu verfolgen. Und die Funktionen versuchen, all diese Änderungen und ihre Auswirkungen auf das Kombinationsfeld zu verwalten.
- Wenn das Fenster geschlossen ist, entferne ich mein Abonnement für die Datentabellenliste
Codebeispiel:
Mehr anzeigen...
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"));
)));
Was ich gerne hätte, ist ein einfacheres Element, um diesen Vorgang zu verwalten. Ich könnte es selbst als Klasse schreiben, aber ich denke, das könnte auch für andere JSL-Skripter nützlich sein, die Benutzeroberflächen erstellen. Eine einfache Möglichkeit, dies zu verwalten, besteht darin, einfach Schaltflächen anstelle eines Datentabellenabonnements zu verwenden (Tabellenliste aktualisieren), aber das könnte eine viel sauberere Möglichkeit sein.
Betreff: Spezielles Anzeigefeldelement für Datentabellenliste ähnlich der Symbolleiste hinzufügenFür meine Zwecke reicht die Verwendung der Symbolleiste nicht aus.
Ich habe ein Skript geschrieben, das „größtenteils“ das tut, was ich will, aber es zu schreiben ist (meiner Meinung nach) unnötig kompliziert. Ich werde es hier im September veröffentlichen, wenn ich wieder an die Arbeit gehe.
Betreff: Spezielles Anzeigefeldelement für Datentabellenliste ähnlich der Symbolleiste hinzufügen - Status geändert in: Benötigt Informationen@jthi: Wenn Sie Symbolleiste sagen, meinen Sie dann die JMP-Symbolleiste, die oben in jedem Berichtsfenster angezeigt werden kann?

Es ist möglich, die JMP-Symbolleisten anzupassen. Eine Beschreibung finden Sie hier: https://www.jmp.com/support/help/en/16.2/index.shtml#page/jmp/customize-toolbars.shtml# . Erfüllt das Ihre Anforderungen?
Wenn nicht, können Sie ein Modell, ein Skript oder einen Drahtmodell dessen freigeben, was Sie tun möchten?