Ciao,
Grazie agli altri utenti della scheda, ho uno script funzionante che include commutatori di colonna e filtri di dati locali. Lo script funziona come previsto e il passaggio successivo è che volevo creare un pacchetto come componente aggiuntivo per la base di clienti. Penso di avere i dettagli del funzionamento del componente aggiuntivo e di poter avviare lo script che passa attraverso l'importazione dei dati, la pulizia e il riepilogo e crea l'interfaccia. TUTTAVIA, l'interfaccia ora mi sta dando errori quando provo a eseguire il commutatore di colonna che ha funzionato correttamente se lancio lo script da solo. Se faccio clic su un nuovo elemento nel selettore di colonna, ottengo il seguente errore Ho allegato il codice che crea questa vista. Nel mio codice lo allego a una tabella di dati di riepilogo e quindi lo eseguo dall'interno dello script. Se eseguo tramite il componente aggiuntivo (dove ho appena allegato lo script), viene visualizzato un errore. Se poi chiudo quella finestra e faccio clic sul pulsante sulla tabella dei dati, costruisco lo stesso display, funziona come previsto senza errori. Quindi sono un po' confuso su cosa dovrei cambiare e intuizioni?
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" );
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)[listboxbox( 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 padre e dell'ambito globale (e gli ambiti sono persistenti), in modo tale che una variabile in una funzione possa accedere alle variabili nell'ambito padre o nell'ambito globale.JSL non esegue questa operazione: le funzioni non creano e ricordano gli ambiti e qualsiasi ambito creato non mantiene 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à a Qui o portata globale e basta.
La ricerca nell'ambito dei 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}, ... ) sono le più comuni), guarda il Qui namespace (se esiste), guarda lo spazio dei nomi globale.A volte esamina i nomi delle colonne (come in a Per ogni riga() funzione).
Nel tuo file non usi scorciatoie per l'ambito automatico (come Nomi predefiniti qui( 1 ) ), quindi ogni variabile ha un ambito globale.Così, quando il Casella di riepilogo esegue lo script che può trovare test perché appare nell'ambito globale.Tuttavia, gli script di aggiunta per impostazione predefinita utilizzano Nomi predefiniti qui( 1 ) funzione se o no è nel file di script.In questo ambito, i file Qui namespace 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 namespace e lo spazio dei nomi globale).Puoi disattivare il Nomi predefiniti qui( 1 ) nella versione del componente aggiuntivo, ma lo sconsiglio ed è meglio controllare esplicitamente l'ambito.
Detto questo, per disabilitare il Nomi predefiniti qui( 1 ) nella versione del componente aggiuntivo, deseleziona la seguente casella:

Ciao,
Grazie mille per la descrizione completa di ciò che stava accadendo e la spiegazione degli spazi dei nomi.
Non ho davvero compreso appieno di cosa trattasse davvero "Nomi predefiniti qui (1)". Ho imparato qualcosa di nuovo.
Grazie ancora.
Andy