Casella di riepilogo che mostra tutte le tabelle aperteSto cercando di creare una casella di riepilogo che elenca tutte le tabelle di dati aperte e viene aggiornata automaticamente con la tabella appena aperta/appena chiusa. Ho iniziato con lo script seguente ma per qualche motivo la funzione onClose non funziona.
Apprezzo l'aiuto 
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);
)
);
Modellazione statistica avanzataAutomazione e scriptingRicerche sui consumatori e sul mercatoAccesso ai datiCombinazione e pulizia dei datiProgettazione di esperimentiPersonalizzazione di massaRi: Casella di riepilogo che mostra tutte le tabelle aperteDopo aver testato un po' di più l'elenco delle tabelle dati, lo eviterei se possibile. Non sembra funzionare affatto bene, gli eventi non si attivano, la documentazione è piuttosto scadente su come dovrebbe essere utilizzato e così via. Sto utilizzando JMP16.1.0 Pro su Windows 10.
Ho un'applicazione in cui mi piacerebbe avere qualcosa di simile, ma penso che aggiungerò semplicemente Aggiorna elenco dati o qualcosa di simile.
Re: Casella di riepilogo che mostra tutte le tabelle aperteGrazie @jthi ! Che funzioni!
Se non ti dispiace, potresti anche mostrare come imposteresti anche la clausola "OnRename"?
Ri: Casella di riepilogo che mostra tutte le tabelle aperteDovresti essere in grado di aggiungere nuovi valori a lb e rimuovere solo quello chiuso con indice (usando contiene() per ottenere indice) e aggiungere anche variabili locali alle funzioni.
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 ());
)
);Ri: Casella di riepilogo che mostra tutte le tabelle aperteGrazie @txnelson !! Questo è esattamente il bug che ho riscontrato. Immagino che nel frattempo dovrò trovare una soluzione alternativa a questo.
Ri: Casella di riepilogo che mostra tutte le tabelle aperteUtilizzando il JSL riportato di seguito, ecco cosa ho scoperto.
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 );
)
);
- La casella di riepilogo creata aggiungerà nuove tabelle di dati senza errori.
- La funzione f1 viene eseguita una volta per ogni addizione
- Se chiudi una tabella dati, non verrà rimossa dalla casella di riepilogo.
- Se chiudi una seconda tabella dati, la tabella dati chiusa precedente verrà rimossa dalla casella di riepilogo.
- Se chiudi la casella di riepilogo ed esegui JSL per la seconda volta e chiudi una tabella di dati, una funzione f2 verrà eseguita due volte.Verrà eseguita la funzione f2 della prima esecuzione del JSL, seguita dall'esecuzione della seconda istanza della funzione f2.Questo può essere mostrato modificando l'istruzione Show().Se l'istruzione Show è stata modificata da
Show( "Close" );
AShow( "Close 2" );
alla chiusura di una tabella dati, verranno visualizzate entrambe le versioni dell'istruzione Show(),
- Le successive esecuzioni di JSL aggiungono ulteriori copie della funzione f2, ciascuna copia viene eseguita per ogni chiusura di tabella dati.
- Cancella globali e Cancella simboli non elimina le versioni precedenti della funzione f2.
Si tratta chiaramente di un bug di JMP e deve essere segnalato allo staff di supporto JMP.
Ho segnalato loro il bug.
Re: Casella di elenco che mostra tutte le tabelle aperteSto rilanciando questo argomento con alcune nuove scoperte, forse aiuterà qualcuno. Stavo cercando di fare qualcosa di simile a @Djtjhin e ho incontrato tutti gli stessi problemi descritti qui, che ho risolto in gran parte grazie alla discussione qui.
Ciò che posso aggiungere è la spiegazione dello strano comportamento descritto da @txnelson . Il problema è che se ti iscrivi senza dichiarare esplicitamente il nome dell'abbonamento come di seguito:
asub = Subscribe to data table list( , OnOpen( Show("opening...") ) )ogni volta che si esegue lo script viene creata una nuova sottoscrizione con un nuovo nome generico ("_DTListSubscriber123"), incrementando il contatore alla fine.
Il trucco è quello di nominare esplicitamente l'abbonato in modo da sovrascrivere lo stesso nome ogni volta che si esegue lo script, ad esempio:
asub = Subscribe to data table list( "MyDTLSub1", OnOpen( Show("opening...") ) )o per annullare l'iscrizione alla fine, ad esempio nel < <>
Unsubscribe to data table list( asub, "ALL" )
In altre notizie, @Djtjhin , per rinominare funziona in modo abbastanza semplice, sembra che l'evento venga attivato DOPO la rinominazione, quindi Get Data Table List() ti fornisce il/i nuovo/i nome/i. Ma mi strappavo i capelli per un altro motivo, prima di farlo funzionare, a causa della mancanza di documentazione . A differenza di OnOpen e OnClose, la funzione OnRename necessita di 2 argomenti (nuovo e vecchio nome/tabella), altrimenti otterrai degli errori. E sebbene in questo particolare esempio di listbox non ne hai effettivamente bisogno, se ne hai bisogno, devi anche tenere a mente che sono di un tipo di variabile diverso, una è una tabella, l'altra una stringa (vedi sotto).
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.