JSL: ¿Cómo agregar las opciones del botón rojo a un cuadro de esquema? ¿O puedes?Hola a todos,
Estoy interesado en aprender cómo (si es posible) agregar el menú del botón rojo a su propio cuadro de esquema definido. Por ejemplo, con la plataforma Graph Builder, hay un botón al rojo vivo que permite cosas como "Guardar script en la tabla de datos" y otras opciones.

Tengo otros scripts que escribí y me gustaría tener esta opción. El Outline Box viene con el pequeño triángulo gris para algunas opciones, pero no ofrece las opciones del botón rojo. Por ejemplo:

He buscado en el Índice de secuencias de comandos y en la Guía de secuencias de comandos y no puedo encontrar ninguna documentación al respecto.
¿Alguien sabe si es posible? Y si es así, ¿cómo?
¡Gracias!,
DS
Automatización y secuencias de comandosLa personalización en masaCompartir y comunicar resultadosventanasRe: JSL: ¿Cómo agregar las opciones del botón rojo a un cuadro de esquema? ¿O puedes?¿Es posible que esté buscando << Establecer script de menú? Ejemplo del índice de secuencias de comandos
Names Default To Here(1);
New Window("Example",
fontobj = ob = Outline Box("Outline Box",
V List Box(
ob2 = Outline Box("Outline Box 2",
H List Box(
Text Edit Box("Top Left"),
Text Edit Box("Top Right")
)
),
ob3 = Outline Box("Outline Box 3",
H List Box(
Text Edit Box("Bottom Left"),
Text Edit Box("Bottom Right")
)
)
)
)
);
ob << Set Menu Script(
{"A", Print("A"), "B", Print("B"), "B1", Print("B1"), "B2",
Print("B2"), "B3", Print("B3"), "C", Print("C")}
);
ob << Set Submenu(2, 3);

También hay algo sobre esto en la Ayuda de JMP, pero es muy, muy difícil de encontrar debido a la horrible búsqueda que tiene la página de ayuda de JMP ( https://www.jmp.com/support/help/en/17.2/#page/jmp/construct-display-boxes-for-new-windows.shtml#ww883930 )

Re: JSL: ¿Cómo agregar las opciones del botón rojo a un cuadro de esquema? ¿O puedes?Vídeo tutorial:
Introducción al capítulo 5.3 del lenguaje de scripting JMP @ 10:30 min
Re: JSL: ¿Cómo agregar las opciones del botón rojo a un cuadro de esquema? ¿O puedes?Hola @jthi y @hogi ,
Gracias por la información de donde iniciar este proceso, es de mucha ayuda. Y en realidad es sólo una solución parcial en este momento.
Pude agregar una secuencia de comandos del menú; en este momento, solo estoy agregando dos cosas: un filtro de datos local y la secuencia de comandos para guardar (3 opciones): a la tabla de datos, a la ventana de secuencias de comandos y al Diario.
En este momento, tengo el filtro de datos local y el script guardado en Journal funcionando bien. Lo que me está costando más es lograr que funcionen las funciones de guardar script en la tabla de datos y guardar script en la ventana de scripting. A continuación se muestra la sección de código donde activa el script del menú y luego asigna la acción para cada elemento del menú seleccionado.
mob << Set Menu Script(
{"Local Data Filter", ts << Local Data Filter ; gb << Local Data Filter, "Save Script", "", "To Data Table", nwin <<
Save Script to Data Table( "Correlation Analysis of " || ycols[1] || " vs. " || xcols[1], <<PROMTP></PROMTP>Mi ventana de informe personalizado se parece a esto:

Me gustaría tener la opción de que el usuario pueda seleccionar guardar script en la tabla de datos (o ventana de scripting) y básicamente guarda el script que se utiliza para generar este informe personalizado para que este análisis se pueda guardar en la tabla de datos y alguien puede hacer clic en la flecha verde del script al lado del script y volver a ejecutar el análisis sin tener que volver a ejecutar todo el complemento.
Al leer sobre esto en el índice de secuencias de comandos, parece que solo objetos como informes de plataforma (por ejemplo, Graph Builder o Time Series) se pueden guardar individualmente en la tabla de datos, pero todo el objeto Outline Box, que es mi ventana de informe, no No acepto ese tipo de comando de envío (<<). Preferiría no guardar cada objeto de plataforma individualmente, sino todo el código de secuencia de comandos después de haberlo usado para realizar el análisis en la tabla de datos/ventana de secuencia de comandos.
No estoy seguro exactamente de por qué, pero tal vez sea porque mi código tiene una estructura diferente, porque estoy usando varias declaraciones Expr. A modo de idea aproximada, mi código está estructurado de la siguiente manera:
Names Default To Here( 1 );
//any variable definitions
var1 = .;
var2 = .;//etc
//Expression to recall roles
RecallRoles = Expr(
//inside is the code to recall roles
);
//Expression to clear roles
ClearRoles = Expr(
//similar code to clear roles
);
//User interface window
ValueDlg = Expr(
nwin = New Window(
// opens a new window with the main outline box and subpanels
//and action buttons
mob = Outline Box(
//this is the main outline box that contains the subpanels and
//time series and graph builder platforms
//it also contains the action buttons that perform certain tasks
)
);
mob << Set Menu Script(
//this is where I'm trying to save the evaluated script to the data
//table so a usercan just cick it, and the script will execute with
//the variables already evaluated and not have to cast columns into
//roles, etc.
);
);
ValueDlg;//this calls the ValueDlg Expr and evaluates it.
Si alguno de ustedes tiene alguna idea o idea sobre cómo podría hacer esto (que espero que mi explicación tenga sentido), agradezco cualquier comentario al respecto.
¡Gracias!,
DS
Re: JSL: ¿Cómo agregar las opciones del botón rojo a un cuadro de esquema? ¿O puedes?Para agregar filtro de datos y guardar secuencia de comandos del informe en la tabla de datos, si trabaja en un PC con Windows , podría considerar usar la barra de herramientas de informes:

Re: JSL: ¿Cómo agregar las opciones del botón rojo a un cuadro de esquema? ¿O puedes?Al solicitar el script en el cuadro de esquema, se obtiene algo así como el árbol de visualización.
Entonces esto tampoco funciona.
Cuando genera el Informe, tiene la Expresión completa para generar el informe.
Entonces, cuando el usuario hace clic en guardar script, puede usar esta expresión y guardarla como un script.
[entonces los cambios que el usuario realizó posteriormente no se guardarán]
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
gb = dt << Graph Builder(
Size( 437, 413 ),
Graph Spacing( 4 ),
Variables( X( :height ), Y( :weight ), Overlay( :sex ) ),
Elements( Points( X, Y, Legend( 1 ) ), Smoother( X, Y, Legend( 2 ) ) )
);
New Window( "test",
ob = Outline Box( "test",
V List Box( Text Box( "hello" ), gb = dt << Graph Builder( Variables( X( :height ), Y( :weight ), Overlay( :sex ) ) ) )
)
);
ob << get script(); // Display Tree
ob << get scriptable Object (); // Empty
Re: JSL: ¿Cómo agregar las opciones del botón rojo a un cuadro de esquema? ¿O puedes?Guardar el script que crea esa ventana personalizada será generalmente muy difícil ya que básicamente tendría que incluir el complemento completo en ese script, con las opciones del usuario aplicadas (y luego sería lo mismo que el usuario básicamente volviera a ejecutar el complemento). en). He tenido al menos algunas soluciones diferentes para algo como esto (no intento guardar toda la ventana ya que mis complementos suelen ser demasiado complicados para eso):
- Guarde algún tipo de variable de configuración en la tabla de datos que el usuario luego puede cargar en su complemento para "rellenarla"
- No guarde el script completo, sino algún tipo de solución tipo "panel de control" sin tantas funciones.
- Guarde solo algunas partes más simples como scripts de tabla
- Y quizás algunas más que no recuerdo por ahora...
Re: JSL: ¿Cómo agregar las opciones del botón rojo a un cuadro de esquema? ¿O puedes?Creo que la mejor idea no es generar el informe NO manualmente, sino a través de Creador de paneles .
En el Panel generado, hay un menú de triángulo rojo con una opción para guardar el script (Panel)
... y desde Jmp17 hay incluso una opción para guardar una versión simplificada que parece un script generado manualmente:

Re: JSL: ¿Cómo agregar las opciones del botón rojo a un cuadro de esquema? ¿O puedes?Sumándose a las sugerencias de @jthi , puede crear una función a la que llama en su complemento y luego su Guardar script es solo la llamada a la función. Se necesitará algo de administración para asegurarse de que la función esté bien diseñada y maneje las opciones que necesita, pero si está creando un cuadro de diálogo para iniciar su complemento, entonces probablemente ya haya definido muchos de los argumentos.
Re: JSL: ¿Cómo agregar las opciones del botón rojo a un cuadro de esquema? ¿O puedes?Hola @jthi , @hogi , y @Jeff_Perkinson ,
Agradezco los comentarios, pensamientos y discusiones. Bueno, parece que podría ser más complicado de lo que pensaba. Eso no quiere decir que no sea factible, pero no será tan "simple" como agregar el script del menú al cuadro de esquema. Puede que tenga que reflexionar y analizar algunas de las ideas aquí.
@hogi , Probé Guardar script en ventana y Guardar script para todos los objetos en la tabla de datos, pero ninguno de ellos funcionó como esperaba.
Si encuentro la solución que busco, me aseguraré de actualizar esta publicación con cómo la resolví en caso de que otros se encuentren con esto y estén interesados.
¡Gracias a todos!,
DS
Re: JSL: ¿Cómo agregar las opciones del botón rojo a un cuadro de esquema? ¿O puedes?Application/Dashboard Builder es increíblemente útil; vale la pena probarlo 
Creación de paneles y aplicaciones con JMP® (US 2018 408)
Vídeo de Youtube (Jmp 10)
https://www.youtube.com/watch?v=XyiQqUELc2A
Aquí hay un video más largo con muchos detalles:
¿Por qué no estás utilizando todavía App Builder? - (2023-US-30MP-1401)
version corta:
Cree una aplicación parametrizada con Application Builder
Re: JSL: ¿Cómo agregar las opciones del botón rojo a un cuadro de esquema? ¿O puedes?Básicamente es algo que debes diseñar desde el principio para que sea "fácilmente" factible.
Aquí hay un ejemplo que tengo, el complemento es bastante simple en ese sentido, ya que solo contiene creadores de gráficos (y un bosque de partición/arranque).

Pero intentar guardar el script que lo construye sería una pesadilla. Hay muchas cosas ocultas que no pueden ser capturadas por Get Script de JMP o guardar script en la tabla de datos (o cualquiera de los métodos) y el complemento está dividido en más de 10 archivos .jsl diferentes. Incluso si pudiera guardar la interfaz de usuario en la tabla de datos, no funcionaría cuando el usuario volviera a ejecutar el script debido a mi estricta gestión de los espacios de nombres (la interfaz de usuario no tendría acceso a todas las diferentes funciones, por ejemplo).Entonces, en este caso solo le proporciono al usuario una opción para guardar las selecciones de columnas y el orden (pueden guardar varias).Luego pueden cargar diferentes entradas cuando tienen la misma tabla abierta y volver a ejecutar el complemento.

Lo más probable es que pueda refactorizar este complemento para que funcione de tal manera que pueda guardar (la mayor parte) en una secuencia de comandos de tabla o en una ventana de secuencia de comandos, pero tendría que reescribirlo desde el principio.
Tengo otro complemento (no puedo mostrar imágenes de eso) que consulta datos en función de las entradas del usuario, realiza algunos cálculos y luego muestra los resultados con algunos creadores de gráficos y algunos conmutadores de columnas/filtros de datos adicionales, guarda esa "plataforma"/ UI/visualización inmediatamente a la tabla de datos después de que la consulta y los cálculos hayan finalizado. Luego ejecuto ese script de tabla para mostrar los resultados al usuario. Este es un complemento bastante simple, por lo que podría hacerlo fácilmente con algunas expresiones (la versión inicial que tenía no guardó la visualización, pero fue una solicitud de los usuarios, así que la implementé).
Y el tercero en el que estoy trabajando actualmente (nuevamente no puedo mostrarlo) hace algo similar. Obtiene datos basados en las entradas del usuario, realiza cálculos sobre ellos, muestra los resultados del análisis y los visualiza. Nuevamente, no puedo guardar toda la interfaz de usuario en la tabla de datos debido a que es una molestia demasiado grande con todas las opciones que proporciono a los usuarios, PERO agregaré un botón que es básicamente un "panel emergente" que luego solo creará un panel de control de solo algunas partes de la interfaz de usuario y dentro de este "panel emergente" puedo agregar algunas funcionalidades adicionales como lo haré diseñarlo desde el principio . Y este panel emergente se puede guardar (con suerte) en la tabla de datos.
Editar: Rara vez agrego botones de recuperación a mis scripts, ya que también puede ser complicado y tomar mucho tiempo para que funcione correctamente. Sé que hay un script que puede ayudar con esto, pero no puede realizar la tarea (siempre) lo suficientemente bien como para que yo pueda usarla. Si los usuarios empiezan a solicitar botones de recuperación para la mayoría de las herramientas que he escrito, podría considerar escribir un script para eso que, con suerte, funcionará en la mayoría de los casos.
Re: JSL: ¿Cómo agregar las opciones del botón rojo a un cuadro de esquema? ¿O puedes?Con una GUI generada a través de Application Builder, todo esto es muy fácil: puede trabajar en la GUI, optimizarla y guardar la última versión de la funcionalidad completa como un nuevo Table Script. Al notar un implícito "mejor no usar el generador de aplicaciones para hacer esto": ¿hay alguna funcionalidad que no sea posible a través del Generador de aplicaciones?
Un inconveniente que noté:
Para paneles que van más allá de una simple colección de objetos de plataforma, se debe agregar algo de código JSL para automatizar la GUI.
Depurar este código JSL parece mucho más complicado que en un editor JSL.
Quizás simplemente no sé cómo hacerlo bien.
¿Hay alguna sugerencia de los usuarios de Application Builder sobre cómo depurar parte del código, por ejemplo, iniciar la aplicación desde Application Builder y, en paralelo, ejecutar fragmentos de código en el editor JSL para comprobar qué hacen? ¿Existe un marco para acceder al espacio de nombres de la aplicación para poder usar fragmentos de código en el editor JSL sin ningún cambio?