Hola,
Gracias a los demás usuarios de la placa, tengo un script en funcionamiento que incluye conmutadores de columnas y filtros de datos locales. El script funciona según lo previsto y el siguiente paso es que quería empaquetarlo como un complemento para la base de clientes. Creo que detallé el funcionamiento del complemento y puedo iniciar el script y pasa por la importación de datos, la limpieza y el resumen y crea la interfaz. SIN EMBARGO, la interfaz ahora me da errores cuando intento ejecutar el conmutador de columnas que funcionó bien si ejecuto el script por sí mismo. Si hago clic en un elemento nuevo en el selector de columnas, aparece el siguiente error. He adjuntado el código que crea esta vista. En mi código, adjunto esto a una tabla de datos de resumen y luego lo ejecuto desde el script. Si ejecuto a través de un complemento (donde acabo de adjuntar el script), da error. Si luego cierro esa ventana y hago clic en el botón en la tabla de datos, construyo la misma pantalla, funciona según lo previsto sin errores. Entonces, estoy un poco confundido en cuanto a lo que debo cambiar y las ideas.
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 se diferencia de muchos otros lenguajes de programación en que no realiza un control de alcance automático como, por ejemplo, podría hacerlo Python.En este caso estás usando la línea
(prueba << padre superior) [cuadro de lista (1)] << establecer secuencia de comandos (... para agregar un script al cuadro de lista.Cuando este script se ejecuta (cuando el usuario selecciona un elemento), entonces se debe resolver cualquier variable dentro de ese script; aquí es donde entra el alcance.En Python, cada función tiene un ámbito local y cada ámbito conoce su ámbito principal y el ámbito global (y los ámbitos son persistentes), de modo que una variable en una función puede acceder a las variables en el ámbito principal o global.JSL no hace esto: las funciones no crean ni recuerdan ámbitos y cualquier ámbito que se crea no mantiene un registro del ámbito que lo creó.Para JSL, cuando se accede a una variable sin ámbito (ya sea por espacio de nombres:variable o Según alcance (espacio de nombres, variable) entonces por defecto irá a la Aquí o alcance global y eso es todo.
La búsqueda de alcance para nombres sin alcance es algo como esto: Mire el espacio de nombres local si existe (si está en un Local( {}, ... ) función o Función( {}, {Local predeterminado}, ... ) función son las más comunes), mire el Aquí espacio de nombres (si existe), mire el espacio de nombres global.A veces mira los nombres de las columnas (como en un Por cada fila() función).
En su archivo, no utiliza ningún método abreviado de alcance automático (como Nombres predeterminados aquí ( 1 ) ), por lo que cada variable tiene un alcance global.Así, cuando el Cuadro de lista el script se ejecuta y puede encontrar prueba porque mira en el ámbito global.Sin embargo, los scripts adicionales utilizan por defecto el Nombres predeterminados aquí ( 1 ) función sea o no está en el archivo de script.Bajo este alcance, los archivos Aquí El espacio de nombres se elimina una vez que finaliza el script y el Cuadro de lista la secuencia de comandos no puede encontrar prueba en cualquier ámbito al que tenga acceso (es decir, su propio Aquí espacio de nombres y el espacio de nombres global).Puedes apagar el Nombres predeterminados aquí ( 1 ) en la versión adicional, pero no recomiendo esto y es mejor controlar explícitamente el alcance.
Dicho esto, para deshabilitar el Nombres predeterminados aquí ( 1 ) en la versión del complemento, desmarque la siguiente casilla:

Hola,
Muchas gracias por su descripción completa de lo que estaba sucediendo y la explicación de los espacios de nombres.
Realmente no entendí completamente de qué se trataba realmente "Nombres predeterminados aquí (1)". Aprendí algo nuevo.
Gracias de nuevo.
Andy