Listenfeld mit allen offenen TabellenIch versuche, eine Listbox zu erstellen, die alle geöffneten Datentabellen auflistet und automatisch mit neu geöffneter / neu geschlossener Tabelle aktualisiert wird. Ich habe mit dem folgenden Skript begonnen, aber aus irgendeinem Grund funktioniert die onClose-Funktion nicht.
Schätze die Hilfe 
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);
)
);
SkriptingBetreff: Listenfeld mit allen offenen TabellenMit der folgenden JSL habe ich Folgendes entdeckt.
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 );
)
);
- Das erstellte Listenfeld fügt ohne Fehler neue Datentabellen hinzu.
- Die Funktion f1 wird für jede Addition einmal ausgeführt
- Wenn Sie eine Datentabelle schließen, wird sie nicht aus dem Listenfeld entfernt.
- Wenn Sie eine zweite Datentabelle schließen, wird die vorher geschlossene Datentabelle aus dem Listenfeld entfernt.
- Wenn Sie das Listenfeld schließen und die JSL ein zweites Mal ausführen und eine Datentabelle schließen, wird eine f2-Funktion zweimal ausgeführt.Die f2-Funktion aus der ersten Ausführung der JSL wird ausgeführt, gefolgt von der Ausführung der zweiten Instanz der f2-Funktion.Dies kann durch Ändern der Show()-Anweisung gezeigt werden.Wenn die Show-Anweisung geändert wurde von
Show( "Close" );
zuShow( "Close 2" );
beim Schließen einer Datentabelle werden beide Versionen der Show()-Anweisung angezeigt,
- Nachfolgende Ausführungen der JSL fügen zusätzliche Kopien der f2-Funktion hinzu, wobei jede Kopie für jedes Schließen der Datentabelle ausgeführt wird.
- Clear Globals und Clear Symbols beseitigt nicht die früheren Versionen der f2-Funktion.
Dies ist eindeutig ein JMP-Fehler und muss an den JMP-Support gesendet werden.
Ich habe ihnen den Fehler übermittelt.
Betreff: Listenfeld mit allen offenen TabellenVielen Dank @txnelson !! Das ist genau der Bug, auf den ich gestoßen bin. Ich denke, dass ich in der Zwischenzeit einen Workaround dafür finden muss.
Betreff: Listenfeld mit allen offenen TabellenSie sollten nur in der Lage sein, neue Werte zu lb hinzuzufügen und sie entfernen nur den geschlossenen Wert mit Index (mithilfe von Contains(), um den Index zu erhalten). Außerdem wurden den Funktionen lokale Variablen hinzugefügt.
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 ());
)
);Betreff: Listenfeld mit allen offenen TischenDanke @jthi ! Das funktioniert!
Wenn es Ihnen nichts ausmacht, könnten Sie auch zeigen, wie Sie die Klausel "OnRename" einrichten würden?