Scripting para el diseño del proyectoTengo una secuencia de comandos que genera 5 ventanas y quiero usar la secuencia de comandos para organizar la salida en un formato de proyecto y organizar el diseño.
Me gustaría la lista de ventanas de la derecha. A la izquierda, me gustaría dos filas:
fila superior, quiero dos gráficos uno al lado del otro.
fila inferior, quiero que se muestren tres tablas en pestañas.
Se me ocurrió el siguiente script, pero no hace lo que quiero.Actualmente, los 5 se muestran en una sola fila en cinco pestañas diferentes, con la lista de ventanas a la derecha.
¿Alguien me puede apuntar en la dirección correcta?
Project = new project();
Move to Project( destination( Project ), windows( {"Table1" ,"Table2" , "Table3", "Graph1", "Graph2"} ));
Project << Set Layout(
H Splitter Box(
<<SET sizes=""></SET>Re: Secuencias de comandos para el diseño del proyectoEl ejemplo más simple posible de crear un proyecto, crear una tabla de datos y guardar esa tabla en el contenido del proyecto:
new Project(
Run Script(
dt = New Table( "My Table",
Add Rows( 3 ),
New Column( "Column 1",
Set Values( [1, 2, 3] )
)
);
dt << Save As("$PROJECT/my table.jmp");
);
);
La variable de ruta $PROJECT se asigna al contenido del proyecto actual (y, como tal, solo se puede usar dentro de un proyecto). Sería perfectamente correcto crear las tablas fuera del proyecto y luego moverlas, aunque si eso no es necesario por alguna razón externa, generalmente es más eficiente crear todo directamente en el proyecto la primera vez.
Re: Secuencias de comandos para el diseño del proyectoEl cuerpo principal del script genera 3 archivos de datos y los vincula entre sí.La forma en que está escrito ahora los archivos se guardan en la carpeta temporal de la unidad C y luego se mueven al proyecto.Me gustaría agregar una sección de contenido y agregar estos tres archivos con el script.Creo que entonces actualizaría el análisis que se hace para abrir los archivos en el proyecto y hacer gráficos de capacidad de proceso.
Re: Secuencias de comandos para el diseño del proyectoEl código de diseño del proyecto debe ser (más o menos) el mismo que antes. La diferencia en JMP 16 es que cuando va a guardar su contenido, puede guardarlo dentro del archivo del proyecto si lo desea. Puede hacer esto automáticamente desde un script, si lo desea, aunque necesitaría saber un poco más sobre su proyecto para recomendar un método específico.
Re: Secuencias de comandos para el diseño del proyectoJMP 16 mejora la plataforma del proyecto al incorporar los archivos al archivo del proyecto para guardarlos y transferirlos. Esta es una buena mejora. Mi secuencia de comandos JMP 15 para mover archivos de un informe a un archivo de proyecto aún funciona en 16, pero me gustaría actualizar para usar las nuevas funciones de JMP16. No estoy seguro de cómo sería la nueva estructura del script para este caso. ¿Alguna sugerencia? Adjunto está el aspecto de mi secuencia de comandos ahora (no se puede ejecutar ya que todos los archivos se basan en mi PC y la disputa de datos se realizó en una parte anterior de la secuencia de comandos).
Re: Secuencias de comandos para el diseño del proyectoPuede configurar un TabBox en particular para que tenga una determinada pestaña actual utilizando las API de TabBox regulares. (El JMP Scripting Index interactivo es un buen recurso para aprender esto). Aquí hay una forma de hacerlo con el ejemplo con el que hemos estado trabajando:
Project = new project();
Move to Project( destination( Project ), windows( {table1, table2, table3} ));
Project << Set Layout(
H Splitter Box(
<<SET sizes=""></SET>
Simplemente guardamos el cuadro de pestaña en una variable cuando lo creamos, luego usamos esa variable más tarde para configurar la pestaña que queremos que sea actual.
Re: Secuencias de comandos para el diseño del proyectoHola Aarón,
Por fin lo conseguí, ¡muchas gracias!
Estaba tratando de configurar la ID de la ventana al crear las tablas y el gráfico, y creo que eso no funcionó. Así que está haciendo el diseño correctamente ahora.
Solo otra pregunta relacionada: ¿cómo hago para que muestre una pestaña específica? Hay alguna forma de que se puedan pedir? Siempre muestra la misma tabla de forma predeterminada, pero esa no es la que quiero que se muestre.
Re: Secuencias de comandos para el diseño del proyectoLo siento, todavía no funciona.Aquí hay un ejemplo del primer método, usando (principalmente) su secuencia de comandos y alguna tabla de datos de muestra:
table1 = Open("$SAMPLE_DATA/Big Class.jmp");
table1 << Set Window ID("Table1");
graph1 = table1 << Run Script("Bivariate");
graph1 << Set Window ID("graph1");
table2 = Open("$SAMPLE_DATA/Iris.jmp");
table2 << Set Window ID("Table2");
graph2 = table2 << Run Script("Graph Builder Contour Plot");
graph2 << Set Window ID("graph2");
table3 = Open("$SAMPLE_DATA/Baseball.jmp");
table3 << Set Window ID("Table3");
Project = new project();
Move to Project( destination( Project ), windows( {table1, table2, table3} ));
Project << Set Layout(
H Splitter Box(
<<SET sizes=""></SET>
Y aquí hay una forma de hacerlo sin configurar las ID:
table1 = Open("$SAMPLE_DATA/Big Class.jmp");
graph1 = table1 << Run Script("Bivariate");
table2 = Open("$SAMPLE_DATA/Iris.jmp");
graph2 = table2 << Run Script("Graph Builder Contour Plot");
table3 = Open("$SAMPLE_DATA/Baseball.jmp");
Project = new project();
Move to Project( destination( Project ), windows( {table1, table2, table3} ));
Project << Set Layout(
H Splitter Box(
<<SET sizes=""></SET>
Por último, aquí hay una versión que evita Move to Project() al abrir las ventanas en el proyecto desde el principio:
Project = new project();
Project << Run Script(
table1 = Open("$SAMPLE_DATA/Big Class.jmp");
table1 << Set Window ID("Table1");
graph1 = table1 << Run Script("Bivariate");
graph1 << Set Window ID("graph1");
table2 = Open("$SAMPLE_DATA/Iris.jmp");
table2 << Set Window ID("Table2");
graph2 = table2 << Run Script("Graph Builder Contour Plot");
graph2 << Set Window ID("graph2");
table3 = Open("$SAMPLE_DATA/Baseball.jmp");
table3 << Set Window ID("Table3");
);
Project << Set Layout(
H Splitter Box(
<<SET sizes=""></SET>
Con suerte, uno de esos puede modificarse para que funcione con su script.
Re: Secuencias de comandos para el diseño del proyectoHola Aarón,
Intenté lo que sugirió, sin embargo, todavía no tuve suerte, el mismo mensaje de error.
Lo que no entiendo es: creé una nueva ventana, luego usé Establecer ID de ventana para darle una ID, pero esa ID no parece ser reconocida por Tab Box().
Re: Secuencias de comandos para el diseño del proyectoMi culpa, creo. Get Window() necesita saber dónde buscar (ya que las ventanas del proyecto pueden tener los mismos títulos que las ventanas exteriores). Entonces, en lugar de
Get Window("Table1")
(que está buscando una ventana llamada "Table1" que no está en un proyecto), necesitamos usar
Get Window(Project(Project), "Table1")
donde el "Proyecto" interior es el nombre que eligió para la variable de su proyecto en la parte superior de su secuencia de comandos:
Project = new project();
En conjunto, algo como esto debería funcionar:
Tab Page Box(
Window ID( Get Window(Project(project), "Table1") << Get Window ID())
)
Y sí, esto es definitivamente algo que esperamos hacer más fácil en una futura versión de JMP. 
Re: Secuencias de comandos para el diseño del proyectoGracias por tu ayuda. Sigo teniendo dificultades, lo siento, soy un principiante en JSL...
Cuando uso la segunda opción, aparece un mensaje de error sobre objetos programables:
Enviar espera un objeto programable en acceso o evaluación de 'Enviar', Obtener ventana ("Tabla1") << /*###*/
Obtener ID de ventana() /*###*/
Supongo que necesito hacer que estos objetos sean programables, pero nuevamente, ¿no estoy seguro de cómo hacerlo?
También probé la primera opción que pensé que funcionaría. Me las arreglé para crear nuevas ventanas para cada uno de los informes y usé el comando establecer ID de ventana para darles una ID, sin embargo, todavía no funciona.
Re: Secuencias de comandos para el diseño del proyectoTiene razón: esos GUID serían diferentes cada vez. No lo aburriré con los detalles de por qué no solo usamos títulos de ventana, pero hay una buena (aunque complicada) razón para las identificaciones. Lo mejor que se puede hacer al escribir manualmente un proyecto como este es establecer los ID de ventana antes en el script usando
mywindow << Set Window ID("window1");
o use Obtener ID de ventana () directamente en su diseño:
Tab Page Box(
Title( "Table1" ),
Window ID( Get Window("Table1") << Get Window ID())
)
Tenga en cuenta que el Título () solo se usa para imprimir un mensaje más amigable si la ventana con la ID dada no se puede encontrar, y para hacer que las cosas sean un poco más legibles para los humanos. No hace nada funcionalmente, por lo que puede continuar y omitirlo si eso le facilita la vida.
Re: Secuencias de comandos para el diseño del proyectoHola Aarón,
Gracias por esto. No sabía cómo obtener el diseño del guión, ¡eso es genial!
Así que hice esto, y el problema que tengo es que en el registro, cada una de las pestañas se parece un poco a esto:
Tab Page Box(
Title( "Table1" ),
Window ID( "e516a5e8-d5c2-954e-90a6-ba6b719dae98" )
Eliminé todos los bits de ID de ventana, pero aún no funciona, así que asumo que necesita el bit de ID de ventana. Sin embargo, estos números de ID de ventana parecen combinaciones de letras y números aleatorios que serán diferentes cada vez que se ejecute el script, por lo que no puedo especificarlos con anticipación. ¿Hay alguna forma de encontrar los identificadores de ventana de las ventanas que están abiertas? He buscado cómo hacer esto, pero no puedo ver cómo hacerlo.
Re: Secuencias de comandos para el diseño del proyectoUna de las mejores maneras de escribir diseños de proyectos en JSL es abrir el proyecto, usar la interfaz de arrastrar y soltar para establecer el arreglo que desea y luego guardar el diseño usando JSL. Para hacer esto, cree un nuevo script JSL (fuera del proyecto), luego ejecute
Get Project("Untitled") << Get Layout();
o
Get Project(1) << Get Layout();
utilizando el título o el índice del proyecto del que desea obtener el diseño. Esto volcará el diseño del proyecto al que se hace referencia en el registro, que luego puede adaptar para que funcione con el script de creación de su proyecto.
(Puede hacer lo mismo desde dentro de un proyecto, e incluso puede usar el acceso directo [este proyecto ()] para ejecutar el comando, pero luego el diseño resultante incluirá la ventana de secuencia de comandos que abrió para hacerlo, por lo que a menudo es más fácil hacerlo desde fuera).