[JMP 17.0.0]
Tengo un archivo de proyecto en el que he estado trabajando que tiene muchas tablas de datos, cada una con un script de ejecución relativamente larga que uso para generar un diario como resultado.Tengo un script separado en otra tabla que llama a cada uno de los scripts de las tablas individuales y luego recopila los diarios individuales en un solo diario para crear un informe final.[Probablemente podría haber hecho este enfoque mucho más limpio, pero no soy un codificador a tiempo completo (ni siquiera parcial).]
Quería implementar algún tipo de barra de progreso/cuadro de mensaje de actualización "X de Y completado" para realizar un seguimiento del progreso de la ejecución después de la ejecución de cada script de tabla individual.
Esta es la historia de cómo llegué a mi solución actual.
TL;DR – Después de pasar un día ideando un enfoque inteligente solo para mí, me encontré con Caption(), que habría sido lo más fácil de hacer.
Pero todavía tengo algunas preguntas generales sobre cómo se pueden manipular las ventanas dentro del entorno del proyecto, así que quédate conmigo si estás interesado.
Hay varias ideas de implementación excelentes que encontré mientras buscaba en Discusiones, que incluyen:
https://community.jmp.com/t5/Uncharted/Progress-Bar/ba-p/21160
https://community.jmp.com/t5/Uncharted/Progress-Bar-with-Cancel-Button/ba-p/433560#U433560
https://community.jmp.com/t5/Discussions/Suggestion-on-how-to-script-a-small-update-progress-window-for/mp/250419
Sin embargo, cuando intento implementar estas soluciones dentro de un entorno de proyecto, la nueva barra de progreso que se crea siempre se crea como una nueva pestaña en el proyecto. Cuando comienza el siguiente script de la serie, la ventana de la barra de progreso queda oculta por las manipulaciones posteriores de la tabla de datos asociadas con el script, por lo que nunca verá el mensaje de progreso actualizado.
Pregunta general n.º 1: No sé cómo crear una ventana “emergente” como cuadro de mensaje sin que sea una ventana modal.Tengo entendido que las ventanas modales pausan el script hasta que el usuario haya interactuado con la ventana, que es lo que no quiero.¿Hay algo que me falta acerca de cómo puedo crear una nueva ventana no modal como una "ventana emergente" en lugar de una nueva pestaña?
[Nuevamente, ahora me doy cuenta de que existe algo llamado Caption().Pero todavía tengo esta pregunta general sobre si todas las ventanas nuevas de un proyecto deben abrirse como pestañas nuevas en lugar de una ventana emergente.]
Pregunta general n.º 2: Entonces pensé... tal vez haya una manera de acoplar esta ventana de barra de progreso recién creada a otra ubicación en el diseño del proyecto para que esté separada del resto de la acción; por ejemplo, Nueva ventana() << Acoplar( “ Bien").Pero no he podido encontrar nada de eso.¿Hay alguna manera de programar la ubicación de acoplamiento de una ventana?
Luego dediqué mucho tiempo a aprender cómo funcionan los diseños de proyectos y cómo se pueden escribir guiones.Aprendí muchísimo de ese ejercicio.Al final, se me ocurrió un script que cambia temporalmente el diseño del proyecto para reemplazar la ventana "Archivos recientes" con una ventana personalizada de "Actualización de progreso" que hace lo que estoy buscando y luego vuelve a la ventana "Archivos recientes". " ventana.Como puedes imaginar, es un guión bastante torpe, pero hace el trabajo.Intenté generalizarlo lo mejor que pude y lo adjunto aquí por si alguien está interesado en ver cómo funciona.
En algún momento del día me di cuenta de que tal vez hay una manera de hacer que esto funcione forzando que las nuevas ventanas creadas por los scripts individuales sean invisibles, de modo que la ventana de la barra de progreso permanezca en la parte superior.Pero habría sido mejor si lo hubiera pensado desde el principio.En este punto, tendría que realizar un par de cientos de ediciones de script para lograr esta opción (si es posible).
Después de todo eso, vine a trabajar esta mañana para contarles toda esta historia y casi de inmediato encontré Caption(), que hace básicamente todo lo que quería hacer en dos líneas de código concisas.Ojalá me hubiera dado cuenta de eso antes.Supongo que si realmente quisieras tener una “barra” de progreso real y no solo texto, tal vez Caption() no funcionara.Pero realmente no necesitaba que esto fuera tan sofisticado.
Gracias por escuchar.
joel