¿Cómo crear una ventana modal de entrada de usuario de dos columnas donde la segunda columna se completa en función de una entrada única en la primera columna?Me gustaría crear una ventana modal de entrada de usuario de dos columnas donde la entrada del usuario va a la primera columna (cuadro de entrada único) para una "ID de parte principal", en función de qué entradas adyacentes de la ventana de la segunda columna (ID de parte secundaria) se completan.
- Las entradas de la segunda columna provienen de una consulta de base de datos (para la cual ya tengo un script). Un "ID de pieza principal" puede tener uno o más "ID de pieza secundaria"
- Este script de consulta debe ejecutarse cuando se marca una casilla de verificación adyacente al cuadro de entrada de ID de la pieza principal después de la entrada.
- Una vez que se seleccionan uno o más ID de parte secundaria (según sea el caso) en la segunda columna (nuevamente usando la casilla de verificación), presione el botón Aceptar en la parte inferior de la ventana modal para que las entradas seleccionadas en la segunda columna estén disponibles. (como una lista) para utilizar un script de seguimiento.
- Una opción de seleccionar todo para las entradas de la segunda columna sería una ventaja adicional.
Le agradecería si pudiera obtener algunas ideas sobre cómo proceder con esto en JSL.
Automatización y secuencias de comandosventanasRe: ¿Cómo crear una ventana modal de entrada de usuario de dos columnas donde la segunda columna se completa basándose en una entrada única en la primera columna?¿Podrías crear algún tipo de maqueta de la interfaz de usuario y proporcionar algunos datos de ejemplo?
Re: ¿Cómo crear una ventana modal de entrada de usuario de dos columnas donde la segunda columna se completa basándose en una entrada única en la primera columna?@jthi Por favor ver adjunto. El usuario ingresa, por ejemplo, 9098 y marca la casilla (marca roja, no es necesario que sea de color rojo, por cierto) en ID de pieza principal. Al marcar esta casilla se ejecuta un script en segundo plano que genera una tabla de datos de una sola columna o una lista (tengo este script, así que puedo hacer cualquiera de las dos cosas según sea necesario). Los valores de fila de esta tabla de una sola columna o valores de lista completan las filas en el lado derecho de la ventana de entrada del usuario, en ID de pieza secundaria. Luego, el usuario selecciona los ID de las piezas del gráfico según lo desee usando la casilla de verificación (sería fantástico tener las opciones "seleccionar todo" y "desmarcar todo").
Al presionar Recuperar, el ID de la pieza principal y el ID de la pieza secundaria estarán disponibles como dos listas separadas para que las utilice un script de seguimiento.
Espero haber podido explicarme con suficiente claridad.

Re: ¿Cómo crear una ventana modal de entrada de usuario de dos columnas donde la segunda columna se completa basándose en una entrada única en la primera columna?De acuerdo. Algunas sugerencias: reemplazaría las casillas de verificación con botones. Para el ID de pieza principal, podría ser algo así como "Obtener ID de pieza secundaria" y para los botones de ID de pieza secundaria para "Seleccionar todo" y "Anular selección de todo". El usuario puede realizar sus selecciones en el cuadro de lista.
Esto podría darte algunas ideas de lo que podrías hacer.
Names Default To Here(1);
aa_parents = ["123" => {"111", "222", "333"}, "345" => {"555", "777", "999"}];
aa_parents << Set Default Value({});
get_childids = function({this}, {Default Local},
new_childids = aa_parents[(this << prev sib) << get text];
lb_child << Set items(new_childids);
);
nw = New Window("", /*<< modal*/
H List Box(
Panel Box("Parent ID",
Lineup Box(N Col(2),
Text Edit Box("", << Set Width(150)),
Button Box("Get Child Ids", << set function(function({this},
get_childids(this);
)))
)
),
Panel Box("Child ID",
H List Box(
lb_child = List Box({}),
Lineup Box(N Col(1),
Button Box("Select All",
For Each({item, idx}, lb_child << get items,
lb_child << Set Selected(idx);
);
wait(0);
),
Button Box("Unselect All",
lb_child << Clear selection;
),
)
)
),
Panel Box("Actions",
Lineup Box(N Col(1),
Button Box("OK"),
Button Box("Cancel")
)
)
)
);Re: ¿Cómo crear una ventana modal de entrada de usuario de dos columnas donde la segunda columna se completa basándose en una entrada única en la primera columna?@jthi Gracias. Esto debería hacer el trabajo. Los botones en lugar de la casilla de verificación están bien. Cambié su secuencia de comandos a una función, pero me cuesta colocar get selected () correctamente para obtener los valores seleccionados como lista (por ejemplo, mi declaración de devolución comentada en la parte inferior de la función) cuando el usuario hace clic en Aceptar. ¿Podría obtener algunos consejos sobre dónde colocar correctamente la selección ()?
Names Default To Here (1);
getUserInput = Function ({aa_parent}, {return_selectionAslist},
aa_parents << Set Default Value({});
get_childids = function({this}, {Default Local},
new_childids = aa_parents[(this << prev sib) << get text];
lb_child << Set items(new_childids);
);
nw = New Window("",
H List Box(
Panel Box("[1] Enter Parent ID",
Lineup Box(N Col(2),
Text Edit Box("", << Set Width(150)),
Button Box("Get Child Ids", << set function(function({this},
get_childids(this);
)))
)
),
Panel Box("[2] Select Child ID",
H List Box(
lb_child = List Box({}),
Lineup Box(N Col(1),
Button Box("Select All",
For Each({item, idx}, lb_child << get items,
lb_child << Set Selected(idx);
);
wait(0);
),
Button Box("Unselect All",
lb_child << Clear selection;
),
)
)
),
Panel Box("[3] Fetch Test Data",
Lineup Box(N Col(1),
Button Box("OK"),
Button Box("Cancel")
)
)
)
);
// return_selectionAslist = As List [Parent ID, selected_Child_ID(s) ];
Return (return_selectionAslist);
);
//Test
clear log ();
aa_parent_1 = ["123" => {"111", "222", "333"}]; aa_parent_2 = ["345" => {"555", "777", "999"}];
myList= getUserInput (aa_parent_1);Re: ¿Cómo crear una ventana modal de entrada de usuario de dos columnas donde la segunda columna se completa basándose en una entrada única en la primera columna?Colóquelo dentro del botón Aceptar para que se ejecute cuando el usuario presione ese botón.
Re: ¿Cómo crear una ventana modal de entrada de usuario de dos columnas donde la segunda columna se completa basándose en una entrada única en la primera columna?@jthi Gracias. Me acabo de dar cuenta de que una parte clave que falta en la función anterior es que se debe ejecutar un script (que tengo) (en segundo plano) cuando el usuario hace clic en "Obtener ID de niño", lo que generará los ID de niño según el ID de padre. ingresó. Estas identificaciones de niños se muestran en el segundo panel. Luego, el usuario elige uno o más de los ID de niño.
En el ejemplo analizado aquí, los ID de padres y de niños ya están disponibles, lo cual no es como sería en el caso real.
¿Cómo hacer que se ejecute un script cuando el usuario hace clic en "Obtener ID de niño", cuyo resultado completa los ID de niño?
Re: ¿Cómo crear una ventana modal de entrada de usuario de dos columnas donde la segunda columna se completa basándose en una entrada única en la primera columna?Le proporcioné una idea sobre cómo manejar eso con get_childids, reemplácela con su propia función que obtiene los datos y luego establece los valores (aa_parents simplemente está "simulando" la base de datos en este caso).
Re: ¿Cómo crear una ventana modal de entrada de usuario de dos columnas donde la segunda columna se completa basándose en una entrada única en la primera columna?@jthi Si gracias. Necesito ayuda sobre cómo ejecutar un script (en realidad, una función con ID de padre como entrada) cuando el Se hace clic en el botón Obtener ID de niños.
Re: ¿Cómo crear una ventana modal de entrada de usuario de dos columnas donde la segunda columna se completa basándose en una entrada única en la primera columna?El ejemplo ya está ahí. ¿Hay algo que no puedas convertir para que funcione con tu script? este tal vez, ¿lo cual puede resultar confuso a pesar de que es solo un nombre para un argumento/parámetro que se refiere al elemento que llama a la función?
Re: ¿Cómo crear una ventana modal de entrada de usuario de dos columnas donde la segunda columna se completa basándose en una entrada única en la primera columna?@jthi Mis habilidades con JMP aún no son buenas (hasta ahora he sido usuario de Matlab), así que todavía tengo problemas con la forma de pensar de JMP. Estoy probando este lado pero hasta ahora no tengo éxito. Nunca usado este antes.
Lo que estaba intentando era usar Obtener índices seleccionados (), algo que he usado antes, para capturar el clic del usuario en Obtener identificaciones infantiles, en función de lo cual se activa la llamada a la función y se obtienen los ID de los niños. De nuevo, ningún éxito hasta el momento.
Re: ¿Cómo crear una ventana modal de entrada de usuario de dos columnas donde la segunda columna se completa basándose en una entrada única en la primera columna?@jthi . Parece que he progresado un poco, pero todavía necesito ayuda.
He vuelto al script (en lugar de la función en la publicación 5 de este hilo).
A continuación se muestra un guión parcialmente funcional. Tengo dificultades para ingresar la ID de los padres (por ejemplo, "715" a continuación) desde la entrada de ID de los padres de los usuarios en mi función fetchChildIds. Necesito ayuda aquí.
Básicamente necesito ingresar la entrada al cuadro de edición de texto en el argumento de mi función para reemplazar "715".
Names Default To Here (1);
clear log ();
include ("_fetchChildIds.jsl");
//aa_parents << Set Default Value({});
get_childids = function({this}, {Default Local},
//new_childids = aa_parents[(this << prev sib) << get text];
new_childids = fetchChildIds ("715");
lb_child << Set items(new_childids);
);
nw = New Window("",
H List Box(
Panel Box("[1] Enter Parent ID", //sets outside panel
Lineup Box(N Col(2),
pid = Text Edit Box("", << Set Width(150)),
Button Box("Get Child ID(s)", << set function(function({this},
get_childids(this);
)))
)
),
Panel Box("[2] Select Child ID",
H List Box(
lb_child = List Box({}),
Lineup Box(N Col(1),
Button Box("Select All",
For Each({item, idx}, lb_child << get items,
lb_child << Set Selected(idx);
);
wait(0);
),
Button Box("Unselect All",
lb_child << Clear selection;
),
)
)
),
Panel Box("[3] Fetch Test Data",
Lineup Box(N Col(1),
Button Box("OK"),
Button Box("Cancel")
)
)
)
);
Re: ¿Cómo crear una ventana modal de entrada de usuario de dos columnas donde la segunda columna se completa basándose en una entrada única en la primera columna?@jthi
¿Por qué esto no muestra la identificación del padre ingresada por el usuario? Continúa con 715. No se toma/utiliza un valor actualizado. ¿Lo estoy colocando en el lugar equivocado, es decir, debajo del cuadro de edición de texto?
pid = Text Edit Box("715", << Set Width(150)),
ParentID = nw["pid" ]; show (ParentID);el ParentID actualizado por el usuario está disponible fuera de la Nueva ventana (), pero creo que lo necesito cuando se presiona el cuadro de botones.
Button Box("Get Child ID(s)", << set function(function({this},
get_childids(this); Re: ¿Cómo crear una ventana modal de entrada de usuario de dos columnas donde la segunda columna se completa basándose en una entrada única en la primera columna?Debe usar << Obtener texto para obtener el valor del cuadro de edición de texto
Re: ¿Cómo crear una ventana modal de entrada de usuario de dos columnas donde la segunda columna se completa basándose en una entrada única en la primera columna?@jthi sí, probé << Obtener texto. Puedo sacar el valor fuera de la nueva ventana()
Creo que mi problema es la ubicación correcta de Obtener texto.
No puedo obtener la ID de los padres a partir de la entrada del usuario para transmitirla correctamente cuando se coloca el botón "Obtener ID del niño".
Al presionar "Obtener ID del niño" se debe ejecutar la función de búsqueda de ID del niño con el ID del padre ingresado por el usuario.
Agradecería un poco de ayuda aquí.
Re: ¿Cómo crear una ventana modal de entrada de usuario de dos columnas donde la segunda columna se completa basándose en una entrada única en la primera columna?Está utilizando el valor de entrada codificado de "715" y no la entrada del usuario.
Re: ¿Cómo crear una ventana modal de entrada de usuario de dos columnas donde la segunda columna se completa basándose en una entrada única en la primera columna?@jthi
>> Está utilizando el valor de entrada codificado de "715" y no la entrada del usuario.
Esto fue sólo para mostrar lo que estoy haciendo. Quiero reemplazar "715" con la entrada del usuario.
La ID de los padres debe pasar al argumento de la función cuando se presiona el botón Obtener ID de los niños.
fetchChildIds ()
El caso codificado funciona como se esperaba, pero no puedo obtener la entrada del usuario como argumento para mi función mencionada anteriormente.
Re: ¿Cómo crear una ventana modal de entrada de usuario de dos columnas donde la segunda columna se completa basándose en una entrada única en la primera columna?El guión no tiene indicaciones de que estés usando, por ejemplo.
pid << get text
Mi método de uso de esto para exhibidores de viaje es más complicado (pero a veces puede ser más sólido), solo usar una referencia debería ser suficiente.
También comience con un script muy simple y hágalo funcionar primero. Comience con el ejemplo del índice de secuencias de comandos:
Names Default To Here(1);
win = New Window("Example", fontobj = text = Text Edit Box("Example Text"));
Print(text << Get Text());
modifíquelo para que tenga un cuadro de botones
Names Default To Here(1);
win = New Window("Example",
teb = Text Edit Box("Example Text"),
Button Box("Get Text")
);
agregar función/expresión al botón
Names Default To Here(1);
win = New Window("Example",
teb = Text Edit Box("Example Text"),
Button Box("Get Text",
show(teb << get text)
);
);
mover la función/expresión fuera del cuadro de botones
Names Default To Here(1);
get_my_text = function({}, {Default Local},
show(teb << get text)
);
win = New Window("Example",
teb = Text Edit Box("Example Text"),
Button Box("Get Text",
get_my_text();
);
);
hacer que la función devuelva algo
Names Default To Here(1);
get_my_text = function({}, {Default Local},
teb_txt = teb << get text;
return(teb_txt);
);
win = New Window("Example",
teb = Text Edit Box("Example Text"),
Button Box("Get Text",
user_txt = get_my_text();
show(user_txt);
);
);
etcétera. Es muy difícil intentar que todo el script funcione de una sola vez, así que trabaje en problemas mucho más pequeños, uno a la vez.
Re: ¿Cómo crear una ventana modal de entrada de usuario de dos columnas donde la segunda columna se completa basándose en una entrada única en la primera columna?@jthi Muchas gracias por tus aportes. Ahora he hecho el guión mucho más pequeño, lo que espero ayude a resaltar el problema que estoy teniendo.
Mi comentario en mayúsculas a continuación (adyacente a returnPid = pid << get text; show (returnedPid)) es donde necesito ayuda.
La entrada del usuario en la ID del padre no se pasa a la llamada a la función get_childids.¿Mi texto <
Names Default To Here (1);
// function inclusion to fetch child IDs from data base for a given Parent ID.
include ("_fetchChildIds.jsl"); // function called below.
get_childids = function({this}, {Default Local},
new_childids = fetchChildIds (returnedPid);
//lb_child << Set items(new_childids);
);
nw = New Window("FetchData ", //<< Modal, <<RETURN result=""></RETURN>
Re: ¿Cómo crear una ventana modal de entrada de usuario de dos columnas donde la segunda columna se completa basándose en una entrada única en la primera columna?Debe estar dentro del cuadro del botón, no en algún lugar entre el cuadro de edición de texto y el cuadro del botón.
Names Default To Here(1);
nw = New Window("FetchData ",
H List Box(
Panel Box("[1] Enter Parent ID",
Lineup Box(N Col(2),
pid = Text Edit Box("", <<SET width=""></SET>Re: ¿Cómo crear una ventana modal de entrada de usuario de dos columnas donde la segunda columna se completa basándose en una entrada única en la primera columna?@jthi Gracias, nunca me habría dado cuenta de eso.
Sin embargo, el script actualizado a continuación no pasa el valor de returnPid como argumento a mi función fetchChildIds (:
Names Default To Here (1);
clear log ();
include ("_fetchChildIds.jsl");
//aa_parents << Set Default Value({});
get_childids = function({this}, {Default Local},
//new_childids = aa_parents[(this << prev sib) << get text];
new_childids = fetchChildIds (returnedPid);
lb_child << Set items(new_childids);
);
nw = New Window("Fetch Summary Data ", << Modal, <<RETURN result=""></RETURN>Re: ¿Cómo crear una ventana modal de entrada de usuario de dos columnas donde la segunda columna se completa basándose en una entrada única en la primera columna?Realmente debería leer la guía de secuencias de comandos y consultar el índice de secuencias de comandos para comprender qué está pasando.
Names Default To Here (1);
get_childids = function({user_input}, {Default Local},
show(user_input);
// do something
// get return value...
retval = user_input; // for demo purposes
return(retval);
);
nw = New Window("Fetch Summary Data ",
H List Box(
Panel Box("[1] Enter Parent ID", //sets outside panel
Lineup Box(N Col(2),
pid = Text Edit Box("", << Set Width(150)),
Button Box("Get Child ID(s)",
user_input = pid << get text;
childids = get_childids(user_input);
// do something with childids (or do it outside within the function but change the function name)
);
)
)
)
);