Scripting per il layout del progettoHo uno script che genera 5 finestre e desidero utilizzare lo script per organizzare l'output in un formato di progetto e organizzare il layout.
Vorrei l'elenco delle finestre sulla destra. A sinistra, vorrei due righe:
riga superiore, voglio due grafici affiancati.
riga inferiore, voglio tre tabelle visualizzate nelle schede.
Ho creato lo script seguente, ma non fa quello che voglio.Attualmente tutti e 5 vengono visualizzati in un'unica riga su cinque diverse schede, con l'elenco delle finestre sulla destra.
Qualcuno può indicarmi la giusta direzione?
Project = new project();
Move to Project( destination( Project ), windows( {"Table1" ,"Table2" , "Table3", "Graph1", "Graph2"} ));
Project << Set Layout(
H Splitter Box(
<<SET sizes=""></SET>Ri: Scripting per il layout del progettoEsempio più semplice possibile di creazione di un progetto, creazione di una tabella di dati e salvataggio di tale tabella nei contenuti del progetto:
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 variabile di percorso $PROJECT si associa al contenuto del progetto del progetto corrente (e come tale è utilizzabile solo all'interno di un progetto). Sarebbe perfettamente corretto creare le tabelle all'esterno del progetto e poi spostarle all'interno, anche se se ciò non è necessario per qualche motivo esterno è generalmente più efficiente creare tutto direttamente nel progetto la prima volta.
Ri: Scripting per il layout del progettoIl corpo principale dello script genera 3 file di dati e li collega insieme.Il modo in cui è scritto ora i file vengono salvati nella cartella Temp dell'unità C e quindi spostati nel progetto.Vorrei aggiungere una sezione di contenuti e aggiungere questi tre file con lo script.Penso che quindi aggiornerei l'analisi che viene eseguita per aprire i file nel progetto e creare grafici delle capacità di processo.
Ri: Scripting per il layout del progettoIl codice del layout del progetto dovrebbe essere (più o meno) lo stesso di prima. La differenza in JMP 16 è che quando vai a salvare il tuo contenuto puoi salvarlo all'interno del file di progetto se lo desideri. Puoi farlo automaticamente da uno script, se vuoi, anche se avrei bisogno di sapere qualcosa in più sul tuo progetto per consigliare un metodo specifico.
Ri: Scripting per il layout del progettoJMP 16 migliora la piattaforma del progetto incorporando i file nel file del progetto per il salvataggio e il trasferimento. Questo è un bel miglioramento. Il mio script JMP 15 per spostare i file da un report in un file di progetto funziona ancora in 16 ma vorrei aggiornare per utilizzare le nuove funzionalità di JMP16. Non sono sicuro di come sarebbe la nuova struttura dello script per questo caso. Eventuali suggerimenti? In allegato è come appare ora il mio script (non eseguibile poiché tutti i file basati sul mio PC e la disputa dei dati sono stati eseguiti dalla parte precedente dello script.
Ri: Scripting per il layout del progettoPuoi impostare un particolare TabBox in modo che abbia una determinata scheda corrente utilizzando le normali API TabBox. (Il JMP Scripting Index interattivo è una buona risorsa per impararli). Ecco un modo per farlo con l'esempio con cui abbiamo lavorato:
Project = new project();
Move to Project( destination( Project ), windows( {table1, table2, table3} ));
Project << Set Layout(
H Splitter Box(
<<SET sizes=""></SET>
Salviamo semplicemente la casella della scheda in una variabile quando la creiamo, quindi usiamo quella variabile in seguito per impostare la scheda che vogliamo sia corrente.
Ri: Scripting per il layout del progettoCiao Aronne,
Finalmente ho funzionato, grazie mille!
Stavo cercando di impostare l'ID della finestra durante la creazione delle tabelle e del grafico e penso che non funzionasse. Quindi sta facendo il layout correttamente ora.
Solo un'altra domanda correlata: come faccio a visualizzare una scheda specifica? C'è un modo per ordinarli? Visualizza sempre la stessa tabella per impostazione predefinita, ma non è quella che voglio visualizzare.
Ri: Scripting per il layout del progettoSpiacente, non funziona ancora.Ecco un esempio del primo metodo, utilizzando (principalmente) il tuo script e una tabella di dati di esempio:
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>
Ed ecco un modo per farlo senza impostare gli 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>
Infine, ecco una versione che evita il Move to Project() aprendo le finestre nel progetto dall'inizio:
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>
Si spera che uno di questi possa essere modificato per funzionare con il tuo script.
Ri: Scripting per il layout del progettoCiao Aronne,
Ho provato quello che hai suggerito, ma ancora senza fortuna, stesso messaggio di errore.
Quello che non capisco è: ho creato una nuova finestra, quindi ho utilizzato Imposta ID finestra per assegnargli un ID, ma quell'ID non sembra essere riconosciuto da Tab Box().
Ri: Scripting per il layout del progettoColpa mia, penso. Get Window() deve sapere dove cercare (poiché le finestre nel progetto possono avere gli stessi titoli delle finestre al di fuori di esso). Quindi invece di
Get Window("Table1")
(che sta cercando una finestra chiamata "Table1" non in un progetto), dobbiamo usare
Get Window(Project(Project), "Table1")
dove l'interno "Progetto" è il nome che hai scelto per la variabile del tuo progetto nella parte superiore del tuo script:
Project = new project();
Tutti insieme, qualcosa del genere dovrebbe funzionare:
Tab Page Box(
Window ID( Get Window(Project(project), "Table1") << Get Window ID())
)
E sì, questo è sicuramente qualcosa che speriamo di rendere più semplice in una futura versione di JMP. 
Ri: Scripting per il layout del progettoGrazie per l'aiuto. Ancora difficoltà, mi dispiace sono un principiante in JSL...
Quando utilizzo la seconda opzione, ricevo un messaggio di errore sugli oggetti scriptabili:
Invia prevede un oggetto con script in accesso o valutazione di 'Send' , Get Window( "Table1" ) << /*###*/
Ottieni ID finestra() /*####*/
Presumo di dover rendere questi oggetti scriptabili, ma ancora una volta non sono sicuro di come farlo?
Ho anche provato la prima opzione che pensavo avrebbe funzionato. Sono riuscito a creare nuove finestre per ciascuno dei report e ho utilizzato il comando set window ID per fornire loro un ID, tuttavia non funziona ancora.
Ri: Scripting per il layout del progettoHai ragione: quei GUID sarebbero diversi ogni volta. Non ti annoierò con i dettagli del motivo per cui non abbiamo utilizzato solo i titoli delle finestre, ma c'è una buona (sebbene complicata) ragione per gli ID. La cosa migliore da fare quando si scrive manualmente un progetto in questo modo è impostare gli ID delle finestre in precedenza nello script utilizzando
mywindow << Set Window ID("window1");
o usa Ottieni ID finestra() direttamente nel tuo layout:
Tab Page Box(
Title( "Table1" ),
Window ID( Get Window("Table1") << Get Window ID())
)
Nota che il Title() lì è usato solo per stampare un messaggio più amichevole se la finestra con l'ID dato non può essere trovata, e per rendere le cose un po' più leggibili dall'uomo. Non fa nulla di funzionale, quindi puoi andare avanti e lasciarlo fuori se questo ti semplifica la vita.
Ri: Scripting per il layout del progettoCiao Aronne,
Grazie per questo. Non sapevo come ottenere il layout della sceneggiatura, quindi è fantastico!
Quindi ho fatto questo, e il problema che ho è che nel registro, ciascuna delle schede ha un aspetto simile a questo:
Tab Page Box(
Title( "Table1" ),
Window ID( "e516a5e8-d5c2-954e-90a6-ba6b719dae98" )
Ho rimosso tutti i bit dell'ID della finestra, ma continua a non funzionare, quindi presumo che abbia bisogno del bit dell'ID della finestra. Tuttavia, questi numeri ID di finestra sembrano combinazioni di lettere e numeri casuali che saranno diversi ogni volta che viene eseguito lo script, quindi non posso specificarli in anticipo. C'è un modo per trovare gli ID delle finestre aperte? Ho cercato come farlo ma non riesco a vedere come farlo.
Ri: Scripting per il layout del progettoUno dei modi migliori per scrivere layout di progetto in JSL è aprire il progetto, utilizzare l'interfaccia drag and drop per impostare la disposizione desiderata e quindi salvare il layout utilizzando JSL. Per fare ciò, crea un nuovo script JSL (all'esterno del progetto), quindi eseguilo
Get Project("Untitled") << Get Layout();
O
Get Project(1) << Get Layout();
utilizzando il titolo o l'indice del progetto di cui vuoi ottenere il layout. Questo scaricherà il layout del progetto di riferimento nel registro, che puoi quindi adattare per lavorare con lo script di creazione del progetto.
(Puoi fare la stessa cosa dall'interno di un progetto e puoi persino usare la scorciatoia [this project()] per eseguire il comando, ma il layout risultante includerà la finestra dello script che hai aperto per farlo, quindi è spesso più semplice farlo dall'esterno).