¿Retrasar la ejecución del script hasta que se proporcione la entrada del usuario?<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />la primera parte de mi script solicita al usuario que seleccione las variables 'Y' y 'Por'.Luego genera una tabla de datos (llamémosla "dt2").
la segunda mitad del código se basa en esa tabla de datos (dt2) que se generó después de que el usuario realiza las selecciones y hace clic en Aceptar.
El problema que tengo es que el código continúa ejecutándose una vez que aparece la ventana y está esperando la entrada del usuario... por lo que la segunda mitad del código no tiene una tabla de datos (dt2) para usar, por lo que no genera nada. .
Vi que puedo usar wait(), pero esto depende de un valor de tiempo (en segundos), y me gustaría programar esto para que no continúe hasta que la entrada del usuario se proporcione en la primera mitad del código (generando así la información necesaria). tabla de datos para que se ejecute la segunda mitad del código).
¡¡Gracias de antemano por cualquier ayuda/consejo!!
Re: ¿retrasar la ejecución del script hasta que se proporcione la entrada del usuario?Hay un par de formas de controlar el comportamiento de las ventanas no modales:
1. Coloque las tareas que desea que realice el botón Aceptar en una expresión anterior en el código.Luego, cuando el usuario haga clic en Aceptar, simplemente proporcione la expresión.
ok_expr = exprés (
entrada del usuario = usuario_teb << recibir texto () ;
imprimir ( "Usuario ingresó" || entrada del usuario ) ;
miwin << Cerrar ventana ;
) ;
entrada del usuario = "" ;
miwin = nueva ventana ( "Obtener información del usuario" ,
cuadro de lista h (
caja de texto ( "Ingrese un texto: " ) ,
usuario_teb = cuadro de edición de texto () ,
) ,
caja de botones ( "DE ACUERDO" , ok_expr ) ,
caja de botones ( "Cancelar" , miwin << Cerrar ventana ; ) ,
) ;
2. Coloque las tareas OK en un archivo JSL separado y use la instrucción include() para ejecutar los comandos deseados:
// ok_commands.jsl
entrada del usuario = usuario_teb << recibir texto () ;
imprimir ( "Usuario ingresó" || entrada del usuario ) ;
miwin << Cerrar ventana ;
// Aquí están los comandos del cuadro de diálogo, i un archivo separado
entrada del usuario = "" ;
miwin = nueva ventana ( "Obtener información del usuario" ,
cuadro de lista h (
caja de texto ( "Ingrese un texto: " ) ,
usuario_teb = cuadro de edición de texto () ,
) ,
caja de botones ( "DE ACUERDO" , incluir ( "ok_commands.jsl" );) ,
caja de botones ( "Cancelar" , miwin << Cerrar ventana ; ) ,
) ;
Re: ¿retrasar la ejecución del script hasta que se proporcione la entrada del usuario?Si los datos que se van a pegar provienen de JMP o pueden abrirse como una tabla mediante JMP, la inserción en la tabla de datos también se puede programar.
Pero para su escenario, si la interacción manual es inevitable debido a que se debe tomar alguna decisión subjetiva, usaría una ventana no modal con un botón de "inicio" y un botón de "finalización" (o similar) que compite con las acciones en 1 y 2, respectivamente.
Re: ¿retrasar la ejecución del script hasta que se proporcione la entrada del usuario?Gracias por su respuesta.
De hecho, esto fue muy útil para otro problema que tengo y tengo la intención de solucionarlo.
Pruebe su solución para obtener datos del usuario para resolverlo.
En este caso particular, lo más probable es que el usuario tenga que insertar MUCHOS
datos y la idea es que los pegue en el DT.
Actualmente mi solución es ejecutar los scripts en 2 partes:
1. Todas las acciones necesarias antes de que se le solicite al usuario que inserte datos
(los datos se pegan en el DT)
2. Todas las acciones necesarias después de insertar los datos.
Pero ambos entendemos que esta no es forma de trabajar, ni puedo pedirle al usuario que
insertar todos los datos manualmente, lleva demasiado tiempo y es ineficiente.
¿Tienes alguna otra idea?
Gracias,
misha
Re: ¿retrasar la ejecución del script hasta que se proporcione la entrada del usuario?No creo que puedas pasar por alto un diálogo modal. Pero puede permitir que el usuario ingrese los límites en la ventana modal que se transfieren a la tabla de datos al hacer clic en Aceptar.
He aquí un ejemplo:
dt = Nueva mesa ( "prueba" , Nueva columna ( "datos" , numérico ) ) ;
Nueva ventana ( "Pon límites" ,
<< modal ,
Caja de mesa ( Caja de columna de cadena ( "" , { "Promedio" , "LCL" , "UCL" } ) , ncb = Cuadro de edición de columna de número ( "Límites" , [ . , . , . ] ) ) ,
Caja de botones ( "DE ACUERDO" ,
l = ncb << conseguir ;
evaluar (
Evaluación Expr (
Columna ( dt , "datos" ) << establecer propiedad ( "Límites de control" , { barra x ( promedio ( Expr. ( l [ 1 ] ) ) , LCL ( Expr. ( l [ 2 ] ) ) , UCL ( Expr. ( l [ 3 ] )) )})))
)
) ;
//Comprueba si funcionó
Espectáculo ( l ) ;
dt : datos << Obtener propiedad ( "Límites de control" ) ;
Re: ¿retrasar la ejecución del script hasta que se proporcione la entrada del usuario?Estoy haciendo algo similar y sufro el mismo problema.
La ventana modal también fue mi solución inicial. Lamentablemente no funciona.
Cuando se abre la nueva ventana impide el acceso a las tablas de datos (permanece en la parte superior):

¿Hay alguna manera de omitir el valor predeterminado superior de la ventana modal?
¿O una mejor idea para la implementación?
Gracias de antemano.
Re: ¿retrasar la ejecución del script hasta que se proporcione la entrada del usuario?Si está utilizando una nueva ventana para recopilar la entrada del usuario, conviértala en un cuadro de diálogo modal con << modales
miwin = nueva ventana ( "Cuadro de diálogo modal de muestra" , << modal ,
caja de texto ( "Este es un cuadro de diálogo modal" ) ,
caja de botones ( "DE ACUERDO" , cual_boton = "DE ACUERDO" ) ,
caja de botones ( "Cancelar" , cual_boton = "Cancelar" ) ,
) ;
imprimir ( "El usuario hizo clic" || cual_boton ) ;