¿Cómo cerrar las tablas correctas con "Al cerrar" cuando se ejecuta el mismo script varias veces?Hola,
Tengo un complemento que genera un gráfico con varias tablas ocultas en segundo plano.
Al cerrar la ventana, uso la función "Al cerrar" para cerrar tablas de datos relacionadas, como esta:
New window() << On close(
Close(TableA, nosave);
Close(TableB, nosave);
) ;
El problema es que si ejecuto el script dos veces, la TablaA de la primera ejecución se sobrescribirá durante la ejecución del segundo script.
Intenté solucionar el problema utilizando una ID única creada en cada inicio de secuencia de comandos, como esta:
NewWindow() << On Close(
For(i = NItems(GetWindowList() << Get Window Title()), i > 0, i--,
win = GetWindow((GetWindowList() << Get Window Title())[i]);
If(Contains(win << get window title, Eval(uniqueID)) != 0,
win << closewindow()
);
)
)
Lamentablemente, persiste el mismo problema: se sobrescribe UniqueID.
¿Hay alguna manera de hacer referencia a las tablas correctamente para que al cerrar la ventana se cierren las tablas correctas?
¡Gracias de antemano por su ayuda!
Automatización y secuencias de comandosRe: ¿Cómo cerrar las tablas correctas con "Al cerrar" cuando se ejecuta el mismo script varias veces?Evalúa las tablas a tu On Close
Eval(EvalExpr(
New Window() << On close(
Try(Close(Expr(TableA), nosave));
Try(Close(Expr(TableB), nosave));
)
));
Re: ¿Cómo cerrar las tablas correctas con "Al cerrar" cuando se ejecuta el mismo script varias veces?Cómo funciona: en su ejemplo original,
New window() << On close(
Close(TableA, nosave);
Close(TableB, nosave);
) ;
TableA y TableB son variables que contienen punteros a las tablas. Si hay varias instancias, las variables apuntan a la última instancia asignada.
En el ejemplo de @jthi ,
Eval(EvalExpr(
New Window() << On close(
Try(Close(Expr(TableA), nosave));
Try(Close(Expr(TableB), nosave));
)
));
su secuencia de comandos está siendo preprocesada por el código Eval(EvalExpr(... Expr(...) ) ) para reemplazar la variable con su valor. Esto hace que el script ya no dependa de la variable actual de la variable porque la llamada a close() ahora usa un valor constante (obtenido de la variable mucho antes).
Cómo leerlo: EvalExpr(...) revisa su argumento para Expr(...) y los evalúa, dejando el resultado evaluado en lugar de Expr(). Cuando finaliza EvalExpr, devuelve una expresión que aún debe evaluarse para ejecutar el método OnClose(...).
Es importante colocar los marcadores Expr(...) en el lugar correcto; la parte que hay que grabar en piedra es sólo el valor de la variable. Si usa Expr(close(tableA,nosave)), por ejemplo, la función close() se ejecutaría demasiado pronto.
Re: ¿Cómo cerrar las tablas correctas con "Al cerrar" cuando se ejecuta el mismo script varias veces?Increíble, ¡muchas gracias!
Re: ¿Cómo cerrar las tablas correctas con "Al cerrar" cuando se ejecuta el mismo script varias veces?Gracias Craige por las explicaciones, ¡muy útiles! He generalizado esto y estoy feliz de que las tablas correctas se cierren al cerrar la ventana.
Todavía tengo un problema que probablemente esté relacionado de alguna manera: en estas ventanas configuro scripts de menú para permitir el desglose, ahora llaman a los argumentos correctos gracias a Eval(EvalExpr(...Expr(...))) código. Sin embargo, defino variables dentro de estos scripts con fines de manipulación de datos y no sé cómo evitar que se sobrescriban: ¿hay alguna manera de declarar estas variables como locales para este script?
Ejemplo:
Eval(
EvalExpr(
NewWindow("Example", Outline = OutlineBox("Add-ins", Tabs = TabBox())) <<
On close(
Try(Close(Expr(TableA), nosave));
Try(Close(Expr(TableB), nosave));
)
)
);
Outline << Set Menu Script(
{"Script1", Eval(EvalExpr(Add_in_table = Expr(TableA) << Subset(Selected Rows))) ;
// some code
TableD = Add_in_table << Summary(...) ;
Eval(
EvalExpr(
NewWindow(Graph builder()) << OnClose(
Try(Close(Expr(Add_in_table), nosave));
Try(Close(Expr(TableD), nosave));
)
)
)}
);Gracias
Re: ¿Cómo cerrar las tablas correctas con "Al cerrar" cuando se ejecuta el mismo script varias veces?Nombres predeterminados aquí (1); al inicio del script o tal vez usando el alcance de la ventana (o cuadro). La guía de secuencias de comandos tiene información sobre espacios de nombres y ámbitos.
Puede pasar a diferentes páginas desde el menú del lado izquierdo

o flechas arriba a la derecha
