Estimados,
(JMP Pro 16.1.0, Win10)
Tengo un problema relacionado con una publicación anterior mía. aquí , si está interesado en alguna "historia de fondo".
El problema principal que tengo ahora es que el comando Throw() no funciona como se esperaba. En mi código (ver al final para el código completo), tengo en algunos lugares una prueba para ver si actualmente hay un informe de generador de gráficos abierto, se ve así, y está envuelto en una declaración Expr():
If( Is Empty( Current Report() ) == 1,
Throw( "No Graph Builder Window is Open" )
);
El problema es que, cada vez que ejecuto el código (como si lo ejecutara desde un botón de la barra de herramientas), parece omitir estas líneas e ignorar si no hay un informe abierto. Pero, cuando ejecuto el código "línea por línea", detectará correctamente que no hay ningún informe abierto y notificará al usuario.
Estoy tratando de escribir código para distribuirlo a los usuarios de mi organización y tratar de hacerlo lo suficientemente robusto para manejar diferentes tipos de situaciones, por ejemplo, si un usuario tiene una o más tablas de datos abiertas y/o uno o más proyectos abiertos (que puede contener múltiples tablas de datos).
Este es el concepto del código (el problema ocurre en el elemento 6): un usuario está creando un gráfico en Graph Builder, luego quiere hacer una modificación de rutina del gráfico (consulte el enlace anterior para obtener detalles al respecto), el usuario luego hace clic en la barra de herramientas hotbutton para realizar dicha acción.
- El código ejecuta la expresión Graphic_Expr para determinar la ubicación del gráfico, ya sea en una tabla de datos "independiente" o dentro de un proyecto (solo se puede seleccionar una opción). -> (ir a)
- Dependiendo de qué casilla de verificación esté seleccionada, el código ejecuta el código dt_win_Expr o prj_win_Expr (en este momento, solo lo tengo configurado para la opción de tabla de datos mientras pruebo el código, pero idealmente debería funcionar más o menos igual al final) . -> (ir a)
- Si es una tabla de datos independiente, ejecuta dt_win_Expr y crea una ventana para que el usuario seleccione la tabla de datos donde reside el gráfico que desea editar. Recuerde que el usuario podría tener más de una tabla de datos abierta con potencialmente más de un Graph Builder abierto. | (o)
- De manera similar, si el usuario selecciona un proyecto, ejecutará prj_win_Expr (aún no completado) para que el usuario seleccione qué proyecto (si hay más de uno abierto) y las tablas de datos subsiguientes dentro de ese proyecto. -> (ir a)
- Una vez que se selecciona una tabla de datos, ya sea independiente o dentro de un proyecto, el código ejecuta la expresión SquarifyWin_Expr. Lo primero que hace aquí es probar si de hecho existe un Informe actual: el código If() de arriba (es posible que deba modificar y probar si el informe actual es un Creador de gráficos o no). **Aquí es donde el código NO funciona como se esperaba. Incluso si no hay Graph Builder abierto, continuará con el resto del código cuando debería mostrar la advertencia.** Si todo funciona....-> (ir a)
- Según las dimensiones de los píxeles y si se debe cuadrar, el código ejecuta la expresión RprtUpdate_Expr, donde envía las actualizaciones deseadas al informe Graph Builder.
Espero que esta descripción tenga sentido y ayude a poner en contexto cuál es mi ruta/funcionalidad de programación deseada.
Muchas gracias de antemano por cualquier ayuda para encontrar una solución. Código JSL completo al final.
¡Gracias!,
SD
Names Default To Here( 1 );
Clear Symbols();
RprtUpdate_Expr = Expr(
gb = Current Report()[Outline Box( 1 )] << Get Scriptable Object;
Report( gb )[framebox( 1 )] << FrameSize( widthN, heightN );
theMax = Max( Report( gb )[axisbox( 1 )] << get max, Report( gb )[axisbox( 2 )] << get max );
theMin = Min( Report( gb )[axisbox( 1 )] << get min, Report( gb )[axisbox( 2 )] << get min );
Report( gb )[framebox( 1 )] << Xaxis( Min( theMin ), Max( theMax ) );
Report( gb )[framebox( 1 )] << Yaxis( Min( theMin ), Max( theMax ) );
Report( gb )[framebox( 1 )] << AddGraphicsScript(
xmin = X Origin();
xmax = X Origin() + X Range();
ymin = Y Origin();
ymax = Y Origin() + Y Range();
Pen Color( "blue" );
Pen Size( 1 );
Line Style( "solid" );
Line( {xmin, ymin}, {xmax, ymax} );
);
);
SquarifyWin_Expr = Expr(
If( Is Empty( Current Report() ) == 1,
Throw( "No Graph Builder Window is Open" )
);
nwin = New Window( "Enter Size of Desired Graph",
<<RETURN result=""></RETURN>