CIAO,
Grazie agli altri utenti della bacheca, ho uno script funzionante che include commutatori di colonna e filtri di dati locali. Lo script funziona come previsto e il passo successivo è crearlo come componente aggiuntivo per la base clienti. Credo di aver capito i dettagli del funzionamento del componente aggiuntivo e di poter avviare lo script, che esegue l'importazione dei dati, la pulizia e il riepilogo, creando l'interfaccia. TUTTAVIA, l'interfaccia ora mi dà errori quando provo a eseguire il commutatore di colonna, che funzionava correttamente se avviavo lo script da solo. Se clicco su un nuovo elemento nel commutatore di colonna, ottengo il seguente errore: ho allegato il codice che crea questa vista. Nel mio codice lo collego a una tabella dati di riepilogo e poi lo eseguo dall'interno dello script. Se lo eseguo tramite il componente aggiuntivo (dove ho appena allegato lo script), viene visualizzato un errore. Se poi chiudo la finestra e clicco sul pulsante sulla tabella dati, viene creata la stessa visualizzazione, che funziona come previsto senza errori. Quindi sono un po' confuso su cosa dovrei modificare e quali sono le mie idee?
Andy

cell_sum << new script(
"Main Interface",
cell_sum = Current Data Table();
test = Fit Group(
Oneway(
Y( :Max Discharge Capacity ),
X( :Cathode Recipe.x ),
Quantiles( 1 ),
Means( 1 ),
Box Plots( 1 ),
Mean Diamonds( 0 ),
X Axis Proportional( 0 ),
Points Jittered( 1 ),
Grand Mean( 0 ),
),
Oneway(
Y( :"Cycle Number (>0.8)"n ),
X( :Cathode Recipe.x ),
Quantiles( 1 ),
Means( 1 ),
Box Plots( 1 ),
Mean Diamonds( 0 ),
X Axis Proportional( 0 ),
Points Jittered( 1 ),
Grand Mean( 0 ),
),
Oneway(
Y( :"Discharge Capacity @ 50 Cycles"n ),
X( :Cathode Recipe.x ),
Quantiles( 1 ),
Means( 1 ),
Box Plots( 1 ),
Mean Diamonds( 0 ),
X Axis Proportional( 0 ),
Points Jittered( 1 ),
Grand Mean( 0 ),
),
Oneway(
Y( :"Remain % @ 50 Cycles"n ),
X( :Cathode Recipe.x ),
Quantiles( 1 ),
Means( 1 ),
Box Plots( 1 ),
Mean Diamonds( 0 ),
X Axis Proportional( 0 ),
Points Jittered( 1 ),
Grand Mean( 0 ),
),
<<{Arrange in Rows( 4 )}
);
colpick = test << Column Switcher(
:Cathode Recipe.x,
cell_sum << get column names( Ordinal, Nominal )
);
(test << top parent)[listboxbox( 1 )] << set script(
Try( test << remove local data filter );
mycurrent = ((test << top parent)[listboxbox( 1 )] << get selected)[1];
test << Local Data Filter(
Add Filter( columns( Column( mycurrent ) ), Display( Column( mycurrent ), N Items( 15 ), Find( Set Text( "" ) ) ) )
);
);
test << Local Data Filter(
Add Filter( columns( colpick << get current ), Display( colpick << get current, N Items( 15 ), Find( Set Text( "" ) ) ) )
);
);
cell_sum << run script( "Main Interface" );
CIAO,
Grazie mille per la descrizione completa di ciò che stava accadendo e per la spiegazione degli spazi dei nomi.
Non ho davvero compreso appieno cosa fosse veramente "Nomi predefiniti per qui (1)". Imparato qualcosa di nuovo.
Grazie ancora.
Andy
JSL è diverso da molti altri linguaggi di programmazione in quanto non esegue il controllo automatico dell'ambito come, ad esempio, potrebbe fare Python.In questo caso stai usando la linea
(test << top parent)[listbox( 1 )] << set script(... per aggiungere uno script alla casella di riepilogo.Quando questo script viene eseguito (dall'utente che seleziona un elemento), qualsiasi variabile all'interno di quello script deve essere risolta: è qui che entra in gioco l'ambito.In Python ogni funzione ha un ambito locale e ogni ambito è a conoscenza del proprio ambito genitore e dell'ambito globale (e gli ambiti sono persistenti), in modo tale che una variabile in una funzione possa accedere alle variabili nell'ambito genitore o nell'ambito globale.JSL non lo fa: le funzioni non creano e ricordano gli ambiti e qualsiasi ambito creato non conserva un record dell'ambito che lo ha creato.Per JSL, quando si accede a una variabile senza ambito (o tramite spazio dei nomi:variabile O As Scoped( spazio dei nomi, variabile ) quindi per impostazione predefinita andrà al file Qui o ambito globale e basta.
La ricerca dell'ambito per i nomi senza ambito è qualcosa del genere: guarda lo spazio dei nomi locale se esiste (se ti trovi in un Locale( {}, ... ) funzione o Funzione( {}, {Locale predefinito}, ... ) funzione sono le più comuni), guarda il Qui namespace (se esiste), guarda lo spazio dei nomi globale.A volte guarda i nomi delle colonne (come in a Per ogni riga() funzione).
Nel tuo file non usi alcuna scorciatoia per l'ambito automatico (come I nomi predefiniti sono qui( 1 ) ), quindi ogni variabile ha un ambito globale.Così, quando il Casella di riepilogo viene eseguito lo script che può trovare test perché guarda nell'ambito globale.Tuttavia, gli script addin per impostazione predefinita utilizzano il file I nomi predefiniti sono qui( 1 ) funzione se o no è nel file di script.In questo ambito, i file Qui lo spazio dei nomi viene eliminato al termine dello script e il file Casella di riepilogo lo script non riesce a trovare test in qualsiasi ambito a cui ha accesso (vale a dire, è proprio Qui spazio dei nomi e lo spazio dei nomi globale).Puoi disattivare il I nomi predefiniti sono qui( 1 ) nella versione addin, ma sconsiglio questo ed è meglio controllare esplicitamente l'ambito.
Detto questo, per disabilitare il I nomi predefiniti sono qui( 1 ) nella versione addin, deseleziona la seguente casella:
