Hola,
Estoy trabajando en la creación de una aplicación JMP para recopilar datos en una tabla y visualizar esos datos de una manera fácil de usar. Como parte de esa aplicación, tengo un módulo MainWin que es donde el usuario pasará la mayor parte de su tiempo. Dentro de ese módulo MainWin, hay una función UpdateGUI que se utiliza para actualizar la interfaz de usuario (en su mayoría cuadros de tabla resumidos) con datos de la tabla de datos incrustados.
Cuando un usuario desea agregar datos, lanza un segundo módulo para la entrada de datos. Una vez que se ingresan los datos y presionan "Aceptar", los datos se agregan a la tabla principal. Me gustaría cerrar este módulo para realizar una llamada a la función UpdateGUI en el módulo MainWin. No recuerdo cómo lo escribí, pero esto solía funcionar cuando el segundo módulo era una ventana modal. Ahora cambié el segundo módulo para que sea una ventana de diálogo y la llamada a UpdateGUI ya no funciona.
Para solucionar este problema, probé algunas cosas.
El primer error fue que la función UpdateGUI era desconocida para el segundo módulo (parece obvio en retrospectiva), pero cuando hice que el nombre estuviera disponible globalmente, llamarlo desde el segundo módulo significaba que todas las referencias dentro de la función al módulo MainWin eran también roto ..
Lo segundo que intenté fue agregar un bucle while al MainWin que espera a que una variable se establezca en 1 y luego llamar a una actualización. Esto funcionó técnicamente, pero causó algunas ralentizaciones significativas ... tal vez porque usé una función Wait ().
¿Cómo recomendaría manejar este tipo de llamada de función de módulo cruzado?
¡Gracias!</CODE></P></LINGO-BODY><LINGO-SUB id="lingo-sub-313041" slang="en-US">Re: Módulos y espacios de nombres de la aplicación JMP</LINGO-SUB><LINGO-BODY id="lingo-body-313041" slang="en-US"><P>Hola<A href="https://community.jmp.com/t5/user/viewprofilepage/user-id/20438" target="_blank"> @mringqui</A> ,</P>
<P>Creo que tengo una solución para lo que intentas hacer.Básicamente, creo que desea establecer el alcance de una referencia al espacio de nombres de la instancia de MainWin hasta el espacio de nombres de la aplicación.Para hacer eso, agregué la siguiente línea en el script MainWin:</P>
<PRE><CODE class=" language-jsl">Application:MainInstance = this module instance;
Creé una aplicación trivial para ilustrar.MainWin solo muestra un número.UpdateWin le permite ingresar un nuevo número que actualiza la pantalla en MainWin cuando presiona Cerrar.Puede ver cómo definí las cosas en el script del espacio de nombres de la aplicación para que la expresión Actualizar GUI esté disponible en todos los módulos.
display_num = 0;
Update GUI = Expr(
Show(MainInstance:Text_Disp << Get Text);
MainInstance:Text_Disp << Set Text(char(display_num));
);
El enfoque debe generalizarse a lo que desea hacer.
@cwillden ¡Gracias por examinar esto!
Agregar la referencia en el espacio de nombres de la aplicación hizo que la función fuera accesible para UpdateWin de una manera mucho más limpia que antes, ¡gracias! Definitivamente aprovecharé esto en situaciones futuras.
Desafortunadamente, llamar a la función desde UpdateWin aún cambia el ámbito de todas las variables de la función a UpdateWin. Creo que lo que he aprendido es que necesito limpiar mis espacios de nombres. Probablemente necesite un Nombres predeterminados aquí (1); arrojado allí.
Pude lograr lo que quería enviando un << Haga clic en; al botón Actualizar que tengo en MainWin. Esto parece garantizar que todo se mantenga dentro del alcance correcto.
Gracias de nuevo por la ayuda, me has puesto en la dirección correcta.