¿Cómo evitar que Run in Fit Model genere un informe?Estoy escribiendo un guión que hace lo siguiente:
- Abre una ventana Ajustar modelo,
- Permite al usuario completarlo utilizando las macros y otras funciones en la ventana Ajustar modelo,
- Permite al usuario hacer clic en Ejecutar, momento en el que se realiza un cálculo que posiblemente requiere mucho tiempo y se genera un informe.
El cálculo que se realiza cuando se hace clic en Ejecutar es producido por un script almacenado en el botón Ejecutar.Este script produce un informe, que es lo que el usuario debería ver.Sin embargo, debido a que la secuencia de comandos se agrega al botón Ejecutar, aparece el informe deseado, pero luego es seguido por el informe Ajustar mínimos cuadrados que Ejecuta produce por sí solo.El informe Ajustar mínimos cuadrados no tiene sentido para el usuario.
El siguiente script ilustra el problema. En ese script, la expresión en el botón Ejecutar, "runExpr", simplemente crea una tabla de datos de clonación; esto es para simplificar la ilustración.En el script real, esa expresión (runExpr) realiza muchos análisis basados en los efectos ingresados en la ventana Ajustar modelo. Además, en el script real, el usuario llena la ventana Ajustar modelo de forma interactiva; Completé la ventana Ajustar modelo en el siguiente script para mayor comodidad.
Names Default To Here( 1 );
runExpr = Expr(
// Creates a clone data table for illustration;
dt << Subset( Output Table( "Clone Table" ), All rows );
);
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
fmSLS = Fit Model(
Y( :weight ),
Effects( :age, :height, :age * :height ),
Personality( "Standard Least Squares" ),
Emphasis( "Minimal Report" ),
);
r = fmSLS << Report;
r[Button Box( 9 )] << Set Script( runExpr);
Cuando hace clic en Ejecutar, como lo haría un usuario, aparece la tabla de clonación, pero la ventana en la parte superior es el informe Ajustar mínimos cuadrados producido por el comando Ejecutar.Me gustaría evitar que aparezca ese informe.
Con ese fin:
- Intenté usar Throw () y Stop () en runExpr, pero fue en vano.
- Consideré usar una ventana modal, pero necesito la funcionalidad Macro en la ventana Ajustar modelo, y no veo cómo hacer que una ventana modal ayude.
- La única forma en que puedo pensar incluso para abordar el informe Ajustar mínimos cuadrados es agregar un ciclo de tiempo al script como se ilustra a continuación. Pero esto está lleno de peligros.No hay forma de saber cuánto tiempo tardará en completarse runExpr, y si el usuario decide no hacer clic en Ejecutar, la secuencia de comandos seguirá ejecutándose hasta que se agote el tiempo de espera.
¡Cualquier pensamiento o ayuda será muy apreciado!
Names Default To Here( 1 );
runExpr = Expr(
// Creates a clone data table for illustration;
dt << Subset( Output Table( "Clone Table" ), All rows );
fm_Flag = 1
);
fm_Flag = 0; // Sets flag for timing
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
fmSLS = Fit Model(
Y( :weight ),
Effects( :age, :height, :age * :height ),
Personality( "Standard Least Squares" ),
Emphasis( "Minimal Report" ),
);
r = fmSLS << Report;
r[Button Box( 9 )] << Set Script( runExpr; fm_Flag = 1 );
For( i = 1, i <= 100, i++,
If(fm_Flag < 1, Wait(0.5), windowsopen = Get Window List(); windowsopen[nItems(windowsopen)] << Close Window; Stop() )
);
ScriptingRe: ¿Cómo evitar que Run in Fit Model genere un informe?No veo cómo modificar el script que adjunta al cuadro del botón Ejecutar, pero puede buscar y cerrar la ventana después. Vea esta ilustración:
fm = Current data Table() << Fit Model(
Y( :weight ),
Effects( :age, :sex, :height ),
Personality( "Standard Least Squares" ),
Emphasis( "Effect Leverage" )
);
fls = fm << Run;
window = Get Window List();
For( w = 1, w <= N Items( window ), w++,
If( Contains( window[w] << Get Window Title, "Fit Least Squares" ),
window[w] << Close Window;
Break();
);
);
Re: ¿Cómo evitar que Run in Fit Model genere un informe?Mark, gracias, pero no creo que esto funcione para mi situación.El usuario debe completar la ventana Ajustar modelo.Si agrego su componente de ventana a mi secuencia de comandos, se ejecuta antes de que el usuario haya llenado la ventana Ajustar modelo.Entonces, cuando el usuario hace clic en Ejecutar, esa parte del script "desaparece".Por favor, vea el segundo guión en mi publicación para ver mi solución poco elegante en la línea que está proponiendo.Hay que tener en cuenta el tiempo que tarda el usuario en completar el modelo de ajuste y luego el tiempo que tarda en ejecutar el script en el botón Ejecutar.
Re: ¿Cómo evitar que Run in Fit Model genere un informe?Estás en lo correcto. Traté de modificar mi ilustración, pero la secuencia de comandos que se adjunta al cuadro de botones se evalúa antes de que se cree el informe Ajustar mínimos cuadrados, por lo que no es efectivo.
Names Default to Here( 1 );
run expr = Expr(
// desired report
personality = Report( fm )[ComboBox(1)] << Get Selected;
Show( personality );
// undesired report
window = Get Window List();
For( w = 1, w <= N Items( window ), w++,
If( Contains( window[w] << Get Window Title, "Fit Least Squares" ),
window[w] << Close Window;
Break();
);
);
);
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
fm = dt << Fit Model(
Y( :weight ),
Effects( :age, :sex, :height ),
Personality( "Standard Least Squares" ),
Emphasis( "Minimal Report" )
);
Report( fm )[ButtonBox(9)] << Set Script( run expr );
// nothing after this point
Re: ¿Cómo evitar que Run in Fit Model genere un informe?Correcto, parece que el script en el cuadro de botones se ejecuta antes de que se ejecute el comportamiento integrado del botón Ejecutar.
¡Este pequeño problema es molesto! Tiene que haber una forma de retrasar la ejecución del script hasta que ocurra una acción (como presionar el botón Ejecutar). O, para evitar la ejecución del comportamiento integrado (pero como dije, colocar Throw y Stop en runExpr no funcionó).
Gracias por intentar ayudar, Mark.Re: ¿Cómo evitar que Run in Fit Model genere un informe?¿Qué cantidad del cuadro de diálogo Especificación de modelo necesita? No puedo evitar pensar que sería mejor que reemplazara ese paso con una nueva ventana adaptada a sus necesidades exactas.Los ejemplos de esta publicación pueden ayudar:
https://community.jmp.com/t5/JMPer-Cable/Prompting-for-columns-totally-modally/ba-p/189647
Si desea utilizar la ventana de Especificación del modelo, puede darle al usuario un nuevo botón para hacer clic en:
Names Default to Here( 1 );
run expr = Expr(
// desired report
personality = Report( fm )[ComboBox(1)] << Get Selected;
Show( personality );
);
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
fm = dt << Fit Model(
Y( :weight ),
Effects( :age, :sex, :height ),
Personality( "Standard Least Squares" ),
Emphasis( "Minimal Report" )
);
// Show error if user clicks the wrong button
(fm << XPath("//ButtonBox[@title='Run']"))[1] << Set Script( New Window( "Use other bottom",
Text Box("Woops...\!n\!nPlease use the button at the bottom of the fit model dialog to launch this script.")));
// Button the user should click on
(fm << XPath("//OutlineBox"))[1] << Append(Button Box("Launch custom script", run expr; fm << Close Window;));<BR />
Re: ¿Cómo evitar que Run in Fit Model genere un informe?¿Por qué está utilizando el cuadro de diálogo Ajustar modelo si no desea la plataforma Ajustar mínimos cuadrados? Puede haber otra forma de lograr lo que desea.